From e83a145316fa7798c93a9dc53cafdaa8bafa0451 Mon Sep 17 00:00:00 2001 From: Bruno Thalmann Date: Sun, 5 Mar 2017 08:58:29 +0100 Subject: [PATCH 001/541] Added install PyT via setup.py --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4cab4be1..257a11a7 100644 --- a/README.md +++ b/README.md @@ -4,12 +4,23 @@ Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -Features planned: +Features: - Detect Command injection - Detect SQL injection - Detect XSS - Detect directory traversal - +- Get a control flow graph +- Get a def-use and/or a use-def chain +- Search GitHub and analyse hits with PyT +- Scan intraprocedural or interprocedural +- A lot of customisation possible + +# Install +1. git clone https://github.com/python-security/pyt.git +2. python setup.py install +3. pyt -h + +# Usage from source Using it like a user: `python -m pyt -f example/vulnerable_code/XSS_call.py save -du` @@ -19,7 +30,6 @@ Running an individual test file: `python -m unittest tests.import_test` Running an individual test: `python -m unittest tests.import_test.ImportTest.test_import` -Work in progress # Contributions Join our slack group: https://pyt-dev.slack.com/ From 6ae898f5ec2f8946bbc3927bb70934e433585dc4 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 10 Mar 2017 18:08:51 -0500 Subject: [PATCH 002/541] [fix]Fixed liveness test, no args exception, style --- pyt/__main__.py | 2 +- pyt/constraint_table.py | 4 ++-- pyt/fixed_point.py | 20 +++++++----------- pyt/lattice.py | 3 ++- pyt/liveness.py | 22 +++++++++----------- pyt/reaching_definitions.py | 3 +-- tests/analysis_base_test_case.py | 7 ++++--- tests/liveness_test.py | 35 +++++++++++++++----------------- 8 files changed, 43 insertions(+), 53 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index d62eb861..27e18b95 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -38,7 +38,7 @@ subparsers = parser.add_subparsers() -entry_group = parser.add_mutually_exclusive_group() +entry_group = parser.add_mutually_exclusive_group(required=True) entry_group.add_argument('-f', '--filepath', help='Path to the file that should be analysed.', type=str) diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index b720e893..26459bcd 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -1,6 +1,6 @@ """Global lookup table for constraints. -Uses cfg node as key and operates on bitvectors in form of ints.""" +Uses cfg node as key and operates on bitvectors in the form of ints.""" constraint_table = dict() @@ -12,7 +12,7 @@ def initialize_constraint_table(cfg_list): def constraint_join(cfg_nodes): - """Looks up all cfg_nodes and joines the bitvectors by using logical or.""" + """Looks up all cfg_nodes and joins the bitvectors by using logical or.""" r = 0 for e in cfg_nodes: r = r | constraint_table[e] diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 1a27b162..68e11a7b 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -18,21 +18,15 @@ def fixpoint_runner(self): q = self.cfg.nodes while q != []: - x_i = constraint_table[q[0]] - - # y = F_i(x_1, ..., x_n): - self.analysis.fixpointmethod(q[0]) - # y = q[0].new_constraint - y = constraint_table[q[0]] - # x_i = q[0].old_constraint + x_i = constraint_table[q[0]] # x_i = q[0].old_constraint + self.analysis.fixpointmethod(q[0]) # y = F_i(x_1, ..., x_n); + y = constraint_table[q[0]] # y = q[0].new_constraint if not self.analysis.equal(y, x_i): - # for (v in dep(v_i)) q.append(v): - for node in self.analysis.dep(q[0]): - q.append(node) - # q[0].old_constraint = q[0].new_constraint # x_1 = y - constraint_table[q[0]] = y - q = q[1:] # q = q.tail() + for node in self.analysis.dep(q[0]): # for (v in dep(v_i)) + q.append(node) # q.append(v): + constraint_table[q[0]] = y # q[0].old_constraint = q[0].new_constraint # x_i = y + q = q[1:] # q = q.tail() # The list minus the head def analyse(cfg_list, *, analysis_type): diff --git a/pyt/lattice.py b/pyt/lattice.py index c8ee8a67..f27cadda 100644 --- a/pyt/lattice.py +++ b/pyt/lattice.py @@ -16,6 +16,7 @@ def get_elements(self, number): if number == 0: return r + # Turn number into a binary string of length len(self.bv2el) for i, x in enumerate(format(number, '0' + str(len(self.bv2el)) + 'b')): if x == '1': @@ -24,7 +25,7 @@ def get_elements(self, number): def in_constraint(self, node1, node2): """Checks if node1 is in node2's constraints - For instance node1 = 010 and node2 = 110: + For instance, if node1 = 010 and node2 = 110: 010 & 110 = 010 -> has the element.""" constraint = constraint_table[node2] diff --git a/pyt/liveness.py b/pyt/liveness.py index 6b4c7d60..f8eb0209 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -1,10 +1,10 @@ import ast -from .base_cfg import AssignmentNode, EntryOrExitNode from .analysis_base import AnalysisBase -from .lattice import Lattice -from .constraint_table import constraint_table, constraint_join from .ast_helper import get_call_names_as_string +from .base_cfg import AssignmentNode, EntryOrExitNode +from .constraint_table import constraint_join, constraint_table +from .lattice import Lattice from .vars_visitor import VarsVisitor @@ -27,12 +27,10 @@ def is_output(self, cfg_node): return False def is_condition(self, cfg_node): - if isinstance(cfg_node.ast_node, ast.While): + if isinstance(cfg_node.ast_node, (ast.If, ast.While)): return True elif self.is_output(cfg_node): return True - elif isinstance(cfg_node.ast_node, ast.If): - return True return False def remove_id_assignment(self, JOIN, cfg_node): @@ -48,7 +46,8 @@ def remove_id_assignment(self, JOIN, cfg_node): lvars.extend(vv.result) for var in lvars: - if var in self.lattice.get_elements(JOIN): # Check if var in JOIN + if var in self.lattice.get_elements(JOIN): + # Remove var from JOIN JOIN = JOIN ^ self.lattice.el2bv[var] return JOIN @@ -59,6 +58,7 @@ def add_vars_assignment(self, JOIN, cfg_node): rvars.extend(vv.result) for var in rvars: + # Add var to JOIN JOIN = JOIN | self.lattice.el2bv[var] return JOIN @@ -83,7 +83,6 @@ def add_vars_conditional(self, JOIN, cfg_node): return JOIN def fixpointmethod(self, cfg_node): - if isinstance(cfg_node, EntryOrExitNode) and 'Exit' in cfg_node.label: constraint_table[cfg_node] = 0 elif isinstance(cfg_node, AssignmentNode): @@ -104,10 +103,9 @@ def dep(self, q_1): yield node def get_lattice_elements(cfg_nodes): - """Returns all assignment nodes as they are the only lattice elements - in the reaching definitions analysis. - This is a static method which is overwritten from the base class. - """ + """Returns all variables as they are the only lattice elements + in the liveness analysis. + This is a static method which is overwritten from the base class.""" lattice_elements = set() # set() to avoid duplicates for node in (node for node in cfg_nodes if node.ast_node): vv = VarsVisitor() diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index b8cdaa9d..bb1fc9c3 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -44,8 +44,7 @@ def dep(self, q_1): def get_lattice_elements(cfg_nodes): """Returns all assignment nodes as they are the only lattice elements in the reaching definitions analysis. - This is a static method which is overwritten from the base class. - """ + This is a static method which is overwritten from the base class.""" for node in cfg_nodes: if isinstance(node, AssignmentNode): yield node diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 1db614a6..8ec3fbff 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -13,10 +13,11 @@ def setUp(self): self.cfg = None def assertInCfg(self, connections, lattice): - ''' Assert that all connections in the connections list exists in the cfg, - as well as all connections not in the list do not exist + """Assert that all connections in the connections list exists in the cfg, + as well as all connections not in the list do not exist. - connections is a list of tuples where the node at index 0 of the tuple has to be in the new_constraintset of the node a index 1 of the tuple''' + connections is a list of tuples where the node at index 0 of the tuple has + to be in the new_constraint set of the node at index 1 of the tuple.""" for connection in connections: self.assertEqual(lattice.in_constraint(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]]), True, str(connection) + " expected to be connected") nodes = len(self.cfg.nodes) diff --git a/tests/liveness_test.py b/tests/liveness_test.py index 2647b666..fba08ceb 100644 --- a/tests/liveness_test.py +++ b/tests/liveness_test.py @@ -7,28 +7,25 @@ class LivenessTest(AnalysisBaseTestCase): def test_example(self): lattice = self.run_analysis('example/example_inputs/example.py', LivenessAnalysis) - x = 0b1 - y = 0b10 - z = 0b100 + x = 0b1 # 1 + y = 0b10 # 2 + z = 0b100 # 4 lattice.el2bv['x'] = x lattice.el2bv['y'] = y lattice.el2bv['z'] = z - """ - self.assertEqual(constraint_table[self.cfg.nodes[0]], 0) - self.assertEqual(constraint_table[self.cfg.nodes[1]], 0) - self.assertEqual(constraint_table[self.cfg.nodes[2]], x) - self.assertEqual(constraint_table[self.cfg.nodes[3]], x) - self.assertEqual(constraint_table[self.cfg.nodes[4]], x) - self.assertEqual(constraint_table[self.cfg.nodes[5]], x | y) - self.assertEqual(constraint_table[self.cfg.nodes[6]], x | y) - self.assertEqual(constraint_table[self.cfg.nodes[7]], x) - self.assertEqual(constraint_table[self.cfg.nodes[8]], x | z) - self.assertEqual(constraint_table[self.cfg.nodes[9]], x | z) - self.assertEqual(constraint_table[self.cfg.nodes[10]], x | z) - self.assertEqual(constraint_table[self.cfg.nodes[11]], x) - self.assertEqual(constraint_table[self.cfg.nodes[12]], 0) - + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[0]]), []) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[1]]), []) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[2]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[3]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[4]]), ['x']) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[5]])), set(['x','y'])) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[6]])), set(['x','y'])) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[7]]), ['x']) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[8]])), set(['x','z'])) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[9]])), set(['x','z'])) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[10]])), set(['x','z'])) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[11]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[12]]), []) self.assertEqual(len(lattice.el2bv), 3) - """ From 1485982e5784004d5b253ad96b164fb879753013 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 17 Mar 2017 19:58:47 -0400 Subject: [PATCH 003/541] relative imports, is_python_module to is_python_file, add all tuples to project handler test, style --- example/import_test_project/foo/bar.py | 2 + example/import_test_project/main.py | 2 + .../other_dir/relative_between_folders.py | 3 + .../import_test_project/relative_level_1.py | 4 + .../import_test_project/relative_level_2.py | 4 + pyt/interprocedural_cfg.py | 48 ++++++++--- pyt/module_definitions.py | 9 +- pyt/project_handler.py | 18 ++-- tests/base_test_case.py | 16 ++-- tests/import_test.py | 83 ++++++++++++++++++- tests/label_visitor_test.py | 2 +- tests/project_handler_test.py | 14 ++-- tests/vars_visitor_test.py | 2 +- 13 files changed, 169 insertions(+), 38 deletions(-) create mode 100644 example/import_test_project/foo/bar.py create mode 100644 example/import_test_project/other_dir/relative_between_folders.py create mode 100644 example/import_test_project/relative_level_1.py create mode 100644 example/import_test_project/relative_level_2.py diff --git a/example/import_test_project/foo/bar.py b/example/import_test_project/foo/bar.py new file mode 100644 index 00000000..13dbf5ab --- /dev/null +++ b/example/import_test_project/foo/bar.py @@ -0,0 +1,2 @@ +def H(s): + return s diff --git a/example/import_test_project/main.py b/example/import_test_project/main.py index 3f6a604d..f54bfa9c 100644 --- a/example/import_test_project/main.py +++ b/example/import_test_project/main.py @@ -1,4 +1,6 @@ from A import B import A +import D b = B('str') c = A.B('sss') +d = D.a('hey') diff --git a/example/import_test_project/other_dir/relative_between_folders.py b/example/import_test_project/other_dir/relative_between_folders.py new file mode 100644 index 00000000..73b1a4ec --- /dev/null +++ b/example/import_test_project/other_dir/relative_between_folders.py @@ -0,0 +1,3 @@ +from ..foo.bar import H + +result = H('hey') diff --git a/example/import_test_project/relative_level_1.py b/example/import_test_project/relative_level_1.py new file mode 100644 index 00000000..680f36f2 --- /dev/null +++ b/example/import_test_project/relative_level_1.py @@ -0,0 +1,4 @@ +from .A import B +import A +b = B('str') +c = A.B('sss') diff --git a/example/import_test_project/relative_level_2.py b/example/import_test_project/relative_level_2.py new file mode 100644 index 00000000..e0f231ff --- /dev/null +++ b/example/import_test_project/relative_level_2.py @@ -0,0 +1,4 @@ +from ..A import B +import A +b = B('str') +c = A.B('sss') diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 19b20911..bb7ec504 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -1,4 +1,5 @@ import ast +import os.path from collections import namedtuple from .ast_helper import Arguments, generate_ast, get_call_names_as_string @@ -326,7 +327,7 @@ def add_function(self, call_node, definition): def get_function_nodes(self, definition): length = len(self.nodes) previous_node = self.nodes[-1] - entry_node = self.append_node(EntryOrExitNode("Entry " + + entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) previous_node.connect(entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) @@ -364,7 +365,7 @@ def add_class(self, call_node, def_node): previous_node = self.nodes[-1] - entry_node = self.append_node(EntryOrExitNode("Entry " + def_node.name)) + entry_node = self.append_node(EntryOrExitNode("Class Entry " + def_node.name)) previous_node.connect(entry_node) @@ -391,9 +392,9 @@ def add_module(self, module, module_name, local_names): module_definitions = ModuleDefinitions(local_names, module_name) self.module_definitions_stack.append(module_definitions) - self.append_node(EntryOrExitNode('Entry ' + module[0])) + self.append_node(EntryOrExitNode('Module Entry ' + module[0])) self.visit(tree) - exit_node = self.append_node(EntryOrExitNode('Exit ' + module[0])) + exit_node = self.append_node(EntryOrExitNode('Module Exit ' + module[0])) self.module_definitions_stack.pop() self.filenames.pop() @@ -419,13 +420,40 @@ def alias_handler(self, alias_list): l.append(alias.name) return l + def handle_relative_import(self, node): + """ + from A means node.level == 0 + from .A means node.level == 1 + """ + no_file = os.path.abspath(os.path.join(self.filenames[-1], os.pardir)) + + if node.level == 1: + # Same directory as current file + filename_with_dir = no_file+'/'+node.module.replace('.','/')+'.py' + else: + parent = os.path.abspath(os.path.join(no_file, os.pardir)) + + if node.level > 2: + level = node.level + while level > 2: + parent = os.path.abspath(os.path.join(parent, os.pardir)) + level = level - 1 + filename_with_dir = parent+'/'+node.module.replace('.','/')+'.py' + + return self.add_module((node.module, filename_with_dir), None, + self.alias_handler(node.names)) + def visit_ImportFrom(self, node): - for module in self.local_modules: - if node.module == module[0]: - return self.add_module(module, None, - self.alias_handler(node.names)) - for module in self.project_modules: - if node.module == module[0]: + # Is it relative? + if node.level > 0: + return self.handle_relative_import(node) + else: + for module in self.local_modules: + if node.module == module[0]: + return self.add_module(module, None, + self.alias_handler(node.names)) + for module in self.project_modules: + if node.module == module[0]: return self.add_module(module, None, self.alias_handler(node.names)) return IgnoredNode() diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index cd27783d..1b08f149 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -32,7 +32,6 @@ def __str__(self): class LocalModuleDefinition(ModuleDefinition): """A local definition.""" - pass @@ -77,8 +76,8 @@ def get_definition(self, name): for definition in self.definitions: if definition.name == name: return definition - - def set_defintion_node(self, node, name): + + def set_definition_node(self, node, name): """Set definition by name.""" definition = self.get_definition(name) if definition: @@ -88,7 +87,7 @@ def __str__(self): module = 'NoModuleName' if self.module_name: module = self.module_name - + return 'Definitions: ' + ' '.join([str(definition) for definition in self.definitions]) + '\nmodule_name: ' + module + '\n' - + diff --git a/pyt/project_handler.py b/pyt/project_handler.py index 7993ed38..180de198 100644 --- a/pyt/project_handler.py +++ b/pyt/project_handler.py @@ -1,44 +1,52 @@ """Generates a list of CFGs from a path. The module finds all python modules and generates an ast for them. -Then """ import ast import os -def is_python_module(path): +def is_python_file(path): if os.path.splitext(path)[1] == '.py': return True return False local_modules = list() def get_directory_modules(directory, flush_local_modules=False): + """Return a list containing tuples of + e.g. ('__init__', 'example/import_test_project/__init__.py') + """ if local_modules and os.path.dirname(local_modules[0][1]) == directory: return local_modules if flush_local_modules: del local_modules[:] + if not os.path.isdir(directory): + # example/import_test_project/A.py -> example/import_test_project directory = os.path.dirname(directory) if directory == '': return local_modules for path in os.listdir(directory): - if is_python_module(path): + if is_python_file(path): + # A.py -> A module_name = os.path.splitext(path)[0] local_modules.append((module_name, os.path.join(directory, path))) return local_modules def get_python_modules(path): + """Return a list containing tuples of + e.g. ('test_project.utils', 'example/test_project/utils.py') + """ module_root = os.path.split(path)[1] modules = list() for root, directories, filenames in os.walk(path): for filename in filenames: - if is_python_module(filename): + if is_python_file(filename): directory = os.path.dirname(os.path.realpath(os.path.join(root, filename))).split(module_root)[-1].replace(os.sep, '.') directory = directory.replace('.', '', 1) if directory: @@ -58,6 +66,6 @@ def get_project_module_names(path): def is_directory(path): if os.path.isdir(path): return True - elif is_python_module(path): + elif is_python_file(path): return False raise Exception(path, ' has to be a python module or a directory.') diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 8b79bb11..db2c5c46 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -10,10 +10,10 @@ class BaseTestCase(unittest.TestCase): """A base class that has helper methods for testing PyT.""" def assertInCfg(self, connections): - ''' Assert that all connections in the connections list exists in the cfg, + """ Assert that all connections in the connections list exists in the cfg, as well as all connections not in the list do not exist - connections is a list of tuples where the node at index 0 of the tuple has to be in the new_constraintset of the node a index 1 of the tuple''' + connections is a list of tuples where the node at index 0 of the tuple has to be in the new_constraintset of the node a index 1 of the tuple""" for connection in connections: self.assertIn(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]].outgoing, str(connection) + " expected to be connected") self.assertIn(self.cfg.nodes[connection[1]], self.cfg.nodes[connection[0]].ingoing, str(connection) + " expected to be connected") @@ -27,9 +27,9 @@ def assertInCfg(self, connections): self.assertNotIn(self.cfg.nodes[sets], self.cfg.nodes[element].ingoing, "(%s <- %s)" % (sets, element) + " expected to be disconnected") def assertConnected(self, node, successor): - '''Asserts that a node is connected to its successor. + """Asserts that a node is connected to its successor. This means that node has successor in its outgoing and - successor has node in its ingoing.''' + successor has node in its ingoing.""" self.assertIn(successor, node.outgoing, '\n%s was NOT found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']') @@ -38,9 +38,9 @@ def assertConnected(self, node, successor): '\n%s was NOT found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']') def assertNotConnected(self, node, successor): - '''Asserts that a node is not connected to its successor. + """Asserts that a node is not connected to its successor. This means that node does not the successor in its outgoing and - successor does not have the node in its ingoing.''' + successor does not have the node in its ingoing.""" self.assertNotIn(successor, node.outgoing, '\n%s was mistakenly found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']') @@ -52,8 +52,8 @@ def assertLineNumber(self, node, line_number): self.assertEqual(node.line_number, line_number) def cfg_list_to_dict(self, list): - '''This method converts the CFG list to a dict, making it easier to find nodes to test. - This method assumes that no nodes in the code have the same label''' + """This method converts the CFG list to a dict, making it easier to find nodes to test. + This method assumes that no nodes in the code have the same label""" return {x.label: x for x in list} def assert_length(self, _list, *, expected_length): diff --git a/tests/import_test.py b/tests/import_test.py index 7312e196..c2ba8f88 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -2,7 +2,7 @@ import os from .base_test_case import BaseTestCase -from pyt.base_cfg import get_call_names_as_string +from pyt.ast_helper import get_call_names_as_string from pyt.project_handler import get_directory_modules, get_python_modules @@ -15,9 +15,86 @@ def test_import(self): self.cfg_create_from_file(path, project_modules, local_modules) - cfg_list = [self.cfg] + EXPECTED = ['Entry module', + 'Module Entry A', + 'Module Exit A', + 'Module Entry A', + 'Module Exit A', + 'temp_1_s = \'str\'', + 's = temp_1_s', + 'Function Entry B', + 'ret_B = s', + 'Exit B', + '¤call_1 = ret_B', + 'b = ¤call_1', + 'c = A.B(\'sss\')', + 'd = D.a(\'hey\')', + 'Exit module'] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_relative_level_1(self): + path = os.path.normpath('example/import_test_project/relative_level_1.py') - #adaptor_type = FlaskAdaptor(cfg_list) + project_modules = get_python_modules(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ['Entry module', + 'Module Entry A', + 'Module Exit A', + 'Module Entry A', + 'Module Exit A', + 'temp_1_s = \'str\'', + 's = temp_1_s', + 'Function Entry B', + 'ret_B = s', + 'Exit B', + '¤call_1 = ret_B', + 'b = ¤call_1', + 'c = A.B(\'sss\')', + 'Exit module'] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_relative_level_2(self): + path = os.path.normpath('example/import_test_project/relative_level_2.py') + + project_modules = get_python_modules(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + try: + self.cfg_create_from_file(path, project_modules, local_modules) + except Exception as e: + self.assertTrue("OSError('Input needs to be a file. Path: " in repr(e)) + self.assertTrue("example/A.py" in repr(e)) + + def test_relative_between_folders(self): + file_path = os.path.normpath('example/import_test_project/other_dir/relative_between_folders.py') + project_path = os.path.normpath('example/import_test_project/h.py') + + project_modules = get_python_modules(os.path.dirname(project_path)) + local_modules = get_directory_modules(os.path.dirname(project_path)) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ['Entry module', + 'Module Entry foo.bar', + 'Module Exit foo.bar', + 'temp_1_s = \'hey\'', + 's = temp_1_s', + 'Function Entry H', + 'ret_H = s', + 'Exit H', + '¤call_1 = ret_H', + 'result = ¤call_1', + 'Exit module'] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) def test_get_call_names_single(self): m = ast.parse('hi(a)') diff --git a/tests/label_visitor_test.py b/tests/label_visitor_test.py index b4a6e837..6ee44bb4 100644 --- a/tests/label_visitor_test.py +++ b/tests/label_visitor_test.py @@ -5,7 +5,7 @@ class LabelVisitorTestCase(unittest.TestCase): - '''Baseclass for LabelVisitor tests''' + """Baseclass for LabelVisitor tests""" def perform_labeling_on_expression(self, expr): obj = ast.parse(expr) diff --git a/tests/project_handler_test.py b/tests/project_handler_test.py index dfe1b67b..ba3332dd 100644 --- a/tests/project_handler_test.py +++ b/tests/project_handler_test.py @@ -2,18 +2,18 @@ import unittest from pprint import pprint -from pyt.project_handler import get_python_modules, is_python_module +from pyt.project_handler import get_python_modules, is_python_file class ProjectHandlerTest(unittest.TestCase): """Tests for the project handler.""" - def test_is_python_module(self): + def test_is_python_file(self): python_module = './project_handler_test.py' not_python_module = '../.travis.yml' - self.assertEqual(is_python_module(python_module), True) - self.assertEqual(is_python_module(not_python_module), False) + self.assertEqual(is_python_file(python_module), True) + self.assertEqual(is_python_file(not_python_module), False) def test_get_python_modules(self): project_folder = os.path.normpath(os.path.join('example', 'test_project')) @@ -22,13 +22,15 @@ def test_get_python_modules(self): folder = 'folder' directory = 'directory' + # get_python_modules will return a list containing tuples of + # e.g. ('test_project.utils', 'example/test_project/utils.py') modules = get_python_modules(project_folder) app_path = os.path.join(project_folder, 'app.py') utils_path = os.path.join(project_folder,'utils.py') exceptions_path = os.path.join(project_folder, 'exceptions.py') some_path = os.path.join(project_folder, folder, 'some.py') - indhold_path = os.path.join(project_folder, folder, 'indhold.py') + indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') app_name = project_namespace + '.' + 'app' utils_name = project_namespace + '.' + 'utils' @@ -40,10 +42,12 @@ def test_get_python_modules(self): utils_tuple = (utils_name, utils_path) exceptions_tuple = (exceptions_name, exceptions_path) some_tuple = (some_name, some_path) + indhold_tuple = (indhold_name, indhold_path) self.assertIn(app_tuple, modules) self.assertIn(utils_tuple, modules) self.assertIn(exceptions_tuple, modules) self.assertIn(some_tuple, modules) + self.assertIn(indhold_tuple, modules) self.assertEqual(len(modules), 5) diff --git a/tests/vars_visitor_test.py b/tests/vars_visitor_test.py index 4df37acf..9232b016 100644 --- a/tests/vars_visitor_test.py +++ b/tests/vars_visitor_test.py @@ -5,7 +5,7 @@ class VarsVisitorTestCase(unittest.TestCase): - '''Baseclass for VarsVisitor tests''' + """Baseclass for VarsVisitor tests""" def perform_vars_on_expression(self, expr): obj = ast.parse(expr) From 9fe4c2b5574f1f125c1cfb8ce19919e9437ee325 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 7 Apr 2017 21:29:26 -0400 Subject: [PATCH 004/541] [too much]interprocedural and importing rework --- .gitignore | 5 +- example/import_test_project/A.py | 6 + example/import_test_project/all.py | 6 + .../{ => all_folder}/__init__.py | 0 .../import_test_project/all_folder/has_all.py | 9 + .../import_test_project/all_folder/no_all.py | 5 + example/import_test_project/foo/bar.py | 2 +- example/import_test_project/from_directory.py | 3 + example/import_test_project/from_dot.py | 4 + .../{main.py => import.py} | 2 - example/import_test_project/import_as.py | 4 + example/import_test_project/init.py | 4 + .../init_file_folder/__init__.py | 1 + .../nested_folder/__init__.py | 1 + .../nested_nested_folder/can_you_see_me.py | 0 .../nested_folder/starbucks.py | 3 + .../import_test_project/multiple_files/A.py | 2 + .../import_test_project/multiple_files/B.py | 2 + .../import_test_project/multiple_files/C.py | 2 + .../import_test_project/multiple_files/D.py | 2 + .../multiple_files_with_aliases.py | 7 + .../multiple_functions_with_aliases.py | 6 + example/import_test_project/no_all.py | 6 + .../other_dir/from_dot_dot.py | 4 + .../relative_from_directory.py | 5 + .../nested_function_calls.py | 1 + example/vulnerable_code/command_injection.py | 4 +- .../inter_command_injection.py | 38 ++ .../inter_command_injection_2.py | 39 ++ .../absolute_from_file_command_injection.py | 20 + .../absolute_from_file_command_injection_2.py | 22 + .../absolute_from_file_does_not_exist.py | 22 + .../import_file_command_injection.py | 20 + .../import_file_command_injection_2.py | 22 + .../import_file_does_not_exist.py | 22 + ..._absolute_from_file_command_injection_3.py | 22 + ...ositive_import_file_command_injection_3.py | 22 + .../other_file.py | 12 + func_counter.py | 6 +- pydocstyle.py | 2 +- pyt/__main__.py | 6 +- pyt/base_cfg.py | 19 +- pyt/interprocedural_cfg.py | 134 +++++- pyt/module_definitions.py | 33 +- pyt/project_handler.py | 48 ++- pyt/vulnerabilities.py | 35 +- pyt/vulnerability_log.py | 2 +- setup.py | 2 +- tests/cfg_test.py | 8 +- tests/flask_adaptor_test.py | 11 +- tests/import_test.py | 387 +++++++++++++++--- tests/nested_functions_test.py | 20 + tests/project_handler_test.py | 57 ++- tests/vulnerabilities_across_files_test.py | 69 ++++ tests/vulnerabilities_test.py | 8 + 55 files changed, 1053 insertions(+), 151 deletions(-) create mode 100644 example/import_test_project/all.py rename example/import_test_project/{ => all_folder}/__init__.py (100%) create mode 100644 example/import_test_project/all_folder/has_all.py create mode 100644 example/import_test_project/all_folder/no_all.py create mode 100644 example/import_test_project/from_directory.py create mode 100644 example/import_test_project/from_dot.py rename example/import_test_project/{main.py => import.py} (68%) create mode 100644 example/import_test_project/import_as.py create mode 100644 example/import_test_project/init.py create mode 100755 example/import_test_project/init_file_folder/__init__.py create mode 100755 example/import_test_project/init_file_folder/nested_folder/__init__.py create mode 100644 example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py create mode 100755 example/import_test_project/init_file_folder/nested_folder/starbucks.py create mode 100644 example/import_test_project/multiple_files/A.py create mode 100644 example/import_test_project/multiple_files/B.py create mode 100644 example/import_test_project/multiple_files/C.py create mode 100644 example/import_test_project/multiple_files/D.py create mode 100644 example/import_test_project/multiple_files_with_aliases.py create mode 100644 example/import_test_project/multiple_functions_with_aliases.py create mode 100644 example/import_test_project/no_all.py create mode 100644 example/import_test_project/other_dir/from_dot_dot.py create mode 100644 example/import_test_project/relative_from_directory.py create mode 100644 example/nested_functions_code/nested_function_calls.py create mode 100644 example/vulnerable_code/inter_command_injection.py create mode 100644 example/vulnerable_code/inter_command_injection_2.py create mode 100644 example/vulnerable_code_across_files/absolute_from_file_command_injection.py create mode 100644 example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py create mode 100644 example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py create mode 100644 example/vulnerable_code_across_files/import_file_command_injection.py create mode 100644 example/vulnerable_code_across_files/import_file_command_injection_2.py create mode 100644 example/vulnerable_code_across_files/import_file_does_not_exist.py create mode 100644 example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py create mode 100644 example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py create mode 100644 example/vulnerable_code_across_files/other_file.py create mode 100644 tests/nested_functions_test.py create mode 100644 tests/vulnerabilities_across_files_test.py diff --git a/.gitignore b/.gitignore index 379b8a60..c99dd699 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# OS X +.DS_Store + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] @@ -61,4 +64,4 @@ target/ #Ipython Notebook .ipynb_checkpoints *~ -*# \ No newline at end of file +*# diff --git a/example/import_test_project/A.py b/example/import_test_project/A.py index faa0076d..574c08cb 100644 --- a/example/import_test_project/A.py +++ b/example/import_test_project/A.py @@ -1,2 +1,8 @@ def B(s): return s + +def C(s): + return s + "see" + +def D(s): + return s + "dee" diff --git a/example/import_test_project/all.py b/example/import_test_project/all.py new file mode 100644 index 00000000..e346e801 --- /dev/null +++ b/example/import_test_project/all.py @@ -0,0 +1,6 @@ +from all_folder.has_all import * + + +LemonGrass() +# MangoYuzu is not defined because it is not in __all__ +MangoYuzu() diff --git a/example/import_test_project/__init__.py b/example/import_test_project/all_folder/__init__.py similarity index 100% rename from example/import_test_project/__init__.py rename to example/import_test_project/all_folder/__init__.py diff --git a/example/import_test_project/all_folder/has_all.py b/example/import_test_project/all_folder/has_all.py new file mode 100644 index 00000000..c809fec4 --- /dev/null +++ b/example/import_test_project/all_folder/has_all.py @@ -0,0 +1,9 @@ +__all__ = [ + 'LemonGrass' +] + +def LemonGrass(): + print ('LemonGrass') + +def MangoYuzu(): + print ('MangoYuzu') diff --git a/example/import_test_project/all_folder/no_all.py b/example/import_test_project/all_folder/no_all.py new file mode 100644 index 00000000..8c4db125 --- /dev/null +++ b/example/import_test_project/all_folder/no_all.py @@ -0,0 +1,5 @@ +def _LemonGrass(): + print ('LemonGrass') + +def MangoYuzu(): + print ('MangoYuzu') diff --git a/example/import_test_project/foo/bar.py b/example/import_test_project/foo/bar.py index 13dbf5ab..f648405f 100644 --- a/example/import_test_project/foo/bar.py +++ b/example/import_test_project/foo/bar.py @@ -1,2 +1,2 @@ def H(s): - return s + return s + "end" diff --git a/example/import_test_project/from_directory.py b/example/import_test_project/from_directory.py new file mode 100644 index 00000000..35bc0a75 --- /dev/null +++ b/example/import_test_project/from_directory.py @@ -0,0 +1,3 @@ +from foo import bar + +bar.H('hey') diff --git a/example/import_test_project/from_dot.py b/example/import_test_project/from_dot.py new file mode 100644 index 00000000..1c68bd49 --- /dev/null +++ b/example/import_test_project/from_dot.py @@ -0,0 +1,4 @@ +from . import A + + +c = A.B('sss') diff --git a/example/import_test_project/main.py b/example/import_test_project/import.py similarity index 68% rename from example/import_test_project/main.py rename to example/import_test_project/import.py index f54bfa9c..3f6a604d 100644 --- a/example/import_test_project/main.py +++ b/example/import_test_project/import.py @@ -1,6 +1,4 @@ from A import B import A -import D b = B('str') c = A.B('sss') -d = D.a('hey') diff --git a/example/import_test_project/import_as.py b/example/import_test_project/import_as.py new file mode 100644 index 00000000..37045505 --- /dev/null +++ b/example/import_test_project/import_as.py @@ -0,0 +1,4 @@ +from A import B +import A as foo +b = B('str') +c = foo.B('sss') diff --git a/example/import_test_project/init.py b/example/import_test_project/init.py new file mode 100644 index 00000000..bf2914a3 --- /dev/null +++ b/example/import_test_project/init.py @@ -0,0 +1,4 @@ +import init_file_folder + + +init_file_folder.Eataly() diff --git a/example/import_test_project/init_file_folder/__init__.py b/example/import_test_project/init_file_folder/__init__.py new file mode 100755 index 00000000..f9b27ddb --- /dev/null +++ b/example/import_test_project/init_file_folder/__init__.py @@ -0,0 +1 @@ +from .nested_folder import StarbucksVisitor as Eataly diff --git a/example/import_test_project/init_file_folder/nested_folder/__init__.py b/example/import_test_project/init_file_folder/nested_folder/__init__.py new file mode 100755 index 00000000..b1378324 --- /dev/null +++ b/example/import_test_project/init_file_folder/nested_folder/__init__.py @@ -0,0 +1 @@ +from .starbucks import StarbucksVisitor diff --git a/example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py b/example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py new file mode 100644 index 00000000..e69de29b diff --git a/example/import_test_project/init_file_folder/nested_folder/starbucks.py b/example/import_test_project/init_file_folder/nested_folder/starbucks.py new file mode 100755 index 00000000..cb428b48 --- /dev/null +++ b/example/import_test_project/init_file_folder/nested_folder/starbucks.py @@ -0,0 +1,3 @@ +class StarbucksVisitor(object): + def __init__(self): + print ("Iced Mocha") diff --git a/example/import_test_project/multiple_files/A.py b/example/import_test_project/multiple_files/A.py new file mode 100644 index 00000000..b9c3d8bf --- /dev/null +++ b/example/import_test_project/multiple_files/A.py @@ -0,0 +1,2 @@ +def cosme(s): + return s + "aaa" diff --git a/example/import_test_project/multiple_files/B.py b/example/import_test_project/multiple_files/B.py new file mode 100644 index 00000000..4ac10ecb --- /dev/null +++ b/example/import_test_project/multiple_files/B.py @@ -0,0 +1,2 @@ +def foo(s): + return s + "bee" diff --git a/example/import_test_project/multiple_files/C.py b/example/import_test_project/multiple_files/C.py new file mode 100644 index 00000000..f4170c9e --- /dev/null +++ b/example/import_test_project/multiple_files/C.py @@ -0,0 +1,2 @@ +def foo(s): + return s + "see" diff --git a/example/import_test_project/multiple_files/D.py b/example/import_test_project/multiple_files/D.py new file mode 100644 index 00000000..64c47ce2 --- /dev/null +++ b/example/import_test_project/multiple_files/D.py @@ -0,0 +1,2 @@ +def foo(s): + return s + "dee" diff --git a/example/import_test_project/multiple_files_with_aliases.py b/example/import_test_project/multiple_files_with_aliases.py new file mode 100644 index 00000000..7b4eeb72 --- /dev/null +++ b/example/import_test_project/multiple_files_with_aliases.py @@ -0,0 +1,7 @@ +from .multiple_files import A, B as keens, C as per_se, D as duck_house + + +a = A.cosme('tlayuda') +b = keens.foo('mutton') +c = per_se.foo('tasting') +d = duck_house.foo('peking') diff --git a/example/import_test_project/multiple_functions_with_aliases.py b/example/import_test_project/multiple_functions_with_aliases.py new file mode 100644 index 00000000..070352e9 --- /dev/null +++ b/example/import_test_project/multiple_functions_with_aliases.py @@ -0,0 +1,6 @@ +from .A import B as keens, C, D as duck_house + + +a = keens('mutton') +b = C('tasting') +c = duck_house('peking') diff --git a/example/import_test_project/no_all.py b/example/import_test_project/no_all.py new file mode 100644 index 00000000..2b12159f --- /dev/null +++ b/example/import_test_project/no_all.py @@ -0,0 +1,6 @@ +from all_folder.no_all import * + + +# _LemonGrass is not defined because it starts with _ +_LemonGrass() +MangoYuzu() diff --git a/example/import_test_project/other_dir/from_dot_dot.py b/example/import_test_project/other_dir/from_dot_dot.py new file mode 100644 index 00000000..25c16b51 --- /dev/null +++ b/example/import_test_project/other_dir/from_dot_dot.py @@ -0,0 +1,4 @@ +from .. import A + + +c = A.B('sss') diff --git a/example/import_test_project/relative_from_directory.py b/example/import_test_project/relative_from_directory.py new file mode 100644 index 00000000..f2bdf764 --- /dev/null +++ b/example/import_test_project/relative_from_directory.py @@ -0,0 +1,5 @@ +# Must be run as module via -m +from .foo import bar + + +bar.H('hey') diff --git a/example/nested_functions_code/nested_function_calls.py b/example/nested_functions_code/nested_function_calls.py new file mode 100644 index 00000000..f03398c0 --- /dev/null +++ b/example/nested_functions_code/nested_function_calls.py @@ -0,0 +1 @@ +abc = print(foo('bar')) diff --git a/example/vulnerable_code/command_injection.py b/example/vulnerable_code/command_injection.py index 90c65804..44c45d92 100644 --- a/example/vulnerable_code/command_injection.py +++ b/example/vulnerable_code/command_injection.py @@ -1,5 +1,5 @@ -from flask import Flask, request, render_template import subprocess +from flask import Flask, render_template, request app = Flask(__name__) @@ -28,7 +28,7 @@ def clean(): with open('menu.txt','r') as f: menu = f.read() - + return render_template('command_injection.html', menu=menu) if __name__ == '__main__': diff --git a/example/vulnerable_code/inter_command_injection.py b/example/vulnerable_code/inter_command_injection.py new file mode 100644 index 00000000..8cb2516d --- /dev/null +++ b/example/vulnerable_code/inter_command_injection.py @@ -0,0 +1,38 @@ +import subprocess +from flask import Flask, render_template, request + + +app = Flask(__name__) + +@app.route('/') +def index(): + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +def shell_the_arg(arg): + subprocess.call(arg, shell=True) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + shell_the_arg('echo ' + param + ' >> ' + 'menu.txt') + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +@app.route('/clean') +def clean(): + subprocess.call('echo Menu: > menu.txt', shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code/inter_command_injection_2.py b/example/vulnerable_code/inter_command_injection_2.py new file mode 100644 index 00000000..72c8062e --- /dev/null +++ b/example/vulnerable_code/inter_command_injection_2.py @@ -0,0 +1,39 @@ +import subprocess +from flask import Flask, render_template, request + + +app = Flask(__name__) + +@app.route('/') +def index(): + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +def return_the_arg(foo): + return foo + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = return_the_arg('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +@app.route('/clean') +def clean(): + subprocess.call('echo Menu: > menu.txt', shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/absolute_from_file_command_injection.py b/example/vulnerable_code_across_files/absolute_from_file_command_injection.py new file mode 100644 index 00000000..0f22a1f7 --- /dev/null +++ b/example/vulnerable_code_across_files/absolute_from_file_command_injection.py @@ -0,0 +1,20 @@ +from flask import Flask, render_template, request + +from other_file import shell_the_arg + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + shell_the_arg('echo ' + param + ' >> ' + 'menu.txt') + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py b/example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py new file mode 100644 index 00000000..916bf096 --- /dev/null +++ b/example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +from other_file import return_the_arg + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = return_the_arg('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py b/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py new file mode 100644 index 00000000..48202718 --- /dev/null +++ b/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +from other_file import does_not_exist + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = does_not_exist('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/import_file_command_injection.py b/example/vulnerable_code_across_files/import_file_command_injection.py new file mode 100644 index 00000000..c3ea7b76 --- /dev/null +++ b/example/vulnerable_code_across_files/import_file_command_injection.py @@ -0,0 +1,20 @@ +from flask import Flask, render_template, request + +import other_file + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + other_file.shell_the_arg('echo ' + param + ' >> ' + 'menu.txt') + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/import_file_command_injection_2.py b/example/vulnerable_code_across_files/import_file_command_injection_2.py new file mode 100644 index 00000000..e915fa49 --- /dev/null +++ b/example/vulnerable_code_across_files/import_file_command_injection_2.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +import other_file + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = other_file.return_the_arg('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/import_file_does_not_exist.py b/example/vulnerable_code_across_files/import_file_does_not_exist.py new file mode 100644 index 00000000..570cc4c0 --- /dev/null +++ b/example/vulnerable_code_across_files/import_file_does_not_exist.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +import other_file + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = other_file.does_not_exist('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py b/example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py new file mode 100644 index 00000000..a0fa7265 --- /dev/null +++ b/example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +from other_file import return_constant_string + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = return_constant_string('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py b/example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py new file mode 100644 index 00000000..259a71a1 --- /dev/null +++ b/example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py @@ -0,0 +1,22 @@ +import subprocess +from flask import Flask, render_template, request + +import other_file + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + + command = other_file.return_constant_string('echo ' + param + ' >> ' + 'menu.txt') + subprocess.call(command, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code_across_files/other_file.py b/example/vulnerable_code_across_files/other_file.py new file mode 100644 index 00000000..f006c61f --- /dev/null +++ b/example/vulnerable_code_across_files/other_file.py @@ -0,0 +1,12 @@ +import subprocess + +def return_constant_string(easy_to_find_in_logs): + no_vuln = "This is not a vuln" + return no_vuln + +def return_the_arg(easy_to_find_in_logs): + hehe = 'bar' + easy_to_find_in_logs + return hehe + +def shell_the_arg(easy_to_find_in_logs): + subprocess.call(easy_to_find_in_logs, shell=True) diff --git a/func_counter.py b/func_counter.py index c2f5f59c..82b4dc55 100644 --- a/func_counter.py +++ b/func_counter.py @@ -2,8 +2,8 @@ to get an estimate og how big the CFG should be""" import ast -from pyt.cfg import get_call_names_as_string, generate_ast -from pyt.project_handler import get_python_modules +from pyt.cfg import generate_ast, get_call_names_as_string +from pyt.project_handler import get_modules function_calls = list() @@ -34,7 +34,7 @@ def visit_ClassDef(self, node): if __name__ == '__main__': - module_paths = (m[1] for m in get_python_modules('../flaskbb/flaskbb')) + module_paths = (m[1] for m in get_modules('../flaskbb/flaskbb')) for p in module_paths: print(p) t = generate_ast(p) diff --git a/pydocstyle.py b/pydocstyle.py index 618efad2..6a8d9ff3 100644 --- a/pydocstyle.py +++ b/pydocstyle.py @@ -1,7 +1,7 @@ +import os import re import subprocess import sys -import os os.chdir(os.path.join('pyt')) diff --git a/pyt/__main__.py b/pyt/__main__.py index d62eb861..271fe7d5 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -16,7 +16,7 @@ from .intraprocedural_cfg import intraprocedural from .lattice import print_lattice from .liveness import LivenessAnalysis -from .project_handler import get_directory_modules, get_python_modules +from .project_handler import get_directory_modules, get_modules from .reaching_definitions import ReachingDefinitionsAnalysis from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .repo_runner import get_repos @@ -143,7 +143,7 @@ def analyse_repo(github_repo, analysis_type): cfg_list = list() - project_modules = get_python_modules(os.path.dirname(github_repo.path)) + project_modules = get_modules(os.path.dirname(github_repo.path)) intraprocedural(project_modules, cfg_list) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis_type) @@ -196,7 +196,7 @@ def main(): directory = os.path.normpath(args.project_root) else: directory = os.path.dirname(path) - project_modules = get_python_modules(directory) + project_modules = get_modules(directory) local_modules = get_directory_modules(directory) tree = generate_ast(path) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index b1f52d6b..adc51b65 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -31,13 +31,12 @@ def __init__(self, label, ast_node, *, line_number, path): label (str): The label of the node, describing its expression. line_number(Optional[int]): The line of the expression of the Node. """ - self.ingoing = list() - self.outgoing = list() - self.label = label self.ast_node = ast_node self.line_number = line_number self.path = path + self.ingoing = list() + self.outgoing = list() def connect(self, successor): """Connect this node to its successor node by @@ -56,7 +55,8 @@ def connect_predecessors(self, predecessors): def __str__(self): """Print the label of the node.""" - return ' '.join(('Label: ', self.label)) + return ''.join((' Label: ', self.label)) + def __repr__(self): """Print a representation of the node.""" @@ -90,7 +90,7 @@ class FunctionNode(Node): def __init__(self, ast_node): """Create a function node. - This node is a dummy node representing a function definition + This node is a dummy node representing a function definition. """ super().__init__(self.__class__.__name__, ast_node) @@ -162,7 +162,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, * Args: label (str): The label of the node, describing the expression it represents. - restore_nodes(list[Node]): List of nodes that where restored in the function call. + restore_nodes(list[Node]): List of nodes that were restored in the function call. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. """ @@ -252,6 +252,7 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): + if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if @@ -273,7 +274,7 @@ def get_last_statements(self, cfg_statements): def stmt_star_handler(self, stmts): """Handle stmt* expressions in an AST node. - Links all statements together in a list of statements, accounting for statements with multiple last nodes + Links all statements together in a list of statements, accounting for statements with multiple last nodes. """ cfg_statements = list() break_nodes = list() @@ -286,7 +287,7 @@ def stmt_star_handler(self, stmts): elif isinstance(node, BreakNode): break_nodes.append(node) - if self.node_to_connect(node): + if self.node_to_connect(node) and node: cfg_statements.append(node) self.connect_nodes(cfg_statements) @@ -495,7 +496,6 @@ def visit_Assign(self, node): return self.assign_multi_target(node, rhs_visitor.result) else: if isinstance(node.value, ast.Call): # x = call() - label = LabelVisitor() label.visit(node.targets[0]) return self.assignment_call_node(label.result, node) @@ -603,7 +603,6 @@ def add_builtin(self, node): label = LabelVisitor() label.visit(node) builtin_call = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) - if not self.undecided: self.nodes.append(builtin_call) self.undecided = False diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index bb7ec504..6427d281 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -78,7 +78,7 @@ def init_function_cfg(self, node, module_definitions): self.function_names.append(node.name) self.function_return_stack.append(node.name) - entry_node = self.append_node(EntryOrExitNode("Entry module")) + entry_node = self.append_node(EntryOrExitNode("Entry function")) module_statements = self.stmt_star_handler(node.body) @@ -87,7 +87,7 @@ def init_function_cfg(self, node, module_definitions): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode("Exit function")) last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) @@ -133,7 +133,7 @@ def add_to_definitions(self, node): local_definitions.module_name, self.filenames[-1]) parent_definition.node = node - parent_definitions.append(parent_definition) + parent_definitions.append_if_local_or_in_imports(parent_definition) local_qualified_name = '.'.join(local_definitions.classes + [node.name]) @@ -142,7 +142,7 @@ def add_to_definitions(self, node): None, self.filenames[-1]) local_definition.node = node - local_definitions.append(local_definition) + local_definitions.append_if_local_or_in_imports(local_definition) self.function_names.append(node.name) @@ -219,9 +219,12 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): label_visitor = LabelVisitor() label_visitor.visit(parameter) + rhs_visitor = RHSVisitor() + rhs_visitor.visit(parameter) + n = RestoreNode(temp_name + ' = ' + label_visitor.result, temp_name, - [label_visitor.result], + rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) @@ -346,7 +349,15 @@ def visit_Call(self, node): self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] - definition = local_definitions.get_definition(_id) + + real_id = _id + for k in local_definitions.import_alias_mapping.keys(): + if _id.startswith(k): + real_id = _id.replace(k, local_definitions.import_alias_mapping[k]) + definition = local_definitions.get_definition(real_id) + break + if real_id == _id: + definition = local_definitions.get_definition(_id) if definition: if isinstance(definition.node, ast.ClassDef): @@ -380,13 +391,24 @@ def add_class(self, call_node, def_node): line_number=call_node.lineno, path=self.filenames[-1]) - def add_module(self, module, module_name, local_names): + def retrieve_import_alias_mapping(self, names_list): + """Creates a dictionary mapping aliases to their respective name. + import_alias_names is used in module_definitions.py and visit_Call""" + import_alias_names = {} + + for alias in names_list: + if alias.asname: + import_alias_names[alias.asname] = alias.name + return import_alias_names + + def add_file_module(self, module, module_name, local_names, import_alias_mapping): module_path = module[1] self.filenames.append(module_path) self.local_modules = get_directory_modules(module_path) tree = generate_ast(module_path) parent_definitions = self.module_definitions_stack[-1] + parent_definitions.import_alias_mapping = import_alias_mapping parent_definitions.import_names = local_names module_definitions = ModuleDefinitions(local_names, module_name) @@ -401,17 +423,47 @@ def add_module(self, module, module_name, local_names): return exit_node + def add_directory_module(self, module, real_names, local_names, import_alias_mapping): + module_path = module[1] + + for real_name in real_names: + file_module = (real_name, os.path.join(module_path, real_name + '.py')) + self.add_file_module(file_module, real_name, local_names, import_alias_mapping) + + def import_directory_module(self, module, import_alias_mapping): + module_path = module[1] + init_file_location = os.path.join(module_path, '__init__.py') + file_exists = os.path.isfile(init_file_location) + if file_exists: + raise Exception("TODO: Handle __init__ files") + else: + raise Exception("import directory needs an __init__.py file") + def visit_Import(self, node): for name in node.names: for module in self.local_modules: if name.name == module[0]: - return self.add_module(module, name.name, name.asname) + if os.path.isdir(module[1]): + return self.import_directory_module(module, + self.retrieve_import_alias_mapping(node.names)) + else: + return self.add_file_module(module, + name.name, + name.asname, + self.retrieve_import_alias_mapping(node.names)) for module in self.project_modules: if name.name == module[0]: - return self.add_module(module, name.name, name.asname) + if os.path.isdir(module[1]): + return self.import_directory_module(module, + self.retrieve_import_alias_mapping(node.names)) + else: + return self.add_file_module(module, + name.name, + name.asname, + self.retrieve_import_alias_mapping(node.names)) return IgnoredNode() - def alias_handler(self, alias_list): + def as_alias_handler(self, alias_list): l = list() for alias in alias_list: if alias.asname: @@ -420,16 +472,32 @@ def alias_handler(self, alias_list): l.append(alias.name) return l + def not_as_alias_handler(self, names_list): + l = list() + for alias in names_list: + l.append(alias.name) + return l + def handle_relative_import(self, node): """ from A means node.level == 0 + from . import B means node.level == 1 from .A means node.level == 1 """ + is_file = False + no_file = os.path.abspath(os.path.join(self.filenames[-1], os.pardir)) if node.level == 1: # Same directory as current file - filename_with_dir = no_file+'/'+node.module.replace('.','/')+'.py' + if node.module: + name_with_dir = os.path.join(no_file, node.module.replace('.', '/')) + if not os.path.isdir(name_with_dir): + name_with_dir = name_with_dir + '.py' + is_file = True + # e.g. from . import X + else: + name_with_dir = no_file else: parent = os.path.abspath(os.path.join(no_file, os.pardir)) @@ -438,10 +506,24 @@ def handle_relative_import(self, node): while level > 2: parent = os.path.abspath(os.path.join(parent, os.pardir)) level = level - 1 - filename_with_dir = parent+'/'+node.module.replace('.','/')+'.py' + if node.module: + name_with_dir = os.path.join(parent, node.module.replace('.', '/')) + if not os.path.isdir(name_with_dir): + name_with_dir = name_with_dir + '.py' + is_file = True + # e.g. from .. import X + else: + name_with_dir = parent - return self.add_module((node.module, filename_with_dir), None, - self.alias_handler(node.names)) + if is_file: + return self.add_file_module((node.module, name_with_dir), None, + self.as_alias_handler(node.names), + self.retrieve_import_alias_mapping(node.names)) + else: + return self.add_directory_module((node.module, name_with_dir), + self.not_as_alias_handler(node.names), + self.as_alias_handler(node.names), + self.retrieve_import_alias_mapping(node.names)) def visit_ImportFrom(self, node): # Is it relative? @@ -450,12 +532,26 @@ def visit_ImportFrom(self, node): else: for module in self.local_modules: if node.module == module[0]: - return self.add_module(module, None, - self.alias_handler(node.names)) + if os.path.isdir(module[1]): + return self.add_directory_module(module, + self.not_as_alias_handler(node.names), + self.as_alias_handler(node.names)) + else: + return self.add_file_module(module, None, + self.as_alias_handler(node.names), + self.retrieve_import_alias_mapping(node.names)) for module in self.project_modules: - if node.module == module[0]: - return self.add_module(module, None, - self.alias_handler(node.names)) + name = module[0] + if node.module == name: + if os.path.isdir(module[1]): + return self.add_directory_module(module, + self.not_as_alias_handler(node.names), + self.as_alias_handler(node.names), + self.retrieve_import_alias_mapping(node.names)) + else: + return self.add_file_module(module, None, + self.as_alias_handler(node.names), + self.retrieve_import_alias_mapping(node.names)) return IgnoredNode() diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index 1b08f149..c0c1c45d 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -2,7 +2,6 @@ project_definitions = dict() # Contains all project definitions for a program run - class ModuleDefinition(): """Handling of a definition.""" @@ -12,13 +11,14 @@ class ModuleDefinition(): module_definitions = None def __init__(self, local_module_definitions, name, parent_module_name, path): + self.module_definitions = local_module_definitions + self.parent_module_name = parent_module_name + self.path = path + if parent_module_name: self.name = parent_module_name + '.' + name else: self.name = name - self.path = path - - self.module_definitions = local_module_definitions def __str__(self): name = 'NoName' @@ -46,24 +46,32 @@ def __init__(self, import_names=None, module_name=None): Module name should only be set when it is a normal import statement. """ - self.definitions = list() + self.import_names = import_names self.module_name = module_name + self.definitions = list() self.classes = list() - self.import_names = import_names + self.import_alias_mapping = {} + - def append(self, definition): + def append_if_local_or_in_imports(self, definition): """Add definition to list. - Handles localdefinitions and adds to project_definitions. + Handles local definitions and adds to project_definitions. """ if isinstance(definition, LocalModuleDefinition): self.definitions.append(definition) elif self.import_names and definition.name in self.import_names: self.definitions.append(definition) + elif self.import_alias_mapping and definition.name in self.import_alias_mapping.values(): + self.definitions.append(definition) + + if definition.parent_module_name: + self.definitions.append(definition) - if not definition.node in project_definitions: + if definition.node not in project_definitions: project_definitions[definition.node] = definition + def is_import(self): """Return whether it is a normal import statement and not a from import. @@ -88,6 +96,7 @@ def __str__(self): if self.module_name: module = self.module_name - return 'Definitions: ' + ' '.join([str(definition) for definition in self.definitions]) + '\nmodule_name: ' + module + '\n' - - + if self.definitions: + return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module + '\n' + else: + return 'No Definitions, module_name: ' + module + '\n' diff --git a/pyt/project_handler.py b/pyt/project_handler.py index 180de198..3395af41 100644 --- a/pyt/project_handler.py +++ b/pyt/project_handler.py @@ -6,11 +6,6 @@ import os -def is_python_file(path): - if os.path.splitext(path)[1] == '.py': - return True - return False - local_modules = list() def get_directory_modules(directory, flush_local_modules=False): """Return a list containing tuples of @@ -22,7 +17,6 @@ def get_directory_modules(directory, flush_local_modules=False): if flush_local_modules: del local_modules[:] - if not os.path.isdir(directory): # example/import_test_project/A.py -> example/import_test_project directory = os.path.dirname(directory) @@ -38,7 +32,7 @@ def get_directory_modules(directory, flush_local_modules=False): return local_modules -def get_python_modules(path): +def get_modules(path): """Return a list containing tuples of e.g. ('test_project.utils', 'example/test_project/utils.py') """ @@ -56,16 +50,34 @@ def get_python_modules(path): return modules -def get_project_module_names(path): - project_modules = get_python_modules(path) - project_module_names = list() - for project_module in project_modules: - project_module_names.append(project_module[0]) - return project_module_names +def get_modules_and_packages(path): + """Return a list containing tuples of + e.g. ('folder', 'example/test_project/folder', '.folder') + ('test_project.utils', 'example/test_project/utils.py') + """ + module_root = os.path.split(path)[1] + modules = list() + for root, directories, filenames in os.walk(path): + for directory in directories: + if directory != '__pycache__': + full_path = os.path.join(root, directory) + relative_path = os.path.realpath(full_path).split(module_root)[-1].replace(os.sep, '.') + # Remove the dot in front to be consistent + modules.append((relative_path[1:], full_path, relative_path)) + + for filename in filenames: + if is_python_file(filename): + full_path = os.path.join(root, filename) + directory = os.path.dirname(os.path.realpath(full_path)).split(module_root)[-1].replace(os.sep, '.') + directory = directory.replace('.', '', 1) + if directory: + modules.append(('.'.join((module_root, directory, filename.replace('.py', ''))), full_path)) + else: + modules.append(('.'.join((module_root, filename.replace('.py', ''))), full_path)) -def is_directory(path): - if os.path.isdir(path): + return modules + +def is_python_file(path): + if os.path.splitext(path)[1] == '.py': return True - elif is_python_file(path): - return False - raise Exception(path, ' has to be a python module or a directory.') + return False diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 5313d43b..3579ceb6 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -3,20 +3,20 @@ import ast from collections import namedtuple -from .base_cfg import Node, AssignmentNode, ReturnNode +from .base_cfg import AssignmentNode, Node, ReturnNode from .framework_adaptor import TaintedNode +from .lattice import Lattice +from .trigger_definitions_parser import default_trigger_word_file, parse +from .vars_visitor import VarsVisitor from .vulnerability_log import ( + SanitisedVulnerability, Vulnerability, - VulnerabilityLog, - SanitisedVulnerability + VulnerabilityLog ) -from .lattice import Lattice -from .vars_visitor import VarsVisitor -from .trigger_definitions_parser import default_trigger_word_file, parse -Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') +Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') class TriggerNode(): @@ -51,7 +51,6 @@ def identify_triggers(cfg, sources, sinks): tainted_nodes = filter_cfg_nodes(cfg, TaintedNode) tainted_trigger_nodes = [TriggerNode('Flask function URL parameter', None, node) for node in tainted_nodes] - sources_in_file = find_triggers(assignment_nodes, sources) sources_in_file.extend(tainted_trigger_nodes) @@ -69,8 +68,6 @@ def filter_cfg_nodes(cfg, cfg_node_type): def find_secondary_sources(assignment_nodes, sources): - assignments = dict() - for source in sources: source.secondary_nodes = find_assignments(assignment_nodes, source) @@ -78,7 +75,7 @@ def find_secondary_sources(assignment_nodes, sources): def find_assignments(assignment_nodes, source): old = list() - # added in order to propagate reassignments of the source node: + # added in order to propagate reassignments of the source node new = [source.cfg_node] update_assignments(new, assignment_nodes, source.cfg_node) @@ -194,7 +191,7 @@ def is_sanitized(sink, sanitiser_dict, lattice): sanitiser_dict(dict): dictionary of sink sanitiser pairs. Returns: - True of False + True or False """ for sanitiser in sink.sanitisers: for cfg_node in sanitiser_dict[sanitiser]: @@ -233,14 +230,16 @@ def get_vulnerability(source, sink, triggers, lattice): secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, sink.cfg_node)] + trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None + secondary_nodes_in_sink_args = any(True for node in secondary_in_sink if node.left_hand_side in sink_args)\ - if sink_args else None + if sink_args else None lhs_in_sink_args = source_lhs_in_sink_args or secondary_nodes_in_sink_args if trigger_node_in_sink and lhs_in_sink_args: @@ -249,15 +248,15 @@ def get_vulnerability(source, sink, triggers, lattice): sink_is_sanitised = is_sanitized(sink, triggers.sanitiser_dict, lattice) - if not sink_is_sanitised: - return Vulnerability(source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - source.secondary_nodes) - elif sink_is_sanitised: + if sink_is_sanitised: return SanitisedVulnerability(source.cfg_node, source_trigger_word, sink.cfg_node, sink_trigger_word, sink.sanitisers, source.secondary_nodes) + else: + return Vulnerability(source.cfg_node, source_trigger_word, + sink.cfg_node, sink_trigger_word, + source.secondary_nodes) return None diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index e1d843f9..f2d5a2f6 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -1,7 +1,7 @@ """This module contains a vulnerability log. This log is able to give precise information about where a vulnerability is located. -The log is printed to the standard output. +The log is printed to standard output. """ class VulnerabilityLog(): diff --git a/setup.py b/setup.py index 933fb0a7..ca0ff601 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -from setuptools import setup, find_packages +from setuptools import find_packages, setup long_description = """""" diff --git a/tests/cfg_test.py b/tests/cfg_test.py index d5370ef5..7d5e7b83 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,6 +1,6 @@ from .base_test_case import BaseTestCase from pyt.base_cfg import EntryOrExitNode, Node -from pyt.project_handler import get_python_modules +# from pyt.project_handler import get_modules class CFGGeneralTest(BaseTestCase): @@ -707,9 +707,9 @@ def test_function_multiple_return(self): def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) -# self.cfg = CFG(get_python_modules(path)) - # tree = generate_ast(path) - # self.cfg.create(tree) + # self.cfg = CFG(get_modules(path)) + # tree = generate_ast(path) + # self.cfg.create(tree) assignment_with_function = self.cfg.nodes[1] diff --git a/tests/flask_adaptor_test.py b/tests/flask_adaptor_test.py index bdc35517..50fef886 100644 --- a/tests/flask_adaptor_test.py +++ b/tests/flask_adaptor_test.py @@ -10,7 +10,12 @@ def test_find_flask_functions(self): cfg_list = [self.cfg] flask = FlaskAdaptor(cfg_list, list(), list()) + funcs = flask.get_func_nodes() - #self.assertEqual(len(flask_functions), 1) - - #self.assertEqual(flask_functions[0], 'flask_function') + i = 0 + for func in funcs: + if flask.is_flask_route_function(func.node): + self.assertEqual(func.node.name, 'flask_function') + i = i + 1 + # So it is supposed to be 1, because foo is not an app.route + self.assertEqual(i, 1) diff --git a/tests/import_test.py b/tests/import_test.py index c2ba8f88..4ef870d3 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -3,33 +3,98 @@ from .base_test_case import BaseTestCase from pyt.ast_helper import get_call_names_as_string -from pyt.project_handler import get_directory_modules, get_python_modules +from pyt.project_handler import get_directory_modules, get_modules_and_packages class ImportTest(BaseTestCase): def test_import(self): - path = os.path.normpath('example/import_test_project/main.py') + path = os.path.normpath('example/import_test_project/import.py') - project_modules = get_python_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) self.cfg_create_from_file(path, project_modules, local_modules) - EXPECTED = ['Entry module', - 'Module Entry A', - 'Module Exit A', - 'Module Entry A', - 'Module Exit A', - 'temp_1_s = \'str\'', - 's = temp_1_s', - 'Function Entry B', - 'ret_B = s', - 'Exit B', - '¤call_1 = ret_B', - 'b = ¤call_1', - 'c = A.B(\'sss\')', - 'd = D.a(\'hey\')', - 'Exit module'] + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "Module Entry A", + "Module Exit A", + "temp_1_s = 'str'", + "s = temp_1_s", + "Function Entry B", + "ret_B = s", + "Exit B", + "¤call_1 = ret_B", + "b = ¤call_1", + "save_2_b = b", + "temp_2_s = 'sss'", + "s = temp_2_s", + "Function Entry A.B", + "ret_A.B = s", + "Exit A.B", + "b = save_2_b", + "¤call_2 = ret_A.B", + "c = ¤call_2", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_import_as(self): + path = os.path.normpath('example/import_test_project/import_as.py') + + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "Module Entry A", + "Module Exit A", + "temp_1_s = 'str'", + "s = temp_1_s", + "Function Entry B", + "ret_B = s", + "Exit B", + "¤call_1 = ret_B", + "b = ¤call_1", + "save_2_b = b", + "temp_2_s = 'sss'", + "s = temp_2_s", + "Function Entry A.B", + "ret_foo.B = s", + "Exit A.B", + "b = save_2_b", + "¤call_2 = ret_foo.B", + "c = ¤call_2", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_directory(self): + file_path = os.path.normpath('example/import_test_project/from_directory.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + + EXPECTED = ["Entry module", + "Module Entry bar", + "Module Exit bar", + "temp_1_s = 'hey'", + "s = temp_1_s", + "Function Entry bar.H", + "ret_bar.H = s + 'end'", + "Exit bar.H", + "¤call_1 = ret_bar.H", + "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -37,25 +102,33 @@ def test_import(self): def test_relative_level_1(self): path = os.path.normpath('example/import_test_project/relative_level_1.py') - project_modules = get_python_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) self.cfg_create_from_file(path, project_modules, local_modules) - EXPECTED = ['Entry module', - 'Module Entry A', - 'Module Exit A', - 'Module Entry A', - 'Module Exit A', - 'temp_1_s = \'str\'', - 's = temp_1_s', - 'Function Entry B', - 'ret_B = s', - 'Exit B', - '¤call_1 = ret_B', - 'b = ¤call_1', - 'c = A.B(\'sss\')', - 'Exit module'] + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "Module Entry A", + "Module Exit A", + "temp_1_s = 'str'", + "s = temp_1_s", + "Function Entry B", + "ret_B = s", + "Exit B", + "¤call_1 = ret_B", + "b = ¤call_1", + "save_2_b = b", + "temp_2_s = 'sss'", + "s = temp_2_s", + "Function Entry A.B", + "ret_A.B = s", + "Exit A.B", + "b = save_2_b", + "¤call_2 = ret_A.B", + "c = ¤call_2", + "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -63,7 +136,7 @@ def test_relative_level_1(self): def test_relative_level_2(self): path = os.path.normpath('example/import_test_project/relative_level_2.py') - project_modules = get_python_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) try: @@ -74,28 +147,251 @@ def test_relative_level_2(self): def test_relative_between_folders(self): file_path = os.path.normpath('example/import_test_project/other_dir/relative_between_folders.py') - project_path = os.path.normpath('example/import_test_project/h.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry foo.bar", + "Module Exit foo.bar", + "temp_1_s = 'hey'", + "s = temp_1_s", + "Function Entry H", + "ret_H = s + 'end'", + "Exit H", + "¤call_1 = ret_H", + "result = ¤call_1", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_relative_from_directory(self): + file_path = os.path.normpath('example/import_test_project/relative_from_directory.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry bar", + "Module Exit bar", + "temp_1_s = 'hey'", + "s = temp_1_s", + "Function Entry bar.H", + "ret_bar.H = s + 'end'", + "Exit bar.H", + "¤call_1 = ret_bar.H", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_dot(self): + file_path = os.path.normpath('example/import_test_project/from_dot.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) - project_modules = get_python_modules(os.path.dirname(project_path)) - local_modules = get_directory_modules(os.path.dirname(project_path)) + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ['Entry module', + 'Module Entry A', + 'Module Exit A', + 'temp_1_s = \'sss\'', + 's = temp_1_s', + 'Function Entry A.B', + 'ret_A.B = s', + 'Exit A.B', + '¤call_1 = ret_A.B', + 'c = ¤call_1', + 'Exit module'] + + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_dot_dot(self): + file_path = os.path.normpath('example/import_test_project/other_dir/from_dot_dot.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ['Entry module', - 'Module Entry foo.bar', - 'Module Exit foo.bar', - 'temp_1_s = \'hey\'', + 'Module Entry A', + 'Module Exit A', + 'temp_1_s = \'sss\'', 's = temp_1_s', - 'Function Entry H', - 'ret_H = s', - 'Exit H', - '¤call_1 = ret_H', - 'result = ¤call_1', + 'Function Entry A.B', + 'ret_A.B = s', + 'Exit A.B', + '¤call_1 = ret_A.B', + 'c = ¤call_1', 'Exit module'] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_multiple_files_with_aliases(self): + file_path = os.path.normpath('example/import_test_project/multiple_files_with_aliases.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "Module Entry B", + "Module Exit B", + "Module Entry C", + "Module Exit C", + "Module Entry D", + "Module Exit D", + "temp_1_s = 'tlayuda'", + "s = temp_1_s", + "Function Entry A.cosme", + "ret_A.cosme = s + 'aaa'", + "Exit A.cosme", + "¤call_1 = ret_A.cosme", + "a = ¤call_1", + "save_2_a = a", + "temp_2_s = 'mutton'", + "s = temp_2_s", + "Function Entry B.foo", + "ret_keens.foo = s + 'bee'", + "Exit B.foo", + "a = save_2_a", + "¤call_2 = ret_keens.foo", + "b = ¤call_2", + "save_3_a = a", + "save_3_b = b", + "temp_3_s = 'tasting'", + "s = temp_3_s", + "Function Entry C.foo", + "ret_per_se.foo = s + 'see'", + "Exit C.foo", + "a = save_3_a", + "b = save_3_b", + "¤call_3 = ret_per_se.foo", + "c = ¤call_3", + "save_4_a = a", + "save_4_b = b", + "save_4_c = c", + "temp_4_s = 'peking'", + "s = temp_4_s", + "Function Entry D.foo", + "ret_duck_house.foo = s + 'dee'", + "Exit D.foo", + "a = save_4_a", + "b = save_4_b", + "c = save_4_c", + "¤call_4 = ret_duck_house.foo", + "d = ¤call_4", + "Exit module"] + for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) + def test_multiple_functions_with_aliases(self): + file_path = os.path.normpath('example/import_test_project/multiple_functions_with_aliases.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "temp_1_s = 'mutton'", + "s = temp_1_s", + "Function Entry B", + "ret_keens = s", + "Exit B", + "¤call_1 = ret_keens", + "a = ¤call_1", + "save_2_a = a", + "temp_2_s = 'tasting'", + "s = temp_2_s", + "Function Entry C", + "ret_C = s + 'see'", + "Exit C", + "a = save_2_a", + "¤call_2 = ret_C", + "b = ¤call_2", + "save_3_a = a", + "save_3_b = b", + "temp_3_s = 'peking'", + "s = temp_3_s", + "Function Entry D", + "ret_duck_house = s + 'dee'", + "Exit D", + "a = save_3_a", + "b = save_3_b", + "¤call_3 = ret_duck_house", + "c = ¤call_3", + "Exit module"] + + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + # def test_init(self): + # file_path = os.path.normpath('example/import_test_project/init.py') + # project_path = os.path.normpath('example/import_test_project') + + # project_modules = get_modules_and_packages(project_path) + # local_modules = get_directory_modules(project_path) + + # self.cfg_create_from_file(file_path, project_modules, local_modules) + + # EXPECTED = ['Not Yet'] + + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) + + # def test_all(self): + # file_path = os.path.normpath('example/import_test_project/all.py') + # project_path = os.path.normpath('example/import_test_project') + + # project_modules = get_modules_and_packages(project_path) + # local_modules = get_directory_modules(project_path) + + # self.cfg_create_from_file(file_path, project_modules, local_modules) + + # EXPECTED = ['Not Yet'] + + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) + + # def test_no_all(self): + # file_path = os.path.normpath('example/import_test_project/no_all.py') + # project_path = os.path.normpath('example/import_test_project') + + # project_modules = get_modules_and_packages(project_path) + # local_modules = get_directory_modules(project_path) + + # self.cfg_create_from_file(file_path, project_modules, local_modules) + + # EXPECTED = ['Not Yet'] + + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) + def test_get_call_names_single(self): m = ast.parse('hi(a)') call = m.body[0].value @@ -112,7 +408,6 @@ def test_get_call_names_uselesscase(self): self.assertEqual(result, 'defg.hi') - def test_get_call_names_multi(self): m = ast.parse('abc.defg.hi(a)') call = m.body[0].value diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py new file mode 100644 index 00000000..07b6cb15 --- /dev/null +++ b/tests/nested_functions_test.py @@ -0,0 +1,20 @@ +# import os.path + +# from .base_test_case import BaseTestCase +# from pyt.project_handler import get_directory_modules, get_modules_and_packages + + +# class NestedTest(BaseTestCase): + # def test_nested_function_calls(self): + + # path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') + + # project_modules = get_modules_and_packages(os.path.dirname(path)) + # local_modules = get_directory_modules(os.path.dirname(path)) + + # self.cfg_create_from_file(path, project_modules, local_modules) + + # EXPECTED = ['Not Yet'] + + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) diff --git a/tests/project_handler_test.py b/tests/project_handler_test.py index ba3332dd..9abb990f 100644 --- a/tests/project_handler_test.py +++ b/tests/project_handler_test.py @@ -2,8 +2,11 @@ import unittest from pprint import pprint -from pyt.project_handler import get_python_modules, is_python_file - +from pyt.project_handler import ( + get_modules, + get_modules_and_packages, + is_python_file +) class ProjectHandlerTest(unittest.TestCase): """Tests for the project handler.""" @@ -15,16 +18,14 @@ def test_is_python_file(self): self.assertEqual(is_python_file(python_module), True) self.assertEqual(is_python_file(not_python_module), False) - def test_get_python_modules(self): + def test_get_modules(self): project_folder = os.path.normpath(os.path.join('example', 'test_project')) project_namespace = 'test_project' folder = 'folder' directory = 'directory' - # get_python_modules will return a list containing tuples of - # e.g. ('test_project.utils', 'example/test_project/utils.py') - modules = get_python_modules(project_folder) + modules = get_modules(project_folder) app_path = os.path.join(project_folder, 'app.py') utils_path = os.path.join(project_folder,'utils.py') @@ -32,6 +33,7 @@ def test_get_python_modules(self): some_path = os.path.join(project_folder, folder, 'some.py') indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') + relative_folder_name = '.' + folder app_name = project_namespace + '.' + 'app' utils_name = project_namespace + '.' + 'utils' exceptions_name = project_namespace + '.' + 'exceptions' @@ -51,3 +53,46 @@ def test_get_python_modules(self): self.assertIn(indhold_tuple, modules) self.assertEqual(len(modules), 5) + + def test_get_modules_and_packages(self): + project_folder = os.path.normpath(os.path.join('example', 'test_project')) + + project_namespace = 'test_project' + folder = 'folder' + directory = 'directory' + + modules = get_modules_and_packages(project_folder) + + folder_path = os.path.join(project_folder, folder) + app_path = os.path.join(project_folder, 'app.py') + exceptions_path = os.path.join(project_folder, 'exceptions.py') + utils_path = os.path.join(project_folder,'utils.py') + directory_path = os.path.join(project_folder, folder, directory) + some_path = os.path.join(project_folder, folder, 'some.py') + indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') + + relative_folder_name = '.' + folder + app_name = project_namespace + '.' + 'app' + exceptions_name = project_namespace + '.' + 'exceptions' + utils_name = project_namespace + '.' + 'utils' + relative_directory_name = '.' + folder + '.' + directory + some_name = project_namespace + '.' + folder + '.some' + indhold_name = project_namespace + '.' + folder + '.' + directory + '.indhold' + + folder_tuple = (relative_folder_name[1:], folder_path, relative_folder_name) + app_tuple = (app_name, app_path) + exceptions_tuple = (exceptions_name, exceptions_path) + utils_tuple = (utils_name, utils_path) + directory_tuple = (relative_directory_name[1:], directory_path, relative_directory_name) + some_tuple = (some_name, some_path) + indhold_tuple = (indhold_name, indhold_path) + + self.assertIn(folder_tuple, modules) + self.assertIn(app_tuple, modules) + self.assertIn(exceptions_tuple, modules) + self.assertIn(utils_tuple, modules) + self.assertIn(folder_tuple, modules) + self.assertIn(some_tuple, modules) + self.assertIn(indhold_tuple, modules) + + self.assertEqual(len(modules), 7) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py new file mode 100644 index 00000000..224324a0 --- /dev/null +++ b/tests/vulnerabilities_across_files_test.py @@ -0,0 +1,69 @@ +import ast +import os + +from .base_test_case import BaseTestCase +from pyt import trigger_definitions_parser, vulnerabilities +from pyt.ast_helper import get_call_names_as_string +from pyt.base_cfg import Node +from pyt.constraint_table import constraint_table, initialize_constraint_table +from pyt.fixed_point import analyse +from pyt.flask_adaptor import FlaskAdaptor +from pyt.lattice import Lattice +from pyt.project_handler import get_directory_modules, get_modules +from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis + + +class EngineTest(BaseTestCase): + def run_analysis(self, path): + path = os.path.normpath(path) + + project_modules = get_modules(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + cfg_list = [self.cfg] + + FlaskAdaptor(cfg_list, [], []) + + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + + return vulnerabilities.find_vulnerabilities(cfg_list, ReachingDefinitionsTaintAnalysis) + + def test_find_vulnerabilities_absolute_from_file_command_injection(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection.py') + + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_no_false_positive_absolute_from_file_command_injection_3(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + + # This fails due to a false positive in get_vulnerability + # def test_absolute_from_file_does_not_exist(self): + # vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py') + # self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + + def test_find_vulnerabilities_import_file_command_injection(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') + + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_find_vulnerabilities_import_file_command_injection_2(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection_2.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_no_false_positive_import_file_command_injection_3(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + + # This fails due to a false positive in get_vulnerability + # def test_import_file_does_not_exist(self): + # vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_does_not_exist.py') + # self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 0b80576e..47483e35 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -179,3 +179,11 @@ def test_find_vulnerabilities_variable_assign_no_vuln(self): def test_find_vulnerabilities_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code/command_injection.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_find_vulnerabilities_inter_command_injection(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_find_vulnerabilities_inter_command_injection_2(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) From 0ec7ea5b0ee2d749d2b978407dfda65b1871718d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 15 Apr 2017 15:49:31 -0400 Subject: [PATCH 005/541] a couple of newlines --- pyt/base_cfg.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index adc51b65..ce0ab0fe 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -252,7 +252,6 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): - if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if @@ -602,10 +601,12 @@ def visit_Expr(self, node): def add_builtin(self, node): label = LabelVisitor() label.visit(node) + builtin_call = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) if not self.undecided: self.nodes.append(builtin_call) self.undecided = False + return builtin_call def visit_Name(self, node): From ae7e6071adbe62cd689a557f801776d297a3c743 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Fri, 21 Apr 2017 14:35:35 +0200 Subject: [PATCH 006/541] Fix install_requires typo --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e69abbbe..35def26c 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ packages=[ 'pyt' ], - install_requres=[ + install_requires=[ 'graphviz==0.4.10', 'requests==2.10.0', 'GitPython==2.0.8' From 4a2d2ac93b747d6649fe2920688d9fbf1f35a61e Mon Sep 17 00:00:00 2001 From: Bruno Thalmann Date: Fri, 21 Apr 2017 19:17:47 +0200 Subject: [PATCH 007/541] Added slack admin email --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 257a11a7..7c251bc6 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Running an individual test: `python -m unittest tests.import_test.ImportTest.tes # Contributions -Join our slack group: https://pyt-dev.slack.com/ +Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com [Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) From 59bde23d2a38abaadfab3a3b8bcca228c78efcd5 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sat, 22 Apr 2017 16:22:56 +0200 Subject: [PATCH 008/541] Simplify with a set comprehension --- analyse_scan_results.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/analyse_scan_results.py b/analyse_scan_results.py index 930d049a..a000fe20 100644 --- a/analyse_scan_results.py +++ b/analyse_scan_results.py @@ -56,12 +56,8 @@ def get_repos(filename): def get_urls(filename): - repos = set() with open(filename, 'r') as fd: - for line in fd: - if 'https' in line: - repos.add(line) - return repos + return sorted({line for line in fd if 'https' in line}) if __name__ == '__main__': From 7d8a03fd28068e52da849c271ab8c9a34981e08e Mon Sep 17 00:00:00 2001 From: Jakub Wilk Date: Sat, 22 Apr 2017 23:07:33 +0200 Subject: [PATCH 009/541] Fix typo --- CONTRIBUTIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTIONS.md b/CONTRIBUTIONS.md index 23d863d5..abd268a3 100644 --- a/CONTRIBUTIONS.md +++ b/CONTRIBUTIONS.md @@ -6,5 +6,5 @@ Procedure for adding new features - Remember to write unit tests for your code - Announce finished feature as pull request - Pull request reviewed by at least 1 -- Merge to development brench when ready +- Merge to development branch when ready - Merge into master when we all agree From f929e890652a4a11fecee129e813a8db73d639a9 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sun, 23 Apr 2017 09:39:55 +0200 Subject: [PATCH 010/541] Added visual example of PyT output. --- readme_static_files/pyt_example.png | Bin 0 -> 48706 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 readme_static_files/pyt_example.png diff --git a/readme_static_files/pyt_example.png b/readme_static_files/pyt_example.png new file mode 100644 index 0000000000000000000000000000000000000000..616ba56c445a315b96ff80357bae675b19872258 GIT binary patch literal 48706 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 literal 0 HcmV?d00001 From f3ccbf303a3759243046abc71a07ad3827e05f7d Mon Sep 17 00:00:00 2001 From: Bruno Thalmann Date: Sun, 23 Apr 2017 09:43:25 +0200 Subject: [PATCH 011/541] Added example pyt usage and output screenshot --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 7c251bc6..2a0b5145 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,10 @@ Features: - Scan intraprocedural or interprocedural - A lot of customisation possible +Example usage and output: + +![Alt text](/readme_static_files/pyt_example.png?raw=true "Optional Title") + # Install 1. git clone https://github.com/python-security/pyt.git 2. python setup.py install From dcc399013ca04869801c83dd4e5aa29ad8e31232 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sun, 23 Apr 2017 09:51:39 +0200 Subject: [PATCH 012/541] The default trigger word file for flask applications was not added when installing with python setup.py install this fixes #32 --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index e69de29b..a54c65d3 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -0,0 +1 @@ +include pyt/trigger_definitions/* \ No newline at end of file From d55df13e78abc4d7c4310d0999f9bca5b42b11f6 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sun, 23 Apr 2017 10:04:58 +0200 Subject: [PATCH 013/541] Fixed some formatting. --- pyt/__main__.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index ae67cf14..93c72757 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -129,18 +129,21 @@ help='Output everything to file.', action='store_true') -search_parser = subparsers.add_parser('github_search', - help='Searches through github and runs PyT' - ' on found repositories. This can take some time.') +search_parser = subparsers.add_parser( + 'github_search', + help='Searches through github and runs PyT' + ' on found repositories. This can take some time.') search_parser.set_defaults(which='search') -search_parser.add_argument('-ss', '--search-string', required=True, - help='String for searching for repos on github', type=str) +search_parser.add_argument( + '-ss', '--search-string', required=True, + help='String for searching for repos on github', type=str) search_parser.add_argument('-sd', '--start-date', help='Start date for repo search.' 'Criteria used is Created Date', type=valid_date) + def analyse_repo(github_repo, analysis_type): cfg_list = list() project_modules = get_modules(os.path.dirname(github_repo.path)) @@ -181,7 +184,7 @@ def main(): scan_github(args.search_string, args.start_date, analysis, analyse_repo, args.csv_path) else: - scan_github(args.search_string, date(2010,1,1), + scan_github(args.search_string, date(2010, 1, 1), analysis, analyse_repo, args.csv_path) exit() From 8e9262c50bc379d6d79cc9c88078f4ad235f66c2 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sun, 23 Apr 2017 10:06:04 +0200 Subject: [PATCH 014/541] Argparse help strings for github search fixed --- pyt/__main__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 93c72757..7c5fb02f 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -137,11 +137,11 @@ search_parser.add_argument( '-ss', '--search-string', required=True, - help='String for searching for repos on github', type=str) + help='String for searching for repos on github.', type=str) search_parser.add_argument('-sd', '--start-date', - help='Start date for repo search.' - 'Criteria used is Created Date', type=valid_date) + help='Start date for repo search. ' + 'Criteria used is Created Date.', type=valid_date) def analyse_repo(github_repo, analysis_type): From 576da40f3618a2465cfbeea2554fbbbb8c3903a6 Mon Sep 17 00:00:00 2001 From: Chris Gavin Date: Tue, 25 Apr 2017 00:07:42 +0100 Subject: [PATCH 015/541] Remove unused imports. --- example/vulnerable_code/XSS_url.py | 2 +- example/vulnerable_code/path_traversal.py | 2 +- example/vulnerable_code/path_traversal_sanitised.py | 2 +- example/vulnerable_code/path_traversal_sanitised_2.py | 2 +- pyt/cfg.py | 10 +--------- pyt/project_handler.py | 1 - pyt/vulnerabilities.py | 3 +-- 7 files changed, 6 insertions(+), 16 deletions(-) diff --git a/example/vulnerable_code/XSS_url.py b/example/vulnerable_code/XSS_url.py index bb06a956..e8806959 100644 --- a/example/vulnerable_code/XSS_url.py +++ b/example/vulnerable_code/XSS_url.py @@ -1,4 +1,4 @@ -from flask import Flask, request, make_response +from flask import Flask, make_response app = Flask(__name__) @app.route('/XSS_param/', methods =['GET']) diff --git a/example/vulnerable_code/path_traversal.py b/example/vulnerable_code/path_traversal.py index 16064325..dc09c4ce 100644 --- a/example/vulnerable_code/path_traversal.py +++ b/example/vulnerable_code/path_traversal.py @@ -1,5 +1,5 @@ import os -from flask import Flask, redirect, request, send_file +from flask import Flask, request, send_file app = Flask(__name__) diff --git a/example/vulnerable_code/path_traversal_sanitised.py b/example/vulnerable_code/path_traversal_sanitised.py index ee8a89bc..8b3c394e 100644 --- a/example/vulnerable_code/path_traversal_sanitised.py +++ b/example/vulnerable_code/path_traversal_sanitised.py @@ -1,5 +1,5 @@ import os -from flask import Flask, redirect, request, send_file +from flask import Flask, request, send_file app = Flask(__name__) diff --git a/example/vulnerable_code/path_traversal_sanitised_2.py b/example/vulnerable_code/path_traversal_sanitised_2.py index d5d5bc0a..2c85840f 100644 --- a/example/vulnerable_code/path_traversal_sanitised_2.py +++ b/example/vulnerable_code/path_traversal_sanitised_2.py @@ -1,5 +1,5 @@ import os -from flask import Flask, redirect, request, send_file +from flask import Flask, request, send_file app = Flask(__name__) diff --git a/pyt/cfg.py b/pyt/cfg.py index 88b21b7b..1515c3b3 100644 --- a/pyt/cfg.py +++ b/pyt/cfg.py @@ -9,15 +9,7 @@ import ast from collections import namedtuple -from .ast_helper import Arguments, generate_ast, get_call_names_as_string -from .label_visitor import LabelVisitor -from .module_definitions import ( - LocalModuleDefinition, - ModuleDefinition, - ModuleDefinitions -) -from .project_handler import get_directory_modules -from .right_hand_side_visitor import RHSVisitor +from .module_definitions import ModuleDefinitions CALL_IDENTIFIER = '¤' diff --git a/pyt/project_handler.py b/pyt/project_handler.py index 3395af41..eeee5f03 100644 --- a/pyt/project_handler.py +++ b/pyt/project_handler.py @@ -2,7 +2,6 @@ The module finds all python modules and generates an ast for them. """ -import ast import os diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 3579ceb6..e353f54f 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -1,9 +1,8 @@ """Module for finding vulnerabilities based on a definitions file.""" -import ast from collections import namedtuple -from .base_cfg import AssignmentNode, Node, ReturnNode +from .base_cfg import AssignmentNode from .framework_adaptor import TaintedNode from .lattice import Lattice from .trigger_definitions_parser import default_trigger_word_file, parse From d58277a49b5eff6eab4d9e771d7f6bc9fc6e7546 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 1 May 2017 21:24:04 -0400 Subject: [PATCH 016/541] [wip]initial init support --- example/import_test_project/from_init_1.py | 4 + .../from_init_1_with_alias.py | 4 + example/import_test_project/from_init_2.py | 4 + .../from_init_2_with_alias.py | 4 + example/import_test_project/init_1.py | 4 + .../import_test_project/init_1_with_alias.py | 4 + example/import_test_project/init_2.py | 4 + .../import_test_project/init_2_with_alias.py | 4 + example/import_test_project/init_3.py | 0 .../import_test_project/init_3_with_alias.py | 3 + .../init_file_folder_1/__init__.py | 1 + .../nested_folder_with_init/__init__.py | 1 + .../nested_folder_with_init/starbucks.py | 2 + .../init_file_folder_1_with_alias/__init__.py | 1 + .../nested_folder_with_init/__init__.py | 1 + .../nested_folder_with_init/starbucks.py | 2 + .../init_file_folder_2/__init__.py | 1 + .../nested_folder_without_init/Starbucks.py | 2 + .../init_file_folder_2_with_alias/__init__.py | 1 + .../nested_folder_without_init/Starbucks.py | 2 + .../init_file_folder_3_with_alias/__init__.py | 1 + .../nested_folder_with_init/__init__.py | 1 + .../nested_folder_with_init/moose.py | 2 + pyt/alias_helper.py | 28 ++ pyt/cfg.py | 64 ----- pyt/interprocedural_cfg.py | 255 ++++++++++++------ pyt/module_definitions.py | 19 +- pyt/utils/log.py | 23 ++ tests/import_test.py | 188 ++++++++++++- 29 files changed, 475 insertions(+), 155 deletions(-) create mode 100644 example/import_test_project/from_init_1.py create mode 100644 example/import_test_project/from_init_1_with_alias.py create mode 100644 example/import_test_project/from_init_2.py create mode 100644 example/import_test_project/from_init_2_with_alias.py create mode 100644 example/import_test_project/init_1.py create mode 100644 example/import_test_project/init_1_with_alias.py create mode 100644 example/import_test_project/init_2.py create mode 100644 example/import_test_project/init_2_with_alias.py create mode 100644 example/import_test_project/init_3.py create mode 100644 example/import_test_project/init_3_with_alias.py create mode 100755 example/import_test_project/init_file_folder_1/__init__.py create mode 100755 example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py create mode 100755 example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py create mode 100644 example/import_test_project/init_file_folder_1_with_alias/__init__.py create mode 100644 example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py create mode 100644 example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py create mode 100644 example/import_test_project/init_file_folder_2/__init__.py create mode 100644 example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py create mode 100644 example/import_test_project/init_file_folder_2_with_alias/__init__.py create mode 100644 example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py create mode 100644 example/import_test_project/init_file_folder_3_with_alias/__init__.py create mode 100644 example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py create mode 100644 example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py create mode 100644 pyt/alias_helper.py delete mode 100644 pyt/cfg.py create mode 100644 pyt/utils/log.py diff --git a/example/import_test_project/from_init_1.py b/example/import_test_project/from_init_1.py new file mode 100644 index 00000000..e7e25fec --- /dev/null +++ b/example/import_test_project/from_init_1.py @@ -0,0 +1,4 @@ +from init_file_folder_1 import StarbucksVisitor + + +StarbucksVisitor() diff --git a/example/import_test_project/from_init_1_with_alias.py b/example/import_test_project/from_init_1_with_alias.py new file mode 100644 index 00000000..e094f708 --- /dev/null +++ b/example/import_test_project/from_init_1_with_alias.py @@ -0,0 +1,4 @@ +from init_file_folder_1_with_alias import EatalyVisitor + + +EatalyVisitor() diff --git a/example/import_test_project/from_init_2.py b/example/import_test_project/from_init_2.py new file mode 100644 index 00000000..2ab60154 --- /dev/null +++ b/example/import_test_project/from_init_2.py @@ -0,0 +1,4 @@ +from init_file_folder_2 import Starbucks + + +Starbucks.Tea() diff --git a/example/import_test_project/from_init_2_with_alias.py b/example/import_test_project/from_init_2_with_alias.py new file mode 100644 index 00000000..8c184938 --- /dev/null +++ b/example/import_test_project/from_init_2_with_alias.py @@ -0,0 +1,4 @@ +from init_file_folder_2_with_alias import Eataly + + +Eataly.Tea() diff --git a/example/import_test_project/init_1.py b/example/import_test_project/init_1.py new file mode 100644 index 00000000..1c985440 --- /dev/null +++ b/example/import_test_project/init_1.py @@ -0,0 +1,4 @@ +import init_file_folder_1 + + +init_file_folder_1.StarbucksVisitor() diff --git a/example/import_test_project/init_1_with_alias.py b/example/import_test_project/init_1_with_alias.py new file mode 100644 index 00000000..60e5c2ed --- /dev/null +++ b/example/import_test_project/init_1_with_alias.py @@ -0,0 +1,4 @@ +import init_file_folder_1_with_alias + + +init_file_folder_1_with_alias.EatalyVisitor() diff --git a/example/import_test_project/init_2.py b/example/import_test_project/init_2.py new file mode 100644 index 00000000..63bee62c --- /dev/null +++ b/example/import_test_project/init_2.py @@ -0,0 +1,4 @@ +import init_file_folder_2 + + +init_file_folder_2.Starbucks.Tea() diff --git a/example/import_test_project/init_2_with_alias.py b/example/import_test_project/init_2_with_alias.py new file mode 100644 index 00000000..d29ee21c --- /dev/null +++ b/example/import_test_project/init_2_with_alias.py @@ -0,0 +1,4 @@ +import init_file_folder_2_with_alias + + +init_file_folder_2_with_alias.Eataly.Tea() diff --git a/example/import_test_project/init_3.py b/example/import_test_project/init_3.py new file mode 100644 index 00000000..e69de29b diff --git a/example/import_test_project/init_3_with_alias.py b/example/import_test_project/init_3_with_alias.py new file mode 100644 index 00000000..33882433 --- /dev/null +++ b/example/import_test_project/init_3_with_alias.py @@ -0,0 +1,3 @@ +import init_file_folder_3_with_alias + +init_file_folder_3_with_alias.heyo.moose.fast() diff --git a/example/import_test_project/init_file_folder_1/__init__.py b/example/import_test_project/init_file_folder_1/__init__.py new file mode 100755 index 00000000..f2275508 --- /dev/null +++ b/example/import_test_project/init_file_folder_1/__init__.py @@ -0,0 +1 @@ +from .nested_folder_with_init import StarbucksVisitor diff --git a/example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py new file mode 100755 index 00000000..b1378324 --- /dev/null +++ b/example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py @@ -0,0 +1 @@ +from .starbucks import StarbucksVisitor diff --git a/example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py b/example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py new file mode 100755 index 00000000..fd034b6a --- /dev/null +++ b/example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py @@ -0,0 +1,2 @@ +def StarbucksVisitor(): + print ("Iced Mocha") diff --git a/example/import_test_project/init_file_folder_1_with_alias/__init__.py b/example/import_test_project/init_file_folder_1_with_alias/__init__.py new file mode 100644 index 00000000..4f1cdd5f --- /dev/null +++ b/example/import_test_project/init_file_folder_1_with_alias/__init__.py @@ -0,0 +1 @@ +from .nested_folder_with_init import StarbucksVisitor as EatalyVisitor diff --git a/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py new file mode 100644 index 00000000..b1378324 --- /dev/null +++ b/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py @@ -0,0 +1 @@ +from .starbucks import StarbucksVisitor diff --git a/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py b/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py new file mode 100644 index 00000000..fd034b6a --- /dev/null +++ b/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py @@ -0,0 +1,2 @@ +def StarbucksVisitor(): + print ("Iced Mocha") diff --git a/example/import_test_project/init_file_folder_2/__init__.py b/example/import_test_project/init_file_folder_2/__init__.py new file mode 100644 index 00000000..b86a2371 --- /dev/null +++ b/example/import_test_project/init_file_folder_2/__init__.py @@ -0,0 +1 @@ +from .nested_folder_without_init import Starbucks diff --git a/example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py b/example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py new file mode 100644 index 00000000..2144c337 --- /dev/null +++ b/example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py @@ -0,0 +1,2 @@ +def Tea(): + print ("Teavana Green") diff --git a/example/import_test_project/init_file_folder_2_with_alias/__init__.py b/example/import_test_project/init_file_folder_2_with_alias/__init__.py new file mode 100644 index 00000000..4658d8ae --- /dev/null +++ b/example/import_test_project/init_file_folder_2_with_alias/__init__.py @@ -0,0 +1 @@ +from .nested_folder_without_init import Starbucks as Eataly diff --git a/example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py b/example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py new file mode 100644 index 00000000..2144c337 --- /dev/null +++ b/example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py @@ -0,0 +1,2 @@ +def Tea(): + print ("Teavana Green") diff --git a/example/import_test_project/init_file_folder_3_with_alias/__init__.py b/example/import_test_project/init_file_folder_3_with_alias/__init__.py new file mode 100644 index 00000000..953ef4ac --- /dev/null +++ b/example/import_test_project/init_file_folder_3_with_alias/__init__.py @@ -0,0 +1 @@ +from . import nested_folder_with_init as heyo diff --git a/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py new file mode 100644 index 00000000..aa26b189 --- /dev/null +++ b/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py @@ -0,0 +1 @@ +from . import moose diff --git a/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py b/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py new file mode 100644 index 00000000..2fee9a64 --- /dev/null +++ b/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py @@ -0,0 +1,2 @@ +def fast(): + print ("real fast") diff --git a/pyt/alias_helper.py b/pyt/alias_helper.py new file mode 100644 index 00000000..2c39612d --- /dev/null +++ b/pyt/alias_helper.py @@ -0,0 +1,28 @@ +"""This module contains helper functions for the interprocedural_cfg module.""" + +def as_alias_handler(alias_list): + """Returns a list of all the names that will be called.""" + list_ = list() + for alias in alias_list: + if alias.asname: + list_.append(alias.asname) + else: + list_.append(alias.name) + return list_ + +def not_as_alias_handler(names_list): + """Returns a list of names ignoring any aliases.""" + list_ = list() + for alias in names_list: + list_.append(alias.name) + return list_ + +def retrieve_import_alias_mapping(names_list): + """Creates a dictionary mapping aliases to their respective name. + import_alias_names is used in module_definitions.py and visit_Call""" + import_alias_names = {} + + for alias in names_list: + if alias.asname: + import_alias_names[alias.asname] = alias.name + return import_alias_names diff --git a/pyt/cfg.py b/pyt/cfg.py deleted file mode 100644 index 1515c3b3..00000000 --- a/pyt/cfg.py +++ /dev/null @@ -1,64 +0,0 @@ -"""This module contains classes for generating a Control Flow Graph -of a python program. - -The class Visitor is the main entry point to this module. -It uses the visitor pattern implemented by the ast module from the -standard library. -""" - -import ast -from collections import namedtuple - -from .module_definitions import ModuleDefinitions - - -CALL_IDENTIFIER = '¤' - -SavedVariable = namedtuple('SavedVariable', 'LHS RHS') - - -class Visitor(ast.NodeVisitor): - """A Control Flow Graph containing a list of nodes.""" - - def __init__(self, node, project_modules, local_modules, filename, module_definitions=None, intraprocedural=False): - """Create an empty CFG.""" - self.nodes = list() - self.function_index = 0 - self.undecided = False - self.project_modules = project_modules - self.local_modules = local_modules - self.function_names = list() - self.function_return_stack = list() - self.module_definitions_stack = list() - self.filenames = [filename] - self.intraprocedural = intraprocedural - - if intraprocedural: - self.init_intra_function_cfg(node) - elif module_definitions: - self.init_function_cfg(node, module_definitions) - else: - self.init_cfg(node) - - def init_intra_function_cfg(self, node): - self.module_definitions_stack.append(ModuleDefinitions()) - self.function_names.append(node.name) - self.function_return_stack.append(node.name) - - entry_node = self.append_node(EntryOrExitNode("Entry module")) - - module_statements = self.stmt_star_handler(node.body) - if isinstance(module_statements, IgnoredNode): - exit_node = self.append_node(EntryOrExitNode("Exit module")) - entry_node.connect(exit_node) - return - - first_node = module_statements.first_statement - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) - - exit_node = self.append_node(EntryOrExitNode("Exit module")) - - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 6427d281..7c71089d 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -15,6 +15,7 @@ ReturnNode, Visitor ) +from .alias_helper import as_alias_handler, not_as_alias_handler, retrieve_import_alias_mapping from .label_visitor import LabelVisitor from .module_definitions import ( LocalModuleDefinition, @@ -222,14 +223,14 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): rhs_visitor = RHSVisitor() rhs_visitor.visit(parameter) - n = RestoreNode(temp_name + ' = ' + label_visitor.result, + node = RestoreNode(temp_name + ' = ' + label_visitor.result, temp_name, rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - self.nodes[-1].connect(n) - self.nodes.append(n) + self.nodes[-1].connect(node) + self.nodes.append(node) parameters[label_visitor.result] = arguments[i] return parameters @@ -331,7 +332,7 @@ def get_function_nodes(self, definition): length = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + - definition.name)) + definition.name)) previous_node.connect(entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) @@ -351,9 +352,13 @@ def visit_Call(self, node): local_definitions = self.module_definitions_stack[-1] real_id = _id - for k in local_definitions.import_alias_mapping.keys(): - if _id.startswith(k): - real_id = _id.replace(k, local_definitions.import_alias_mapping[k]) + # This makes sure, where e.g. "import bar as foo" + # if it sees foo it gets the definition of bar. + for alias in local_definitions.import_alias_mapping.keys(): + # e.g. does foo.B start with foo? + # e.g. does foo == foo? + if _id.startswith(alias + '.') or _id == alias: + real_id = _id.replace(alias, local_definitions.import_alias_mapping[alias]) definition = local_definitions.get_definition(real_id) break if real_id == _id: @@ -391,17 +396,20 @@ def add_class(self, call_node, def_node): line_number=call_node.lineno, path=self.filenames[-1]) - def retrieve_import_alias_mapping(self, names_list): - """Creates a dictionary mapping aliases to their respective name. - import_alias_names is used in module_definitions.py and visit_Call""" - import_alias_names = {} + def handle_aliases_in_init_files(self, def_, import_alias_mapping, parent_definitions): + for key in import_alias_mapping.keys(): + # e.g. Foo == Foo + # e.g. Foo.Bar startswith Foo. + if def_.name == import_alias_mapping[key] or \ + def_.name.startswith(import_alias_mapping[key] + '.'): - for alias in names_list: - if alias.asname: - import_alias_names[alias.asname] = alias.name - return import_alias_names + # Replace val with key in def_.name + # e.g. StarbucksVisitor.Tea -> Eataly.Tea because + # "from .nested_folder import StarbucksVisitor as Eataly" + return def_.name.replace(import_alias_mapping[key], key) + return None - def add_file_module(self, module, module_name, local_names, import_alias_mapping): + def add_file_module(self, module, module_name, local_names, import_alias_mapping, is_init=False): module_path = module[1] self.filenames.append(module_path) self.local_modules = get_directory_modules(module_path) @@ -412,30 +420,124 @@ def add_file_module(self, module, module_name, local_names, import_alias_mapping parent_definitions.import_names = local_names module_definitions = ModuleDefinitions(local_names, module_name) + module_definitions.is_init = is_init self.module_definitions_stack.append(module_definitions) - self.append_node(EntryOrExitNode('Module Entry ' + module[0])) + # Remember, module[0] is None during e.g. "from . import foo", so we must str() + self.append_node(EntryOrExitNode('Module Entry ' + str(module[0]))) self.visit(tree) - exit_node = self.append_node(EntryOrExitNode('Module Exit ' + module[0])) + exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) self.module_definitions_stack.pop() self.filenames.pop() + if module_definitions.is_init: + for def_ in module_definitions.definitions: + module_def_alias = self.handle_aliases_in_init_files(def_, + module_definitions.import_alias_mapping, + parent_definitions) + parent_def_alias = self.handle_aliases_in_init_files(def_, + parent_definitions.import_alias_mapping, + parent_definitions) + # They should never both be set + assert not (module_def_alias and parent_def_alias) + + local_definitions = self.module_definitions_stack[-1] + other_parent_definitions = self.get_parent_definitions() + def_name = def_.name + + if module_name: + if other_parent_definitions: + assert not module_def_alias and not parent_def_alias + parent_qualified_name = '.'.join(other_parent_definitions.classes + + [def_name]) + parent_definition = ModuleDefinition(other_parent_definitions, + parent_qualified_name, + local_definitions.module_name, + self.filenames[-1]) + parent_definition.node = def_.node + other_parent_definitions.append_if_local_or_in_imports(parent_definition) + else: + assert module_def_alias or not parent_def_alias + + if module_def_alias: + def_name = module_def_alias + + parent_qualified_name = '.'.join([module_name.name, + def_name]) + parent_definition = ModuleDefinition(parent_definitions, + parent_qualified_name, + local_definitions.module_name, + self.filenames[-1]) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) + else: + if parent_def_alias: + def_name = parent_def_alias + if module_def_alias: + def_name = module_def_alias + + if other_parent_definitions: + assert not module_def_alias or parent_def_alias + parent_qualified_name = '.'.join(other_parent_definitions.classes + + [def_name]) + parent_definition = ModuleDefinition(other_parent_definitions, + parent_qualified_name, + local_definitions.module_name, + self.filenames[-1]) + parent_definition.node = def_.node + other_parent_definitions.append_if_local_or_in_imports(parent_definition) + else: + parent_definition = ModuleDefinition(parent_definitions, + def_name, + local_definitions.module_name, + self.filenames[-1]) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) + return exit_node - def add_directory_module(self, module, real_names, local_names, import_alias_mapping): + def from_package_import(self, module, real_names, local_names, import_alias_mapping, skip_init=False): module_path = module[1] + init_file_location = os.path.join(module_path, '__init__.py') + init_exists = os.path.isfile(init_file_location) + if init_exists and not skip_init: + return self.add_file_module((module[0], init_file_location), + None, + local_names, + import_alias_mapping, + is_init=True) for real_name in real_names: - file_module = (real_name, os.path.join(module_path, real_name + '.py')) - self.add_file_module(file_module, real_name, local_names, import_alias_mapping) + full_name = os.path.join(module_path, real_name) + if os.path.isdir(full_name): + new_init_file_location = os.path.join(full_name, '__init__.py') + if os.path.isfile(new_init_file_location): + if len(local_names) > 2: + # Handle me + raise + + self.add_file_module((real_name, new_init_file_location), + real_name, + local_names, + import_alias_mapping, + is_init=True) + else: + raise Exception("from anything import directory needs an __init__.py file in directory") + else: + file_module = (real_name, full_name + '.py') + self.add_file_module(file_module, real_name, local_names, import_alias_mapping) - def import_directory_module(self, module, import_alias_mapping): + def import_package(self, module, module_name, local_name, import_alias_mapping): module_path = module[1] init_file_location = os.path.join(module_path, '__init__.py') - file_exists = os.path.isfile(init_file_location) - if file_exists: - raise Exception("TODO: Handle __init__ files") + init_exists = os.path.isfile(init_file_location) + if init_exists: + return self.add_file_module((module[0], init_file_location), + module_name, + local_name, + import_alias_mapping, + is_init=True) else: raise Exception("import directory needs an __init__.py file") @@ -444,49 +546,35 @@ def visit_Import(self, node): for module in self.local_modules: if name.name == module[0]: if os.path.isdir(module[1]): - return self.import_directory_module(module, - self.retrieve_import_alias_mapping(node.names)) - else: - return self.add_file_module(module, - name.name, - name.asname, - self.retrieve_import_alias_mapping(node.names)) + return self.import_package(module, + name, + name.asname, + retrieve_import_alias_mapping(node.names)) + return self.add_file_module(module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names)) for module in self.project_modules: if name.name == module[0]: if os.path.isdir(module[1]): - return self.import_directory_module(module, - self.retrieve_import_alias_mapping(node.names)) - else: - return self.add_file_module(module, - name.name, - name.asname, - self.retrieve_import_alias_mapping(node.names)) + return self.import_package(module, + name, + name.asname, + retrieve_import_alias_mapping(node.names)) + return self.add_file_module(module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names)) return IgnoredNode() - def as_alias_handler(self, alias_list): - l = list() - for alias in alias_list: - if alias.asname: - l.append(alias.asname) - else: - l.append(alias.name) - return l - - def not_as_alias_handler(self, names_list): - l = list() - for alias in names_list: - l.append(alias.name) - return l - def handle_relative_import(self, node): """ from A means node.level == 0 from . import B means node.level == 1 from .A means node.level == 1 """ - is_file = False - no_file = os.path.abspath(os.path.join(self.filenames[-1], os.pardir)) + skip_init = False if node.level == 1: # Same directory as current file @@ -494,36 +582,35 @@ def handle_relative_import(self, node): name_with_dir = os.path.join(no_file, node.module.replace('.', '/')) if not os.path.isdir(name_with_dir): name_with_dir = name_with_dir + '.py' - is_file = True # e.g. from . import X else: name_with_dir = no_file + # We do not want to analyse the init file of the current directory + skip_init = True else: parent = os.path.abspath(os.path.join(no_file, os.pardir)) - if node.level > 2: - level = node.level - while level > 2: + # Perform extra `cd ..` however many times + for _ in range(0, node.level - 2): parent = os.path.abspath(os.path.join(parent, os.pardir)) - level = level - 1 if node.module: name_with_dir = os.path.join(parent, node.module.replace('.', '/')) if not os.path.isdir(name_with_dir): name_with_dir = name_with_dir + '.py' - is_file = True # e.g. from .. import X else: name_with_dir = parent - if is_file: + # Is it a file? + if name_with_dir.endswith('.py'): return self.add_file_module((node.module, name_with_dir), None, - self.as_alias_handler(node.names), - self.retrieve_import_alias_mapping(node.names)) - else: - return self.add_directory_module((node.module, name_with_dir), - self.not_as_alias_handler(node.names), - self.as_alias_handler(node.names), - self.retrieve_import_alias_mapping(node.names)) + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names)) + return self.from_package_import((node.module, name_with_dir), + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + skip_init=skip_init) def visit_ImportFrom(self, node): # Is it relative? @@ -533,25 +620,23 @@ def visit_ImportFrom(self, node): for module in self.local_modules: if node.module == module[0]: if os.path.isdir(module[1]): - return self.add_directory_module(module, - self.not_as_alias_handler(node.names), - self.as_alias_handler(node.names)) - else: - return self.add_file_module(module, None, - self.as_alias_handler(node.names), - self.retrieve_import_alias_mapping(node.names)) + return self.from_package_import(module, + not_as_alias_handler(node.names), + as_alias_handler(node.names)) + return self.add_file_module(module, None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names)) for module in self.project_modules: name = module[0] if node.module == name: if os.path.isdir(module[1]): - return self.add_directory_module(module, - self.not_as_alias_handler(node.names), - self.as_alias_handler(node.names), - self.retrieve_import_alias_mapping(node.names)) - else: - return self.add_file_module(module, None, - self.as_alias_handler(node.names), - self.retrieve_import_alias_mapping(node.names)) + return self.from_package_import(module, + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names)) + return self.add_file_module(module, None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names)) return IgnoredNode() diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index c0c1c45d..c54ef5b2 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -1,4 +1,6 @@ """This module handles module definitions which basically is a list of module definition.""" +import ast + project_definitions = dict() # Contains all project definitions for a program run @@ -16,7 +18,10 @@ def __init__(self, local_module_definitions, name, parent_module_name, path): self.path = path if parent_module_name: - self.name = parent_module_name + '.' + name + if isinstance(parent_module_name, ast.alias): + self.name = parent_module_name.name + '.' + name + else: + self.name = parent_module_name + '.' + name else: self.name = name @@ -27,7 +32,7 @@ def __str__(self): name = self.name if self.node: node = str(self.node) - return self.__class__.__name__ + ': ' + ';'.join((name, node)) + return "Path:" + self.path + " " + self.__class__.__name__ + ': ' + ';'.join((name, node)) class LocalModuleDefinition(ModuleDefinition): @@ -41,13 +46,15 @@ class ModuleDefinitions(): Adds to the project definitions list. """ - def __init__(self, import_names=None, module_name=None): + def __init__(self, import_names=None, module_name=None, is_init=False): """Optionally set import names and module name. Module name should only be set when it is a normal import statement. """ self.import_names = import_names + # module_name is sometimes ast.alias or a string self.module_name = module_name + self.is_init = is_init self.definitions = list() self.classes = list() self.import_alias_mapping = {} @@ -97,6 +104,10 @@ def __str__(self): module = self.module_name if self.definitions: + if isinstance(module, ast.alias): + return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module.name + '\n' return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module + '\n' else: - return 'No Definitions, module_name: ' + module + '\n' + if isinstance(module, ast.alias): + return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module.name) + '\n' + return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module) + '\n' diff --git a/pyt/utils/log.py b/pyt/utils/log.py new file mode 100644 index 00000000..74a49f56 --- /dev/null +++ b/pyt/utils/log.py @@ -0,0 +1,23 @@ +import logging + + +LOGGING_FMT = '%(levelname)3s] %(filename)s::%(funcName)s(%(lineno)d) - %(message)s' + + +def remove_other_handlers(to_keep=None): + for hdl in logger.handlers: + if hdl != to_keep: + logger.removeHandler(hdl) + + +def enable_logger(to_file=None): + logger.setLevel(logging.DEBUG) + ch = logging.StreamHandler() if not to_file else logging.FileHandler(to_file, mode='w') + ch.setLevel(logging.DEBUG) + fmt = logging.Formatter(LOGGING_FMT) + ch.setFormatter(fmt) + logger.addHandler(ch) + remove_other_handlers(ch) + +logger = logging.getLogger('pyt') +remove_other_handlers() diff --git a/tests/import_test.py b/tests/import_test.py index 4ef870d3..f4f3c355 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -350,8 +350,100 @@ def test_multiple_functions_with_aliases(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - # def test_init(self): - # file_path = os.path.normpath('example/import_test_project/init.py') + def test_init_1(self): + file_path = os.path.normpath('example/import_test_project/init_1.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_1", + "Module Entry nested_folder_with_init", + "Module Entry starbucks", + "Module Exit starbucks", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_1", + "Function Entry init_file_folder_1.StarbucksVisitor", + "print('Iced Mocha')", + "Exit init_file_folder_1.StarbucksVisitor", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_init_1_with_alias(self): + file_path = os.path.normpath('example/import_test_project/init_1_with_alias.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_1_with_alias", + "Module Entry nested_folder_with_init", + "Module Entry starbucks", + "Module Exit starbucks", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_1_with_alias", + "Function Entry init_file_folder_1_with_alias.EatalyVisitor", + "print('Iced Mocha')", + "Exit init_file_folder_1_with_alias.EatalyVisitor", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_init_2(self): + file_path = os.path.normpath('example/import_test_project/init_2.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_2", + "Module Entry Starbucks", + "Module Exit Starbucks", + "Module Exit init_file_folder_2", + "Function Entry init_file_folder_2.Starbucks.Tea", + "print('Teavana Green')", + "Exit init_file_folder_2.Starbucks.Tea", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_init_2_with_alias(self): + file_path = os.path.normpath('example/import_test_project/init_2_with_alias.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_2_with_alias", + "Module Entry Starbucks", + "Module Exit Starbucks", + "Module Exit init_file_folder_2_with_alias", + "Function Entry init_file_folder_2_with_alias.Eataly.Tea", + "print('Teavana Green')", + "Exit init_file_folder_2_with_alias.Eataly.Tea", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + # def test_init_3_with_alias(self): + # file_path = os.path.normpath('example/import_test_project/init_3_with_alias.py') # project_path = os.path.normpath('example/import_test_project') # project_modules = get_modules_and_packages(project_path) @@ -364,6 +456,98 @@ def test_multiple_functions_with_aliases(self): # for node, expected_label in zip(self.cfg.nodes, EXPECTED): # self.assertEqual(node.label, expected_label) + def test_from_init_1(self): + file_path = os.path.normpath('example/import_test_project/from_init_1.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_1", + "Module Entry nested_folder_with_init", + "Module Entry starbucks", + "Module Exit starbucks", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_1", + "Function Entry StarbucksVisitor", + "print('Iced Mocha')", + "Exit StarbucksVisitor", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_init_1_with_alias(self): + file_path = os.path.normpath('example/import_test_project/from_init_1_with_alias.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_1_with_alias", + "Module Entry nested_folder_with_init", + "Module Entry starbucks", + "Module Exit starbucks", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_1_with_alias", + "Function Entry EatalyVisitor", + "print('Iced Mocha')", + "Exit EatalyVisitor", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_init_2(self): + file_path = os.path.normpath('example/import_test_project/from_init_2.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_2", + "Module Entry Starbucks", + "Module Exit Starbucks", + "Module Exit init_file_folder_2", + "Function Entry Starbucks.Tea", + "print('Teavana Green')", + "Exit Starbucks.Tea", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_init_2_with_alias(self): + file_path = os.path.normpath('example/import_test_project/from_init_2_with_alias.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_2_with_alias", + "Module Entry Starbucks", + "Module Exit Starbucks", + "Module Exit init_file_folder_2_with_alias", + "Function Entry Eataly.Tea", + "print('Teavana Green')", + "Exit Eataly.Tea", + "Exit module"] + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + # def test_all(self): # file_path = os.path.normpath('example/import_test_project/all.py') # project_path = os.path.normpath('example/import_test_project') From 9dcec715e2de219e12f915bca58599dc7f19bff0 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 06:18:52 -0800 Subject: [PATCH 017/541] Uploaded a test file to see how it would look Will delete afterwards --- README[WIP].rst | 110 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 README[WIP].rst diff --git a/README[WIP].rst b/README[WIP].rst new file mode 100644 index 00000000..13fabfe4 --- /dev/null +++ b/README[WIP].rst @@ -0,0 +1,110 @@ + + +============================ +Python Taint +============================ + +Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) + +Features: +- Detect Command injection +- Detect SQL injection +- Detect XSS +- Detect directory traversal +- Get a control flow graph +- Get a def-use and/or a use-def chain +- Search GitHub and analyse hits with PyT +- Scan intraprocedural or interprocedural +- A lot of customisation possible + +Example usage and output: + + +----------------- +Install +----------------- + + + +============================ +Usage from Source +============================ + + + + +============================ +Contributions +============================ + +Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com + +[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) + +Virtual env setup guide +----------------------- + +Create a directory to hold the virtual env and project + +^^^^^^^^^^^^^^^^^^^^^^^^ +mkdir ~/a_folder +^^^^^^^^^^^^^^^^^^^^^^^^ + +^^^^^^^^^^^^^^^^^^^^^^^^ +cd ~/a_folder +^^^^^^^^^^^^^^^^^^^^^^^^ + +Clone the project into the directory + +^^^^^^^^^^^^^^^^^^^^^^^^ +git clone https://github.com/python-security/pyt.git +^^^^^^^^^^^^^^^^^^^^^^^^ + +Create the virtual environment + +^^^^^^^^^^^^^^^^^^^^^^^^ +python3 -m venv ~/a_folder/ +^^^^^^^^^^^^^^^^^^^^^^^^ + +Check that you have the right versions + +^^^^^^^^^^^^^^^^^^^^^^^^ +`python --version` sample output `Python 3.6.0` +^^^^^^^^^^^^^^^^^^^^^^^^ + + +^^^^^^^^^^^^^^^^^^^^^^^^ +pip --version sample output pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6) +^^^^^^^^^^^^^^^^^^^^^^^^ + +Change to project directory + +^^^^^^^^^^^^^^^^^^^^^^^^ +cd pyt +^^^^^^^^^^^^^^^^^^^^^^^^ + +Install dependencies + +^^^^^^^^^^^^^^^^^^^^^^^^ +pip install -r requirements.txt +^^^^^^^^^^^^^^^^^^^^^^^^ + + + +^^^^^^^^^^^^^^^^^^^^^^^^ +pip list` sample output +^^^^^^^^^^^^^^^^^^^^^^^^ + + +``` +gitdb (0.6.4) +GitPython (2.0.8) +graphviz (0.4.10) +pip (9.0.1) +requests (2.10.0) +setuptools (28.8.0) +smmap (0.9.0) +``` + +In the future, just type `source ~/pyt/bin/activate` to start developing. + From e320055a4c17a8984026db83286df7204e070759 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 07:22:05 -0700 Subject: [PATCH 018/541] Update README[WIP].rst --- README[WIP].rst | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README[WIP].rst b/README[WIP].rst index 13fabfe4..17ca500e 100644 --- a/README[WIP].rst +++ b/README[WIP].rst @@ -20,9 +20,9 @@ Features: Example usage and output: ------------------ +------- Install ------------------ +------- @@ -46,31 +46,31 @@ Virtual env setup guide Create a directory to hold the virtual env and project -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^ mkdir ~/a_folder -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^ -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^ cd ~/a_folder -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^ Clone the project into the directory -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ git clone https://github.com/python-security/pyt.git -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Create the virtual environment -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^ python3 -m venv ~/a_folder/ -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^ Check that you have the right versions -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ `python --version` sample output `Python 3.6.0` -^^^^^^^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^ From b98262fa8dd16a84964f2f440affe673020e44fd Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 09:36:03 -0700 Subject: [PATCH 019/541] Changed formatting Still needs some work. Not ready for a pull request --- README.md | 116 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 2a0b5145..2359c22f 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,105 @@ -[![Build Status](https://travis-ci.org/python-security/pyt.svg?branch=master)](https://travis-ci.org/python-security/pyt) - -# PyT - Python Taint +============ +Python Taint +============ Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -Features: -- Detect Command injection -- Detect SQL injection -- Detect XSS -- Detect directory traversal -- Get a control flow graph -- Get a def-use and/or a use-def chain -- Search GitHub and analyse hits with PyT -- Scan intraprocedural or interprocedural -- A lot of customisation possible +------- +Features +------- + +* Install `Python 2.7 `_ + +* Detect Command injection + +* Detect SQL injection + +* Detect XSS + +* Detect directory traversal + +* Get a control flow graph + +* Get a def-use and/or a use-def chain + +* Search GitHub and analyse hits with PyT + +* Scan intraprocedural or interprocedural + +* A lot of customisation possible Example usage and output: -![Alt text](/readme_static_files/pyt_example.png?raw=true "Optional Title") +``.. image:: pyt_example.png`` + + +Install + + + 1. git clone https://github.com/python-security/pyt.git + 2. python setup.py install + 3. pyt -h + + +Usage from Source -# Install -1. git clone https://github.com/python-security/pyt.git -2. python setup.py install -3. pyt -h -# Usage from source -Using it like a user: -`python -m pyt -f example/vulnerable_code/XSS_call.py save -du` +Using it like a user ``python -m pyt -f example/vulnerable_code/XSS_call.py save -du`` -Running the tests: `python -m tests` +Running the tests ``python -m tests`` -Running an individual test file: `python -m unittest tests.import_test` +Running an individual test file ``python -m unittest tests.import_test`` -Running an individual test: `python -m unittest tests.import_test.ImportTest.test_import` +Running an individual test ``python -m unittest tests.import_test.ImportTest.test_import`` + + +Contributions -# Contributions Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com [Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) -## Virtual env setup guide -Create a directory to hold the virtual env and project +Virtual env setup guide + + +Create a directory to hold the virtual env and project -`mkdir ~/a_folder` +``mkdir ~/a_folder`` -`cd ~/a_folder` +``cd ~/a_folder`` Clone the project into the directory -`git clone https://github.com/python-security/pyt.git` +``git clone https://github.com/python-security/pyt.git`` -Create the virtual environment +Create the virtual environment -`python3 -m venv ~/a_folder/` +``python3 -m venv ~/a_folder/`` -Check that you have the right versions +Check that you have the right versions -`python --version` sample output `Python 3.6.0` + ``python --version`` sample output ``Python 3.6.0`` -`pip --version` sample output `pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)` + ``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` Change to project directory -`cd pyt` +``cd pyt`` Install dependencies -`pip install -r requirements.txt` +``pip install -r requirements.txt`` -`pip list` sample output +``pip list`` sample output :: -``` -gitdb (0.6.4) -GitPython (2.0.8) -graphviz (0.4.10) -pip (9.0.1) -requests (2.10.0) -setuptools (28.8.0) -smmap (0.9.0) -``` + gitdb (0.6.4) + GitPython (2.0.8) + graphviz (0.4.10) + pip (9.0.1) + requests (2.10.0) + setuptools (28.8.0) + smmap (0.9.0) -In the future, just type `source ~/pyt/bin/activate` to start developing. +In the future, just type ``source ~/pyt/bin/activate`` to start developing. From 3b14d1c12b25404760295b18cbe7137f4f159f6d Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 09:37:56 -0700 Subject: [PATCH 020/541] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 2359c22f..d3aeec7b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -============ + Python Taint ============ @@ -34,7 +34,7 @@ Example usage and output: Install - +======= 1. git clone https://github.com/python-security/pyt.git 2. python setup.py install @@ -42,7 +42,7 @@ Install Usage from Source - +================= Using it like a user ``python -m pyt -f example/vulnerable_code/XSS_call.py save -du`` @@ -54,7 +54,7 @@ Running an individual test ``python -m unittest tests.import_test.ImportTest.tes Contributions - +============= Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com @@ -62,7 +62,7 @@ Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@g Virtual env setup guide - +======================= Create a directory to hold the virtual env and project From 1bf4d2443d72617209fdd6937745e5fdb456667a Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 09:38:35 -0700 Subject: [PATCH 021/541] Rename README.md to README.rst --- README.md => README.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename README.md => README.rst (100%) diff --git a/README.md b/README.rst similarity index 100% rename from README.md rename to README.rst From 9ea470caee238e28b6746cc793674f145e6f371b Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 09:41:41 -0700 Subject: [PATCH 022/541] Edited original readme.md file by mistake Mistakes were on my fork only. Created the md file again. --- README.md | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 00000000..2a0b5145 --- /dev/null +++ b/README.md @@ -0,0 +1,85 @@ +[![Build Status](https://travis-ci.org/python-security/pyt.svg?branch=master)](https://travis-ci.org/python-security/pyt) + +# PyT - Python Taint + +Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) + +Features: +- Detect Command injection +- Detect SQL injection +- Detect XSS +- Detect directory traversal +- Get a control flow graph +- Get a def-use and/or a use-def chain +- Search GitHub and analyse hits with PyT +- Scan intraprocedural or interprocedural +- A lot of customisation possible + +Example usage and output: + +![Alt text](/readme_static_files/pyt_example.png?raw=true "Optional Title") + +# Install +1. git clone https://github.com/python-security/pyt.git +2. python setup.py install +3. pyt -h + +# Usage from source +Using it like a user: +`python -m pyt -f example/vulnerable_code/XSS_call.py save -du` + +Running the tests: `python -m tests` + +Running an individual test file: `python -m unittest tests.import_test` + +Running an individual test: `python -m unittest tests.import_test.ImportTest.test_import` + + +# Contributions +Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com + +[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) + +## Virtual env setup guide + +Create a directory to hold the virtual env and project + +`mkdir ~/a_folder` + +`cd ~/a_folder` + +Clone the project into the directory + +`git clone https://github.com/python-security/pyt.git` + +Create the virtual environment + +`python3 -m venv ~/a_folder/` + +Check that you have the right versions + +`python --version` sample output `Python 3.6.0` + +`pip --version` sample output `pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)` + +Change to project directory + +`cd pyt` + +Install dependencies + +`pip install -r requirements.txt` + +`pip list` sample output + +``` +gitdb (0.6.4) +GitPython (2.0.8) +graphviz (0.4.10) +pip (9.0.1) +requests (2.10.0) +setuptools (28.8.0) +smmap (0.9.0) +``` + +In the future, just type `source ~/pyt/bin/activate` to start developing. From 34fd9ae709c1151ac05b7b158e29b3297f83d486 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sat, 6 May 2017 09:45:30 -0700 Subject: [PATCH 023/541] Updated and renamed readme.rst file Still a WIP. Only thing left is to link the image correctly. Not ready for a pull request yet. --- README.rst => README(wip).rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename README.rst => README(wip).rst (98%) diff --git a/README.rst b/README(wip).rst similarity index 98% rename from README.rst rename to README(wip).rst index d3aeec7b..b5a8b892 100644 --- a/README.rst +++ b/README(wip).rst @@ -30,7 +30,7 @@ Features Example usage and output: -``.. image:: pyt_example.png`` +``pyt_example.png`` Install From e6dfc161523e32cc77bcd47d0334f4d7248ed5b7 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sun, 7 May 2017 20:07:43 -0700 Subject: [PATCH 024/541] Update and rename README(wip).rst to README(wip2).rst --- README(wip).rst => README(wip2).rst | 2 -- 1 file changed, 2 deletions(-) rename README(wip).rst => README(wip2).rst (96%) diff --git a/README(wip).rst b/README(wip2).rst similarity index 96% rename from README(wip).rst rename to README(wip2).rst index b5a8b892..d93167b4 100644 --- a/README(wip).rst +++ b/README(wip2).rst @@ -8,8 +8,6 @@ Static analysis of Python web applications based on theoretical foundations (Con Features ------- -* Install `Python 2.7 `_ - * Detect Command injection * Detect SQL injection From 39d833da2490f5b15e88813d4b0558c23fb7d845 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sun, 7 May 2017 20:09:56 -0700 Subject: [PATCH 025/541] Finished formatting README.md file into rst format Added missing image and build status --- README(wip2).rst => README.rst | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) rename README(wip2).rst => README.rst (82%) diff --git a/README(wip2).rst b/README.rst similarity index 82% rename from README(wip2).rst rename to README.rst index d93167b4..5b67d915 100644 --- a/README(wip2).rst +++ b/README.rst @@ -1,3 +1,5 @@ +.. image:: https://travis-ci.org/python-security/pyt.svg?branch=master + :target: https://travis-ci.org/python-security/pyt Python Taint ============ @@ -28,8 +30,7 @@ Features Example usage and output: -``pyt_example.png`` - +.. image:: https://raw.githubusercontent.com/python-security/pyt/master/readme_static_files/pyt_example.png Install ======= @@ -78,9 +79,9 @@ Create the virtual environment Check that you have the right versions - ``python --version`` sample output ``Python 3.6.0`` +``python --version`` sample output ``Python 3.6.0`` - ``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` +``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` Change to project directory From 596b4250401bac8ce07205e6b44cd50941e83141 Mon Sep 17 00:00:00 2001 From: Toughee Date: Sun, 7 May 2017 20:11:15 -0700 Subject: [PATCH 026/541] Deleted test rst file --- README[WIP].rst | 110 ------------------------------------------------ 1 file changed, 110 deletions(-) delete mode 100644 README[WIP].rst diff --git a/README[WIP].rst b/README[WIP].rst deleted file mode 100644 index 17ca500e..00000000 --- a/README[WIP].rst +++ /dev/null @@ -1,110 +0,0 @@ - - -============================ -Python Taint -============================ - -Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) - -Features: -- Detect Command injection -- Detect SQL injection -- Detect XSS -- Detect directory traversal -- Get a control flow graph -- Get a def-use and/or a use-def chain -- Search GitHub and analyse hits with PyT -- Scan intraprocedural or interprocedural -- A lot of customisation possible - -Example usage and output: - - -------- -Install -------- - - - -============================ -Usage from Source -============================ - - - - -============================ -Contributions -============================ - -Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com - -[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) - -Virtual env setup guide ------------------------ - -Create a directory to hold the virtual env and project - -^^^^^^^^^^^^^^^^ -mkdir ~/a_folder -^^^^^^^^^^^^^^^^ - -^^^^^^^^^^^^^ -cd ~/a_folder -^^^^^^^^^^^^^ - -Clone the project into the directory - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -git clone https://github.com/python-security/pyt.git -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Create the virtual environment - -^^^^^^^^^^^^^^^^^^^^^^^^^^^ -python3 -m venv ~/a_folder/ -^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Check that you have the right versions - -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`python --version` sample output `Python 3.6.0` -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - - -^^^^^^^^^^^^^^^^^^^^^^^^ -pip --version sample output pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6) -^^^^^^^^^^^^^^^^^^^^^^^^ - -Change to project directory - -^^^^^^^^^^^^^^^^^^^^^^^^ -cd pyt -^^^^^^^^^^^^^^^^^^^^^^^^ - -Install dependencies - -^^^^^^^^^^^^^^^^^^^^^^^^ -pip install -r requirements.txt -^^^^^^^^^^^^^^^^^^^^^^^^ - - - -^^^^^^^^^^^^^^^^^^^^^^^^ -pip list` sample output -^^^^^^^^^^^^^^^^^^^^^^^^ - - -``` -gitdb (0.6.4) -GitPython (2.0.8) -graphviz (0.4.10) -pip (9.0.1) -requests (2.10.0) -setuptools (28.8.0) -smmap (0.9.0) -``` - -In the future, just type `source ~/pyt/bin/activate` to start developing. - From 3fad3d717b226280ecbaf9f0bd9adca7d2fd8d0b Mon Sep 17 00:00:00 2001 From: Thalmann Date: Mon, 8 May 2017 21:32:44 +0200 Subject: [PATCH 027/541] Fixed "Title overline too short" warning when compiling readme.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 5b67d915..e5d59229 100644 --- a/README.rst +++ b/README.rst @@ -6,9 +6,9 @@ Python Taint Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -------- +-------- Features -------- +-------- * Detect Command injection From d500a99089374ab0838eacddbe4c681219620420 Mon Sep 17 00:00:00 2001 From: Toughee Date: Mon, 8 May 2017 11:36:03 -0800 Subject: [PATCH 028/541] Readme.rst file (#41) * Uploaded a test file to see how it would look Will delete afterwards * Update README[WIP].rst * Changed formatting Still needs some work. Not ready for a pull request * Update README.md * Rename README.md to README.rst * Edited original readme.md file by mistake Mistakes were on my fork only. Created the md file again. * Updated and renamed readme.rst file Still a WIP. Only thing left is to link the image correctly. Not ready for a pull request yet. * Update and rename README(wip).rst to README(wip2).rst * Finished formatting README.md file into rst format Added missing image and build status * Deleted test rst file --- README.rst | 104 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 README.rst diff --git a/README.rst b/README.rst new file mode 100644 index 00000000..5b67d915 --- /dev/null +++ b/README.rst @@ -0,0 +1,104 @@ +.. image:: https://travis-ci.org/python-security/pyt.svg?branch=master + :target: https://travis-ci.org/python-security/pyt + +Python Taint +============ + +Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) + +------- +Features +------- + +* Detect Command injection + +* Detect SQL injection + +* Detect XSS + +* Detect directory traversal + +* Get a control flow graph + +* Get a def-use and/or a use-def chain + +* Search GitHub and analyse hits with PyT + +* Scan intraprocedural or interprocedural + +* A lot of customisation possible + +Example usage and output: + +.. image:: https://raw.githubusercontent.com/python-security/pyt/master/readme_static_files/pyt_example.png + +Install +======= + + 1. git clone https://github.com/python-security/pyt.git + 2. python setup.py install + 3. pyt -h + + +Usage from Source +================= + +Using it like a user ``python -m pyt -f example/vulnerable_code/XSS_call.py save -du`` + +Running the tests ``python -m tests`` + +Running an individual test file ``python -m unittest tests.import_test`` + +Running an individual test ``python -m unittest tests.import_test.ImportTest.test_import`` + + +Contributions +============= + +Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com + +[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) + + +Virtual env setup guide +======================= + +Create a directory to hold the virtual env and project + +``mkdir ~/a_folder`` + +``cd ~/a_folder`` + +Clone the project into the directory + +``git clone https://github.com/python-security/pyt.git`` + +Create the virtual environment + +``python3 -m venv ~/a_folder/`` + +Check that you have the right versions + +``python --version`` sample output ``Python 3.6.0`` + +``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` + +Change to project directory + +``cd pyt`` + +Install dependencies + +``pip install -r requirements.txt`` + +``pip list`` sample output :: + + gitdb (0.6.4) + GitPython (2.0.8) + graphviz (0.4.10) + pip (9.0.1) + requests (2.10.0) + setuptools (28.8.0) + smmap (0.9.0) + +In the future, just type ``source ~/pyt/bin/activate`` to start developing. From a0c81c91410e6ea942a5bda5f171e8cee3b3a090 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 11 May 2017 20:31:39 -0400 Subject: [PATCH 029/541] So init files work --- example/import_test_project/init_3.py | 3 + .../init_file_folder_3/__init__.py | 1 + .../nested_folder_with_init/__init__.py | 1 + .../nested_folder_with_init/moose.py | 2 + pyt/alias_helper.py | 44 +++ pyt/interprocedural_cfg.py | 307 ++++++++++-------- pyt/module_definitions.py | 11 +- tests/import_test.py | 72 +++- 8 files changed, 283 insertions(+), 158 deletions(-) create mode 100644 example/import_test_project/init_file_folder_3/__init__.py create mode 100644 example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py create mode 100644 example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py diff --git a/example/import_test_project/init_3.py b/example/import_test_project/init_3.py index e69de29b..2eab90af 100644 --- a/example/import_test_project/init_3.py +++ b/example/import_test_project/init_3.py @@ -0,0 +1,3 @@ +import init_file_folder_3 + +init_file_folder_3.nested_folder_with_init.moose.fast() diff --git a/example/import_test_project/init_file_folder_3/__init__.py b/example/import_test_project/init_file_folder_3/__init__.py new file mode 100644 index 00000000..d86ad722 --- /dev/null +++ b/example/import_test_project/init_file_folder_3/__init__.py @@ -0,0 +1 @@ +from . import nested_folder_with_init diff --git a/example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py new file mode 100644 index 00000000..aa26b189 --- /dev/null +++ b/example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py @@ -0,0 +1 @@ +from . import moose diff --git a/example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py b/example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py new file mode 100644 index 00000000..2fee9a64 --- /dev/null +++ b/example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py @@ -0,0 +1,2 @@ +def fast(): + print ("real fast") diff --git a/pyt/alias_helper.py b/pyt/alias_helper.py index 2c39612d..466d9855 100644 --- a/pyt/alias_helper.py +++ b/pyt/alias_helper.py @@ -10,6 +10,50 @@ def as_alias_handler(alias_list): list_.append(alias.name) return list_ +def handle_aliases_in_calls(name, import_alias_mapping): + """Returns either None or the handled alias. + Used in add_module. + + """ + for key, val in import_alias_mapping.items(): + # e.g. Foo == Foo + # e.g. Foo.Bar startswith Foo. + if name == key or \ + name.startswith(key + '.'): + + # Replace key with val in name + # e.g. StarbucksVisitor.Tea -> Eataly.Tea because + # "from .nested_folder import StarbucksVisitor as Eataly" + return name.replace(key, val) + return None + +def handle_aliases_in_init_files(name, import_alias_mapping): + """Returns either None or the handled alias. + Used in add_module. + + """ + for key, val in import_alias_mapping.items(): + # e.g. Foo == Foo + # e.g. Foo.Bar startswith Foo. + if name == val or \ + name.startswith(val + '.'): + + # Replace val with key in name + # e.g. StarbucksVisitor.Tea -> Eataly.Tea because + # "from .nested_folder import StarbucksVisitor as Eataly" + return name.replace(val, key) + return None + +def handle_fdi_aliases(module_or_package_name, import_alias_mapping): + """Returns either None or the handled alias. + Used in add_module. + + """ + for key, val in import_alias_mapping.items(): + if module_or_package_name == val: + return key + return None + def not_as_alias_handler(names_list): """Returns a list of names ignoring any aliases.""" list_ = list() diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 7c71089d..f9684aa6 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -2,6 +2,14 @@ import os.path from collections import namedtuple +from .alias_helper import ( + as_alias_handler, + handle_aliases_in_calls, + handle_aliases_in_init_files, + handle_fdi_aliases, + not_as_alias_handler, + retrieve_import_alias_mapping +) from .ast_helper import Arguments, generate_ast, get_call_names_as_string from .base_cfg import ( AssignmentNode, @@ -15,7 +23,6 @@ ReturnNode, Visitor ) -from .alias_helper import as_alias_handler, not_as_alias_handler, retrieve_import_alias_mapping from .label_visitor import LabelVisitor from .module_definitions import ( LocalModuleDefinition, @@ -24,6 +31,8 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') @@ -49,7 +58,7 @@ def __init__(self, node, project_modules, local_modules, self.init_cfg(node) def init_cfg(self, node): - self.module_definitions_stack.append(ModuleDefinitions()) + self.module_definitions_stack.append(ModuleDefinitions(filename=self.filenames[-1])) entry_node = self.append_node(EntryOrExitNode("Entry module")) @@ -224,10 +233,10 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): rhs_visitor.visit(parameter) node = RestoreNode(temp_name + ' = ' + label_visitor.result, - temp_name, - rhs_visitor.result, - line_number=line_number, - path=self.filenames[-1]) + temp_name, + rhs_visitor.result, + line_number=line_number, + path=self.filenames[-1]) self.nodes[-1].connect(node) self.nodes.append(node) @@ -240,7 +249,7 @@ def create_local_scope_from_actual_parameters(self, args, arguments, """Create the local scope before entering the body of a function call.""" - for i, parameter in enumerate(args): + for i in range(len(args)): temp_name = 'temp_' + str(self.function_index) + '_' + arguments[i] local_name = arguments[i] previous_node = self.nodes[-1] @@ -281,7 +290,7 @@ def restore_saved_local_scope(self, saved_variables, parameters, return restore_nodes - def return_handler(self, node, function_nodes, restore_nodes): + def return_handler(self, node, function_nodes): """Handle the return from a function during a function call.""" call_node = None for n in function_nodes: @@ -315,10 +324,8 @@ def add_function(self, call_node, definition): def_node.lineno) function_nodes = self.get_function_nodes(definition) self.filenames.pop() # Maybe move after restore nodes - restore_nodes = self.restore_saved_local_scope(saved_variables, - parameters, - def_node.lineno) - self.return_handler(call_node, function_nodes, restore_nodes) + self.restore_saved_local_scope(saved_variables, parameters, def_node.lineno) + self.return_handler(call_node, function_nodes) self.function_return_stack.pop() except IndexError: @@ -350,18 +357,13 @@ def visit_Call(self, node): self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] + logger.debug("local_definitions is %s", local_definitions) + - real_id = _id - # This makes sure, where e.g. "import bar as foo" - # if it sees foo it gets the definition of bar. - for alias in local_definitions.import_alias_mapping.keys(): - # e.g. does foo.B start with foo? - # e.g. does foo == foo? - if _id.startswith(alias + '.') or _id == alias: - real_id = _id.replace(alias, local_definitions.import_alias_mapping[alias]) - definition = local_definitions.get_definition(real_id) - break - if real_id == _id: + alias = handle_aliases_in_calls(_id, local_definitions.import_alias_mapping) + if alias: + definition = local_definitions.get_definition(alias) + else: definition = local_definitions.get_definition(_id) if definition: @@ -396,148 +398,162 @@ def add_class(self, call_node, def_node): line_number=call_node.lineno, path=self.filenames[-1]) - def handle_aliases_in_init_files(self, def_, import_alias_mapping, parent_definitions): - for key in import_alias_mapping.keys(): - # e.g. Foo == Foo - # e.g. Foo.Bar startswith Foo. - if def_.name == import_alias_mapping[key] or \ - def_.name.startswith(import_alias_mapping[key] + '.'): + def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdi=False): + """ + Args: + module_or_package_name: We are using module_or_package_name for 2 different things and it is bad. - # Replace val with key in def_.name - # e.g. StarbucksVisitor.Tea -> Eataly.Tea because - # "from .nested_folder import StarbucksVisitor as Eataly" - return def_.name.replace(import_alias_mapping[key], key) - return None + Returns: + The ExitNode that gets attached to the CFG of the class. - def add_file_module(self, module, module_name, local_names, import_alias_mapping, is_init=False): + Open Questions: + Are there times when the return value doesn't matter? + When are the 2 types of definitions set? + new_module_definitions + parent_definitions + """ module_path = module[1] - self.filenames.append(module_path) - self.local_modules = get_directory_modules(module_path) - tree = generate_ast(module_path) parent_definitions = self.module_definitions_stack[-1] + # The only place the import_alias_mapping is set parent_definitions.import_alias_mapping = import_alias_mapping parent_definitions.import_names = local_names - module_definitions = ModuleDefinitions(local_names, module_name) - module_definitions.is_init = is_init - self.module_definitions_stack.append(module_definitions) + new_module_definitions = ModuleDefinitions(local_names, module_or_package_name) + new_module_definitions.is_init = is_init + self.module_definitions_stack.append(new_module_definitions) + + # Analyse the file + self.filenames.append(module_path) + self.local_modules = get_directory_modules(module_path) + tree = generate_ast(module_path) # Remember, module[0] is None during e.g. "from . import foo", so we must str() self.append_node(EntryOrExitNode('Module Entry ' + str(module[0]))) self.visit(tree) exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) + # Done analysing, pop the module off self.module_definitions_stack.pop() self.filenames.pop() - if module_definitions.is_init: - for def_ in module_definitions.definitions: - module_def_alias = self.handle_aliases_in_init_files(def_, - module_definitions.import_alias_mapping, - parent_definitions) - parent_def_alias = self.handle_aliases_in_init_files(def_, - parent_definitions.import_alias_mapping, - parent_definitions) + if new_module_definitions.is_init: + logger.debug("WE ARE ANALYZING AN INIT FILE") + for def_ in new_module_definitions.definitions: + module_def_alias = handle_aliases_in_init_files(def_.name, + new_module_definitions.import_alias_mapping) + parent_def_alias = handle_aliases_in_init_files(def_.name, + parent_definitions.import_alias_mapping) # They should never both be set assert not (module_def_alias and parent_def_alias) - local_definitions = self.module_definitions_stack[-1] - other_parent_definitions = self.get_parent_definitions() def_name = def_.name + if parent_def_alias: + def_name = parent_def_alias + if module_def_alias: + def_name = module_def_alias - if module_name: - if other_parent_definitions: - assert not module_def_alias and not parent_def_alias - parent_qualified_name = '.'.join(other_parent_definitions.classes + - [def_name]) - parent_definition = ModuleDefinition(other_parent_definitions, - parent_qualified_name, - local_definitions.module_name, - self.filenames[-1]) - parent_definition.node = def_.node - other_parent_definitions.append_if_local_or_in_imports(parent_definition) + local_definitions = self.module_definitions_stack[-1] + if local_definitions != parent_definitions: + raise + if not isinstance(module_or_package_name, str): + module_or_package_name = module_or_package_name.name + + if module_or_package_name: + if from_from: + qualified_name = def_name + + if from_fdi: + alias = handle_fdi_aliases(module_or_package_name, import_alias_mapping) + if alias: + module_or_package_name = alias + parent_definition = ModuleDefinition(parent_definitions, + qualified_name, + module_or_package_name, + self.filenames[-1]) + logger.debug("[from_fdi] import_alias_mapping are %s", import_alias_mapping) + logger.debug("[from_fdi] local_names are %s", local_names) + logger.debug("[from_fdi] module_or_package_name is %s", module_or_package_name) + else: + parent_definition = ModuleDefinition(parent_definitions, + qualified_name, + None, + self.filenames[-1]) else: - assert module_def_alias or not parent_def_alias - - if module_def_alias: - def_name = module_def_alias - - parent_qualified_name = '.'.join([module_name.name, + qualified_name = '.'.join([module_or_package_name, def_name]) parent_definition = ModuleDefinition(parent_definitions, - parent_qualified_name, - local_definitions.module_name, + qualified_name, + parent_definitions.module_name, self.filenames[-1]) - parent_definition.node = def_.node - parent_definitions.definitions.append(parent_definition) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) + + logger.debug("CRITICAL qualified_name is %s", qualified_name) + logger.debug("CRITICAL from_from is %s", from_from) + logger.debug("CRITICAL module_or_package_name is %s", module_or_package_name) + logger.debug("CRITICAL parent_definitions.module_name is %s", parent_definitions.module_name) + logger.debug("CRITICAL parent_definition is %s", parent_definition) else: - if parent_def_alias: - def_name = parent_def_alias - if module_def_alias: - def_name = module_def_alias - - if other_parent_definitions: - assert not module_def_alias or parent_def_alias - parent_qualified_name = '.'.join(other_parent_definitions.classes + - [def_name]) - parent_definition = ModuleDefinition(other_parent_definitions, - parent_qualified_name, - local_definitions.module_name, - self.filenames[-1]) - parent_definition.node = def_.node - other_parent_definitions.append_if_local_or_in_imports(parent_definition) - else: - parent_definition = ModuleDefinition(parent_definitions, - def_name, - local_definitions.module_name, - self.filenames[-1]) - parent_definition.node = def_.node - parent_definitions.definitions.append(parent_definition) + parent_definition = ModuleDefinition(parent_definitions, + def_name, + parent_definitions.module_name, + self.filenames[-1]) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) return exit_node - def from_package_import(self, module, real_names, local_names, import_alias_mapping, skip_init=False): + def from_directory_import(self, module, real_names, local_names, import_alias_mapping, skip_init=False): + """ + Directories don't need to be packages. + """ module_path = module[1] init_file_location = os.path.join(module_path, '__init__.py') init_exists = os.path.isfile(init_file_location) + logger.debug("module_path is %s", module_path) + logger.debug("init_exists is %s", init_exists) + logger.debug("skip_init is %s", skip_init) + if init_exists and not skip_init: - return self.add_file_module((module[0], init_file_location), - None, - local_names, - import_alias_mapping, - is_init=True) + package_name = os.path.split(module_path)[1] + logger.debug("package_name is %s", package_name) + + return self.add_module((module[0], init_file_location), + package_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True) for real_name in real_names: full_name = os.path.join(module_path, real_name) if os.path.isdir(full_name): new_init_file_location = os.path.join(full_name, '__init__.py') if os.path.isfile(new_init_file_location): - if len(local_names) > 2: - # Handle me - raise - - self.add_file_module((real_name, new_init_file_location), - real_name, - local_names, - import_alias_mapping, - is_init=True) + self.add_module((real_name, new_init_file_location), + real_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True, + from_fdi=True) else: raise Exception("from anything import directory needs an __init__.py file in directory") else: file_module = (real_name, full_name + '.py') - self.add_file_module(file_module, real_name, local_names, import_alias_mapping) + self.add_module(file_module, real_name, local_names, import_alias_mapping, from_from=True) def import_package(self, module, module_name, local_name, import_alias_mapping): module_path = module[1] init_file_location = os.path.join(module_path, '__init__.py') init_exists = os.path.isfile(init_file_location) if init_exists: - return self.add_file_module((module[0], init_file_location), - module_name, - local_name, - import_alias_mapping, - is_init=True) + return self.add_module((module[0], init_file_location), + module_name, + local_name, + import_alias_mapping, + is_init=True) else: raise Exception("import directory needs an __init__.py file") @@ -550,10 +566,10 @@ def visit_Import(self, node): name, name.asname, retrieve_import_alias_mapping(node.names)) - return self.add_file_module(module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names)) + return self.add_module(module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names)) for module in self.project_modules: if name.name == module[0]: if os.path.isdir(module[1]): @@ -561,10 +577,10 @@ def visit_Import(self, node): name, name.asname, retrieve_import_alias_mapping(node.names)) - return self.add_file_module(module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names)) + return self.add_module(module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names)) return IgnoredNode() def handle_relative_import(self, node): @@ -603,14 +619,15 @@ def handle_relative_import(self, node): # Is it a file? if name_with_dir.endswith('.py'): - return self.add_file_module((node.module, name_with_dir), None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names)) - return self.from_package_import((node.module, name_with_dir), - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - skip_init=skip_init) + return self.add_module((node.module, name_with_dir), None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True) + return self.from_directory_import((node.module, name_with_dir), + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + skip_init=skip_init) def visit_ImportFrom(self, node): # Is it relative? @@ -620,23 +637,25 @@ def visit_ImportFrom(self, node): for module in self.local_modules: if node.module == module[0]: if os.path.isdir(module[1]): - return self.from_package_import(module, - not_as_alias_handler(node.names), - as_alias_handler(node.names)) - return self.add_file_module(module, None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names)) + return self.from_directory_import(module, + not_as_alias_handler(node.names), + as_alias_handler(node.names)) + return self.add_module(module, None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True) for module in self.project_modules: name = module[0] if node.module == name: if os.path.isdir(module[1]): - return self.from_package_import(module, - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names)) - return self.add_file_module(module, None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names)) + return self.from_directory_import(module, + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names)) + return self.add_module(module, None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True) return IgnoredNode() diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index c54ef5b2..17fcf2a6 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -46,7 +46,7 @@ class ModuleDefinitions(): Adds to the project definitions list. """ - def __init__(self, import_names=None, module_name=None, is_init=False): + def __init__(self, import_names=None, module_name=None, is_init=False, filename=None): """Optionally set import names and module name. Module name should only be set when it is a normal import statement. @@ -55,6 +55,7 @@ def __init__(self, import_names=None, module_name=None, is_init=False): # module_name is sometimes ast.alias or a string self.module_name = module_name self.is_init = is_init + self.filename = filename self.definitions = list() self.classes = list() self.import_alias_mapping = {} @@ -105,9 +106,9 @@ def __str__(self): if self.definitions: if isinstance(module, ast.alias): - return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module.name + '\n' - return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module + '\n' + return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module.name + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n' + return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n' else: if isinstance(module, ast.alias): - return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module.name) + '\n' - return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module) + '\n' + return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module.name) + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n' + return 'import_names is '+ str(self.import_names) + ' No Definitions, module_name: ' + str(module) + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n' diff --git a/tests/import_test.py b/tests/import_test.py index f4f3c355..cae6fb25 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -4,6 +4,8 @@ from .base_test_case import BaseTestCase from pyt.ast_helper import get_call_names_as_string from pyt.project_handler import get_directory_modules, get_modules_and_packages +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ImportTest(BaseTestCase): @@ -371,6 +373,9 @@ def test_init_1(self): "Exit init_file_folder_1.StarbucksVisitor", "Exit module"] + for node in self.cfg.nodes: + logger.debug("node is %s", node) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -442,19 +447,59 @@ def test_init_2_with_alias(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - # def test_init_3_with_alias(self): - # file_path = os.path.normpath('example/import_test_project/init_3_with_alias.py') - # project_path = os.path.normpath('example/import_test_project') + def test_init_3(self): + file_path = os.path.normpath('example/import_test_project/init_3.py') + project_path = os.path.normpath('example/import_test_project') - # project_modules = get_modules_and_packages(project_path) - # local_modules = get_directory_modules(project_path) + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) - # self.cfg_create_from_file(file_path, project_modules, local_modules) + self.cfg_create_from_file(file_path, project_modules, local_modules) - # EXPECTED = ['Not Yet'] + EXPECTED = ["Entry module", + "Module Entry init_file_folder_3", + "Module Entry nested_folder_with_init", + "Module Entry moose", + "Module Exit moose", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_3", + "Function Entry init_file_folder_3.nested_folder_with_init.moose.fast", + "print('real fast')", + "Exit init_file_folder_3.nested_folder_with_init.moose.fast", + "Exit module"] - # for node, expected_label in zip(self.cfg.nodes, EXPECTED): - # self.assertEqual(node.label, expected_label) + for node in self.cfg.nodes: + logger.debug("node is %s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_init_3_with_alias(self): + file_path = os.path.normpath('example/import_test_project/init_3_with_alias.py') + project_path = os.path.normpath('example/import_test_project') + + project_modules = get_modules_and_packages(project_path) + local_modules = get_directory_modules(project_path) + + self.cfg_create_from_file(file_path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry init_file_folder_3_with_alias", + "Module Entry nested_folder_with_init", + "Module Entry moose", + "Module Exit moose", + "Module Exit nested_folder_with_init", + "Module Exit init_file_folder_3_with_alias", + "Function Entry init_file_folder_3_with_alias.heyo.moose.fast", + "print('real fast')", + "Exit init_file_folder_3_with_alias.heyo.moose.fast", + "Exit module"] + + for node in self.cfg.nodes: + logger.debug("node is %s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) def test_from_init_1(self): file_path = os.path.normpath('example/import_test_project/from_init_1.py') @@ -477,6 +522,9 @@ def test_from_init_1(self): "Exit StarbucksVisitor", "Exit module"] + for node in self.cfg.nodes: + logger.debug("node is %s", node) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -501,6 +549,9 @@ def test_from_init_1_with_alias(self): "Exit EatalyVisitor", "Exit module"] + for node in self.cfg.nodes: + logger.debug("node is %s", node) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -523,6 +574,9 @@ def test_from_init_2(self): "Exit Starbucks.Tea", "Exit module"] + for node in self.cfg.nodes: + logger.debug("node is %s", node) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) From 57c7e922f784d9183a5635739c810deae20ca089 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Fri, 12 May 2017 11:26:18 +0200 Subject: [PATCH 030/541] PEP8 vulnerability_log. This should be refactored as well.. --- pyt/vulnerability_log.py | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index f2d5a2f6..ad7cc8a2 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -1,9 +1,11 @@ """This module contains a vulnerability log. -This log is able to give precise information about where a vulnerability is located. +This log is able to give precise information + about where a vulnerability is located. The log is printed to standard output. """ + class VulnerabilityLog(): """Log that consists of vulnerabilities.""" @@ -24,7 +26,8 @@ def print_report(self): print('%s vulnerabilities found:' % number_of_vulnerabilities) for i, vulnerability in enumerate(self.vulnerabilities, start=1): - print('Vulnerability {}:\n{}\n'.format(i, vulnerability)) + print('Vulnerability {}:\n{}\n'.format(i, vulnerability)) + class Reassigned(): def __init__(self, secondary_nodes): @@ -34,14 +37,19 @@ def __str__(self): secondary = '' if self.secondary_nodes: secondary += '\nReassigned in: \n\t' - secondary += '\n\t'.join(['File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + node.label for node in self.secondary_nodes]) + secondary += '\n\t'.join([ + 'File: ' + node.path + '\n\t' + ' > Line ' + + str(node.line_number) + ': ' + + node.label for node in self.secondary_nodes]) return secondary class Vulnerability(): - """Vulnerability containing the source and the sources trigger word, the sink and the sinks trigger word.""" + """Vulnerability containing the source and the sources trigger word, + the sink and the sinks trigger word.""" - def __init__(self, source, source_trigger_word, sink, sink_trigger_word, secondary_nodes): + def __init__(self, source, source_trigger_word, + sink, sink_trigger_word, secondary_nodes): """Set source and sink information.""" self.source = source self.source_trigger_word = source_trigger_word @@ -61,18 +69,30 @@ def __remove_sink_from_secondary_nodes(self): def __str__(self): """Pretty printing of a vulnerability.""" reassigned_str = Reassigned(self.secondary_nodes) - return 'File: {}\n > User input at line {}, trigger word "{}": \n\t{}{}\nFile: {}\n > reaches line {}, trigger word "{}": \n\t{}'.format(self.source.path, self.source.line_number, self.source_trigger_word, self.source.label, reassigned_str, self.sink.path, self.sink.line_number, self.sink_trigger_word, self.sink.label) + return ('File: {}\n > User input at line {}, trigger word "{}":' + ' \n\t{}{}\nFile: {}\n > reaches line {}, trigger word' + ' "{}": \n\t{}'.format( + self.source.path, self.source.line_number, + self.source_trigger_word, self.source.label, + reassigned_str, self.sink.path, self.sink.line_number, + self.sink_trigger_word, self.sink.label)) + class SanitisedVulnerability(Vulnerability): - """A sanitised vulnerability containing the source and the sources trigger word, the sink and the sinks trigger word. Also containing the sanitiser.""" + """A sanitised vulnerability containing the source and the sources + trigger word, the sink and the sinks trigger word. + Also containing the sanitiser.""" - def __init__(self, source, source_trigger_word, sink, sink_trigger_word, sanitiser, secondary_nodes): + def __init__(self, source, source_trigger_word, + sink, sink_trigger_word, sanitiser, secondary_nodes): """Set source, sink and sanitiser information.""" - super().__init__(source, source_trigger_word, sink, sink_trigger_word, secondary_nodes) + super().__init__(source, source_trigger_word, + sink, sink_trigger_word, secondary_nodes) self.sanitiser = sanitiser def __str__(self): """Pretty printing of a vulnerability.""" super_str = super().__str__() - return super_str + '\nThis vulnerability is potentially sanitised by: {}'.format(self.sanitiser) + return super_str + ('\nThis vulnerability is potentially sanitised by:' + ' {}'.format(self.sanitiser)) From ac913c837b4478a2df42d0d41c8024936219b6fd Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 12 May 2017 19:36:53 -0400 Subject: [PATCH 031/541] [imports]support import * --- .../from_directory_import_star.py | 6 + .../from_directory_import_star_with_alias.py | 6 + .../from_file_import_star.py | 6 + .../import_star_folder_1/A.py | 2 + .../import_star_folder_1/B.py | 2 + .../import_star_folder_1/__init__.py | 3 + .../import_star_folder_1/folder/C.py | 2 + .../import_star_folder_1/folder/__init__.py | 1 + .../import_star_folder_1_with_alias/A.py | 2 + .../import_star_folder_1_with_alias/B.py | 2 + .../__init__.py | 3 + .../folder/C.py | 2 + .../folder/__init__.py | 1 + pyt/interprocedural_cfg.py | 37 +----- pyt/module_definitions.py | 2 + tests/import_test.py | 108 ++++++++++++++++++ 16 files changed, 154 insertions(+), 31 deletions(-) create mode 100644 example/import_test_project/from_directory_import_star.py create mode 100644 example/import_test_project/from_directory_import_star_with_alias.py create mode 100644 example/import_test_project/from_file_import_star.py create mode 100644 example/import_test_project/import_star_folder_1/A.py create mode 100644 example/import_test_project/import_star_folder_1/B.py create mode 100644 example/import_test_project/import_star_folder_1/__init__.py create mode 100644 example/import_test_project/import_star_folder_1/folder/C.py create mode 100644 example/import_test_project/import_star_folder_1/folder/__init__.py create mode 100644 example/import_test_project/import_star_folder_1_with_alias/A.py create mode 100644 example/import_test_project/import_star_folder_1_with_alias/B.py create mode 100644 example/import_test_project/import_star_folder_1_with_alias/__init__.py create mode 100644 example/import_test_project/import_star_folder_1_with_alias/folder/C.py create mode 100644 example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py diff --git a/example/import_test_project/from_directory_import_star.py b/example/import_test_project/from_directory_import_star.py new file mode 100644 index 00000000..769e3094 --- /dev/null +++ b/example/import_test_project/from_directory_import_star.py @@ -0,0 +1,6 @@ +from import_star_folder_1 import * + + +A.cobia() +B.al() +folder.C.pastor() diff --git a/example/import_test_project/from_directory_import_star_with_alias.py b/example/import_test_project/from_directory_import_star_with_alias.py new file mode 100644 index 00000000..35bb6691 --- /dev/null +++ b/example/import_test_project/from_directory_import_star_with_alias.py @@ -0,0 +1,6 @@ +from import_star_folder_1_with_alias import * + + +husk.cobia() +meringue.al() +corn.mousse.pastor() diff --git a/example/import_test_project/from_file_import_star.py b/example/import_test_project/from_file_import_star.py new file mode 100644 index 00000000..6be51510 --- /dev/null +++ b/example/import_test_project/from_file_import_star.py @@ -0,0 +1,6 @@ +from A import * + + +B("60") +C("minute") +D("IPA") diff --git a/example/import_test_project/import_star_folder_1/A.py b/example/import_test_project/import_star_folder_1/A.py new file mode 100644 index 00000000..78ac29a9 --- /dev/null +++ b/example/import_test_project/import_star_folder_1/A.py @@ -0,0 +1,2 @@ +def cobia(): + print ("A") diff --git a/example/import_test_project/import_star_folder_1/B.py b/example/import_test_project/import_star_folder_1/B.py new file mode 100644 index 00000000..db1fd172 --- /dev/null +++ b/example/import_test_project/import_star_folder_1/B.py @@ -0,0 +1,2 @@ +def al(): + print ("B") diff --git a/example/import_test_project/import_star_folder_1/__init__.py b/example/import_test_project/import_star_folder_1/__init__.py new file mode 100644 index 00000000..ef498d06 --- /dev/null +++ b/example/import_test_project/import_star_folder_1/__init__.py @@ -0,0 +1,3 @@ +from . import A +from . import B +from . import folder diff --git a/example/import_test_project/import_star_folder_1/folder/C.py b/example/import_test_project/import_star_folder_1/folder/C.py new file mode 100644 index 00000000..5079b963 --- /dev/null +++ b/example/import_test_project/import_star_folder_1/folder/C.py @@ -0,0 +1,2 @@ +def pastor(): + print ("C") diff --git a/example/import_test_project/import_star_folder_1/folder/__init__.py b/example/import_test_project/import_star_folder_1/folder/__init__.py new file mode 100644 index 00000000..ee406d51 --- /dev/null +++ b/example/import_test_project/import_star_folder_1/folder/__init__.py @@ -0,0 +1 @@ +from . import C diff --git a/example/import_test_project/import_star_folder_1_with_alias/A.py b/example/import_test_project/import_star_folder_1_with_alias/A.py new file mode 100644 index 00000000..78ac29a9 --- /dev/null +++ b/example/import_test_project/import_star_folder_1_with_alias/A.py @@ -0,0 +1,2 @@ +def cobia(): + print ("A") diff --git a/example/import_test_project/import_star_folder_1_with_alias/B.py b/example/import_test_project/import_star_folder_1_with_alias/B.py new file mode 100644 index 00000000..db1fd172 --- /dev/null +++ b/example/import_test_project/import_star_folder_1_with_alias/B.py @@ -0,0 +1,2 @@ +def al(): + print ("B") diff --git a/example/import_test_project/import_star_folder_1_with_alias/__init__.py b/example/import_test_project/import_star_folder_1_with_alias/__init__.py new file mode 100644 index 00000000..1fb3d205 --- /dev/null +++ b/example/import_test_project/import_star_folder_1_with_alias/__init__.py @@ -0,0 +1,3 @@ +from . import A as husk +from . import B as meringue +from . import folder as corn diff --git a/example/import_test_project/import_star_folder_1_with_alias/folder/C.py b/example/import_test_project/import_star_folder_1_with_alias/folder/C.py new file mode 100644 index 00000000..5079b963 --- /dev/null +++ b/example/import_test_project/import_star_folder_1_with_alias/folder/C.py @@ -0,0 +1,2 @@ +def pastor(): + print ("C") diff --git a/example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py b/example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py new file mode 100644 index 00000000..a4685b7c --- /dev/null +++ b/example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py @@ -0,0 +1 @@ +from . import C as mousse diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index f9684aa6..20cf6eb7 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -31,8 +31,6 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') @@ -357,8 +355,6 @@ def visit_Call(self, node): self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] - logger.debug("local_definitions is %s", local_definitions) - alias = handle_aliases_in_calls(_id, local_definitions.import_alias_mapping) if alias: @@ -398,25 +394,19 @@ def add_class(self, call_node, def_node): line_number=call_node.lineno, path=self.filenames[-1]) - def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdi=False): + def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): """ - Args: - module_or_package_name: We are using module_or_package_name for 2 different things and it is bad. - Returns: The ExitNode that gets attached to the CFG of the class. - Open Questions: + Open Question: Are there times when the return value doesn't matter? - When are the 2 types of definitions set? - new_module_definitions - parent_definitions """ module_path = module[1] parent_definitions = self.module_definitions_stack[-1] - # The only place the import_alias_mapping is set - parent_definitions.import_alias_mapping = import_alias_mapping + # The only place the import_alias_mapping is updated + parent_definitions.import_alias_mapping.update(import_alias_mapping) parent_definitions.import_names = local_names new_module_definitions = ModuleDefinitions(local_names, module_or_package_name) @@ -438,7 +428,6 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m self.filenames.pop() if new_module_definitions.is_init: - logger.debug("WE ARE ANALYZING AN INIT FILE") for def_ in new_module_definitions.definitions: module_def_alias = handle_aliases_in_init_files(def_.name, new_module_definitions.import_alias_mapping) @@ -463,7 +452,7 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m if from_from: qualified_name = def_name - if from_fdi: + if from_fdid: alias = handle_fdi_aliases(module_or_package_name, import_alias_mapping) if alias: module_or_package_name = alias @@ -471,9 +460,6 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m qualified_name, module_or_package_name, self.filenames[-1]) - logger.debug("[from_fdi] import_alias_mapping are %s", import_alias_mapping) - logger.debug("[from_fdi] local_names are %s", local_names) - logger.debug("[from_fdi] module_or_package_name is %s", module_or_package_name) else: parent_definition = ModuleDefinition(parent_definitions, qualified_name, @@ -488,12 +474,6 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m self.filenames[-1]) parent_definition.node = def_.node parent_definitions.definitions.append(parent_definition) - - logger.debug("CRITICAL qualified_name is %s", qualified_name) - logger.debug("CRITICAL from_from is %s", from_from) - logger.debug("CRITICAL module_or_package_name is %s", module_or_package_name) - logger.debug("CRITICAL parent_definitions.module_name is %s", parent_definitions.module_name) - logger.debug("CRITICAL parent_definition is %s", parent_definition) else: parent_definition = ModuleDefinition(parent_definitions, def_name, @@ -512,14 +492,9 @@ def from_directory_import(self, module, real_names, local_names, import_alias_ma init_file_location = os.path.join(module_path, '__init__.py') init_exists = os.path.isfile(init_file_location) - logger.debug("module_path is %s", module_path) - logger.debug("init_exists is %s", init_exists) - logger.debug("skip_init is %s", skip_init) if init_exists and not skip_init: package_name = os.path.split(module_path)[1] - logger.debug("package_name is %s", package_name) - return self.add_module((module[0], init_file_location), package_name, local_names, @@ -537,7 +512,7 @@ def from_directory_import(self, module, real_names, local_names, import_alias_ma import_alias_mapping, is_init=True, from_from=True, - from_fdi=True) + from_fdid=True) else: raise Exception("from anything import directory needs an __init__.py file in directory") else: diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index 17fcf2a6..d2a26c3d 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -68,6 +68,8 @@ def append_if_local_or_in_imports(self, definition): """ if isinstance(definition, LocalModuleDefinition): self.definitions.append(definition) + elif self.import_names == ["*"]: + self.definitions.append(definition) elif self.import_names and definition.name in self.import_names: self.definitions.append(definition) elif self.import_alias_mapping and definition.name in self.import_alias_mapping.values(): diff --git a/tests/import_test.py b/tests/import_test.py index cae6fb25..245afb8c 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -77,6 +77,114 @@ def test_import_as(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) + def test_from_file_import_star(self): + path = os.path.normpath('example/import_test_project/from_file_import_star.py') + + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry A", + "Module Exit A", + "temp_1_s = '60'", + "s = temp_1_s", + "Function Entry B", + "ret_B = s", + "Exit B", + "¤call_1 = ret_B", + "temp_2_s = 'minute'", + "s = temp_2_s", + "Function Entry C", + "ret_C = s + 'see'", + "Exit C", + "¤call_2 = ret_C", + "temp_3_s = 'IPA'", + "s = temp_3_s", + "Function Entry D", + "ret_D = s + 'dee'", + "Exit D", + "¤call_3 = ret_D", + "Exit module"] + + for node in self.cfg.nodes: + logger.debug("node is %s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_directory_import_star(self): + path = os.path.normpath('example/import_test_project/from_directory_import_star.py') + + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry import_star_folder_1", + "Module Entry A", + "Module Exit A", + "Module Entry B", + "Module Exit B", + "Module Entry folder", + "Module Entry C", + "Module Exit C", + "Module Exit folder", + "Module Exit import_star_folder_1", + "Function Entry A.cobia", + "print('A')", + "Exit A.cobia", + "Function Entry B.al", + "print('B')", + "Exit B.al", + "Function Entry folder.C.pastor", + "print('C')", + "Exit folder.C.pastor", + "Exit module"] + + for node in self.cfg.nodes: + logger.debug("node is %s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_from_directory_import_star_with_alias(self): + path = os.path.normpath('example/import_test_project/from_directory_import_star_with_alias.py') + + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ["Entry module", + "Module Entry import_star_folder_1_with_alias", + "Module Entry A", + "Module Exit A", + "Module Entry B", + "Module Exit B", + "Module Entry folder", + "Module Entry C", + "Module Exit C", + "Module Exit folder", + "Module Exit import_star_folder_1_with_alias", + "Function Entry husk.cobia", + "print('A')", + "Exit husk.cobia", + "Function Entry meringue.al", + "print('B')", + "Exit meringue.al", + "Function Entry corn.mousse.pastor", + "print('C')", + "Exit corn.mousse.pastor", + "Exit module"] + for node in self.cfg.nodes: + logger.debug("node is %s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + def test_from_directory(self): file_path = os.path.normpath('example/import_test_project/from_directory.py') project_path = os.path.normpath('example/import_test_project') From e4d4b7a999e95d7e2748c8a15890dbf9241711df Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 12 May 2017 19:43:29 -0400 Subject: [PATCH 032/541] [cleaning]remove logging statements from test --- tests/import_test.py | 28 ---------------------------- 1 file changed, 28 deletions(-) diff --git a/tests/import_test.py b/tests/import_test.py index 245afb8c..bc56dd3d 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -4,8 +4,6 @@ from .base_test_case import BaseTestCase from pyt.ast_helper import get_call_names_as_string from pyt.project_handler import get_directory_modules, get_modules_and_packages -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ImportTest(BaseTestCase): @@ -108,9 +106,6 @@ def test_from_file_import_star(self): "¤call_3 = ret_D", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -144,9 +139,6 @@ def test_from_directory_import_star(self): "Exit folder.C.pastor", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -179,8 +171,6 @@ def test_from_directory_import_star_with_alias(self): "print('C')", "Exit corn.mousse.pastor", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -481,9 +471,6 @@ def test_init_1(self): "Exit init_file_folder_1.StarbucksVisitor", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -576,9 +563,6 @@ def test_init_3(self): "Exit init_file_folder_3.nested_folder_with_init.moose.fast", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -603,9 +587,6 @@ def test_init_3_with_alias(self): "Exit init_file_folder_3_with_alias.heyo.moose.fast", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -630,9 +611,6 @@ def test_from_init_1(self): "Exit StarbucksVisitor", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -657,9 +635,6 @@ def test_from_init_1_with_alias(self): "Exit EatalyVisitor", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -682,9 +657,6 @@ def test_from_init_2(self): "Exit Starbucks.Tea", "Exit module"] - for node in self.cfg.nodes: - logger.debug("node is %s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) From 6de967f04fe853517065f72ada27529647ddecda Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sat, 13 May 2017 12:36:09 +0200 Subject: [PATCH 033/541] PEP8 module_definitions.py --- pyt/module_definitions.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index c0c1c45d..d86c6177 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -1,6 +1,9 @@ -"""This module handles module definitions which basically is a list of module definition.""" +"""This module handles module definitions + which basically is a list of module definition.""" + +# Contains all project definitions for a program run: +project_definitions = dict() -project_definitions = dict() # Contains all project definitions for a program run class ModuleDefinition(): """Handling of a definition.""" @@ -10,7 +13,8 @@ class ModuleDefinition(): path = None module_definitions = None - def __init__(self, local_module_definitions, name, parent_module_name, path): + def __init__(self, local_module_definitions, + name, parent_module_name, path): self.module_definitions = local_module_definitions self.parent_module_name = parent_module_name self.path = path @@ -52,7 +56,6 @@ def __init__(self, import_names=None, module_name=None): self.classes = list() self.import_alias_mapping = {} - def append_if_local_or_in_imports(self, definition): """Add definition to list. @@ -62,7 +65,8 @@ def append_if_local_or_in_imports(self, definition): self.definitions.append(definition) elif self.import_names and definition.name in self.import_names: self.definitions.append(definition) - elif self.import_alias_mapping and definition.name in self.import_alias_mapping.values(): + elif (self.import_alias_mapping and definition.name in + self.import_alias_mapping.values()): self.definitions.append(definition) if definition.parent_module_name: @@ -71,11 +75,11 @@ def append_if_local_or_in_imports(self, definition): if definition.node not in project_definitions: project_definitions[definition.node] = definition - def is_import(self): """Return whether it is a normal import statement and not a from import. - This can be checked by checking the module name as it is only set when it is a normal import. + This can be checked by checking the module name as it is only set + when it is a normal import. """ return self.module_name @@ -97,6 +101,9 @@ def __str__(self): module = self.module_name if self.definitions: - return 'Definitions: "' + '", "'.join([str(definition) for definition in self.definitions]) + '" and module_name: ' + module + '\n' + return ( + 'Definitions: "' + '", "' + .join([str(definition) for definition in self.definitions]) + + '" and module_name: ' + module + '\n') else: return 'No Definitions, module_name: ' + module + '\n' From c2028f10b9d4d4bcd0260f8d5893e954df56b778 Mon Sep 17 00:00:00 2001 From: Thalmann Date: Sat, 13 May 2017 12:49:25 +0200 Subject: [PATCH 034/541] Refactor: Added base class for reaching definitions and reaching definitions taint analysis. This removes some code duplication. --- pyt/reaching_definitions.py | 43 ++-------------------------- pyt/reaching_definitions_base.py | 47 +++++++++++++++++++++++++++++++ pyt/reaching_definitions_taint.py | 44 ++--------------------------- 3 files changed, 53 insertions(+), 81 deletions(-) create mode 100644 pyt/reaching_definitions_base.py diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index bb1fc9c3..8eb30189 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -1,29 +1,11 @@ -from .analysis_base import AnalysisBase from .base_cfg import AssignmentNode -from .constraint_table import constraint_join, constraint_table -from .lattice import Lattice +from .constraint_table import constraint_table +from .reaching_definitions_base import ReachingDefinitionsAnalysisBase -class ReachingDefinitionsAnalysis(AnalysisBase): +class ReachingDefinitionsAnalysis(ReachingDefinitionsAnalysisBase): """Reaching definitions analysis rules implemented.""" - def __init__(self, cfg): - super().__init__(cfg, None) - - def join(self, cfg_node): - """Joins all constraints of the ingoing nodes and returns them. - This represents the JOIN auxiliary definition from Schwartzbach.""" - return constraint_join(cfg_node.ingoing) - - def arrow(self, JOIN, _id): - """Removes all assignments from JOIN that has _id on the left hand side. - This represents the arrow id definition from Schwartzbach.""" - r = JOIN - for node in self.lattice.get_elements(JOIN): - if node.left_hand_side == _id.left_hand_side: - r = r ^ self.lattice.el2bv[node] - return r - def fixpointmethod(self, cfg_node): JOIN = self.join(cfg_node) # Assignment check @@ -35,22 +17,3 @@ def fixpointmethod(self, cfg_node): # Default case: else: constraint_table[cfg_node] = JOIN - - def dep(self, q_1): - """Represents the dep mapping from Schwartzbach.""" - for node in q_1.outgoing: - yield node - - def get_lattice_elements(cfg_nodes): - """Returns all assignment nodes as they are the only lattice elements - in the reaching definitions analysis. - This is a static method which is overwritten from the base class.""" - for node in cfg_nodes: - if isinstance(node, AssignmentNode): - yield node - - def equal(self, value, other): - return value == other - - def build_lattice(self, cfg): - self.lattice = Lattice(cfg.nodes, ReachingDefinitionsAnalysis) diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py new file mode 100644 index 00000000..240b9773 --- /dev/null +++ b/pyt/reaching_definitions_base.py @@ -0,0 +1,47 @@ +from .analysis_base import AnalysisBase +from .base_cfg import AssignmentNode +from .constraint_table import constraint_join +from .lattice import Lattice + + +class ReachingDefinitionsAnalysisBase(AnalysisBase): + """Reaching definitions analysis rules implemented.""" + + def __init__(self, cfg): + super().__init__(cfg, None) + + def join(self, cfg_node): + """Joins all constraints of the ingoing nodes and returns them. + This represents the JOIN auxiliary definition from Schwartzbach.""" + return constraint_join(cfg_node.ingoing) + + def arrow(self, JOIN, _id): + """Removes all assignments from JOIN that has _id on the left hand side. + This represents the arrow id definition from Schwartzbach.""" + r = JOIN + for node in self.lattice.get_elements(JOIN): + if node.left_hand_side == _id.left_hand_side: + r = r ^ self.lattice.el2bv[node] + return r + + def fixpointmethod(self, cfg_node): + raise NotImplementedError() + + def dep(self, q_1): + """Represents the dep mapping from Schwartzbach.""" + for node in q_1.outgoing: + yield node + + def get_lattice_elements(cfg_nodes): + """Returns all assignment nodes as they are the only lattice elements + in the reaching definitions analysis. + This is a static method which is overwritten from the base class.""" + for node in cfg_nodes: + if isinstance(node, AssignmentNode): + yield node + + def equal(self, value, other): + return value == other + + def build_lattice(self, cfg): + self.lattice = Lattice(cfg.nodes, ReachingDefinitionsAnalysisBase) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index e8138788..776e06d6 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,29 +1,11 @@ -from .analysis_base import AnalysisBase from .base_cfg import AssignmentNode -from .constraint_table import constraint_join, constraint_table -from .lattice import Lattice +from .constraint_table import constraint_table +from .reaching_definitions_base import ReachingDefinitionsAnalysisBase -class ReachingDefinitionsTaintAnalysis(AnalysisBase): +class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): """Reaching definitions analysis rules implemented.""" - def __init__(self, cfg): - super().__init__(cfg, None) - - def join(self, cfg_node): - """Joins all constraints of the ingoing nodes and returns them. - This represents the JOIN auxiliary definition from Schwartzbach.""" - return constraint_join(cfg_node.ingoing) - - def arrow(self, JOIN, _id): - """Removes all assignments from JOIN that has _id on the left hand side. - This represents the arrow id definition from Schwartzbach.""" - r = JOIN - for node in self.lattice.get_elements(JOIN): - if node.left_hand_side == _id.left_hand_side: - r = r ^ self.lattice.el2bv[node] - return r - def fixpointmethod(self, cfg_node): JOIN = self.join(cfg_node) # Assignment check @@ -40,23 +22,3 @@ def fixpointmethod(self, cfg_node): # Default case: else: constraint_table[cfg_node] = JOIN - - def dep(self, q_1): - """Represents the dep mapping from Schwartzbach.""" - for node in q_1.outgoing: - yield node - - def get_lattice_elements(cfg_nodes): - """Returns all assignment nodes as they are the only lattice elements - in the reaching definitions analysis. - This is a static method which is overwritten from the base class. - """ - for node in cfg_nodes: - if isinstance(node, AssignmentNode): - yield node - - def equal(self, value, other): - return value == other - - def build_lattice(self, cfg): - self.lattice = Lattice(cfg.nodes, ReachingDefinitionsTaintAnalysis) From 2b621f6a2f9370f4314661c51cf3d862cc7e5150 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 15 May 2017 19:33:56 -0400 Subject: [PATCH 035/541] painful renaming, deleting unused examples and prefixing with test --- example/import_test_project/from_init_1.py | 4 - .../from_init_1_with_alias.py | 4 - example/import_test_project/from_init_2.py | 4 - .../from_init_2_with_alias.py | 4 - example/import_test_project/init.py | 4 - example/import_test_project/init_1.py | 4 - .../import_test_project/init_1_with_alias.py | 4 - example/import_test_project/init_2.py | 4 - .../import_test_project/init_2_with_alias.py | 4 - .../init_file_folder/__init__.py | 1 - .../nested_nested_folder/can_you_see_me.py | 0 .../nested_folder/starbucks.py | 3 - .../nested_folder_with_init/__init__.py | 1 - .../__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../__init__.py | 0 .../nested_folder_with_init}/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../{from_dot_dot.py => test_from_dot_dot.py} | 0 ...rs.py => test_relative_between_folders.py} | 0 .../{all.py => test_all.py} | 0 ...om_directory.py => test_from_directory.py} | 0 ....py => test_from_directory_import_star.py} | 0 ..._from_directory_import_star_with_alias.py} | 0 .../{from_dot.py => test_from_dot.py} | 0 ..._star.py => test_from_file_import_star.py} | 0 .../test_from_init_file_folder_with_file.py | 4 + ...om_init_file_folder_with_file_and_alias.py | 4 + ...est_from_init_file_folder_with_function.py | 4 + ...nit_file_folder_with_function_and_alias.py | 4 + .../{import.py => test_import.py} | 0 .../{import_as.py => test_import_as.py} | 0 .../{init_3.py => test_init_3.py} | 0 ...ith_alias.py => test_init_3_with_alias.py} | 0 .../test_init_file_folder_with_file.py | 4 + ...st_init_file_folder_with_file_and_alias.py | 4 + .../test_init_file_folder_with_function.py | 4 + ...nit_file_folder_with_function_and_alias.py | 4 + ...py => test_multiple_files_with_aliases.py} | 0 ...> test_multiple_functions_with_aliases.py} | 0 .../{no_all.py => test_no_all.py} | 0 ...ory.py => test_relative_from_directory.py} | 0 ...ve_level_1.py => test_relative_level_1.py} | 0 ...ve_level_2.py => test_relative_level_2.py} | 0 tests/import_test.py | 116 +++++++++--------- 50 files changed, 90 insertions(+), 99 deletions(-) delete mode 100644 example/import_test_project/from_init_1.py delete mode 100644 example/import_test_project/from_init_1_with_alias.py delete mode 100644 example/import_test_project/from_init_2.py delete mode 100644 example/import_test_project/from_init_2_with_alias.py delete mode 100644 example/import_test_project/init.py delete mode 100644 example/import_test_project/init_1.py delete mode 100644 example/import_test_project/init_1_with_alias.py delete mode 100644 example/import_test_project/init_2.py delete mode 100644 example/import_test_project/init_2_with_alias.py delete mode 100755 example/import_test_project/init_file_folder/__init__.py delete mode 100644 example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py delete mode 100755 example/import_test_project/init_file_folder/nested_folder/starbucks.py delete mode 100644 example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py rename example/import_test_project/{init_file_folder_2 => init_file_folder_with_file}/__init__.py (100%) rename example/import_test_project/{init_file_folder_2 => init_file_folder_with_file}/nested_folder_without_init/Starbucks.py (100%) rename example/import_test_project/{init_file_folder_2_with_alias => init_file_folder_with_file_and_alias}/__init__.py (100%) rename example/import_test_project/{init_file_folder_2_with_alias => init_file_folder_with_file_and_alias}/nested_folder_without_init/Starbucks.py (100%) rename example/import_test_project/{init_file_folder_1 => init_file_folder_with_function}/__init__.py (100%) rename example/import_test_project/{init_file_folder/nested_folder => init_file_folder_with_function/nested_folder_with_init}/__init__.py (100%) rename example/import_test_project/{init_file_folder_1 => init_file_folder_with_function}/nested_folder_with_init/starbucks.py (100%) rename example/import_test_project/{init_file_folder_1_with_alias => init_file_folder_with_function_and_alias}/__init__.py (100%) rename example/import_test_project/{init_file_folder_1 => init_file_folder_with_function_and_alias}/nested_folder_with_init/__init__.py (100%) mode change 100755 => 100644 rename example/import_test_project/{init_file_folder_1_with_alias => init_file_folder_with_function_and_alias}/nested_folder_with_init/starbucks.py (100%) rename example/import_test_project/other_dir/{from_dot_dot.py => test_from_dot_dot.py} (100%) rename example/import_test_project/other_dir/{relative_between_folders.py => test_relative_between_folders.py} (100%) rename example/import_test_project/{all.py => test_all.py} (100%) rename example/import_test_project/{from_directory.py => test_from_directory.py} (100%) rename example/import_test_project/{from_directory_import_star.py => test_from_directory_import_star.py} (100%) rename example/import_test_project/{from_directory_import_star_with_alias.py => test_from_directory_import_star_with_alias.py} (100%) rename example/import_test_project/{from_dot.py => test_from_dot.py} (100%) rename example/import_test_project/{from_file_import_star.py => test_from_file_import_star.py} (100%) create mode 100644 example/import_test_project/test_from_init_file_folder_with_file.py create mode 100644 example/import_test_project/test_from_init_file_folder_with_file_and_alias.py create mode 100644 example/import_test_project/test_from_init_file_folder_with_function.py create mode 100644 example/import_test_project/test_from_init_file_folder_with_function_and_alias.py rename example/import_test_project/{import.py => test_import.py} (100%) rename example/import_test_project/{import_as.py => test_import_as.py} (100%) rename example/import_test_project/{init_3.py => test_init_3.py} (100%) rename example/import_test_project/{init_3_with_alias.py => test_init_3_with_alias.py} (100%) create mode 100644 example/import_test_project/test_init_file_folder_with_file.py create mode 100644 example/import_test_project/test_init_file_folder_with_file_and_alias.py create mode 100644 example/import_test_project/test_init_file_folder_with_function.py create mode 100644 example/import_test_project/test_init_file_folder_with_function_and_alias.py rename example/import_test_project/{multiple_files_with_aliases.py => test_multiple_files_with_aliases.py} (100%) rename example/import_test_project/{multiple_functions_with_aliases.py => test_multiple_functions_with_aliases.py} (100%) rename example/import_test_project/{no_all.py => test_no_all.py} (100%) rename example/import_test_project/{relative_from_directory.py => test_relative_from_directory.py} (100%) rename example/import_test_project/{relative_level_1.py => test_relative_level_1.py} (100%) rename example/import_test_project/{relative_level_2.py => test_relative_level_2.py} (100%) diff --git a/example/import_test_project/from_init_1.py b/example/import_test_project/from_init_1.py deleted file mode 100644 index e7e25fec..00000000 --- a/example/import_test_project/from_init_1.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_1 import StarbucksVisitor - - -StarbucksVisitor() diff --git a/example/import_test_project/from_init_1_with_alias.py b/example/import_test_project/from_init_1_with_alias.py deleted file mode 100644 index e094f708..00000000 --- a/example/import_test_project/from_init_1_with_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_1_with_alias import EatalyVisitor - - -EatalyVisitor() diff --git a/example/import_test_project/from_init_2.py b/example/import_test_project/from_init_2.py deleted file mode 100644 index 2ab60154..00000000 --- a/example/import_test_project/from_init_2.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_2 import Starbucks - - -Starbucks.Tea() diff --git a/example/import_test_project/from_init_2_with_alias.py b/example/import_test_project/from_init_2_with_alias.py deleted file mode 100644 index 8c184938..00000000 --- a/example/import_test_project/from_init_2_with_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_2_with_alias import Eataly - - -Eataly.Tea() diff --git a/example/import_test_project/init.py b/example/import_test_project/init.py deleted file mode 100644 index bf2914a3..00000000 --- a/example/import_test_project/init.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder - - -init_file_folder.Eataly() diff --git a/example/import_test_project/init_1.py b/example/import_test_project/init_1.py deleted file mode 100644 index 1c985440..00000000 --- a/example/import_test_project/init_1.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_1 - - -init_file_folder_1.StarbucksVisitor() diff --git a/example/import_test_project/init_1_with_alias.py b/example/import_test_project/init_1_with_alias.py deleted file mode 100644 index 60e5c2ed..00000000 --- a/example/import_test_project/init_1_with_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_1_with_alias - - -init_file_folder_1_with_alias.EatalyVisitor() diff --git a/example/import_test_project/init_2.py b/example/import_test_project/init_2.py deleted file mode 100644 index 63bee62c..00000000 --- a/example/import_test_project/init_2.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_2 - - -init_file_folder_2.Starbucks.Tea() diff --git a/example/import_test_project/init_2_with_alias.py b/example/import_test_project/init_2_with_alias.py deleted file mode 100644 index d29ee21c..00000000 --- a/example/import_test_project/init_2_with_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_2_with_alias - - -init_file_folder_2_with_alias.Eataly.Tea() diff --git a/example/import_test_project/init_file_folder/__init__.py b/example/import_test_project/init_file_folder/__init__.py deleted file mode 100755 index f9b27ddb..00000000 --- a/example/import_test_project/init_file_folder/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .nested_folder import StarbucksVisitor as Eataly diff --git a/example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py b/example/import_test_project/init_file_folder/nested_folder/nested_nested_folder/can_you_see_me.py deleted file mode 100644 index e69de29b..00000000 diff --git a/example/import_test_project/init_file_folder/nested_folder/starbucks.py b/example/import_test_project/init_file_folder/nested_folder/starbucks.py deleted file mode 100755 index cb428b48..00000000 --- a/example/import_test_project/init_file_folder/nested_folder/starbucks.py +++ /dev/null @@ -1,3 +0,0 @@ -class StarbucksVisitor(object): - def __init__(self): - print ("Iced Mocha") diff --git a/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py deleted file mode 100644 index b1378324..00000000 --- a/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .starbucks import StarbucksVisitor diff --git a/example/import_test_project/init_file_folder_2/__init__.py b/example/import_test_project/init_file_folder_with_file/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_2/__init__.py rename to example/import_test_project/init_file_folder_with_file/__init__.py diff --git a/example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py b/example/import_test_project/init_file_folder_with_file/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_2/nested_folder_without_init/Starbucks.py rename to example/import_test_project/init_file_folder_with_file/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/init_file_folder_2_with_alias/__init__.py b/example/import_test_project/init_file_folder_with_file_and_alias/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_2_with_alias/__init__.py rename to example/import_test_project/init_file_folder_with_file_and_alias/__init__.py diff --git a/example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py b/example/import_test_project/init_file_folder_with_file_and_alias/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_2_with_alias/nested_folder_without_init/Starbucks.py rename to example/import_test_project/init_file_folder_with_file_and_alias/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/init_file_folder_1/__init__.py b/example/import_test_project/init_file_folder_with_function/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_1/__init__.py rename to example/import_test_project/init_file_folder_with_function/__init__.py diff --git a/example/import_test_project/init_file_folder/nested_folder/__init__.py b/example/import_test_project/init_file_folder_with_function/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder/nested_folder/__init__.py rename to example/import_test_project/init_file_folder_with_function/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py b/example/import_test_project/init_file_folder_with_function/nested_folder_with_init/starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_1/nested_folder_with_init/starbucks.py rename to example/import_test_project/init_file_folder_with_function/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/init_file_folder_1_with_alias/__init__.py b/example/import_test_project/init_file_folder_with_function_and_alias/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_1_with_alias/__init__.py rename to example/import_test_project/init_file_folder_with_function_and_alias/__init__.py diff --git a/example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py b/example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from example/import_test_project/init_file_folder_1/nested_folder_with_init/__init__.py rename to example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py b/example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_1_with_alias/nested_folder_with_init/starbucks.py rename to example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/other_dir/from_dot_dot.py b/example/import_test_project/other_dir/test_from_dot_dot.py similarity index 100% rename from example/import_test_project/other_dir/from_dot_dot.py rename to example/import_test_project/other_dir/test_from_dot_dot.py diff --git a/example/import_test_project/other_dir/relative_between_folders.py b/example/import_test_project/other_dir/test_relative_between_folders.py similarity index 100% rename from example/import_test_project/other_dir/relative_between_folders.py rename to example/import_test_project/other_dir/test_relative_between_folders.py diff --git a/example/import_test_project/all.py b/example/import_test_project/test_all.py similarity index 100% rename from example/import_test_project/all.py rename to example/import_test_project/test_all.py diff --git a/example/import_test_project/from_directory.py b/example/import_test_project/test_from_directory.py similarity index 100% rename from example/import_test_project/from_directory.py rename to example/import_test_project/test_from_directory.py diff --git a/example/import_test_project/from_directory_import_star.py b/example/import_test_project/test_from_directory_import_star.py similarity index 100% rename from example/import_test_project/from_directory_import_star.py rename to example/import_test_project/test_from_directory_import_star.py diff --git a/example/import_test_project/from_directory_import_star_with_alias.py b/example/import_test_project/test_from_directory_import_star_with_alias.py similarity index 100% rename from example/import_test_project/from_directory_import_star_with_alias.py rename to example/import_test_project/test_from_directory_import_star_with_alias.py diff --git a/example/import_test_project/from_dot.py b/example/import_test_project/test_from_dot.py similarity index 100% rename from example/import_test_project/from_dot.py rename to example/import_test_project/test_from_dot.py diff --git a/example/import_test_project/from_file_import_star.py b/example/import_test_project/test_from_file_import_star.py similarity index 100% rename from example/import_test_project/from_file_import_star.py rename to example/import_test_project/test_from_file_import_star.py diff --git a/example/import_test_project/test_from_init_file_folder_with_file.py b/example/import_test_project/test_from_init_file_folder_with_file.py new file mode 100644 index 00000000..ba012f3a --- /dev/null +++ b/example/import_test_project/test_from_init_file_folder_with_file.py @@ -0,0 +1,4 @@ +from init_file_folder_with_file import Starbucks + + +Starbucks.Tea() diff --git a/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py b/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py new file mode 100644 index 00000000..7d6924d3 --- /dev/null +++ b/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py @@ -0,0 +1,4 @@ +from init_file_folder_with_file_and_alias import Eataly + + +Eataly.Tea() diff --git a/example/import_test_project/test_from_init_file_folder_with_function.py b/example/import_test_project/test_from_init_file_folder_with_function.py new file mode 100644 index 00000000..bb9ffe09 --- /dev/null +++ b/example/import_test_project/test_from_init_file_folder_with_function.py @@ -0,0 +1,4 @@ +from init_file_folder_with_function import StarbucksVisitor + + +StarbucksVisitor() diff --git a/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py b/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py new file mode 100644 index 00000000..79d9cac6 --- /dev/null +++ b/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py @@ -0,0 +1,4 @@ +from init_file_folder_with_function_and_alias import EatalyVisitor + + +EatalyVisitor() diff --git a/example/import_test_project/import.py b/example/import_test_project/test_import.py similarity index 100% rename from example/import_test_project/import.py rename to example/import_test_project/test_import.py diff --git a/example/import_test_project/import_as.py b/example/import_test_project/test_import_as.py similarity index 100% rename from example/import_test_project/import_as.py rename to example/import_test_project/test_import_as.py diff --git a/example/import_test_project/init_3.py b/example/import_test_project/test_init_3.py similarity index 100% rename from example/import_test_project/init_3.py rename to example/import_test_project/test_init_3.py diff --git a/example/import_test_project/init_3_with_alias.py b/example/import_test_project/test_init_3_with_alias.py similarity index 100% rename from example/import_test_project/init_3_with_alias.py rename to example/import_test_project/test_init_3_with_alias.py diff --git a/example/import_test_project/test_init_file_folder_with_file.py b/example/import_test_project/test_init_file_folder_with_file.py new file mode 100644 index 00000000..2e15bd70 --- /dev/null +++ b/example/import_test_project/test_init_file_folder_with_file.py @@ -0,0 +1,4 @@ +import init_file_folder_with_file + + +init_file_folder_with_file.Starbucks.Tea() diff --git a/example/import_test_project/test_init_file_folder_with_file_and_alias.py b/example/import_test_project/test_init_file_folder_with_file_and_alias.py new file mode 100644 index 00000000..05bd9ba2 --- /dev/null +++ b/example/import_test_project/test_init_file_folder_with_file_and_alias.py @@ -0,0 +1,4 @@ +import init_file_folder_with_file_and_alias + + +init_file_folder_with_file_and_alias.Eataly.Tea() diff --git a/example/import_test_project/test_init_file_folder_with_function.py b/example/import_test_project/test_init_file_folder_with_function.py new file mode 100644 index 00000000..049797f6 --- /dev/null +++ b/example/import_test_project/test_init_file_folder_with_function.py @@ -0,0 +1,4 @@ +import init_file_folder_with_function + + +init_file_folder_with_function.StarbucksVisitor() diff --git a/example/import_test_project/test_init_file_folder_with_function_and_alias.py b/example/import_test_project/test_init_file_folder_with_function_and_alias.py new file mode 100644 index 00000000..ca81cb37 --- /dev/null +++ b/example/import_test_project/test_init_file_folder_with_function_and_alias.py @@ -0,0 +1,4 @@ +import init_file_folder_with_function_and_alias + + +init_file_folder_with_function_and_alias.EatalyVisitor() diff --git a/example/import_test_project/multiple_files_with_aliases.py b/example/import_test_project/test_multiple_files_with_aliases.py similarity index 100% rename from example/import_test_project/multiple_files_with_aliases.py rename to example/import_test_project/test_multiple_files_with_aliases.py diff --git a/example/import_test_project/multiple_functions_with_aliases.py b/example/import_test_project/test_multiple_functions_with_aliases.py similarity index 100% rename from example/import_test_project/multiple_functions_with_aliases.py rename to example/import_test_project/test_multiple_functions_with_aliases.py diff --git a/example/import_test_project/no_all.py b/example/import_test_project/test_no_all.py similarity index 100% rename from example/import_test_project/no_all.py rename to example/import_test_project/test_no_all.py diff --git a/example/import_test_project/relative_from_directory.py b/example/import_test_project/test_relative_from_directory.py similarity index 100% rename from example/import_test_project/relative_from_directory.py rename to example/import_test_project/test_relative_from_directory.py diff --git a/example/import_test_project/relative_level_1.py b/example/import_test_project/test_relative_level_1.py similarity index 100% rename from example/import_test_project/relative_level_1.py rename to example/import_test_project/test_relative_level_1.py diff --git a/example/import_test_project/relative_level_2.py b/example/import_test_project/test_relative_level_2.py similarity index 100% rename from example/import_test_project/relative_level_2.py rename to example/import_test_project/test_relative_level_2.py diff --git a/tests/import_test.py b/tests/import_test.py index bc56dd3d..502e06c9 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -8,7 +8,7 @@ class ImportTest(BaseTestCase): def test_import(self): - path = os.path.normpath('example/import_test_project/import.py') + path = os.path.normpath('example/import_test_project/test_import.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -42,7 +42,7 @@ def test_import(self): self.assertEqual(node.label, expected_label) def test_import_as(self): - path = os.path.normpath('example/import_test_project/import_as.py') + path = os.path.normpath('example/import_test_project/test_import_as.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -76,7 +76,7 @@ def test_import_as(self): self.assertEqual(node.label, expected_label) def test_from_file_import_star(self): - path = os.path.normpath('example/import_test_project/from_file_import_star.py') + path = os.path.normpath('example/import_test_project/test_from_file_import_star.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -110,7 +110,7 @@ def test_from_file_import_star(self): self.assertEqual(node.label, expected_label) def test_from_directory_import_star(self): - path = os.path.normpath('example/import_test_project/from_directory_import_star.py') + path = os.path.normpath('example/import_test_project/test_from_directory_import_star.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -143,7 +143,7 @@ def test_from_directory_import_star(self): self.assertEqual(node.label, expected_label) def test_from_directory_import_star_with_alias(self): - path = os.path.normpath('example/import_test_project/from_directory_import_star_with_alias.py') + path = os.path.normpath('example/import_test_project/test_from_directory_import_star_with_alias.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -176,7 +176,7 @@ def test_from_directory_import_star_with_alias(self): self.assertEqual(node.label, expected_label) def test_from_directory(self): - file_path = os.path.normpath('example/import_test_project/from_directory.py') + file_path = os.path.normpath('example/import_test_project/test_from_directory.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -200,7 +200,7 @@ def test_from_directory(self): self.assertEqual(node.label, expected_label) def test_relative_level_1(self): - path = os.path.normpath('example/import_test_project/relative_level_1.py') + path = os.path.normpath('example/import_test_project/test_relative_level_1.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -234,7 +234,7 @@ def test_relative_level_1(self): self.assertEqual(node.label, expected_label) def test_relative_level_2(self): - path = os.path.normpath('example/import_test_project/relative_level_2.py') + path = os.path.normpath('example/import_test_project/test_relative_level_2.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -246,7 +246,7 @@ def test_relative_level_2(self): self.assertTrue("example/A.py" in repr(e)) def test_relative_between_folders(self): - file_path = os.path.normpath('example/import_test_project/other_dir/relative_between_folders.py') + file_path = os.path.normpath('example/import_test_project/other_dir/test_relative_between_folders.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -270,7 +270,7 @@ def test_relative_between_folders(self): self.assertEqual(node.label, expected_label) def test_relative_from_directory(self): - file_path = os.path.normpath('example/import_test_project/relative_from_directory.py') + file_path = os.path.normpath('example/import_test_project/test_relative_from_directory.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -293,7 +293,7 @@ def test_relative_from_directory(self): self.assertEqual(node.label, expected_label) def test_from_dot(self): - file_path = os.path.normpath('example/import_test_project/from_dot.py') + file_path = os.path.normpath('example/import_test_project/test_from_dot.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -318,7 +318,7 @@ def test_from_dot(self): self.assertEqual(node.label, expected_label) def test_from_dot_dot(self): - file_path = os.path.normpath('example/import_test_project/other_dir/from_dot_dot.py') + file_path = os.path.normpath('example/import_test_project/other_dir/test_from_dot_dot.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -343,7 +343,7 @@ def test_from_dot_dot(self): self.assertEqual(node.label, expected_label) def test_multiple_files_with_aliases(self): - file_path = os.path.normpath('example/import_test_project/multiple_files_with_aliases.py') + file_path = os.path.normpath('example/import_test_project/test_multiple_files_with_aliases.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -406,7 +406,7 @@ def test_multiple_files_with_aliases(self): self.assertEqual(node.label, expected_label) def test_multiple_functions_with_aliases(self): - file_path = os.path.normpath('example/import_test_project/multiple_functions_with_aliases.py') + file_path = os.path.normpath('example/import_test_project/test_multiple_functions_with_aliases.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -450,8 +450,8 @@ def test_multiple_functions_with_aliases(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_1(self): - file_path = os.path.normpath('example/import_test_project/init_1.py') + def test_init_file_folder_with_function(self): + file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_function.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -460,22 +460,22 @@ def test_init_1(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_1", + "Module Entry init_file_folder_with_function", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_1", - "Function Entry init_file_folder_1.StarbucksVisitor", + "Module Exit init_file_folder_with_function", + "Function Entry init_file_folder_with_function.StarbucksVisitor", "print('Iced Mocha')", - "Exit init_file_folder_1.StarbucksVisitor", + "Exit init_file_folder_with_function.StarbucksVisitor", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_1_with_alias(self): - file_path = os.path.normpath('example/import_test_project/init_1_with_alias.py') + def test_init_file_folder_with_function_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_function_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -484,22 +484,22 @@ def test_init_1_with_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_1_with_alias", + "Module Entry init_file_folder_with_function_and_alias", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_1_with_alias", - "Function Entry init_file_folder_1_with_alias.EatalyVisitor", + "Module Exit init_file_folder_with_function_and_alias", + "Function Entry init_file_folder_with_function_and_alias.EatalyVisitor", "print('Iced Mocha')", - "Exit init_file_folder_1_with_alias.EatalyVisitor", + "Exit init_file_folder_with_function_and_alias.EatalyVisitor", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_2(self): - file_path = os.path.normpath('example/import_test_project/init_2.py') + def test_init_file_folder_with_file(self): + file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_file.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -508,20 +508,20 @@ def test_init_2(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_2", + "Module Entry init_file_folder_with_file", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_2", - "Function Entry init_file_folder_2.Starbucks.Tea", + "Module Exit init_file_folder_with_file", + "Function Entry init_file_folder_with_file.Starbucks.Tea", "print('Teavana Green')", - "Exit init_file_folder_2.Starbucks.Tea", + "Exit init_file_folder_with_file.Starbucks.Tea", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_2_with_alias(self): - file_path = os.path.normpath('example/import_test_project/init_2_with_alias.py') + def test_init_file_folder_with_file_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_file_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -530,20 +530,20 @@ def test_init_2_with_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_2_with_alias", + "Module Entry init_file_folder_with_file_and_alias", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_2_with_alias", - "Function Entry init_file_folder_2_with_alias.Eataly.Tea", + "Module Exit init_file_folder_with_file_and_alias", + "Function Entry init_file_folder_with_file_and_alias.Eataly.Tea", "print('Teavana Green')", - "Exit init_file_folder_2_with_alias.Eataly.Tea", + "Exit init_file_folder_with_file_and_alias.Eataly.Tea", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) def test_init_3(self): - file_path = os.path.normpath('example/import_test_project/init_3.py') + file_path = os.path.normpath('example/import_test_project/test_init_3.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -567,7 +567,7 @@ def test_init_3(self): self.assertEqual(node.label, expected_label) def test_init_3_with_alias(self): - file_path = os.path.normpath('example/import_test_project/init_3_with_alias.py') + file_path = os.path.normpath('example/import_test_project/test_init_3_with_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -590,8 +590,8 @@ def test_init_3_with_alias(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_1(self): - file_path = os.path.normpath('example/import_test_project/from_init_1.py') + def test_from_init_file_folder_with_function(self): + file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_function.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -600,12 +600,12 @@ def test_from_init_1(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_1", + "Module Entry init_file_folder_with_function", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_1", + "Module Exit init_file_folder_with_function", "Function Entry StarbucksVisitor", "print('Iced Mocha')", "Exit StarbucksVisitor", @@ -614,8 +614,8 @@ def test_from_init_1(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_1_with_alias(self): - file_path = os.path.normpath('example/import_test_project/from_init_1_with_alias.py') + def test_from_init_file_folder_with_function_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_function_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -624,12 +624,12 @@ def test_from_init_1_with_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_1_with_alias", + "Module Entry init_file_folder_with_function_and_alias", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_1_with_alias", + "Module Exit init_file_folder_with_function_and_alias", "Function Entry EatalyVisitor", "print('Iced Mocha')", "Exit EatalyVisitor", @@ -638,8 +638,8 @@ def test_from_init_1_with_alias(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_2(self): - file_path = os.path.normpath('example/import_test_project/from_init_2.py') + def test_from_init_file_folder_with_file(self): + file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_file.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -648,10 +648,10 @@ def test_from_init_2(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_2", + "Module Entry init_file_folder_with_file", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_2", + "Module Exit init_file_folder_with_file", "Function Entry Starbucks.Tea", "print('Teavana Green')", "Exit Starbucks.Tea", @@ -660,8 +660,8 @@ def test_from_init_2(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_2_with_alias(self): - file_path = os.path.normpath('example/import_test_project/from_init_2_with_alias.py') + def test_from_init_file_folder_with_file_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_file_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -670,10 +670,10 @@ def test_from_init_2_with_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_2_with_alias", + "Module Entry init_file_folder_with_file_and_alias", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_2_with_alias", + "Module Exit init_file_folder_with_file_and_alias", "Function Entry Eataly.Tea", "print('Teavana Green')", "Exit Eataly.Tea", @@ -683,7 +683,7 @@ def test_from_init_2_with_alias(self): self.assertEqual(node.label, expected_label) # def test_all(self): - # file_path = os.path.normpath('example/import_test_project/all.py') + # file_path = os.path.normpath('example/import_test_project/test_all.py') # project_path = os.path.normpath('example/import_test_project') # project_modules = get_modules_and_packages(project_path) @@ -697,7 +697,7 @@ def test_from_init_2_with_alias(self): # self.assertEqual(node.label, expected_label) # def test_no_all(self): - # file_path = os.path.normpath('example/import_test_project/no_all.py') + # file_path = os.path.normpath('example/import_test_project/test_no_all.py') # project_path = os.path.normpath('example/import_test_project') # project_modules = get_modules_and_packages(project_path) From d56f35d8dd3eafcd2f46788d03598136c866231d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 15 May 2017 20:02:41 -0400 Subject: [PATCH 036/541] more renaming and package instead of init_file_folder --- .../A.py | 0 .../B.py | 0 .../__init__.py | 0 .../folder/C.py | 0 .../folder/__init__.py | 0 .../A.py | 0 .../B.py | 0 .../__init__.py | 0 .../folder/C.py | 0 .../folder/__init__.py | 0 .../__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/moose.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/moose.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../test_from_init_file_folder_with_file.py | 4 - ...om_init_file_folder_with_file_and_alias.py | 4 - ...est_from_init_file_folder_with_function.py | 4 - ...nit_file_folder_with_function_and_alias.py | 4 - ...ar.py => test_from_package_import_star.py} | 2 +- ...st_from_package_import_star_with_alias.py} | 2 +- .../test_from_package_with_file.py | 4 + .../test_from_package_with_file_and_alias.py | 4 + .../test_from_package_with_function.py | 4 + ...st_from_package_with_function_and_alias.py | 4 + example/import_test_project/test_init_3.py | 3 - .../test_init_3_with_alias.py | 3 - .../test_init_file_folder_with_file.py | 4 - ...st_init_file_folder_with_file_and_alias.py | 4 - .../test_init_file_folder_with_function.py | 4 - ...nit_file_folder_with_function_and_alias.py | 4 - .../test_package_with_file.py | 4 + .../test_package_with_file_and_alias.py | 4 + .../test_package_with_folder.py | 3 + .../test_package_with_folder_and_alias.py | 3 + .../test_package_with_function.py | 4 + .../test_package_with_function_and_alias.py | 4 + tests/import_test.py | 120 +++++++++--------- 49 files changed, 100 insertions(+), 100 deletions(-) rename example/import_test_project/{import_star_folder_1 => package_star}/A.py (100%) rename example/import_test_project/{import_star_folder_1 => package_star}/B.py (100%) rename example/import_test_project/{import_star_folder_1 => package_star}/__init__.py (100%) rename example/import_test_project/{import_star_folder_1 => package_star}/folder/C.py (100%) rename example/import_test_project/{import_star_folder_1 => package_star}/folder/__init__.py (100%) rename example/import_test_project/{import_star_folder_1_with_alias => package_star_with_alias}/A.py (100%) rename example/import_test_project/{import_star_folder_1_with_alias => package_star_with_alias}/B.py (100%) rename example/import_test_project/{import_star_folder_1_with_alias => package_star_with_alias}/__init__.py (100%) rename example/import_test_project/{import_star_folder_1_with_alias => package_star_with_alias}/folder/C.py (100%) rename example/import_test_project/{import_star_folder_1_with_alias => package_star_with_alias}/folder/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_file => package_with_file}/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_file => package_with_file}/nested_folder_without_init/Starbucks.py (100%) rename example/import_test_project/{init_file_folder_with_file_and_alias => package_with_file_and_alias}/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_file_and_alias => package_with_file_and_alias}/nested_folder_without_init/Starbucks.py (100%) rename example/import_test_project/{init_file_folder_3 => package_with_folder}/__init__.py (100%) rename example/import_test_project/{init_file_folder_3 => package_with_folder}/nested_folder_with_init/__init__.py (100%) rename example/import_test_project/{init_file_folder_3 => package_with_folder}/nested_folder_with_init/moose.py (100%) rename example/import_test_project/{init_file_folder_3_with_alias => package_with_folder_and_alias}/__init__.py (100%) rename example/import_test_project/{init_file_folder_3_with_alias => package_with_folder_and_alias}/nested_folder_with_init/__init__.py (100%) rename example/import_test_project/{init_file_folder_3_with_alias => package_with_folder_and_alias}/nested_folder_with_init/moose.py (100%) rename example/import_test_project/{init_file_folder_with_function => package_with_function}/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_function => package_with_function}/nested_folder_with_init/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_function => package_with_function}/nested_folder_with_init/starbucks.py (100%) rename example/import_test_project/{init_file_folder_with_function_and_alias => package_with_function_and_alias}/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_function_and_alias => package_with_function_and_alias}/nested_folder_with_init/__init__.py (100%) rename example/import_test_project/{init_file_folder_with_function_and_alias => package_with_function_and_alias}/nested_folder_with_init/starbucks.py (100%) delete mode 100644 example/import_test_project/test_from_init_file_folder_with_file.py delete mode 100644 example/import_test_project/test_from_init_file_folder_with_file_and_alias.py delete mode 100644 example/import_test_project/test_from_init_file_folder_with_function.py delete mode 100644 example/import_test_project/test_from_init_file_folder_with_function_and_alias.py rename example/import_test_project/{test_from_directory_import_star.py => test_from_package_import_star.py} (51%) rename example/import_test_project/{test_from_directory_import_star_with_alias.py => test_from_package_import_star_with_alias.py} (52%) create mode 100644 example/import_test_project/test_from_package_with_file.py create mode 100644 example/import_test_project/test_from_package_with_file_and_alias.py create mode 100644 example/import_test_project/test_from_package_with_function.py create mode 100644 example/import_test_project/test_from_package_with_function_and_alias.py delete mode 100644 example/import_test_project/test_init_3.py delete mode 100644 example/import_test_project/test_init_3_with_alias.py delete mode 100644 example/import_test_project/test_init_file_folder_with_file.py delete mode 100644 example/import_test_project/test_init_file_folder_with_file_and_alias.py delete mode 100644 example/import_test_project/test_init_file_folder_with_function.py delete mode 100644 example/import_test_project/test_init_file_folder_with_function_and_alias.py create mode 100644 example/import_test_project/test_package_with_file.py create mode 100644 example/import_test_project/test_package_with_file_and_alias.py create mode 100644 example/import_test_project/test_package_with_folder.py create mode 100644 example/import_test_project/test_package_with_folder_and_alias.py create mode 100644 example/import_test_project/test_package_with_function.py create mode 100644 example/import_test_project/test_package_with_function_and_alias.py diff --git a/example/import_test_project/import_star_folder_1/A.py b/example/import_test_project/package_star/A.py similarity index 100% rename from example/import_test_project/import_star_folder_1/A.py rename to example/import_test_project/package_star/A.py diff --git a/example/import_test_project/import_star_folder_1/B.py b/example/import_test_project/package_star/B.py similarity index 100% rename from example/import_test_project/import_star_folder_1/B.py rename to example/import_test_project/package_star/B.py diff --git a/example/import_test_project/import_star_folder_1/__init__.py b/example/import_test_project/package_star/__init__.py similarity index 100% rename from example/import_test_project/import_star_folder_1/__init__.py rename to example/import_test_project/package_star/__init__.py diff --git a/example/import_test_project/import_star_folder_1/folder/C.py b/example/import_test_project/package_star/folder/C.py similarity index 100% rename from example/import_test_project/import_star_folder_1/folder/C.py rename to example/import_test_project/package_star/folder/C.py diff --git a/example/import_test_project/import_star_folder_1/folder/__init__.py b/example/import_test_project/package_star/folder/__init__.py similarity index 100% rename from example/import_test_project/import_star_folder_1/folder/__init__.py rename to example/import_test_project/package_star/folder/__init__.py diff --git a/example/import_test_project/import_star_folder_1_with_alias/A.py b/example/import_test_project/package_star_with_alias/A.py similarity index 100% rename from example/import_test_project/import_star_folder_1_with_alias/A.py rename to example/import_test_project/package_star_with_alias/A.py diff --git a/example/import_test_project/import_star_folder_1_with_alias/B.py b/example/import_test_project/package_star_with_alias/B.py similarity index 100% rename from example/import_test_project/import_star_folder_1_with_alias/B.py rename to example/import_test_project/package_star_with_alias/B.py diff --git a/example/import_test_project/import_star_folder_1_with_alias/__init__.py b/example/import_test_project/package_star_with_alias/__init__.py similarity index 100% rename from example/import_test_project/import_star_folder_1_with_alias/__init__.py rename to example/import_test_project/package_star_with_alias/__init__.py diff --git a/example/import_test_project/import_star_folder_1_with_alias/folder/C.py b/example/import_test_project/package_star_with_alias/folder/C.py similarity index 100% rename from example/import_test_project/import_star_folder_1_with_alias/folder/C.py rename to example/import_test_project/package_star_with_alias/folder/C.py diff --git a/example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py b/example/import_test_project/package_star_with_alias/folder/__init__.py similarity index 100% rename from example/import_test_project/import_star_folder_1_with_alias/folder/__init__.py rename to example/import_test_project/package_star_with_alias/folder/__init__.py diff --git a/example/import_test_project/init_file_folder_with_file/__init__.py b/example/import_test_project/package_with_file/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_file/__init__.py rename to example/import_test_project/package_with_file/__init__.py diff --git a/example/import_test_project/init_file_folder_with_file/nested_folder_without_init/Starbucks.py b/example/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_with_file/nested_folder_without_init/Starbucks.py rename to example/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/init_file_folder_with_file_and_alias/__init__.py b/example/import_test_project/package_with_file_and_alias/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_file_and_alias/__init__.py rename to example/import_test_project/package_with_file_and_alias/__init__.py diff --git a/example/import_test_project/init_file_folder_with_file_and_alias/nested_folder_without_init/Starbucks.py b/example/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_with_file_and_alias/nested_folder_without_init/Starbucks.py rename to example/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/init_file_folder_3/__init__.py b/example/import_test_project/package_with_folder/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_3/__init__.py rename to example/import_test_project/package_with_folder/__init__.py diff --git a/example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py b/example/import_test_project/package_with_folder/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_3/nested_folder_with_init/__init__.py rename to example/import_test_project/package_with_folder/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py b/example/import_test_project/package_with_folder/nested_folder_with_init/moose.py similarity index 100% rename from example/import_test_project/init_file_folder_3/nested_folder_with_init/moose.py rename to example/import_test_project/package_with_folder/nested_folder_with_init/moose.py diff --git a/example/import_test_project/init_file_folder_3_with_alias/__init__.py b/example/import_test_project/package_with_folder_and_alias/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_3_with_alias/__init__.py rename to example/import_test_project/package_with_folder_and_alias/__init__.py diff --git a/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py b/example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/__init__.py rename to example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py b/example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py similarity index 100% rename from example/import_test_project/init_file_folder_3_with_alias/nested_folder_with_init/moose.py rename to example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py diff --git a/example/import_test_project/init_file_folder_with_function/__init__.py b/example/import_test_project/package_with_function/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function/__init__.py rename to example/import_test_project/package_with_function/__init__.py diff --git a/example/import_test_project/init_file_folder_with_function/nested_folder_with_init/__init__.py b/example/import_test_project/package_with_function/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function/nested_folder_with_init/__init__.py rename to example/import_test_project/package_with_function/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_with_function/nested_folder_with_init/starbucks.py b/example/import_test_project/package_with_function/nested_folder_with_init/starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function/nested_folder_with_init/starbucks.py rename to example/import_test_project/package_with_function/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/init_file_folder_with_function_and_alias/__init__.py b/example/import_test_project/package_with_function_and_alias/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function_and_alias/__init__.py rename to example/import_test_project/package_with_function_and_alias/__init__.py diff --git a/example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/__init__.py b/example/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/__init__.py rename to example/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/starbucks.py b/example/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py similarity index 100% rename from example/import_test_project/init_file_folder_with_function_and_alias/nested_folder_with_init/starbucks.py rename to example/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/test_from_init_file_folder_with_file.py b/example/import_test_project/test_from_init_file_folder_with_file.py deleted file mode 100644 index ba012f3a..00000000 --- a/example/import_test_project/test_from_init_file_folder_with_file.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_with_file import Starbucks - - -Starbucks.Tea() diff --git a/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py b/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py deleted file mode 100644 index 7d6924d3..00000000 --- a/example/import_test_project/test_from_init_file_folder_with_file_and_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_with_file_and_alias import Eataly - - -Eataly.Tea() diff --git a/example/import_test_project/test_from_init_file_folder_with_function.py b/example/import_test_project/test_from_init_file_folder_with_function.py deleted file mode 100644 index bb9ffe09..00000000 --- a/example/import_test_project/test_from_init_file_folder_with_function.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_with_function import StarbucksVisitor - - -StarbucksVisitor() diff --git a/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py b/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py deleted file mode 100644 index 79d9cac6..00000000 --- a/example/import_test_project/test_from_init_file_folder_with_function_and_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -from init_file_folder_with_function_and_alias import EatalyVisitor - - -EatalyVisitor() diff --git a/example/import_test_project/test_from_directory_import_star.py b/example/import_test_project/test_from_package_import_star.py similarity index 51% rename from example/import_test_project/test_from_directory_import_star.py rename to example/import_test_project/test_from_package_import_star.py index 769e3094..30340911 100644 --- a/example/import_test_project/test_from_directory_import_star.py +++ b/example/import_test_project/test_from_package_import_star.py @@ -1,4 +1,4 @@ -from import_star_folder_1 import * +from package_star import * A.cobia() diff --git a/example/import_test_project/test_from_directory_import_star_with_alias.py b/example/import_test_project/test_from_package_import_star_with_alias.py similarity index 52% rename from example/import_test_project/test_from_directory_import_star_with_alias.py rename to example/import_test_project/test_from_package_import_star_with_alias.py index 35bb6691..ba86cbbc 100644 --- a/example/import_test_project/test_from_directory_import_star_with_alias.py +++ b/example/import_test_project/test_from_package_import_star_with_alias.py @@ -1,4 +1,4 @@ -from import_star_folder_1_with_alias import * +from package_star_with_alias import * husk.cobia() diff --git a/example/import_test_project/test_from_package_with_file.py b/example/import_test_project/test_from_package_with_file.py new file mode 100644 index 00000000..171c6c2f --- /dev/null +++ b/example/import_test_project/test_from_package_with_file.py @@ -0,0 +1,4 @@ +from package_with_file import Starbucks + + +Starbucks.Tea() diff --git a/example/import_test_project/test_from_package_with_file_and_alias.py b/example/import_test_project/test_from_package_with_file_and_alias.py new file mode 100644 index 00000000..6f30580a --- /dev/null +++ b/example/import_test_project/test_from_package_with_file_and_alias.py @@ -0,0 +1,4 @@ +from package_with_file_and_alias import Eataly + + +Eataly.Tea() diff --git a/example/import_test_project/test_from_package_with_function.py b/example/import_test_project/test_from_package_with_function.py new file mode 100644 index 00000000..ce093c87 --- /dev/null +++ b/example/import_test_project/test_from_package_with_function.py @@ -0,0 +1,4 @@ +from package_with_function import StarbucksVisitor + + +StarbucksVisitor() diff --git a/example/import_test_project/test_from_package_with_function_and_alias.py b/example/import_test_project/test_from_package_with_function_and_alias.py new file mode 100644 index 00000000..6d0c4ace --- /dev/null +++ b/example/import_test_project/test_from_package_with_function_and_alias.py @@ -0,0 +1,4 @@ +from package_with_function_and_alias import EatalyVisitor + + +EatalyVisitor() diff --git a/example/import_test_project/test_init_3.py b/example/import_test_project/test_init_3.py deleted file mode 100644 index 2eab90af..00000000 --- a/example/import_test_project/test_init_3.py +++ /dev/null @@ -1,3 +0,0 @@ -import init_file_folder_3 - -init_file_folder_3.nested_folder_with_init.moose.fast() diff --git a/example/import_test_project/test_init_3_with_alias.py b/example/import_test_project/test_init_3_with_alias.py deleted file mode 100644 index 33882433..00000000 --- a/example/import_test_project/test_init_3_with_alias.py +++ /dev/null @@ -1,3 +0,0 @@ -import init_file_folder_3_with_alias - -init_file_folder_3_with_alias.heyo.moose.fast() diff --git a/example/import_test_project/test_init_file_folder_with_file.py b/example/import_test_project/test_init_file_folder_with_file.py deleted file mode 100644 index 2e15bd70..00000000 --- a/example/import_test_project/test_init_file_folder_with_file.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_with_file - - -init_file_folder_with_file.Starbucks.Tea() diff --git a/example/import_test_project/test_init_file_folder_with_file_and_alias.py b/example/import_test_project/test_init_file_folder_with_file_and_alias.py deleted file mode 100644 index 05bd9ba2..00000000 --- a/example/import_test_project/test_init_file_folder_with_file_and_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_with_file_and_alias - - -init_file_folder_with_file_and_alias.Eataly.Tea() diff --git a/example/import_test_project/test_init_file_folder_with_function.py b/example/import_test_project/test_init_file_folder_with_function.py deleted file mode 100644 index 049797f6..00000000 --- a/example/import_test_project/test_init_file_folder_with_function.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_with_function - - -init_file_folder_with_function.StarbucksVisitor() diff --git a/example/import_test_project/test_init_file_folder_with_function_and_alias.py b/example/import_test_project/test_init_file_folder_with_function_and_alias.py deleted file mode 100644 index ca81cb37..00000000 --- a/example/import_test_project/test_init_file_folder_with_function_and_alias.py +++ /dev/null @@ -1,4 +0,0 @@ -import init_file_folder_with_function_and_alias - - -init_file_folder_with_function_and_alias.EatalyVisitor() diff --git a/example/import_test_project/test_package_with_file.py b/example/import_test_project/test_package_with_file.py new file mode 100644 index 00000000..d942a418 --- /dev/null +++ b/example/import_test_project/test_package_with_file.py @@ -0,0 +1,4 @@ +import package_with_file + + +package_with_file.Starbucks.Tea() diff --git a/example/import_test_project/test_package_with_file_and_alias.py b/example/import_test_project/test_package_with_file_and_alias.py new file mode 100644 index 00000000..8916d3e4 --- /dev/null +++ b/example/import_test_project/test_package_with_file_and_alias.py @@ -0,0 +1,4 @@ +import package_with_file_and_alias + + +package_with_file_and_alias.Eataly.Tea() diff --git a/example/import_test_project/test_package_with_folder.py b/example/import_test_project/test_package_with_folder.py new file mode 100644 index 00000000..7d5d8b7f --- /dev/null +++ b/example/import_test_project/test_package_with_folder.py @@ -0,0 +1,3 @@ +import package_with_folder + +package_with_folder.nested_folder_with_init.moose.fast() diff --git a/example/import_test_project/test_package_with_folder_and_alias.py b/example/import_test_project/test_package_with_folder_and_alias.py new file mode 100644 index 00000000..2a5187fc --- /dev/null +++ b/example/import_test_project/test_package_with_folder_and_alias.py @@ -0,0 +1,3 @@ +import package_with_folder_and_alias + +package_with_folder_and_alias.heyo.moose.fast() diff --git a/example/import_test_project/test_package_with_function.py b/example/import_test_project/test_package_with_function.py new file mode 100644 index 00000000..b5997241 --- /dev/null +++ b/example/import_test_project/test_package_with_function.py @@ -0,0 +1,4 @@ +import package_with_function + + +package_with_function.StarbucksVisitor() diff --git a/example/import_test_project/test_package_with_function_and_alias.py b/example/import_test_project/test_package_with_function_and_alias.py new file mode 100644 index 00000000..5c06b8ef --- /dev/null +++ b/example/import_test_project/test_package_with_function_and_alias.py @@ -0,0 +1,4 @@ +import package_with_function_and_alias + + +package_with_function_and_alias.EatalyVisitor() diff --git a/tests/import_test.py b/tests/import_test.py index 502e06c9..5d6ea3f0 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -109,8 +109,8 @@ def test_from_file_import_star(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_directory_import_star(self): - path = os.path.normpath('example/import_test_project/test_from_directory_import_star.py') + def test_from_package_import_star(self): + path = os.path.normpath('example/import_test_project/test_from_package_import_star.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -118,7 +118,7 @@ def test_from_directory_import_star(self): self.cfg_create_from_file(path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry import_star_folder_1", + "Module Entry package_star", "Module Entry A", "Module Exit A", "Module Entry B", @@ -127,7 +127,7 @@ def test_from_directory_import_star(self): "Module Entry C", "Module Exit C", "Module Exit folder", - "Module Exit import_star_folder_1", + "Module Exit package_star", "Function Entry A.cobia", "print('A')", "Exit A.cobia", @@ -142,8 +142,8 @@ def test_from_directory_import_star(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_directory_import_star_with_alias(self): - path = os.path.normpath('example/import_test_project/test_from_directory_import_star_with_alias.py') + def test_from_package_import_star_with_alias(self): + path = os.path.normpath('example/import_test_project/test_from_package_import_star_with_alias.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -151,7 +151,7 @@ def test_from_directory_import_star_with_alias(self): self.cfg_create_from_file(path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry import_star_folder_1_with_alias", + "Module Entry package_star_with_alias", "Module Entry A", "Module Exit A", "Module Entry B", @@ -160,7 +160,7 @@ def test_from_directory_import_star_with_alias(self): "Module Entry C", "Module Exit C", "Module Exit folder", - "Module Exit import_star_folder_1_with_alias", + "Module Exit package_star_with_alias", "Function Entry husk.cobia", "print('A')", "Exit husk.cobia", @@ -450,8 +450,8 @@ def test_multiple_functions_with_aliases(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_file_folder_with_function(self): - file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_function.py') + def test_package_with_function(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_function.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -460,22 +460,22 @@ def test_init_file_folder_with_function(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_function", + "Module Entry package_with_function", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_with_function", - "Function Entry init_file_folder_with_function.StarbucksVisitor", + "Module Exit package_with_function", + "Function Entry package_with_function.StarbucksVisitor", "print('Iced Mocha')", - "Exit init_file_folder_with_function.StarbucksVisitor", + "Exit package_with_function.StarbucksVisitor", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_file_folder_with_function_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_function_and_alias.py') + def test_package_with_function_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_function_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -484,22 +484,22 @@ def test_init_file_folder_with_function_and_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_function_and_alias", + "Module Entry package_with_function_and_alias", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_with_function_and_alias", - "Function Entry init_file_folder_with_function_and_alias.EatalyVisitor", + "Module Exit package_with_function_and_alias", + "Function Entry package_with_function_and_alias.EatalyVisitor", "print('Iced Mocha')", - "Exit init_file_folder_with_function_and_alias.EatalyVisitor", + "Exit package_with_function_and_alias.EatalyVisitor", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_file_folder_with_file(self): - file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_file.py') + def test_package_with_file(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_file.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -508,20 +508,20 @@ def test_init_file_folder_with_file(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_file", + "Module Entry package_with_file", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_with_file", - "Function Entry init_file_folder_with_file.Starbucks.Tea", + "Module Exit package_with_file", + "Function Entry package_with_file.Starbucks.Tea", "print('Teavana Green')", - "Exit init_file_folder_with_file.Starbucks.Tea", + "Exit package_with_file.Starbucks.Tea", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_file_folder_with_file_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_init_file_folder_with_file_and_alias.py') + def test_package_with_file_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_file_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -530,20 +530,20 @@ def test_init_file_folder_with_file_and_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_file_and_alias", + "Module Entry package_with_file_and_alias", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_with_file_and_alias", - "Function Entry init_file_folder_with_file_and_alias.Eataly.Tea", + "Module Exit package_with_file_and_alias", + "Function Entry package_with_file_and_alias.Eataly.Tea", "print('Teavana Green')", - "Exit init_file_folder_with_file_and_alias.Eataly.Tea", + "Exit package_with_file_and_alias.Eataly.Tea", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_3(self): - file_path = os.path.normpath('example/import_test_project/test_init_3.py') + def test_package_with_folder(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_folder.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -552,22 +552,22 @@ def test_init_3(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_3", + "Module Entry package_with_folder", "Module Entry nested_folder_with_init", "Module Entry moose", "Module Exit moose", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_3", - "Function Entry init_file_folder_3.nested_folder_with_init.moose.fast", + "Module Exit package_with_folder", + "Function Entry package_with_folder.nested_folder_with_init.moose.fast", "print('real fast')", - "Exit init_file_folder_3.nested_folder_with_init.moose.fast", + "Exit package_with_folder.nested_folder_with_init.moose.fast", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_init_3_with_alias(self): - file_path = os.path.normpath('example/import_test_project/test_init_3_with_alias.py') + def test_package_with_folder_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_package_with_folder_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -576,22 +576,22 @@ def test_init_3_with_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_3_with_alias", + "Module Entry package_with_folder_and_alias", "Module Entry nested_folder_with_init", "Module Entry moose", "Module Exit moose", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_3_with_alias", - "Function Entry init_file_folder_3_with_alias.heyo.moose.fast", + "Module Exit package_with_folder_and_alias", + "Function Entry package_with_folder_and_alias.heyo.moose.fast", "print('real fast')", - "Exit init_file_folder_3_with_alias.heyo.moose.fast", + "Exit package_with_folder_and_alias.heyo.moose.fast", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_file_folder_with_function(self): - file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_function.py') + def test_from_package_with_function(self): + file_path = os.path.normpath('example/import_test_project/test_from_package_with_function.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -600,12 +600,12 @@ def test_from_init_file_folder_with_function(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_function", + "Module Entry package_with_function", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_with_function", + "Module Exit package_with_function", "Function Entry StarbucksVisitor", "print('Iced Mocha')", "Exit StarbucksVisitor", @@ -614,8 +614,8 @@ def test_from_init_file_folder_with_function(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_file_folder_with_function_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_function_and_alias.py') + def test_from_package_with_function_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_from_package_with_function_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -624,12 +624,12 @@ def test_from_init_file_folder_with_function_and_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_function_and_alias", + "Module Entry package_with_function_and_alias", "Module Entry nested_folder_with_init", "Module Entry starbucks", "Module Exit starbucks", "Module Exit nested_folder_with_init", - "Module Exit init_file_folder_with_function_and_alias", + "Module Exit package_with_function_and_alias", "Function Entry EatalyVisitor", "print('Iced Mocha')", "Exit EatalyVisitor", @@ -638,8 +638,8 @@ def test_from_init_file_folder_with_function_and_alias(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_file_folder_with_file(self): - file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_file.py') + def test_from_package_with_file(self): + file_path = os.path.normpath('example/import_test_project/test_from_package_with_file.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -648,10 +648,10 @@ def test_from_init_file_folder_with_file(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_file", + "Module Entry package_with_file", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_with_file", + "Module Exit package_with_file", "Function Entry Starbucks.Tea", "print('Teavana Green')", "Exit Starbucks.Tea", @@ -660,8 +660,8 @@ def test_from_init_file_folder_with_file(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_from_init_file_folder_with_file_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_from_init_file_folder_with_file_and_alias.py') + def test_from_package_with_file_and_alias(self): + file_path = os.path.normpath('example/import_test_project/test_from_package_with_file_and_alias.py') project_path = os.path.normpath('example/import_test_project') project_modules = get_modules_and_packages(project_path) @@ -670,10 +670,10 @@ def test_from_init_file_folder_with_file_and_alias(self): self.cfg_create_from_file(file_path, project_modules, local_modules) EXPECTED = ["Entry module", - "Module Entry init_file_folder_with_file_and_alias", + "Module Entry package_with_file_and_alias", "Module Entry Starbucks", "Module Exit Starbucks", - "Module Exit init_file_folder_with_file_and_alias", + "Module Exit package_with_file_and_alias", "Function Entry Eataly.Tea", "print('Teavana Green')", "Exit Eataly.Tea", From d0a512ff8fd1bb2975e22da4ce4f634f2f0ee730 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 15 May 2017 20:14:01 -0400 Subject: [PATCH 037/541] fix fdid typo --- pyt/alias_helper.py | 6 ++---- pyt/interprocedural_cfg.py | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/pyt/alias_helper.py b/pyt/alias_helper.py index 466d9855..648665fc 100644 --- a/pyt/alias_helper.py +++ b/pyt/alias_helper.py @@ -13,7 +13,6 @@ def as_alias_handler(alias_list): def handle_aliases_in_calls(name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. - """ for key, val in import_alias_mapping.items(): # e.g. Foo == Foo @@ -30,7 +29,6 @@ def handle_aliases_in_calls(name, import_alias_mapping): def handle_aliases_in_init_files(name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. - """ for key, val in import_alias_mapping.items(): # e.g. Foo == Foo @@ -44,10 +42,10 @@ def handle_aliases_in_init_files(name, import_alias_mapping): return name.replace(val, key) return None -def handle_fdi_aliases(module_or_package_name, import_alias_mapping): +def handle_fdid_aliases(module_or_package_name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. - + fdid means from directory import directory. """ for key, val in import_alias_mapping.items(): if module_or_package_name == val: diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 20cf6eb7..57186819 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -6,7 +6,7 @@ as_alias_handler, handle_aliases_in_calls, handle_aliases_in_init_files, - handle_fdi_aliases, + handle_fdid_aliases, not_as_alias_handler, retrieve_import_alias_mapping ) @@ -453,7 +453,7 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m qualified_name = def_name if from_fdid: - alias = handle_fdi_aliases(module_or_package_name, import_alias_mapping) + alias = handle_fdid_aliases(module_or_package_name, import_alias_mapping) if alias: module_or_package_name = alias parent_definition = ModuleDefinition(parent_definitions, From 262652d3673ca90dcd4062e7c75ace7368ea2424 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 21 May 2017 04:47:03 -0400 Subject: [PATCH 038/541] (Ready for Review) Add codeclimate (#44) * first try at codeclimate * Got it to work with my fork perfectly, deleted 2nd readme --- .codeclimate.yml | 34 +++++++++++++++++++ .travis.yml | 9 ++++- README.md | 85 ------------------------------------------------ README.rst | 17 ++++++---- 4 files changed, 52 insertions(+), 93 deletions(-) create mode 100644 .codeclimate.yml delete mode 100644 README.md diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..5f11fdd9 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,34 @@ +engines: + duplication: + enabled: true + config: + languages: + - python + fixme: + enabled: true + radon: + enabled: true + pep8: + enabled: true + checks: + E501: + enabled: false +ratings: + paths: + - "pyt/*" + - "**.py" +exclude_paths: +- "example/**" +- "profiling/**" +- "tests/**" +- "LICENSE" +- "**/trigger_definitions/*" +- "**.cfg" +- "**.csv" +- "**.in" +- "**.md" +- "**.png" +- "**.pyt" +- "**.rst" +- "**.sh" +- "**.txt" diff --git a/.travis.yml b/.travis.yml index d28c5f41..c72bdbf0 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,11 @@ language: python python: - "3.6" -script: python -m tests +install: + - pip install -r requirements.txt + - pip install codeclimate-test-reporter +script: + - python -m tests + - coverage run -m tests +after_script: + - codeclimate-test-reporter diff --git a/README.md b/README.md deleted file mode 100644 index 2a0b5145..00000000 --- a/README.md +++ /dev/null @@ -1,85 +0,0 @@ -[![Build Status](https://travis-ci.org/python-security/pyt.svg?branch=master)](https://travis-ci.org/python-security/pyt) - -# PyT - Python Taint - -Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) - -Features: -- Detect Command injection -- Detect SQL injection -- Detect XSS -- Detect directory traversal -- Get a control flow graph -- Get a def-use and/or a use-def chain -- Search GitHub and analyse hits with PyT -- Scan intraprocedural or interprocedural -- A lot of customisation possible - -Example usage and output: - -![Alt text](/readme_static_files/pyt_example.png?raw=true "Optional Title") - -# Install -1. git clone https://github.com/python-security/pyt.git -2. python setup.py install -3. pyt -h - -# Usage from source -Using it like a user: -`python -m pyt -f example/vulnerable_code/XSS_call.py save -du` - -Running the tests: `python -m tests` - -Running an individual test file: `python -m unittest tests.import_test` - -Running an individual test: `python -m unittest tests.import_test.ImportTest.test_import` - - -# Contributions -Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com - -[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) - -## Virtual env setup guide - -Create a directory to hold the virtual env and project - -`mkdir ~/a_folder` - -`cd ~/a_folder` - -Clone the project into the directory - -`git clone https://github.com/python-security/pyt.git` - -Create the virtual environment - -`python3 -m venv ~/a_folder/` - -Check that you have the right versions - -`python --version` sample output `Python 3.6.0` - -`pip --version` sample output `pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)` - -Change to project directory - -`cd pyt` - -Install dependencies - -`pip install -r requirements.txt` - -`pip list` sample output - -``` -gitdb (0.6.4) -GitPython (2.0.8) -graphviz (0.4.10) -pip (9.0.1) -requests (2.10.0) -setuptools (28.8.0) -smmap (0.9.0) -``` - -In the future, just type `source ~/pyt/bin/activate` to start developing. diff --git a/README.rst b/README.rst index e5d59229..67bdedc2 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,9 @@ .. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt +.. image:: https://codeclimate.com/github/python-security/pyt/badges/coverage.svg + :target: https://codeclimate.com/github/python-security/pyt/coverage + Python Taint ============ @@ -34,12 +37,12 @@ Example usage and output: Install ======= - + 1. git clone https://github.com/python-security/pyt.git 2. python setup.py install 3. pyt -h - - + + Usage from Source ================= @@ -63,7 +66,7 @@ Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@g Virtual env setup guide ======================= -Create a directory to hold the virtual env and project +Create a directory to hold the virtual env and project ``mkdir ~/a_folder`` @@ -73,11 +76,11 @@ Clone the project into the directory ``git clone https://github.com/python-security/pyt.git`` -Create the virtual environment +Create the virtual environment ``python3 -m venv ~/a_folder/`` -Check that you have the right versions +Check that you have the right versions ``python --version`` sample output ``Python 3.6.0`` @@ -101,4 +104,4 @@ Install dependencies setuptools (28.8.0) smmap (0.9.0) -In the future, just type ``source ~/pyt/bin/activate`` to start developing. +In the future, just type ``source ~/a_folder/bin/activate`` to start developing. From 39b062b70dc8e36fe4569def47ea1e1d84c4b52b Mon Sep 17 00:00:00 2001 From: Bruno Thalmann Date: Sun, 21 May 2017 11:11:07 +0200 Subject: [PATCH 039/541] Codeclimate is a bitch --- requirements.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/requirements.txt b/requirements.txt index 4351cab0..2c02ff62 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ graphviz==0.4.10 requests==2.10.0 GitPython==2.0.8 +coverage>=4.0, <4.4 From a6aa87f2abcbcc15500df09fa176f94d3f761685 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 15:02:48 -0400 Subject: [PATCH 040/541] added trim option --- pyt/__main__.py | 7 ++++- pyt/vulnerabilities.py | 62 ++++++++++++++++++++++++++++++---------- pyt/vulnerability_log.py | 30 +++++++++---------- 3 files changed, 68 insertions(+), 31 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 7c5fb02f..70301f90 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -64,6 +64,9 @@ action='store_true') print_group.add_argument('-vp', '--verbose-print', help='Verbose printing of -p.', action='store_true') +print_group.add_argument('-trim', '--trim-reassigned-in', + help='Trims the reassigned list to the vulnerability chain.', action='store_true') + parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str) @@ -217,9 +220,11 @@ def main(): vulnerability_log = None if args.trigger_word_file: vulnerability_log = find_vulnerabilities(cfg_list, analysis, + args.trim_reassigned_in, args.trigger_word_file) else: - vulnerability_log = find_vulnerabilities(cfg_list, analysis) + vulnerability_log = find_vulnerabilities(cfg_list, analysis, + args.trim_reassigned_in) vulnerability_log.print_report() diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index e353f54f..0803b29f 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -12,7 +12,8 @@ Vulnerability, VulnerabilityLog ) - +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') @@ -33,6 +34,17 @@ def append(self, cfg_node): elif not self.secondary_nodes: self.secondary_nodes = [cfg_node] + def __repr__(self): + output = 'TriggerNode(' + + if self.trigger_word: + output = output + 'trigger_word is ' + str(self.trigger_word) + ', ' + + return ( + output + + 'sanitisers are ' + str(self.sanitisers) + ', ' + 'cfg_node is ' + str(self.cfg_node) + ')\n' + ) def identify_triggers(cfg, sources, sinks): """Identify sources, sinks and sanitisers in a CFG. @@ -209,10 +221,10 @@ def get_sink_args(cfg_node): return vv.result -def get_vulnerability(source, sink, triggers, lattice): +def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in): """Get vulnerability between source and sink if it exists. - Uses triggers to find sanitisers + Uses triggers to find sanitisers. Args: source(TriggerNode): TriggerNode of the source. @@ -224,7 +236,8 @@ def get_vulnerability(source, sink, triggers, lattice): """ source_in_sink = lattice.in_constraint(source.cfg_node, sink.cfg_node) - secondary_in_sink = [] + secondary_in_sink = list() + if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, @@ -233,33 +246,48 @@ def get_vulnerability(source, sink, triggers, lattice): trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) + evil_node = None + if sink_args: + for node in secondary_in_sink: + if sink_args and node.left_hand_side in sink_args: + evil_node = node + + trimmed_nodes = list() + if evil_node and trim_reassigned_in: + trimmed_nodes.append(evil_node) + for secondary in reversed(source.secondary_nodes): + if lattice.in_constraint(secondary, sink.cfg_node): + if secondary.left_hand_side in evil_node.right_hand_side_variables: + evil_node = secondary + trimmed_nodes.insert(0, evil_node) + source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None - secondary_nodes_in_sink_args = any(True for node in secondary_in_sink - if node.left_hand_side in sink_args)\ - if sink_args else None - lhs_in_sink_args = source_lhs_in_sink_args or secondary_nodes_in_sink_args + lhs_in_sink_args = source_lhs_in_sink_args or evil_node if trigger_node_in_sink and lhs_in_sink_args: source_trigger_word = source.trigger_word sink_trigger_word = sink.trigger_word - sink_is_sanitised = is_sanitized(sink, triggers.sanitiser_dict, + sink_is_sanitised = is_sanitized(sink, + triggers.sanitiser_dict, lattice) - + reassignment_nodes = source.secondary_nodes + if trimmed_nodes: + reassignment_nodes = trimmed_nodes if sink_is_sanitised: return SanitisedVulnerability(source.cfg_node, source_trigger_word, sink.cfg_node, sink_trigger_word, sink.sanitisers, - source.secondary_nodes) + reassignment_nodes) else: return Vulnerability(source.cfg_node, source_trigger_word, sink.cfg_node, sink_trigger_word, - source.secondary_nodes) + reassignment_nodes) return None -def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice): +def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, trim_reassigned_in): """Find vulnerabilities in a cfg. Args: @@ -270,12 +298,13 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice): triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) for sink in triggers.sinks: for source in triggers.sources: - vulnerability = get_vulnerability(source, sink, triggers, lattice) + vulnerability = get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in) if vulnerability: vulnerability_log.append(vulnerability) def find_vulnerabilities(cfg_list, analysis_type, + trim_reassigned_in=False, trigger_word_file=default_trigger_word_file): """Find vulnerabilities in a list of CFGs from a trigger_word_file. @@ -287,10 +316,13 @@ def find_vulnerabilities(cfg_list, analysis_type, Returns: A VulnerabilityLog with found vulnerabilities. """ + logger.debug("trim_reassigned_in is %s", trim_reassigned_in) definitions = parse(trigger_word_file) vulnerability_log = VulnerabilityLog() + for cfg in cfg_list: find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, - Lattice(cfg.nodes, analysis_type)) + Lattice(cfg.nodes, analysis_type), + trim_reassigned_in) return vulnerability_log diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index ad7cc8a2..b2e00859 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -30,18 +30,18 @@ def print_report(self): class Reassigned(): - def __init__(self, secondary_nodes): - self.secondary_nodes = secondary_nodes + def __init__(self, reassignment_nodes): + self.reassignment_nodes = reassignment_nodes def __str__(self): - secondary = '' - if self.secondary_nodes: - secondary += '\nReassigned in: \n\t' - secondary += '\n\t'.join([ + reassignment = '' + if self.reassignment_nodes: + reassignment += '\nReassigned in: \n\t' + reassignment += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + - node.label for node in self.secondary_nodes]) - return secondary + node.label for node in self.reassignment_nodes]) + return reassignment class Vulnerability(): @@ -49,26 +49,26 @@ class Vulnerability(): the sink and the sinks trigger word.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, secondary_nodes): + sink, sink_trigger_word, reassignment_nodes): """Set source and sink information.""" self.source = source self.source_trigger_word = source_trigger_word self.sink = sink self.sink_trigger_word = sink_trigger_word - self.secondary_nodes = secondary_nodes + self.reassignment_nodes = reassignment_nodes self.__remove_sink_from_secondary_nodes() def __remove_sink_from_secondary_nodes(self): - if self.secondary_nodes: + if self.reassignment_nodes: try: - self.secondary_nodes.remove(self.sink) + self.reassignment_nodes.remove(self.sink) except ValueError: pass def __str__(self): """Pretty printing of a vulnerability.""" - reassigned_str = Reassigned(self.secondary_nodes) + reassigned_str = Reassigned(self.reassignment_nodes) return ('File: {}\n > User input at line {}, trigger word "{}":' ' \n\t{}{}\nFile: {}\n > reaches line {}, trigger word' ' "{}": \n\t{}'.format( @@ -84,10 +84,10 @@ class SanitisedVulnerability(Vulnerability): Also containing the sanitiser.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, sanitiser, secondary_nodes): + sink, sink_trigger_word, sanitiser, reassignment_nodes): """Set source, sink and sanitiser information.""" super().__init__(source, source_trigger_word, - sink, sink_trigger_word, secondary_nodes) + sink, sink_trigger_word, reassignment_nodes) self.sanitiser = sanitiser def __str__(self): From f7ab3ddff1361ca453b4e7aa44ec11b8d570d98e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 15:06:02 -0400 Subject: [PATCH 041/541] add extra newline for pep8 --- pyt/vulnerabilities.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 0803b29f..6177c12e 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -46,6 +46,7 @@ def __repr__(self): 'cfg_node is ' + str(self.cfg_node) + ')\n' ) + def identify_triggers(cfg, sources, sinks): """Identify sources, sinks and sanitisers in a CFG. From 475b908e09977c6eabeb465e86b0d7fbc88fb2f6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 15:08:44 -0400 Subject: [PATCH 042/541] remove debugging logger --- pyt/vulnerabilities.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 6177c12e..143296d5 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -12,8 +12,7 @@ Vulnerability, VulnerabilityLog ) -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') + Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') @@ -317,7 +316,6 @@ def find_vulnerabilities(cfg_list, analysis_type, Returns: A VulnerabilityLog with found vulnerabilities. """ - logger.debug("trim_reassigned_in is %s", trim_reassigned_in) definitions = parse(trigger_word_file) vulnerability_log = VulnerabilityLog() From b9d15253dea518d05c23a5cf8dccf0fcd0e9ea7b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 15:25:12 -0400 Subject: [PATCH 043/541] [ui] fixed prog name from __main__.py to python -m pyt --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 7c5fb02f..190abc30 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -33,7 +33,7 @@ from .vulnerabilities import find_vulnerabilities -parser = argparse.ArgumentParser() +parser = argparse.ArgumentParser(prog='python -m pyt') parser.set_defaults(which='') subparsers = parser.add_subparsers() From 94e99288328e4c7ee3747869d5e210f790d4605a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 19:03:25 -0400 Subject: [PATCH 044/541] [cleanup] added comments and cleaned --- pyt/fixed_point.py | 6 +++--- pyt/lattice.py | 25 ++++++++++++------------- pyt/reaching_definitions.py | 6 ++++-- pyt/reaching_definitions_base.py | 4 ++-- pyt/reaching_definitions_taint.py | 7 ++++--- 5 files changed, 25 insertions(+), 23 deletions(-) diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 68e11a7b..1ca19e99 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -6,10 +6,10 @@ class FixedPointAnalysis(): """Run the fix point analysis.""" def __init__(self, cfg, analysis): - """Fixed point analysis + """Fixed point analysis. - analysis must be a dataflow analysis containing a 'fixpointmethod' - method that analyzes one CFG node""" + Analysis must be a dataflow analysis containing a 'fixpointmethod' + method that analyzes one CFG node.""" self.analysis = analysis(cfg) self.cfg = cfg diff --git a/pyt/lattice.py b/pyt/lattice.py index f27cadda..f0df8c6b 100644 --- a/pyt/lattice.py +++ b/pyt/lattice.py @@ -6,35 +6,34 @@ def __init__(self, cfg_nodes, analysis_type): self.el2bv = dict() # Element to bitvector dictionary self.bv2el = list() # Bitvector to element list for i, e in enumerate(analysis_type.get_lattice_elements(cfg_nodes)): + # Give each element a unique shift of 1 self.el2bv[e] = 0b1 << i - self.bv2el.append(e) - self.bv2el = list(reversed(self.bv2el)) + self.bv2el.insert(0, e) def get_elements(self, number): - r = list() - if number == 0: - return r + return [] + elements = list() # Turn number into a binary string of length len(self.bv2el) - for i, x in enumerate(format(number, - '0' + str(len(self.bv2el)) + 'b')): - if x == '1': - r.append(self.bv2el[i]) - return r + binary_string = format(number, + '0' + str(len(self.bv2el)) + 'b') + for i, bit in enumerate(binary_string): + if bit == '1': + elements.append(self.bv2el[i]) + return elements def in_constraint(self, node1, node2): """Checks if node1 is in node2's constraints For instance, if node1 = 010 and node2 = 110: 010 & 110 = 010 -> has the element.""" constraint = constraint_table[node2] + if constraint == 0b0: + return False try: value = self.el2bv[node1] except KeyError: - value = 0b0 - - if constraint == 0b0 or value == 0b0: return False return constraint & value != 0 diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index 8eb30189..34af3d82 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -11,9 +11,11 @@ def fixpointmethod(self, cfg_node): # Assignment check if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - arrow_result = self.arrow(JOIN, cfg_node) + # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN + arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) + arrow_result = arrow_result | self.lattice.el2bv[cfg_node] constraint_table[cfg_node] = arrow_result - # Default case: + # Default case else: constraint_table[cfg_node] = JOIN diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 240b9773..6e901c5a 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -16,11 +16,11 @@ def join(self, cfg_node): return constraint_join(cfg_node.ingoing) def arrow(self, JOIN, _id): - """Removes all assignments from JOIN that has _id on the left hand side. + """Removes all previous assignments from JOIN that have the same the left hand side. This represents the arrow id definition from Schwartzbach.""" r = JOIN for node in self.lattice.get_elements(JOIN): - if node.left_hand_side == _id.left_hand_side: + if node.left_hand_side == _id: r = r ^ self.lattice.el2bv[node] return r diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 776e06d6..d697bb89 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -12,13 +12,14 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - # Reassignment check: + # Reassignment check if cfg_node.left_hand_side not in\ cfg_node.right_hand_side_variables: - arrow_result = self.arrow(JOIN, cfg_node) + # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN + arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) arrow_result = arrow_result | self.lattice.el2bv[cfg_node] constraint_table[cfg_node] = arrow_result - # Default case: + # Default case else: constraint_table[cfg_node] = JOIN From 8d8d3f2e568eb88b52534162ac121d5114b86b63 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 31 May 2017 20:01:24 -0400 Subject: [PATCH 045/541] remove blank line --- pyt/reaching_definitions.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index 34af3d82..0c8317b3 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -13,7 +13,6 @@ def fixpointmethod(self, cfg_node): arrow_result = JOIN # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - arrow_result = arrow_result | self.lattice.el2bv[cfg_node] constraint_table[cfg_node] = arrow_result # Default case From bd33820c564e3727494671c7e63b55913819ba2a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Jun 2017 12:04:21 -0400 Subject: [PATCH 046/541] [cleanup]renamed evil node to node_in_the_vulnerability_chain --- pyt/vulnerabilities.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 143296d5..06e8a1d3 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -246,25 +246,27 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in): trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) - evil_node = None + secondary_node_in_sink_args = None if sink_args: for node in secondary_in_sink: if sink_args and node.left_hand_side in sink_args: - evil_node = node + secondary_node_in_sink_args = node trimmed_nodes = list() - if evil_node and trim_reassigned_in: - trimmed_nodes.append(evil_node) + if secondary_node_in_sink_args and trim_reassigned_in: + trimmed_nodes.append(secondary_node_in_sink_args) + node_in_the_vulnerability_chain = secondary_node_in_sink_args + # Here is where we do backwards slicing to traceback which nodes led to the vulnerability for secondary in reversed(source.secondary_nodes): if lattice.in_constraint(secondary, sink.cfg_node): - if secondary.left_hand_side in evil_node.right_hand_side_variables: - evil_node = secondary - trimmed_nodes.insert(0, evil_node) + if secondary.left_hand_side in node_in_the_vulnerability_chain.right_hand_side_variables: + node_in_the_vulnerability_chain = secondary + trimmed_nodes.insert(0, node_in_the_vulnerability_chain) source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None - lhs_in_sink_args = source_lhs_in_sink_args or evil_node + lhs_in_sink_args = source_lhs_in_sink_args or secondary_node_in_sink_args if trigger_node_in_sink and lhs_in_sink_args: source_trigger_word = source.trigger_word From bc522ebc6cb2420b175437326bcb7e3760537656 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Jun 2017 12:27:58 -0400 Subject: [PATCH 047/541] [cleanup] british analyses and list() over [] --- pyt/fixed_point.py | 2 +- pyt/flask_adaptor.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 1ca19e99..806c172a 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -9,7 +9,7 @@ def __init__(self, cfg, analysis): """Fixed point analysis. Analysis must be a dataflow analysis containing a 'fixpointmethod' - method that analyzes one CFG node.""" + method that analyses one CFG node.""" self.analysis = analysis(cfg) self.cfg = cfg diff --git a/pyt/flask_adaptor.py b/pyt/flask_adaptor.py index fe05587d..17e24fa1 100644 --- a/pyt/flask_adaptor.py +++ b/pyt/flask_adaptor.py @@ -36,8 +36,8 @@ def get_cfg(self, definition): if args: definition_lineno = definition.node.lineno - cfg.nodes[0].outgoing = [] - cfg.nodes[1].ingoing = [] + cfg.nodes[0].outgoing = list() + cfg.nodes[1].ingoing = list() for i, argument in enumerate(args, 1): taint = TaintedNode(argument, argument, None, [], line_number=definition_lineno, path=definition.path) From 362a45fca50a341f5dbad27b535a72328de6dcc2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Jun 2017 14:33:55 -0400 Subject: [PATCH 048/541] [vulnerabilities][UI] Add unknown vulnerability type --- .../absolute_from_file_does_not_exist.py | 14 +++-- pyt/base_cfg.py | 30 +++++++++-- pyt/interprocedural_cfg.py | 11 +++- pyt/vulnerabilities.py | 53 +++++++++++++++---- pyt/vulnerability_log.py | 48 +++++++++++------ tests/vulnerabilities_across_files_test.py | 6 +-- tests/vulnerabilities_test.py | 8 +-- 7 files changed, 126 insertions(+), 44 deletions(-) diff --git a/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py b/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py index 48202718..f6803a4b 100644 --- a/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py +++ b/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py @@ -1,17 +1,21 @@ import subprocess from flask import Flask, render_template, request -from other_file import does_not_exist +# This is a lib we can't possibly see inside of +import scrypt app = Flask(__name__) -@app.route('/menu', methods=['POST']) +@app.route('/menu', methods=['GET']) def menu(): - param = request.form['suggestion'] + param = request.args.get('suggestion') - command = does_not_exist('echo ' + param + ' >> ' + 'menu.txt') - subprocess.call(command, shell=True) + # This is a function we can't possibly see inside of + foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + hey = command + subprocess.call(hey, shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 89957a56..c734f93d 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -4,6 +4,8 @@ from .ast_helper import Arguments, get_call_names_as_string from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') ControlFlowNode = namedtuple('ControlFlowNode', @@ -132,11 +134,15 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, * super().__init__(label, ast_node, line_number=line_number, path=path) self.left_hand_side = left_hand_side self.right_hand_side_variables = right_hand_side_variables + # Only set True in assignment_call_node() + self.blackbox = False def __repr__(self): output_string = super().__repr__() output_string += '\n' - return ''.join((output_string, 'left_hand_side:\t', str(self.left_hand_side), '\n', 'right_hand_side_variables:\t', str(self.right_hand_side_variables))) + return ''.join((output_string, + 'left_hand_side:\t', str(self.left_hand_side), '\n', + 'right_hand_side_variables:\t', str(self.right_hand_side_variables))) class RestoreNode(AssignmentNode): @@ -199,8 +205,9 @@ def __str__(self): class CFG(): - def __init__(self, nodes): + def __init__(self, nodes, blackbox_assignments): self.nodes = nodes + self.blackbox_assignments = blackbox_assignments def __repr__(self): output = '' @@ -522,6 +529,10 @@ def assignment_call_node(self, left_hand_label, ast_node): call_label = call.label call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) + if call in self.blackbox_calls: + self.blackbox_assignments.add(call_assignment) + call_assignment.blackbox = True + self.nodes.append(call_assignment) self.undecided = False @@ -586,18 +597,27 @@ def visit_For(self, node): for_node = self.append_node(Node("for " + target_label.result + " in " + iterator_label.result + ':', node, line_number=node.lineno, path=self.filenames[-1])) - - if isinstance(node.iter, ast.Call) and get_call_names_as_string(node.iter.func) in self.function_names: last_node = self.visit(node.iter) last_node.connect(for_node) - return self.loop_node_skeleton(for_node, node) def visit_Expr(self, node): return self.visit(node.value) + def add_blackbox_call(self, node): + label = LabelVisitor() + label.visit(node) + + blackbox_call = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + if not self.undecided: + self.nodes.append(blackbox_call) + self.blackbox_calls.add(blackbox_call) + self.undecided = False + + return blackbox_call + def add_builtin(self, node): label = LabelVisitor() label.visit(node) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 57186819..473b6b4f 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -31,6 +31,8 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') @@ -43,6 +45,8 @@ def __init__(self, node, project_modules, local_modules, self.project_modules = project_modules self.local_modules = local_modules self.filenames = [filename] + self.blackbox_assignments = set() + self.blackbox_calls = set() self.nodes = list() self.function_index = 0 self.undecided = False @@ -50,6 +54,7 @@ def __init__(self, node, project_modules, local_modules, self.function_return_stack = list() self.module_definitions_stack = list() + # Are we already in a module? if module_definitions: self.init_function_cfg(node, module_definitions) else: @@ -371,6 +376,10 @@ def visit_Call(self, node): else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') + else: + # Mark it as a blackbox if we don't have the definition + return self.add_blackbox_call(node) + return self.add_builtin(node) def add_class(self, call_node, def_node): @@ -641,4 +650,4 @@ def interprocedural(node, project_modules, local_modules, filename, project_modules, local_modules, filename, module_definitions) - return CFG(visitor.nodes) + return CFG(visitor.nodes, visitor.blackbox_assignments) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 06e8a1d3..385c68ce 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -9,10 +9,12 @@ from .vars_visitor import VarsVisitor from .vulnerability_log import ( SanitisedVulnerability, + UnknownVulnerability, Vulnerability, VulnerabilityLog ) - +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') @@ -194,7 +196,7 @@ def find_sanitiser_nodes(sanitiser, sanitisers_in_file): yield sanitiser_tuple.cfg_node -def is_sanitized(sink, sanitiser_dict, lattice): +def is_sanitised(sink, sanitiser_dict, lattice): """Check if sink is sanitised by any santiser in the sanitiser_dict. Args: @@ -215,13 +217,30 @@ class SinkArgsError(Exception): pass +def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): + """Check if vulnerability is unknown seeing if a blackbox assignment is in trimmed_reassignment_nodes. + + Args: + trimmed_reassignment_nodes(list[AssignmentNode]): list of the reassignment nodes leading to the vulnerability. + blackbox_assignments(list[AssignmentNode]): list of blackbox assignments. + + Returns: + AssignmentNode or None + """ + for blackbox_assignment in blackbox_assignments: + for node in trimmed_reassignment_nodes: + if node == blackbox_assignment: + return blackbox_assignment + return None + + def get_sink_args(cfg_node): vv = VarsVisitor() vv.visit(cfg_node.ast_node) return vv.result -def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in): +def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, blackbox_assignments): """Get vulnerability between source and sink if it exists. Uses triggers to find sanitisers. @@ -252,16 +271,16 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in): if sink_args and node.left_hand_side in sink_args: secondary_node_in_sink_args = node - trimmed_nodes = list() - if secondary_node_in_sink_args and trim_reassigned_in: - trimmed_nodes.append(secondary_node_in_sink_args) + trimmed_reassignment_nodes = list() + if secondary_node_in_sink_args: + trimmed_reassignment_nodes.append(secondary_node_in_sink_args) node_in_the_vulnerability_chain = secondary_node_in_sink_args # Here is where we do backwards slicing to traceback which nodes led to the vulnerability for secondary in reversed(source.secondary_nodes): if lattice.in_constraint(secondary, sink.cfg_node): if secondary.left_hand_side in node_in_the_vulnerability_chain.right_hand_side_variables: node_in_the_vulnerability_chain = secondary - trimmed_nodes.insert(0, node_in_the_vulnerability_chain) + trimmed_reassignment_nodes.insert(0, node_in_the_vulnerability_chain) source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None @@ -271,17 +290,24 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in): if trigger_node_in_sink and lhs_in_sink_args: source_trigger_word = source.trigger_word sink_trigger_word = sink.trigger_word - sink_is_sanitised = is_sanitized(sink, + sink_is_sanitised = is_sanitised(sink, triggers.sanitiser_dict, lattice) + blackbox_assignment_in_chain = is_unknown(trimmed_reassignment_nodes, + blackbox_assignments) reassignment_nodes = source.secondary_nodes - if trimmed_nodes: - reassignment_nodes = trimmed_nodes + if trim_reassigned_in: + reassignment_nodes = trimmed_reassignment_nodes if sink_is_sanitised: return SanitisedVulnerability(source.cfg_node, source_trigger_word, sink.cfg_node, sink_trigger_word, sink.sanitisers, reassignment_nodes) + elif blackbox_assignment_in_chain: + return UnknownVulnerability(source.cfg_node, source_trigger_word, + sink.cfg_node, sink_trigger_word, + blackbox_assignment_in_chain, + reassignment_nodes) else: return Vulnerability(source.cfg_node, source_trigger_word, sink.cfg_node, sink_trigger_word, @@ -300,7 +326,12 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) for sink in triggers.sinks: for source in triggers.sources: - vulnerability = get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in) + vulnerability = get_vulnerability(source, + sink, + triggers, + lattice, + trim_reassigned_in, + cfg.blackbox_assignments) if vulnerability: vulnerability_log.append(vulnerability) diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index b2e00859..81b788e2 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -30,18 +30,18 @@ def print_report(self): class Reassigned(): - def __init__(self, reassignment_nodes): - self.reassignment_nodes = reassignment_nodes + def __init__(self, secondary_nodes): + self.secondary_nodes = secondary_nodes def __str__(self): - reassignment = '' - if self.reassignment_nodes: - reassignment += '\nReassigned in: \n\t' - reassignment += '\n\t'.join([ + secondary = '' + if self.secondary_nodes: + secondary += '\nReassigned in: \n\t' + secondary += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + - node.label for node in self.reassignment_nodes]) - return reassignment + node.label for node in self.secondary_nodes]) + return secondary class Vulnerability(): @@ -49,26 +49,26 @@ class Vulnerability(): the sink and the sinks trigger word.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, reassignment_nodes): + sink, sink_trigger_word, secondary_nodes): """Set source and sink information.""" self.source = source self.source_trigger_word = source_trigger_word self.sink = sink self.sink_trigger_word = sink_trigger_word - self.reassignment_nodes = reassignment_nodes + self.secondary_nodes = secondary_nodes self.__remove_sink_from_secondary_nodes() def __remove_sink_from_secondary_nodes(self): - if self.reassignment_nodes: + if self.secondary_nodes: try: - self.reassignment_nodes.remove(self.sink) + self.secondary_nodes.remove(self.sink) except ValueError: pass def __str__(self): """Pretty printing of a vulnerability.""" - reassigned_str = Reassigned(self.reassignment_nodes) + reassigned_str = Reassigned(self.secondary_nodes) return ('File: {}\n > User input at line {}, trigger word "{}":' ' \n\t{}{}\nFile: {}\n > reaches line {}, trigger word' ' "{}": \n\t{}'.format( @@ -84,10 +84,10 @@ class SanitisedVulnerability(Vulnerability): Also containing the sanitiser.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, sanitiser, reassignment_nodes): + sink, sink_trigger_word, sanitiser, secondary_nodes): """Set source, sink and sanitiser information.""" super().__init__(source, source_trigger_word, - sink, sink_trigger_word, reassignment_nodes) + sink, sink_trigger_word, secondary_nodes) self.sanitiser = sanitiser def __str__(self): @@ -96,3 +96,21 @@ def __str__(self): return super_str + ('\nThis vulnerability is potentially sanitised by:' ' {}'.format(self.sanitiser)) + +class UnknownVulnerability(Vulnerability): + """An unknown vulnerability containing the source and the sources + trigger word, the sink and the sinks trigger word. + Also containing the blackbox assignment.""" + + def __init__(self, source, source_trigger_word, + sink, sink_trigger_word, blackbox_assignment, secondary_nodes): + """Set source, sink and blackbox assignment information.""" + super().__init__(source, source_trigger_word, + sink, sink_trigger_word, secondary_nodes) + self.blackbox_assignment = blackbox_assignment + + def __str__(self): + """Pretty printing of a vulnerability.""" + super_str = super().__str__() + return super_str + ('\nThis vulnerability is unknown due to:' + ' {}'.format(self.blackbox_assignment)) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 224324a0..540fed1a 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -46,9 +46,9 @@ def test_no_false_positive_absolute_from_file_command_injection_3(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) # This fails due to a false positive in get_vulnerability - # def test_absolute_from_file_does_not_exist(self): - # vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py') - # self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + def test_absolute_from_file_does_not_exist(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) def test_find_vulnerabilities_import_file_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 47483e35..4aab452f 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -103,7 +103,7 @@ def test_build_sanitiser_node_dict(self): self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[2]) - def test_is_sanitized_false(self): + def test_is_sanitised_false(self): cfg_node_1 = Node('Not sanitising at all', None, line_number=None, path=None) cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] @@ -114,10 +114,10 @@ def test_is_sanitized_false(self): constraint_table[cfg_node_1] = 0 constraint_table[cfg_node_2] = 0 - result = vulnerabilities.is_sanitized(sinks_in_file[0], sanitiser_dict, lattice) + result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) self.assertEqual(result, False) - def test_is_sanitized_true(self): + def test_is_sanitised_true(self): cfg_node_1 = Node('Awesome sanitiser', None, line_number=None, path=None) cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] @@ -127,7 +127,7 @@ def test_is_sanitized_true(self): lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) constraint_table[cfg_node_2] = 0b1 - result = vulnerabilities.is_sanitized(sinks_in_file[0], sanitiser_dict, lattice) + result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) self.assertEqual(result, True) def test_find_vulnerabilities_no_vuln(self): From f3b40e1633b492648905be461a17f2ef6bf2cc12 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Jun 2017 17:13:29 -0400 Subject: [PATCH 049/541] [tests]fix one test --- tests/vulnerabilities_across_files_test.py | 28 +++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 540fed1a..14a4758a 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -11,6 +11,8 @@ from pyt.lattice import Lattice from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class EngineTest(BaseTestCase): @@ -45,10 +47,34 @@ def test_no_false_positive_absolute_from_file_command_injection_3(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + def string_compare_alpha(self, output, expected_string): + return [char for char in output if char.isalpha()] \ + == \ + [char for char in expected_string if char.isalpha()] + # This fails due to a false positive in get_vulnerability def test_absolute_from_file_does_not_exist(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + > User input at line 12, trigger word "get(": + param = request.args.get('suggestion') + Reassigned in: + File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + > Line 15: foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + > Line 16: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + > Line 17: hey = command + File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + > reaches line 18, trigger word "subprocess.call(": + subprocess.call(hey,shell=True) + This vulnerability is unknown due to: Label: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_find_vulnerabilities_import_file_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') From 5d25f422464a5d65addbb8a25ca1b97a0a7f9241 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 14:01:25 -0400 Subject: [PATCH 050/541] add hardcoded not blackboxes --- pyt/interprocedural_cfg.py | 28 ++++++++++++++++++++++++++-- pyt/vulnerabilities.py | 3 ++- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 473b6b4f..bb9656c3 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -36,6 +36,26 @@ SavedVariable = namedtuple('SavedVariable', 'LHS RHS') +NOT_A_BLACKBOX = set(['Flask', + 'run', + 'get', + 'replace', + 'read', + 'set_cookie', + 'make_response', + 'SQLAlchemy', + 'Column', + 'execute', + 'sessionmaker', + 'Session', + 'filter', + 'execute', + 'call', + 'render_template', + 'redirect', + 'url_for', + 'flash', + 'jsonify']) class InterproceduralVisitor(Visitor): @@ -367,6 +387,10 @@ def visit_Call(self, node): else: definition = local_definitions.get_definition(_id) + logger.debug("_id is %s", _id) + # "request.args.get" -> "get" + last_attribute = _id.rpartition('.')[-1] + if definition: if isinstance(definition.node, ast.ClassDef): self.add_builtin(node) @@ -376,8 +400,8 @@ def visit_Call(self, node): else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') - else: - # Mark it as a blackbox if we don't have the definition + + elif last_attribute not in NOT_A_BLACKBOX: return self.add_blackbox_call(node) return self.add_builtin(node) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 385c68ce..3e86ef07 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -350,7 +350,8 @@ def find_vulnerabilities(cfg_list, analysis_type, A VulnerabilityLog with found vulnerabilities. """ definitions = parse(trigger_word_file) - + logger.debug("definitions.sources is %s", definitions.sources) + logger.debug("definitions.sinks is %s", definitions.sinks) vulnerability_log = VulnerabilityLog() for cfg in cfg_list: From cc4feeab65869e7ae0ae18e7bf7775afae4bb9f3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 14:42:32 -0400 Subject: [PATCH 051/541] [tests]rename blackbox test --- ..._not_exist.py => blackbox_library_call.py} | 0 tests/vulnerabilities_across_files_test.py | 19 +++++++------------ 2 files changed, 7 insertions(+), 12 deletions(-) rename example/vulnerable_code_across_files/{absolute_from_file_does_not_exist.py => blackbox_library_call.py} (100%) diff --git a/example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py b/example/vulnerable_code_across_files/blackbox_library_call.py similarity index 100% rename from example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py rename to example/vulnerable_code_across_files/blackbox_library_call.py diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 14a4758a..e46286bc 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -53,23 +53,23 @@ def string_compare_alpha(self, output, expected_string): [char for char in expected_string if char.isalpha()] # This fails due to a false positive in get_vulnerability - def test_absolute_from_file_does_not_exist(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py') + def test_blackbox_library_call(self): + vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + File: example/vulnerable_code_across_files/blackbox_library_call.py > User input at line 12, trigger word "get(": param = request.args.get('suggestion') Reassigned in: - File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 15: foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') - File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 16: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') - File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 17: hey = command - File: example/vulnerable_code_across_files/absolute_from_file_does_not_exist.py + File: example/vulnerable_code_across_files/blackbox_library_call.py > reaches line 18, trigger word "subprocess.call(": subprocess.call(hey,shell=True) This vulnerability is unknown due to: Label: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') @@ -88,8 +88,3 @@ def test_find_vulnerabilities_import_file_command_injection_2(self): def test_no_false_positive_import_file_command_injection_3(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) - - # This fails due to a false positive in get_vulnerability - # def test_import_file_does_not_exist(self): - # vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_does_not_exist.py') - # self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) From b4c806cab6fccddf2c721d4e41204f90d838a55c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 14:47:37 -0400 Subject: [PATCH 052/541] Delete blank lines --- pyt/interprocedural_cfg.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index bb9656c3..ce7aec08 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -390,7 +390,6 @@ def visit_Call(self, node): logger.debug("_id is %s", _id) # "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] - if definition: if isinstance(definition.node, ast.ClassDef): self.add_builtin(node) @@ -400,7 +399,6 @@ def visit_Call(self, node): else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') - elif last_attribute not in NOT_A_BLACKBOX: return self.add_blackbox_call(node) From 8831970c5b3f5651bdcc7fa1a3d96ef8c4b7bfc9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 14:59:13 -0400 Subject: [PATCH 053/541] [rename] secondary nodes to reassignment_nodes --- pyt/vulnerability_log.py | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index 81b788e2..f55fc3c1 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -30,17 +30,17 @@ def print_report(self): class Reassigned(): - def __init__(self, secondary_nodes): - self.secondary_nodes = secondary_nodes + def __init__(self, reassignment_nodes): + self.reassignment_nodes = reassignment_nodes def __str__(self): secondary = '' - if self.secondary_nodes: + if self.reassignment_nodes: secondary += '\nReassigned in: \n\t' secondary += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + - node.label for node in self.secondary_nodes]) + node.label for node in self.reassignment_nodes]) return secondary @@ -49,26 +49,26 @@ class Vulnerability(): the sink and the sinks trigger word.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, secondary_nodes): + sink, sink_trigger_word, reassignment_nodes): """Set source and sink information.""" self.source = source self.source_trigger_word = source_trigger_word self.sink = sink self.sink_trigger_word = sink_trigger_word - self.secondary_nodes = secondary_nodes + self.reassignment_nodes = reassignment_nodes self.__remove_sink_from_secondary_nodes() def __remove_sink_from_secondary_nodes(self): - if self.secondary_nodes: + if self.reassignment_nodes: try: - self.secondary_nodes.remove(self.sink) + self.reassignment_nodes.remove(self.sink) except ValueError: pass def __str__(self): """Pretty printing of a vulnerability.""" - reassigned_str = Reassigned(self.secondary_nodes) + reassigned_str = Reassigned(self.reassignment_nodes) return ('File: {}\n > User input at line {}, trigger word "{}":' ' \n\t{}{}\nFile: {}\n > reaches line {}, trigger word' ' "{}": \n\t{}'.format( @@ -84,10 +84,10 @@ class SanitisedVulnerability(Vulnerability): Also containing the sanitiser.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, sanitiser, secondary_nodes): + sink, sink_trigger_word, sanitiser, reassignment_nodes): """Set source, sink and sanitiser information.""" super().__init__(source, source_trigger_word, - sink, sink_trigger_word, secondary_nodes) + sink, sink_trigger_word, reassignment_nodes) self.sanitiser = sanitiser def __str__(self): @@ -103,10 +103,10 @@ class UnknownVulnerability(Vulnerability): Also containing the blackbox assignment.""" def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, blackbox_assignment, secondary_nodes): + sink, sink_trigger_word, blackbox_assignment, reassignment_nodes): """Set source, sink and blackbox assignment information.""" super().__init__(source, source_trigger_word, - sink, sink_trigger_word, secondary_nodes) + sink, sink_trigger_word, reassignment_nodes) self.blackbox_assignment = blackbox_assignment def __str__(self): From 375223cdbc9f991bb62f4f7297afa5c2c6d10652 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:00:41 -0400 Subject: [PATCH 054/541] [rename] secondary to reassignment --- pyt/vulnerability_log.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_log.py index f55fc3c1..d74fd653 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_log.py @@ -34,14 +34,14 @@ def __init__(self, reassignment_nodes): self.reassignment_nodes = reassignment_nodes def __str__(self): - secondary = '' + reassignment = '' if self.reassignment_nodes: - secondary += '\nReassigned in: \n\t' - secondary += '\n\t'.join([ + reassignment += '\nReassigned in: \n\t' + reassignment += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + node.label for node in self.reassignment_nodes]) - return secondary + return reassignment class Vulnerability(): From c73c170e4040c108033f9e0696751a31e96da37e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:03:44 -0400 Subject: [PATCH 055/541] [refactor] move string_compare_alpha to BaseTestCase --- tests/base_test_case.py | 5 +++++ tests/vulnerabilities_across_files_test.py | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index db2c5c46..feb706b2 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -64,3 +64,8 @@ def cfg_create_from_file(self, filename, project_modules=list(), local_modules=l project_definitions.clear() tree = generate_ast(filename) self.cfg = interprocedural(tree, project_modules, local_modules, filename) + + def string_compare_alpha(self, output, expected_string): + return [char for char in output if char.isalpha()] \ + == \ + [char for char in expected_string if char.isalpha()] diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index e46286bc..40e8612f 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -47,12 +47,6 @@ def test_no_false_positive_absolute_from_file_command_injection_3(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) - def string_compare_alpha(self, output, expected_string): - return [char for char in output if char.isalpha()] \ - == \ - [char for char in expected_string if char.isalpha()] - - # This fails due to a false positive in get_vulnerability def test_blackbox_library_call(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) From 069473e63fbc826bb562a2c65ecad08486d3721e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:36:32 -0400 Subject: [PATCH 056/541] Add command line flag for python 2 --- pyt/__main__.py | 5 ++++- pyt/ast_helper.py | 18 ++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 2c198b36..8f3f67a5 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -70,6 +70,9 @@ parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str) +parser.add_argument('-py2', '--python-2', + help='Turns on Python 2 mode,' + + ' needed when target file(s) are written in Python 2.', type=str) parser.add_argument('-l', '--log-level', help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) @@ -201,7 +204,7 @@ def main(): project_modules = get_modules(directory) local_modules = get_directory_modules(directory) - tree = generate_ast(path) + tree = generate_ast(path, python_2=args.python_2) cfg_list = list() diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 6c5e07cb..b5d74518 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -7,7 +7,7 @@ BLACK_LISTED_CALL_NAMES = ['self'] recursive = False - +python_2_mode = False def convert_to_3(path): """Convert python 2 file to python 3.""" @@ -20,8 +20,17 @@ def convert_to_3(path): exit(1) -def generate_ast(path): - """Generate an Abstract Syntax Tree using the ast module.""" +def generate_ast(path, python_2=False): + """Generate an Abstract Syntax Tree using the ast module. + + Args: + path(str): The path to the file e.g. example/foo/bar.py + python_2(bool): Determines whether or not to call 2to3. + """ + # If set, it stays set. + if python_2: + python_2_mode = True + if os.path.isfile(path): with open(path, 'r') as f: try: @@ -29,7 +38,8 @@ def generate_ast(path): except SyntaxError: global recursive if not recursive: - convert_to_3(path) + if not python_2_mode: + convert_to_3(path) recursive = True return generate_ast(path) else: From b70d442b195f30d6b979a8814b38bbac20753a2d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:40:59 -0400 Subject: [PATCH 057/541] Added [WARNING, EXPERIMENTAL] to the flag --- pyt/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 8f3f67a5..fc1f3409 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -71,8 +71,8 @@ parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str) parser.add_argument('-py2', '--python-2', - help='Turns on Python 2 mode,' + - ' needed when target file(s) are written in Python 2.', type=str) + help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + + ' needed when target file(s) are written in Python 2.', action='store_true') parser.add_argument('-l', '--log-level', help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) From b8ca0ca100cb9d72b48bec2abc4eff9589ef3735 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:49:46 -0400 Subject: [PATCH 058/541] [pep8] Add blank line --- pyt/ast_helper.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index b5d74518..97a9b6a7 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -3,12 +3,14 @@ import ast import os import subprocess - +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') BLACK_LISTED_CALL_NAMES = ['self'] recursive = False python_2_mode = False + def convert_to_3(path): """Convert python 2 file to python 3.""" try: @@ -31,6 +33,7 @@ def generate_ast(path, python_2=False): if python_2: python_2_mode = True + logger.debug("So python_2_mode is %s", python_2_mode) if os.path.isfile(path): with open(path, 'r') as f: try: From d9392cf271392c7d928906550ecd84b8b76eb219 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:53:23 -0400 Subject: [PATCH 059/541] Mark global as global --- pyt/ast_helper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 97a9b6a7..82619bbc 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -30,9 +30,10 @@ def generate_ast(path, python_2=False): python_2(bool): Determines whether or not to call 2to3. """ # If set, it stays set. + global python_2_mode if python_2: python_2_mode = True - + logger.debug("So python_2_mode is %s", python_2_mode) if os.path.isfile(path): with open(path, 'r') as f: From d02b0da53cc3c7b6ff6c5dd1c65a34ada88127a7 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Jun 2017 15:55:11 -0400 Subject: [PATCH 060/541] [pep8] Remove blank line, beginning to hate codeclimate --- pyt/ast_helper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 82619bbc..7b5a769d 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -33,7 +33,6 @@ def generate_ast(path, python_2=False): global python_2_mode if python_2: python_2_mode = True - logger.debug("So python_2_mode is %s", python_2_mode) if os.path.isfile(path): with open(path, 'r') as f: From f4ca198d9aeb54c02f8990762544d458e590868d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 8 Jun 2017 15:34:45 -0400 Subject: [PATCH 061/541] [cleanup] FlaskAdaptor code --- pyt/__main__.py | 11 +- pyt/flask_adaptor.py | 101 ++++++++++-------- .../flask_trigger_words.pyt | 1 + tests/flask_adaptor_test.py | 10 +- 4 files changed, 71 insertions(+), 52 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 2c198b36..a5103c9a 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -205,13 +205,16 @@ def main(): cfg_list = list() - # project_modules = [p for p in project_modules if 'sqli.py' in p[1]] if args.intraprocedural_analysis: intraprocedural(project_modules, cfg_list) else: - cfg_list.append(interprocedural(tree, project_modules, local_modules, - path)) - adaptor_type = FlaskAdaptor(cfg_list, project_modules, local_modules) + interprocedural_cfg = interprocedural(tree, + project_modules, + local_modules, + path) + cfg_list.append(interprocedural_cfg) + # Add all the route functions to the cfg_list + FlaskAdaptor(cfg_list, project_modules, local_modules) initialize_constraint_table(cfg_list) diff --git a/pyt/flask_adaptor.py b/pyt/flask_adaptor.py index fe05587d..e532ea57 100644 --- a/pyt/flask_adaptor.py +++ b/pyt/flask_adaptor.py @@ -6,64 +6,75 @@ from .interprocedural_cfg import interprocedural from .module_definitions import project_definitions - class FlaskAdaptor(FrameworkAdaptor): - """The flask adaptor class manipulates the CFG to adapt to flask applications.""" - - def get_last(self, iterator): - """Get last element of iterator.""" - item = None - for item in iterator: - pass - return item - - def is_flask_route_function(self, ast_node): - """Check whether function uses a decorator.""" - for decorator in ast_node.decorator_list: - if isinstance(decorator, ast.Call): - if self.get_last(get_call_names(decorator.func)) == 'route': - return True - return False - - def get_cfg(self, definition): + """The Flask adaptor class manipulates the CFG to adapt to Flask applications.""" + + def get_func_cfg_with_tainted_args(self, definition): """Build a function cfg and return it.""" - cfg = interprocedural(definition.node, self.project_modules, - self.local_modules, definition.path, - definition.module_definitions) + func_cfg = interprocedural(definition.node, self.project_modules, + self.local_modules, definition.path, + definition.module_definitions) args = Arguments(definition.node.args) - if args: - definition_lineno = definition.node.lineno + function_entry_node = func_cfg.nodes[0] + function_entry_node.outgoing = [] + first_node_after_args = func_cfg.nodes[1] + first_node_after_args.ingoing = [] - cfg.nodes[0].outgoing = [] - cfg.nodes[1].ingoing = [] + # We're just gonna give all the tainted args the lineno of the def + definition_lineno = definition.node.lineno - for i, argument in enumerate(args, 1): - taint = TaintedNode(argument, argument, None, [], line_number=definition_lineno, path=definition.path) - previous_node = cfg.nodes[0] - previous_node.connect(taint) - cfg.nodes.insert(1, taint) + # Taint all the arguments + for arg in args: + tainted_node = TaintedNode(arg, arg, + None, [], + line_number=definition_lineno, + path=definition.path) + function_entry_node.connect(tainted_node) + # 1 and not 0 for Entry Node to remain first in the list + func_cfg.nodes.insert(1, tainted_node) - last_inserted = cfg.nodes[i] - after_last = cfg.nodes[i+1] - last_inserted.connect(after_last) + first_arg = func_cfg.nodes[len(args)] + first_arg.connect(first_node_after_args) - return cfg + return func_cfg - def get_func_nodes(self): - """Get all nodes from a function.""" - return [definition for definition in project_definitions.values() if isinstance(definition.node, ast.FunctionDef)] + def find_flask_route_functions(self): + """Find all Flask functions with route decorators. - def find_flask_route_functions(self, cfg): - """Find all flask functions with decorators.""" - for definition in self.get_func_nodes(): - if definition.node and self.is_flask_route_function(definition.node): - yield self.get_cfg(definition) + Yields: + CFG of a Flask function. + """ + for definition in get_func_nodes(): + if definition.node and is_flask_route_function(definition.node): + yield self.get_func_cfg_with_tainted_args(definition) def run(self): """Executed by the super class, everything that needs to be executed goes here.""" function_cfgs = list() - for cfg in self.cfg_list: - function_cfgs.extend(self.find_flask_route_functions(cfg)) + for _ in self.cfg_list: + function_cfgs.extend(self.find_flask_route_functions()) self.cfg_list.extend(function_cfgs) + +def get_func_nodes(): + """Get all function nodes.""" + return [definition for definition in project_definitions.values() \ + if isinstance(definition.node, ast.FunctionDef)] + + +def is_flask_route_function(ast_node): + """Check whether function uses a decorator.""" + for decorator in ast_node.decorator_list: + if isinstance(decorator, ast.Call): + if get_last_of_iterable(get_call_names(decorator.func)) == 'route': + return True + return False + + +def get_last_of_iterable(iterable): + """Get last element of iterable.""" + item = None + for item in iterable: + pass + return item diff --git a/pyt/trigger_definitions/flask_trigger_words.pyt b/pyt/trigger_definitions/flask_trigger_words.pyt index 26e11b03..c5b53976 100644 --- a/pyt/trigger_definitions/flask_trigger_words.pyt +++ b/pyt/trigger_definitions/flask_trigger_words.pyt @@ -12,6 +12,7 @@ sinks: replace( -> escape send_file( -> '..', '..' in execute( +system( filter( subprocess.call( render_template( diff --git a/tests/flask_adaptor_test.py b/tests/flask_adaptor_test.py index 50fef886..14c1ed44 100644 --- a/tests/flask_adaptor_test.py +++ b/tests/flask_adaptor_test.py @@ -1,5 +1,9 @@ from .base_test_case import BaseTestCase -from pyt.flask_adaptor import FlaskAdaptor +from pyt.flask_adaptor import ( + FlaskAdaptor, + get_func_nodes, + is_flask_route_function +) class FlaskEngineTest(BaseTestCase): @@ -10,11 +14,11 @@ def test_find_flask_functions(self): cfg_list = [self.cfg] flask = FlaskAdaptor(cfg_list, list(), list()) - funcs = flask.get_func_nodes() + funcs = get_func_nodes() i = 0 for func in funcs: - if flask.is_flask_route_function(func.node): + if is_flask_route_function(func.node): self.assertEqual(func.node.name, 'flask_function') i = i + 1 # So it is supposed to be 1, because foo is not an app.route From 8e89bf74aa40932e6f7cf1622768d1d366e5f196 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 8 Jun 2017 19:05:48 -0400 Subject: [PATCH 062/541] [refactor] make framework adaptor use template pattern instead of adaptor pattern --- .../tainted_arg_normal_function.py | 20 +++++ pyt/__main__.py | 13 ++- pyt/flask_adaptor.py | 80 ------------------- pyt/framework_adaptor.py | 70 +++++++++++++--- pyt/framework_helper.py | 24 ++++++ tests/flask_adaptor_test.py | 25 ------ tests/framework_helper_test.py | 34 ++++++++ tests/vulnerabilities_across_files_test.py | 5 +- tests/vulnerabilities_test.py | 9 ++- 9 files changed, 157 insertions(+), 123 deletions(-) create mode 100644 example/vulnerable_code/tainted_arg_normal_function.py delete mode 100644 pyt/flask_adaptor.py create mode 100644 pyt/framework_helper.py delete mode 100644 tests/flask_adaptor_test.py create mode 100644 tests/framework_helper_test.py diff --git a/example/vulnerable_code/tainted_arg_normal_function.py b/example/vulnerable_code/tainted_arg_normal_function.py new file mode 100644 index 00000000..9f00cf10 --- /dev/null +++ b/example/vulnerable_code/tainted_arg_normal_function.py @@ -0,0 +1,20 @@ +import os + + +def store_uploaded_file(title, uploaded_file): + """ Stores a temporary uploaded file on disk """ + upload_dir_path = '%s/static/taskManager/uploads' % ( + os.path.dirname(os.path.realpath(__file__))) + if not os.path.exists(upload_dir_path): + os.makedirs(upload_dir_path) + + # A1: Injection (shell) + os.system( + "mv " + + uploaded_file.temporary_file_path() + + " " + + "%s/%s" % + (upload_dir_path, + title)) + + return '/static/taskManager/uploads/%s' % (title) diff --git a/pyt/__main__.py b/pyt/__main__.py index a5103c9a..80961690 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -10,7 +10,8 @@ from .draw import draw_cfgs, draw_lattices from .constraint_table import initialize_constraint_table, print_table from .fixed_point import analyse -from .flask_adaptor import FlaskAdaptor +from .framework_adaptor import FrameworkAdaptor +from .framework_helper import is_flask_route_function, is_function from .github_search import scan_github, set_github_api_token from .interprocedural_cfg import interprocedural from .intraprocedural_cfg import intraprocedural @@ -74,7 +75,7 @@ help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: FLASK(Default) or DJANGO.', + help='Choose an adaptor: Flask(Default) or Every or Pylons.', type=str) parser.add_argument('-db', '--create-database', help='Creates a sql file that can be used to' + @@ -213,8 +214,14 @@ def main(): local_modules, path) cfg_list.append(interprocedural_cfg) + if args.adaptor and args.adaptor.startswith('E'): + framework_route_criteria = is_function + # elif args.adaptor and arg.adaptor.startswith('P'): + # framework_route_criteria = function_without_leading_ + else: + framework_route_criteria = is_flask_route_function # Add all the route functions to the cfg_list - FlaskAdaptor(cfg_list, project_modules, local_modules) + FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) initialize_constraint_table(cfg_list) diff --git a/pyt/flask_adaptor.py b/pyt/flask_adaptor.py deleted file mode 100644 index e532ea57..00000000 --- a/pyt/flask_adaptor.py +++ /dev/null @@ -1,80 +0,0 @@ -"""Adaptor for Flask web applications.""" -import ast - -from .ast_helper import Arguments, get_call_names -from .framework_adaptor import FrameworkAdaptor, TaintedNode -from .interprocedural_cfg import interprocedural -from .module_definitions import project_definitions - -class FlaskAdaptor(FrameworkAdaptor): - """The Flask adaptor class manipulates the CFG to adapt to Flask applications.""" - - def get_func_cfg_with_tainted_args(self, definition): - """Build a function cfg and return it.""" - func_cfg = interprocedural(definition.node, self.project_modules, - self.local_modules, definition.path, - definition.module_definitions) - - args = Arguments(definition.node.args) - if args: - function_entry_node = func_cfg.nodes[0] - function_entry_node.outgoing = [] - first_node_after_args = func_cfg.nodes[1] - first_node_after_args.ingoing = [] - - # We're just gonna give all the tainted args the lineno of the def - definition_lineno = definition.node.lineno - - # Taint all the arguments - for arg in args: - tainted_node = TaintedNode(arg, arg, - None, [], - line_number=definition_lineno, - path=definition.path) - function_entry_node.connect(tainted_node) - # 1 and not 0 for Entry Node to remain first in the list - func_cfg.nodes.insert(1, tainted_node) - - first_arg = func_cfg.nodes[len(args)] - first_arg.connect(first_node_after_args) - - return func_cfg - - def find_flask_route_functions(self): - """Find all Flask functions with route decorators. - - Yields: - CFG of a Flask function. - """ - for definition in get_func_nodes(): - if definition.node and is_flask_route_function(definition.node): - yield self.get_func_cfg_with_tainted_args(definition) - - def run(self): - """Executed by the super class, everything that needs to be executed goes here.""" - function_cfgs = list() - for _ in self.cfg_list: - function_cfgs.extend(self.find_flask_route_functions()) - self.cfg_list.extend(function_cfgs) - -def get_func_nodes(): - """Get all function nodes.""" - return [definition for definition in project_definitions.values() \ - if isinstance(definition.node, ast.FunctionDef)] - - -def is_flask_route_function(ast_node): - """Check whether function uses a decorator.""" - for decorator in ast_node.decorator_list: - if isinstance(decorator, ast.Call): - if get_last_of_iterable(get_call_names(decorator.func)) == 'route': - return True - return False - - -def get_last_of_iterable(iterable): - """Get last element of iterable.""" - item = None - for item in iterable: - pass - return item diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 80535016..40a8691b 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -1,23 +1,75 @@ -"""A framework adaptor is a adaptor used to adapt -the source code to a specific framework.""" -from abc import ABCMeta, abstractmethod +"""A generic framework adaptor that leaves route criteteria to the caller.""" +import ast +from .ast_helper import Arguments from .base_cfg import AssignmentNode +from .interprocedural_cfg import interprocedural +from .module_definitions import project_definitions -class FrameworkAdaptor(metaclass=ABCMeta): - """An engine that should be used as base class - to specify how to find all sources and sinks.""" +class FrameworkAdaptor(): + """An engine that should be uses the template pattern + to specify how to find all sources and sinks in a framework.""" - def __init__(self, cfg_list, project_modules, local_modules): + def __init__(self, cfg_list, project_modules, local_modules, is_route_function): self.cfg_list = cfg_list self.project_modules = project_modules self.local_modules = local_modules + self.is_route_function = is_route_function self.run() - @abstractmethod + def get_func_cfg_with_tainted_args(self, definition): + """Build a function cfg and return it, with all arguments tainted.""" + func_cfg = interprocedural(definition.node, self.project_modules, + self.local_modules, definition.path, + definition.module_definitions) + + args = Arguments(definition.node.args) + if args: + function_entry_node = func_cfg.nodes[0] + function_entry_node.outgoing = [] + first_node_after_args = func_cfg.nodes[1] + first_node_after_args.ingoing = [] + + # We're just gonna give all the tainted args the lineno of the def + definition_lineno = definition.node.lineno + + # Taint all the arguments + for arg in args: + tainted_node = TaintedNode(arg, arg, + None, [], + line_number=definition_lineno, + path=definition.path) + function_entry_node.connect(tainted_node) + # 1 and not 0 for Entry Node to remain first in the list + func_cfg.nodes.insert(1, tainted_node) + + first_arg = func_cfg.nodes[len(args)] + first_arg.connect(first_node_after_args) + + return func_cfg + + def find_route_functions_taint_args(self): + """Find all route functions and taint all of their arguments. + + Yields: + CFG of each route function, with args marked as tainted. + """ + for definition in _get_func_nodes(): + if self.is_route_function(definition.node): + yield self.get_func_cfg_with_tainted_args(definition) + def run(self): - pass + """Run find_route_functions_taint_args on each CFG.""" + function_cfgs = list() + for _ in self.cfg_list: + function_cfgs.extend(self.find_route_functions_taint_args()) + self.cfg_list.extend(function_cfgs) + +def _get_func_nodes(): + """Get all function nodes.""" + return [definition for definition in project_definitions.values() \ + if isinstance(definition.node, ast.FunctionDef)] class TaintedNode(AssignmentNode): diff --git a/pyt/framework_helper.py b/pyt/framework_helper.py new file mode 100644 index 00000000..20dbe186 --- /dev/null +++ b/pyt/framework_helper.py @@ -0,0 +1,24 @@ +"""Provides helper functions that help with determining if a function is a route function.""" +import ast +from .ast_helper import get_call_names + +def is_function(function): + """Check whether function uses a route decorator.""" + return True + + +def is_flask_route_function(ast_node): + """Check whether function uses a route decorator.""" + for decorator in ast_node.decorator_list: + if isinstance(decorator, ast.Call): + if _get_last_of_iterable(get_call_names(decorator.func)) == 'route': + return True + return False + + +def _get_last_of_iterable(iterable): + """Get last element of iterable.""" + item = None + for item in iterable: + pass + return item diff --git a/tests/flask_adaptor_test.py b/tests/flask_adaptor_test.py deleted file mode 100644 index 14c1ed44..00000000 --- a/tests/flask_adaptor_test.py +++ /dev/null @@ -1,25 +0,0 @@ -from .base_test_case import BaseTestCase -from pyt.flask_adaptor import ( - FlaskAdaptor, - get_func_nodes, - is_flask_route_function -) - - -class FlaskEngineTest(BaseTestCase): - def test_find_flask_functions(self): - - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_function.py') - - cfg_list = [self.cfg] - - flask = FlaskAdaptor(cfg_list, list(), list()) - funcs = get_func_nodes() - - i = 0 - for func in funcs: - if is_flask_route_function(func.node): - self.assertEqual(func.node.name, 'flask_function') - i = i + 1 - # So it is supposed to be 1, because foo is not an app.route - self.assertEqual(i, 1) diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py new file mode 100644 index 00000000..13154863 --- /dev/null +++ b/tests/framework_helper_test.py @@ -0,0 +1,34 @@ +from .base_test_case import BaseTestCase +from pyt.framework_adaptor import _get_func_nodes +from pyt.framework_helper import ( + is_flask_route_function, + is_function +) + +class FrameworkEngineTest(BaseTestCase): + def test_find_flask_functions(self): + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_function.py') + + cfg_list = [self.cfg] + funcs = _get_func_nodes() + + i = 0 + for func in funcs: + if is_flask_route_function(func.node): + self.assertEqual(func.node.name, 'flask_function') + i = i + 1 + # So it is supposed to be 1, because foo is not an app.route + self.assertEqual(i, 1) + + def test_find_every_function(self): + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_function.py') + + cfg_list = [self.cfg] + funcs = _get_func_nodes() + + i = 0 + for func in funcs: + if is_function(func.node): + i = i + 1 + # So it is supposed to be 2, because we count all functions + self.assertEqual(len(funcs), 2) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 224324a0..fcf4656d 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -7,7 +7,8 @@ from pyt.base_cfg import Node from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse -from pyt.flask_adaptor import FlaskAdaptor +from pyt.framework_adaptor import FrameworkAdaptor +from pyt.framework_helper import is_flask_route_function from pyt.lattice import Lattice from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -24,7 +25,7 @@ def run_analysis(self, path): cfg_list = [self.cfg] - FlaskAdaptor(cfg_list, [], []) + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 47483e35..94b14325 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -5,7 +5,8 @@ from pyt.base_cfg import Node from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse -from pyt.flask_adaptor import FlaskAdaptor +from pyt.framework_adaptor import FrameworkAdaptor +from pyt.framework_helper import is_flask_route_function from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -67,7 +68,7 @@ def test_find_triggers(self): cfg_list = [self.cfg] - FlaskAdaptor(cfg_list, [], []) + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) XSS1 = cfg_list[1] trigger_words = [('get', [])] @@ -90,7 +91,7 @@ def test_build_sanitiser_node_dict(self): self.cfg_create_from_file('example/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] - FlaskAdaptor(cfg_list, [], []) + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) cfg = cfg_list[1] @@ -156,7 +157,7 @@ def run_analysis(self, path): cfg_list = [self.cfg] - FlaskAdaptor(cfg_list, [], []) + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) From caa306723e9f769f78e38e8272218dfd6a83ac15 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 8 Jun 2017 19:26:19 -0400 Subject: [PATCH 063/541] [framework adaptor] Add Pylons route support with P --- ...=> flask_function_and_normal_functions.py} | 3 +++ pyt/__main__.py | 10 +++++--- pyt/framework_helper.py | 10 +++++++- tests/framework_helper_test.py | 25 +++++++++++++++---- 4 files changed, 39 insertions(+), 9 deletions(-) rename example/example_inputs/{flask_function_and_normal_function.py => flask_function_and_normal_functions.py} (76%) diff --git a/example/example_inputs/flask_function_and_normal_function.py b/example/example_inputs/flask_function_and_normal_functions.py similarity index 76% rename from example/example_inputs/flask_function_and_normal_function.py rename to example/example_inputs/flask_function_and_normal_functions.py index db7b6af3..bdbb783e 100644 --- a/example/example_inputs/flask_function_and_normal_function.py +++ b/example/example_inputs/flask_function_and_normal_functions.py @@ -1,6 +1,9 @@ def foo(): print('h') +def _hidden_foo(): + print('h') + @app.route('/', methods = ['GET']) def flask_function(x): return x diff --git a/pyt/__main__.py b/pyt/__main__.py index 80961690..163af349 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -11,7 +11,11 @@ from .constraint_table import initialize_constraint_table, print_table from .fixed_point import analyse from .framework_adaptor import FrameworkAdaptor -from .framework_helper import is_flask_route_function, is_function +from .framework_helper import ( + is_flask_route_function, + is_function, + is_function_without_leading_ +) from .github_search import scan_github, set_github_api_token from .interprocedural_cfg import interprocedural from .intraprocedural_cfg import intraprocedural @@ -216,8 +220,8 @@ def main(): cfg_list.append(interprocedural_cfg) if args.adaptor and args.adaptor.startswith('E'): framework_route_criteria = is_function - # elif args.adaptor and arg.adaptor.startswith('P'): - # framework_route_criteria = function_without_leading_ + elif args.adaptor and args.adaptor.startswith('P'): + framework_route_criteria = is_function_without_leading_ else: framework_route_criteria = is_flask_route_function # Add all the route functions to the cfg_list diff --git a/pyt/framework_helper.py b/pyt/framework_helper.py index 20dbe186..c35470b4 100644 --- a/pyt/framework_helper.py +++ b/pyt/framework_helper.py @@ -1,9 +1,11 @@ """Provides helper functions that help with determining if a function is a route function.""" import ast + from .ast_helper import get_call_names + def is_function(function): - """Check whether function uses a route decorator.""" + """Always returns true because arg is always a function.""" return True @@ -16,6 +18,12 @@ def is_flask_route_function(ast_node): return False +def is_function_without_leading_(ast_node): + if ast_node.name.startswith('_'): + return False + return True + + def _get_last_of_iterable(iterable): """Get last element of iterable.""" item = None diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py index 13154863..86d2bb1d 100644 --- a/tests/framework_helper_test.py +++ b/tests/framework_helper_test.py @@ -2,12 +2,13 @@ from pyt.framework_adaptor import _get_func_nodes from pyt.framework_helper import ( is_flask_route_function, - is_function + is_function, + is_function_without_leading_ ) class FrameworkEngineTest(BaseTestCase): def test_find_flask_functions(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_function.py') + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -20,8 +21,22 @@ def test_find_flask_functions(self): # So it is supposed to be 1, because foo is not an app.route self.assertEqual(i, 1) + + def test_find_every_function_without_leading_underscore(self): + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + + cfg_list = [self.cfg] + funcs = _get_func_nodes() + + i = 0 + for func in funcs: + if is_function_without_leading_(func.node): + i = i + 1 + # So it is supposed to be 2, because we count all functions without a leading underscore + self.assertEqual(i, 2) + def test_find_every_function(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_function.py') + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -30,5 +45,5 @@ def test_find_every_function(self): for func in funcs: if is_function(func.node): i = i + 1 - # So it is supposed to be 2, because we count all functions - self.assertEqual(len(funcs), 2) + # So it is supposed to be 3, because we count all functions + self.assertEqual(len(funcs), 3) From cbd8d1ea9fbba34c38c06021997d00425f8f8b2f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 8 Jun 2017 20:04:42 -0400 Subject: [PATCH 064/541] [codeclimate] add blank line and remove backslash --- pyt/framework_adaptor.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 40a8691b..4db94413 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -66,9 +66,10 @@ def run(self): function_cfgs.extend(self.find_route_functions_taint_args()) self.cfg_list.extend(function_cfgs) + def _get_func_nodes(): """Get all function nodes.""" - return [definition for definition in project_definitions.values() \ + return [definition for definition in project_definitions.values() if isinstance(definition.node, ast.FunctionDef)] From 30cd4a8442e02ddfe35018f847e2b19a4b162c58 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 9 Jun 2017 13:51:35 -0400 Subject: [PATCH 065/541] [nested function calls]sort of working --- .../nested_function_calls.py | 5 +- .../nested_string_interpolation.py | 10 ++++ example/vulnerable_code/command_injection.py | 4 +- pyt/base_cfg.py | 9 +++- pyt/interprocedural_cfg.py | 23 +++++++++ pyt/label_visitor.py | 1 + pyt/right_hand_side_visitor.py | 3 ++ tests/nested_functions_test.py | 48 ++++++++++++++----- 8 files changed, 87 insertions(+), 16 deletions(-) create mode 100644 example/nested_functions_code/nested_string_interpolation.py diff --git a/example/nested_functions_code/nested_function_calls.py b/example/nested_functions_code/nested_function_calls.py index f03398c0..7221a193 100644 --- a/example/nested_functions_code/nested_function_calls.py +++ b/example/nested_functions_code/nested_function_calls.py @@ -1 +1,4 @@ -abc = print(foo('bar')) +def foo(): + return 'hey' + +abc = print(foo()) diff --git a/example/nested_functions_code/nested_string_interpolation.py b/example/nested_functions_code/nested_string_interpolation.py new file mode 100644 index 00000000..c4077d84 --- /dev/null +++ b/example/nested_functions_code/nested_string_interpolation.py @@ -0,0 +1,10 @@ +"""From django.nV, views.py""" + +name = request.POST.get('name', False) +upload_path = store_uploaded_file(name, request.FILES['file']) + +#A1 - Injection (SQLi) +curs = connection.cursor() +curs.execute( + "insert into taskManager_file ('name','path','project_id') values ('%s','%s',%s)" % + (name, upload_path, project_id)) \ No newline at end of file diff --git a/example/vulnerable_code/command_injection.py b/example/vulnerable_code/command_injection.py index 44c45d92..f13f1fda 100644 --- a/example/vulnerable_code/command_injection.py +++ b/example/vulnerable_code/command_injection.py @@ -13,9 +13,9 @@ def index(): @app.route('/menu', methods=['POST']) def menu(): param = request.form['suggestion'] - command = 'echo ' + param + ' >> ' + 'menu.txt' + # command = 'echo ' + param + ' >> ' + 'menu.txt' - subprocess.call(command, shell=True) + subprocess.call("echo %s >> menu.txt" % (param), shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index c734f93d..fdcfe5a7 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -363,7 +363,14 @@ def visit_NameConstant(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node.__class__.__name__, node, line_number=node.lineno, path=self.filenames[-1])) + logger.debug("label_visitor.result is %s", label_visitor.result) + logger.debug("node.__class__.__name__ is %s", node.__class__.__name__) + logger.debug("node is %s", node) + logger.debug("node.lineno is %s", node.lineno) + logger.debug("self.filenames[-1] is %s", self.filenames[-1]) + # def __init__(self, label, ast_node, *, line_number, path): + + return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) def visit_Raise(self, node): label = LabelVisitor() diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index ce7aec08..72259cb9 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -388,6 +388,28 @@ def visit_Call(self, node): definition = local_definitions.get_definition(_id) logger.debug("_id is %s", _id) + logger.debug("node is %s", node) + logger.debug("dir(node) is %s", dir(node)) + logger.debug("node.func is %s", node.func) + logger.debug("dir(node.func) is %s", dir(node.func)) + logger.debug("node.args is %s", node.args) + logger.debug("dir(node.args) is %s", dir(node.args)) + + # # We can maybe just visit the whole list, let's try each arg first + # for arg in node.args: + # logger.debug("arg is %s", arg) + # # logger.debug("arg.s is %s", arg.s) + # logger.debug("type(arg) is %s", type(arg)) + # logger.debug("dir(arg) is %s", dir(arg)) + # # logger.debug("arg.func is %s", arg.func) + # self.visit(arg) + # # logger.debug("Result of RHS visitor is %s", rhs_visitor.result) + + for arg in node.args: + self.visit(arg) + for keyword in node.keywords: + self.visit(keyword) + # "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] if definition: @@ -400,6 +422,7 @@ def visit_Call(self, node): raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') elif last_attribute not in NOT_A_BLACKBOX: + # Mark the call as a blackbox because we don't have the definition return self.add_blackbox_call(node) return self.add_builtin(node) diff --git a/pyt/label_visitor.py b/pyt/label_visitor.py index f5c25550..341baea8 100644 --- a/pyt/label_visitor.py +++ b/pyt/label_visitor.py @@ -1,3 +1,4 @@ +"""FILL ME IN""" import ast diff --git a/pyt/right_hand_side_visitor.py b/pyt/right_hand_side_visitor.py index 72e1ce97..eb4aabf4 100644 --- a/pyt/right_hand_side_visitor.py +++ b/pyt/right_hand_side_visitor.py @@ -3,6 +3,8 @@ Used to find all variables on a right hand side(RHS) of assignment. """ import ast +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class RHSVisitor(ast.NodeVisitor): @@ -16,6 +18,7 @@ def visit_Name(self, node): self.result.append(node.id) def visit_Call(self, node): + logger.debug("hey i am here after all") if node.args: for arg in node.args: self.visit(arg) diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 07b6cb15..0dbaeff7 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -1,20 +1,44 @@ -# import os.path +import os.path -# from .base_test_case import BaseTestCase -# from pyt.project_handler import get_directory_modules, get_modules_and_packages +from .base_test_case import BaseTestCase +from pyt.project_handler import get_directory_modules, get_modules_and_packages +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') -# class NestedTest(BaseTestCase): - # def test_nested_function_calls(self): +class NestedTest(BaseTestCase): + def test_nested_function_calls(self): - # path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') + path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') - # project_modules = get_modules_and_packages(os.path.dirname(path)) - # local_modules = get_directory_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) - # self.cfg_create_from_file(path, project_modules, local_modules) + self.cfg_create_from_file(path, project_modules, local_modules) - # EXPECTED = ['Not Yet'] + EXPECTED = ['Not Yet'] - # for node, expected_label in zip(self.cfg.nodes, EXPECTED): - # self.assertEqual(node.label, expected_label) + logger.debug("Nodes are:") + for node in self.cfg.nodes: + logger.debug("%s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + def test_nested_string_interpolation(self): + + path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') + + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + + self.cfg_create_from_file(path, project_modules, local_modules) + + EXPECTED = ['Not Yet'] + + logger.debug("Nodes are:") + for node in self.cfg.nodes: + logger.debug("%s", node) + + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) From 0ba7dd2182cd6afa123f2d732aec493a6b479e24 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 19 Jun 2017 12:44:54 -0400 Subject: [PATCH 066/541] just testing on djangonv --- pyt/base_cfg.py | 12 +-- pyt/interprocedural_cfg.py | 168 ++++++++++++++++++++++++--------- tests/nested_functions_test.py | 56 +++++------ 3 files changed, 155 insertions(+), 81 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index fdcfe5a7..14cd668d 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -363,12 +363,12 @@ def visit_NameConstant(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - logger.debug("label_visitor.result is %s", label_visitor.result) - logger.debug("node.__class__.__name__ is %s", node.__class__.__name__) - logger.debug("node is %s", node) - logger.debug("node.lineno is %s", node.lineno) - logger.debug("self.filenames[-1] is %s", self.filenames[-1]) - # def __init__(self, label, ast_node, *, line_number, path): + # logger.debug("label_visitor.result is %s", label_visitor.result) + # logger.debug("node.__class__.__name__ is %s", node.__class__.__name__) + # logger.debug("node is %s", node) + # logger.debug("node.lineno is %s", node.lineno) + # logger.debug("self.filenames[-1] is %s", self.filenames[-1]) + # # def __init__(self, label, ast_node, *, line_number, path): return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 72259cb9..c885595a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -106,6 +106,7 @@ def init_cfg(self, node): entry_node.connect(exit_node) def init_function_cfg(self, node, module_definitions): + logger.debug("Create the CFG for a function") self.module_definitions_stack.append(module_definitions) self.function_names.append(node.name) @@ -223,32 +224,52 @@ def visit_Yield(self, node): path=self.filenames[-1])) def save_local_scope(self, line_number): - """Save the local scope before entering a function call.""" + """Save the local scope before entering a function call. + + Args: + line_number(int): Of the def of the function call about to be entered into. + + Returns: + list of SavedVariable's. + """ saved_variables = list() - for assignment in [node for node in self.nodes - if type(node) == AssignmentNode]: - if isinstance(assignment, RestoreNode): - continue + previous_node = self.nodes[-1] - # above can be optimized with the assignments dict + # Loop through all assignment nodes and save their LHS's + for assignment in [node for node in self.nodes + if type(node) == AssignmentNode]: # type() is used on purpose here save_name = 'save_' + str(self.function_index) + '_' +\ assignment.left_hand_side - previous_node = self.nodes[-1] - r = RestoreNode(save_name + ' = ' + assignment.left_hand_side, - save_name, [assignment.left_hand_side], - line_number=line_number, path=self.filenames[-1]) - saved_scope_node = self.append_node(r) - + # Save LHS saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) + saved_scope_node = RestoreNode(save_name + ' = ' + assignment.left_hand_side, + save_name, + [assignment.left_hand_side], + line_number=line_number, path=self.filenames[-1]) + foo = self.append_node(saved_scope_node) + assert foo == saved_scope_node previous_node.connect(saved_scope_node) + + logger.debug("len(saved_variables) is %s", len(saved_variables)) + logger.debug("saved_variables are %s", saved_variables) + logger.debug("line_number is %s", line_number) return saved_variables - def save_actual_parameters_in_temp(self, args, arguments, line_number): - """Save the actual parameters of a function call.""" + def save_actual_parameters_in_temp(self, call_args, def_args, line_number): + """Save the actual parameters of a function call. + + Args: + call_args: Of the call being made. + def_args: Of the definition being called. + line_number(int): Of the call being made. + + Returns: + parameters(dict): a mapping of parameter to argument??? + """ parameters = dict() - for i, parameter in enumerate(args): - temp_name = 'temp_' + str(self.function_index) + '_' + arguments[i] + for i, parameter in enumerate(call_args): + temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] label_visitor = LabelVisitor() label_visitor.visit(parameter) @@ -264,43 +285,62 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): self.nodes[-1].connect(node) self.nodes.append(node) - parameters[label_visitor.result] = arguments[i] + parameters[label_visitor.result] = def_args[i] return parameters - def create_local_scope_from_actual_parameters(self, args, arguments, + def create_local_scope_from_actual_parameters(self, + call_args, + def_args, line_number): """Create the local scope before entering - the body of a function call.""" + the body of a function call. - for i in range(len(args)): - temp_name = 'temp_' + str(self.function_index) + '_' + arguments[i] - local_name = arguments[i] + Arguments: + call_args: Of the call being made. + def_args: Of the definition being called. + line_number(int): Of the def of the function call about to be entered into. + """ + + for i in range(len(call_args)): + temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] + local_name = def_args[i] + local_scope_node = RestoreNode(local_name + ' = ' + temp_name, + local_name, + [temp_name], + line_number=line_number, + path=self.filenames[-1]) + # Chain the args together, is this intentional? previous_node = self.nodes[-1] - r = RestoreNode(local_name + ' = ' + temp_name, - local_name, [temp_name], - line_number=line_number, - path=self.filenames[-1]) - local_scope_node = self.append_node(r) + foo = self.append_node(local_scope_node) + assert foo == local_scope_node previous_node.connect(local_scope_node) - def restore_saved_local_scope(self, saved_variables, parameters, + def restore_saved_local_scope(self, + saved_variables, + parameters, line_number): """Restore the previously saved variables to their original values. Args: - saved_variables(list[SavedVariable]). + saved_variables(list[SavedVariable]) + parameters(dict): a mapping of parameter to argument??? + line_number(int): Of the def of the function call about to be entered into. + + Returns: + restore_nodes(list[RestoreNode]): A list of the nodes that were restored??? """ restore_nodes = list() for var in saved_variables: if var.RHS in parameters: - restore_nodes.append(RestoreNode(var.RHS + ' = ' + - parameters[var.RHS], - var.RHS, [var.LHS], + restore_nodes.append(RestoreNode(var.RHS + ' = ' + parameters[var.RHS], + var.RHS, + [var.LHS], line_number=line_number, path=self.filenames[-1])) else: restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, - var.RHS, [var.LHS], + var.RHS, + [var.LHS], line_number=line_number, path=self.filenames[-1])) @@ -315,26 +355,45 @@ def restore_saved_local_scope(self, saved_variables, parameters, def return_handler(self, node, function_nodes): """Handle the return from a function during a function call.""" + + logger.debug("IMPORTANT, in return_handler") call_node = None for n in function_nodes: + # Only Return's and Raise's can be of type ConnectToExitNode if isinstance(n, ConnectToExitNode): + # logger.debug("PROCESS node being processed in return_handler is %s", node) + # logger.debug("PROCESS dir(node) being processed in return_handler is %s", dir(node)) + # logger.debug("PROCESS dir(node.func) being processed in return_handler is %s", dir(node.func)) + # logger.debug("PROCESS node being processed in return_handler is %s", node.func.id) + LHS = CALL_IDENTIFIER + 'call_' + str(self.function_index) previous_node = self.nodes[-1] if not call_node: RHS = 'ret_' + get_call_names_as_string(node.func) - r = RestoreNode(LHS + ' = ' + RHS, LHS, [RHS], + r = RestoreNode(LHS + ' = ' + RHS, + LHS, + [RHS], line_number=node.lineno, path=self.filenames[-1]) call_node = self.append_node(r) previous_node.connect(call_node) - else: - # lave rigtig kobling - pass def add_function(self, call_node, definition): + """Processes and adds a user defined function + + Args: + call_node(ast.Call) : The node that calls the definition. + definition(LocalModuleDefinition): Definition of the function being called. + + """ + + logger.debug("call_node is %s", call_node) + logger.debug("type(call_node) is %s", type(call_node)) try: self.function_index += 1 def_node = definition.node + + # FIGURE OUT EVERY LINE OF THIS FUNCTION ESPECIALLY HOW RETURN VALUES WORK saved_variables = self.save_local_scope(def_node.lineno) parameters = self.save_actual_parameters_in_temp(call_node.args, @@ -359,7 +418,9 @@ def add_function(self, call_node, definition): return self.nodes[-1] def get_function_nodes(self, definition): - length = len(self.nodes) + """WTF DO I DO?""" + + length_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) @@ -371,9 +432,10 @@ def get_function_nodes(self, definition): exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) exit_node.connect_predecessors(function_body_connect_statements.last_statements) - self.return_connection_handler(self.nodes[length:], exit_node) + self.return_connection_handler(self.nodes[length_before_visiting_func:], exit_node) - return self.nodes[length:] + # Return the new nodes + return self.nodes[length_before_visiting_func:] def visit_Call(self, node): _id = get_call_names_as_string(node.func) @@ -389,11 +451,11 @@ def visit_Call(self, node): logger.debug("_id is %s", _id) logger.debug("node is %s", node) - logger.debug("dir(node) is %s", dir(node)) + # logger.debug("dir(node) is %s", dir(node)) logger.debug("node.func is %s", node.func) - logger.debug("dir(node.func) is %s", dir(node.func)) + # logger.debug("dir(node.func) is %s", dir(node.func)) logger.debug("node.args is %s", node.args) - logger.debug("dir(node.args) is %s", dir(node.args)) + # logger.debug("dir(node.args) is %s", dir(node.args)) # # We can maybe just visit the whole list, let's try each arg first # for arg in node.args: @@ -405,10 +467,21 @@ def visit_Call(self, node): # self.visit(arg) # # logger.debug("Result of RHS visitor is %s", rhs_visitor.result) - for arg in node.args: - self.visit(arg) - for keyword in node.keywords: - self.visit(keyword) + + + # # maybe if "return_of.." is a restore node we do something special! + # for arg in node.args: + # return_of_visit_arg = self.visit(arg) + # if isinstance(return_of_visit_arg, RestoreNode): + # logger.debug("return_of_visit_arg is %s", return_of_visit_arg) + # logger.debug("return_of_visit_arg.right_hand_side_variables is %s", return_of_visit_arg.right_hand_side_variables) + # logger.debug("type(return_of_visit_arg) is %s", type(return_of_visit_arg)) + # logger.debug("dir(return_of_visit_arg) is %s", dir(return_of_visit_arg)) + + # for keyword in node.keywords: + # return_of_visit_keyword = self.visit(keyword) + # logger.debug("return_of_visit_keyword is %s", return_of_visit_keyword) + # logger.debug("type(return_of_visit_keyword) is %s", type(return_of_visit_keyword)) # "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] @@ -428,6 +501,7 @@ def visit_Call(self, node): return self.add_builtin(node) def add_class(self, call_node, def_node): + """Is this code dead? How is it different from visit_classdef""" label_visitor = LabelVisitor() label_visitor.visit(call_node) diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 0dbaeff7..d7472a9f 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -1,44 +1,44 @@ -import os.path +# import os.path -from .base_test_case import BaseTestCase -from pyt.project_handler import get_directory_modules, get_modules_and_packages -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') +# from .base_test_case import BaseTestCase +# from pyt.project_handler import get_directory_modules, get_modules_and_packages +# from pyt.utils.log import enable_logger, logger +# enable_logger(to_file='./pyt.log') -class NestedTest(BaseTestCase): - def test_nested_function_calls(self): +# class NestedTest(BaseTestCase): +# def test_nested_function_calls(self): - path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') +# path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') - project_modules = get_modules_and_packages(os.path.dirname(path)) - local_modules = get_directory_modules(os.path.dirname(path)) +# project_modules = get_modules_and_packages(os.path.dirname(path)) +# local_modules = get_directory_modules(os.path.dirname(path)) - self.cfg_create_from_file(path, project_modules, local_modules) +# self.cfg_create_from_file(path, project_modules, local_modules) - EXPECTED = ['Not Yet'] +# EXPECTED = ['Not Yet'] - logger.debug("Nodes are:") - for node in self.cfg.nodes: - logger.debug("%s", node) +# logger.debug("Nodes are:") +# for node in self.cfg.nodes: +# logger.debug("%s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): - self.assertEqual(node.label, expected_label) +# for node, expected_label in zip(self.cfg.nodes, EXPECTED): +# self.assertEqual(node.label, expected_label) - def test_nested_string_interpolation(self): +# def test_nested_string_interpolation(self): - path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') +# path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') - project_modules = get_modules_and_packages(os.path.dirname(path)) - local_modules = get_directory_modules(os.path.dirname(path)) +# project_modules = get_modules_and_packages(os.path.dirname(path)) +# local_modules = get_directory_modules(os.path.dirname(path)) - self.cfg_create_from_file(path, project_modules, local_modules) +# self.cfg_create_from_file(path, project_modules, local_modules) - EXPECTED = ['Not Yet'] +# EXPECTED = ['Not Yet'] - logger.debug("Nodes are:") - for node in self.cfg.nodes: - logger.debug("%s", node) +# logger.debug("Nodes are:") +# for node in self.cfg.nodes: +# logger.debug("%s", node) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): - self.assertEqual(node.label, expected_label) +# for node, expected_label in zip(self.cfg.nodes, EXPECTED): +# self.assertEqual(node.label, expected_label) From 063db48e7947674499f4c20cb9b8ba2ce21b3a18 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 19 Jun 2017 12:46:49 -0400 Subject: [PATCH 067/541] [grammar] remove extra the that I left --- pyt/reaching_definitions_base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 6e901c5a..48ed533d 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -16,7 +16,7 @@ def join(self, cfg_node): return constraint_join(cfg_node.ingoing) def arrow(self, JOIN, _id): - """Removes all previous assignments from JOIN that have the same the left hand side. + """Removes all previous assignments from JOIN that have the same left hand side. This represents the arrow id definition from Schwartzbach.""" r = JOIN for node in self.lattice.get_elements(JOIN): From 2c085dff79bf8fc027a9bd5b510a1ce242e62cce Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 19 Jun 2017 12:57:18 -0400 Subject: [PATCH 068/541] [comments] fixed up some comments --- pyt/framework_adaptor.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 4db94413..dd1667f0 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -8,8 +8,9 @@ class FrameworkAdaptor(): - """An engine that should be uses the template pattern - to specify how to find all sources and sinks in a framework.""" + """An engine that uses the template pattern to find all + entry points in a framework and then taints their arguments. + """ def __init__(self, cfg_list, project_modules, local_modules, is_route_function): self.cfg_list = cfg_list @@ -41,7 +42,7 @@ def get_func_cfg_with_tainted_args(self, definition): line_number=definition_lineno, path=definition.path) function_entry_node.connect(tainted_node) - # 1 and not 0 for Entry Node to remain first in the list + # 1 and not 0 so that Entry Node remains first in the list func_cfg.nodes.insert(1, tainted_node) first_arg = func_cfg.nodes[len(args)] From 88665fbca1e19828f1cef4fe5296456f41ed13a7 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 19 Jun 2017 12:59:41 -0400 Subject: [PATCH 069/541] [cleanup] remove logging statements --- pyt/ast_helper.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 7b5a769d..9d1a81cd 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -3,8 +3,7 @@ import ast import os import subprocess -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') + BLACK_LISTED_CALL_NAMES = ['self'] recursive = False @@ -33,7 +32,6 @@ def generate_ast(path, python_2=False): global python_2_mode if python_2: python_2_mode = True - logger.debug("So python_2_mode is %s", python_2_mode) if os.path.isfile(path): with open(path, 'r') as f: try: From 8cdb00c4e04241a82565807b0ff6a6988df001f2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 20 Jun 2017 13:39:41 -0400 Subject: [PATCH 070/541] [comments] added more comments to interprocedural_cfg --- pyt/interprocedural_cfg.py | 126 ++++++++++++++++++------------------- 1 file changed, 61 insertions(+), 65 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index c885595a..ec3e1ee6 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -230,7 +230,7 @@ def save_local_scope(self, line_number): line_number(int): Of the def of the function call about to be entered into. Returns: - list of SavedVariable's. + saved_variables(list[SavedVariable]) """ saved_variables = list() previous_node = self.nodes[-1] @@ -246,9 +246,9 @@ def save_local_scope(self, line_number): saved_scope_node = RestoreNode(save_name + ' = ' + assignment.left_hand_side, save_name, [assignment.left_hand_side], - line_number=line_number, path=self.filenames[-1]) - foo = self.append_node(saved_scope_node) - assert foo == saved_scope_node + line_number=line_number, + path=self.filenames[-1]) + self.append_node(saved_scope_node) previous_node.connect(saved_scope_node) logger.debug("len(saved_variables) is %s", len(saved_variables)) @@ -260,21 +260,25 @@ def save_actual_parameters_in_temp(self, call_args, def_args, line_number): """Save the actual parameters of a function call. Args: - call_args: Of the call being made. - def_args: Of the definition being called. + call_args(list): Of the call being made. + def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. Returns: - parameters(dict): a mapping of parameter to argument??? + parameters(dict): A mapping of call parameter to definition parameter. """ - parameters = dict() - for i, parameter in enumerate(call_args): + parameters_mapping = dict() + logger.debug("[FOR COMMENTS] TYPE OF call_args is %s", type(call_args)) + logger.debug("[FOR COMMENTS] TYPE OF def_args is %s", type(def_args)) + logger.debug("[FOR COMMENTS] def_args is %s", def_args) + + for i, call_arg in enumerate(call_args): temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] label_visitor = LabelVisitor() - label_visitor.visit(parameter) + label_visitor.visit(call_arg) rhs_visitor = RHSVisitor() - rhs_visitor.visit(parameter) + rhs_visitor.visit(call_arg) node = RestoreNode(temp_name + ' = ' + label_visitor.result, temp_name, @@ -285,17 +289,18 @@ def save_actual_parameters_in_temp(self, call_args, def_args, line_number): self.nodes[-1].connect(node) self.nodes.append(node) - parameters[label_visitor.result] = def_args[i] - return parameters + parameters_mapping[label_visitor.result] = def_args[i] + + logger.debug("[FOR COMMENTS] parameters_mapping is %s", parameters_mapping) + return parameters_mapping def create_local_scope_from_actual_parameters(self, call_args, def_args, line_number): - """Create the local scope before entering - the body of a function call. + """Create the local scope before entering the body of a function call. - Arguments: + Args: call_args: Of the call being made. def_args: Of the definition being called. line_number(int): Of the def of the function call about to be entered into. @@ -305,14 +310,13 @@ def create_local_scope_from_actual_parameters(self, temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] local_name = def_args[i] local_scope_node = RestoreNode(local_name + ' = ' + temp_name, - local_name, + local_name, [temp_name], line_number=line_number, path=self.filenames[-1]) - # Chain the args together, is this intentional? + # Chain the local scope nodes together previous_node = self.nodes[-1] - foo = self.append_node(local_scope_node) - assert foo == local_scope_node + self.append_node(local_scope_node) previous_node.connect(local_scope_node) def restore_saved_local_scope(self, @@ -323,15 +327,17 @@ def restore_saved_local_scope(self, Args: saved_variables(list[SavedVariable]) - parameters(dict): a mapping of parameter to argument??? + parameters(dict): A mapping of call parameter to definition parameter. line_number(int): Of the def of the function call about to be entered into. Returns: - restore_nodes(list[RestoreNode]): A list of the nodes that were restored??? + restore_nodes(list[RestoreNode]): A list of the nodes that were restored. """ + logger.debug("[FOR COMMENTS] parameters in restore_saved_local_scope is %s", parameters) restore_nodes = list() for var in saved_variables: - if var.RHS in parameters: + if var.RHS in parameters.keys(): + logger.debug("var.RHS inside of parameters is %s", var.RHS) restore_nodes.append(RestoreNode(var.RHS + ' = ' + parameters[var.RHS], var.RHS, [var.LHS], @@ -344,20 +350,21 @@ def restore_saved_local_scope(self, line_number=line_number, path=self.filenames[-1])) + # Chain the restore nodes for n, successor in zip(restore_nodes, restore_nodes[1:]): n.connect(successor) if restore_nodes: + # Connect the last node to the first restore node self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) - + logger.debug("[FOR COMMENTS] restore_nodes in restore_saved_local_scope is %s", restore_nodes) return restore_nodes def return_handler(self, node, function_nodes): """Handle the return from a function during a function call.""" - logger.debug("IMPORTANT, in return_handler") - call_node = None + return_node = None for n in function_nodes: # Only Return's and Raise's can be of type ConnectToExitNode if isinstance(n, ConnectToExitNode): @@ -368,23 +375,26 @@ def return_handler(self, node, function_nodes): LHS = CALL_IDENTIFIER + 'call_' + str(self.function_index) previous_node = self.nodes[-1] - if not call_node: + # I don't think this handles multiple returns + if not return_node: RHS = 'ret_' + get_call_names_as_string(node.func) - r = RestoreNode(LHS + ' = ' + RHS, - LHS, - [RHS], - line_number=node.lineno, - path=self.filenames[-1]) - call_node = self.append_node(r) - previous_node.connect(call_node) + return_node = RestoreNode(LHS + ' = ' + RHS, + LHS, + [RHS], + line_number=node.lineno, + path=self.filenames[-1]) + self.append_node(return_node) + previous_node.connect(return_node) def add_function(self, call_node, definition): - """Processes and adds a user defined function + """Processes and adds a user defined function. Args: call_node(ast.Call) : The node that calls the definition. definition(LocalModuleDefinition): Definition of the function being called. + Returns: + Last node in self.nodes, probably the return of the function. """ logger.debug("call_node is %s", call_node) @@ -409,18 +419,29 @@ def add_function(self, call_node, definition): self.restore_saved_local_scope(saved_variables, parameters, def_node.lineno) self.return_handler(call_node, function_nodes) self.function_return_stack.pop() + logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) + logger.debug("[FOR COMMENTS] type of last node is %s", type(self.nodes[-1])) except IndexError: error_call = get_call_names_as_string(call_node.func) print('Error: Possible nameclash in "{}".' + ' Call omitted!\n'.format(error_call)) + # logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) + # logger.debug("[FOR COMMENTS] type of last node is %s", type(self.nodes[-1])) + return self.nodes[-1] def get_function_nodes(self, definition): - """WTF DO I DO?""" + """Visits the nodes of a user defined function. - length_before_visiting_func = len(self.nodes) + Args: + definition(LocalModuleDefinition): Definition of the function being added. + + Returns: + the_new_nodes(list[Node]): The nodes added while visiting the function. + """ + len_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) @@ -432,10 +453,10 @@ def get_function_nodes(self, definition): exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) exit_node.connect_predecessors(function_body_connect_statements.last_statements) - self.return_connection_handler(self.nodes[length_before_visiting_func:], exit_node) + the_new_nodes = self.nodes[len_before_visiting_func:] + self.return_connection_handler(the_new_nodes, exit_node) - # Return the new nodes - return self.nodes[length_before_visiting_func:] + return the_new_nodes def visit_Call(self, node): _id = get_call_names_as_string(node.func) @@ -500,35 +521,10 @@ def visit_Call(self, node): return self.add_builtin(node) - def add_class(self, call_node, def_node): - """Is this code dead? How is it different from visit_classdef""" - label_visitor = LabelVisitor() - label_visitor.visit(call_node) - - previous_node = self.nodes[-1] - - entry_node = self.append_node(EntryOrExitNode("Class Entry " + def_node.name)) - - previous_node.connect(entry_node) - - function_body_connect_statements = self.stmt_star_handler(def_node.body) - - entry_node.connect(function_body_connect_statements.first_statement) - - exit_node = self.append_node(EntryOrExitNode("Exit " + def_node.name)) - exit_node.connect_predecessors(function_body_connect_statements.last_statements) - - return Node(label_visitor.result, call_node, - line_number=call_node.lineno, - path=self.filenames[-1]) - def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): """ Returns: The ExitNode that gets attached to the CFG of the class. - - Open Question: - Are there times when the return value doesn't matter? """ module_path = module[1] From 950283b29b50fd572ef7077e036aec6e40bbe191 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 13:19:36 -0400 Subject: [PATCH 071/541] broke everything --- pyt/interprocedural_cfg.py | 167 ++++++++++++++++++++----------------- 1 file changed, 92 insertions(+), 75 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index ec3e1ee6..4fb40644 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -68,7 +68,7 @@ def __init__(self, node, project_modules, local_modules, self.blackbox_assignments = set() self.blackbox_calls = set() self.nodes = list() - self.function_index = 0 + self.function_call_index = 0 self.undecided = False self.function_names = list() self.function_return_stack = list() @@ -224,7 +224,7 @@ def visit_Yield(self, node): path=self.filenames[-1])) def save_local_scope(self, line_number): - """Save the local scope before entering a function call. + """Save the local scope before entering a function call by saving all the LHS's of assignments. Args: line_number(int): Of the def of the function call about to be entered into. @@ -235,10 +235,10 @@ def save_local_scope(self, line_number): saved_variables = list() previous_node = self.nodes[-1] - # Loop through all assignment nodes and save their LHS's + # Make e.g. save_N_LHS = assignment1.LHS for each AssignmentNode for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: # type() is used on purpose here - save_name = 'save_' + str(self.function_index) + '_' +\ + save_name = 'save_' + str(self.function_call_index) + '_' +\ assignment.left_hand_side # Save LHS saved_variables.append(SavedVariable(LHS=save_name, @@ -249,6 +249,7 @@ def save_local_scope(self, line_number): line_number=line_number, path=self.filenames[-1]) self.append_node(saved_scope_node) + # Connect them all to the same Node and not chain them??? previous_node.connect(saved_scope_node) logger.debug("len(saved_variables) is %s", len(saved_variables)) @@ -256,62 +257,64 @@ def save_local_scope(self, line_number): logger.debug("line_number is %s", line_number) return saved_variables - def save_actual_parameters_in_temp(self, call_args, def_args, line_number): - """Save the actual parameters of a function call. + def save_def_args_in_temp(self, call_args, def_args, line_number): + """Save the arguments of the definition being called. Args: - call_args(list): Of the call being made. + call_args(list[ast.Name]): Of the call being made. def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. Returns: - parameters(dict): A mapping of call parameter to definition parameter. + args_mapping(dict): A mapping of call argument to definition argument. """ - parameters_mapping = dict() - logger.debug("[FOR COMMENTS] TYPE OF call_args is %s", type(call_args)) + args_mapping = dict() + logger.debug("[FOR COMMENTS] TYPE OF call_args[0] is %s", type(call_args[0])) logger.debug("[FOR COMMENTS] TYPE OF def_args is %s", type(def_args)) logger.debug("[FOR COMMENTS] def_args is %s", def_args) + # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): - temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] + def_arg_temp_name = 'temp_' + str(self.function_call_index) + '_' + def_args[i] - label_visitor = LabelVisitor() - label_visitor.visit(call_arg) - rhs_visitor = RHSVisitor() - rhs_visitor.visit(call_arg) + call_arg_label_visitor = LabelVisitor() + call_arg_label_visitor.visit(call_arg) + call_arg_rhs_visitor = RHSVisitor() + call_arg_rhs_visitor.visit(call_arg) - node = RestoreNode(temp_name + ' = ' + label_visitor.result, - temp_name, - rhs_visitor.result, + node = RestoreNode(def_arg_temp_name + ' = ' + call_arg_label_visitor.result, + def_arg_temp_name, + call_arg_rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) self.nodes[-1].connect(node) self.nodes.append(node) - parameters_mapping[label_visitor.result] = def_args[i] + args_mapping[call_arg_label_visitor.result] = def_args[i] - logger.debug("[FOR COMMENTS] parameters_mapping is %s", parameters_mapping) - return parameters_mapping + logger.debug("[FOR COMMENTS] args_mapping is %s", args_mapping) + return args_mapping - def create_local_scope_from_actual_parameters(self, - call_args, - def_args, - line_number): + def create_local_scope_from_def_args(self, + call_args, + def_args, + line_number): """Create the local scope before entering the body of a function call. Args: - call_args: Of the call being made. - def_args: Of the definition being called. + call_args(list[ast.Name]): Of the call being made. + def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the def of the function call about to be entered into. """ + # Create e.g. def_arg1 = temp_N_def_arg1 for each argument for i in range(len(call_args)): - temp_name = 'temp_' + str(self.function_index) + '_' + def_args[i] - local_name = def_args[i] - local_scope_node = RestoreNode(local_name + ' = ' + temp_name, - local_name, - [temp_name], + def_arg_local_name = def_args[i] + def_arg_temp_name = 'temp_' + str(self.function_call_index) + '_' + def_args[i] + local_scope_node = RestoreNode(def_arg_local_name + ' = ' + def_arg_temp_name, + def_arg_local_name, + [def_arg_temp_name], line_number=line_number, path=self.filenames[-1]) # Chain the local scope nodes together @@ -321,29 +324,34 @@ def create_local_scope_from_actual_parameters(self, def restore_saved_local_scope(self, saved_variables, - parameters, + args_mapping, line_number): """Restore the previously saved variables to their original values. Args: saved_variables(list[SavedVariable]) - parameters(dict): A mapping of call parameter to definition parameter. + args_mapping(dict): A mapping of call argument to definition argument. line_number(int): Of the def of the function call about to be entered into. Returns: restore_nodes(list[RestoreNode]): A list of the nodes that were restored. """ - logger.debug("[FOR COMMENTS] parameters in restore_saved_local_scope is %s", parameters) + logger.debug("[FOR COMMENTS] args_mapping in restore_saved_local_scope is %s", args_mapping) restore_nodes = list() for var in saved_variables: - if var.RHS in parameters.keys(): - logger.debug("var.RHS inside of parameters is %s", var.RHS) - restore_nodes.append(RestoreNode(var.RHS + ' = ' + parameters[var.RHS], + # Is var.RHS a call argument? + if var.RHS in args_mapping: + logger.debug("var.RHS inside of args_mapping is %s", var.RHS) + # If so, use the corresponding definition argument for the RHS of the label. + logger.debug("[BIRCH] making a '%s = %s' RestoreNode", var.RHS, args_mapping[var.RHS]) + restore_nodes.append(RestoreNode(var.RHS + ' = ' + args_mapping[var.RHS], var.RHS, [var.LHS], line_number=line_number, path=self.filenames[-1])) else: + logger.debug("[2ND BIRCH] making a '%s = %s' RestoreNode", var.RHS, var.LHS) + # Create a node for e.g. foo = save_1_foo restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, var.RHS, [var.LHS], @@ -351,8 +359,8 @@ def restore_saved_local_scope(self, path=self.filenames[-1])) # Chain the restore nodes - for n, successor in zip(restore_nodes, restore_nodes[1:]): - n.connect(successor) + for node, successor in zip(restore_nodes, restore_nodes[1:]): + node.connect(successor) if restore_nodes: # Connect the last node to the first restore node @@ -361,33 +369,42 @@ def restore_saved_local_scope(self, logger.debug("[FOR COMMENTS] restore_nodes in restore_saved_local_scope is %s", restore_nodes) return restore_nodes - def return_handler(self, node, function_nodes): - """Handle the return from a function during a function call.""" + def return_handler(self, call_node, function_nodes): + """Handle the return from a function during a function call. + It doesn't handle multiple returns, at the moment. + + Args: + call_node(ast.Call) : The node that calls the definition. + function_nodes(list[Node]): List of nodes of the function being called. + + Returns: + Last node in self.nodes, probably the return of the function. + """ + logger.debug("IMPORTANT, in return_handler") - return_node = None - for n in function_nodes: + for node in function_nodes: # Only Return's and Raise's can be of type ConnectToExitNode - if isinstance(n, ConnectToExitNode): - # logger.debug("PROCESS node being processed in return_handler is %s", node) - # logger.debug("PROCESS dir(node) being processed in return_handler is %s", dir(node)) - # logger.debug("PROCESS dir(node.func) being processed in return_handler is %s", dir(node.func)) - # logger.debug("PROCESS node being processed in return_handler is %s", node.func.id) - - LHS = CALL_IDENTIFIER + 'call_' + str(self.function_index) + if isinstance(node, ConnectToExitNode): + # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node) + # logger.debug("PROCESS dir(call_node) being processed in return_handler is %s", dir(call_node)) + # logger.debug("PROCESS dir(call_node.func) being processed in return_handler is %s", dir(call_node.func)) + # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node.func.id) + + # Create e.g. ¤call_1 = ret_func_foo RestoreNode + LHS = CALL_IDENTIFIER + 'call_' + str(self.function_call_index) + RHS = 'ret_' + get_call_names_as_string(call_node.func) + return_node = RestoreNode(LHS + ' = ' + RHS, + LHS, + [RHS], + line_number=call_node.lineno, + path=self.filenames[-1]) previous_node = self.nodes[-1] - # I don't think this handles multiple returns - if not return_node: - RHS = 'ret_' + get_call_names_as_string(node.func) - return_node = RestoreNode(LHS + ' = ' + RHS, - LHS, - [RHS], - line_number=node.lineno, - path=self.filenames[-1]) - self.append_node(return_node) - previous_node.connect(return_node) - - def add_function(self, call_node, definition): - """Processes and adds a user defined function. + self.append_node(return_node) + previous_node.connect(return_node) + break + + def process_function(self, call_node, definition): + """Processes a user defined function when it is called. Args: call_node(ast.Call) : The node that calls the definition. @@ -400,23 +417,23 @@ def add_function(self, call_node, definition): logger.debug("call_node is %s", call_node) logger.debug("type(call_node) is %s", type(call_node)) try: - self.function_index += 1 + self.function_call_index += 1 def_node = definition.node # FIGURE OUT EVERY LINE OF THIS FUNCTION ESPECIALLY HOW RETURN VALUES WORK saved_variables = self.save_local_scope(def_node.lineno) - parameters = self.save_actual_parameters_in_temp(call_node.args, - Arguments(def_node.args), - call_node.lineno) + args_mapping = self.save_def_args_in_temp(call_node.args, + Arguments(def_node.args), + call_node.lineno) self.filenames.append(definition.path) - self.create_local_scope_from_actual_parameters(call_node.args, - Arguments(def_node.args), - def_node.lineno) - function_nodes = self.get_function_nodes(definition) + self.create_local_scope_from_def_args(call_node.args, + Arguments(def_node.args), + def_node.lineno) + function_nodes = self.visit_and_get_function_nodes(definition) self.filenames.pop() # Maybe move after restore nodes - self.restore_saved_local_scope(saved_variables, parameters, def_node.lineno) + self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) self.return_handler(call_node, function_nodes) self.function_return_stack.pop() logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) @@ -432,7 +449,7 @@ def add_function(self, call_node, definition): return self.nodes[-1] - def get_function_nodes(self, definition): + def visit_and_get_function_nodes(self, definition): """Visits the nodes of a user defined function. Args: @@ -511,7 +528,7 @@ def visit_Call(self, node): self.add_builtin(node) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False - return self.add_function(node, definition) + return self.process_function(node, definition) else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') From 6800c8a685fa2d7ec716f301bf82f5924b36ab08 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 13:44:22 -0400 Subject: [PATCH 072/541] fixed log statement, it fixed everything --- pyt/interprocedural_cfg.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 4fb40644..2aee9293 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -269,9 +269,9 @@ def save_def_args_in_temp(self, call_args, def_args, line_number): args_mapping(dict): A mapping of call argument to definition argument. """ args_mapping = dict() - logger.debug("[FOR COMMENTS] TYPE OF call_args[0] is %s", type(call_args[0])) - logger.debug("[FOR COMMENTS] TYPE OF def_args is %s", type(def_args)) - logger.debug("[FOR COMMENTS] def_args is %s", def_args) + # logger.debug("[FOR COMMENTS] TYPE OF call_args[0] is %s", type(call_args[0])) + # logger.debug("[FOR COMMENTS] TYPE OF def_args is %s", type(def_args)) + # logger.debug("[FOR COMMENTS] def_args is %s", def_args) # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): From 273531adc5354ad9d5e206f36bf7a73ca5ced678 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 13:48:02 -0400 Subject: [PATCH 073/541] use self.nodes.append instead where better --- pyt/interprocedural_cfg.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 2aee9293..5bc6d9cc 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -248,7 +248,7 @@ def save_local_scope(self, line_number): [assignment.left_hand_side], line_number=line_number, path=self.filenames[-1]) - self.append_node(saved_scope_node) + self.nodes.append(saved_scope_node) # Connect them all to the same Node and not chain them??? previous_node.connect(saved_scope_node) @@ -319,7 +319,7 @@ def create_local_scope_from_def_args(self, path=self.filenames[-1]) # Chain the local scope nodes together previous_node = self.nodes[-1] - self.append_node(local_scope_node) + self.nodes.append(local_scope_node) previous_node.connect(local_scope_node) def restore_saved_local_scope(self, @@ -399,7 +399,7 @@ def return_handler(self, call_node, function_nodes): line_number=call_node.lineno, path=self.filenames[-1]) previous_node = self.nodes[-1] - self.append_node(return_node) + self.nodes.append(return_node) previous_node.connect(return_node) break @@ -560,7 +560,7 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m tree = generate_ast(module_path) # Remember, module[0] is None during e.g. "from . import foo", so we must str() - self.append_node(EntryOrExitNode('Module Entry ' + str(module[0]))) + self.nodes.append(EntryOrExitNode('Module Entry ' + str(module[0]))) self.visit(tree) exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) From cdd562e164f3322ce17579b2a52899c60e9cf416 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 13:57:18 -0400 Subject: [PATCH 074/541] use self.nodes[-1].connect instead where applicable --- pyt/interprocedural_cfg.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 5bc6d9cc..a2ef1e8f 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -318,9 +318,8 @@ def create_local_scope_from_def_args(self, line_number=line_number, path=self.filenames[-1]) # Chain the local scope nodes together - previous_node = self.nodes[-1] + self.nodes[-1].connect(local_scope_node) self.nodes.append(local_scope_node) - previous_node.connect(local_scope_node) def restore_saved_local_scope(self, saved_variables, @@ -365,6 +364,7 @@ def restore_saved_local_scope(self, if restore_nodes: # Connect the last node to the first restore node self.nodes[-1].connect(restore_nodes[0]) + # Why extend instead of append??? self.nodes.extend(restore_nodes) logger.debug("[FOR COMMENTS] restore_nodes in restore_saved_local_scope is %s", restore_nodes) return restore_nodes @@ -398,9 +398,8 @@ def return_handler(self, call_node, function_nodes): [RHS], line_number=call_node.lineno, path=self.filenames[-1]) - previous_node = self.nodes[-1] + self.nodes[-1].connect(return_node) self.nodes.append(return_node) - previous_node.connect(return_node) break def process_function(self, call_node, definition): From 808de961124f33160328de8cd708f5c8cc369b04 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 15:38:56 -0400 Subject: [PATCH 075/541] Added comments to process function --- pyt/interprocedural_cfg.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index a2ef1e8f..3c43edb7 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -235,7 +235,7 @@ def save_local_scope(self, line_number): saved_variables = list() previous_node = self.nodes[-1] - # Make e.g. save_N_LHS = assignment1.LHS for each AssignmentNode + # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: # type() is used on purpose here save_name = 'save_' + str(self.function_call_index) + '_' +\ @@ -404,6 +404,13 @@ def return_handler(self, call_node, function_nodes): def process_function(self, call_node, definition): """Processes a user defined function when it is called. + Increments self.function_call_index each time it is called, we can refer to as N. + Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode. (save_local_scope) + Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. (save_def_args_in_temp) + Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) + Visit and get function nodes. (visit_and_get_function_nodes) + Loop through each save_N_LHS node and create an e.g. foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) + Create e.g. ¤call_1 = ret_func_foo RestoreNode (return_handler) Args: call_node(ast.Call) : The node that calls the definition. From 6da5ecdcb32813cc7e1a37ab443360bb2f25458d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 15:45:16 -0400 Subject: [PATCH 076/541] remove dead return values --- pyt/interprocedural_cfg.py | 8 -------- 1 file changed, 8 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 3c43edb7..d6d6de58 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -331,9 +331,6 @@ def restore_saved_local_scope(self, saved_variables(list[SavedVariable]) args_mapping(dict): A mapping of call argument to definition argument. line_number(int): Of the def of the function call about to be entered into. - - Returns: - restore_nodes(list[RestoreNode]): A list of the nodes that were restored. """ logger.debug("[FOR COMMENTS] args_mapping in restore_saved_local_scope is %s", args_mapping) restore_nodes = list() @@ -367,7 +364,6 @@ def restore_saved_local_scope(self, # Why extend instead of append??? self.nodes.extend(restore_nodes) logger.debug("[FOR COMMENTS] restore_nodes in restore_saved_local_scope is %s", restore_nodes) - return restore_nodes def return_handler(self, call_node, function_nodes): """Handle the return from a function during a function call. @@ -376,9 +372,6 @@ def return_handler(self, call_node, function_nodes): Args: call_node(ast.Call) : The node that calls the definition. function_nodes(list[Node]): List of nodes of the function being called. - - Returns: - Last node in self.nodes, probably the return of the function. """ logger.debug("IMPORTANT, in return_handler") @@ -426,7 +419,6 @@ def process_function(self, call_node, definition): self.function_call_index += 1 def_node = definition.node - # FIGURE OUT EVERY LINE OF THIS FUNCTION ESPECIALLY HOW RETURN VALUES WORK saved_variables = self.save_local_scope(def_node.lineno) args_mapping = self.save_def_args_in_temp(call_node.args, From 254eb8ed0d86e98db77bd631c891dd0829073a9f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 16:15:21 -0400 Subject: [PATCH 077/541] more inter comments --- pyt/interprocedural_cfg.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index d6d6de58..6975ab36 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -397,20 +397,23 @@ def return_handler(self, call_node, function_nodes): def process_function(self, call_node, definition): """Processes a user defined function when it is called. + Increments self.function_call_index each time it is called, we can refer to as N. Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode. (save_local_scope) Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. (save_def_args_in_temp) Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) Visit and get function nodes. (visit_and_get_function_nodes) Loop through each save_N_LHS node and create an e.g. foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) - Create e.g. ¤call_1 = ret_func_foo RestoreNode (return_handler) + Create e.g. ¤call_1 = ret_func_foo RestoreNode. (return_handler) + + Page 31 in the original thesis, but changed a little. Args: call_node(ast.Call) : The node that calls the definition. definition(LocalModuleDefinition): Definition of the function being called. Returns: - Last node in self.nodes, probably the return of the function. + Last node in self.nodes, probably the return of the function appended to self.nodes in return_handler. """ logger.debug("call_node is %s", call_node) From fa45593b69b80dffe42b1ff4885e58b92945c9fc Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Jun 2017 18:39:07 -0400 Subject: [PATCH 078/541] realized how much this is going to hurt. need to (a) turn function_call_index into a stack and (b) OR (or add) all ret values to OR taint --- pyt/interprocedural_cfg.py | 44 ++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 6975ab36..b5c470fa 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -282,11 +282,29 @@ def save_def_args_in_temp(self, call_args, def_args, line_number): call_arg_rhs_visitor = RHSVisitor() call_arg_rhs_visitor.visit(call_arg) - node = RestoreNode(def_arg_temp_name + ' = ' + call_arg_label_visitor.result, - def_arg_temp_name, - call_arg_rhs_visitor.result, - line_number=line_number, - path=self.filenames[-1]) + if isinstance(call_arg, ast.Call): + return_value_of_nested_call = self.visit(call_arg) + logger.debug("[QQ LUV NESTED]return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[QQ LUV NESTED]type(return_value_of_nested_call) is %s", type(return_value_of_nested_call)) + + logger.debug("[QQ LUV NESTED]call_arg_rhs_visitor.result is %s", call_arg_rhs_visitor.result) + logger.debug("[QQ LUV NESTED]type(call_arg_rhs_visitor.result) is %s", type(call_arg_rhs_visitor.result)) + node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, + def_arg_temp_name, + return_value_of_nested_call.left_hand_side, + line_number=line_number, + path=self.filenames[-1]) + logger.debug("[QQ LUV NESTED]RestoreNode is %s", node) + + else: + logger.debug("[LUV NESTED]call_arg is %s", call_arg) + logger.debug("[LUV NESTED]call_arg_label_visitor.result is %s", call_arg_label_visitor.result) + + node = RestoreNode(def_arg_temp_name + ' = ' + call_arg_label_visitor.result, + def_arg_temp_name, + call_arg_rhs_visitor.result, + line_number=line_number, + path=self.filenames[-1]) self.nodes[-1].connect(node) self.nodes.append(node) @@ -361,9 +379,7 @@ def restore_saved_local_scope(self, if restore_nodes: # Connect the last node to the first restore node self.nodes[-1].connect(restore_nodes[0]) - # Why extend instead of append??? self.nodes.extend(restore_nodes) - logger.debug("[FOR COMMENTS] restore_nodes in restore_saved_local_scope is %s", restore_nodes) def return_handler(self, call_node, function_nodes): """Handle the return from a function during a function call. @@ -378,6 +394,7 @@ def return_handler(self, call_node, function_nodes): for node in function_nodes: # Only Return's and Raise's can be of type ConnectToExitNode if isinstance(node, ConnectToExitNode): + logger.debug("ConnectToExitNode is %s", node) # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node) # logger.debug("PROCESS dir(call_node) being processed in return_handler is %s", dir(call_node)) # logger.debug("PROCESS dir(call_node.func) being processed in return_handler is %s", dir(call_node.func)) @@ -445,8 +462,7 @@ def process_function(self, call_node, definition): print('Error: Possible nameclash in "{}".' + ' Call omitted!\n'.format(error_call)) - # logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) - # logger.debug("[FOR COMMENTS] type of last node is %s", type(self.nodes[-1])) + logger.debug("[LUVTEA] nodes are %s", self.nodes[-1]) return self.nodes[-1] @@ -460,10 +476,10 @@ def visit_and_get_function_nodes(self, definition): the_new_nodes(list[Node]): The nodes added while visiting the function. """ len_before_visiting_func = len(self.nodes) - previous_node = self.nodes[-1] - entry_node = self.append_node(EntryOrExitNode("Function Entry " + - definition.name)) - previous_node.connect(entry_node) + entry_node = EntryOrExitNode("Function Entry " + + definition.name) + self.nodes[-1].connect(entry_node) + self.nodes.append(entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) entry_node.connect(function_body_connect_statements.first_statement) @@ -536,7 +552,7 @@ def visit_Call(self, node): elif last_attribute not in NOT_A_BLACKBOX: # Mark the call as a blackbox because we don't have the definition return self.add_blackbox_call(node) - + logger.debug("[LUVTEA] nodes are %s", self.nodes[-1]) return self.add_builtin(node) def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): From 3baeb4724f0d096775a01c045eed3ede349167d3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 22 Jun 2017 16:28:59 -0400 Subject: [PATCH 079/541] Nested user defined functions work --- pyt/interprocedural_cfg.py | 41 +++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index b5c470fa..0a07aa3e 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -223,11 +223,12 @@ def visit_Yield(self, node): node, line_number=node.lineno, path=self.filenames[-1])) - def save_local_scope(self, line_number): + def save_local_scope(self, line_number, saved_function_call_index): """Save the local scope before entering a function call by saving all the LHS's of assignments. Args: line_number(int): Of the def of the function call about to be entered into. + saved_function_call_index(int): Unique number for each call. Returns: saved_variables(list[SavedVariable]) @@ -238,7 +239,7 @@ def save_local_scope(self, line_number): # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: # type() is used on purpose here - save_name = 'save_' + str(self.function_call_index) + '_' +\ + save_name = 'save_' + str(saved_function_call_index) + '_' +\ assignment.left_hand_side # Save LHS saved_variables.append(SavedVariable(LHS=save_name, @@ -257,13 +258,14 @@ def save_local_scope(self, line_number): logger.debug("line_number is %s", line_number) return saved_variables - def save_def_args_in_temp(self, call_args, def_args, line_number): + def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): """Save the arguments of the definition being called. Args: call_args(list[ast.Name]): Of the call being made. def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. + saved_function_call_index(int): Unique number for each call. Returns: args_mapping(dict): A mapping of call argument to definition argument. @@ -275,7 +277,7 @@ def save_def_args_in_temp(self, call_args, def_args, line_number): # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): - def_arg_temp_name = 'temp_' + str(self.function_call_index) + '_' + def_args[i] + def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] call_arg_label_visitor = LabelVisitor() call_arg_label_visitor.visit(call_arg) @@ -317,19 +319,21 @@ def save_def_args_in_temp(self, call_args, def_args, line_number): def create_local_scope_from_def_args(self, call_args, def_args, - line_number): + line_number, + saved_function_call_index): """Create the local scope before entering the body of a function call. Args: call_args(list[ast.Name]): Of the call being made. def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the def of the function call about to be entered into. + saved_function_call_index(int): Unique number for each call. """ # Create e.g. def_arg1 = temp_N_def_arg1 for each argument for i in range(len(call_args)): def_arg_local_name = def_args[i] - def_arg_temp_name = 'temp_' + str(self.function_call_index) + '_' + def_args[i] + def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] local_scope_node = RestoreNode(def_arg_local_name + ' = ' + def_arg_temp_name, def_arg_local_name, [def_arg_temp_name], @@ -357,14 +361,14 @@ def restore_saved_local_scope(self, if var.RHS in args_mapping: logger.debug("var.RHS inside of args_mapping is %s", var.RHS) # If so, use the corresponding definition argument for the RHS of the label. - logger.debug("[BIRCH] making a '%s = %s' RestoreNode", var.RHS, args_mapping[var.RHS]) + logger.debug("[SILK ROAD] making a '%s = %s' RestoreNode, instead of a '%s = %s' RestoreNode", var.RHS, args_mapping[var.RHS], var.RHS, var.LHS) restore_nodes.append(RestoreNode(var.RHS + ' = ' + args_mapping[var.RHS], var.RHS, [var.LHS], line_number=line_number, path=self.filenames[-1])) else: - logger.debug("[2ND BIRCH] making a '%s = %s' RestoreNode", var.RHS, var.LHS) + logger.debug("[2ND SILK ROAD] making a '%s = %s' RestoreNode", var.RHS, var.LHS) # Create a node for e.g. foo = save_1_foo restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, var.RHS, @@ -381,13 +385,13 @@ def restore_saved_local_scope(self, self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) - def return_handler(self, call_node, function_nodes): + def return_handler(self, call_node, function_nodes, saved_function_call_index): """Handle the return from a function during a function call. - It doesn't handle multiple returns, at the moment. Args: call_node(ast.Call) : The node that calls the definition. function_nodes(list[Node]): List of nodes of the function being called. + saved_function_call_index(int): Unique number for each call. """ logger.debug("IMPORTANT, in return_handler") @@ -401,7 +405,7 @@ def return_handler(self, call_node, function_nodes): # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node.func.id) # Create e.g. ¤call_1 = ret_func_foo RestoreNode - LHS = CALL_IDENTIFIER + 'call_' + str(self.function_call_index) + LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + get_call_names_as_string(call_node.func) return_node = RestoreNode(LHS + ' = ' + RHS, LHS, @@ -415,7 +419,7 @@ def return_handler(self, call_node, function_nodes): def process_function(self, call_node, definition): """Processes a user defined function when it is called. - Increments self.function_call_index each time it is called, we can refer to as N. + Increments self.function_call_index each time it is called, we can refer to it as N in the comments. Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode. (save_local_scope) Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. (save_def_args_in_temp) Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) @@ -437,22 +441,27 @@ def process_function(self, call_node, definition): logger.debug("type(call_node) is %s", type(call_node)) try: self.function_call_index += 1 + saved_function_call_index = self.function_call_index + def_node = definition.node - saved_variables = self.save_local_scope(def_node.lineno) + saved_variables = self.save_local_scope(def_node.lineno, + saved_function_call_index) args_mapping = self.save_def_args_in_temp(call_node.args, Arguments(def_node.args), - call_node.lineno) + call_node.lineno, + saved_function_call_index) self.filenames.append(definition.path) self.create_local_scope_from_def_args(call_node.args, Arguments(def_node.args), - def_node.lineno) + def_node.lineno, + saved_function_call_index) function_nodes = self.visit_and_get_function_nodes(definition) self.filenames.pop() # Maybe move after restore nodes self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) - self.return_handler(call_node, function_nodes) + self.return_handler(call_node, function_nodes, saved_function_call_index) self.function_return_stack.pop() logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) logger.debug("[FOR COMMENTS] type of last node is %s", type(self.nodes[-1])) From 9004e230134b15eccd4825f82bfbfb0da02a559a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Jun 2017 13:04:11 -0400 Subject: [PATCH 080/541] [refactor]combine add blackbox and add builtin --- pyt/base_cfg.py | 27 ++++++++++++++------------- pyt/interprocedural_cfg.py | 15 ++++++++------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 14cd668d..262e85d4 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -613,28 +613,29 @@ def visit_For(self, node): def visit_Expr(self, node): return self.visit(node.value) - def add_blackbox_call(self, node): + def add_builtin_or_blackbox_call(self, node, blackbox=False): label = LabelVisitor() label.visit(node) - blackbox_call = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) - if not self.undecided: - self.nodes.append(blackbox_call) - self.blackbox_calls.add(blackbox_call) - self.undecided = False + if not isinstance(node, ast.Call): + raise - return blackbox_call + for arg in node.args: + if isinstance(arg, ast.Call): + return_value_of_nested_call = self.visit(arg) - def add_builtin(self, node): - label = LabelVisitor() - label.visit(node) + logger.debug("[Juicy Spot] arg is %s", arg) - builtin_call = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) if not self.undecided: - self.nodes.append(builtin_call) + self.nodes.append(call_node) + + if blackbox: + self.blackbox_calls.add(call_node) + self.undecided = False - return builtin_call + return call_node def visit_Name(self, node): label = LabelVisitor() diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 0a07aa3e..233b61f5 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -259,7 +259,7 @@ def save_local_scope(self, line_number, saved_function_call_index): return saved_variables def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): - """Save the arguments of the definition being called. + """Save the arguments of the definition being called. Visit the arguments if they're calls. Args: call_args(list[ast.Name]): Of the call being made. @@ -297,7 +297,6 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function line_number=line_number, path=self.filenames[-1]) logger.debug("[QQ LUV NESTED]RestoreNode is %s", node) - else: logger.debug("[LUV NESTED]call_arg is %s", call_arg) logger.debug("[LUV NESTED]call_arg_label_visitor.result is %s", call_arg_label_visitor.result) @@ -421,13 +420,15 @@ def process_function(self, call_node, definition): Increments self.function_call_index each time it is called, we can refer to it as N in the comments. Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode. (save_local_scope) - Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. (save_def_args_in_temp) + Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. Visit the arguments if they're calls. (save_def_args_in_temp) Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) Visit and get function nodes. (visit_and_get_function_nodes) Loop through each save_N_LHS node and create an e.g. foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) Create e.g. ¤call_1 = ret_func_foo RestoreNode. (return_handler) - Page 31 in the original thesis, but changed a little. + Notes: + Page 31 in the original thesis, but changed a little. + We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyways, that we return in this function. Args: call_node(ast.Call) : The node that calls the definition. @@ -551,7 +552,7 @@ def visit_Call(self, node): last_attribute = _id.rpartition('.')[-1] if definition: if isinstance(definition.node, ast.ClassDef): - self.add_builtin(node) + self.add_builtin_or_blackbox_call(node) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False return self.process_function(node, definition) @@ -560,9 +561,9 @@ def visit_Call(self, node): 'ClassDef, cannot add the function ') elif last_attribute not in NOT_A_BLACKBOX: # Mark the call as a blackbox because we don't have the definition - return self.add_blackbox_call(node) + return self.add_builtin_or_blackbox_call(node, blackbox=True) logger.debug("[LUVTEA] nodes are %s", self.nodes[-1]) - return self.add_builtin(node) + return self.add_builtin_or_blackbox_call(node) def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): """ From 6e69f015fbd4ab3f74e266f1100b66ef44d74629 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Jun 2017 17:20:29 -0400 Subject: [PATCH 081/541] [nested]sink with nested works --- .../built_in_with_user_defined_inner.py | 24 +++++ .../nested_function_calls.py | 4 - .../nested_user_defined_function_calls.py | 11 +++ example/vulnerable_code/command_injection.py | 4 +- pyt/base_cfg.py | 10 +- pyt/lattice.py | 9 +- pyt/reaching_definitions_base.py | 6 ++ pyt/reaching_definitions_taint.py | 7 ++ pyt/vars_visitor.py | 15 ++- pyt/vulnerabilities.py | 23 ++++- tests/nested_functions_test.py | 95 +++++++++++++------ tests/vulnerabilities_across_files_test.py | 10 ++ 12 files changed, 177 insertions(+), 41 deletions(-) create mode 100644 example/nested_functions_code/built_in_with_user_defined_inner.py delete mode 100644 example/nested_functions_code/nested_function_calls.py create mode 100644 example/nested_functions_code/nested_user_defined_function_calls.py diff --git a/example/nested_functions_code/built_in_with_user_defined_inner.py b/example/nested_functions_code/built_in_with_user_defined_inner.py new file mode 100644 index 00000000..87b53679 --- /dev/null +++ b/example/nested_functions_code/built_in_with_user_defined_inner.py @@ -0,0 +1,24 @@ +import subprocess +from flask import Flask, render_template, request + +app = Flask(__name__) + +def outer(outer_arg): + outer_ret_val = outer_arg + 'hey' + return outer_ret_val + +def inner(inner_arg): + # inner_ret_val = inner_arg + 'hey' + inner_ret_val = 'no more vuln' + return inner_ret_val + +@app.route('/menu', methods=['POST']) +def menu(): + req_param = request.form['suggestion'] + + subprocess.call(outer(inner(req_param)), shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) diff --git a/example/nested_functions_code/nested_function_calls.py b/example/nested_functions_code/nested_function_calls.py deleted file mode 100644 index 7221a193..00000000 --- a/example/nested_functions_code/nested_function_calls.py +++ /dev/null @@ -1,4 +0,0 @@ -def foo(): - return 'hey' - -abc = print(foo()) diff --git a/example/nested_functions_code/nested_user_defined_function_calls.py b/example/nested_functions_code/nested_user_defined_function_calls.py new file mode 100644 index 00000000..23dda4b2 --- /dev/null +++ b/example/nested_functions_code/nested_user_defined_function_calls.py @@ -0,0 +1,11 @@ +def outer(outer_arg): + outer_ret_val = outer_arg + 'hey' + return outer_ret_val + + +def inner(inner_arg): + inner_ret_val = inner_arg + 'hey' + return inner_ret_val + +foo = 'bar' +abc = outer(inner(foo)) diff --git a/example/vulnerable_code/command_injection.py b/example/vulnerable_code/command_injection.py index f13f1fda..44c45d92 100644 --- a/example/vulnerable_code/command_injection.py +++ b/example/vulnerable_code/command_injection.py @@ -13,9 +13,9 @@ def index(): @app.route('/menu', methods=['POST']) def menu(): param = request.form['suggestion'] - # command = 'echo ' + param + ' >> ' + 'menu.txt' + command = 'echo ' + param + ' >> ' + 'menu.txt' - subprocess.call("echo %s >> menu.txt" % (param), shell=True) + subprocess.call(command, shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 262e85d4..16bb2b11 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -620,14 +620,18 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): if not isinstance(node, ast.Call): raise + + call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + for arg in node.args: if isinstance(arg, ast.Call): return_value_of_nested_call = self.visit(arg) + logger.debug("[Voyager] return_value_of_nested_call is %s", return_value_of_nested_call) + return_value_of_nested_call.connect(call_node) + logger.debug("[Voyager] arg is %s", arg) - logger.debug("[Juicy Spot] arg is %s", arg) - - call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) if not self.undecided: + # if self.nodes.append(call_node) if blackbox: diff --git a/pyt/lattice.py b/pyt/lattice.py index f27cadda..32d721e2 100644 --- a/pyt/lattice.py +++ b/pyt/lattice.py @@ -1,4 +1,6 @@ from .constraint_table import constraint_table +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class Lattice: @@ -37,10 +39,15 @@ def in_constraint(self, node1, node2): if constraint == 0b0 or value == 0b0: return False + logger.debug("constraint is %s", bin(constraint)) + logger.debug("value is %s", value) return constraint & value != 0 def print_lattice(cfg_list, analysis_type): + """ + Type of params is...? + """ nodes = list() for cfg in cfg_list: nodes.extend(cfg.nodes) @@ -48,5 +55,5 @@ def print_lattice(cfg_list, analysis_type): print('Lattice:') for k, v in l.el2bv.items(): - print(str(k) + ': ' + bin(v)) + print(str(k) + ': ' + str(v)) return l diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 240b9773..86b77c3b 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -2,6 +2,8 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_join from .lattice import Lattice +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ReachingDefinitionsAnalysisBase(AnalysisBase): @@ -13,6 +15,10 @@ def __init__(self, cfg): def join(self, cfg_node): """Joins all constraints of the ingoing nodes and returns them. This represents the JOIN auxiliary definition from Schwartzbach.""" + if cfg_node.label.startswith('subp'): + logger.debug("special len(cfg_node.ingoing) is %s", len(cfg_node.ingoing)) + logger.debug("special cfg_node.ingoing is %s", cfg_node.ingoing) + logger.debug("special cfg_node.outgoing is %s", cfg_node.outgoing) return constraint_join(cfg_node.ingoing) def arrow(self, JOIN, _id): diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 776e06d6..06893d08 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,12 +1,15 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): """Reaching definitions analysis rules implemented.""" def fixpointmethod(self, cfg_node): + logger.debug("[FIDI] cfg_node is %s", cfg_node) JOIN = self.join(cfg_node) # Assignment check if isinstance(cfg_node, AssignmentNode): @@ -17,8 +20,12 @@ def fixpointmethod(self, cfg_node): cfg_node.right_hand_side_variables: arrow_result = self.arrow(JOIN, cfg_node) + logger.debug("[FIDI] cfg_node.right_hand_side_variables is %s", cfg_node.right_hand_side_variables) arrow_result = arrow_result | self.lattice.el2bv[cfg_node] constraint_table[cfg_node] = arrow_result # Default case: else: + if cfg_node.label.startswith("subp"): + logger.debug("SPECIAL, not assignment is %s", cfg_node) + logger.debug("SPECIAL, JOIN is %s", bin(JOIN)) constraint_table[cfg_node] = JOIN diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index e47f7f98..a92bb787 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -1,6 +1,8 @@ import ast from .ast_helper import get_call_names +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class VarsVisitor(ast.NodeVisitor): @@ -86,10 +88,19 @@ def visit_Call(self, node): self.visit(node.func) if node.args: for arg in node.args: - self.visit(arg) + logger.debug("[voyager] arg is %s", arg) + if isinstance(arg, ast.Call): + logger.debug("[voyager] arg.func.id is %s", arg.func.id) + self.result.append('ret_' + arg.func.id) + else: + self.visit(arg) if node.keywords: for keyword in node.keywords: - self.visit(keyword) + logger.debug("[voyager] keyword is %s", keyword) + if isinstance(keyword, ast.Call): + self.result.append('ret_' + keyword.func.id) + else: + self.visit(keyword) def visit_Attribute(self, node): if not isinstance(node.value, ast.Name): diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 3e86ef07..c306ae29 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -4,7 +4,7 @@ from .base_cfg import AssignmentNode from .framework_adaptor import TaintedNode -from .lattice import Lattice +from .lattice import Lattice, print_lattice from .trigger_definitions_parser import default_trigger_word_file, parse from .vars_visitor import VarsVisitor from .vulnerability_log import ( @@ -257,17 +257,32 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() + # logger.debug("[voy] So source.secondary_nodes is %s THIS SHOULD INCLUE WHERE IT IS USED AS AN ARG",source.secondary_nodes) + for node in source.secondary_nodes: + logger.debug("secondary node label is %s", node.label) + + logger.debug("[VOY] sink is %s", sink) + logger.debug("[VOY] sink.cfg_node is %s", sink.cfg_node) if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, sink.cfg_node)] + logger.debug("[VOY] secondary in sink list is %s", secondary_in_sink) trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) + for sarg in sink_args: + if 'ret_' in sarg: + logger.debug("special sarg is %s", sarg) + + logger.debug("[Voyager] MIA sink_args are %s", sink_args) secondary_node_in_sink_args = None if sink_args: + logger.debug("secondary in sink list is %s", secondary_in_sink) for node in secondary_in_sink: + logger.debug("secondary in sink is %s", node) + logger.debug("secondary in sink.LHS is %s", node.left_hand_side) if sink_args and node.left_hand_side in sink_args: secondary_node_in_sink_args = node @@ -282,6 +297,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black node_in_the_vulnerability_chain = secondary trimmed_reassignment_nodes.insert(0, node_in_the_vulnerability_chain) + logger.debug("[voy] source.cfg_node.left_hand_side is %s", source.cfg_node.left_hand_side) source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None @@ -326,6 +342,9 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) for sink in triggers.sinks: for source in triggers.sources: + for i, n in enumerate(cfg.nodes): + logger.debug("#%s n.label is %s. in_constraint is %s", i, n.label, lattice.in_constraint(n, cfg.nodes[20])) + logger.debug("cfg.nodes[20] is %s", cfg.nodes[20]) vulnerability = get_vulnerability(source, sink, triggers, @@ -354,7 +373,9 @@ def find_vulnerabilities(cfg_list, analysis_type, logger.debug("definitions.sinks is %s", definitions.sinks) vulnerability_log = VulnerabilityLog() + for cfg in cfg_list: + print_lattice([cfg], analysis_type) find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), trim_reassigned_in) diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index d7472a9f..4bac3728 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -1,44 +1,83 @@ -# import os.path +import os.path -# from .base_test_case import BaseTestCase -# from pyt.project_handler import get_directory_modules, get_modules_and_packages -# from pyt.utils.log import enable_logger, logger -# enable_logger(to_file='./pyt.log') +from .base_test_case import BaseTestCase +from pyt.project_handler import get_directory_modules, get_modules_and_packages +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') -# class NestedTest(BaseTestCase): -# def test_nested_function_calls(self): +class NestedTest(BaseTestCase): + def test_nested_user_defined_function_calls(self): -# path = os.path.normpath('example/nested_functions_code/nested_function_calls.py') + path = os.path.normpath('example/nested_functions_code/nested_user_defined_function_calls.py') -# project_modules = get_modules_and_packages(os.path.dirname(path)) -# local_modules = get_directory_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) -# self.cfg_create_from_file(path, project_modules, local_modules) + self.cfg_create_from_file(path, project_modules, local_modules) -# EXPECTED = ['Not Yet'] + EXPECTED = ["Entry module", + "foo = 'bar'", + "save_1_foo = foo", + "save_2_foo = foo", + "temp_2_inner_arg = foo", + "inner_arg = temp_2_inner_arg", + "Function Entry inner", + "inner_ret_val = inner_arg + 'hey'", + "ret_inner = inner_ret_val", + "Exit inner", + "foo = inner_arg", + "¤call_2 = ret_inner", + "temp_1_outer_arg = ¤call_2", + "outer_arg = temp_1_outer_arg", + "Function Entry outer", + "outer_ret_val = outer_arg + 'hey'", + "ret_outer = outer_ret_val", + "Exit outer", + "foo = save_1_foo", + "¤call_1 = ret_outer", + "abc = ¤call_1", + "Exit module"] -# logger.debug("Nodes are:") -# for node in self.cfg.nodes: -# logger.debug("%s", node) + logger.debug("Nodes are:") + for node in self.cfg.nodes: + logger.debug("%s", node.label) -# for node, expected_label in zip(self.cfg.nodes, EXPECTED): -# self.assertEqual(node.label, expected_label) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) -# def test_nested_string_interpolation(self): + def test_built_in_with_user_defined_inner(self): -# path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') + path = os.path.normpath('example/nested_functions_code/built_in_with_user_defined_inner.py') -# project_modules = get_modules_and_packages(os.path.dirname(path)) -# local_modules = get_directory_modules(os.path.dirname(path)) + project_modules = get_modules_and_packages(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) -# self.cfg_create_from_file(path, project_modules, local_modules) + self.cfg_create_from_file(path, project_modules, local_modules) -# EXPECTED = ['Not Yet'] + EXPECTED = ["TODO"] -# logger.debug("Nodes are:") -# for node in self.cfg.nodes: -# logger.debug("%s", node) + logger.debug("Nodes are:") + for node in self.cfg.nodes: + logger.debug("%s", node.label) -# for node, expected_label in zip(self.cfg.nodes, EXPECTED): -# self.assertEqual(node.label, expected_label) + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + + # def test_nested_string_interpolation(self): + + # path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') + + # project_modules = get_modules_and_packages(os.path.dirname(path)) + # local_modules = get_directory_modules(os.path.dirname(path)) + + # self.cfg_create_from_file(path, project_modules, local_modules) + + # EXPECTED = ['Not Yet'] + + # logger.debug("Nodes are:") + # for node in self.cfg.nodes: + # logger.debug("%s", node) + + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 13fa6c84..926134b9 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -71,6 +71,16 @@ def test_blackbox_library_call(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_built_in_with_user_defined_inner(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/built_in_with_user_defined_inner.py') + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + HEY + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_find_vulnerabilities_import_file_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') From 0bd3eff8d3e0aafe3c63f2fdf423506a4666c0e6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Jun 2017 15:28:43 -0400 Subject: [PATCH 082/541] [test] made a test for sink with nested user defined --- .../built_in_with_user_defined_inner.py | 7 ++- .../sink_with_user_defined_inner.py | 24 ++++++++++ tests/vulnerabilities_across_files_test.py | 45 +++++++++++++++++++ 3 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 example/nested_functions_code/sink_with_user_defined_inner.py diff --git a/example/nested_functions_code/built_in_with_user_defined_inner.py b/example/nested_functions_code/built_in_with_user_defined_inner.py index 87b53679..e86f225a 100644 --- a/example/nested_functions_code/built_in_with_user_defined_inner.py +++ b/example/nested_functions_code/built_in_with_user_defined_inner.py @@ -1,6 +1,9 @@ import subprocess from flask import Flask, render_template, request +# This is a lib we can't possibly see inside of +import scrypt + app = Flask(__name__) def outer(outer_arg): @@ -16,7 +19,9 @@ def inner(inner_arg): def menu(): req_param = request.form['suggestion'] - subprocess.call(outer(inner(req_param)), shell=True) + # builtin(blackbox()) + foo = set_cookie(scrypt.encrypt(req_param)) + subprocess.call(foo, shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/example/nested_functions_code/sink_with_user_defined_inner.py b/example/nested_functions_code/sink_with_user_defined_inner.py new file mode 100644 index 00000000..157e4816 --- /dev/null +++ b/example/nested_functions_code/sink_with_user_defined_inner.py @@ -0,0 +1,24 @@ +import subprocess +from flask import Flask, render_template, request + +app = Flask(__name__) + +def outer(outer_arg): + outer_ret_val = outer_arg + 'hey' + return outer_ret_val + +def inner(inner_arg): + inner_ret_val = inner_arg + 'hey' + # inner_ret_val = 'no more vuln' + return inner_ret_val + +@app.route('/menu', methods=['POST']) +def menu(): + req_param = request.form['suggestion'] + + subprocess.call(outer(inner(req_param)), shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 926134b9..5b0a1a2f 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -81,6 +81,51 @@ def test_built_in_with_user_defined_inner(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_user_defined_inner(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/nested_functions_code/sink_with_user_defined_inner.py + > User input at line 17, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: save_1_req_param = req_param + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: save_2_req_param = req_param + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 19: temp_2_inner_arg = req_param + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: inner_arg = temp_2_inner_arg + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 11: inner_ret_val = inner_arg + 'hey' + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 13: ret_inner = inner_ret_val + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: req_param = inner_arg + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 19: ¤call_2 = ret_inner + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 19: temp_1_outer_arg = ¤call_2 + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: outer_arg = temp_1_outer_arg + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 7: outer_ret_val = outer_arg + 'hey' + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 8: ret_outer = outer_ret_val + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: req_param = save_1_req_param + File: example/nested_functions_code/sink_with_user_defined_inner.py + > Line 19: ¤call_1 = ret_outer + File: example/nested_functions_code/sink_with_user_defined_inner.py + > reaches line 19, trigger word "subprocess.call(": + subprocess.call(outer(inner(req_param)),shell=True) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_find_vulnerabilities_import_file_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') From 04c54e3ba8944e3d50d17782dafc6606ef519f87 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 6 Jul 2017 17:31:53 -0700 Subject: [PATCH 083/541] laptop was just dead push it all --- example/3.6/ffstrings.py | 10 +++++++ ...sink_with_result_of_user_defined_nested.py | 24 ++++++++++++++++ pyt/__main__.py | 3 ++ pyt/ast_helper.py | 6 +++- pyt/base_cfg.py | 11 ++++++-- pyt/constraint_table.py | 6 ++++ pyt/interprocedural_cfg.py | 28 +++++++++++-------- pyt/vars_visitor.py | 14 ++++++++-- pyt/vulnerabilities.py | 14 ++++++---- tests/vulnerabilities_across_files_test.py | 11 +++++++- 10 files changed, 104 insertions(+), 23 deletions(-) create mode 100644 example/3.6/ffstrings.py create mode 100644 example/nested_functions_code/sink_with_result_of_user_defined_nested.py diff --git a/example/3.6/ffstrings.py b/example/3.6/ffstrings.py new file mode 100644 index 00000000..df110488 --- /dev/null +++ b/example/3.6/ffstrings.py @@ -0,0 +1,10 @@ +import decimal + + +name = 'Fred' +greeting = f"Hello {name}" +width = 10 +precision = 4 +value = decimal.Decimal("12.34567") +result = f"result: {value:{width}.{precision}}" +print (result) \ No newline at end of file diff --git a/example/nested_functions_code/sink_with_result_of_user_defined_nested.py b/example/nested_functions_code/sink_with_result_of_user_defined_nested.py new file mode 100644 index 00000000..8ddbfd55 --- /dev/null +++ b/example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -0,0 +1,24 @@ +import subprocess +from flask import Flask, render_template, request + +app = Flask(__name__) + +def outer(outer_arg): + outer_ret_val = outer_arg + 'hey' + return outer_ret_val + +def inner(inner_arg): + inner_ret_val = inner_arg + 'hey' + # inner_ret_val = 'no more vuln' + return inner_ret_val + +@app.route('/menu', methods=['POST']) +def menu(): + req_param = request.form['suggestion'] + result = outer(inner(req_param)) + subprocess.call(result, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) diff --git a/pyt/__main__.py b/pyt/__main__.py index 163af349..987f066d 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -36,6 +36,8 @@ vulnerabilities_to_file ) from .vulnerabilities import find_vulnerabilities +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') parser = argparse.ArgumentParser(prog='python -m pyt') @@ -227,6 +229,7 @@ def main(): # Add all the route functions to the cfg_list FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + logger.debug("[DAVIDsTEA] cfg_list is %s", cfg_list) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis) diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 6c5e07cb..624996ad 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -21,7 +21,11 @@ def convert_to_3(path): def generate_ast(path): - """Generate an Abstract Syntax Tree using the ast module.""" + """Generate an Abstract Syntax Tree using the ast module. + + Args: + path(string): A relative or full path to a Python file, that is used to generate the + """ if os.path.isfile(path): with open(path, 'r') as f: try: diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 16bb2b11..9be22161 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -618,20 +618,27 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): label.visit(node) if not isinstance(node, ast.Call): + logger.debug("node that isnt a call in add_builtin_or_blackbox_call is %s", node) raise call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + saved_undecided = self.undecided for arg in node.args: if isinstance(arg, ast.Call): + self.undecided = False return_value_of_nested_call = self.visit(arg) - logger.debug("[Voyager] return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[DAVIDsTEA] return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[DAVIDsTEA] self.nodes is %s", self.nodes) + # for n in self.nodes: + # if n == return_value_of_nested_call: + # raise return_value_of_nested_call.connect(call_node) logger.debug("[Voyager] arg is %s", arg) + self.undecided = saved_undecided if not self.undecided: - # if self.nodes.append(call_node) if blackbox: diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index 26459bcd..35d52228 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -3,11 +3,14 @@ Uses cfg node as key and operates on bitvectors in the form of ints.""" constraint_table = dict() +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') def initialize_constraint_table(cfg_list): """Collects all given cfg nodes and initializes the table with value 0.""" for cfg in cfg_list: + logger.debug("len(cfg.nodes) is %s", len(cfg.nodes)) constraint_table.update(dict.fromkeys(cfg.nodes, 0)) @@ -15,6 +18,9 @@ def constraint_join(cfg_nodes): """Looks up all cfg_nodes and joins the bitvectors by using logical or.""" r = 0 for e in cfg_nodes: + logger.debug("len(cfg_nodes) is %s", len(cfg_nodes)) + logger.debug("e is %s", e) + logger.debug("type(e) is %s", type(e)) r = r | constraint_table[e] return r diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 233b61f5..ad83c41a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -286,17 +286,23 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) - logger.debug("[QQ LUV NESTED]return_value_of_nested_call is %s", return_value_of_nested_call) - logger.debug("[QQ LUV NESTED]type(return_value_of_nested_call) is %s", type(return_value_of_nested_call)) - - logger.debug("[QQ LUV NESTED]call_arg_rhs_visitor.result is %s", call_arg_rhs_visitor.result) - logger.debug("[QQ LUV NESTED]type(call_arg_rhs_visitor.result) is %s", type(call_arg_rhs_visitor.result)) - node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, - def_arg_temp_name, - return_value_of_nested_call.left_hand_side, - line_number=line_number, - path=self.filenames[-1]) - logger.debug("[QQ LUV NESTED]RestoreNode is %s", node) + if return_value_of_nested_call in self.blackbox_calls: + logger.debug("nested blackbox call, ouchie") + # raise + continue + else: + logger.debug("[QQ LUV NESTED]self.blackbox_calls is %s", self.blackbox_calls) + logger.debug("[QQ LUV NESTED]return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[QQ LUV NESTED]type(return_value_of_nested_call) is %s", type(return_value_of_nested_call)) + + logger.debug("[QQ LUV NESTED]call_arg_rhs_visitor.result is %s", call_arg_rhs_visitor.result) + logger.debug("[QQ LUV NESTED]type(call_arg_rhs_visitor.result) is %s", type(call_arg_rhs_visitor.result)) + node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, + def_arg_temp_name, + return_value_of_nested_call.left_hand_side, + line_number=line_number, + path=self.filenames[-1]) + logger.debug("[QQ LUV NESTED]RestoreNode is %s", node) else: logger.debug("[LUV NESTED]call_arg is %s", call_arg) logger.debug("[LUV NESTED]call_arg_label_visitor.result is %s", call_arg_label_visitor.result) diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index a92bb787..7ca16ecc 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -90,8 +90,18 @@ def visit_Call(self, node): for arg in node.args: logger.debug("[voyager] arg is %s", arg) if isinstance(arg, ast.Call): - logger.debug("[voyager] arg.func.id is %s", arg.func.id) - self.result.append('ret_' + arg.func.id) + logger.debug("[voyager] arg.func is %s", arg.func) + if isinstance(arg.func, ast.Name): + logger.debug("[voyager] arg.func.id is %s", arg.func.id) + self.result.append('ret_' + arg.func.id) + elif isinstance(arg.func, ast.Attribute): + logger.debug("It is an attribute!") + logger.debug("[voyager] arg.func.attr is %s", arg.func.attr) + self.result.append('ret_' + arg.func.attr) + raise + else: + logger.debug("type(arg.func) is %s", type(arg.func)) + raise else: self.visit(arg) if node.keywords: diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index c306ae29..871c8d11 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -335,16 +335,18 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr """Find vulnerabilities in a cfg. Args: - cfg(CFG): The CFG look find vulnerabilities in. - vulnerabilitiy_log: The log in which to place found vulnerabilities. - definitions: Source and sink definitions. + cfg(CFG): The CFG to find vulnerabilities in. + vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. + definitions(trigger_definitions_parser.Definitions): Source and sink definitions. """ triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) for sink in triggers.sinks: for source in triggers.sources: - for i, n in enumerate(cfg.nodes): - logger.debug("#%s n.label is %s. in_constraint is %s", i, n.label, lattice.in_constraint(n, cfg.nodes[20])) - logger.debug("cfg.nodes[20] is %s", cfg.nodes[20]) + # logger.debug("type(vulnerability_log(VulnerabilityLog)) is %s", type(vulnerability_log(VulnerabilityLog))) + # logger.debug("type(definitions) is %s", type(definitions)) + # for i, n in enumerate(cfg.nodes): + # logger.debug("#%s n.label is %s. in_constraint is %s", i, n.label, lattice.in_constraint(n, cfg.nodes[20])) + # logger.debug("cfg.nodes[20] is %s", cfg.nodes[20]) vulnerability = get_vulnerability(source, sink, triggers, diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 5b0a1a2f..622807dd 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -81,6 +81,16 @@ def test_built_in_with_user_defined_inner(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_result_of_user_defined_nested(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + HEY + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_user_defined_inner(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) @@ -123,7 +133,6 @@ def test_sink_with_user_defined_inner(self): > reaches line 19, trigger word "subprocess.call(": subprocess.call(outer(inner(req_param)),shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_find_vulnerabilities_import_file_command_injection(self): From 60c20f002ce309115e873a875cf9634ff1b29784 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 11 Jul 2017 19:14:36 -0400 Subject: [PATCH 084/541] add readthedocs, better than nothing atm --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 67bdedc2..b0f4b298 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,9 @@ .. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt +.. image:: https://readthedocs.org/projects/pyt/badge/?version=latest + :target: http://pyt.readthedocs.io/en/latest/?badge=latest + .. image:: https://codeclimate.com/github/python-security/pyt/badges/coverage.svg :target: https://codeclimate.com/github/python-security/pyt/coverage From 92660e7f7676538984a813947ed01002d03c5dd8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 13:04:43 -0400 Subject: [PATCH 085/541] [tests] made empty args test for main --- pyt/__main__.py | 241 +++++++++++++++++++------------------ tests/command_line_test.py | 31 +++++ 2 files changed, 154 insertions(+), 118 deletions(-) create mode 100644 tests/command_line_test.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 2c198b36..8fa9f283 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -2,6 +2,7 @@ import argparse import os +import sys from datetime import date from pprint import pprint @@ -32,119 +33,120 @@ ) from .vulnerabilities import find_vulnerabilities - -parser = argparse.ArgumentParser(prog='python -m pyt') -parser.set_defaults(which='') - -subparsers = parser.add_subparsers() - -entry_group = parser.add_mutually_exclusive_group(required=True) -entry_group.add_argument('-f', '--filepath', - help='Path to the file that should be analysed.', - type=str) -entry_group.add_argument('-gr', '--git-repos', - help='Takes a CSV file of git_url, path per entry.', - type=str) - -parser.add_argument('-pr', '--project-root', - help='Add project root, this is important when the entry' + - ' file is not at the root of the project.', type=str) -parser.add_argument('-d', '--draw-cfg', - help='Draw CFG and output as .pdf file.', - action='store_true') -parser.add_argument('-o', '--output-filename', - help='Output filename.', type=str) -parser.add_argument('-csv', '--csv-path', type=str, - help='Give the path of the csv file' - ' repos should be added to.') - -print_group = parser.add_mutually_exclusive_group() -print_group.add_argument('-p', '--print', - help='Prints the nodes of the CFG.', - action='store_true') -print_group.add_argument('-vp', '--verbose-print', - help='Verbose printing of -p.', action='store_true') -print_group.add_argument('-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', action='store_true') - - -parser.add_argument('-t', '--trigger-word-file', - help='Input trigger word file.', type=str) -parser.add_argument('-l', '--log-level', - help='Choose logging level: CRITICAL, ERROR,' + - ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) -parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: FLASK(Default) or DJANGO.', - type=str) -parser.add_argument('-db', '--create-database', - help='Creates a sql file that can be used to' + - ' create a database.', action='store_true') -parser.add_argument('-dl', '--draw-lattice', - nargs='+', help='Draws a lattice.') - -analysis_group = parser.add_mutually_exclusive_group() -analysis_group.add_argument('-li', '--liveness', - help='Run liveness analysis. Default is' + - ' reaching definitions tainted version.', - action='store_true') -analysis_group.add_argument('-re', '--reaching', - help='Run reaching definitions analysis.' + - ' Default is reaching definitions' + - ' tainted version.', action='store_true') -analysis_group.add_argument('-rt', '--reaching-taint', - help='This is the default analysis:' + - ' reaching definitions tainted version.', - action='store_true') - -parser.add_argument('-intra', '--intraprocedural-analysis', - help='Run intraprocedural analysis.', action='store_true') -parser.add_argument('-ppm', '--print-project-modules', - help='Print project modules.', action='store_true') - - -save_parser = subparsers.add_parser('save', help='Save menu.') -save_parser.set_defaults(which='save') -save_parser.add_argument('-fp', '--filename-prefix', - help='Filename prefix fx file_lattice.pyt', - type=str) -save_parser.add_argument('-du', '--def-use-chain', - help='Output the def-use chain(s) to file.', - action='store_true') -save_parser.add_argument('-ud', '--use-def-chain', - help='Output the use-def chain(s) to file', - action='store_true') -save_parser.add_argument('-cfg', '--control-flow-graph', - help='Output the CFGs to file.', - action='store_true') -save_parser.add_argument('-vcfg', '--verbose-control-flow-graph', - help='Output the verbose CFGs to file.', - action='store_true') -save_parser.add_argument('-an', '--analysis', - help='Output analysis results to file' - + ' in form of a constraint table.', - action='store_true') -save_parser.add_argument('-la', '--lattice', help='Output lattice(s) to file.', - action='store_true') -save_parser.add_argument('-vu', '--vulnerabilities', - help='Output vulnerabilities to file.', - action='store_true') -save_parser.add_argument('-all', '--save-all', - help='Output everything to file.', - action='store_true') - -search_parser = subparsers.add_parser( - 'github_search', - help='Searches through github and runs PyT' - ' on found repositories. This can take some time.') -search_parser.set_defaults(which='search') - -search_parser.add_argument( - '-ss', '--search-string', required=True, - help='String for searching for repos on github.', type=str) - -search_parser.add_argument('-sd', '--start-date', - help='Start date for repo search. ' - 'Criteria used is Created Date.', type=valid_date) +def parse_args(args): + parser = argparse.ArgumentParser(prog='python -m pyt') + parser.set_defaults(which='') + + subparsers = parser.add_subparsers() + + entry_group = parser.add_mutually_exclusive_group(required=True) + entry_group.add_argument('-f', '--filepath', + help='Path to the file that should be analysed.', + type=str) + entry_group.add_argument('-gr', '--git-repos', + help='Takes a CSV file of git_url, path per entry.', + type=str) + + parser.add_argument('-pr', '--project-root', + help='Add project root, this is important when the entry' + + ' file is not at the root of the project.', type=str) + parser.add_argument('-d', '--draw-cfg', + help='Draw CFG and output as .pdf file.', + action='store_true') + parser.add_argument('-o', '--output-filename', + help='Output filename.', type=str) + parser.add_argument('-csv', '--csv-path', type=str, + help='Give the path of the csv file' + ' repos should be added to.') + + print_group = parser.add_mutually_exclusive_group() + print_group.add_argument('-p', '--print', + help='Prints the nodes of the CFG.', + action='store_true') + print_group.add_argument('-vp', '--verbose-print', + help='Verbose printing of -p.', action='store_true') + print_group.add_argument('-trim', '--trim-reassigned-in', + help='Trims the reassigned list to the vulnerability chain.', action='store_true') + + + parser.add_argument('-t', '--trigger-word-file', + help='Input trigger word file.', type=str) + parser.add_argument('-l', '--log-level', + help='Choose logging level: CRITICAL, ERROR,' + + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) + parser.add_argument('-a', '--adaptor', + help='Choose an adaptor: FLASK(Default) or DJANGO.', + type=str) + parser.add_argument('-db', '--create-database', + help='Creates a sql file that can be used to' + + ' create a database.', action='store_true') + parser.add_argument('-dl', '--draw-lattice', + nargs='+', help='Draws a lattice.') + + analysis_group = parser.add_mutually_exclusive_group() + analysis_group.add_argument('-li', '--liveness', + help='Run liveness analysis. Default is' + + ' reaching definitions tainted version.', + action='store_true') + analysis_group.add_argument('-re', '--reaching', + help='Run reaching definitions analysis.' + + ' Default is reaching definitions' + + ' tainted version.', action='store_true') + analysis_group.add_argument('-rt', '--reaching-taint', + help='This is the default analysis:' + + ' reaching definitions tainted version.', + action='store_true') + + parser.add_argument('-intra', '--intraprocedural-analysis', + help='Run intraprocedural analysis.', action='store_true') + parser.add_argument('-ppm', '--print-project-modules', + help='Print project modules.', action='store_true') + + + save_parser = subparsers.add_parser('save', help='Save menu.') + save_parser.set_defaults(which='save') + save_parser.add_argument('-fp', '--filename-prefix', + help='Filename prefix fx file_lattice.pyt', + type=str) + save_parser.add_argument('-du', '--def-use-chain', + help='Output the def-use chain(s) to file.', + action='store_true') + save_parser.add_argument('-ud', '--use-def-chain', + help='Output the use-def chain(s) to file', + action='store_true') + save_parser.add_argument('-cfg', '--control-flow-graph', + help='Output the CFGs to file.', + action='store_true') + save_parser.add_argument('-vcfg', '--verbose-control-flow-graph', + help='Output the verbose CFGs to file.', + action='store_true') + save_parser.add_argument('-an', '--analysis', + help='Output analysis results to file' + + ' in form of a constraint table.', + action='store_true') + save_parser.add_argument('-la', '--lattice', help='Output lattice(s) to file.', + action='store_true') + save_parser.add_argument('-vu', '--vulnerabilities', + help='Output vulnerabilities to file.', + action='store_true') + save_parser.add_argument('-all', '--save-all', + help='Output everything to file.', + action='store_true') + + search_parser = subparsers.add_parser( + 'github_search', + help='Searches through github and runs PyT' + ' on found repositories. This can take some time.') + search_parser.set_defaults(which='search') + + search_parser.add_argument( + '-ss', '--search-string', required=True, + help='String for searching for repos on github.', type=str) + + search_parser.add_argument('-sd', '--start-date', + help='Start date for repo search. ' + 'Criteria used is Created Date.', type=valid_date) + return parser.parse_args(args) def analyse_repo(github_repo, analysis_type): @@ -158,7 +160,7 @@ def analyse_repo(github_repo, analysis_type): def main(): - args = parser.parse_args() + args = parse_args(sys.argv[1:]) analysis = None if args.liveness: @@ -205,11 +207,12 @@ def main(): cfg_list = list() - # project_modules = [p for p in project_modules if 'sqli.py' in p[1]] if args.intraprocedural_analysis: intraprocedural(project_modules, cfg_list) else: - cfg_list.append(interprocedural(tree, project_modules, local_modules, + cfg_list.append(interprocedural(tree, + project_modules, + local_modules, path)) adaptor_type = FlaskAdaptor(cfg_list, project_modules, local_modules) @@ -219,11 +222,13 @@ def main(): vulnerability_log = None if args.trigger_word_file: - vulnerability_log = find_vulnerabilities(cfg_list, analysis, + vulnerability_log = find_vulnerabilities(cfg_list, + analysis, args.trim_reassigned_in, args.trigger_word_file) else: - vulnerability_log = find_vulnerabilities(cfg_list, analysis, + vulnerability_log = find_vulnerabilities(cfg_list, + analysis, args.trim_reassigned_in) vulnerability_log.print_report() diff --git a/tests/command_line_test.py b/tests/command_line_test.py new file mode 100644 index 00000000..cf0ef2d0 --- /dev/null +++ b/tests/command_line_test.py @@ -0,0 +1,31 @@ +import sys +from contextlib import contextmanager +from io import StringIO + +from .base_test_case import BaseTestCase +from pyt.__main__ import main, parse_args + +@contextmanager +def capture_sys_output(): + capture_out, capture_err = StringIO(), StringIO() + current_out, current_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = capture_out, capture_err + yield capture_out, capture_err + finally: + sys.stdout, sys.stderr = current_out, current_err + +class CommandLineTest(BaseTestCase): + def test_no_args(self): + with self.assertRaises(SystemExit) as cm: + with capture_sys_output() as (stdout, stderr): + parse_args([]) + + EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] + [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] + [-p | -vp | -trim] [-t TRIGGER_WORD_FILE] [-l LOG_LEVEL] + [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] + [-li | -re | -rt] [-intra] [-ppm] + {save,github_search} ...\n""" + \ + "python -m pyt: error: one of the arguments -f/--filepath -gr/--git-repos is required\n" + self.assertEqual(stderr.getvalue(), EXPECTED) From 8be48f0b7cd099dc16819a6b5dfd596a8522f4ce Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 13:14:36 -0400 Subject: [PATCH 086/541] [test][style] clean up command_line_test --- tests/command_line_test.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index cf0ef2d0..a9740b75 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -1,9 +1,10 @@ +"""This just tests __main__.py""" import sys from contextlib import contextmanager from io import StringIO from .base_test_case import BaseTestCase -from pyt.__main__ import main, parse_args +from pyt.__main__ import parse_args @contextmanager def capture_sys_output(): @@ -17,8 +18,8 @@ def capture_sys_output(): class CommandLineTest(BaseTestCase): def test_no_args(self): - with self.assertRaises(SystemExit) as cm: - with capture_sys_output() as (stdout, stderr): + with self.assertRaises(SystemExit): + with capture_sys_output() as (_, stderr): parse_args([]) EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] @@ -27,5 +28,6 @@ def test_no_args(self): [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-li | -re | -rt] [-intra] [-ppm] {save,github_search} ...\n""" + \ - "python -m pyt: error: one of the arguments -f/--filepath -gr/--git-repos is required\n" + "python -m pyt: error: one of the arguments " + \ + "-f/--filepath -gr/--git-repos is required\n" self.assertEqual(stderr.getvalue(), EXPECTED) From 2689c768fff76c412fae18a1f6e6151e0b7fe6d7 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 13:27:11 -0400 Subject: [PATCH 087/541] move cmd line args to main default args, to make it testable --- pyt/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 8fa9f283..47bad778 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -159,8 +159,8 @@ def analyse_repo(github_repo, analysis_type): return vulnerability_log -def main(): - args = parse_args(sys.argv[1:]) +def main(command_line_args=sys.argv[1:]): + args = parse_args(command_line_args) analysis = None if args.liveness: From 28e82ee54b60f239f8250ab509693c7a1690719c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 14:00:59 -0400 Subject: [PATCH 088/541] [test coverage] exclude if __name__ == .__main__. --- .coveragerc | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .coveragerc diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 00000000..f4a58699 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,4 @@ +[report] + +exclude_lines = + if __name__ == .__main__.: From 741b324bf3530aeeff96e679d36a421b7630bc34 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 14:11:47 -0400 Subject: [PATCH 089/541] [test coverage] exclude files that are not currently maintained --- .codeclimate.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.codeclimate.yml b/.codeclimate.yml index 5f11fdd9..4113b0e7 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -18,6 +18,11 @@ ratings: - "pyt/*" - "**.py" exclude_paths: +- "pyt/draw.py" +- "pyt/github_search.py" +- "pyt/intraprocedural_cfg.py" +- "pyt/repo_runner.py" +- "pyt/save.py" - "example/**" - "profiling/**" - "tests/**" From ef79c72af4b77e31eba9576c3ca272a8a84da3e0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 14:19:45 -0400 Subject: [PATCH 090/541] [clean up]fix simple codeclimate feedback --- pyt/__main__.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 47bad778..4fca53a3 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -33,6 +33,7 @@ ) from .vulnerabilities import find_vulnerabilities + def parse_args(args): parser = argparse.ArgumentParser(prog='python -m pyt') parser.set_defaults(which='') @@ -68,7 +69,6 @@ def parse_args(args): print_group.add_argument('-trim', '--trim-reassigned-in', help='Trims the reassigned list to the vulnerability chain.', action='store_true') - parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str) parser.add_argument('-l', '--log-level', @@ -102,7 +102,6 @@ def parse_args(args): parser.add_argument('-ppm', '--print-project-modules', help='Print project modules.', action='store_true') - save_parser = subparsers.add_parser('save', help='Save menu.') save_parser.set_defaults(which='save') save_parser.add_argument('-fp', '--filename-prefix', @@ -210,7 +209,7 @@ def main(command_line_args=sys.argv[1:]): if args.intraprocedural_analysis: intraprocedural(project_modules, cfg_list) else: - cfg_list.append(interprocedural(tree, + cfg_list.append(interprocedural(tree, project_modules, local_modules, path)) @@ -222,7 +221,7 @@ def main(command_line_args=sys.argv[1:]): vulnerability_log = None if args.trigger_word_file: - vulnerability_log = find_vulnerabilities(cfg_list, + vulnerability_log = find_vulnerabilities(cfg_list, analysis, args.trim_reassigned_in, args.trigger_word_file) From f22c34d6569c6cc417f73a138a4d406ce0b1a9f4 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 14:41:57 -0400 Subject: [PATCH 091/541] [test coverage] omit unmaintained files in coveragerc --- .coveragerc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/.coveragerc b/.coveragerc index f4a58699..93a1cce9 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,4 +1,11 @@ [report] - exclude_lines = if __name__ == .__main__.: + +[run] +omit = + pyt/draw.py + pyt/github_search.py + pyt/intraprocedural_cfg.py + pyt/repo_runner.py + pyt/save.py From ddf5763612cb2d5dc9ce525a35dc503fbf821fe2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 20:11:14 -0400 Subject: [PATCH 092/541] made command_line_test with new cmd flag --- pyt/__main__.py | 3 +++ tests/command_line_test.py | 7 ++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 96bd3291..db6f67a0 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -71,6 +71,9 @@ def parse_args(args): parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str) + parser.add_argument('-py2', '--python-2', + help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + + ' needed when target file(s) are written in Python 2.', action='store_true') parser.add_argument('-l', '--log-level', help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index a9740b75..6749677c 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -24,9 +24,10 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] - [-p | -vp | -trim] [-t TRIGGER_WORD_FILE] [-l LOG_LEVEL] - [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] - [-li | -re | -rt] [-intra] [-ppm] + [-p | -vp | -trim] [-t TRIGGER_WORD_FILE] [-py2] + [-l LOG_LEVEL] [-a ADAPTOR] [-db] + [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-li | -re | -rt] + [-intra] [-ppm] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" From 1f4759af970f66c9a6a89faf714bf7a122eef7be Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 12 Jul 2017 20:14:01 -0400 Subject: [PATCH 093/541] [whitespace] remove trailing whitespace --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index db6f67a0..611934f8 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -73,7 +73,7 @@ def parse_args(args): help='Input trigger word file.', type=str) parser.add_argument('-py2', '--python-2', help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + - ' needed when target file(s) are written in Python 2.', action='store_true') + ' needed when target file(s) are written in Python 2.', action='store_true') parser.add_argument('-l', '--log-level', help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) From ed0704f2bda2f433de02513517b9e764d0a88923 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 13 Jul 2017 19:02:55 -0400 Subject: [PATCH 094/541] fixed rst link to guidelines leftover markdown --- README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index b0f4b298..ac1cd553 100644 --- a/README.rst +++ b/README.rst @@ -63,7 +63,9 @@ Contributions Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com -[Guidelines](https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md) +`Guidelines`_ + +.. _Guidelines: https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md Virtual env setup guide From 773c1daae9e4ecded280590e107981fc528ef2c5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 14 Jul 2017 11:51:48 -0400 Subject: [PATCH 095/541] [cmd line] made adaptor option case insensitive --- pyt/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index f54ea2f2..71b5b0c9 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -222,9 +222,9 @@ def main(command_line_args=sys.argv[1:]): local_modules, path) cfg_list.append(interprocedural_cfg) - if args.adaptor and args.adaptor.startswith('E'): + if args.adaptor and args.adaptor.lower().startswith('E'): framework_route_criteria = is_function - elif args.adaptor and args.adaptor.startswith('P'): + elif args.adaptor and args.adaptor.lower().startswith('P'): framework_route_criteria = is_function_without_leading_ else: framework_route_criteria = is_flask_route_function From d123664192bd6cc4abb22eda0582773b782076ab Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 14 Jul 2017 13:05:36 -0400 Subject: [PATCH 096/541] [cmd line parser]edit adaptor line --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 71b5b0c9..f8f79578 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -83,7 +83,7 @@ def parse_args(args): help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: FLASK(Default) or DJANGO.', + help='Choose an adaptor: Flask(Default) or Every or Pylons.', type=str) parser.add_argument('-db', '--create-database', help='Creates a sql file that can be used to' + From 2cf10adeb7eedef08b2ac3f7e9051d5e3fbe11e4 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 14 Jul 2017 13:14:04 -0400 Subject: [PATCH 097/541] [cmd line parser]silly lower then check uppercase bug --- pyt/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index f8f79578..fa37a36f 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -222,9 +222,9 @@ def main(command_line_args=sys.argv[1:]): local_modules, path) cfg_list.append(interprocedural_cfg) - if args.adaptor and args.adaptor.lower().startswith('E'): + if args.adaptor and args.adaptor.lower().startswith('e'): framework_route_criteria = is_function - elif args.adaptor and args.adaptor.lower().startswith('P'): + elif args.adaptor and args.adaptor.lower().startswith('p'): framework_route_criteria = is_function_without_leading_ else: framework_route_criteria = is_flask_route_function From 2e7592a525b32807bebfa2f5acbfeb465c5d60dc Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 14 Jul 2017 13:55:57 -0400 Subject: [PATCH 098/541] [comments] edit some doc strings --- pyt/base_cfg.py | 2 -- pyt/interprocedural_cfg.py | 5 +---- pyt/vulnerabilities.py | 12 ++++++------ 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index c734f93d..fde7701c 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -4,8 +4,6 @@ from .ast_helper import Arguments, get_call_names_as_string from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') ControlFlowNode = namedtuple('ControlFlowNode', diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index ce7aec08..38e35800 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -31,8 +31,6 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') @@ -387,8 +385,7 @@ def visit_Call(self, node): else: definition = local_definitions.get_definition(_id) - logger.debug("_id is %s", _id) - # "request.args.get" -> "get" + # e.g. "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] if definition: if isinstance(definition.node, ast.ClassDef): diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 3e86ef07..a754aafd 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -13,8 +13,7 @@ Vulnerability, VulnerabilityLog ) -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') + Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') @@ -218,11 +217,11 @@ class SinkArgsError(Exception): def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): - """Check if vulnerability is unknown seeing if a blackbox assignment is in trimmed_reassignment_nodes. + """Check if vulnerability is unknown by seeing if a blackbox assignment is in trimmed_reassignment_nodes. Args: trimmed_reassignment_nodes(list[AssignmentNode]): list of the reassignment nodes leading to the vulnerability. - blackbox_assignments(list[AssignmentNode]): list of blackbox assignments. + blackbox_assignments(set[AssignmentNode]): set of blackbox assignments. Returns: AssignmentNode or None @@ -249,6 +248,9 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black source(TriggerNode): TriggerNode of the source. sink(TriggerNode): TriggerNode of the sink. triggers(Triggers): Triggers of the CFG. + lattice(Lattice): The lattice we're analysing. + trim_reassigned_in(bool): Whether or not the trim option is set. + blackbox_assignments(set[AssignmentNode]): used in is_unknown. Returns: A Vulnerability if it exists, else None @@ -350,8 +352,6 @@ def find_vulnerabilities(cfg_list, analysis_type, A VulnerabilityLog with found vulnerabilities. """ definitions = parse(trigger_word_file) - logger.debug("definitions.sources is %s", definitions.sources) - logger.debug("definitions.sinks is %s", definitions.sinks) vulnerability_log = VulnerabilityLog() for cfg in cfg_list: From c20b8dfc5ca3b6db124e112e628b3bb930ccc87f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 14 Jul 2017 13:59:23 -0400 Subject: [PATCH 099/541] remove log line --- tests/vulnerabilities_across_files_test.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 13fa6c84..ebb5cb21 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -12,8 +12,6 @@ from pyt.lattice import Lattice from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class EngineTest(BaseTestCase): @@ -50,7 +48,6 @@ def test_no_false_positive_absolute_from_file_command_injection_3(self): def test_blackbox_library_call(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ From 63c9be298cd540eeb3dd547fffc844f01f35fc30 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 15 Jul 2017 14:58:50 -0400 Subject: [PATCH 100/541] [test cov] delete dead code and add more exclude_lines to coveragerc --- .coveragerc | 6 ++++++ pyt/analysis_base.py | 4 ++-- pyt/constraint_table.py | 12 ------------ 3 files changed, 8 insertions(+), 14 deletions(-) diff --git a/.coveragerc b/.coveragerc index 93a1cce9..01a5eca8 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,6 +1,12 @@ [report] exclude_lines = if __name__ == .__main__.: + raise NotImplementedError + pass + def print_lattice + def print_table + def __repr__ + def __str__ [run] omit = diff --git a/pyt/analysis_base.py b/pyt/analysis_base.py index bcdb73d1..488d3b8e 100644 --- a/pyt/analysis_base.py +++ b/pyt/analysis_base.py @@ -38,7 +38,7 @@ def equal(self, value, other): def build_lattice(self, cfg): pass + @abstractmethod def dep(self, q_1): """Represents the dep mapping from Schwartzbach.""" - for node in self.cfg.nodes: - yield node + pass diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index 26459bcd..0c166702 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -19,18 +19,6 @@ def constraint_join(cfg_nodes): return r -def constraint_meet(self, cfg_nodes): - """Finds the meet by looking up all given cfg nodes - and performing logical and.""" - r = 0 - for i in range(len(cfg_nodes)): - r = r | (0b1 << i) - - for e in cfg_nodes: - r = r & constraint_table[e] - return r - - def print_table(l): print('Constraint table:') for k, v in constraint_table.items(): From 7d8d6a375f9dc56b1971ba212a4fedb8c4b4fb5d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 17 Jul 2017 16:32:58 -0400 Subject: [PATCH 101/541] make diff of branch slightly smaller --- example/3.6/ffstrings.py | 10 ---------- pyt/constraint_table.py | 6 ------ pyt/lattice.py | 7 ------- pyt/vulnerabilities.py | 2 +- 4 files changed, 1 insertion(+), 24 deletions(-) delete mode 100644 example/3.6/ffstrings.py diff --git a/example/3.6/ffstrings.py b/example/3.6/ffstrings.py deleted file mode 100644 index df110488..00000000 --- a/example/3.6/ffstrings.py +++ /dev/null @@ -1,10 +0,0 @@ -import decimal - - -name = 'Fred' -greeting = f"Hello {name}" -width = 10 -precision = 4 -value = decimal.Decimal("12.34567") -result = f"result: {value:{width}.{precision}}" -print (result) \ No newline at end of file diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index 35d52228..26459bcd 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -3,14 +3,11 @@ Uses cfg node as key and operates on bitvectors in the form of ints.""" constraint_table = dict() -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') def initialize_constraint_table(cfg_list): """Collects all given cfg nodes and initializes the table with value 0.""" for cfg in cfg_list: - logger.debug("len(cfg.nodes) is %s", len(cfg.nodes)) constraint_table.update(dict.fromkeys(cfg.nodes, 0)) @@ -18,9 +15,6 @@ def constraint_join(cfg_nodes): """Looks up all cfg_nodes and joins the bitvectors by using logical or.""" r = 0 for e in cfg_nodes: - logger.debug("len(cfg_nodes) is %s", len(cfg_nodes)) - logger.debug("e is %s", e) - logger.debug("type(e) is %s", type(e)) r = r | constraint_table[e] return r diff --git a/pyt/lattice.py b/pyt/lattice.py index 1d8b4f65..125a8c2a 100644 --- a/pyt/lattice.py +++ b/pyt/lattice.py @@ -1,6 +1,4 @@ from .constraint_table import constraint_table -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class Lattice: @@ -38,15 +36,10 @@ def in_constraint(self, node1, node2): except KeyError: return False - logger.debug("constraint is %s", bin(constraint)) - logger.debug("value is %s", value) return constraint & value != 0 def print_lattice(cfg_list, analysis_type): - """ - Type of params is...? - """ nodes = list() for cfg in cfg_list: nodes.extend(cfg.nodes) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index c6efcc82..7c316b20 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -367,7 +367,7 @@ def find_vulnerabilities(cfg_list, analysis_type, """Find vulnerabilities in a list of CFGs from a trigger_word_file. Args: - cfg_list (list): the list of CFGs to scan. + cfg_list (list[CFG]): the list of CFGs to scan. trigger_word_file (string): file containing trigger words. Defaults to the flask trigger word file. From a32e5ead238fb69986d78b47306748aad9cfa8c1 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 17 Jul 2017 17:22:48 -0400 Subject: [PATCH 102/541] cleanup, make diff slightly smaller :/ --- .../nested_string_interpolation.py | 10 ----- pyt/base_cfg.py | 17 ++++----- pyt/vulnerabilities.py | 10 ++--- tests/vulnerabilities_across_files_test.py | 38 ++++++++++++++++++- 4 files changed, 48 insertions(+), 27 deletions(-) delete mode 100644 example/nested_functions_code/nested_string_interpolation.py diff --git a/example/nested_functions_code/nested_string_interpolation.py b/example/nested_functions_code/nested_string_interpolation.py deleted file mode 100644 index c4077d84..00000000 --- a/example/nested_functions_code/nested_string_interpolation.py +++ /dev/null @@ -1,10 +0,0 @@ -"""From django.nV, views.py""" - -name = request.POST.get('name', False) -upload_path = store_uploaded_file(name, request.FILES['file']) - -#A1 - Injection (SQLi) -curs = connection.cursor() -curs.execute( - "insert into taskManager_file ('name','path','project_id') values ('%s','%s',%s)" % - (name, upload_path, project_id)) \ No newline at end of file diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 96842b4b..a61d0ef8 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -456,7 +456,7 @@ def assign_tuple_target(self, node, right_hand_side_variables): new_ast_node = ast.Assign(target, value) new_ast_node.lineno = node.lineno - new_assignment_nodes.append( self.assignment_call_node(label.result, new_ast_node)) + new_assignment_nodes.append(self.assignment_call_node(label.result, new_ast_node)) else: label.result += ' = ' @@ -472,13 +472,13 @@ def assign_multi_target(self, node, right_hand_side_variables): new_assignment_nodes = list() for target in node.targets: - label = LabelVisitor() - label.visit(target) - left_hand_side = label.result - label.result += ' = ' - label.visit(node.value) + label = LabelVisitor() + label.visit(target) + left_hand_side = label.result + label.result += ' = ' + label.visit(node.value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) self.connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node @@ -593,7 +593,6 @@ def visit_While(self, node): def visit_For(self, node): self.undecided = True # Used for handling functions in for loops - #issue23 iterator_label = LabelVisitor() iterator = iterator_label.visit(node.iter) self.undecided = False @@ -616,11 +615,11 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): label = LabelVisitor() label.visit(node) + # node should always be a call if not isinstance(node, ast.Call): logger.debug("node that isnt a call in add_builtin_or_blackbox_call is %s", node) raise - call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) saved_undecided = self.undecided diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 7c316b20..5763a418 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -4,7 +4,7 @@ from .base_cfg import AssignmentNode from .framework_adaptor import TaintedNode -from .lattice import Lattice, print_lattice +from .lattice import Lattice from .trigger_definitions_parser import default_trigger_word_file, parse from .vars_visitor import VarsVisitor from .vulnerability_log import ( @@ -342,15 +342,12 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr cfg(CFG): The CFG to find vulnerabilities in. vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. + lattice(Lattice) + trim_reassigned_in(bool): Whether or not the trim option is set. """ triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) for sink in triggers.sinks: for source in triggers.sources: - # logger.debug("type(vulnerability_log(VulnerabilityLog)) is %s", type(vulnerability_log(VulnerabilityLog))) - # logger.debug("type(definitions) is %s", type(definitions)) - # for i, n in enumerate(cfg.nodes): - # logger.debug("#%s n.label is %s. in_constraint is %s", i, n.label, lattice.in_constraint(n, cfg.nodes[20])) - # logger.debug("cfg.nodes[20] is %s", cfg.nodes[20]) vulnerability = get_vulnerability(source, sink, triggers, @@ -379,7 +376,6 @@ def find_vulnerabilities(cfg_list, analysis_type, for cfg in cfg_list: - print_lattice([cfg], analysis_type) find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), trim_reassigned_in) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 4079c9d3..1a1b4184 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -86,7 +86,43 @@ def test_sink_with_result_of_user_defined_nested(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - HEY + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > User input at line 17, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: save_1_req_param = req_param + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: save_2_req_param = req_param + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 18: temp_2_inner_arg = req_param + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: inner_arg = temp_2_inner_arg + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 11: inner_ret_val = inner_arg + 'hey' + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 13: ret_inner = inner_ret_val + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: req_param = inner_arg + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 18: ¤call_2 = ret_inner + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 18: temp_1_outer_arg = ¤call_2 + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: outer_arg = temp_1_outer_arg + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 7: outer_ret_val = outer_arg + 'hey' + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 8: ret_outer = outer_ret_val + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: req_param = save_1_req_param + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 18: ¤call_1 = ret_outer + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 18: result = ¤call_1 + File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + > reaches line 19, trigger word "subprocess.call(": + subprocess.call(result,shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From e34884f1711d802846eb22458366283ee8990e98 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 17 Jul 2017 19:43:30 -0400 Subject: [PATCH 103/541] what was i even doing before those interviews --- .../built_in_with_user_defined_inner.py | 13 +++++++------ pyt/__main__.py | 3 ++- pyt/base_cfg.py | 12 +++--------- pyt/fixed_point.py | 3 +++ pyt/vars_visitor.py | 4 ++-- pyt/vulnerabilities.py | 1 - tests/nested_functions_test.py | 4 ++-- 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/example/nested_functions_code/built_in_with_user_defined_inner.py b/example/nested_functions_code/built_in_with_user_defined_inner.py index e86f225a..bcdd812b 100644 --- a/example/nested_functions_code/built_in_with_user_defined_inner.py +++ b/example/nested_functions_code/built_in_with_user_defined_inner.py @@ -4,11 +4,8 @@ # This is a lib we can't possibly see inside of import scrypt -app = Flask(__name__) -def outer(outer_arg): - outer_ret_val = outer_arg + 'hey' - return outer_ret_val +app = Flask(__name__) def inner(inner_arg): # inner_ret_val = inner_arg + 'hey' @@ -19,8 +16,12 @@ def inner(inner_arg): def menu(): req_param = request.form['suggestion'] - # builtin(blackbox()) - foo = set_cookie(scrypt.encrypt(req_param)) + # blackbox(user_defined_inner()) + foo = scrypt.encrypt(inner(req_param)) + + # This should work already + # foo = scrypt.encrypt(req_param) + subprocess.call(foo, shell=True) with open('menu.txt','r') as f: diff --git a/pyt/__main__.py b/pyt/__main__.py index 8b3a6cf8..fdeb8cf8 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -233,7 +233,8 @@ def main(command_line_args=sys.argv[1:]): # Add all the route functions to the cfg_list FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) - logger.debug("[DAVIDsTEA] cfg_list is %s", cfg_list) + logger.debug("[OSLO SO GOOD] cfg_list[0] is %s", cfg_list[0]) + logger.debug("[OSLO SO GOOD] len(cfg_list[0]) is %s", len(cfg_list[0])) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index a61d0ef8..5b9381dd 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -362,13 +362,6 @@ def visit_NameConstant(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - # logger.debug("label_visitor.result is %s", label_visitor.result) - # logger.debug("node.__class__.__name__ is %s", node.__class__.__name__) - # logger.debug("node is %s", node) - # logger.debug("node.lineno is %s", node.lineno) - # logger.debug("self.filenames[-1] is %s", self.filenames[-1]) - # # def __init__(self, label, ast_node, *, line_number, path): - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) def visit_Raise(self, node): @@ -627,8 +620,8 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): if isinstance(arg, ast.Call): self.undecided = False return_value_of_nested_call = self.visit(arg) - logger.debug("[DAVIDsTEA] return_value_of_nested_call is %s", return_value_of_nested_call) - logger.debug("[DAVIDsTEA] self.nodes is %s", self.nodes) + logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) # for n in self.nodes: # if n == return_value_of_nested_call: # raise @@ -637,6 +630,7 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): self.undecided = saved_undecided if not self.undecided: + logger.debug("[OSLO WAS SO GOOD] call_node is %s", call_node) self.nodes.append(call_node) if blackbox: diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 806c172a..e694466f 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -1,5 +1,7 @@ """This module implements the fixed point algorithm.""" from .constraint_table import constraint_table +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class FixedPointAnalysis(): @@ -18,6 +20,7 @@ def fixpoint_runner(self): q = self.cfg.nodes while q != []: + logger.debug("q[0] is %s", q[0]) x_i = constraint_table[q[0]] # x_i = q[0].old_constraint self.analysis.fixpointmethod(q[0]) # y = F_i(x_1, ..., x_n); y = constraint_table[q[0]] # y = q[0].new_constraint diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index 357438a7..7ca16ecc 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -98,10 +98,10 @@ def visit_Call(self, node): logger.debug("It is an attribute!") logger.debug("[voyager] arg.func.attr is %s", arg.func.attr) self.result.append('ret_' + arg.func.attr) - # raise + raise else: logger.debug("type(arg.func) is %s", type(arg.func)) - # raise + raise else: self.visit(arg) if node.keywords: diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 5763a418..525dc79b 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -374,7 +374,6 @@ def find_vulnerabilities(cfg_list, analysis_type, definitions = parse(trigger_word_file) vulnerability_log = VulnerabilityLog() - for cfg in cfg_list: find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 4bac3728..66604939 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -61,8 +61,8 @@ def test_built_in_with_user_defined_inner(self): for node in self.cfg.nodes: logger.debug("%s", node.label) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): - self.assertEqual(node.label, expected_label) + # for node, expected_label in zip(self.cfg.nodes, EXPECTED): + # self.assertEqual(node.label, expected_label) # def test_nested_string_interpolation(self): From cf429e7021eeb3146064790ad1950f5376e2d47e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 18 Jul 2017 13:15:04 -0400 Subject: [PATCH 104/541] rename l to lattice --- pyt/constraint_table.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index 0c166702..de7a0cea 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -19,7 +19,7 @@ def constraint_join(cfg_nodes): return r -def print_table(l): +def print_table(lattice): print('Constraint table:') for k, v in constraint_table.items(): - print(str(k) + ': ' + ','.join([str(n) for n in l.get_elements(v)])) + print(str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)])) From 4154ef9989ff6c679e9a1f52833e427bca87b067 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 18 Jul 2017 17:42:01 -0400 Subject: [PATCH 105/541] add the call node at least --- pyt/base_cfg.py | 10 ++++++++-- pyt/vulnerabilities.py | 45 +++++++++++++++++++++++------------------- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 5b9381dd..8451101b 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -45,6 +45,9 @@ def connect(self, successor): if isinstance(self, ConnectToExitNode) and\ not isinstance(successor, EntryOrExitNode): return + if successor.label.startswith("scrypt"): + logger.debug("trouble node is %s", successor) + # raise self.outgoing.append(successor) successor.ingoing.append(self) @@ -361,7 +364,7 @@ def visit_If(self, node): def visit_NameConstant(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - + logger.debug("[oslo] label_visitor.result is %s", label_visitor.result) return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) def visit_Raise(self, node): @@ -614,6 +617,7 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): raise call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + add_the_call_node = False saved_undecided = self.undecided for arg in node.args: @@ -625,11 +629,13 @@ def add_builtin_or_blackbox_call(self, node, blackbox=False): # for n in self.nodes: # if n == return_value_of_nested_call: # raise + return_value_of_nested_call.connect(call_node) + add_the_call_node = True logger.debug("[Voyager] arg is %s", arg) self.undecided = saved_undecided - if not self.undecided: + if not self.undecided or add_the_call_node: logger.debug("[OSLO WAS SO GOOD] call_node is %s", call_node) self.nodes.append(call_node) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 525dc79b..28c1a5f1 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -92,27 +92,32 @@ def find_assignments(assignment_nodes, source): # added in order to propagate reassignments of the source node new = [source.cfg_node] - update_assignments(new, assignment_nodes, source.cfg_node) + update_assignments(new, assignment_nodes) while new != old: old = new - update_assignments(new, assignment_nodes, source.cfg_node) + update_assignments(new, assignment_nodes) new.remove(source.cfg_node) # remove source node from result return new -def update_assignments(l, assignment_nodes, source): +def update_assignments(assignment_list, assignment_nodes): for node in assignment_nodes: - for other in l: - if node not in l: - append_if_reassigned(l, other, node) + for other in assignment_list: + if node not in assignment_list: + append_if_reassigned(assignment_list, other, node) -def append_if_reassigned(l, secondary, node): - # maybe: secondary in node.new_constraint and +def append_if_reassigned(assignment_list, secondary, node): try: if secondary.left_hand_side in node.right_hand_side_variables or\ secondary.left_hand_side == node.left_hand_side: - l.append(node) + assignment_list.append(node) + logger.debug("[blue bottle] yes gonna add Node %s", node) + + else: + logger.debug("[blue bottle] NOT gonna add Node %s", node) + pass + except AttributeError: print(secondary) print('EXCEPT' + secondary) @@ -120,19 +125,19 @@ def append_if_reassigned(l, secondary, node): def find_triggers(nodes, trigger_words): - """Find triggers from the trigger_word_list in the cfg. + """Find triggers from the trigger_word_list in the nodes. Args: - cfg(CFG): the CFG to find triggers in. + nodes(list[Node]): the nodes to find triggers in. trigger_word_list(list[string]): list of trigger words to look for. Returns: List of found TriggerNodes """ - l = list() + trigger_nodes = list() for node in nodes: - l.extend(iter(label_contains(node, trigger_words))) - return l + trigger_nodes.extend(iter(label_contains(node, trigger_words))) + return trigger_nodes def label_contains(node, trigger_words): @@ -219,10 +224,11 @@ class SinkArgsError(Exception): def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): - """Check if vulnerability is unknown by seeing if a blackbox assignment is in trimmed_reassignment_nodes. + """Check if vulnerability is unknown by seeing if a blackbox + assignment is in trimmed_reassignment_nodes. Args: - trimmed_reassignment_nodes(list[AssignmentNode]): list of the reassignment nodes leading to the vulnerability. + trimmed_reassignment_nodes(list[AssignmentNode]): reassignments leading to the vulnerability. blackbox_assignments(set[AssignmentNode]): set of blackbox assignments. Returns: @@ -261,9 +267,8 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() - # logger.debug("[voy] So source.secondary_nodes is %s THIS SHOULD INCLUE WHERE IT IS USED AS AN ARG",source.secondary_nodes) for node in source.secondary_nodes: - logger.debug("secondary node label is %s", node.label) + logger.debug("BLUE BOTTLE secondary node label is %s", node.label) logger.debug("[VOY] sink is %s", sink) logger.debug("[VOY] sink.cfg_node is %s", sink.cfg_node) @@ -280,7 +285,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black if 'ret_' in sarg: logger.debug("special sarg is %s", sarg) - logger.debug("[Voyager] MIA sink_args are %s", sink_args) + logger.debug("[Voyager] sink_args are %s", sink_args) secondary_node_in_sink_args = None if sink_args: logger.debug("secondary in sink list is %s", secondary_in_sink) @@ -342,7 +347,7 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr cfg(CFG): The CFG to find vulnerabilities in. vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. - lattice(Lattice) + lattice(Lattice): The lattice we're analysing. trim_reassigned_in(bool): Whether or not the trim option is set. """ triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) From 8db88bcbdccba733e341660d695c1b0810f834f6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 28 Jul 2017 13:06:10 -0400 Subject: [PATCH 106/541] horribly ugly but just pushing anyways, it does kind of work --- .../built_in_with_user_defined_inner.py | 13 +- .../nested_user_defined_function_calls.py | 1 - pyt/__main__.py | 2 +- pyt/base_cfg.py | 112 ++++++++++++++---- pyt/fixed_point.py | 1 + pyt/interprocedural_cfg.py | 18 ++- pyt/vulnerabilities.py | 26 +++- 7 files changed, 135 insertions(+), 38 deletions(-) diff --git a/example/nested_functions_code/built_in_with_user_defined_inner.py b/example/nested_functions_code/built_in_with_user_defined_inner.py index bcdd812b..c0f6fd47 100644 --- a/example/nested_functions_code/built_in_with_user_defined_inner.py +++ b/example/nested_functions_code/built_in_with_user_defined_inner.py @@ -7,10 +7,15 @@ app = Flask(__name__) +def outer(outer_arg): + outer_ret_val = outer_arg + 'hey' + return outer_ret_val + def inner(inner_arg): - # inner_ret_val = inner_arg + 'hey' - inner_ret_val = 'no more vuln' - return inner_ret_val + # no_vuln = 'no more vuln' + # return no_vuln + yes_vuln = inner_arg + 'hey' + return yes_vuln @app.route('/menu', methods=['POST']) def menu(): @@ -18,11 +23,13 @@ def menu(): # blackbox(user_defined_inner()) foo = scrypt.encrypt(inner(req_param)) + # foo = outer(inner(req_param)) # This should work already # foo = scrypt.encrypt(req_param) subprocess.call(foo, shell=True) + # subprocess.call(inner(req_param), shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/example/nested_functions_code/nested_user_defined_function_calls.py b/example/nested_functions_code/nested_user_defined_function_calls.py index 23dda4b2..541d8eba 100644 --- a/example/nested_functions_code/nested_user_defined_function_calls.py +++ b/example/nested_functions_code/nested_user_defined_function_calls.py @@ -2,7 +2,6 @@ def outer(outer_arg): outer_ret_val = outer_arg + 'hey' return outer_ret_val - def inner(inner_arg): inner_ret_val = inner_arg + 'hey' return inner_ret_val diff --git a/pyt/__main__.py b/pyt/__main__.py index fdeb8cf8..edcae34d 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -234,7 +234,7 @@ def main(command_line_args=sys.argv[1:]): FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) logger.debug("[OSLO SO GOOD] cfg_list[0] is %s", cfg_list[0]) - logger.debug("[OSLO SO GOOD] len(cfg_list[0]) is %s", len(cfg_list[0])) + # logger.debug("[OSLO SO GOOD] len(cfg_list[0]) is %s", len(cfg_list[0])) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 8451101b..7c81b99a 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -161,6 +161,20 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num """ super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) +class BBnode(AssignmentNode): + """Node used for handling restore nodes returning from function calls.""" + + def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): + """Create a Restore node. + + Args: + label (str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + """ + super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) + self.args = [] class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" @@ -520,15 +534,19 @@ def assignment_call_node(self, left_hand_label, ast_node): rhs_visitor.visit(ast_node.value) call = self.visit(ast_node.value) - + logger.debug("[NYSEC] call is %s", call) + logger.debug("[NYSEC] type(call) is %s", type(call)) call_label = '' call_assignment = None - if isinstance(call, AssignmentNode): # assignment after returned nonbuiltin + if isinstance(call, AssignmentNode): # assignment after returned nonbuiltin e.g. RestoreNode ¤call_1 = ret_outer + # raise call_label = call.left_hand_side call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], line_number=ast_node.lineno, path=self.filenames[-1]) call.connect(call_assignment) else: # assignment to builtin - call_label = call.label + logger.debug("call.left_hand_side is %s", call.left_hand_side) + raise + call_label = call.left_hand_side call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) if call in self.blackbox_calls: @@ -607,42 +625,96 @@ def visit_For(self, node): def visit_Expr(self, node): return self.visit(node.value) - def add_builtin_or_blackbox_call(self, node, blackbox=False): + def add_blackbox_or_builtin_call(self, node, blackbox=False): + """Processes a blackbox or builtin function when it is called. + + Increments self.function_call_index each time it is called, we can refer to it as N in the comments. + Create e.g. ¤call_1 = ret_func_foo RestoreNode. + Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. Visit the arguments if they're calls. (save_def_args_in_temp) + I do not think I care about this one actually -- Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) + Add RestoreNode to the end of the Nodes. + + Args: + node() + blackbox(bool): Whether or not it is a builtin or blackbox call. + Returns: + ??? + """ + # Increment function_call_index + self.function_call_index += 1 + saved_function_call_index = self.function_call_index + + self.undecided = False + label = LabelVisitor() label.visit(node) # node should always be a call - if not isinstance(node, ast.Call): - logger.debug("node that isnt a call in add_builtin_or_blackbox_call is %s", node) - raise - - call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) - add_the_call_node = False - - saved_undecided = self.undecided + assert isinstance(node, ast.Call) == True + + # Create e.g. ¤call_1 = ret_func_foo + LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) + RHS = 'ret_' + label.result + call_node = BBnode("", + LHS, + [], + line_number=node.lineno, + path=self.filenames[-1]) + visited_args = [] for arg in node.args: if isinstance(arg, ast.Call): - self.undecided = False return_value_of_nested_call = self.visit(arg) logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) # for n in self.nodes: # if n == return_value_of_nested_call: # raise - return_value_of_nested_call.connect(call_node) - add_the_call_node = True + visited_args.append(return_value_of_nested_call) + else: + visited_args.append(arg) logger.debug("[Voyager] arg is %s", arg) - self.undecided = saved_undecided + logger.debug("[VINEAPPLE] BLACKBOX visited_args is %s", visited_args) + + logger.debug("[VINEAPPLE] label.result is %s", label.result) + call_node.label = LHS + " = " + RHS + get_rhs = [] + for arg in visited_args: + try: + get_rhs.extend(arg.right_hand_side_variables) + except AttributeError: + get_rhs.append(arg) + logger.debug("[VINEAPPLE] get_rhs is %s", get_rhs) + call_node.right_hand_side_variables = get_rhs + call_node.args = get_rhs + # What is assigned to ret_func_foo in the builtin/blackbox case? + # What is assigned to ret_func_foo in the builtin/blackbox case? + # What is assigned to ret_func_foo in the builtin/blackbox case? + + + # ReturnNode + + + # the old way + # call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) + + # We need to know what the arguments are to a sink, + # we also need to know the arguments to a builtin or blackbox so we can have a mapping of + # e.g. arg1 taints return value and arg2 does not. + + + # call save_def_args_in_temp() + # call_args, def_args, line_number, saved_function_call_index + + # args_mapping = save_def_args_in_temp(call_args???, def_args???, node.lineno, saved_function_call_index) + - if not self.undecided or add_the_call_node: - logger.debug("[OSLO WAS SO GOOD] call_node is %s", call_node) - self.nodes.append(call_node) if blackbox: self.blackbox_calls.add(call_node) - self.undecided = False + self.nodes[-1].connect(call_node) + self.nodes.append(call_node) return call_node diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index e694466f..3c085ef8 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -21,6 +21,7 @@ def fixpoint_runner(self): while q != []: logger.debug("q[0] is %s", q[0]) + logger.debug("type(q[0]) is %s", type(q[0])) x_i = constraint_table[q[0]] # x_i = q[0].old_constraint self.analysis.fixpointmethod(q[0]) # y = F_i(x_1, ..., x_n); y = constraint_table[q[0]] # y = q[0].new_constraint diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index b528ae70..dc75cbbe 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -402,15 +402,11 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index): for node in function_nodes: # Only Return's and Raise's can be of type ConnectToExitNode if isinstance(node, ConnectToExitNode): - logger.debug("ConnectToExitNode is %s", node) - # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node) - # logger.debug("PROCESS dir(call_node) being processed in return_handler is %s", dir(call_node)) - # logger.debug("PROCESS dir(call_node.func) being processed in return_handler is %s", dir(call_node.func)) - # logger.debug("PROCESS call_node being processed in return_handler is %s", call_node.func.id) - # Create e.g. ¤call_1 = ret_func_foo RestoreNode LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) + logger.debug("flux call_node.func is %s", call_node.func) RHS = 'ret_' + get_call_names_as_string(call_node.func) + logger.debug("flux RHS is %s", RHS) return_node = RestoreNode(LHS + ' = ' + RHS, LHS, [RHS], @@ -433,7 +429,8 @@ def process_function(self, call_node, definition): Notes: Page 31 in the original thesis, but changed a little. - We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyways, that we return in this function. + We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyway, that we return in this function. + e.g. ret_func_foo gets assigned to visit_Return. Args: call_node(ast.Call) : The node that calls the definition. @@ -557,7 +554,7 @@ def visit_Call(self, node): last_attribute = _id.rpartition('.')[-1] if definition: if isinstance(definition.node, ast.ClassDef): - self.add_builtin_or_blackbox_call(node) + self.add_blackbox_or_builtin_call(node) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False return self.process_function(node, definition) @@ -566,9 +563,10 @@ def visit_Call(self, node): 'ClassDef, cannot add the function ') elif last_attribute not in NOT_A_BLACKBOX: # Mark the call as a blackbox because we don't have the definition - return self.add_builtin_or_blackbox_call(node, blackbox=True) + return self.add_blackbox_or_builtin_call(node, blackbox=True) logger.debug("[LUVTEA] nodes are %s", self.nodes[-1]) - return self.add_builtin_or_blackbox_call(node) + logger.debug("[WhyNot] nodes are %s", self.nodes[-1]) + return self.add_blackbox_or_builtin_call(node) def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): """ diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 28c1a5f1..f12a067c 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -2,7 +2,7 @@ from collections import namedtuple -from .base_cfg import AssignmentNode +from .base_cfg import AssignmentNode, BBnode, RestoreNode from .framework_adaptor import TaintedNode from .lattice import Lattice from .trigger_definitions_parser import default_trigger_word_file, parse @@ -243,8 +243,27 @@ def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): def get_sink_args(cfg_node): vv = VarsVisitor() - vv.visit(cfg_node.ast_node) - return vv.result + logger.debug("[VINEAPPLE] cfg_node is %s", cfg_node) + logger.debug("[VINEAPPLE] cfg_node.ast_node is %s", cfg_node.ast_node) + logger.debug("[VINEAPPLE] type(cfg_node.ast_node) is %s", type(cfg_node.ast_node)) + + other_results = list() + if isinstance(cfg_node, BBnode): + logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) + for arg in cfg_node.args: + logger.debug("arg is %s", arg) + logger.debug("type of arg is %s", type(arg)) + if isinstance(arg, RestoreNode): + other_results.append(arg.left_hand_side) + else: + vv.visit(arg) + logger.debug("[VINEAPPLE] So vv.result is %s", vv.result) + logger.debug("[VINEAPPLE] So other_results is %s", other_results) + # raise + else: + vv.visit(cfg_node.ast_node) + + return vv.result + other_results def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, blackbox_assignments): @@ -281,6 +300,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) + logger.debug("[VINEAPPLE] sink_args is %s", sink_args) for sarg in sink_args: if 'ret_' in sarg: logger.debug("special sarg is %s", sarg) From db8ca1937bcf27b1dc4c8c62702f112689c176a9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 28 Jul 2017 14:59:06 -0400 Subject: [PATCH 107/541] So ret_html.replace('{{ param }}', param) and call_3 = ret_make_response(html.replace('{{ param }}', param)) are both popping --- ....py => builtin_with_user_defined_inner.py} | 8 -- ...sink_with_result_of_user_defined_nested.py | 1 - .../sink_with_user_defined_inner.py | 1 - pyt/base_cfg.py | 8 +- pyt/vulnerabilities.py | 17 +++-- tests/nested_functions_test.py | 4 +- tests/vulnerabilities_across_files_test.py | 76 +++++++++++++------ 7 files changed, 69 insertions(+), 46 deletions(-) rename example/nested_functions_code/{built_in_with_user_defined_inner.py => builtin_with_user_defined_inner.py} (75%) diff --git a/example/nested_functions_code/built_in_with_user_defined_inner.py b/example/nested_functions_code/builtin_with_user_defined_inner.py similarity index 75% rename from example/nested_functions_code/built_in_with_user_defined_inner.py rename to example/nested_functions_code/builtin_with_user_defined_inner.py index c0f6fd47..f60cebe9 100644 --- a/example/nested_functions_code/built_in_with_user_defined_inner.py +++ b/example/nested_functions_code/builtin_with_user_defined_inner.py @@ -12,8 +12,6 @@ def outer(outer_arg): return outer_ret_val def inner(inner_arg): - # no_vuln = 'no more vuln' - # return no_vuln yes_vuln = inner_arg + 'hey' return yes_vuln @@ -23,13 +21,7 @@ def menu(): # blackbox(user_defined_inner()) foo = scrypt.encrypt(inner(req_param)) - # foo = outer(inner(req_param)) - - # This should work already - # foo = scrypt.encrypt(req_param) - subprocess.call(foo, shell=True) - # subprocess.call(inner(req_param), shell=True) with open('menu.txt','r') as f: menu = f.read() diff --git a/example/nested_functions_code/sink_with_result_of_user_defined_nested.py b/example/nested_functions_code/sink_with_result_of_user_defined_nested.py index 8ddbfd55..2d5952a4 100644 --- a/example/nested_functions_code/sink_with_result_of_user_defined_nested.py +++ b/example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -9,7 +9,6 @@ def outer(outer_arg): def inner(inner_arg): inner_ret_val = inner_arg + 'hey' - # inner_ret_val = 'no more vuln' return inner_ret_val @app.route('/menu', methods=['POST']) diff --git a/example/nested_functions_code/sink_with_user_defined_inner.py b/example/nested_functions_code/sink_with_user_defined_inner.py index 157e4816..2eb6d7a3 100644 --- a/example/nested_functions_code/sink_with_user_defined_inner.py +++ b/example/nested_functions_code/sink_with_user_defined_inner.py @@ -9,7 +9,6 @@ def outer(outer_arg): def inner(inner_arg): inner_ret_val = inner_arg + 'hey' - # inner_ret_val = 'no more vuln' return inner_ret_val @app.route('/menu', methods=['POST']) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 7c81b99a..29350c6a 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -681,9 +681,15 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): get_rhs = [] for arg in visited_args: try: + logger.debug("[BLUESTONE sucks] type(arg.right_hand_side_variables) is %s", arg.right_hand_side_variables) get_rhs.extend(arg.right_hand_side_variables) except AttributeError: - get_rhs.append(arg) + from .vars_visitor import VarsVisitor + vv = VarsVisitor() + vv.visit(arg) + logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) + logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) + get_rhs.extend(vv.result) logger.debug("[VINEAPPLE] get_rhs is %s", get_rhs) call_node.right_hand_side_variables = get_rhs call_node.args = get_rhs diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index f12a067c..1781d94f 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -249,14 +249,15 @@ def get_sink_args(cfg_node): other_results = list() if isinstance(cfg_node, BBnode): - logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) - for arg in cfg_node.args: - logger.debug("arg is %s", arg) - logger.debug("type of arg is %s", type(arg)) - if isinstance(arg, RestoreNode): - other_results.append(arg.left_hand_side) - else: - vv.visit(arg) + # logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) + # for arg in cfg_node.args: + # logger.debug("arg is %s", arg) + # logger.debug("type of arg is %s", type(arg)) + # if isinstance(arg, RestoreNode): + # other_results.append(arg.left_hand_side) + # else: + # vv.visit(arg) + other_results = cfg_node.args logger.debug("[VINEAPPLE] So vv.result is %s", vv.result) logger.debug("[VINEAPPLE] So other_results is %s", other_results) # raise diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 66604939..a1c84a8d 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -46,9 +46,9 @@ def test_nested_user_defined_function_calls(self): for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - def test_built_in_with_user_defined_inner(self): + def test_builtin_with_user_defined_inner(self): - path = os.path.normpath('example/nested_functions_code/built_in_with_user_defined_inner.py') + path = os.path.normpath('example/nested_functions_code/builtin_with_user_defined_inner.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 1a1b4184..736ca9e2 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -70,13 +70,39 @@ def test_blackbox_library_call(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_built_in_with_user_defined_inner(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/built_in_with_user_defined_inner.py') + def test_builtin_with_user_defined_inner(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/builtin_with_user_defined_inner.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + logger.debug("vulnerability_description is %s", vulnerability_description) EXPECTED_VULNERABILITY_DESCRIPTION = """ - HEY + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > User input at line 22, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 14: save_2_req_param = req_param + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 25: temp_2_inner_arg = req_param + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 14: inner_arg = temp_2_inner_arg + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 17: yes_vuln = inner_arg + 'hey' + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 18: ret_inner = yes_vuln + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 14: req_param = inner_arg + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 25: ¤call_2 = ret_inner + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 25: ¤call_1 = ret_scrypt.encrypt(inner(req_param)) + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > Line 25: foo = ¤call_1 + File: example/nested_functions_code/builtin_with_user_defined_inner.py + > reaches line 31, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(foo,shell=True) + This vulnerability is unknown due to: Label: foo = ¤call_1 """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -87,7 +113,7 @@ def test_sink_with_result_of_user_defined_nested(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > User input at line 17, trigger word "form[": + > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -95,19 +121,19 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: save_2_req_param = req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 18: temp_2_inner_arg = req_param + > Line 17: temp_2_inner_arg = req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: inner_arg = temp_2_inner_arg File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 11: inner_ret_val = inner_arg + 'hey' File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 13: ret_inner = inner_ret_val + > Line 12: ret_inner = inner_ret_val File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: req_param = inner_arg File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 18: ¤call_2 = ret_inner + > Line 17: ¤call_2 = ret_inner File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 18: temp_1_outer_arg = ¤call_2 + > Line 17: temp_1_outer_arg = ¤call_2 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: outer_arg = temp_1_outer_arg File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -117,12 +143,12 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: req_param = save_1_req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 18: ¤call_1 = ret_outer + > Line 17: ¤call_1 = ret_outer File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 18: result = ¤call_1 + > Line 17: result = ¤call_1 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > reaches line 19, trigger word "subprocess.call(": - subprocess.call(result,shell=True) + > reaches line 18, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(result,shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -133,40 +159,40 @@ def test_sink_with_user_defined_inner(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_user_defined_inner.py - > User input at line 17, trigger word "form[": + > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: save_1_req_param = req_param + > Line 6: save_2_req_param = req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: save_2_req_param = req_param + > Line 10: save_3_req_param = req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 19: temp_2_inner_arg = req_param + > Line 18: temp_3_inner_arg = req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: inner_arg = temp_2_inner_arg + > Line 10: inner_arg = temp_3_inner_arg File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 11: inner_ret_val = inner_arg + 'hey' File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 13: ret_inner = inner_ret_val + > Line 12: ret_inner = inner_ret_val File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 10: req_param = inner_arg File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 19: ¤call_2 = ret_inner + > Line 18: ¤call_3 = ret_inner File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 19: temp_1_outer_arg = ¤call_2 + > Line 18: temp_2_outer_arg = ¤call_3 File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: outer_arg = temp_1_outer_arg + > Line 6: outer_arg = temp_2_outer_arg File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 7: outer_ret_val = outer_arg + 'hey' File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 8: ret_outer = outer_ret_val File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: req_param = save_1_req_param + > Line 6: req_param = save_2_req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 19: ¤call_1 = ret_outer + > Line 18: ¤call_2 = ret_outer File: example/nested_functions_code/sink_with_user_defined_inner.py - > reaches line 19, trigger word "subprocess.call(": - subprocess.call(outer(inner(req_param)),shell=True) + > reaches line 18, trigger word "subprocess.call(": + ¤call_1 = ret_subprocess.call(outer(inner(req_param)),shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From c9d830ef383c18ba599f51e4cb4110c359a17657 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 31 Jul 2017 21:37:54 -0400 Subject: [PATCH 108/541] Very good stuffgit status! 3 problems found and solved --- pyt/base_cfg.py | 117 ++++++++++++++++++++++++++++++++++--- pyt/interprocedural_cfg.py | 26 ++++++++- pyt/vars_visitor.py | 4 +- 3 files changed, 134 insertions(+), 13 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 29350c6a..614abf92 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -45,9 +45,10 @@ def connect(self, successor): if isinstance(self, ConnectToExitNode) and\ not isinstance(successor, EntryOrExitNode): return - if successor.label.startswith("scrypt"): - logger.debug("trouble node is %s", successor) - # raise + logger.debug("type(successor) is %s", type(successor)) + # if successor.label.startswith("scrypt"): + # logger.debug("trouble node is %s", successor) + # raise self.outgoing.append(successor) successor.ingoing.append(self) @@ -640,30 +641,98 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): Returns: ??? """ + + logger.debug("[qq] ENTER self.blackbox_calls is %s", self.blackbox_calls) # Increment function_call_index self.function_call_index += 1 saved_function_call_index = self.function_call_index self.undecided = False + + label = LabelVisitor() + logger.debug("[BLUESTONE sucks] node is %s", node) + logger.debug("[BLUESTONE sucks] node.func is %s", node.func) + if isinstance(node.func, ast.Name): + logger.debug("[BLUESTONE sucks] node.func.attr is %s", node.func.id) + pass + elif isinstance(node.func, ast.Attribute): + attribute = node.func + + logger.debug("HERE COMES THE CRAZY AST CODE") + logger.debug("[3rd rail] attribute.attr is %s", attribute.attr) + logger.debug("[3rd rail] attribute.value is %s", attribute.value) + logger.debug("[3rd rail] type(attribute.value is %s", type(attribute.value)) + if isinstance(attribute.value, ast.Name): + logger.debug("[3rd rail] NAMENAMENAME dir(attribute.value) is %s", dir(attribute.value)) + elif isinstance(attribute.value, ast.Attribute): + logger.debug("[3rd rail] ATTRIBUTE ATTRIBUTE ATTRIBUTE dir(attribute.value) is %s", dir(attribute.value)) + elif isinstance(attribute.value, ast.Call): + the_call_before = attribute.value + logger.debug("the_call_before.args is %s", the_call_before.args) + for the_call_before_arg in the_call_before.args: + label = LabelVisitor() + label.visit(the_call_before_arg) + logger.debug("the_call_before_arg is %s, and label.result is %s", the_call_before_arg, label.result) + logger.debug("[3rd rail] CALL CALL CALL dir(attribute.value) is %s", dir(attribute.value)) + elif isinstance(attribute.value, ast.Str): + label = LabelVisitor() + label.visit(attribute.value) + logger.debug("[3rd rail] string attribute.value was %s", label.result) + else: + logger.debug("type(attribute.value) is %s", type(attribute.value)) + raise + else: + raise + logger.debug("AFTER THE CRAZY AST CODE") + logger.debug("[3rd rail] node is %s", node) + logger.debug("[3rd rail] node.args is %s", node.args) + logger.debug("[3rd rail] node.func is %s", node.func) + logger.debug("[3rd rail] node.keywords is %s", node.keywords) + logger.debug("[3rd rail] dir(node) is %s", dir(node)) + label.visit(node) # node should always be a call assert isinstance(node, ast.Call) == True + + index = label.result.find('(') + if index == -1: + logger.warning("No ( in a call") + raise + else: + logger.debug("[3rd rail] the call is %s", label.result[:index]) + logger.debug("[3rd rail] the args are %s", label.result[index:]) + logger.debug("[3rd rail] len(node.args) is %s", len(node.args)) + logger.debug("[3rd rail] len(node.keywords) is %s", len(node.keywords)) + try: + logger.debug("[3rd rail] len(node.starargs) is %s", len(node.starargs)) + except AttributeError: + pass + try: + logger.debug("[3rd rail] len(node.kwargs) is %s", len(node.kwargs)) + except AttributeError: + pass + # Create e.g. ¤call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) - RHS = 'ret_' + label.result + RHS = 'ret_' + label.result[:index] + '(' + logger.debug("[Dominique bistro] RHS is %s", RHS) call_node = BBnode("", LHS, [], line_number=node.lineno, path=self.filenames[-1]) + visited_args = [] + instead_of_dot_dot_dot = [] for arg in node.args: if isinstance(arg, ast.Call): + logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) return_value_of_nested_call = self.visit(arg) + logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) # for n in self.nodes: @@ -671,12 +740,29 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # raise return_value_of_nested_call.connect(call_node) visited_args.append(return_value_of_nested_call) + + logger.debug("[3rd rail] should we add %s to instead_of_dot_dot_dot?", return_value_of_nested_call.left_hand_side) + instead_of_dot_dot_dot.append(return_value_of_nested_call.left_hand_side) else: + label = LabelVisitor() + label.visit(arg) + logger.debug("arg is %s, and label.result is %s", arg, label.result) + instead_of_dot_dot_dot.append(label.result) visited_args.append(arg) logger.debug("[Voyager] arg is %s", arg) - logger.debug("[VINEAPPLE] BLACKBOX visited_args is %s", visited_args) + logger.debug("[3rd rail] instead_of_dot_dot_dot is %s", instead_of_dot_dot_dot) + logger.debug("[3rd rail] visited_args is %s", visited_args) logger.debug("[VINEAPPLE] label.result is %s", label.result) + if len(instead_of_dot_dot_dot) > 0: + for arg in instead_of_dot_dot_dot: + RHS = RHS + arg + ", " + logger.debug("[3rd rail] RHS[:len(RHS)-2] is %s", RHS[:len(RHS)-2]) + # Replace the last ", " with a ) + RHS = RHS[:len(RHS)-2] + ')' + else: + RHS = RHS + ')' + logger.debug("[Dominique bistro] RHS is now %s", RHS) call_node.label = LHS + " = " + RHS get_rhs = [] for arg in visited_args: @@ -690,9 +776,16 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) get_rhs.extend(vv.result) - logger.debug("[VINEAPPLE] get_rhs is %s", get_rhs) - call_node.right_hand_side_variables = get_rhs - call_node.args = get_rhs + logger.debug("[qq] get_rhs is %s", get_rhs) + # Should strings be excluded from instead_of_dot_dot_dot? It isn't like they'll ever be on an LHS + logger.debug("[qq] instead_of_dot_dot_dot is %s", instead_of_dot_dot_dot) + + # This is where we'll ask the user, then save the mapping or just use the mapping. + # Or perhaps we'll do that in vulnerabilities.py + + + call_node.right_hand_side_variables = instead_of_dot_dot_dot + call_node.args = instead_of_dot_dot_dot # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? @@ -717,11 +810,17 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): if blackbox: - self.blackbox_calls.add(call_node) + logger.debug("[qq] call_node being added to blackbox_calls is %s", call_node) + # This makes so much sense! + self.blackbox_assignments.add(call_node) self.nodes[-1].connect(call_node) self.nodes.append(call_node) + logger.debug("[Dominique bistro] call_node is %s", call_node) + self.function_return_stack.pop() + logger.debug("[qq] EXIT self.blackbox_calls is %s", self.blackbox_calls) + return call_node def visit_Name(self, node): diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index dc75cbbe..c068924a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -35,7 +35,8 @@ enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') -NOT_A_BLACKBOX = set(['Flask', +NOT_A_BLACKBOX = set(['get' + 'Flask', 'run', 'get', 'replace', @@ -191,6 +192,7 @@ def visit_Return(self, node): label.visit(node) this_function_name = self.function_return_stack[-1] + LHS = 'ret_' + this_function_name try: rhs_visitor = RHSVisitor() @@ -198,7 +200,23 @@ def visit_Return(self, node): except AttributeError: rhs_visitor.result = 'EmptyReturn' - LHS = 'ret_' + this_function_name + if isinstance(node.value, ast.Call): + return_value_of_call = self.visit(node.value) + logger.debug("idk") + logger.debug("return_value_of_call is %s", return_value_of_call) + logger.debug("return_value_of_call.left_hand_side is %s", return_value_of_call.left_hand_side) + logger.debug("LHS is %s", LHS) + logger.debug("this is shit due to return_value_of_call.left_hand_side being %s", return_value_of_call.left_hand_side) + return_node = ReturnNode(LHS + ' = ' + return_value_of_call.left_hand_side, + LHS, return_value_of_call.left_hand_side, + node, line_number=node.lineno, + path=self.filenames[-1]) + return_value_of_call.connect(return_node) + self.nodes.append(return_node) + return return_value_of_call + + logger.debug("returning a return node with RHS label.result %s", label.result) + logger.debug("returning a return node with RHS rhs_visitor.result %s", rhs_visitor.result) return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, rhs_visitor.result, node, line_number=node.lineno, @@ -506,6 +524,9 @@ def visit_and_get_function_nodes(self, definition): def visit_Call(self, node): _id = get_call_names_as_string(node.func) + logger.debug("in visit_Call, _id is %s", _id) + # if _id.startswith('request'): + # raise self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] @@ -552,6 +573,7 @@ def visit_Call(self, node): # e.g. "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] + logger.debug("[Dominique] last_attribute is %s", last_attribute) if definition: if isinstance(definition.node, ast.ClassDef): self.add_blackbox_or_builtin_call(node) diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index 7ca16ecc..a36a6cb7 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -96,9 +96,9 @@ def visit_Call(self, node): self.result.append('ret_' + arg.func.id) elif isinstance(arg.func, ast.Attribute): logger.debug("It is an attribute!") - logger.debug("[voyager] arg.func.attr is %s", arg.func.attr) + logger.debug("[3rd rail] arg.func.attr is %s", arg.func.attr) self.result.append('ret_' + arg.func.attr) - raise + # raise else: logger.debug("type(arg.func) is %s", type(arg.func)) raise From e838ece15960465f51ff56f29212c8dd10b81d18 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 1 Aug 2017 12:41:41 -0400 Subject: [PATCH 109/541] fixed RHSvars of bbbi calls --- .../blackbox_library_call.py | 2 +- pyt/base_cfg.py | 67 +++++++++++-------- 2 files changed, 40 insertions(+), 29 deletions(-) diff --git a/example/vulnerable_code_across_files/blackbox_library_call.py b/example/vulnerable_code_across_files/blackbox_library_call.py index f6803a4b..eddf5c5e 100644 --- a/example/vulnerable_code_across_files/blackbox_library_call.py +++ b/example/vulnerable_code_across_files/blackbox_library_call.py @@ -12,7 +12,7 @@ def menu(): param = request.args.get('suggestion') # This is a function we can't possibly see inside of - foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + # foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') hey = command subprocess.call(hey, shell=True) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 614abf92..51965a37 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -726,8 +726,9 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): line_number=node.lineno, path=self.filenames[-1]) - visited_args = [] - instead_of_dot_dot_dot = [] + # visited_args = [] + visual_args = [] + rhs_vars = [] for arg in node.args: if isinstance(arg, ast.Call): logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) @@ -739,23 +740,32 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # if n == return_value_of_nested_call: # raise return_value_of_nested_call.connect(call_node) - visited_args.append(return_value_of_nested_call) + # visited_args.append(return_value_of_nested_call) - logger.debug("[3rd rail] should we add %s to instead_of_dot_dot_dot?", return_value_of_nested_call.left_hand_side) - instead_of_dot_dot_dot.append(return_value_of_nested_call.left_hand_side) + logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) + visual_args.append(return_value_of_nested_call.left_hand_side) + rhs_vars.append(return_value_of_nested_call.left_hand_side) else: label = LabelVisitor() label.visit(arg) logger.debug("arg is %s, and label.result is %s", arg, label.result) - instead_of_dot_dot_dot.append(label.result) - visited_args.append(arg) + visual_args.append(label.result) + # visited_args.append(arg) + + from .vars_visitor import VarsVisitor + vv = VarsVisitor() + vv.visit(arg) + logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) + logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) + rhs_vars.extend(vv.result) + logger.debug("[Voyager] arg is %s", arg) - logger.debug("[3rd rail] instead_of_dot_dot_dot is %s", instead_of_dot_dot_dot) - logger.debug("[3rd rail] visited_args is %s", visited_args) + logger.debug("[3rd rail] visual_args is %s", visual_args) + # logger.debug("[3rd rail] visited_args is %s", visited_args) logger.debug("[VINEAPPLE] label.result is %s", label.result) - if len(instead_of_dot_dot_dot) > 0: - for arg in instead_of_dot_dot_dot: + if len(visual_args) > 0: + for arg in visual_args: RHS = RHS + arg + ", " logger.debug("[3rd rail] RHS[:len(RHS)-2] is %s", RHS[:len(RHS)-2]) # Replace the last ", " with a ) @@ -764,28 +774,29 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): RHS = RHS + ')' logger.debug("[Dominique bistro] RHS is now %s", RHS) call_node.label = LHS + " = " + RHS - get_rhs = [] - for arg in visited_args: - try: - logger.debug("[BLUESTONE sucks] type(arg.right_hand_side_variables) is %s", arg.right_hand_side_variables) - get_rhs.extend(arg.right_hand_side_variables) - except AttributeError: - from .vars_visitor import VarsVisitor - vv = VarsVisitor() - vv.visit(arg) - logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) - logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) - get_rhs.extend(vv.result) - logger.debug("[qq] get_rhs is %s", get_rhs) - # Should strings be excluded from instead_of_dot_dot_dot? It isn't like they'll ever be on an LHS - logger.debug("[qq] instead_of_dot_dot_dot is %s", instead_of_dot_dot_dot) + # get_rhs = [] + # for arg in visited_args: + # try: + # logger.debug("[BLUESTONE sucks] type(arg.right_hand_side_variables) is %s", arg.right_hand_side_variables) + # get_rhs.extend(arg.right_hand_side_variables) + # except AttributeError: + # from .vars_visitor import VarsVisitor + # vv = VarsVisitor() + # vv.visit(arg) + # logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) + # logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) + # get_rhs.extend(vv.result) + # logger.debug("[qq] get_rhs is %s", get_rhs) + # Should strings be excluded from visual_args? It isn't like they'll ever be on an LHS + logger.debug("[qq] visual_args is %s", visual_args) + logger.debug("[qq] rhs_vars is %s", rhs_vars) # This is where we'll ask the user, then save the mapping or just use the mapping. # Or perhaps we'll do that in vulnerabilities.py - call_node.right_hand_side_variables = instead_of_dot_dot_dot - call_node.args = instead_of_dot_dot_dot + call_node.right_hand_side_variables = rhs_vars + call_node.args = rhs_vars # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? From 9d604d2e17c7537217988d032669002ef7943962 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 1 Aug 2017 13:19:45 -0400 Subject: [PATCH 110/541] Fixed the return_stack problems by only popping and pushing on user defined funcs --- pyt/base_cfg.py | 8 +++++--- pyt/interprocedural_cfg.py | 21 +++++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 51965a37..7eac6c5a 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -731,9 +731,9 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): rhs_vars = [] for arg in node.args: if isinstance(arg, ast.Call): - logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) + # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) return_value_of_nested_call = self.visit(arg) - logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) + # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) # for n in self.nodes: @@ -829,7 +829,9 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): self.nodes.append(call_node) logger.debug("[Dominique bistro] call_node is %s", call_node) - self.function_return_stack.pop() + # WHY DO WE DO THIS? + # WHEN DO WE ACTUALLY PUSH? + # self.function_return_stack.pop() logger.debug("[qq] EXIT self.blackbox_calls is %s", self.blackbox_calls) return call_node diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index c068924a..c6dea4ff 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -110,6 +110,7 @@ def init_function_cfg(self, node, module_definitions): self.module_definitions_stack.append(module_definitions) self.function_names.append(node.name) + logger.debug("[BRC] node.name being added to function_return_stack is %s", node.name) self.function_return_stack.append(node.name) entry_node = self.append_node(EntryOrExitNode("Entry function")) @@ -191,14 +192,19 @@ def visit_Return(self, node): label = LabelVisitor() label.visit(node) - this_function_name = self.function_return_stack[-1] - LHS = 'ret_' + this_function_name try: rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) except AttributeError: rhs_visitor.result = 'EmptyReturn' + logger.debug("returning a return node with RHS label.result %s", label.result) + logger.debug("returning a return node with RHS rhs_visitor.result %s", rhs_visitor.result) + + this_function_name = self.function_return_stack[-1] + logger.debug("[BRC] this_function_name is %s", this_function_name) + LHS = 'ret_' + this_function_name + if isinstance(node.value, ast.Call): return_value_of_call = self.visit(node.value) @@ -215,8 +221,6 @@ def visit_Return(self, node): self.nodes.append(return_node) return return_value_of_call - logger.debug("returning a return node with RHS label.result %s", label.result) - logger.debug("returning a return node with RHS rhs_visitor.result %s", rhs_visitor.result) return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, rhs_visitor.result, node, line_number=node.lineno, @@ -483,6 +487,8 @@ def process_function(self, call_node, definition): self.filenames.pop() # Maybe move after restore nodes self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) self.return_handler(call_node, function_nodes, saved_function_call_index) + # This pop corresponds to a push from init_function_cfg, I think + logger.debug("[BRC] So we are now popping off %s from the function_return_stack", self.function_return_stack[-1]) self.function_return_stack.pop() logger.debug("[FOR COMMENTS] last node is %s", self.nodes[-1]) logger.debug("[FOR COMMENTS] type of last node is %s", type(self.nodes[-1])) @@ -524,10 +530,12 @@ def visit_and_get_function_nodes(self, definition): def visit_Call(self, node): _id = get_call_names_as_string(node.func) - logger.debug("in visit_Call, _id is %s", _id) + logger.debug("[BRC]in visit_Call, _id is %s", _id) # if _id.startswith('request'): # raise - self.function_return_stack.append(_id) + # Why do we always do this? We should only do it if it is user defined + # If it is user defined, then we'll append in init_function_cfg, so remove this line + # self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] @@ -579,6 +587,7 @@ def visit_Call(self, node): self.add_blackbox_or_builtin_call(node) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False + self.function_return_stack.append(_id) return self.process_function(node, definition) else: raise Exception('Definition was neither FunctionDef or ' + From 99aea0580f1ac81afaf38030bf63f2ebb4d0acc8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 2 Aug 2017 13:07:20 -0400 Subject: [PATCH 111/541] [test] Fix liveness tests with BBnodes --- pyt/liveness.py | 32 +++++++++++++++++++------------- tests/liveness_test.py | 18 ++++++++++-------- 2 files changed, 29 insertions(+), 21 deletions(-) diff --git a/pyt/liveness.py b/pyt/liveness.py index f8eb0209..0fd608ef 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -2,7 +2,7 @@ from .analysis_base import AnalysisBase from .ast_helper import get_call_names_as_string -from .base_cfg import AssignmentNode, EntryOrExitNode +from .base_cfg import AssignmentNode, BBnode, EntryOrExitNode from .constraint_table import constraint_join, constraint_table from .lattice import Lattice from .vars_visitor import VarsVisitor @@ -35,16 +35,19 @@ def is_condition(self, cfg_node): def remove_id_assignment(self, JOIN, cfg_node): lvars = list() - try: - for expr in cfg_node.ast_node.targets: + + if isinstance(cfg_node, BBnode): + lvars.append(cfg_node.left_hand_side) + else: + try: + for expr in cfg_node.ast_node.targets: + vv = VarsVisitor() + vv.visit(expr) + lvars.extend(vv.result) + except AttributeError: # If it is AugAssign vv = VarsVisitor() - vv.visit(expr) + vv.visit(cfg_node.ast_node.target) lvars.extend(vv.result) - except AttributeError: # If it is AugAssign - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.target) - lvars.extend(vv.result) - for var in lvars: if var in self.lattice.get_elements(JOIN): # Remove var from JOIN @@ -53,10 +56,13 @@ def remove_id_assignment(self, JOIN, cfg_node): def add_vars_assignment(self, JOIN, cfg_node): rvars = list() - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.value) - rvars.extend(vv.result) - + if isinstance(cfg_node, BBnode): + # A conscience descision was made not to include e.g. ¤call_N's in RHS vars + rvars.extend(cfg_node.right_hand_side_variables) + else: + vv = VarsVisitor() + vv.visit(cfg_node.ast_node.value) + rvars.extend(vv.result) for var in rvars: # Add var to JOIN JOIN = JOIN | self.lattice.el2bv[var] diff --git a/tests/liveness_test.py b/tests/liveness_test.py index fba08ceb..2e114468 100644 --- a/tests/liveness_test.py +++ b/tests/liveness_test.py @@ -17,15 +17,17 @@ def test_example(self): self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[0]]), []) self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[1]]), []) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[2]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[2]]), []) self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[3]]), ['x']) self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[4]]), ['x']) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[5]])), set(['x','y'])) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[6]])), set(['x','y'])) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[7]]), ['x']) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[8]])), set(['x','z'])) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[9]])), set(['x','z'])) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[5]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[6]]), ['x']) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[7]])), set(['x','y'])) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[8]])), set(['x','y'])) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[9]]), ['x']) self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[10]])), set(['x','z'])) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[11]]), ['x']) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[12]]), []) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[11]])), set(['x','z'])) + self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[12]])), set(['x','z'])) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[13]]), ['x']) + self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[14]]), []) self.assertEqual(len(lattice.el2bv), 3) From 9a2b5c8f07be8d62c8adae15ea954d7f9e35f0e6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 2 Aug 2017 13:26:54 -0400 Subject: [PATCH 112/541] [comments] grammar --- tests/base_test_case.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index feb706b2..d8618ca1 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -10,10 +10,11 @@ class BaseTestCase(unittest.TestCase): """A base class that has helper methods for testing PyT.""" def assertInCfg(self, connections): - """ Assert that all connections in the connections list exists in the cfg, + """Asserts that all connections in the connections list exists in the cfg, as well as all connections not in the list do not exist - connections is a list of tuples where the node at index 0 of the tuple has to be in the new_constraintset of the node a index 1 of the tuple""" + connections is a list of tuples where + the node at index 0 of the tuple has to be in the new_constraint set of the node at index 1 of the tuple""" for connection in connections: self.assertIn(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]].outgoing, str(connection) + " expected to be connected") self.assertIn(self.cfg.nodes[connection[1]], self.cfg.nodes[connection[0]].ingoing, str(connection) + " expected to be connected") From d432483c32e6378e6747423bce7432ea39cae8ee Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 3 Aug 2017 14:58:36 -0400 Subject: [PATCH 113/541] [tests] made 2 tests pass --- pyt/base_cfg.py | 2 +- pyt/constraint_table.py | 5 ++++ tests/analysis_base_test_case.py | 6 ++++ tests/base_test_case.py | 5 ++++ tests/cfg_test.py | 8 ++++-- tests/reaching_definitions_taint_test.py | 36 ++++++++++++++++-------- 6 files changed, 46 insertions(+), 16 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 7eac6c5a..9cdc7160 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -697,7 +697,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # node should always be a call assert isinstance(node, ast.Call) == True - + logger.debug("[PR] the label.result is %s", label.result) index = label.result.find('(') if index == -1: logger.warning("No ( in a call") diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index de7a0cea..6e492cd9 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -4,6 +4,9 @@ constraint_table = dict() +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') + def initialize_constraint_table(cfg_list): """Collects all given cfg nodes and initializes the table with value 0.""" @@ -22,4 +25,6 @@ def constraint_join(cfg_nodes): def print_table(lattice): print('Constraint table:') for k, v in constraint_table.items(): + logger.debug("[Flux] k is %s and v is %s and bin(v) is %s", k, v, bin(v)) + # logger.debug("[Flux] k is %s", k) print(str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)])) diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 8ec3fbff..10c8dedf 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -6,6 +6,9 @@ from pyt.fixed_point import FixedPointAnalysis from pyt.lattice import Lattice +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') + class AnalysisBaseTestCase(BaseTestCase): connection = namedtuple('connection', 'constraintset element') @@ -19,6 +22,9 @@ def assertInCfg(self, connections, lattice): connections is a list of tuples where the node at index 0 of the tuple has to be in the new_constraint set of the node at index 1 of the tuple.""" for connection in connections: + logger.debug("self.cfg.nodes[connection[0]] is %s", self.cfg.nodes[connection[0]]) + logger.debug("self.cfg.nodes[connection[1]] is %s", self.cfg.nodes[connection[1]]) + self.assertEqual(lattice.in_constraint(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]]), True, str(connection) + " expected to be connected") nodes = len(self.cfg.nodes) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index d8618ca1..c94dce0b 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -70,3 +70,8 @@ def string_compare_alpha(self, output, expected_string): return [char for char in output if char.isalpha()] \ == \ [char for char in expected_string if char.isalpha()] + + def string_compare_alnum(self, output, expected_string): + return [char for char in output if char.isalnum()] \ + == \ + [char for char in expected_string if char.isalnum()] diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 7d5e7b83..de206bf3 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -527,11 +527,13 @@ def test_multiple_assignment(self): def test_assign_list_comprehension(self): self.cfg_create_from_file('example/example_inputs/generator_expression_assign.py') - length = 3 - self.assert_length(self.cfg.nodes, expected_length = length) + length = 4 + print("self.cfg.nodes is ") + print(self.cfg.nodes) + self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[1] - self.assertEqual(call.label, "x = ''.join((x.n for x in range(16)))") + self.assertEqual(call.label, "¤call_1 = ret_''''.join((x.n for x in range(16)))") l = zip(range(1, length), range(length)) diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index a1867e2b..115a27fa 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -1,10 +1,12 @@ from collections import namedtuple, OrderedDict from .analysis_base_test_case import AnalysisBaseTestCase +from pyt.constraint_table import constraint_table from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): + # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): lattice = self.run_analysis('example/example_inputs/linear.py', ReachingDefinitionsTaintAnalysis) @@ -26,18 +28,28 @@ def test_if_program(self): def test_example(self): lattice = self.run_analysis('example/example_inputs/example.py', ReachingDefinitionsTaintAnalysis) - self.assertInCfg([(1,1), - (1,2), (2,2), - *self.constraints([1,2,4,6,7,9,10], 3), - *self.constraints([1,2,4,6,7,9,10], 4), - *self.constraints([1,2,4,6,7,9,10], 5), - *self.constraints([1,2,4,6,7,9,10], 6), - *self.constraints([1,2,4,6,7,9], 7), - *self.constraints([1,2,4,6,7,9], 8), - *self.constraints([1,2,4,6,7,9], 9), - *self.constraints([1,2,4,6,7,9,10], 10), - *self.constraints([1,2,4,6,7,9,10], 11), - *self.constraints([1,2,4,6,7,9,10], 12)], lattice) + EXPECTED = [ + "Label: Entry module:", + "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ¤call_2 = ret_int(x): Label: ¤call_2 = ret_int(x), Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: x = ¤call_2: Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()" + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_func_with_params(self): lattice = self.run_analysis('example/example_inputs/function_with_params.py', ReachingDefinitionsTaintAnalysis) From 8f5f9737c53fff14e13b43ee747a82c9469bd559 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 4 Aug 2017 14:06:09 -0400 Subject: [PATCH 114/541] [tests]Fixed one test, found major orelse problem --- tests/base_test_case.py | 2 ++ tests/cfg_test.py | 34 ++++++++++++++++++++++++---------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index c94dce0b..02015a9e 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -24,6 +24,8 @@ def assertInCfg(self, connections): for element in range(nodes): for sets in range(nodes): if not (element, sets) in connections: + # print("HEY element is %s", element) + # print("HEY sets is %s", sets) self.assertNotIn(self.cfg.nodes[element], self.cfg.nodes[sets].outgoing, "(%s <- %s)" % (element, sets) + " expected to be disconnected") self.assertNotIn(self.cfg.nodes[sets], self.cfg.nodes[element].ingoing, "(%s <- %s)" % (sets, element) + " expected to be disconnected") diff --git a/tests/cfg_test.py b/tests/cfg_test.py index de206bf3..37231c2b 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -187,6 +187,16 @@ def test_orelse(self): print_else = 5 _exit = 6 + print("shit") + print("shit") + print("shit") + print("shit") + print(self.cfg.nodes[except_im_body_1]) + print(self.cfg.nodes[except_im_body_1].outgoing) + print("shit") + print("shit") + print("shit") + print("shit") self.assertInCfg([self.connected(entry, try_), self.connected(try_, try_body), self.connected(try_body, except_im), @@ -194,6 +204,7 @@ def test_orelse(self): self.connected(try_body, _exit), self.connected(except_im, except_im_body_1), self.connected(except_im_body_1, _exit), + # self.connected(except_im_body_1, print_else), This is connected WHEN IT SHOULD NOT BE self.connected(print_else, _exit)]) def test_final(self): @@ -470,16 +481,21 @@ def test_assignment_multi_target(self): def test_assignment_multi_target_call(self): self.cfg_create_from_file('example/example_inputs/assignment_multiple_assign_call.py') - self.assert_length(self.cfg.nodes, expected_length=4) + self.assert_length(self.cfg.nodes, expected_length=6) start_node = self.cfg.nodes[0] - node = self.cfg.nodes[1] - node_2 = self.cfg.nodes[2] - exit_node = self.cfg.nodes[-1] + assignment_to_call1 = self.cfg.nodes[1] + assignment_to_x = self.cfg.nodes[2] + assignment_to_call2 = self.cfg.nodes[3] + assignment_to_y = self.cfg.nodes[4] + exit_node = self.cfg.nodes[5] - self.assertInCfg([(1,0),(2,1),(3,2)]) + # This assert means N should be connected to N+1 + self.assertInCfg([(1,0),(2,1),(3,2),(4,3),(5,4)]) - self.assertEqual(node.label, 'x = int(5)') - self.assertEqual(node_2.label, 'y = int(4)') + self.assertEqual(assignment_to_call1.label, '¤call_1 = ret_int(5)') + self.assertEqual(assignment_to_x.label, 'x = ¤call_1') + self.assertEqual(assignment_to_call2.label, '¤call_2 = ret_int(4)') + self.assertEqual(assignment_to_y.label, 'y = ¤call_2') def test_assignment_multi_target_line_numbers(self): self.cfg_create_from_file('example/example_inputs/assignment_two_targets.py') @@ -528,8 +544,6 @@ def test_assign_list_comprehension(self): self.cfg_create_from_file('example/example_inputs/generator_expression_assign.py') length = 4 - print("self.cfg.nodes is ") - print(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[1] @@ -546,7 +560,7 @@ def test_assignment_tuple_value(self): start_node = 0 node = 1 exit_node = 2 - print(self.cfg) + # print(self.cfg) self.assertInCfg([(node, start_node), (exit_node, node)]) From 239e703c99ec45171dea9f8ed8c03b941faed135 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 4 Aug 2017 14:53:42 -0400 Subject: [PATCH 115/541] So connect or lack of connect makes 1 test pass and 1 test fail, investigate other [-1].connect uses to determine next steps --- pyt/base_cfg.py | 16 +++++++++++++++- tests/cfg_test.py | 8 +++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9cdc7160..6057ca45 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -345,7 +345,14 @@ def handle_or_else(self, orelse, test): test.connect(control_flow_node.test) return control_flow_node.last_nodes else: + logger.debug("[Integral] orelse is %s", orelse) + label_visitor = LabelVisitor() + label_visitor.visit(orelse[0]) + logger.debug("[Integral] at this point, self.nodes[-1] is %s", self.nodes[-1]) + logger.debug("[Integral] label_visitor.result is %s", label_visitor.result) + logger.debug("[Integral] test is %s", test) else_connect_statements = self.stmt_star_handler(orelse) + logger.debug("[Integral] else_connect_statements.first_statement is %s", else_connect_statements.first_statement) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -825,8 +832,15 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # This makes so much sense! self.blackbox_assignments.add(call_node) - self.nodes[-1].connect(call_node) + # IMPORTANT + logger.debug("[Integral] connecting %s", self.nodes[-1]) + logger.debug("[Integral] to call_node %s", call_node) + # THE CULPRIT! + # self.nodes[-1].connect(call_node) + # raise self.nodes.append(call_node) + # raise + # IMPORTANT logger.debug("[Dominique bistro] call_node is %s", call_node) # WHY DO WE DO THIS? diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 37231c2b..df923b4f 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -177,7 +177,7 @@ def test_orelse(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - self.assert_length(self.cfg.nodes, expected_length=7) + # self.assert_length(self.cfg.nodes, expected_length=7) entry = 0 try_ = 1 @@ -191,12 +191,14 @@ def test_orelse(self): print("shit") print("shit") print("shit") - print(self.cfg.nodes[except_im_body_1]) - print(self.cfg.nodes[except_im_body_1].outgoing) + print(self.cfg.nodes) + # print(self.cfg.nodes[except_im_body_1]) + # print(self.cfg.nodes[except_im_body_1].outgoing) print("shit") print("shit") print("shit") print("shit") + # raise self.assertInCfg([self.connected(entry, try_), self.connected(try_, try_body), self.connected(try_body, except_im), From 4896893a85d76aec3858ce0b5190f18195006a09 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 4 Aug 2017 17:45:41 -0400 Subject: [PATCH 116/541] random crap, time to remove -1 uses --- example/example_inputs/try_orelse.py | 17 +++++++++++------ pyt/interprocedural_cfg.py | 5 ++++- tests/cfg_test.py | 4 +++- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/example/example_inputs/try_orelse.py b/example/example_inputs/try_orelse.py index 20904612..2424ca7e 100644 --- a/example/example_inputs/try_orelse.py +++ b/example/example_inputs/try_orelse.py @@ -1,6 +1,11 @@ -try: - value = None -except ImportError: - value = 1 -else: - print(value) +def does_this_kill_us(diff): + return subprocess.call(diff, shell=True) + +@app.route('/poc', methods=['POST']) +def poc(): + try: + value = None + except ImportError: + value = request.args.get('foo') + else: + does_this_kill_us(value) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 38e35800..869e8d74 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -231,7 +231,9 @@ def save_local_scope(self, line_number): # above can be optimized with the assignments dict save_name = 'save_' + str(self.function_index) + '_' +\ assignment.left_hand_side + print("previous_node is") previous_node = self.nodes[-1] + print(previous_node) r = RestoreNode(save_name + ' = ' + assignment.left_hand_side, save_name, [assignment.left_hand_side], line_number=line_number, path=self.filenames[-1]) @@ -258,7 +260,8 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - + print("INTEGRAL self.nodes[-1] is ") + print(self.nodes[-1]) self.nodes[-1].connect(node) self.nodes.append(node) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 7d5e7b83..4e80d476 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -177,7 +177,9 @@ def test_orelse(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - self.assert_length(self.cfg.nodes, expected_length=7) + # self.assert_length(self.cfg.nodes, expected_length=7) + # logger.debug() + # print(self.cfg.nodes) entry = 0 try_ = 1 From 01f4d7ce6e29936fc8d9753d637f27853792edb5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 4 Aug 2017 18:14:28 -0400 Subject: [PATCH 117/541] Maybe we can pass do not connect to -1 at first where we handle it outside --- pyt/base_cfg.py | 32 ++++++++++++++++++++++++++++++++ pyt/interprocedural_cfg.py | 3 ++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index fde7701c..9912380b 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -4,6 +4,8 @@ from .ast_helper import Arguments, get_call_names_as_string from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') ControlFlowNode = namedtuple('ControlFlowNode', @@ -326,6 +328,11 @@ def handle_or_else(self, orelse, test): test.connect(control_flow_node.test) return control_flow_node.last_nodes else: + logger.debug("[Integral] type(orelse[0]) is %s", type(orelse[0])) + label_visitor = LabelVisitor() + label_visitor.visit(orelse[0]) + logger.debug("[Integral] result of orelse[0] is %s", label_visitor.result) + else_connect_statements = self.stmt_star_handler(orelse) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -379,6 +386,21 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): def visit_Try(self, node): try_node = self.append_node(Node('Try', node, line_number=node.lineno, path=self.filenames[-1])) + logger.debug("[Integral] visit_Try node.body[0] is %s", node.body[0]) + label_visitor = LabelVisitor() + label_visitor.visit(node.body[0]) + logger.debug("[Integral] result of node.body[0] is %s", label_visitor.result) + + logger.debug("[Integral] visit_Try node.orelse[0] is %s", node.orelse[0]) + label_visitor = LabelVisitor() + label_visitor.visit(node.orelse[0]) + logger.debug("[Integral] result of node.orelse[0] is %s", label_visitor.result) + + logger.debug("[Integral] visit_Try node.handlers[0] is %s", node.handlers[0]) + label_visitor = LabelVisitor() + label_visitor.visit(node.handlers[0]) + logger.debug("[Integral] result of node.handlers[0] is %s", label_visitor.result) + body = self.stmt_star_handler(node.body) body = self.handle_stmt_star_ignore_node(body, try_node) @@ -397,6 +419,16 @@ def visit_Try(self, node): if node.orelse: orelse_last_nodes = self.handle_or_else(node.orelse, body.last_statements[-1]) + + # Perhaps + # for last in body.last_statements: + # last.connect(orelse_last_nodes.first_statement) + # HERE + # HERE + # HERE + # Does that included return nodes? I hope not. + # Does the return type of self.handle_or_else even have a .first_statement attribute? + body.last_statements.extend(orelse_last_nodes) if node.finalbody: diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 869e8d74..160f7177 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -31,7 +31,8 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor - +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') NOT_A_BLACKBOX = set(['Flask', From d68284f1ca5c5428c1813ad0a8192b44eef1280f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 7 Aug 2017 12:28:44 -0400 Subject: [PATCH 118/541] what was I doing? lemme see the github diff --- pyt/base_cfg.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9912380b..fb37f93c 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -282,8 +282,8 @@ def stmt_star_handler(self, stmts): Links all statements together in a list of statements, accounting for statements with multiple last nodes. """ - cfg_statements = list() break_nodes = list() + cfg_statements = list() for stmt in stmts: node = self.visit(stmt) @@ -317,7 +317,7 @@ def add_elif_label(self, CFG_node): CFG_node.label = 'el' + CFG_node.label def handle_or_else(self, orelse, test): - """Handle the orelse part of an if node. + """Handle the orelse part of an if or try node. Returns: The last nodes of the orelse branch. @@ -418,11 +418,13 @@ def visit_Try(self, node): last_statements.extend(handler_body.last_statements) if node.orelse: + logger.debug("body.last_statements are %s", body.last_statements) orelse_last_nodes = self.handle_or_else(node.orelse, body.last_statements[-1]) - + logger.debug("orelse_last_nodes is %s", orelse_last_nodes) + logger.debug("type of orelse_last_nodes is %s", type(orelse_last_nodes)) # Perhaps # for last in body.last_statements: - # last.connect(orelse_last_nodes.first_statement) + # last.connect(node.orelse[0]) # HERE # HERE # HERE @@ -627,7 +629,7 @@ def visit_For(self, node): for_node = self.append_node(Node("for " + target_label.result + " in " + iterator_label.result + ':', node, line_number=node.lineno, path=self.filenames[-1])) - if isinstance(node.iter, ast.Call) and get_call_names_as_string(node.iter.func) in self.function_names: + if isinstance(node.iter, ast.Call) and get_call_names_as_string(node.iter.func) in self.function_names: last_node = self.visit(node.iter) last_node.connect(for_node) From 3415ef2d19838569cca250260dfbda99815def30 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 12:11:19 -0400 Subject: [PATCH 119/541] Fixed secondary nodes, save_local_scope redundance and expanded try_orelse test --- example/example_inputs/try_orelse.py | 20 ++++++---- pyt/base_cfg.py | 39 ++++++++++++++++-- pyt/interprocedural_cfg.py | 30 ++++++++++---- pyt/vulnerabilities.py | 50 +++++++++++++++++------ tests/cfg_test.py | 60 +++++++++++++++++++++------- 5 files changed, 154 insertions(+), 45 deletions(-) diff --git a/example/example_inputs/try_orelse.py b/example/example_inputs/try_orelse.py index 2424ca7e..f3b01578 100644 --- a/example/example_inputs/try_orelse.py +++ b/example/example_inputs/try_orelse.py @@ -1,11 +1,15 @@ def does_this_kill_us(diff): return subprocess.call(diff, shell=True) -@app.route('/poc', methods=['POST']) -def poc(): - try: - value = None - except ImportError: - value = request.args.get('foo') - else: - does_this_kill_us(value) +# @app.route('/poc', methods=['POST']) +# def poc(): +try: + value = None + print('A5') +except ImportError: + value = request.args.get('foo') + print('Wagyu') +else: + does_this_kill_us(value) + print('So') +print('Good') diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index fb37f93c..2329af0f 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -277,7 +277,7 @@ def get_last_statements(self, cfg_statements): else: return [cfg_statements[-1]] - def stmt_star_handler(self, stmts): + def stmt_star_handler(self, stmts, use_prev_node=True): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -285,7 +285,10 @@ def stmt_star_handler(self, stmts): break_nodes = list() cfg_statements = list() + self.use_prev_node.append(use_prev_node) + for stmt in stmts: + logger.debug("[pay attention] stmt is %s", stmt) node = self.visit(stmt) if isinstance(node, ControlFlowNode): @@ -293,14 +296,35 @@ def stmt_star_handler(self, stmts): elif isinstance(node, BreakNode): break_nodes.append(node) - if self.node_to_connect(node) and node: + logger.debug("[pay attention] node is %s", node) + connected_ingoing = False + if node: + if hasattr(node, 'ingoing'): + logger.debug("[pay attention] node.ingoing is %s", node.ingoing) + ingoing = node.ingoing + logger.debug("[pa] ingoing was %s", ingoing) + while node.ingoing: + ingoing = node.ingoing + node = node.ingoing[0] + if ingoing: + logger.debug("[pa] ingoing is now %s", ingoing[0]) + logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) + cfg_statements.append(ingoing[0]) + connected_ingoing = True + + if self.node_to_connect(node) and node and not connected_ingoing: cfg_statements.append(node) + self.use_prev_node.pop() self.connect_nodes(cfg_statements) + logger.debug("[Flux] So cfg_statements are %s", cfg_statements) if cfg_statements: first_statement = self.get_first_statement(cfg_statements[0]) + logger.debug("[zzz] cfg_statements[0] is %s", cfg_statements[0]) + logger.debug("[zzz] first_statement is %s", first_statement) last_statements = self.get_last_statements(cfg_statements) + logger.debug("[zzz] last_statements is %s", last_statements) return ConnectStatements(first_statement=first_statement, last_statements=last_statements, break_statements=break_nodes) else: # When body of module only contains ignored nodes return IgnoredNode() @@ -332,8 +356,12 @@ def handle_or_else(self, orelse, test): label_visitor = LabelVisitor() label_visitor.visit(orelse[0]) logger.debug("[Integral] result of orelse[0] is %s", label_visitor.result) + logger.debug("[Integral][Flux] type(test) is %s", type(test)) + logger.debug("[Integral][Flux] result of test is %s", test) - else_connect_statements = self.stmt_star_handler(orelse) + else_connect_statements = self.stmt_star_handler(orelse, use_prev_node=False) + logger.debug("[foo] test is %s", test) + logger.debug("[foo] else_connect_statements.first_statement is %s", else_connect_statements.first_statement) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -424,6 +452,10 @@ def visit_Try(self, node): logger.debug("type of orelse_last_nodes is %s", type(orelse_last_nodes)) # Perhaps # for last in body.last_statements: + # logger.debug("[ghi] last is %s", last) + # logger.debug("[ghi] type(last) is %s", type(last)) + # logger.debug("[ghi] node.orelse[0] is %s", node.orelse[0]) + # logger.debug("[ghi] type(node.orelse[0]) is %s", type(node.orelse[0])) # last.connect(node.orelse[0]) # HERE # HERE @@ -444,6 +476,7 @@ def visit_Try(self, node): body.last_statements.extend(finalbody.last_statements) last_statements.extend(self.remove_breaks(body.last_statements)) + logger.debug("Enough is enough, self.nodes are %s", self.nodes) return ControlFlowNode(try_node, last_statements, break_statements=body.break_statements) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 160f7177..465acf98 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -72,6 +72,7 @@ def __init__(self, node, project_modules, local_modules, self.function_names = list() self.function_return_stack = list() self.module_definitions_stack = list() + self.use_prev_node = list() # Are we already in a module? if module_definitions: @@ -224,25 +225,37 @@ def visit_Yield(self, node): def save_local_scope(self, line_number): """Save the local scope before entering a function call.""" saved_variables = list() + original_previous_node = self.nodes[-1] + LHS_so_far = set() + for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: if isinstance(assignment, RestoreNode): continue - - # above can be optimized with the assignments dict + if assignment.left_hand_side in LHS_so_far: + continue + LHS_so_far.add(assignment.left_hand_side) save_name = 'save_' + str(self.function_index) + '_' +\ assignment.left_hand_side - print("previous_node is") + logger.debug("previous_node is") previous_node = self.nodes[-1] - print(previous_node) + logger.debug(previous_node) + r = RestoreNode(save_name + ' = ' + assignment.left_hand_side, save_name, [assignment.left_hand_side], line_number=line_number, path=self.filenames[-1]) saved_scope_node = self.append_node(r) - + logger.debug("saved_scope_node is %s", saved_scope_node) saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) - previous_node.connect(saved_scope_node) + logger.debug("[Flux]self.use_prev_node is %s", self.use_prev_node) + + if self.use_prev_node[-1] or previous_node is not original_previous_node: + previous_node.connect(saved_scope_node) + logger.debug("[Flux]Connecting") + else: + logger.debug("[Flux]Not connecting") + return saved_variables def save_actual_parameters_in_temp(self, args, arguments, line_number): @@ -261,8 +274,7 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - print("INTEGRAL self.nodes[-1] is ") - print(self.nodes[-1]) + logger.debug("[Flux] KILL self.nodes[-1] is %s", self.nodes[-1]) self.nodes[-1].connect(node) self.nodes.append(node) @@ -310,6 +322,8 @@ def restore_saved_local_scope(self, saved_variables, parameters, n.connect(successor) if restore_nodes: + logger.debug("[Flux]A5 self.nodes[-1] is %s", self.nodes[-1]) + logger.debug("[Flux]A5 restore_nodes are %s", restore_nodes) self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index a754aafd..254db8fc 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -13,6 +13,8 @@ Vulnerability, VulnerabilityLog ) +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') @@ -47,7 +49,7 @@ def __repr__(self): ) -def identify_triggers(cfg, sources, sinks): +def identify_triggers(cfg, sources, sinks, lattice): """Identify sources, sinks and sanitisers in a CFG. Args: @@ -65,8 +67,15 @@ def identify_triggers(cfg, sources, sinks): node) for node in tainted_nodes] sources_in_file = find_triggers(assignment_nodes, sources) sources_in_file.extend(tainted_trigger_nodes) + logger.debug("sources[0] are %s", sources[0]) + logger.debug("type(sources[0]) are %s", type(sources[0])) + try: + logger.debug("assignment_nodes[0] are %s", assignment_nodes[0]) + logger.debug("type(assignment_nodes[0]) are %s", type(assignment_nodes[0])) + except Exception: + pass - find_secondary_sources(assignment_nodes, sources_in_file) + find_secondary_sources(assignment_nodes, sources_in_file, lattice) sinks_in_file = find_triggers(cfg.nodes, sinks) @@ -79,38 +88,46 @@ def filter_cfg_nodes(cfg, cfg_node_type): return [node for node in cfg.nodes if isinstance(node, cfg_node_type)] -def find_secondary_sources(assignment_nodes, sources): +def find_secondary_sources(assignment_nodes, sources, lattice): + """ + Sets the secondary_nodes attribute of each source in the sources list. + + Args: + assignment_nodes([AssignmentNode]) + sources([tuple]) + """ for source in sources: - source.secondary_nodes = find_assignments(assignment_nodes, source) + source.secondary_nodes = find_assignments(assignment_nodes, source, lattice) -def find_assignments(assignment_nodes, source): +def find_assignments(assignment_nodes, source, lattice): old = list() # added in order to propagate reassignments of the source node new = [source.cfg_node] - update_assignments(new, assignment_nodes, source.cfg_node) + update_assignments(new, assignment_nodes, source.cfg_node, lattice) while new != old: old = new - update_assignments(new, assignment_nodes, source.cfg_node) + update_assignments(new, assignment_nodes, source.cfg_node, lattice) new.remove(source.cfg_node) # remove source node from result return new -def update_assignments(l, assignment_nodes, source): +def update_assignments(l, assignment_nodes, source, lattice): for node in assignment_nodes: for other in l: if node not in l: - append_if_reassigned(l, other, node) + append_if_reassigned(l, other, node, lattice) -def append_if_reassigned(l, secondary, node): +def append_if_reassigned(l, secondary, node, lattice): # maybe: secondary in node.new_constraint and try: if secondary.left_hand_side in node.right_hand_side_variables or\ secondary.left_hand_side == node.left_hand_side: - l.append(node) + if lattice.in_constraint(node, secondary): + l.append(node) except AttributeError: print(secondary) print('EXCEPT' + secondary) @@ -259,6 +276,15 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() + logger.debug("[vuln] Hmm so source.secondary_nodes is %s", source.secondary_nodes) + logger.debug("[vuln] Hmm so source is %s", source) + logger.debug("[vuln] Hmm so source.cfg_node is %s", source.cfg_node) + + for node in source.secondary_nodes: + if lattice.in_constraint(node, source.cfg_node): + logger.debug("secondary node %s is reachable from %s", node, source.cfg_node) + else: + logger.debug("secondary node %s is NOT reachable from %s", node, source.cfg_node) if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, @@ -325,7 +351,7 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr vulnerabilitiy_log: The log in which to place found vulnerabilities. definitions: Source and sink definitions. """ - triggers = identify_triggers(cfg, definitions.sources, definitions.sinks) + triggers = identify_triggers(cfg, definitions.sources, definitions.sinks, lattice) for sink in triggers.sinks: for source in triggers.sources: vulnerability = get_vulnerability(source, diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 4e80d476..0531f1e5 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,6 +1,8 @@ from .base_test_case import BaseTestCase from pyt.base_cfg import EntryOrExitNode, Node # from pyt.project_handler import get_modules +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class CFGGeneralTest(BaseTestCase): @@ -176,27 +178,57 @@ def test_orelse(self): self.cfg_create_from_file('example/example_inputs/try_orelse.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - - # self.assert_length(self.cfg.nodes, expected_length=7) - # logger.debug() - # print(self.cfg.nodes) + logger.debug("Nodes are") + logger.debug(self.cfg.nodes) + self.assert_length(self.cfg.nodes, expected_length=18) entry = 0 try_ = 1 try_body = 2 - except_im = 3 - except_im_body_1 = 4 - print_else = 5 - _exit = 6 - + print_a5 = 3 + except_im = 4 + except_im_body_1 = 5 + print_wagyu = 6 + save_node = 7 + assign_to_temp = 8 + assign_from_temp = 9 + function_entry = 10 + ret_of_subprocess_call = 11 + function_exit = 12 + restore_node = 13 + return_handler = 14 + print_so = 15 + print_good = 16 + _exit = 17 + + # So currently the problem is that save_node is connected to print_so instead of return_handler self.assertInCfg([self.connected(entry, try_), + self.connected(try_, try_body), - self.connected(try_body, except_im), - self.connected(try_body, print_else), - self.connected(try_body, _exit), + + self.connected(try_body, print_a5), + + self.connected(print_a5, except_im), + self.connected(print_a5, save_node), + self.connected(print_a5, print_good), + self.connected(except_im, except_im_body_1), - self.connected(except_im_body_1, _exit), - self.connected(print_else, _exit)]) + self.connected(except_im_body_1, print_wagyu), + + self.connected(print_wagyu, print_good), + + self.connected(save_node, assign_to_temp), + self.connected(save_node, print_so), # THIS SHOULD NOT BE! + self.connected(assign_to_temp, assign_from_temp), + self.connected(assign_from_temp, function_entry), + self.connected(function_entry, ret_of_subprocess_call), + self.connected(ret_of_subprocess_call, function_exit), + self.connected(function_exit, restore_node), + self.connected(restore_node, return_handler), + # self.connected(return_handler, print_so), # THIS SHOULD BE, BUT IS NOT + + self.connected(print_so, print_good), + self.connected(print_good, _exit)]) def test_final(self): self.cfg_create_from_file('example/example_inputs/try_final.py') From c838571cac805cf3e6c5931174e335c091daa762 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 12:28:29 -0400 Subject: [PATCH 120/541] problem illustration commit --- pyt/base_cfg.py | 26 +++++++++++++------------- tests/cfg_test.py | 7 ++++++- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 2329af0f..67713a48 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -298,19 +298,19 @@ def stmt_star_handler(self, stmts, use_prev_node=True): logger.debug("[pay attention] node is %s", node) connected_ingoing = False - if node: - if hasattr(node, 'ingoing'): - logger.debug("[pay attention] node.ingoing is %s", node.ingoing) - ingoing = node.ingoing - logger.debug("[pa] ingoing was %s", ingoing) - while node.ingoing: - ingoing = node.ingoing - node = node.ingoing[0] - if ingoing: - logger.debug("[pa] ingoing is now %s", ingoing[0]) - logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) - cfg_statements.append(ingoing[0]) - connected_ingoing = True + # if node: + # if hasattr(node, 'ingoing'): + # logger.debug("[pay attention] node.ingoing is %s", node.ingoing) + # ingoing = node.ingoing + # logger.debug("[pa] ingoing was %s", ingoing) + # while node.ingoing: + # ingoing = node.ingoing + # node = node.ingoing[0] + # if ingoing: + # logger.debug("[pa] ingoing is now %s", ingoing[0]) + # logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) + # cfg_statements.append(ingoing[0]) + # connected_ingoing = True if self.node_to_connect(node) and node and not connected_ingoing: cfg_statements.append(node) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 0531f1e5..d7d4e69c 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -201,7 +201,12 @@ def test_orelse(self): print_good = 16 _exit = 17 - # So currently the problem is that save_node is connected to print_so instead of return_handler + # With our added stmt_star_handler loop: + # We have save_node->print_so instead of return_handler->print_so + # If we comment out our stmt_star_handler loop that we added: + # print_a5 is connected to return_handler + # save_node has no predecessors + # ... but at least we have return_handler->print_so self.assertInCfg([self.connected(entry, try_), self.connected(try_, try_body), From 955e2a59a11cc156a26a228b302ea100472efbb4 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 13:28:20 -0400 Subject: [PATCH 121/541] Problem fixed for this test at least commit --- pyt/base_cfg.py | 53 ++++++++++++++++++++++++++++++----------------- tests/cfg_test.py | 6 ++++-- 2 files changed, 38 insertions(+), 21 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 67713a48..ce133558 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -259,6 +259,8 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): + logger.debug("node n is %s", n) + logger.debug("node n+1 is %s", next_node) if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if @@ -286,7 +288,7 @@ def stmt_star_handler(self, stmts, use_prev_node=True): cfg_statements = list() self.use_prev_node.append(use_prev_node) - + first_node = None for stmt in stmts: logger.debug("[pay attention] stmt is %s", stmt) node = self.visit(stmt) @@ -297,32 +299,45 @@ def stmt_star_handler(self, stmts, use_prev_node=True): break_nodes.append(node) logger.debug("[pay attention] node is %s", node) - connected_ingoing = False - # if node: - # if hasattr(node, 'ingoing'): - # logger.debug("[pay attention] node.ingoing is %s", node.ingoing) - # ingoing = node.ingoing - # logger.debug("[pa] ingoing was %s", ingoing) - # while node.ingoing: - # ingoing = node.ingoing - # node = node.ingoing[0] - # if ingoing: - # logger.debug("[pa] ingoing is now %s", ingoing[0]) - # logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) - # cfg_statements.append(ingoing[0]) - # connected_ingoing = True - - if self.node_to_connect(node) and node and not connected_ingoing: + + # this if should maybe be in the `if self.node_to_connect(node) and node:` + if node: + # note: multiple ingoing nodes kills this!! fix that + if hasattr(node, 'ingoing'): + logger.debug("[pay attention] node.ingoing is %s", node.ingoing) + ingoing = None + logger.debug("[pa] ingoing was %s", ingoing) + loop_node = node + while loop_node.ingoing: + ingoing = loop_node.ingoing + loop_node = loop_node.ingoing[0] + if ingoing: + logger.debug("[pa] ingoing is now %s", ingoing[0]) + logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) + # Only set it once from the first stmt + if not first_node: + first_node = ingoing[0] + + # cfg_statements.append(ingoing[0]) + + if self.node_to_connect(node) and node: cfg_statements.append(node) self.use_prev_node.pop() + logger.debug("[Flux] BEFORE So cfg_statements are %s", cfg_statements) self.connect_nodes(cfg_statements) - logger.debug("[Flux] So cfg_statements are %s", cfg_statements) + logger.debug("[Flux] AFTER So cfg_statements are %s", cfg_statements) if cfg_statements: - first_statement = self.get_first_statement(cfg_statements[0]) + if first_node: + first_statement = first_node + else: + first_statement = self.get_first_statement(cfg_statements[0]) logger.debug("[zzz] cfg_statements[0] is %s", cfg_statements[0]) logger.debug("[zzz] first_statement is %s", first_statement) + logger.debug("[zzz] type(first_statement) is %s", type(first_statement)) + logger.debug("[zzz] type(first_node) is %s", type(first_node)) + last_statements = self.get_last_statements(cfg_statements) logger.debug("[zzz] last_statements is %s", last_statements) return ConnectStatements(first_statement=first_statement, last_statements=last_statements, break_statements=break_nodes) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index d7d4e69c..f8040dc8 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -207,6 +207,8 @@ def test_orelse(self): # print_a5 is connected to return_handler # save_node has no predecessors # ... but at least we have return_handler->print_so + + self.assertInCfg([self.connected(entry, try_), self.connected(try_, try_body), @@ -223,14 +225,14 @@ def test_orelse(self): self.connected(print_wagyu, print_good), self.connected(save_node, assign_to_temp), - self.connected(save_node, print_so), # THIS SHOULD NOT BE! + # self.connected(save_node, print_so), # THIS SHOULD NOT BE! self.connected(assign_to_temp, assign_from_temp), self.connected(assign_from_temp, function_entry), self.connected(function_entry, ret_of_subprocess_call), self.connected(ret_of_subprocess_call, function_exit), self.connected(function_exit, restore_node), self.connected(restore_node, return_handler), - # self.connected(return_handler, print_so), # THIS SHOULD BE, BUT IS NOT + self.connected(return_handler, print_so), # THIS SHOULD BE self.connected(print_so, print_good), self.connected(print_good, _exit)]) From 0986190d4ccee96f75942d05a7d863fff17a0342 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 15:15:28 -0400 Subject: [PATCH 122/541] Added Entry node exemption, if ControlFlowNode condition and fixed my lattice.in_constraint arg order mistake --- pyt/base_cfg.py | 62 ++++++++++++++++++++++++++++-------------- pyt/vulnerabilities.py | 10 +++++-- tests/cfg_test.py | 2 ++ 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index ce133558..8625a768 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -301,26 +301,45 @@ def stmt_star_handler(self, stmts, use_prev_node=True): logger.debug("[pay attention] node is %s", node) # this if should maybe be in the `if self.node_to_connect(node) and node:` - if node: + if node and not first_node: # note: multiple ingoing nodes kills this!! fix that if hasattr(node, 'ingoing'): logger.debug("[pay attention] node.ingoing is %s", node.ingoing) ingoing = None - logger.debug("[pa] ingoing was %s", ingoing) loop_node = node + logger.debug("[pa] loop_node.ingoing was %s", loop_node.ingoing) while loop_node.ingoing: + logger.debug("IMPORTANT loop_node.ingoing[0] is %s", loop_node.ingoing[0]) + # Is it an Entry node? Let's not backwards traverse any more. + if loop_node.ingoing[0].label.startswith('Entry'): + break + # if isinstance(loop_node.ingoing[0], EntryOrExitNode): + # logger.debug("[Kaffe1668] So instead of %s ingoing is %s", loop_node.ingoing[0], ingoing) + # break ingoing = loop_node.ingoing loop_node = loop_node.ingoing[0] + logger.debug("ingoing list is %s", ingoing) if ingoing: - logger.debug("[pa] ingoing is now %s", ingoing[0]) - logger.debug("[pa] type(ingoing) is now %s", type(ingoing[0])) + logger.debug("[pa] ingoing[0] is now %s", ingoing[0]) + logger.debug("[pa] type(ingoing[0]) is now %s", type(ingoing[0])) # Only set it once from the first stmt - if not first_node: - first_node = ingoing[0] + logger.debug("making first_node be %s", ingoing[0]) + first_node = ingoing[0] # cfg_statements.append(ingoing[0]) if self.node_to_connect(node) and node: + if not first_node: + logger.debug("shit, should first_node be %s", node) + logger.debug("shit, should type(first_node) be %s", type(node)) + if isinstance(node, ControlFlowNode): + logger.debug("dir(node) is %s", dir(node)) + logger.debug("node.test is %s", node.test) + logger.debug("type(node.test) is %s", type(node.test)) + first_node = node.test + # raise + else: + first_node = node cfg_statements.append(node) self.use_prev_node.pop() @@ -334,9 +353,12 @@ def stmt_star_handler(self, stmts, use_prev_node=True): else: first_statement = self.get_first_statement(cfg_statements[0]) logger.debug("[zzz] cfg_statements[0] is %s", cfg_statements[0]) - logger.debug("[zzz] first_statement is %s", first_statement) - logger.debug("[zzz] type(first_statement) is %s", type(first_statement)) + logger.debug("[zzz] self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) + logger.debug("[zzz] type(self.get_first_statement(cfg_statements[0])) is %s", type(self.get_first_statement(cfg_statements[0]))) logger.debug("[zzz] type(first_node) is %s", type(first_node)) + + logger.debug("[Kaffe1668] first_statement is %s", first_statement) + logger.debug("[Kaffe1668] Whereas self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) last_statements = self.get_last_statements(cfg_statements) logger.debug("[zzz] last_statements is %s", last_statements) @@ -429,20 +451,20 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): def visit_Try(self, node): try_node = self.append_node(Node('Try', node, line_number=node.lineno, path=self.filenames[-1])) - logger.debug("[Integral] visit_Try node.body[0] is %s", node.body[0]) - label_visitor = LabelVisitor() - label_visitor.visit(node.body[0]) - logger.debug("[Integral] result of node.body[0] is %s", label_visitor.result) + # logger.debug("[Integral] visit_Try node.body[0] is %s", node.body[0]) + # label_visitor = LabelVisitor() + # label_visitor.visit(node.body[0]) + # logger.debug("[Integral] result of node.body[0] is %s", label_visitor.result) - logger.debug("[Integral] visit_Try node.orelse[0] is %s", node.orelse[0]) - label_visitor = LabelVisitor() - label_visitor.visit(node.orelse[0]) - logger.debug("[Integral] result of node.orelse[0] is %s", label_visitor.result) + # logger.debug("[Integral] visit_Try node.orelse[0] is %s", node.orelse[0]) + # label_visitor = LabelVisitor() + # label_visitor.visit(node.orelse[0]) + # logger.debug("[Integral] result of node.orelse[0] is %s", label_visitor.result) - logger.debug("[Integral] visit_Try node.handlers[0] is %s", node.handlers[0]) - label_visitor = LabelVisitor() - label_visitor.visit(node.handlers[0]) - logger.debug("[Integral] result of node.handlers[0] is %s", label_visitor.result) + # logger.debug("[Integral] visit_Try node.handlers[0] is %s", node.handlers[0]) + # label_visitor = LabelVisitor() + # label_visitor.visit(node.handlers[0]) + # logger.debug("[Integral] result of node.handlers[0] is %s", label_visitor.result) body = self.stmt_star_handler(node.body) body = self.handle_stmt_star_ignore_node(body, try_node) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 254db8fc..fa1744c9 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -91,7 +91,7 @@ def filter_cfg_nodes(cfg, cfg_node_type): def find_secondary_sources(assignment_nodes, sources, lattice): """ Sets the secondary_nodes attribute of each source in the sources list. - + Args: assignment_nodes([AssignmentNode]) sources([tuple]) @@ -126,8 +126,14 @@ def append_if_reassigned(l, secondary, node, lattice): try: if secondary.left_hand_side in node.right_hand_side_variables or\ secondary.left_hand_side == node.left_hand_side: - if lattice.in_constraint(node, secondary): + if lattice.in_constraint(secondary, node): l.append(node) + else: + logger.debug("So node %s is not in the constraint of secondary %s", node, secondary) + logger.debug("So node.ingoing is %s ", node.ingoing) + logger.debug("So node.outgoing is %s ", node.outgoing) + logger.debug("So secondary.ingoing is %s ", secondary.ingoing) + logger.debug("So secondary.outgoing is %s ", secondary.outgoing) except AttributeError: print(secondary) print('EXCEPT' + secondary) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index f8040dc8..e0dc12c6 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -201,6 +201,7 @@ def test_orelse(self): print_good = 16 _exit = 17 + # OUTDATED COMMENT: # With our added stmt_star_handler loop: # We have save_node->print_so instead of return_handler->print_so # If we comment out our stmt_star_handler loop that we added: @@ -787,6 +788,7 @@ def test_call_with_attribute(self): self.assertEqual(call.label, "request.args.get('param', 'not set')") l = zip(range(1, length), range(length)) + logger.debug("self.cfg.nodes is %s", self.cfg.nodes) self.assertInCfg(list(l)) def test_call_with_attribute_line_numbers(self): From eab1a53ee27638db5c6342a0263dd84bd58e4dfa Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 16:39:34 -0400 Subject: [PATCH 123/541] oops, we put none user-defined functions on the function return stack --- pyt/interprocedural_cfg.py | 2 +- tests/results | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 465acf98..453ecff7 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -393,7 +393,6 @@ def get_function_nodes(self, definition): def visit_Call(self, node): _id = get_call_names_as_string(node.func) - self.function_return_stack.append(_id) local_definitions = self.module_definitions_stack[-1] @@ -410,6 +409,7 @@ def visit_Call(self, node): self.add_builtin(node) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False + self.function_return_stack.append(_id) return self.add_function(node, definition) else: raise Exception('Definition was neither FunctionDef or ' + diff --git a/tests/results b/tests/results index 7a029880..4bc3d9b3 100644 --- a/tests/results +++ b/tests/results @@ -1 +1 @@ -b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS.py\n\t > Line 10: ret_make_response = resp\nFile: example/vulnerable_code/XSS.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/command_injection.py\n > User input at line 15, trigger word "form[": \n\tparam = request.form[\'suggestion\']\nReassigned in: \n\tFile: example/vulnerable_code/command_injection.py\n\t > Line 16: command = \'echo \' + param + \' >> \' + \'menu.txt\'\nFile: example/vulnerable_code/command_injection.py\n > reaches line 18, trigger word "subprocess.call(": \n\tsubprocess.call(command,shell=True)\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nReassigned in: \n\tFile: example/vulnerable_code/path_traversal.py\n\t > Line 10: ret_request.args.get = 404\nFile: example/vulnerable_code/path_traversal.py\n > reaches line 11, trigger word "send_file(": \n\tret_request.args.get = send_file(os.path.join(os.getcwd(), image_name))\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 10, trigger word "replace(": \n\timage_name = image_name.replace(\'..\', \'\')\n\nVulnerability 2:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 12, trigger word "send_file(": \n\tret_image_name.replace = send_file(os.path.join(os.getcwd(), image_name))\nThis vulnerability is potentially sanitised by: ["\'..\'", "\'..\' in"]\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 26, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 27, trigger word "execute(": \n\tresult = db.engine.execute(param)\n\nVulnerability 2:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 33, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 36, trigger word "filter(": \n\tresult = session.query(User).filter(\'username={}\'.format(param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_form.py\n > User input at line 14, trigger word "form[": \n\tdata = request.form[\'my_text\']\nReassigned in: \n\tFile: example/vulnerable_code/XSS_form.py\n\t > Line 17: ret_resp.set_cookie = resp\nFile: example/vulnerable_code/XSS_form.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html1.replace(\'{{ data }}\', data))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_url.py\n > User input at line 4, trigger word "Flask function URL parameter": \n\turl\nReassigned in: \n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 6: param = url\n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 10: ret_make_response = resp\nFile: example/vulnerable_code/XSS_url.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_reassign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 8: param = param + \'\'\n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 12: ret_make_response = resp\nFile: example/vulnerable_code/XSS_reassign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_sanitised.py\n > User input at line 7, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 9: param = Markup.escape(param)\n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 13: ret_make_response = resp\nFile: example/vulnerable_code/XSS_sanitised.py\n > reaches line 12, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\nThis vulnerability is potentially sanitised by: [\'escape\']\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 12: ret_make_response = resp\nFile: example/vulnerable_code/XSS_variable_assign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', other_var))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 10: not_the_same_var = \'\' + other_var\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 12: another_one = not_the_same_var + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 17: ret_make_response = resp\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', another_one))\n\n'#¤%&/()=? +b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/command_injection.py\n > User input at line 15, trigger word "form[": \n\tparam = request.form[\'suggestion\']\nReassigned in: \n\tFile: example/vulnerable_code/command_injection.py\n\t > Line 16: command = \'echo \' + param + \' >> \' + \'menu.txt\'\nFile: example/vulnerable_code/command_injection.py\n > reaches line 18, trigger word "subprocess.call(": \n\tsubprocess.call(command,shell=True)\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal.py\n > reaches line 11, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 10, trigger word "replace(": \n\timage_name = image_name.replace(\'..\', \'\')\n\nVulnerability 2:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 12, trigger word "send_file(": \n\tret_image_name.replace = send_file(os.path.join(os.getcwd(), image_name))\nThis vulnerability is potentially sanitised by: ["\'..\'", "\'..\' in"]\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 26, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 27, trigger word "execute(": \n\tresult = db.engine.execute(param)\n\nVulnerability 2:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 33, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 36, trigger word "filter(": \n\tresult = session.query(User).filter(\'username={}\'.format(param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_form.py\n > User input at line 14, trigger word "form[": \n\tdata = request.form[\'my_text\']\nReassigned in: \n\tFile: example/vulnerable_code/XSS_form.py\n\t > Line 17: ret_example2_action = resp\nFile: example/vulnerable_code/XSS_form.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html1.replace(\'{{ data }}\', data))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_url.py\n > User input at line 4, trigger word "Flask function URL parameter": \n\turl\nReassigned in: \n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 6: param = url\n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_url.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_reassign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 8: param = param + \'\'\n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_reassign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_sanitised.py\n > User input at line 7, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 9: param = Markup.escape(param)\n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 13: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_sanitised.py\n > reaches line 12, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\nThis vulnerability is potentially sanitised by: [\'escape\']\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_assign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', other_var))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 10: not_the_same_var = \'\' + other_var\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 12: another_one = not_the_same_var + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 17: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', another_one))\n\n'#¤%&/()=? From fa3cb7fcca1bbb60c7ae77b7fce82976632a8660 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 8 Aug 2017 16:57:21 -0400 Subject: [PATCH 124/541] Problem illustration commit. Found problem may be with right_hand_side_variables --- pyt/base_cfg.py | 2 +- pyt/vulnerabilities.py | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 8625a768..46201b3a 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -311,7 +311,7 @@ def stmt_star_handler(self, stmts, use_prev_node=True): while loop_node.ingoing: logger.debug("IMPORTANT loop_node.ingoing[0] is %s", loop_node.ingoing[0]) # Is it an Entry node? Let's not backwards traverse any more. - if loop_node.ingoing[0].label.startswith('Entry'): + if loop_node.ingoing[0].label.startswith('Entry module'): break # if isinstance(loop_node.ingoing[0], EntryOrExitNode): # logger.debug("[Kaffe1668] So instead of %s ingoing is %s", loop_node.ingoing[0], ingoing) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index fa1744c9..edca23b1 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -122,10 +122,17 @@ def update_assignments(l, assignment_nodes, source, lattice): def append_if_reassigned(l, secondary, node, lattice): - # maybe: secondary in node.new_constraint and try: - if secondary.left_hand_side in node.right_hand_side_variables or\ - secondary.left_hand_side == node.left_hand_side: + logger.debug("[BAD]secondary is %s", secondary) + logger.debug("[BAD]node is %s", node) + logger.debug("[BAD]node.left_hand_side is %s", node.left_hand_side) + logger.debug("[BAD]node.right_hand_side_variables is %s", node.right_hand_side_variables) + # WHY IS image_name NOT IN node.right_hand_side_variables? RIGHT NOW IT IS AN EMPTY LIST! + if secondary.left_hand_side in node.right_hand_side_variables: + if lattice.in_constraint(secondary, node) or node.left_hand_side in node.right_hand_side_variables: + l.append(node) + return + if secondary.left_hand_side == node.left_hand_side: if lattice.in_constraint(secondary, node): l.append(node) else: From 0537a9751f514a783c7b8a1bb39a6371dee1d17b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 9 Aug 2017 13:27:50 -0400 Subject: [PATCH 125/541] shit, false positives or false negatives depending on including foo of = foo.bar in the RHS vars --- pyt/base_cfg.py | 11 ++++++++--- pyt/right_hand_side_visitor.py | 5 +++++ pyt/vulnerabilities.py | 13 +++++++++---- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 46201b3a..ffa6a2d3 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -616,9 +616,6 @@ def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" self.undecided = True # Used for handling functions in assignments - rhs_visitor = RHSVisitor() - rhs_visitor.visit(ast_node.value) - call = self.visit(ast_node.value) call_label = '' @@ -629,6 +626,14 @@ def assignment_call_node(self, left_hand_label, ast_node): call.connect(call_assignment) else: # assignment to builtin call_label = call.label + rhs_visitor = RHSVisitor() + logger.debug("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBEGIN ANALYZING THE IMPORTANT NODE") + logger.debug("type(ast_node) is %s", ast_node) + logger.debug("type(ast_node.value) is %s", ast_node.value) + rhs_visitor.visit(ast_node.value) + logger.debug("rhs_visitor.result is %s", rhs_visitor.result) + # if ast_node.lineno ==10: + # raise call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) if call in self.blackbox_calls: diff --git a/pyt/right_hand_side_visitor.py b/pyt/right_hand_side_visitor.py index 72e1ce97..2967fefd 100644 --- a/pyt/right_hand_side_visitor.py +++ b/pyt/right_hand_side_visitor.py @@ -12,10 +12,15 @@ def __init__(self): """Initialize result as list.""" self.result = list() + def visit_Attribute(self, node): + self.visit(node.value) + def visit_Name(self, node): self.result.append(node.id) def visit_Call(self, node): + self.visit(node.func) + if node.args: for arg in node.args: self.visit(arg) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index edca23b1..74c3dff2 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -123,19 +123,24 @@ def update_assignments(l, assignment_nodes, source, lattice): def append_if_reassigned(l, secondary, node, lattice): try: - logger.debug("[BAD]secondary is %s", secondary) - logger.debug("[BAD]node is %s", node) - logger.debug("[BAD]node.left_hand_side is %s", node.left_hand_side) - logger.debug("[BAD]node.right_hand_side_variables is %s", node.right_hand_side_variables) + logger.debug("[DED]secondary is %s", secondary) + logger.debug("[DED]node is %s", node) + logger.debug("[DED]type(node) is %s", type(node)) + logger.debug("[DED]node.left_hand_side is %s", node.left_hand_side) + logger.debug("[DED]node.right_hand_side_variables is %s", node.right_hand_side_variables) # WHY IS image_name NOT IN node.right_hand_side_variables? RIGHT NOW IT IS AN EMPTY LIST! if secondary.left_hand_side in node.right_hand_side_variables: if lattice.in_constraint(secondary, node) or node.left_hand_side in node.right_hand_side_variables: + logger.debug("Added") l.append(node) return + logger.debug("Not added") if secondary.left_hand_side == node.left_hand_side: if lattice.in_constraint(secondary, node): + logger.debug("Added") l.append(node) else: + logger.debug("Not added") logger.debug("So node %s is not in the constraint of secondary %s", node, secondary) logger.debug("So node.ingoing is %s ", node.ingoing) logger.debug("So node.outgoing is %s ", node.outgoing) From e71e36d29b2209fe2a11ccb26a26aaa1565080ce Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 10 Aug 2017 17:11:13 -0400 Subject: [PATCH 126/541] All tests pass now, time to cleanup my PR. --- pyt/base_cfg.py | 27 ++++++----- pyt/framework_adaptor.py | 1 + pyt/reaching_definitions_taint.py | 12 ++++- pyt/right_hand_side_and_func_name_visitor.py | 29 ++++++++++++ pyt/right_hand_side_visitor.py | 8 +--- pyt/vulnerabilities.py | 47 +++++++++++++++++--- 6 files changed, 100 insertions(+), 24 deletions(-) create mode 100644 pyt/right_hand_side_and_func_name_visitor.py diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index ffa6a2d3..9cb25f85 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -4,6 +4,7 @@ from .ast_helper import Arguments, get_call_names_as_string from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor +from .right_hand_side_and_func_name_visitor import RHSIncludeFuncsVisitor from pyt.utils.log import enable_logger, logger enable_logger(to_file='./pyt.log') @@ -122,7 +123,7 @@ def __init__(self, label): class AssignmentNode(Node): """CFG Node that represents an assignment.""" - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, rhs_incf, *, line_number, path): """Create an Assignment node. Args: @@ -134,6 +135,7 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, * super().__init__(label, ast_node, line_number=line_number, path=path) self.left_hand_side = left_hand_side self.right_hand_side_variables = right_hand_side_variables + self.rhs_incf = rhs_incf # Only set True in assignment_call_node() self.blackbox = False @@ -157,7 +159,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) + super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) class ReturnNode(AssignmentNode, ConnectToExitNode): @@ -172,7 +174,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, * right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. """ - super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) + super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, None, line_number=line_number, path=path) class Function(): @@ -558,7 +560,7 @@ def assign_tuple_target(self, node, right_hand_side_variables): label.result += ' = ' label.visit(value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, None, line_number=node.lineno, path=self.filenames[-1]))) self.connect_nodes(new_assignment_nodes) @@ -574,7 +576,7 @@ def assign_multi_target(self, node, right_hand_side_variables): label.result += ' = ' label.visit(node.value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, None, line_number=node.lineno, path=self.filenames[-1]))) self.connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node @@ -598,7 +600,7 @@ def visit_Assign(self, node): print('Assignment not properly handled.', 'Could result in not finding a vulnerability.', 'Assignment:', label.result) - return self.append_node(AssignmentNode(label.result, label.result, node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, label.result, node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) elif len(node.targets) > 1: # x = y = 3 return self.assign_multi_target(node, rhs_visitor.result) @@ -610,7 +612,7 @@ def visit_Assign(self, node): else: # x = 4 label = LabelVisitor() label.visit(node) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" @@ -622,7 +624,7 @@ def assignment_call_node(self, left_hand_label, ast_node): call_assignment = None if isinstance(call, AssignmentNode): # assignment after returned nonbuiltin call_label = call.left_hand_side - call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], line_number=ast_node.lineno, path=self.filenames[-1]) + call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1]) call.connect(call_assignment) else: # assignment to builtin call_label = call.label @@ -631,10 +633,15 @@ def assignment_call_node(self, left_hand_label, ast_node): logger.debug("type(ast_node) is %s", ast_node) logger.debug("type(ast_node.value) is %s", ast_node.value) rhs_visitor.visit(ast_node.value) + logger.debug("rhs_visitor.result is %s", rhs_visitor.result) + + rhs_incf_visitor = RHSIncludeFuncsVisitor() + rhs_incf_visitor.visit(ast_node.value) + logger.debug("iphone Rhs_incf_visitor.result is %s", rhs_incf_visitor.result) # if ast_node.lineno ==10: # raise - call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) + call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, rhs_incf_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) if call in self.blackbox_calls: self.blackbox_assignments.add(call_assignment) @@ -653,7 +660,7 @@ def visit_AugAssign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.target), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.target), node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) def loop_node_skeleton(self, test, node): """Common handling of looped structures, while and for.""" diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 2dd21a10..d44e81df 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -39,6 +39,7 @@ def get_func_cfg_with_tainted_args(self, definition): for arg in args: tainted_node = TaintedNode(arg, arg, None, [], + None, line_number=definition_lineno, path=definition.path) function_entry_node.connect(tainted_node) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index d697bb89..d4a726bb 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -12,8 +12,18 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN + + # 2nd Reassignment check + if cfg_node.rhs_incf: + for var in cfg_node.right_hand_side_variables: + if var not in cfg_node.rhs_incf: + raise + if cfg_node.left_hand_side not in\ + cfg_node.rhs_incf: + # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN + arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) # Reassignment check - if cfg_node.left_hand_side not in\ + elif cfg_node.left_hand_side not in\ cfg_node.right_hand_side_variables: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/right_hand_side_and_func_name_visitor.py b/pyt/right_hand_side_and_func_name_visitor.py new file mode 100644 index 00000000..9cc9346b --- /dev/null +++ b/pyt/right_hand_side_and_func_name_visitor.py @@ -0,0 +1,29 @@ +"""Contains a class that finds all names. + +Used to find all variables on a right hand side(RHS) of assignment including foo in foo.bar(x, y). +""" +import ast + + +class RHSIncludeFuncsVisitor(ast.NodeVisitor): + """Visitor collecting all names.""" + + def __init__(self): + """Initialize result as list.""" + self.result = list() + + def visit_Attribute(self, node): + self.visit(node.value) + + def visit_Name(self, node): + self.result.append(node.id) + + def visit_Call(self, node): + self.visit(node.func) + + if node.args: + for arg in node.args: + self.visit(arg) + if node.keywords: + for keyword in node.keywords: + self.visit(keyword) diff --git a/pyt/right_hand_side_visitor.py b/pyt/right_hand_side_visitor.py index 2967fefd..8a63dede 100644 --- a/pyt/right_hand_side_visitor.py +++ b/pyt/right_hand_side_visitor.py @@ -1,5 +1,4 @@ """Contains a class that finds all names. - Used to find all variables on a right hand side(RHS) of assignment. """ import ast @@ -12,18 +11,13 @@ def __init__(self): """Initialize result as list.""" self.result = list() - def visit_Attribute(self, node): - self.visit(node.value) - def visit_Name(self, node): self.result.append(node.id) def visit_Call(self, node): - self.visit(node.func) - if node.args: for arg in node.args: self.visit(arg) if node.keywords: for keyword in node.keywords: - self.visit(keyword) + self.visit(keyword) \ No newline at end of file diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 74c3dff2..c8bd9885 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -1,5 +1,6 @@ """Module for finding vulnerabilities based on a definitions file.""" +import ast from collections import namedtuple from .base_cfg import AssignmentNode @@ -125,27 +126,40 @@ def append_if_reassigned(l, secondary, node, lattice): try: logger.debug("[DED]secondary is %s", secondary) logger.debug("[DED]node is %s", node) + logger.debug("[DED] So lattice.in_constraint is %s", lattice.in_constraint(secondary, node)) logger.debug("[DED]type(node) is %s", type(node)) logger.debug("[DED]node.left_hand_side is %s", node.left_hand_side) logger.debug("[DED]node.right_hand_side_variables is %s", node.right_hand_side_variables) + if node.rhs_incf: + logger.debug("[DED]node.rhs_incf is %s", node.rhs_incf) + # WHY IS image_name NOT IN node.right_hand_side_variables? RIGHT NOW IT IS AN EMPTY LIST! - if secondary.left_hand_side in node.right_hand_side_variables: - if lattice.in_constraint(secondary, node) or node.left_hand_side in node.right_hand_side_variables: + if node.rhs_incf: + logger.debug("[DED] IMPORTANT secondary.left_hand_side is %s and node.rhs_incf is %s", secondary.left_hand_side, node.rhs_incf) + if secondary.left_hand_side in node.rhs_incf: + logger.debug("Hmm, reaches `if secondary.left_hand_side in node.rhs_incf`") + # if node.left_hand_side in node.rhs_incf: + if lattice.in_constraint(secondary, node): + logger.debug("IPHONE") + l.append(node) + return + elif secondary.left_hand_side in node.right_hand_side_variables: + if lattice.in_constraint(secondary, node): logger.debug("Added") l.append(node) return - logger.debug("Not added") if secondary.left_hand_side == node.left_hand_side: if lattice.in_constraint(secondary, node): logger.debug("Added") l.append(node) + return else: - logger.debug("Not added") logger.debug("So node %s is not in the constraint of secondary %s", node, secondary) logger.debug("So node.ingoing is %s ", node.ingoing) logger.debug("So node.outgoing is %s ", node.outgoing) logger.debug("So secondary.ingoing is %s ", secondary.ingoing) logger.debug("So secondary.outgoing is %s ", secondary.outgoing) + logger.debug("Not added") except AttributeError: print(secondary) print('EXCEPT' + secondary) @@ -269,8 +283,28 @@ def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): def get_sink_args(cfg_node): + # new vv = VarsVisitor() - vv.visit(cfg_node.ast_node) + from .right_hand_side_visitor import RHSVisitor + rhs_visitor = RHSVisitor() + if isinstance(cfg_node.ast_node, ast.Call): + rhs_visitor.visit(cfg_node.ast_node) + logger.debug("returning rhs_visitor.result %s", rhs_visitor.result) + return rhs_visitor.result + elif isinstance(cfg_node.ast_node, ast.Assign): + logger.debug("returning cfg_node.right_hand_side_variables %s", cfg_node.right_hand_side_variables) + return cfg_node.right_hand_side_variables + else: + logger.debug("So cfg_node.ast_node is %s", cfg_node.ast_node) + logger.debug("So type of cfg_node.ast_node is %s", type(cfg_node.ast_node)) + logger.debug("So vv.result is %s", vv.result) + vv.visit(cfg_node.ast_node) + # # raise + + # old + # vv = VarsVisitor() + # vv.visit(cfg_node.ast_node) + return vv.result @@ -299,7 +333,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black logger.debug("[vuln] Hmm so source.cfg_node is %s", source.cfg_node) for node in source.secondary_nodes: - if lattice.in_constraint(node, source.cfg_node): + if lattice.in_constraint(source.cfg_node, node): logger.debug("secondary node %s is reachable from %s", node, source.cfg_node) else: logger.debug("secondary node %s is NOT reachable from %s", node, source.cfg_node) @@ -311,6 +345,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) + logger.debug(".... so sink_args is %s", sink_args) secondary_node_in_sink_args = None if sink_args: for node in secondary_in_sink: From 9c3567ee998653e0037cc4aa9772e66d331b32a3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 10 Aug 2017 17:30:28 -0400 Subject: [PATCH 127/541] edit results file and clean up visitor i didnt need to make --- pyt/base_cfg.py | 14 ++++------ pyt/right_hand_side_and_func_name_visitor.py | 29 -------------------- pyt/vars_visitor.py | 1 + pyt/vulnerabilities.py | 15 +++------- tests/results | 2 +- 5 files changed, 11 insertions(+), 50 deletions(-) delete mode 100644 pyt/right_hand_side_and_func_name_visitor.py diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9cb25f85..a9e4562c 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -4,7 +4,7 @@ from .ast_helper import Arguments, get_call_names_as_string from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor -from .right_hand_side_and_func_name_visitor import RHSIncludeFuncsVisitor +from .vars_visitor import VarsVisitor from pyt.utils.log import enable_logger, logger enable_logger(to_file='./pyt.log') @@ -261,8 +261,6 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): - logger.debug("node n is %s", n) - logger.debug("node n+1 is %s", next_node) if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if @@ -636,12 +634,10 @@ def assignment_call_node(self, left_hand_label, ast_node): logger.debug("rhs_visitor.result is %s", rhs_visitor.result) - rhs_incf_visitor = RHSIncludeFuncsVisitor() - rhs_incf_visitor.visit(ast_node.value) - logger.debug("iphone Rhs_incf_visitor.result is %s", rhs_incf_visitor.result) - # if ast_node.lineno ==10: - # raise - call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, rhs_incf_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) + vars_visitor = VarsVisitor() + vars_visitor.visit(ast_node.value) + + call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) if call in self.blackbox_calls: self.blackbox_assignments.add(call_assignment) diff --git a/pyt/right_hand_side_and_func_name_visitor.py b/pyt/right_hand_side_and_func_name_visitor.py deleted file mode 100644 index 9cc9346b..00000000 --- a/pyt/right_hand_side_and_func_name_visitor.py +++ /dev/null @@ -1,29 +0,0 @@ -"""Contains a class that finds all names. - -Used to find all variables on a right hand side(RHS) of assignment including foo in foo.bar(x, y). -""" -import ast - - -class RHSIncludeFuncsVisitor(ast.NodeVisitor): - """Visitor collecting all names.""" - - def __init__(self): - """Initialize result as list.""" - self.result = list() - - def visit_Attribute(self, node): - self.visit(node.value) - - def visit_Name(self, node): - self.result.append(node.id) - - def visit_Call(self, node): - self.visit(node.func) - - if node.args: - for arg in node.args: - self.visit(arg) - if node.keywords: - for keyword in node.keywords: - self.visit(keyword) diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index e47f7f98..f1e73cf4 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -82,6 +82,7 @@ def visit_Compare(self, node): self.visit(c) def visit_Call(self, node): + # This will not visit Flask in Flask(__name__) but it will visit request in `request.args.get() if not isinstance(node.func, ast.Name): self.visit(node.func) if node.args: diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index c8bd9885..d6b07840 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -6,6 +6,7 @@ from .base_cfg import AssignmentNode from .framework_adaptor import TaintedNode from .lattice import Lattice +from .right_hand_side_visitor import RHSVisitor from .trigger_definitions_parser import default_trigger_word_file, parse from .vars_visitor import VarsVisitor from .vulnerability_log import ( @@ -283,11 +284,8 @@ def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): def get_sink_args(cfg_node): - # new - vv = VarsVisitor() - from .right_hand_side_visitor import RHSVisitor - rhs_visitor = RHSVisitor() if isinstance(cfg_node.ast_node, ast.Call): + rhs_visitor = RHSVisitor() rhs_visitor.visit(cfg_node.ast_node) logger.debug("returning rhs_visitor.result %s", rhs_visitor.result) return rhs_visitor.result @@ -295,16 +293,11 @@ def get_sink_args(cfg_node): logger.debug("returning cfg_node.right_hand_side_variables %s", cfg_node.right_hand_side_variables) return cfg_node.right_hand_side_variables else: + vv = VarsVisitor() logger.debug("So cfg_node.ast_node is %s", cfg_node.ast_node) logger.debug("So type of cfg_node.ast_node is %s", type(cfg_node.ast_node)) - logger.debug("So vv.result is %s", vv.result) vv.visit(cfg_node.ast_node) - # # raise - - # old - # vv = VarsVisitor() - # vv.visit(cfg_node.ast_node) - + logger.debug("So vv.result is %s", vv.result) return vv.result diff --git a/tests/results b/tests/results index 4bc3d9b3..3b7550bd 100644 --- a/tests/results +++ b/tests/results @@ -1 +1 @@ -b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/command_injection.py\n > User input at line 15, trigger word "form[": \n\tparam = request.form[\'suggestion\']\nReassigned in: \n\tFile: example/vulnerable_code/command_injection.py\n\t > Line 16: command = \'echo \' + param + \' >> \' + \'menu.txt\'\nFile: example/vulnerable_code/command_injection.py\n > reaches line 18, trigger word "subprocess.call(": \n\tsubprocess.call(command,shell=True)\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal.py\n > reaches line 11, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 10, trigger word "replace(": \n\timage_name = image_name.replace(\'..\', \'\')\n\nVulnerability 2:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 12, trigger word "send_file(": \n\tret_image_name.replace = send_file(os.path.join(os.getcwd(), image_name))\nThis vulnerability is potentially sanitised by: ["\'..\'", "\'..\' in"]\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 26, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 27, trigger word "execute(": \n\tresult = db.engine.execute(param)\n\nVulnerability 2:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 33, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 36, trigger word "filter(": \n\tresult = session.query(User).filter(\'username={}\'.format(param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_form.py\n > User input at line 14, trigger word "form[": \n\tdata = request.form[\'my_text\']\nReassigned in: \n\tFile: example/vulnerable_code/XSS_form.py\n\t > Line 17: ret_example2_action = resp\nFile: example/vulnerable_code/XSS_form.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html1.replace(\'{{ data }}\', data))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_url.py\n > User input at line 4, trigger word "Flask function URL parameter": \n\turl\nReassigned in: \n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 6: param = url\n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_url.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_reassign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 8: param = param + \'\'\n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_reassign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_sanitised.py\n > User input at line 7, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 9: param = Markup.escape(param)\n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 13: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_sanitised.py\n > reaches line 12, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\nThis vulnerability is potentially sanitised by: [\'escape\']\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_assign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', other_var))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 10: not_the_same_var = \'\' + other_var\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 12: another_one = not_the_same_var + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 17: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', another_one))\n\n'#¤%&/()=? +b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/command_injection.py\n > User input at line 15, trigger word "form[": \n\tparam = request.form[\'suggestion\']\nReassigned in: \n\tFile: example/vulnerable_code/command_injection.py\n\t > Line 16: command = \'echo \' + param + \' >> \' + \'menu.txt\'\nFile: example/vulnerable_code/command_injection.py\n > reaches line 18, trigger word "subprocess.call(": \n\tsubprocess.call(command,shell=True)\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal.py\n > reaches line 11, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nReassigned in: \n\tFile: example/vulnerable_code/path_traversal_sanitised.py\n\t > Line 10: image_name = image_name.replace(\'..\', \'\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 12, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\nThis vulnerability is potentially sanitised by: ["\'..\'", "\'..\' in"]\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 26, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 27, trigger word "execute(": \n\tresult = db.engine.execute(param)\n\nVulnerability 2:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 33, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 36, trigger word "filter(": \n\tresult = session.query(User).filter(\'username={}\'.format(param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_form.py\n > User input at line 14, trigger word "form[": \n\tdata = request.form[\'my_text\']\nReassigned in: \n\tFile: example/vulnerable_code/XSS_form.py\n\t > Line 17: ret_example2_action = resp\nFile: example/vulnerable_code/XSS_form.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html1.replace(\'{{ data }}\', data))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_url.py\n > User input at line 4, trigger word "Flask function URL parameter": \n\turl\nReassigned in: \n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 6: param = url\n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_url.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_reassign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 8: param = param + \'\'\n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_reassign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_sanitised.py\n > User input at line 7, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 9: param = Markup.escape(param)\n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 13: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_sanitised.py\n > reaches line 12, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\nThis vulnerability is potentially sanitised by: [\'escape\']\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_assign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', other_var))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 10: not_the_same_var = \'\' + other_var\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 12: another_one = not_the_same_var + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 17: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', another_one))\n\n'#¤%&/()=? From 13c96bdb074f6e21ba370eeee3b9d3105e3dc97a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 14 Aug 2017 16:07:19 -0400 Subject: [PATCH 128/541] just some codeclimate stuff --- pyt/interprocedural_cfg.py | 6 +++--- pyt/reaching_definitions_taint.py | 5 ++--- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 453ecff7..d260c37b 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -226,15 +226,15 @@ def save_local_scope(self, line_number): """Save the local scope before entering a function call.""" saved_variables = list() original_previous_node = self.nodes[-1] - LHS_so_far = set() + saved_variables_so_far = set() for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: if isinstance(assignment, RestoreNode): continue - if assignment.left_hand_side in LHS_so_far: + if assignment.left_hand_side in saved_variables_so_far: continue - LHS_so_far.add(assignment.left_hand_side) + saved_variables_so_far.add(assignment.left_hand_side) save_name = 'save_' + str(self.function_index) + '_' +\ assignment.left_hand_side logger.debug("previous_node is") diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index d4a726bb..274ccec9 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -12,19 +12,18 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - # 2nd Reassignment check if cfg_node.rhs_incf: for var in cfg_node.right_hand_side_variables: if var not in cfg_node.rhs_incf: raise if cfg_node.left_hand_side not in\ - cfg_node.rhs_incf: + cfg_node.rhs_incf: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) # Reassignment check elif cfg_node.left_hand_side not in\ - cfg_node.right_hand_side_variables: + cfg_node.right_hand_side_variables: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) From 33eda2abdb393693f6561ec117c358d7b1a267d8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 14 Aug 2017 16:14:18 -0400 Subject: [PATCH 129/541] just some codeclimate stuff2 --- pyt/base_cfg.py | 6 ------ pyt/reaching_definitions_taint.py | 6 ++---- pyt/right_hand_side_visitor.py | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index a9e4562c..9b78469b 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -355,8 +355,6 @@ def stmt_star_handler(self, stmts, use_prev_node=True): logger.debug("[zzz] cfg_statements[0] is %s", cfg_statements[0]) logger.debug("[zzz] self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) logger.debug("[zzz] type(self.get_first_statement(cfg_statements[0])) is %s", type(self.get_first_statement(cfg_statements[0]))) - logger.debug("[zzz] type(first_node) is %s", type(first_node)) - logger.debug("[Kaffe1668] first_statement is %s", first_statement) logger.debug("[Kaffe1668] Whereas self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) @@ -450,22 +448,18 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): def visit_Try(self, node): try_node = self.append_node(Node('Try', node, line_number=node.lineno, path=self.filenames[-1])) - # logger.debug("[Integral] visit_Try node.body[0] is %s", node.body[0]) # label_visitor = LabelVisitor() # label_visitor.visit(node.body[0]) # logger.debug("[Integral] result of node.body[0] is %s", label_visitor.result) - # logger.debug("[Integral] visit_Try node.orelse[0] is %s", node.orelse[0]) # label_visitor = LabelVisitor() # label_visitor.visit(node.orelse[0]) # logger.debug("[Integral] result of node.orelse[0] is %s", label_visitor.result) - # logger.debug("[Integral] visit_Try node.handlers[0] is %s", node.handlers[0]) # label_visitor = LabelVisitor() # label_visitor.visit(node.handlers[0]) # logger.debug("[Integral] result of node.handlers[0] is %s", label_visitor.result) - body = self.stmt_star_handler(node.body) body = self.handle_stmt_star_ignore_node(body, try_node) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 274ccec9..38476f8e 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -17,13 +17,11 @@ def fixpointmethod(self, cfg_node): for var in cfg_node.right_hand_side_variables: if var not in cfg_node.rhs_incf: raise - if cfg_node.left_hand_side not in\ - cfg_node.rhs_incf: + if cfg_node.left_hand_side not in cfg_node.rhs_incf: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) # Reassignment check - elif cfg_node.left_hand_side not in\ - cfg_node.right_hand_side_variables: + elif cfg_node.left_hand_side not in cfg_node.right_hand_side_variables: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/right_hand_side_visitor.py b/pyt/right_hand_side_visitor.py index 8a63dede..8dcf9ea4 100644 --- a/pyt/right_hand_side_visitor.py +++ b/pyt/right_hand_side_visitor.py @@ -20,4 +20,4 @@ def visit_Call(self, node): self.visit(arg) if node.keywords: for keyword in node.keywords: - self.visit(keyword) \ No newline at end of file + self.visit(keyword) From 6924f2423ff5d704d81b57bbae781ab1e5cb4295 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 13:18:01 -0400 Subject: [PATCH 130/541] handle the all previous node cases in processing a function --- pyt/base_cfg.py | 3 +-- pyt/interprocedural_cfg.py | 35 ++++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9b78469b..aabc6caf 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -20,7 +20,7 @@ class IgnoredNode(): - """Ignored Node sent from a ast node that should not return anything.""" + """Ignored Node sent from an ast node that should not return anything.""" class Node(): @@ -627,7 +627,6 @@ def assignment_call_node(self, left_hand_label, ast_node): rhs_visitor.visit(ast_node.value) logger.debug("rhs_visitor.result is %s", rhs_visitor.result) - vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index d260c37b..2123ded3 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -222,10 +222,9 @@ def visit_Yield(self, node): node, line_number=node.lineno, path=self.filenames[-1])) - def save_local_scope(self, line_number): + def save_local_scope(self, line_number, original_previous_node): """Save the local scope before entering a function call.""" saved_variables = list() - original_previous_node = self.nodes[-1] saved_variables_so_far = set() for assignment in [node for node in self.nodes @@ -258,7 +257,7 @@ def save_local_scope(self, line_number): return saved_variables - def save_actual_parameters_in_temp(self, args, arguments, line_number): + def save_actual_parameters_in_temp(self, args, arguments, line_number, original_previous_node): """Save the actual parameters of a function call.""" parameters = dict() for i, parameter in enumerate(args): @@ -275,7 +274,12 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): line_number=line_number, path=self.filenames[-1]) logger.debug("[Flux] KILL self.nodes[-1] is %s", self.nodes[-1]) - self.nodes[-1].connect(node) + if self.use_prev_node[-1] or self.nodes[-1] is not original_previous_node: + self.nodes[-1].connect(saved_scope_node) + logger.debug("[2Flux]Connecting") + else: + logger.debug("[2Flux]Not connecting") + self.nodes.append(node) parameters[label_visitor.result] = arguments[i] @@ -284,7 +288,10 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number): def create_local_scope_from_actual_parameters(self, args, arguments, line_number): """Create the local scope before entering - the body of a function call.""" + the body of a function call. + + Note: We do not need a check of original_previous_node because of the preceding call to save_actual_parameters_in_temp. + """ for i in range(len(args)): temp_name = 'temp_' + str(self.function_index) + '_' + arguments[i] @@ -351,17 +358,19 @@ def add_function(self, call_node, definition): try: self.function_index += 1 def_node = definition.node - saved_variables = self.save_local_scope(def_node.lineno) + original_previous_node = self.nodes[-1] + saved_variables = self.save_local_scope(def_node.lineno, original_previous_node) parameters = self.save_actual_parameters_in_temp(call_node.args, Arguments(def_node.args), - call_node.lineno) + call_node.lineno, + original_previous_node) self.filenames.append(definition.path) self.create_local_scope_from_actual_parameters(call_node.args, Arguments(def_node.args), def_node.lineno) - function_nodes = self.get_function_nodes(definition) + function_nodes = self.get_function_nodes(definition, original_previous_node) self.filenames.pop() # Maybe move after restore nodes self.restore_saved_local_scope(saved_variables, parameters, def_node.lineno) self.return_handler(call_node, function_nodes) @@ -374,12 +383,16 @@ def add_function(self, call_node, definition): return self.nodes[-1] - def get_function_nodes(self, definition): + def get_function_nodes(self, definition, original_previous_node): length = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) - previous_node.connect(entry_node) + if self.use_prev_node[-1] or previous_node is not original_previous_node: + previous_node.connect(saved_scope_node) + logger.debug("[3Flux]Connecting") + else: + logger.debug("[3Flux]Not connecting") function_body_connect_statements = self.stmt_star_handler(definition.node.body) entry_node.connect(function_body_connect_statements.first_statement) @@ -464,7 +477,7 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m self.local_modules = get_directory_modules(module_path) tree = generate_ast(module_path) - # Remember, module[0] is None during e.g. "from . import foo", so we must str() + # module[0] is None during e.g. "from . import foo", so we must str() self.append_node(EntryOrExitNode('Module Entry ' + str(module[0]))) self.visit(tree) exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) From 61a4904fe6ff56018d368c816ec25504bd7f77f6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 15:20:41 -0400 Subject: [PATCH 131/541] fix wrong variable name --- pyt/interprocedural_cfg.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 2123ded3..e8dd6035 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -268,19 +268,19 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number, original_ rhs_visitor = RHSVisitor() rhs_visitor.visit(parameter) - node = RestoreNode(temp_name + ' = ' + label_visitor.result, + restore_node = RestoreNode(temp_name + ' = ' + label_visitor.result, temp_name, rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) logger.debug("[Flux] KILL self.nodes[-1] is %s", self.nodes[-1]) if self.use_prev_node[-1] or self.nodes[-1] is not original_previous_node: - self.nodes[-1].connect(saved_scope_node) + self.nodes[-1].connect(restore_node) logger.debug("[2Flux]Connecting") else: logger.debug("[2Flux]Not connecting") - self.nodes.append(node) + self.nodes.append(restore_node) parameters[label_visitor.result] = arguments[i] return parameters @@ -389,7 +389,7 @@ def get_function_nodes(self, definition, original_previous_node): entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) if self.use_prev_node[-1] or previous_node is not original_previous_node: - previous_node.connect(saved_scope_node) + previous_node.connect(entry_node) logger.debug("[3Flux]Connecting") else: logger.debug("[3Flux]Not connecting") From c7511078f929d15c905c15777bb54ff4f2fbc08a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 15:24:05 -0400 Subject: [PATCH 132/541] fix indentation --- pyt/interprocedural_cfg.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index e8dd6035..d5cb6dee 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -269,10 +269,10 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number, original_ rhs_visitor.visit(parameter) restore_node = RestoreNode(temp_name + ' = ' + label_visitor.result, - temp_name, - rhs_visitor.result, - line_number=line_number, - path=self.filenames[-1]) + temp_name, + rhs_visitor.result, + line_number=line_number, + path=self.filenames[-1]) logger.debug("[Flux] KILL self.nodes[-1] is %s", self.nodes[-1]) if self.use_prev_node[-1] or self.nodes[-1] is not original_previous_node: self.nodes[-1].connect(restore_node) From a54f090c019fa574123d426fc4df10cf1e239bc8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 16:11:46 -0400 Subject: [PATCH 133/541] rename incf attribute of AssignmentNode to vv_result, add reason to xrefs --- pyt/base_cfg.py | 6 ++++-- pyt/reaching_definitions_taint.py | 6 +++--- pyt/vulnerabilities.py | 18 +++++++++--------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index aabc6caf..7146867d 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -123,19 +123,21 @@ def __init__(self, label): class AssignmentNode(Node): """CFG Node that represents an assignment.""" - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, rhs_incf, *, line_number, path): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, vv_result, *, line_number, path): """Create an Assignment node. Args: label (str): The label of the node, describing the expression it represents. left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. + vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. line_number(Optional[int]): The line of the expression the Node represents. """ super().__init__(label, ast_node, line_number=line_number, path=path) self.left_hand_side = left_hand_side self.right_hand_side_variables = right_hand_side_variables - self.rhs_incf = rhs_incf + # Only set in assignment_call_node() + self.vv_result = vv_result # Only set True in assignment_call_node() self.blackbox = False diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 38476f8e..e9588aff 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -13,11 +13,11 @@ def fixpointmethod(self, cfg_node): arrow_result = JOIN # 2nd Reassignment check - if cfg_node.rhs_incf: + if cfg_node.vv_result: for var in cfg_node.right_hand_side_variables: - if var not in cfg_node.rhs_incf: + if var not in cfg_node.vv_result: raise - if cfg_node.left_hand_side not in cfg_node.rhs_incf: + if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) # Reassignment check diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index d6b07840..77ba5085 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -131,15 +131,15 @@ def append_if_reassigned(l, secondary, node, lattice): logger.debug("[DED]type(node) is %s", type(node)) logger.debug("[DED]node.left_hand_side is %s", node.left_hand_side) logger.debug("[DED]node.right_hand_side_variables is %s", node.right_hand_side_variables) - if node.rhs_incf: - logger.debug("[DED]node.rhs_incf is %s", node.rhs_incf) - - # WHY IS image_name NOT IN node.right_hand_side_variables? RIGHT NOW IT IS AN EMPTY LIST! - if node.rhs_incf: - logger.debug("[DED] IMPORTANT secondary.left_hand_side is %s and node.rhs_incf is %s", secondary.left_hand_side, node.rhs_incf) - if secondary.left_hand_side in node.rhs_incf: - logger.debug("Hmm, reaches `if secondary.left_hand_side in node.rhs_incf`") - # if node.left_hand_side in node.rhs_incf: + if node.vv_result: + logger.debug("[DED]node.vv_result is %s", node.vv_result) + + # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. + if node.vv_result: + logger.debug("[DED] IMPORTANT secondary.left_hand_side is %s and node.vv_result is %s", secondary.left_hand_side, node.vv_result) + if secondary.left_hand_side in node.vv_result: + logger.debug("Hmm, reaches `if secondary.left_hand_side in node.vv_result`") + # if node.left_hand_side in node.vv_result: if lattice.in_constraint(secondary, node): logger.debug("IPHONE") l.append(node) From 42f807a64fe12fc08e05be769180993714b3d792 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 16:13:44 -0400 Subject: [PATCH 134/541] rename incf attribute of AssignmentNode to vv_result, add reason to xrefs, part2 --- pyt/reaching_definitions_taint.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index e9588aff..21a822f2 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -12,7 +12,7 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - # 2nd Reassignment check + # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if cfg_node.vv_result: for var in cfg_node.right_hand_side_variables: if var not in cfg_node.vv_result: @@ -20,7 +20,7 @@ def fixpointmethod(self, cfg_node): if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - # Reassignment check + # Other reassignment check elif cfg_node.left_hand_side not in cfg_node.right_hand_side_variables: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) From 8826bbd814a9436450df1a6c3aec82eb3ff3075a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 28 Aug 2017 16:30:04 -0400 Subject: [PATCH 135/541] [comments] minor edits --- pyt/base_cfg.py | 1 + pyt/interprocedural_cfg.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 7146867d..6943bf92 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -629,6 +629,7 @@ def assignment_call_node(self, left_hand_label, ast_node): rhs_visitor.visit(ast_node.value) logger.debug("rhs_visitor.result is %s", rhs_visitor.result) + # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index d5cb6dee..e58f7f51 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -290,7 +290,8 @@ def create_local_scope_from_actual_parameters(self, args, arguments, """Create the local scope before entering the body of a function call. - Note: We do not need a check of original_previous_node because of the preceding call to save_actual_parameters_in_temp. + Note: We do not need a check of original_previous_node because of the + preceding call to save_actual_parameters_in_temp. """ for i in range(len(args)): From c3ecb8e4053d168a302c8151aea8f7f20fb6b076 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 29 Aug 2017 16:19:23 -0400 Subject: [PATCH 136/541] cleanup and illustrate tests I should write --- .../try_orelse_with_no_variables_to_save.py | 13 ++++++ ...e_with_no_variables_to_save_and_no_args.py | 13 ++++++ pyt/base_cfg.py | 46 ++++++------------- pyt/interprocedural_cfg.py | 8 ++++ tests/cfg_test.py | 12 +---- 5 files changed, 49 insertions(+), 43 deletions(-) create mode 100644 example/example_inputs/try_orelse_with_no_variables_to_save.py create mode 100644 example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py diff --git a/example/example_inputs/try_orelse_with_no_variables_to_save.py b/example/example_inputs/try_orelse_with_no_variables_to_save.py new file mode 100644 index 00000000..4177f61b --- /dev/null +++ b/example/example_inputs/try_orelse_with_no_variables_to_save.py @@ -0,0 +1,13 @@ +def does_this_kill_us(diff): + return subprocess.call(diff, shell=True) + +# @app.route('/poc', methods=['POST']) +# def poc(): +try: + print('A5') +except ImportError: + print('Wagyu') +else: + does_this_kill_us("hard-coded string") + print('So') +print('Good') diff --git a/example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py b/example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py new file mode 100644 index 00000000..9c111d95 --- /dev/null +++ b/example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py @@ -0,0 +1,13 @@ +def does_this_kill_us(): + return subprocess.call('ls', shell=True) + +# @app.route('/poc', methods=['POST']) +# def poc(): +try: + print('A5') +except ImportError: + print('Wagyu') +else: + does_this_kill_us() + print('So') +print('Good') diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 6943bf92..bacae638 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -292,7 +292,6 @@ def stmt_star_handler(self, stmts, use_prev_node=True): self.use_prev_node.append(use_prev_node) first_node = None for stmt in stmts: - logger.debug("[pay attention] stmt is %s", stmt) node = self.visit(stmt) if isinstance(node, ControlFlowNode): @@ -300,46 +299,29 @@ def stmt_star_handler(self, stmts, use_prev_node=True): elif isinstance(node, BreakNode): break_nodes.append(node) - logger.debug("[pay attention] node is %s", node) - - # this if should maybe be in the `if self.node_to_connect(node) and node:` - if node and not first_node: - # note: multiple ingoing nodes kills this!! fix that + if node and not first_node: # (Make sure first_node isn't already set.) + # first_node is always a "node_to_connect", because it won't have ingoing otherwise + # If we have e.g. + # import os # An ignored node + # value = None + # first_node will be `value = None` if hasattr(node, 'ingoing'): - logger.debug("[pay attention] node.ingoing is %s", node.ingoing) ingoing = None - loop_node = node - logger.debug("[pa] loop_node.ingoing was %s", loop_node.ingoing) - while loop_node.ingoing: - logger.debug("IMPORTANT loop_node.ingoing[0] is %s", loop_node.ingoing[0]) - # Is it an Entry node? Let's not backwards traverse any more. - if loop_node.ingoing[0].label.startswith('Entry module'): + current_node = node + while current_node.ingoing: + # Is it an Entry to a module? Let's not backwards traverse any more. + # Entries to functions are fine + if current_node.ingoing[0].label.startswith('Entry module'): break - # if isinstance(loop_node.ingoing[0], EntryOrExitNode): - # logger.debug("[Kaffe1668] So instead of %s ingoing is %s", loop_node.ingoing[0], ingoing) - # break - ingoing = loop_node.ingoing - loop_node = loop_node.ingoing[0] - logger.debug("ingoing list is %s", ingoing) + ingoing = current_node.ingoing + current_node = current_node.ingoing[0] if ingoing: - logger.debug("[pa] ingoing[0] is now %s", ingoing[0]) - logger.debug("[pa] type(ingoing[0]) is now %s", type(ingoing[0])) - # Only set it once from the first stmt - logger.debug("making first_node be %s", ingoing[0]) + # Only set it once first_node = ingoing[0] - - # cfg_statements.append(ingoing[0]) - if self.node_to_connect(node) and node: if not first_node: - logger.debug("shit, should first_node be %s", node) - logger.debug("shit, should type(first_node) be %s", type(node)) if isinstance(node, ControlFlowNode): - logger.debug("dir(node) is %s", dir(node)) - logger.debug("node.test is %s", node.test) - logger.debug("type(node.test) is %s", type(node.test)) first_node = node.test - # raise else: first_node = node cfg_statements.append(node) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index e58f7f51..0d25bc82 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -253,7 +253,10 @@ def save_local_scope(self, line_number, original_previous_node): previous_node.connect(saved_scope_node) logger.debug("[Flux]Connecting") else: + logger.debug("original previous node is %s", original_previous_node) logger.debug("[Flux]Not connecting") + # try_orelse hits here. + # raise return saved_variables @@ -279,6 +282,8 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number, original_ logger.debug("[2Flux]Connecting") else: logger.debug("[2Flux]Not connecting") + # example/example_inputs/try_orelse_with_no_variables_to_save.py + # raise self.nodes.append(restore_node) @@ -394,6 +399,9 @@ def get_function_nodes(self, definition, original_previous_node): logger.debug("[3Flux]Connecting") else: logger.debug("[3Flux]Not connecting") + logger.debug("[3Flux]original_previous_node is %s", original_previous_node) + # example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py + # raise function_body_connect_statements = self.stmt_star_handler(definition.node.body) entry_node.connect(function_body_connect_statements.first_statement) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index e0dc12c6..9dde27d2 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -201,15 +201,6 @@ def test_orelse(self): print_good = 16 _exit = 17 - # OUTDATED COMMENT: - # With our added stmt_star_handler loop: - # We have save_node->print_so instead of return_handler->print_so - # If we comment out our stmt_star_handler loop that we added: - # print_a5 is connected to return_handler - # save_node has no predecessors - # ... but at least we have return_handler->print_so - - self.assertInCfg([self.connected(entry, try_), self.connected(try_, try_body), @@ -226,14 +217,13 @@ def test_orelse(self): self.connected(print_wagyu, print_good), self.connected(save_node, assign_to_temp), - # self.connected(save_node, print_so), # THIS SHOULD NOT BE! self.connected(assign_to_temp, assign_from_temp), self.connected(assign_from_temp, function_entry), self.connected(function_entry, ret_of_subprocess_call), self.connected(ret_of_subprocess_call, function_exit), self.connected(function_exit, restore_node), self.connected(restore_node, return_handler), - self.connected(return_handler, print_so), # THIS SHOULD BE + self.connected(return_handler, print_so), self.connected(print_so, print_good), self.connected(print_good, _exit)]) From 23e6412a20cec20b66508950440bb293279b8265 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 29 Aug 2017 17:00:30 -0400 Subject: [PATCH 137/541] remove logging and cleanup more --- pyt/base_cfg.py | 52 ------------------------------- pyt/interprocedural_cfg.py | 28 ++--------------- pyt/reaching_definitions_taint.py | 3 -- pyt/vulnerabilities.py | 52 ++----------------------------- tests/cfg_test.py | 5 --- 5 files changed, 5 insertions(+), 135 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index bacae638..b43b9084 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -5,8 +5,6 @@ from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor from .vars_visitor import VarsVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') ControlFlowNode = namedtuple('ControlFlowNode', @@ -327,23 +325,15 @@ def stmt_star_handler(self, stmts, use_prev_node=True): cfg_statements.append(node) self.use_prev_node.pop() - logger.debug("[Flux] BEFORE So cfg_statements are %s", cfg_statements) self.connect_nodes(cfg_statements) - logger.debug("[Flux] AFTER So cfg_statements are %s", cfg_statements) if cfg_statements: if first_node: first_statement = first_node else: first_statement = self.get_first_statement(cfg_statements[0]) - logger.debug("[zzz] cfg_statements[0] is %s", cfg_statements[0]) - logger.debug("[zzz] self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) - logger.debug("[zzz] type(self.get_first_statement(cfg_statements[0])) is %s", type(self.get_first_statement(cfg_statements[0]))) - logger.debug("[Kaffe1668] first_statement is %s", first_statement) - logger.debug("[Kaffe1668] Whereas self.get_first_statement(cfg_statements[0]) is %s", self.get_first_statement(cfg_statements[0])) last_statements = self.get_last_statements(cfg_statements) - logger.debug("[zzz] last_statements is %s", last_statements) return ConnectStatements(first_statement=first_statement, last_statements=last_statements, break_statements=break_nodes) else: # When body of module only contains ignored nodes return IgnoredNode() @@ -371,16 +361,7 @@ def handle_or_else(self, orelse, test): test.connect(control_flow_node.test) return control_flow_node.last_nodes else: - logger.debug("[Integral] type(orelse[0]) is %s", type(orelse[0])) - label_visitor = LabelVisitor() - label_visitor.visit(orelse[0]) - logger.debug("[Integral] result of orelse[0] is %s", label_visitor.result) - logger.debug("[Integral][Flux] type(test) is %s", type(test)) - logger.debug("[Integral][Flux] result of test is %s", test) - else_connect_statements = self.stmt_star_handler(orelse, use_prev_node=False) - logger.debug("[foo] test is %s", test) - logger.debug("[foo] else_connect_statements.first_statement is %s", else_connect_statements.first_statement) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -432,18 +413,6 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): def visit_Try(self, node): try_node = self.append_node(Node('Try', node, line_number=node.lineno, path=self.filenames[-1])) - # logger.debug("[Integral] visit_Try node.body[0] is %s", node.body[0]) - # label_visitor = LabelVisitor() - # label_visitor.visit(node.body[0]) - # logger.debug("[Integral] result of node.body[0] is %s", label_visitor.result) - # logger.debug("[Integral] visit_Try node.orelse[0] is %s", node.orelse[0]) - # label_visitor = LabelVisitor() - # label_visitor.visit(node.orelse[0]) - # logger.debug("[Integral] result of node.orelse[0] is %s", label_visitor.result) - # logger.debug("[Integral] visit_Try node.handlers[0] is %s", node.handlers[0]) - # label_visitor = LabelVisitor() - # label_visitor.visit(node.handlers[0]) - # logger.debug("[Integral] result of node.handlers[0] is %s", label_visitor.result) body = self.stmt_star_handler(node.body) body = self.handle_stmt_star_ignore_node(body, try_node) @@ -461,23 +430,7 @@ def visit_Try(self, node): last_statements.extend(handler_body.last_statements) if node.orelse: - logger.debug("body.last_statements are %s", body.last_statements) orelse_last_nodes = self.handle_or_else(node.orelse, body.last_statements[-1]) - logger.debug("orelse_last_nodes is %s", orelse_last_nodes) - logger.debug("type of orelse_last_nodes is %s", type(orelse_last_nodes)) - # Perhaps - # for last in body.last_statements: - # logger.debug("[ghi] last is %s", last) - # logger.debug("[ghi] type(last) is %s", type(last)) - # logger.debug("[ghi] node.orelse[0] is %s", node.orelse[0]) - # logger.debug("[ghi] type(node.orelse[0]) is %s", type(node.orelse[0])) - # last.connect(node.orelse[0]) - # HERE - # HERE - # HERE - # Does that included return nodes? I hope not. - # Does the return type of self.handle_or_else even have a .first_statement attribute? - body.last_statements.extend(orelse_last_nodes) if node.finalbody: @@ -491,7 +444,6 @@ def visit_Try(self, node): body.last_statements.extend(finalbody.last_statements) last_statements.extend(self.remove_breaks(body.last_statements)) - logger.debug("Enough is enough, self.nodes are %s", self.nodes) return ControlFlowNode(try_node, last_statements, break_statements=body.break_statements) @@ -605,12 +557,8 @@ def assignment_call_node(self, left_hand_label, ast_node): else: # assignment to builtin call_label = call.label rhs_visitor = RHSVisitor() - logger.debug("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nBEGIN ANALYZING THE IMPORTANT NODE") - logger.debug("type(ast_node) is %s", ast_node) - logger.debug("type(ast_node.value) is %s", ast_node.value) rhs_visitor.visit(ast_node.value) - logger.debug("rhs_visitor.result is %s", rhs_visitor.result) # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 0d25bc82..56f2a04b 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -31,8 +31,7 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') + SavedVariable = namedtuple('SavedVariable', 'LHS RHS') NOT_A_BLACKBOX = set(['Flask', @@ -236,27 +235,17 @@ def save_local_scope(self, line_number, original_previous_node): saved_variables_so_far.add(assignment.left_hand_side) save_name = 'save_' + str(self.function_index) + '_' +\ assignment.left_hand_side - logger.debug("previous_node is") previous_node = self.nodes[-1] - logger.debug(previous_node) r = RestoreNode(save_name + ' = ' + assignment.left_hand_side, save_name, [assignment.left_hand_side], line_number=line_number, path=self.filenames[-1]) saved_scope_node = self.append_node(r) - logger.debug("saved_scope_node is %s", saved_scope_node) saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) - logger.debug("[Flux]self.use_prev_node is %s", self.use_prev_node) if self.use_prev_node[-1] or previous_node is not original_previous_node: previous_node.connect(saved_scope_node) - logger.debug("[Flux]Connecting") - else: - logger.debug("original previous node is %s", original_previous_node) - logger.debug("[Flux]Not connecting") - # try_orelse hits here. - # raise return saved_variables @@ -276,14 +265,8 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number, original_ rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - logger.debug("[Flux] KILL self.nodes[-1] is %s", self.nodes[-1]) if self.use_prev_node[-1] or self.nodes[-1] is not original_previous_node: self.nodes[-1].connect(restore_node) - logger.debug("[2Flux]Connecting") - else: - logger.debug("[2Flux]Not connecting") - # example/example_inputs/try_orelse_with_no_variables_to_save.py - # raise self.nodes.append(restore_node) @@ -335,8 +318,6 @@ def restore_saved_local_scope(self, saved_variables, parameters, n.connect(successor) if restore_nodes: - logger.debug("[Flux]A5 self.nodes[-1] is %s", self.nodes[-1]) - logger.debug("[Flux]A5 restore_nodes are %s", restore_nodes) self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) @@ -396,12 +377,7 @@ def get_function_nodes(self, definition, original_previous_node): definition.name)) if self.use_prev_node[-1] or previous_node is not original_previous_node: previous_node.connect(entry_node) - logger.debug("[3Flux]Connecting") - else: - logger.debug("[3Flux]Not connecting") - logger.debug("[3Flux]original_previous_node is %s", original_previous_node) - # example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py - # raise + function_body_connect_statements = self.stmt_star_handler(definition.node.body) entry_node.connect(function_body_connect_statements.first_statement) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 21a822f2..34351239 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -14,9 +14,6 @@ def fixpointmethod(self, cfg_node): # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if cfg_node.vv_result: - for var in cfg_node.right_hand_side_variables: - if var not in cfg_node.vv_result: - raise if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 77ba5085..975db06f 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -15,8 +15,6 @@ Vulnerability, VulnerabilityLog ) -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') @@ -69,13 +67,6 @@ def identify_triggers(cfg, sources, sinks, lattice): node) for node in tainted_nodes] sources_in_file = find_triggers(assignment_nodes, sources) sources_in_file.extend(tainted_trigger_nodes) - logger.debug("sources[0] are %s", sources[0]) - logger.debug("type(sources[0]) are %s", type(sources[0])) - try: - logger.debug("assignment_nodes[0] are %s", assignment_nodes[0]) - logger.debug("type(assignment_nodes[0]) are %s", type(assignment_nodes[0])) - except Exception: - pass find_secondary_sources(assignment_nodes, sources_in_file, lattice) @@ -125,42 +116,20 @@ def update_assignments(l, assignment_nodes, source, lattice): def append_if_reassigned(l, secondary, node, lattice): try: - logger.debug("[DED]secondary is %s", secondary) - logger.debug("[DED]node is %s", node) - logger.debug("[DED] So lattice.in_constraint is %s", lattice.in_constraint(secondary, node)) - logger.debug("[DED]type(node) is %s", type(node)) - logger.debug("[DED]node.left_hand_side is %s", node.left_hand_side) - logger.debug("[DED]node.right_hand_side_variables is %s", node.right_hand_side_variables) - if node.vv_result: - logger.debug("[DED]node.vv_result is %s", node.vv_result) - # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if node.vv_result: - logger.debug("[DED] IMPORTANT secondary.left_hand_side is %s and node.vv_result is %s", secondary.left_hand_side, node.vv_result) if secondary.left_hand_side in node.vv_result: - logger.debug("Hmm, reaches `if secondary.left_hand_side in node.vv_result`") - # if node.left_hand_side in node.vv_result: if lattice.in_constraint(secondary, node): - logger.debug("IPHONE") l.append(node) return elif secondary.left_hand_side in node.right_hand_side_variables: if lattice.in_constraint(secondary, node): - logger.debug("Added") l.append(node) return if secondary.left_hand_side == node.left_hand_side: if lattice.in_constraint(secondary, node): - logger.debug("Added") l.append(node) return - else: - logger.debug("So node %s is not in the constraint of secondary %s", node, secondary) - logger.debug("So node.ingoing is %s ", node.ingoing) - logger.debug("So node.outgoing is %s ", node.outgoing) - logger.debug("So secondary.ingoing is %s ", secondary.ingoing) - logger.debug("So secondary.outgoing is %s ", secondary.outgoing) - logger.debug("Not added") except AttributeError: print(secondary) print('EXCEPT' + secondary) @@ -287,17 +256,12 @@ def get_sink_args(cfg_node): if isinstance(cfg_node.ast_node, ast.Call): rhs_visitor = RHSVisitor() rhs_visitor.visit(cfg_node.ast_node) - logger.debug("returning rhs_visitor.result %s", rhs_visitor.result) return rhs_visitor.result elif isinstance(cfg_node.ast_node, ast.Assign): - logger.debug("returning cfg_node.right_hand_side_variables %s", cfg_node.right_hand_side_variables) return cfg_node.right_hand_side_variables - else: - vv = VarsVisitor() - logger.debug("So cfg_node.ast_node is %s", cfg_node.ast_node) - logger.debug("So type of cfg_node.ast_node is %s", type(cfg_node.ast_node)) - vv.visit(cfg_node.ast_node) - logger.debug("So vv.result is %s", vv.result) + + vv = VarsVisitor() + vv.visit(cfg_node.ast_node) return vv.result @@ -321,15 +285,6 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() - logger.debug("[vuln] Hmm so source.secondary_nodes is %s", source.secondary_nodes) - logger.debug("[vuln] Hmm so source is %s", source) - logger.debug("[vuln] Hmm so source.cfg_node is %s", source.cfg_node) - - for node in source.secondary_nodes: - if lattice.in_constraint(source.cfg_node, node): - logger.debug("secondary node %s is reachable from %s", node, source.cfg_node) - else: - logger.debug("secondary node %s is NOT reachable from %s", node, source.cfg_node) if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, @@ -338,7 +293,6 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) - logger.debug(".... so sink_args is %s", sink_args) secondary_node_in_sink_args = None if sink_args: for node in secondary_in_sink: diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 9dde27d2..a38d3409 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,8 +1,6 @@ from .base_test_case import BaseTestCase from pyt.base_cfg import EntryOrExitNode, Node # from pyt.project_handler import get_modules -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class CFGGeneralTest(BaseTestCase): @@ -178,8 +176,6 @@ def test_orelse(self): self.cfg_create_from_file('example/example_inputs/try_orelse.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - logger.debug("Nodes are") - logger.debug(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=18) entry = 0 @@ -778,7 +774,6 @@ def test_call_with_attribute(self): self.assertEqual(call.label, "request.args.get('param', 'not set')") l = zip(range(1, length), range(length)) - logger.debug("self.cfg.nodes is %s", self.cfg.nodes) self.assertInCfg(list(l)) def test_call_with_attribute_line_numbers(self): From 26864b07a25ace4ca112edd4b4fb54d6f0cd5588 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 29 Aug 2017 17:20:42 -0400 Subject: [PATCH 138/541] [code climate]eliminate duplicate code --- pyt/interprocedural_cfg.py | 14 +++++++------- pyt/vulnerabilities.py | 21 ++++++++------------- 2 files changed, 15 insertions(+), 20 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 56f2a04b..c8eef9ae 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -243,12 +243,14 @@ def save_local_scope(self, line_number, original_previous_node): saved_scope_node = self.append_node(r) saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) - - if self.use_prev_node[-1] or previous_node is not original_previous_node: - previous_node.connect(saved_scope_node) + self.connect_if_allowed(previous_node, saved_scope_node, original_previous_node) return saved_variables + def connect_if_allowed(self, previous_node, node_to_connect_to, original_previous_node): + if self.use_prev_node[-1] or previous_node is not original_previous_node: + previous_node.connect(node_to_connect_to) + def save_actual_parameters_in_temp(self, args, arguments, line_number, original_previous_node): """Save the actual parameters of a function call.""" parameters = dict() @@ -265,8 +267,7 @@ def save_actual_parameters_in_temp(self, args, arguments, line_number, original_ rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - if self.use_prev_node[-1] or self.nodes[-1] is not original_previous_node: - self.nodes[-1].connect(restore_node) + self.connect_if_allowed(self.nodes[-1], restore_node, original_previous_node) self.nodes.append(restore_node) @@ -375,8 +376,7 @@ def get_function_nodes(self, definition, original_previous_node): previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) - if self.use_prev_node[-1] or previous_node is not original_previous_node: - previous_node.connect(entry_node) + self.connect_if_allowed(previous_node, entry_node, original_previous_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 975db06f..2349b177 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -113,23 +113,18 @@ def update_assignments(l, assignment_nodes, source, lattice): if node not in l: append_if_reassigned(l, other, node, lattice) - def append_if_reassigned(l, secondary, node, lattice): try: + reassigned = False # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - if node.vv_result: - if secondary.left_hand_side in node.vv_result: - if lattice.in_constraint(secondary, node): - l.append(node) - return + if node.vv_result and secondary.left_hand_side in node.vv_result: + reassigned = True elif secondary.left_hand_side in node.right_hand_side_variables: - if lattice.in_constraint(secondary, node): - l.append(node) - return - if secondary.left_hand_side == node.left_hand_side: - if lattice.in_constraint(secondary, node): - l.append(node) - return + reassigned = True + elif secondary.left_hand_side == node.left_hand_side: + reassigned = True + if reassigned and lattice.in_constraint(secondary, node): + l.append(node) except AttributeError: print(secondary) print('EXCEPT' + secondary) From 8fd51722b4563bf9b27e4b055d6274111055e956 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 29 Aug 2017 17:22:42 -0400 Subject: [PATCH 139/541] [pep8]add blank line --- pyt/vulnerabilities.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 2349b177..9b28e352 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -113,6 +113,7 @@ def update_assignments(l, assignment_nodes, source, lattice): if node not in l: append_if_reassigned(l, other, node, lattice) + def append_if_reassigned(l, secondary, node, lattice): try: reassigned = False From 413b9ad7aa7bb8065dc9055fb3f133694779b54f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 1 Sep 2017 18:52:09 -0400 Subject: [PATCH 140/541] fix the break_on_func_entry bug that caused an infinite loop --- pyt/base_cfg.py | 117 ++++++++++++++++++++++++------------- pyt/interprocedural_cfg.py | 17 +++++- tests/cfg_test.py | 40 ++++++++----- 3 files changed, 115 insertions(+), 59 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 8c4e41cd..984e9610 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -299,7 +299,7 @@ def get_last_statements(self, cfg_statements): else: return [cfg_statements[-1]] - def stmt_star_handler(self, stmts, use_prev_node=True): + def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -310,13 +310,17 @@ def stmt_star_handler(self, stmts, use_prev_node=True): self.use_prev_node.append(use_prev_node) first_node = None for stmt in stmts: + logger.debug("stmt is %s", stmt) node = self.visit(stmt) + logger.debug("node is %s", node) if isinstance(node, ControlFlowNode): break_nodes.extend(node.break_statements) elif isinstance(node, BreakNode): break_nodes.append(node) + logger.debug("BEFORE so first_node is %s", first_node) + if node and not first_node: # (Make sure first_node isn't already set.) # first_node is always a "node_to_connect", because it won't have ingoing otherwise # If we have e.g. @@ -329,8 +333,21 @@ def stmt_star_handler(self, stmts, use_prev_node=True): while current_node.ingoing: # Is it an Entry to a module? Let's not backwards traverse any more. # Entries to functions are fine + # logger.debug("Hey so this may be an infinite loop! :D") if current_node.ingoing[0].label.startswith('Entry module'): break + if break_on_func_entry and current_node.ingoing[0].label.startswith('Function Entry'): + logger.debug("WoahWoahWoahWoahWoah curent_node is %s", current_node) + logger.debug("WoahWoahWoahWoahWoah ingoing is %s", ingoing) + + break + logger.debug("CURRENT_NODE is %s", current_node) + logger.debug("current_node.ingoing is %s", current_node.ingoing) + logger.debug("current_node.ingoing[0] is %s", current_node.ingoing[0]) + logger.debug("current_node.ingoing[0].ingoing is %s", current_node.ingoing[0].ingoing) + # raise + # break + ingoing = current_node.ingoing current_node = current_node.ingoing[0] if ingoing: @@ -345,7 +362,19 @@ def stmt_star_handler(self, stmts, use_prev_node=True): cfg_statements.append(node) self.use_prev_node.pop() + logger.debug("Woah so first_node is %s", first_node) + if first_node.label.startswith('save_4_value'): + # raise + pass + # logger.debug("Woah so first_node.incoming is %s", first_node.incoming) + try: + logger.debug("Woah so first_node.incoming is %s", first_node.incoming) + except Exception: + pass + logger.debug("BEFORE cfg_statements are %s", cfg_statements) + self.connect_nodes(cfg_statements) + logger.debug("AFTER cfg_statements are %s", cfg_statements) if cfg_statements: if first_node: @@ -688,51 +717,53 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): self.function_call_index += 1 saved_function_call_index = self.function_call_index + original_previous_node = self.nodes[-1] self.undecided = False - label = LabelVisitor() - logger.debug("[BLUESTONE sucks] node is %s", node) - logger.debug("[BLUESTONE sucks] node.func is %s", node.func) - if isinstance(node.func, ast.Name): - logger.debug("[BLUESTONE sucks] node.func.attr is %s", node.func.id) - pass - elif isinstance(node.func, ast.Attribute): - attribute = node.func - - logger.debug("HERE COMES THE CRAZY AST CODE") - logger.debug("[3rd rail] attribute.attr is %s", attribute.attr) - logger.debug("[3rd rail] attribute.value is %s", attribute.value) - logger.debug("[3rd rail] type(attribute.value is %s", type(attribute.value)) - if isinstance(attribute.value, ast.Name): - logger.debug("[3rd rail] NAMENAMENAME dir(attribute.value) is %s", dir(attribute.value)) - elif isinstance(attribute.value, ast.Attribute): - logger.debug("[3rd rail] ATTRIBUTE ATTRIBUTE ATTRIBUTE dir(attribute.value) is %s", dir(attribute.value)) - elif isinstance(attribute.value, ast.Call): - the_call_before = attribute.value - logger.debug("the_call_before.args is %s", the_call_before.args) - for the_call_before_arg in the_call_before.args: - label = LabelVisitor() - label.visit(the_call_before_arg) - logger.debug("the_call_before_arg is %s, and label.result is %s", the_call_before_arg, label.result) - logger.debug("[3rd rail] CALL CALL CALL dir(attribute.value) is %s", dir(attribute.value)) - elif isinstance(attribute.value, ast.Str): - label = LabelVisitor() - label.visit(attribute.value) - logger.debug("[3rd rail] string attribute.value was %s", label.result) - else: - logger.debug("type(attribute.value) is %s", type(attribute.value)) - raise - else: - raise - logger.debug("AFTER THE CRAZY AST CODE") - logger.debug("[3rd rail] node is %s", node) - logger.debug("[3rd rail] node.args is %s", node.args) - logger.debug("[3rd rail] node.func is %s", node.func) - logger.debug("[3rd rail] node.keywords is %s", node.keywords) - logger.debug("[3rd rail] dir(node) is %s", dir(node)) + # label = LabelVisitor() + # logger.debug("[BLUESTONE sucks] node is %s", node) + # logger.debug("[BLUESTONE sucks] node.func is %s", node.func) + # if isinstance(node.func, ast.Name): + # logger.debug("[BLUESTONE sucks] node.func.attr is %s", node.func.id) + # pass + # elif isinstance(node.func, ast.Attribute): + # attribute = node.func + + # logger.debug("HERE COMES THE CRAZY AST CODE") + # logger.debug("[3rd rail] attribute.attr is %s", attribute.attr) + # logger.debug("[3rd rail] attribute.value is %s", attribute.value) + # logger.debug("[3rd rail] type(attribute.value is %s", type(attribute.value)) + # if isinstance(attribute.value, ast.Name): + # logger.debug("[3rd rail] NAMENAMENAME dir(attribute.value) is %s", dir(attribute.value)) + # elif isinstance(attribute.value, ast.Attribute): + # logger.debug("[3rd rail] ATTRIBUTE ATTRIBUTE ATTRIBUTE dir(attribute.value) is %s", dir(attribute.value)) + # elif isinstance(attribute.value, ast.Call): + # the_call_before = attribute.value + # logger.debug("the_call_before.args is %s", the_call_before.args) + # for the_call_before_arg in the_call_before.args: + # label = LabelVisitor() + # label.visit(the_call_before_arg) + # logger.debug("the_call_before_arg is %s, and label.result is %s", the_call_before_arg, label.result) + # logger.debug("[3rd rail] CALL CALL CALL dir(attribute.value) is %s", dir(attribute.value)) + # elif isinstance(attribute.value, ast.Str): + # label = LabelVisitor() + # label.visit(attribute.value) + # logger.debug("[3rd rail] string attribute.value was %s", label.result) + # else: + # logger.debug("type(attribute.value) is %s", type(attribute.value)) + # raise + # else: + # raise + # logger.debug("AFTER THE CRAZY AST CODE") + # logger.debug("[3rd rail] node is %s", node) + # logger.debug("[3rd rail] node.args is %s", node.args) + # logger.debug("[3rd rail] node.func is %s", node.func) + # logger.debug("[3rd rail] node.keywords is %s", node.keywords) + # logger.debug("[3rd rail] dir(node) is %s", dir(node)) + label = LabelVisitor() label.visit(node) # node should always be a call @@ -872,6 +903,10 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # THE CULPRIT! # self.nodes[-1].connect(call_node) # raise + logger.debug("1617CULPRIT self.nodes[-1] IS %s", self.nodes[-1]) + logger.debug("1617CULPRIT call_node IS %s", call_node) + # logger.debug("1617CULPRIT original_previous_node IS %s", original_previous_node) + self.connect_if_allowed(self.nodes[-1], call_node, original_previous_node) self.nodes.append(call_node) # raise # IMPORTANT diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index ed0d98ec..d205d794 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -267,6 +267,10 @@ def save_local_scope(self, line_number, saved_function_call_index, original_prev # Save LHS saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) + # logger.debug("[FLUX AGAIN] So saved_scope_node is %s", saved_scope_node) + # logger.debug("[FLUX AGAIN] So previous_node is %s", previous_node) + + # raise self.connect_if_allowed(previous_node, saved_scope_node, original_previous_node) return saved_variables @@ -384,6 +388,7 @@ def restore_saved_local_scope(self, line_number=line_number, path=self.filenames[-1])) + # logger.debug("BEFORE restore_nodes are %s", restore_nodes) # Chain the restore nodes for node, successor in zip(restore_nodes, restore_nodes[1:]): node.connect(successor) @@ -392,6 +397,7 @@ def restore_saved_local_scope(self, # Connect the last node to the first restore node self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) + # logger.debug("AFTER restore_nodes are %s", restore_nodes) return restore_nodes @@ -451,7 +457,7 @@ def process_function(self, call_node, definition): saved_variables = self.save_local_scope(def_node.lineno, saved_function_call_index, original_previous_node) - + logger.debug("BEFORE saved_variables are %s", saved_variables) args_mapping = self.save_def_args_in_temp(call_node.args, Arguments(def_node.args), call_node.lineno, @@ -467,6 +473,8 @@ def process_function(self, call_node, definition): self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) self.return_handler(call_node, function_nodes, saved_function_call_index) + logger.debug("AFTER saved_variables are %s", saved_variables) + self.function_return_stack.pop() except IndexError: error_call = get_call_names_as_string(call_node.func) @@ -491,8 +499,8 @@ def visit_and_get_function_nodes(self, definition, original_previous_node): definition.name)) self.connect_if_allowed(previous_node, entry_node, original_previous_node) - function_body_connect_statements = self.stmt_star_handler(definition.node.body) - + function_body_connect_statements = self.stmt_star_handler(definition.node.body, break_on_func_entry=True) + logger.debug("holy crap, function_body_connect_statements.first_statement is %s", function_body_connect_statements.first_statement) entry_node.connect(function_body_connect_statements.first_statement) exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) @@ -505,6 +513,9 @@ def visit_and_get_function_nodes(self, definition, original_previous_node): def visit_Call(self, node): _id = get_call_names_as_string(node.func) + if self.nodes[-1].label.startswith('¤call_4'): + logger.debug("HMMMM") + raise local_definitions = self.module_definitions_stack[-1] diff --git a/tests/cfg_test.py b/tests/cfg_test.py index df21dc25..3696f15e 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,6 +1,8 @@ from .base_test_case import BaseTestCase from pyt.base_cfg import EntryOrExitNode, Node # from pyt.project_handler import get_modules +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class CFGGeneralTest(BaseTestCase): @@ -177,7 +179,11 @@ def test_orelse(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - self.assert_length(self.cfg.nodes, expected_length=18) + # logger.debug("self.cfg.nodes are %s", self.cfg.nodes) + for i,n in enumerate(self.cfg.nodes): + logger.debug("%s n.label is %s", i, n.label) + + self.assert_length(self.cfg.nodes, expected_length=20) entry = 0 try_ = 1 @@ -185,18 +191,20 @@ def test_orelse(self): print_a5 = 3 except_im = 4 except_im_body_1 = 5 - print_wagyu = 6 - save_node = 7 - assign_to_temp = 8 - assign_from_temp = 9 - function_entry = 10 - ret_of_subprocess_call = 11 - function_exit = 12 - restore_node = 13 - return_handler = 14 - print_so = 15 - print_good = 16 - _exit = 17 + value_equal_call_2 = 6 # value = ¤call_2 + print_wagyu = 7 + save_node = 8 + assign_to_temp = 9 + assign_from_temp = 10 + function_entry = 11 + ret_of_subprocess_call = 12 + ret_does_this_kill_us_equal_call_5 = 13 # ret_does_this_kill_us = ¤call_5 + function_exit = 14 + restore_node = 15 + return_handler = 16 + print_so = 17 + print_good = 18 + _exit = 19 self.assertInCfg([self.connected(entry, try_), @@ -210,7 +218,8 @@ def test_orelse(self): self.connected(except_im, except_im_body_1), - self.connected(except_im_body_1, print_wagyu), + self.connected(except_im_body_1, value_equal_call_2), + self.connected(value_equal_call_2, print_wagyu), self.connected(print_wagyu, print_good), @@ -218,7 +227,8 @@ def test_orelse(self): self.connected(assign_to_temp, assign_from_temp), self.connected(assign_from_temp, function_entry), self.connected(function_entry, ret_of_subprocess_call), - self.connected(ret_of_subprocess_call, function_exit), + self.connected(ret_of_subprocess_call, ret_does_this_kill_us_equal_call_5), + self.connected(ret_does_this_kill_us_equal_call_5, function_exit), self.connected(function_exit, restore_node), self.connected(restore_node, return_handler), self.connected(return_handler, print_so), From fa8db0d36ac25d70156275ad3307413379690e89 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 5 Sep 2017 12:56:24 -0400 Subject: [PATCH 141/541] [fix bugs] Changed prev_node_to_avoid into a stack, added node_not_to_step_passed in stmt_star, fixed what was returned in visit_Return. test_orelse passes --- pyt/base_cfg.py | 53 +++++++++++++++++++++++++++--------- pyt/interprocedural_cfg.py | 55 +++++++++++++++++++------------------- 2 files changed, 69 insertions(+), 39 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 984e9610..cc80f340 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -47,10 +47,18 @@ def connect(self, successor): if isinstance(self, ConnectToExitNode) and\ not isinstance(successor, EntryOrExitNode): return - logger.debug("type(successor) is %s", type(successor)) - # if successor.label.startswith("scrypt"): - # logger.debug("trouble node is %s", successor) - # raise + + # Debug connects! + # first = 'Exit does_this_kill_us' + # second = 'call_5' + # if first in self.label or first in successor.label: + # logger.debug("self.label is %s", self.label) + # logger.debug("successor.label is %s", successor.label) + # # raise + # if second in successor.label or second in self.label: + # logger.debug("I am being connected to %s", successor) + # raise + self.outgoing.append(successor) successor.ingoing.append(self) @@ -299,7 +307,7 @@ def get_last_statements(self, cfg_statements): else: return [cfg_statements[-1]] - def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False): + def stmt_star_handler(self, stmts, prev_node_to_avoid=None, break_on_func_entry=False): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -307,8 +315,13 @@ def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False break_nodes = list() cfg_statements = list() - self.use_prev_node.append(use_prev_node) + if prev_node_to_avoid: + self.prev_nodes_to_avoid.append(prev_node_to_avoid) + first_node = None + logger.debug("\n\n\n***********in stmt_star_handler self.nodes[-1] is %s***************\n\n\n\n\n", self.nodes[-1]) + node_not_to_step_passed = self.nodes[-1] + for stmt in stmts: logger.debug("stmt is %s", stmt) node = self.visit(stmt) @@ -334,6 +347,10 @@ def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False # Is it an Entry to a module? Let's not backwards traverse any more. # Entries to functions are fine # logger.debug("Hey so this may be an infinite loop! :D") + + # e.g. We don't want to step passed the Except of an Except BB + if current_node.ingoing[0] == node_not_to_step_passed: + break if current_node.ingoing[0].label.startswith('Entry module'): break if break_on_func_entry and current_node.ingoing[0].label.startswith('Function Entry'): @@ -360,9 +377,11 @@ def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False else: first_node = node cfg_statements.append(node) + if prev_node_to_avoid: + self.prev_nodes_to_avoid.pop() - self.use_prev_node.pop() logger.debug("Woah so first_node is %s", first_node) + logger.debug("Woah so first_node.ingoing is %s", first_node.ingoing) if first_node.label.startswith('save_4_value'): # raise pass @@ -383,6 +402,7 @@ def stmt_star_handler(self, stmts, use_prev_node=True, break_on_func_entry=False first_statement = self.get_first_statement(cfg_statements[0]) last_statements = self.get_last_statements(cfg_statements) + logger.debug("Legal Pad] last_statements are %s", last_statements) return ConnectStatements(first_statement=first_statement, last_statements=last_statements, break_statements=break_nodes) else: # When body of module only contains ignored nodes return IgnoredNode() @@ -404,13 +424,16 @@ def handle_or_else(self, orelse, test): Returns: The last nodes of the orelse branch. """ + logger.debug("orelse is %s", orelse) if isinstance(orelse[0], ast.If): control_flow_node = self.visit(orelse[0]) self.add_elif_label(control_flow_node.test) test.connect(control_flow_node.test) return control_flow_node.last_nodes else: - else_connect_statements = self.stmt_star_handler(orelse, use_prev_node=False) + logger.debug("Ahh shit, so self.nodes[-1] is %s", self.nodes[-1]) + else_connect_statements = self.stmt_star_handler(orelse, prev_node_to_avoid=self.nodes[-1]) + logger.debug("hmm, connecting %s to %s", test, else_connect_statements.first_statement) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -455,6 +478,7 @@ def visit_Raise(self, node): def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): try: + logger.debug("[Tuesday] so fallback_cfg_node %s is being connected to %s", fallback_cfg_node, body.first_statement) fallback_cfg_node.connect(body.first_statement) except AttributeError: body = ConnectStatements([fallback_cfg_node], [fallback_cfg_node], list()) @@ -473,14 +497,22 @@ def visit_Try(self, node): name = '' handler_node = self.append_node(Node('except ' + name + ':', handler, line_number=handler.lineno, path=self.filenames[-1])) for body_node in body.last_statements: + logger.debug("[Tuesday]connecting %s with %s", body_node, handler_node) body_node.connect(handler_node) handler_body = self.stmt_star_handler(handler.body) + logger.debug("[sad panda] handler_node is %s", handler_node) + logger.debug("[sad panda] handler_body.first_statement is %s", handler_body.first_statement) + handler_body = self.handle_stmt_star_ignore_node(handler_body, handler_node) last_statements.extend(handler_body.last_statements) + logger.debug("[Tuesday] BEFORE try_node is %s", try_node) if node.orelse: + logger.debug("body.last_statements[-1] is %s", body.last_statements[-1]) orelse_last_nodes = self.handle_or_else(node.orelse, body.last_statements[-1]) body.last_statements.extend(orelse_last_nodes) + logger.debug("[Tuesday] AFTER try_node is %s", try_node) + if node.finalbody: finalbody = self.stmt_star_handler(node.finalbody) @@ -716,8 +748,6 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # Increment function_call_index self.function_call_index += 1 saved_function_call_index = self.function_call_index - - original_previous_node = self.nodes[-1] self.undecided = False @@ -905,8 +935,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # raise logger.debug("1617CULPRIT self.nodes[-1] IS %s", self.nodes[-1]) logger.debug("1617CULPRIT call_node IS %s", call_node) - # logger.debug("1617CULPRIT original_previous_node IS %s", original_previous_node) - self.connect_if_allowed(self.nodes[-1], call_node, original_previous_node) + self.connect_if_allowed(self.nodes[-1], call_node) self.nodes.append(call_node) # raise # IMPORTANT diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index d205d794..483fe954 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -74,7 +74,7 @@ def __init__(self, node, project_modules, local_modules, self.function_names = list() self.function_return_stack = list() self.module_definitions_stack = list() - self.use_prev_node = list() + self.prev_nodes_to_avoid = list() # Are we already in a module? if module_definitions: @@ -202,7 +202,6 @@ def visit_Return(self, node): LHS = 'ret_' + this_function_name if isinstance(node.value, ast.Call): - logger.debug("[Little Collins]Beware, check this code out") return_value_of_call = self.visit(node.value) return_node = ReturnNode(LHS + ' = ' + return_value_of_call.left_hand_side, LHS, return_value_of_call.left_hand_side, @@ -210,7 +209,7 @@ def visit_Return(self, node): path=self.filenames[-1]) return_value_of_call.connect(return_node) self.nodes.append(return_node) - return return_value_of_call + return return_node return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, rhs_visitor.result, @@ -234,13 +233,12 @@ def visit_Yield(self, node): node, line_number=node.lineno, path=self.filenames[-1])) - def save_local_scope(self, line_number, saved_function_call_index, original_previous_node): + def save_local_scope(self, line_number, saved_function_call_index): """Save the local scope before entering a function call by saving all the LHS's of assignments so far. Args: line_number(int): Of the def of the function call about to be entered into. saved_function_call_index(int): Unique number for each call. - original_previous_node(Node) Returns: saved_variables(list[SavedVariable]) @@ -271,15 +269,19 @@ def save_local_scope(self, line_number, saved_function_call_index, original_prev # logger.debug("[FLUX AGAIN] So previous_node is %s", previous_node) # raise - self.connect_if_allowed(previous_node, saved_scope_node, original_previous_node) + self.connect_if_allowed(previous_node, saved_scope_node) return saved_variables - def connect_if_allowed(self, previous_node, node_to_connect_to, original_previous_node): - if self.use_prev_node[-1] or previous_node is not original_previous_node: - previous_node.connect(node_to_connect_to) + def connect_if_allowed(self, previous_node, node_to_connect_to): + try: + if previous_node is not self.prev_nodes_to_avoid[-1]: + previous_node.connect(node_to_connect_to) + except IndexError: + # If there are no prev_nodes_to_avoid we just connect safely. + previous_node.connect(node_to_connect_to) - def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index, original_previous_node): + def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): """Save the arguments of the definition being called. Visit the arguments if they're calls. Args: @@ -287,7 +289,6 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. saved_function_call_index(int): Unique number for each call. - original_previous_node(Node) Returns: args_mapping(dict): A mapping of call argument to definition argument. @@ -321,7 +322,7 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function call_arg_rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) - self.connect_if_allowed(self.nodes[-1], restore_node, original_previous_node) + self.connect_if_allowed(self.nodes[-1], restore_node) self.nodes.append(restore_node) args_mapping[call_arg_label_visitor.result] = def_args[i] @@ -340,7 +341,7 @@ def create_local_scope_from_def_args(self, line_number(int): Of the def of the function call about to be entered into. saved_function_call_index(int): Unique number for each call. - Note: We do not need a check of original_previous_node because of the + Note: We do not need a connect_if_allowed because of the preceding call to save_def_args_in_temp. """ # Create e.g. def_arg1 = temp_N_def_arg1 for each argument @@ -367,7 +368,7 @@ def restore_saved_local_scope(self, args_mapping(dict): A mapping of call argument to definition argument. line_number(int): Of the def of the function call about to be entered into. - Note: We do not need a check of original_previous_node because of the + Note: We do not need connect_if_allowed because of the preceding call to save_local_scope. """ restore_nodes = list() @@ -420,6 +421,8 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index): [RHS], line_number=call_node.lineno, path=self.filenames[-1]) + logger.debug("Florence, self.nodes[-1] is %s", self.nodes[-1]) + logger.debug("Florence, return_node is %s", return_node) self.nodes[-1].connect(return_node) self.nodes.append(return_node) return @@ -452,43 +455,40 @@ def process_function(self, call_node, definition): saved_function_call_index = self.function_call_index def_node = definition.node - original_previous_node = self.nodes[-1] saved_variables = self.save_local_scope(def_node.lineno, - saved_function_call_index, - original_previous_node) + saved_function_call_index) logger.debug("BEFORE saved_variables are %s", saved_variables) args_mapping = self.save_def_args_in_temp(call_node.args, Arguments(def_node.args), call_node.lineno, - saved_function_call_index, - original_previous_node) + saved_function_call_index) self.filenames.append(definition.path) self.create_local_scope_from_def_args(call_node.args, Arguments(def_node.args), def_node.lineno, saved_function_call_index) - function_nodes = self.visit_and_get_function_nodes(definition, original_previous_node) + function_nodes = self.visit_and_get_function_nodes(definition) self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) self.return_handler(call_node, function_nodes, saved_function_call_index) - logger.debug("AFTER saved_variables are %s", saved_variables) + logger.debug("AFTER saved_variables are %s", saved_variables) self.function_return_stack.pop() except IndexError: error_call = get_call_names_as_string(call_node.func) print('Error: Possible nameclash in "{}".' + ' Call omitted!\n'.format(error_call)) + logger.debug('[Legal pad] returning %s', self.nodes[-1]) return self.nodes[-1] - def visit_and_get_function_nodes(self, definition, original_previous_node): + def visit_and_get_function_nodes(self, definition): """Visits the nodes of a user defined function. Args: definition(LocalModuleDefinition): Definition of the function being added. - original_previous_node(Node) Returns: the_new_nodes(list[Node]): The nodes added while visiting the function. @@ -497,13 +497,14 @@ def visit_and_get_function_nodes(self, definition, original_previous_node): previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) - self.connect_if_allowed(previous_node, entry_node, original_previous_node) + self.connect_if_allowed(previous_node, entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body, break_on_func_entry=True) logger.debug("holy crap, function_body_connect_statements.first_statement is %s", function_body_connect_statements.first_statement) entry_node.connect(function_body_connect_statements.first_statement) exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) + logger.debug("No light] function_body_connect_statements.last_statements are %s", function_body_connect_statements.last_statements) exit_node.connect_predecessors(function_body_connect_statements.last_statements) the_new_nodes = self.nodes[len_before_visiting_func:] @@ -513,9 +514,9 @@ def visit_and_get_function_nodes(self, definition, original_previous_node): def visit_Call(self, node): _id = get_call_names_as_string(node.func) - if self.nodes[-1].label.startswith('¤call_4'): - logger.debug("HMMMM") - raise + # if self.nodes[-1].label.startswith('¤call_4'): + # logger.debug("HMMMM") + # raise local_definitions = self.module_definitions_stack[-1] From 830bc5c8c10438ee0106a3740bcec54b04a9c949 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 6 Sep 2017 15:39:43 -0400 Subject: [PATCH 142/541] Fix 3 -1 problems due to loops, adjust many tests for new code, only thing left is traversing keyword_args, and adjusting remaining tests --- pyt/base_cfg.py | 41 +++--- pyt/interprocedural_cfg.py | 24 +++- tests/analysis_base_test_case.py | 2 +- tests/cfg_test.py | 150 +++++++++++++-------- tests/import_test.py | 32 ++--- tests/reaching_definitions_taint_test.py | 79 ++++++++--- tests/reaching_definitions_test.py | 58 +++++--- tests/vars_visitor_test.py | 2 +- tests/vulnerabilities_across_files_test.py | 35 ++--- tests/vulnerabilities_test.py | 4 +- 10 files changed, 276 insertions(+), 151 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index cc80f340..b6b67155 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -307,7 +307,7 @@ def get_last_statements(self, cfg_statements): else: return [cfg_statements[-1]] - def stmt_star_handler(self, stmts, prev_node_to_avoid=None, break_on_func_entry=False): + def stmt_star_handler(self, stmts, prev_node_to_avoid=None): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -323,9 +323,16 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None, break_on_func_entry= node_not_to_step_passed = self.nodes[-1] for stmt in stmts: - logger.debug("stmt is %s", stmt) + logger.debug("[kaytranada]stmt is %s", stmt) + node = self.visit(stmt) - logger.debug("node is %s", node) + if isinstance(stmt, ast.While) or isinstance(stmt, ast.For): + self.last_was_loop_stack.append(True) + else: + self.last_was_loop_stack.append(False) + + logger.debug("[kaytranada]node is %s", node) + logger.debug("[kaytranada]type(node) is %s", type(node)) if isinstance(node, ControlFlowNode): break_nodes.extend(node.break_statements) @@ -344,26 +351,13 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None, break_on_func_entry= ingoing = None current_node = node while current_node.ingoing: - # Is it an Entry to a module? Let's not backwards traverse any more. - # Entries to functions are fine - # logger.debug("Hey so this may be an infinite loop! :D") - # e.g. We don't want to step passed the Except of an Except BB if current_node.ingoing[0] == node_not_to_step_passed: - break - if current_node.ingoing[0].label.startswith('Entry module'): - break - if break_on_func_entry and current_node.ingoing[0].label.startswith('Function Entry'): - logger.debug("WoahWoahWoahWoahWoah curent_node is %s", current_node) - logger.debug("WoahWoahWoahWoahWoah ingoing is %s", ingoing) - break logger.debug("CURRENT_NODE is %s", current_node) logger.debug("current_node.ingoing is %s", current_node.ingoing) logger.debug("current_node.ingoing[0] is %s", current_node.ingoing[0]) logger.debug("current_node.ingoing[0].ingoing is %s", current_node.ingoing[0].ingoing) - # raise - # break ingoing = current_node.ingoing current_node = current_node.ingoing[0] @@ -379,12 +373,12 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None, break_on_func_entry= cfg_statements.append(node) if prev_node_to_avoid: self.prev_nodes_to_avoid.pop() - + self.last_was_loop_stack.pop() logger.debug("Woah so first_node is %s", first_node) - logger.debug("Woah so first_node.ingoing is %s", first_node.ingoing) - if first_node.label.startswith('save_4_value'): - # raise - pass + # logger.debug("Woah so first_node.ingoing is %s", first_node.ingoing) + # if first_node.label.startswith('save_4_value'): + # # raise + # pass # logger.debug("Woah so first_node.incoming is %s", first_node.incoming) try: logger.debug("Woah so first_node.incoming is %s", first_node.incoming) @@ -673,7 +667,7 @@ def visit_AugAssign(self, node): def loop_node_skeleton(self, test, node): """Common handling of looped structures, while and for.""" - body_connect_stmts = self.stmt_star_handler(node.body) + body_connect_stmts = self.stmt_star_handler(node.body, prev_node_to_avoid=self.nodes[-1]) test.connect(body_connect_stmts.first_statement) test.connect_predecessors(body_connect_stmts.last_statements) @@ -684,13 +678,14 @@ def loop_node_skeleton(self, test, node): last_nodes.extend(body_connect_stmts.break_statements) if node.orelse: - orelse_connect_stmts = self.stmt_star_handler(node.orelse) + orelse_connect_stmts = self.stmt_star_handler(node.orelse, prev_node_to_avoid=self.nodes[-1]) test.connect(orelse_connect_stmts.first_statement) last_nodes.extend(orelse_connect_stmts.last_statements) else: last_nodes.append(test) # if there is no orelse, test needs an edge to the next_node + logger.debug("[broke] last_nodes are %s", last_nodes) return ControlFlowNode(test, last_nodes, list()) def add_while_label(self, node): diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 483fe954..46895238 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -75,6 +75,7 @@ def __init__(self, node, project_modules, local_modules, self.function_return_stack = list() self.module_definitions_stack = list() self.prev_nodes_to_avoid = list() + self.last_was_loop_stack = list() # Are we already in a module? if module_definitions: @@ -274,10 +275,31 @@ def save_local_scope(self, line_number, saved_function_call_index): return saved_variables def connect_if_allowed(self, previous_node, node_to_connect_to): + try: + # Do not connect if last statement was a loop e.g. + # while x != 10: + # if x > 0: + # print(x) + # break + # else: + # print('hest') + # print('next') # self.nodes[-1] is print('hest') + if self.last_was_loop_stack[-1]: + logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) + logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) + return + except IndexError: + pass try: if previous_node is not self.prev_nodes_to_avoid[-1]: + logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) previous_node.connect(node_to_connect_to) + else: + logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) + logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) except IndexError: + logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") + logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) # If there are no prev_nodes_to_avoid we just connect safely. previous_node.connect(node_to_connect_to) @@ -499,7 +521,7 @@ def visit_and_get_function_nodes(self, definition): definition.name)) self.connect_if_allowed(previous_node, entry_node) - function_body_connect_statements = self.stmt_star_handler(definition.node.body, break_on_func_entry=True) + function_body_connect_statements = self.stmt_star_handler(definition.node.body) logger.debug("holy crap, function_body_connect_statements.first_statement is %s", function_body_connect_statements.first_statement) entry_node.connect(function_body_connect_statements.first_statement) diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 10c8dedf..d6590a11 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -2,7 +2,7 @@ from collections import namedtuple from .base_test_case import BaseTestCase -from pyt.constraint_table import initialize_constraint_table +from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import FixedPointAnalysis from pyt.lattice import Lattice diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 3696f15e..27566cde 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -76,13 +76,20 @@ def test_for_complete(self): exit_node = 7 self.assertEqual(self.cfg.nodes[for_node].label,'for x in range(3):') - self.assertEqual(self.cfg.nodes[body_1].label, 'print(x)') + self.assertEqual(self.cfg.nodes[body_1].label, '¤call_1 = ret_print(x)') self.assertEqual(self.cfg.nodes[body_2].label, 'y += 1') - self.assertEqual(self.cfg.nodes[else_body_1].label, "print('Final: %s' % x)") - self.assertEqual(self.cfg.nodes[else_body_2].label, 'print(y)') + self.assertEqual(self.cfg.nodes[else_body_1].label, "¤call_2 = ret_print('Final: %s' % x)") + self.assertEqual(self.cfg.nodes[else_body_2].label, '¤call_3 = ret_print(y)') self.assertEqual(self.cfg.nodes[next_node].label, 'x = 3') - self.assertInCfg([(for_node, entry), (body_1, for_node), (else_body_1, for_node), (body_2, body_1), (for_node, body_2), (else_body_2, else_body_1), (next_node, else_body_2), (exit_node, next_node)]) + self.assertInCfg([(for_node, entry), + (body_1, for_node), + (else_body_1, for_node), + (body_2, body_1), + (for_node, body_2), + (else_body_2, else_body_1), + (next_node, else_body_2), + (exit_node, next_node)]) def test_for_no_orelse(self): self.cfg_create_from_file('example/example_inputs/for_no_orelse.py') @@ -120,10 +127,10 @@ def test_for_line_numbers(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) for_node = self.nodes['for x in range(3):'] - body_1 = self.nodes['print(x)'] + body_1 = self.nodes['¤call_1 = ret_print(x)'] body_2 = self.nodes['y += 1'] - else_body_1 = self.nodes["print('Final: %s' % x)"] - else_body_2 = self.nodes['print(y)'] + else_body_1 = self.nodes["¤call_2 = ret_print('Final: %s' % x)"] + else_body_2 = self.nodes['¤call_3 = ret_print(y)'] next_node = self.nodes['x = 3'] self.assertLineNumber(for_node, 1) @@ -136,18 +143,29 @@ def test_for_line_numbers(self): def test_for_func_iterator(self): self.cfg_create_from_file('example/example_inputs/for_func_iterator.py') - self.assert_length(self.cfg.nodes, expected_length=8) + logger.debug("self.cfg.nodes are %s", self.cfg.nodes) + self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 _for = 1 entry_foo = 2 - ret_foo = 3 - exit_foo = 4 - call_foo = 5 - _print = 6 - _exit = 7 + call_to_range = 3 + ret_foo = 4 + exit_foo = 5 + call_foo = 6 + _print = 7 + _exit = 8 - self.assertInCfg([(_for, entry), (_for, call_foo), (_for, _print), (entry_foo, _for), (ret_foo, entry_foo), (exit_foo, ret_foo), (call_foo, exit_foo), (_print, _for), (_exit, _for)]) + self.assertInCfg([(_for, entry), + (_for, call_foo), + (_for, _print), + (entry_foo, _for), + (call_to_range, entry_foo), + (ret_foo, call_to_range), + (exit_foo, ret_foo), + (call_foo, exit_foo), + (_print, _for), + (_exit, _for)]) class CFGTryTest(BaseTestCase): def connected(self, node, successor): @@ -576,7 +594,7 @@ def test_assign_list_comprehension(self): self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[1] - self.assertEqual(call.label, "¤call_1 = ret_''''.join((x.n for x in range(16)))") + self.assertEqual(call.label, "¤call_1 = ret_''.join((x.n for x in range(16)))") l = zip(range(1, length), range(length)) @@ -651,19 +669,23 @@ def test_simple_function(self): path = 'example/example_inputs/simple_function.py' self.cfg_create_from_file(path) + for i, n in enumerate(self.cfg.nodes): + logger.debug("#%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=8) + self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 - y_assignment = 1 - save_y = 2 - entry_foo = 3 - body_foo = 4 - exit_foo = 5 - y_load = 6 - exit_ = 7 + input_call = 1 + y_assignment = 2 + save_y = 3 + entry_foo = 4 + body_foo = 5 + exit_foo = 6 + y_load = 7 + exit_ = 8 - self.assertInCfg([self.connected(entry, y_assignment), + self.assertInCfg([self.connected(entry, input_call), + self.connected(input_call, y_assignment), self.connected(y_assignment, save_y), self.connected(save_y, entry_foo), self.connected(entry_foo, body_foo), @@ -674,50 +696,63 @@ def test_simple_function(self): def test_function_line_numbers(self): path = 'example/example_inputs/simple_function.py' self.cfg_create_from_file(path) - - y_assignment = self.cfg.nodes[1] - save_y = self.cfg.nodes[2] - entry_foo = self.cfg.nodes[3] - body_foo = self.cfg.nodes[4] - exit_foo = self.cfg.nodes[5] - y_load = self.cfg.nodes[6] - + + input_call = self.cfg.nodes[1] + y_assignment = self.cfg.nodes[2] + save_y = self.cfg.nodes[3] + entry_foo = self.cfg.nodes[4] + body_foo = self.cfg.nodes[5] + exit_foo = self.cfg.nodes[6] + y_load = self.cfg.nodes[7] + + self.assertLineNumber(input_call, 5) self.assertLineNumber(y_assignment, 5) self.assertLineNumber(save_y, 1) self.assertLineNumber(entry_foo, None) self.assertLineNumber(body_foo, 2) + self.assertLineNumber(exit_foo, None) + self.assertLineNumber(y_load, 1) def test_function_parameters(self): path = 'example/example_inputs/parameters_function.py' self.cfg_create_from_file(path) - self.assert_length(self.cfg.nodes, expected_length=12) + self.assert_length(self.cfg.nodes, expected_length=14) entry = 0 - y_assignment = 1 - save_y = 2 - save_actual_y = 3 - bar_local_y = 4 - entry_bar = 5 - bar_y_assignment = 6 - bar_print_y = 7 - bar_print_x = 8 - exit_bar = 9 - restore_actual_y = 10 - exit_ = 11 - - self.assertInCfg([self.connected(entry, y_assignment), self.connected(y_assignment, save_y), - self.connected(save_y, save_actual_y), self.connected(save_actual_y, bar_local_y), - self.connected(bar_local_y, entry_bar), self.connected(entry_bar, bar_y_assignment), - self.connected(bar_y_assignment, bar_print_y), self.connected(bar_print_y, bar_print_x), - self.connected(bar_print_x, exit_bar), self.connected(exit_bar, restore_actual_y), + input_call = 1 + y_assignment = 2 + save_y = 3 + save_actual_y = 4 + bar_local_y = 5 + entry_bar = 6 + another_input_call = 7 + bar_y_assignment = 8 + bar_print_y = 9 + bar_print_x = 10 + exit_bar = 11 + restore_actual_y = 12 + exit_ = 13 + + self.assertInCfg([self.connected(entry, input_call), + self.connected(input_call, y_assignment), + self.connected(y_assignment, save_y), + self.connected(save_y, save_actual_y), + self.connected(save_actual_y, bar_local_y), + self.connected(bar_local_y, entry_bar), + self.connected(entry_bar, another_input_call), + self.connected(another_input_call, bar_y_assignment), + self.connected(bar_y_assignment, bar_print_y), + self.connected(bar_print_y, bar_print_x), + self.connected(bar_print_x, exit_bar), + self.connected(exit_bar, restore_actual_y), self.connected(restore_actual_y, exit_)]) def test_function_with_return(self): path = 'example/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) - self.assert_length(self.cfg.nodes, expected_length=18) + self.assert_length(self.cfg.nodes, expected_length=19) l = zip(range(1, len(self.cfg.nodes)), range(len(self.cfg.nodes))) self.assertInCfg(list(l)) @@ -788,7 +823,7 @@ def test_call_with_attribute(self): self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[2] - self.assertEqual(call.label, "request.args.get('param', 'not set')") + self.assertEqual(call.label, "¤call_1 = ret_request.args.get('param', 'not set')") l = zip(range(1, length), range(length)) self.assertInCfg(list(l)) @@ -814,7 +849,16 @@ def test_break(self): print_next = 6 _exit = 7 - self.assertInCfg([(_while, entry), (_while, print_hest), (_if, _while), (print_x, _if), (_break, print_x), (print_hest, _if), (print_next, _while), (print_next, _break), (_exit, print_next)]) + # (foo, bar) means foo <- bar + self.assertInCfg([(_while, entry), + (_while, print_hest), + (_if, _while), + (print_x, _if), + (_break, print_x), + (print_hest, _if), + (print_next, _while), + (print_next, _break), + (_exit, print_next)]) class CFGNameConstant(BaseTestCase): diff --git a/tests/import_test.py b/tests/import_test.py index 5d6ea3f0..09afd69e 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -129,13 +129,13 @@ def test_from_package_import_star(self): "Module Exit folder", "Module Exit package_star", "Function Entry A.cobia", - "print('A')", + "¤call_2 = ret_print('A')", "Exit A.cobia", "Function Entry B.al", - "print('B')", + "¤call_4 = ret_print('B')", "Exit B.al", "Function Entry folder.C.pastor", - "print('C')", + "¤call_6 = ret_print('C')", "Exit folder.C.pastor", "Exit module"] @@ -162,13 +162,13 @@ def test_from_package_import_star_with_alias(self): "Module Exit folder", "Module Exit package_star_with_alias", "Function Entry husk.cobia", - "print('A')", + "¤call_2 = ret_print('A')", "Exit husk.cobia", "Function Entry meringue.al", - "print('B')", + "¤call_4 = ret_print('B')", "Exit meringue.al", "Function Entry corn.mousse.pastor", - "print('C')", + "¤call_6 = ret_print('C')", "Exit corn.mousse.pastor", "Exit module"] @@ -467,7 +467,7 @@ def test_package_with_function(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function", "Function Entry package_with_function.StarbucksVisitor", - "print('Iced Mocha')", + "¤call_2 = ret_print('Iced Mocha')", "Exit package_with_function.StarbucksVisitor", "Exit module"] @@ -491,7 +491,7 @@ def test_package_with_function_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function_and_alias", "Function Entry package_with_function_and_alias.EatalyVisitor", - "print('Iced Mocha')", + "¤call_2 = ret_print('Iced Mocha')", "Exit package_with_function_and_alias.EatalyVisitor", "Exit module"] @@ -513,7 +513,7 @@ def test_package_with_file(self): "Module Exit Starbucks", "Module Exit package_with_file", "Function Entry package_with_file.Starbucks.Tea", - "print('Teavana Green')", + "¤call_2 = ret_print('Teavana Green')", "Exit package_with_file.Starbucks.Tea", "Exit module"] @@ -535,7 +535,7 @@ def test_package_with_file_and_alias(self): "Module Exit Starbucks", "Module Exit package_with_file_and_alias", "Function Entry package_with_file_and_alias.Eataly.Tea", - "print('Teavana Green')", + "¤call_2 = ret_print('Teavana Green')", "Exit package_with_file_and_alias.Eataly.Tea", "Exit module"] @@ -559,7 +559,7 @@ def test_package_with_folder(self): "Module Exit nested_folder_with_init", "Module Exit package_with_folder", "Function Entry package_with_folder.nested_folder_with_init.moose.fast", - "print('real fast')", + "¤call_2 = ret_print('real fast')", "Exit package_with_folder.nested_folder_with_init.moose.fast", "Exit module"] @@ -583,7 +583,7 @@ def test_package_with_folder_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_folder_and_alias", "Function Entry package_with_folder_and_alias.heyo.moose.fast", - "print('real fast')", + "¤call_2 = ret_print('real fast')", "Exit package_with_folder_and_alias.heyo.moose.fast", "Exit module"] @@ -607,7 +607,7 @@ def test_from_package_with_function(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function", "Function Entry StarbucksVisitor", - "print('Iced Mocha')", + "¤call_2 = ret_print('Iced Mocha')", "Exit StarbucksVisitor", "Exit module"] @@ -631,7 +631,7 @@ def test_from_package_with_function_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function_and_alias", "Function Entry EatalyVisitor", - "print('Iced Mocha')", + "¤call_2 = ret_print('Iced Mocha')", "Exit EatalyVisitor", "Exit module"] @@ -653,7 +653,7 @@ def test_from_package_with_file(self): "Module Exit Starbucks", "Module Exit package_with_file", "Function Entry Starbucks.Tea", - "print('Teavana Green')", + "¤call_2 = ret_print('Teavana Green')", "Exit Starbucks.Tea", "Exit module"] @@ -675,7 +675,7 @@ def test_from_package_with_file_and_alias(self): "Module Exit Starbucks", "Module Exit package_with_file_and_alias", "Function Entry Eataly.Tea", - "print('Teavana Green')", + "¤call_2 = ret_print('Teavana Green')", "Exit Eataly.Tea", "Exit module"] diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index 115a27fa..53e80707 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -3,29 +3,53 @@ from .analysis_base_test_case import AnalysisBaseTestCase from pyt.constraint_table import constraint_table from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/linear.py', ReachingDefinitionsTaintAnalysis) - self.assertInCfg([(1,1), - (1,2), (2,2), - (1,3), (2,3), - (1,4), (2,4)], lattice) + EXPECTED = [ + "Label: Entry module:", + "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: y = x - 1: Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()" + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + logger.debug("row is %s", row) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_if_program(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/if_program.py', ReachingDefinitionsTaintAnalysis) - self.assertInCfg([(1,1), - (1,2), - (1,3), (3,3), - (1,4), (3,4), - (1,5), (3,5)], lattice) + EXPECTED = [ + "Label: Entry module:", + "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: if x > 0:: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: y = x + 1: Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()" + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_example(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/example.py', ReachingDefinitionsTaintAnalysis) EXPECTED = [ @@ -48,6 +72,7 @@ def test_example(self): i = 0 for k, v in constraint_table.items(): row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + logger.debug("EXAMPLErow is %s", row) self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) i = i + 1 @@ -60,22 +85,34 @@ def test_func_with_params(self): (1,4), (2,4), (3,4), (4,4), (1,5), (2,5), (3,5), (4,5), *self.constraints([1,2,3,4,6], 6), - *self.constraints([1,2,3,4,6], 7), - *self.constraints([1,2,3,4,6], 8), - *self.constraints([2,3,4,6,9], 9), - *self.constraints([2,3,4,6,9], 10)], lattice) + *self.constraints([1,2,3,4,6,7], 7), + *self.constraints([1,2,3,4,6,7], 8), + *self.constraints([2,3,4,6,7,9], 9), + *self.constraints([2,3,4,6,7,9], 10)], lattice) def test_while(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/while.py', ReachingDefinitionsTaintAnalysis) - self.assertInCfg([(1,1), - (1,2), (3,2), - (1,3), (3,3), - (1,4), (3,4), - (1,5), (3,5), - (6,6), - (1,7), (3,7), (6,7), - (1,8), (3,8), (6,8)], lattice) + EXPECTED = [ + "Label: Entry module: ", + "Label: ¤call_2 = ret_input(): Label: ¤call_2 = ret_input()", + "Label: ¤call_1 = ret_int(¤call_2): Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: while x < 10:: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input(", + "Label: x = x + 1: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: if x == 5:: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: BreakNode: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: x = 6: Label: x = 6, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", + "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()" + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + logger.debug("row is %s", row) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_join(self): pass diff --git a/tests/reaching_definitions_test.py b/tests/reaching_definitions_test.py index 377a6537..b3a6172c 100644 --- a/tests/reaching_definitions_test.py +++ b/tests/reaching_definitions_test.py @@ -1,30 +1,52 @@ from .analysis_base_test_case import AnalysisBaseTestCase +from pyt.constraint_table import constraint_table from pyt.reaching_definitions import ReachingDefinitionsAnalysis +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ReachingDefinitionsTest(AnalysisBaseTestCase): def test_linear_program(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/linear.py', ReachingDefinitionsAnalysis) - self.assertInCfg([(1,1), - (1,2), (2,2), - (1,3), (2,3), - (1,4), (2,4)], lattice) + EXPECTED = [ + "Label: Entry module: ", + "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: y = x - 1: Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_example(self): + constraint_table = {} lattice = self.run_analysis('example/example_inputs/example.py', ReachingDefinitionsAnalysis) - self.assertInCfg([(1,1), - (2,2), - *self.constraints([2,4,6,9,10], 3), - *self.constraints([2,4,6,9,10], 4), - *self.constraints([2,4,6,9,10], 5), - *self.constraints([4,6,10], 6), - *self.constraints([2,4,6,7,9], 7), - *self.constraints([2,4,6,7,9], 8), - *self.constraints([4,7,9], 9), - *self.constraints([2,4,6,9,10], 10), - *self.constraints([2,4,6,9,10], 11), - *self.constraints([2,4,6,9,10], 12)], lattice) - - + EXPECTED = [ + "Label: Entry module: ", + "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", + "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ¤call_2 = ret_int(x): Label: ¤call_2 = ret_int(x), Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: x = ¤call_2: Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: x = x - y: Label: z = z - 1, Label: x = x - y, Label: y = x / 2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: y = x / 2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + ] + i = 0 + for k, v in constraint_table.items(): + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 diff --git a/tests/vars_visitor_test.py b/tests/vars_visitor_test.py index 9232b016..6baa9d2e 100644 --- a/tests/vars_visitor_test.py +++ b/tests/vars_visitor_test.py @@ -42,7 +42,7 @@ def test_call4(self): def test_call5(self): vars = self.perform_vars_on_expression("resp = make_response(html.replace('{{ param }}', param))") - self.assertEqual(vars.result, ['resp', 'html', 'param']) + self.assertEqual(vars.result, ['resp', 'ret_replace']) def test_keyword_vararg(self): vars = self.perform_vars_on_expression('print(arg = x)') diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 736ca9e2..eb869b7f 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -54,20 +54,23 @@ def test_blackbox_library_call(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code_across_files/blackbox_library_call.py - > User input at line 12, trigger word "get(": - param = request.args.get('suggestion') + > User input at line 12, trigger word "get(": + ¤call_1 = ret_request.args.get('suggestion') Reassigned in: File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 15: foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + > Line 12: param = ¤call_1 File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 16: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + > Line 16: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + File: example/vulnerable_code_across_files/blackbox_library_call.py + > Line 16: command = ¤call_2 File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 17: hey = command File: example/vulnerable_code_across_files/blackbox_library_call.py > reaches line 18, trigger word "subprocess.call(": - subprocess.call(hey,shell=True) - This vulnerability is unknown due to: Label: command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + ¤call_3 = ret_subprocess.call(hey) + This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_builtin_with_user_defined_inner(self): @@ -78,31 +81,31 @@ def test_builtin_with_user_defined_inner(self): logger.debug("vulnerability_description is %s", vulnerability_description) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/builtin_with_user_defined_inner.py - > User input at line 22, trigger word "form[": + > User input at line 20, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/builtin_with_user_defined_inner.py > Line 14: save_2_req_param = req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 25: temp_2_inner_arg = req_param + > Line 23: temp_2_inner_arg = req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py > Line 14: inner_arg = temp_2_inner_arg File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 17: yes_vuln = inner_arg + 'hey' + > Line 15: yes_vuln = inner_arg + 'hey' File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 18: ret_inner = yes_vuln + > Line 16: ret_inner = yes_vuln File: example/nested_functions_code/builtin_with_user_defined_inner.py > Line 14: req_param = inner_arg File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 25: ¤call_2 = ret_inner + > Line 23: ¤call_2 = ret_inner File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 25: ¤call_1 = ret_scrypt.encrypt(inner(req_param)) + > Line 23: ¤call_1 = ret_scrypt.encrypt(¤call_2) File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 25: foo = ¤call_1 + > Line 23: foo = ¤call_1 File: example/nested_functions_code/builtin_with_user_defined_inner.py - > reaches line 31, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(foo,shell=True) - This vulnerability is unknown due to: Label: foo = ¤call_1 + > reaches line 24, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(foo) + This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 2cb575bf..fc167680 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -9,6 +9,8 @@ from pyt.framework_helper import is_flask_route_function from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class EngineTest(BaseTestCase): @@ -102,7 +104,7 @@ def test_build_sanitiser_node_dict(self): self.assert_length(sanitiser_dict, expected_length=1) self.assertIn('escape', sanitiser_dict.keys()) - self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[2]) + self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) def test_is_sanitised_false(self): cfg_node_1 = Node('Not sanitising at all', None, line_number=None, path=None) From a5da37f6340f6f7c670e95101fb15ada103b8321 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 7 Sep 2017 14:53:57 -0400 Subject: [PATCH 143/541] [PR diff trim] --- .../builtin_with_user_defined_inner.py | 4 ---- .../blackbox_library_call.py | 1 - pyt/__main__.py | 4 ---- pyt/base_cfg.py | 4 +--- pyt/constraint_table.py | 5 ----- pyt/fixed_point.py | 4 ---- pyt/interprocedural_cfg.py | 10 +--------- pyt/reaching_definitions_base.py | 6 ------ pyt/reaching_definitions_taint.py | 7 ------- pyt/right_hand_side_visitor.py | 3 --- tests/analysis_base_test_case.py | 16 +++++++--------- tests/base_test_case.py | 11 ++++++----- 12 files changed, 15 insertions(+), 60 deletions(-) diff --git a/example/nested_functions_code/builtin_with_user_defined_inner.py b/example/nested_functions_code/builtin_with_user_defined_inner.py index f60cebe9..1926a58f 100644 --- a/example/nested_functions_code/builtin_with_user_defined_inner.py +++ b/example/nested_functions_code/builtin_with_user_defined_inner.py @@ -7,10 +7,6 @@ app = Flask(__name__) -def outer(outer_arg): - outer_ret_val = outer_arg + 'hey' - return outer_ret_val - def inner(inner_arg): yes_vuln = inner_arg + 'hey' return yes_vuln diff --git a/example/vulnerable_code_across_files/blackbox_library_call.py b/example/vulnerable_code_across_files/blackbox_library_call.py index eddf5c5e..16d185ae 100644 --- a/example/vulnerable_code_across_files/blackbox_library_call.py +++ b/example/vulnerable_code_across_files/blackbox_library_call.py @@ -12,7 +12,6 @@ def menu(): param = request.args.get('suggestion') # This is a function we can't possibly see inside of - # foobar = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') command = scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') hey = command subprocess.call(hey, shell=True) diff --git a/pyt/__main__.py b/pyt/__main__.py index edcae34d..fa37a36f 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -37,8 +37,6 @@ vulnerabilities_to_file ) from .vulnerabilities import find_vulnerabilities -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') def parse_args(args): @@ -233,8 +231,6 @@ def main(command_line_args=sys.argv[1:]): # Add all the route functions to the cfg_list FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) - logger.debug("[OSLO SO GOOD] cfg_list[0] is %s", cfg_list[0]) - # logger.debug("[OSLO SO GOOD] len(cfg_list[0]) is %s", len(cfg_list[0])) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index b6b67155..a9e8d205 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -496,7 +496,6 @@ def visit_Try(self, node): handler_body = self.stmt_star_handler(handler.body) logger.debug("[sad panda] handler_node is %s", handler_node) logger.debug("[sad panda] handler_body.first_statement is %s", handler_body.first_statement) - handler_body = self.handle_stmt_star_ignore_node(handler_body, handler_node) last_statements.extend(handler_body.last_statements) @@ -507,7 +506,6 @@ def visit_Try(self, node): body.last_statements.extend(orelse_last_nodes) logger.debug("[Tuesday] AFTER try_node is %s", try_node) - if node.finalbody: finalbody = self.stmt_star_handler(node.finalbody) for last in last_statements: @@ -631,7 +629,7 @@ def assignment_call_node(self, left_hand_label, ast_node): call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1]) call.connect(call_assignment) else: # assignment to builtin - # Consider using call.left_hand_side + # Consider using call.left_hand_side instead of call.label # logger.debug("call.left_hand_side is %s", call.left_hand_side) # raise # call_label = call.left_hand_side diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index 6e492cd9..de7a0cea 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -4,9 +4,6 @@ constraint_table = dict() -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') - def initialize_constraint_table(cfg_list): """Collects all given cfg nodes and initializes the table with value 0.""" @@ -25,6 +22,4 @@ def constraint_join(cfg_nodes): def print_table(lattice): print('Constraint table:') for k, v in constraint_table.items(): - logger.debug("[Flux] k is %s and v is %s and bin(v) is %s", k, v, bin(v)) - # logger.debug("[Flux] k is %s", k) print(str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)])) diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 3c085ef8..806c172a 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -1,7 +1,5 @@ """This module implements the fixed point algorithm.""" from .constraint_table import constraint_table -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class FixedPointAnalysis(): @@ -20,8 +18,6 @@ def fixpoint_runner(self): q = self.cfg.nodes while q != []: - logger.debug("q[0] is %s", q[0]) - logger.debug("type(q[0]) is %s", type(q[0])) x_i = constraint_table[q[0]] # x_i = q[0].old_constraint self.analysis.fixpointmethod(q[0]) # y = F_i(x_1, ..., x_n); y = constraint_table[q[0]] # y = q[0].new_constraint diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 46895238..f93b7313 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -266,10 +266,6 @@ def save_local_scope(self, line_number, saved_function_call_index): # Save LHS saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) - # logger.debug("[FLUX AGAIN] So saved_scope_node is %s", saved_scope_node) - # logger.debug("[FLUX AGAIN] So previous_node is %s", previous_node) - - # raise self.connect_if_allowed(previous_node, saved_scope_node) return saved_variables @@ -283,7 +279,7 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): # break # else: # print('hest') - # print('next') # self.nodes[-1] is print('hest') + # print('next') # self.nodes[-1] is print('hest') if self.last_was_loop_stack[-1]: logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) @@ -536,10 +532,6 @@ def visit_and_get_function_nodes(self, definition): def visit_Call(self, node): _id = get_call_names_as_string(node.func) - # if self.nodes[-1].label.startswith('¤call_4'): - # logger.debug("HMMMM") - # raise - local_definitions = self.module_definitions_stack[-1] alias = handle_aliases_in_calls(_id, local_definitions.import_alias_mapping) diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 16534b04..48ed533d 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -2,8 +2,6 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_join from .lattice import Lattice -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ReachingDefinitionsAnalysisBase(AnalysisBase): @@ -15,10 +13,6 @@ def __init__(self, cfg): def join(self, cfg_node): """Joins all constraints of the ingoing nodes and returns them. This represents the JOIN auxiliary definition from Schwartzbach.""" - if cfg_node.label.startswith('subp'): - logger.debug("special len(cfg_node.ingoing) is %s", len(cfg_node.ingoing)) - logger.debug("special cfg_node.ingoing is %s", cfg_node.ingoing) - logger.debug("special cfg_node.outgoing is %s", cfg_node.outgoing) return constraint_join(cfg_node.ingoing) def arrow(self, JOIN, _id): diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index b900381f..34351239 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,15 +1,12 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): """Reaching definitions analysis rules implemented.""" def fixpointmethod(self, cfg_node): - logger.debug("[FIDI] cfg_node is %s", cfg_node) JOIN = self.join(cfg_node) # Assignment check if isinstance(cfg_node, AssignmentNode): @@ -25,12 +22,8 @@ def fixpointmethod(self, cfg_node): # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - logger.debug("[FIDI] cfg_node.right_hand_side_variables is %s", cfg_node.right_hand_side_variables) arrow_result = arrow_result | self.lattice.el2bv[cfg_node] constraint_table[cfg_node] = arrow_result # Default case else: - if cfg_node.label.startswith("subp"): - logger.debug("SPECIAL, not assignment is %s", cfg_node) - logger.debug("SPECIAL, JOIN is %s", bin(JOIN)) constraint_table[cfg_node] = JOIN diff --git a/pyt/right_hand_side_visitor.py b/pyt/right_hand_side_visitor.py index ba914106..8dcf9ea4 100644 --- a/pyt/right_hand_side_visitor.py +++ b/pyt/right_hand_side_visitor.py @@ -2,8 +2,6 @@ Used to find all variables on a right hand side(RHS) of assignment. """ import ast -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class RHSVisitor(ast.NodeVisitor): @@ -17,7 +15,6 @@ def visit_Name(self, node): self.result.append(node.id) def visit_Call(self, node): - logger.debug("hey i am here after all") if node.args: for arg in node.args: self.visit(arg) diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index d6590a11..6f07a9f2 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -2,13 +2,10 @@ from collections import namedtuple from .base_test_case import BaseTestCase -from pyt.constraint_table import constraint_table, initialize_constraint_table +from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import FixedPointAnalysis from pyt.lattice import Lattice -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') - class AnalysisBaseTestCase(BaseTestCase): connection = namedtuple('connection', 'constraintset element') @@ -19,12 +16,13 @@ def assertInCfg(self, connections, lattice): """Assert that all connections in the connections list exists in the cfg, as well as all connections not in the list do not exist. - connections is a list of tuples where the node at index 0 of the tuple has - to be in the new_constraint set of the node at index 1 of the tuple.""" + Args: + connections(list[tuples]): the node at index 0 of the tuple has + to be in the new_constraint set of the node + at index 1 of the tuple. + lattice(Lattice): The lattice we're analysing. + """ for connection in connections: - logger.debug("self.cfg.nodes[connection[0]] is %s", self.cfg.nodes[connection[0]]) - logger.debug("self.cfg.nodes[connection[1]] is %s", self.cfg.nodes[connection[1]]) - self.assertEqual(lattice.in_constraint(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]]), True, str(connection) + " expected to be connected") nodes = len(self.cfg.nodes) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 02015a9e..a5cb415d 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -11,10 +11,13 @@ class BaseTestCase(unittest.TestCase): def assertInCfg(self, connections): """Asserts that all connections in the connections list exists in the cfg, - as well as all connections not in the list do not exist + as well as that all connections not in the list do not exist. - connections is a list of tuples where - the node at index 0 of the tuple has to be in the new_constraint set of the node at index 1 of the tuple""" + Args: + connections(list[tuple]): the node at index 0 of the tuple has + to be in the new_constraint set of the node + at index 1 of the tuple. + """ for connection in connections: self.assertIn(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]].outgoing, str(connection) + " expected to be connected") self.assertIn(self.cfg.nodes[connection[1]], self.cfg.nodes[connection[0]].ingoing, str(connection) + " expected to be connected") @@ -24,8 +27,6 @@ def assertInCfg(self, connections): for element in range(nodes): for sets in range(nodes): if not (element, sets) in connections: - # print("HEY element is %s", element) - # print("HEY sets is %s", sets) self.assertNotIn(self.cfg.nodes[element], self.cfg.nodes[sets].outgoing, "(%s <- %s)" % (element, sets) + " expected to be disconnected") self.assertNotIn(self.cfg.nodes[sets], self.cfg.nodes[element].ingoing, "(%s <- %s)" % (sets, element) + " expected to be disconnected") From 01a171ef3a328a47180fce7869c672248ecdbfa2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 7 Sep 2017 15:10:23 -0400 Subject: [PATCH 144/541] [codeclimate] whitespace etc --- pyt/base_cfg.py | 20 ++-------- pyt/interprocedural_cfg.py | 80 +++++++++++++++++++------------------- pyt/vulnerabilities.py | 1 - 3 files changed, 43 insertions(+), 58 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index a9e8d205..9fb9858f 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -175,6 +175,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num """ super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) + class BBnode(AssignmentNode): """Node used for handling restore nodes returning from function calls.""" @@ -190,6 +191,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) self.args = [] + class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" @@ -375,11 +377,6 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): self.prev_nodes_to_avoid.pop() self.last_was_loop_stack.pop() logger.debug("Woah so first_node is %s", first_node) - # logger.debug("Woah so first_node.ingoing is %s", first_node.ingoing) - # if first_node.label.startswith('save_4_value'): - # # raise - # pass - # logger.debug("Woah so first_node.incoming is %s", first_node.incoming) try: logger.debug("Woah so first_node.incoming is %s", first_node.incoming) except Exception: @@ -743,8 +740,6 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): saved_function_call_index = self.function_call_index self.undecided = False - - # label = LabelVisitor() # logger.debug("[BLUESTONE sucks] node is %s", node) # logger.debug("[BLUESTONE sucks] node.func is %s", node.func) @@ -790,7 +785,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): label.visit(node) # node should always be a call - assert isinstance(node, ast.Call) == True + assert isinstance(node, ast.Call) is True logger.debug("[PR] the label.result is %s", label.result) index = label.result.find('(') @@ -889,32 +884,23 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # This is where we'll ask the user, then save the mapping or just use the mapping. # Or perhaps we'll do that in vulnerabilities.py - call_node.right_hand_side_variables = rhs_vars call_node.args = rhs_vars # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? - # ReturnNode - # the old way # call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) - # We need to know what the arguments are to a sink, # we also need to know the arguments to a builtin or blackbox so we can have a mapping of # e.g. arg1 taints return value and arg2 does not. - - # call save_def_args_in_temp() # call_args, def_args, line_number, saved_function_call_index - # args_mapping = save_def_args_in_temp(call_args???, def_args???, node.lineno, saved_function_call_index) - - if blackbox: logger.debug("[qq] call_node being added to blackbox_calls is %s", call_node) # This makes so much sense! diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index f93b7313..fbbeab2a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -203,14 +203,14 @@ def visit_Return(self, node): LHS = 'ret_' + this_function_name if isinstance(node.value, ast.Call): - return_value_of_call = self.visit(node.value) - return_node = ReturnNode(LHS + ' = ' + return_value_of_call.left_hand_side, - LHS, return_value_of_call.left_hand_side, - node, line_number=node.lineno, - path=self.filenames[-1]) - return_value_of_call.connect(return_node) - self.nodes.append(return_node) - return return_node + return_value_of_call = self.visit(node.value) + return_node = ReturnNode(LHS + ' = ' + return_value_of_call.left_hand_side, + LHS, return_value_of_call.left_hand_side, + node, line_number=node.lineno, + path=self.filenames[-1]) + return_value_of_call.connect(return_node) + self.nodes.append(return_node) + return return_node return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, rhs_visitor.result, @@ -243,13 +243,13 @@ def save_local_scope(self, line_number, saved_function_call_index): Returns: saved_variables(list[SavedVariable]) - """ + """ saved_variables = list() saved_variables_so_far = set() # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes - if type(node) == AssignmentNode]: # type() is used on purpose here + if type(node) == AssignmentNode]: # type() is used on purpose here if isinstance(assignment, RestoreNode): continue if assignment.left_hand_side in saved_variables_so_far: @@ -272,32 +272,32 @@ def save_local_scope(self, line_number, saved_function_call_index): def connect_if_allowed(self, previous_node, node_to_connect_to): try: - # Do not connect if last statement was a loop e.g. - # while x != 10: - # if x > 0: - # print(x) - # break - # else: - # print('hest') - # print('next') # self.nodes[-1] is print('hest') - if self.last_was_loop_stack[-1]: - logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) - logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) - return + # Do not connect if last statement was a loop e.g. + # while x != 10: + # if x > 0: + # print(x) + # break + # else: + # print('hest') + # print('next') # self.nodes[-1] is print('hest') + if self.last_was_loop_stack[-1]: + logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) + logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) + return except IndexError: - pass + pass try: - if previous_node is not self.prev_nodes_to_avoid[-1]: - logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) - previous_node.connect(node_to_connect_to) - else: - logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) - logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) + if previous_node is not self.prev_nodes_to_avoid[-1]: + logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) + previous_node.connect(node_to_connect_to) + else: + logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) + logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) except IndexError: - logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") - logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) - # If there are no prev_nodes_to_avoid we just connect safely. - previous_node.connect(node_to_connect_to) + logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") + logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) + # If there are no prev_nodes_to_avoid we just connect safely. + previous_node.connect(node_to_connect_to) def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): """Save the arguments of the definition being called. Visit the arguments if they're calls. @@ -339,7 +339,7 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function def_arg_temp_name, call_arg_rhs_visitor.result, line_number=line_number, - path=self.filenames[-1]) + path=self.filenames[-1]) self.connect_if_allowed(self.nodes[-1], restore_node) self.nodes.append(restore_node) @@ -387,7 +387,7 @@ def restore_saved_local_scope(self, line_number(int): Of the def of the function call about to be entered into. Note: We do not need connect_if_allowed because of the - preceding call to save_local_scope. + preceding call to save_local_scope. """ restore_nodes = list() for var in saved_variables: @@ -428,7 +428,7 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index): function_nodes(list[Node]): List of nodes of the function being called. saved_function_call_index(int): Unique number for each call. """ - for node in function_nodes: + for node in function_nodes: # Only `Return`s and `Raise`s can be of type ConnectToExitNode if isinstance(node, ConnectToExitNode): # Create e.g. ¤call_1 = ret_func_foo RestoreNode @@ -442,7 +442,7 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index): logger.debug("Florence, self.nodes[-1] is %s", self.nodes[-1]) logger.debug("Florence, return_node is %s", return_node) self.nodes[-1].connect(return_node) - self.nodes.append(return_node) + self.nodes.append(return_node) return def process_function(self, call_node, definition): @@ -459,7 +459,7 @@ def process_function(self, call_node, definition): Notes: Page 31 in the original thesis, but changed a little. We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyway, that we return in this function. - e.g. ret_func_foo gets assigned to visit_Return. + e.g. ret_func_foo gets assigned to visit_Return. Args: call_node(ast.Call) : The node that calls the definition. @@ -467,7 +467,7 @@ def process_function(self, call_node, definition): Returns: Last node in self.nodes, probably the return of the function appended to self.nodes in return_handler. - """ + """ try: self.function_call_index += 1 saved_function_call_index = self.function_call_index @@ -510,7 +510,7 @@ def visit_and_get_function_nodes(self, definition): Returns: the_new_nodes(list[Node]): The nodes added while visiting the function. - """ + """ len_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 4803b863..bb1f9f1d 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -263,7 +263,6 @@ def get_sink_args(cfg_node): logger.debug("[VINEAPPLE] cfg_node is %s", cfg_node) logger.debug("[VINEAPPLE] cfg_node.ast_node is %s", cfg_node.ast_node) logger.debug("[VINEAPPLE] type(cfg_node.ast_node) is %s", type(cfg_node.ast_node)) - other_results = list() if isinstance(cfg_node, BBnode): # logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) From a364c16230b8b8943dc357c27f1b9d62bca8bce5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 7 Sep 2017 15:17:57 -0400 Subject: [PATCH 145/541] [codeclimate] indents etc --- pyt/base_cfg.py | 2 +- pyt/interprocedural_cfg.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9fb9858f..38445e62 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -896,7 +896,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) # We need to know what the arguments are to a sink, # we also need to know the arguments to a builtin or blackbox so we can have a mapping of - # e.g. arg1 taints return value and arg2 does not. + # e.g. arg1 taints return value and arg2 does not. # call save_def_args_in_temp() # call_args, def_args, line_number, saved_function_call_index # args_mapping = save_def_args_in_temp(call_args???, def_args???, node.lineno, saved_function_call_index) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index fbbeab2a..6ace6fdf 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -281,9 +281,9 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): # print('hest') # print('next') # self.nodes[-1] is print('hest') if self.last_was_loop_stack[-1]: - logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) - logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) - return + logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) + logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) + return except IndexError: pass try: From 5a1df200871e82b75895c1949aa3a1413a44c263 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 11 Sep 2017 14:06:19 -0400 Subject: [PATCH 146/541] fixing tests, added keyword args to add_blackbox_or_builtin, starting to remove the results file --- pyt/base_cfg.py | 38 ++- pyt/interprocedural_cfg.py | 2 +- pyt/label_visitor.py | 1 - pyt/vars_visitor.py | 14 +- tests/vars_visitor_test.py | 4 + tests/vulnerabilities_across_files_test.py | 14 +- tests/vulnerabilities_test.py | 306 +++++++++++++++++++++ 7 files changed, 365 insertions(+), 14 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 38445e62..ae659e89 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -731,7 +731,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): node() blackbox(bool): Whether or not it is a builtin or blackbox call. Returns: - ??? + FILL ME IN """ logger.debug("[qq] ENTER self.blackbox_calls is %s", self.blackbox_calls) @@ -802,7 +802,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): except AttributeError: pass try: - logger.debug("[3rd rail] len(node.kwargs) is %s", len(node.kwargs)) + logger.debug("[3rd rail] len(node.keywords) is %s", len(node.keywords)) except AttributeError: pass @@ -848,8 +848,40 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) rhs_vars.extend(vv.result) - logger.debug("[Voyager] arg is %s", arg) + ######## + for arg in node.keywords: + if isinstance(arg, ast.Call): + # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) + return_value_of_nested_call = self.visit(arg) + # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) + logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) + logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) + # for n in self.nodes: + # if n == return_value_of_nested_call: + # raise + return_value_of_nested_call.connect(call_node) + # visited_args.append(return_value_of_nested_call) + + logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) + visual_args.append(return_value_of_nested_call.left_hand_side) + rhs_vars.append(return_value_of_nested_call.left_hand_side) + else: + label = LabelVisitor() + label.visit(arg) + logger.debug("arg is %s, and label.result is %s", arg, label.result) + visual_args.append(label.result) + # visited_args.append(arg) + + from .vars_visitor import VarsVisitor + vv = VarsVisitor() + vv.visit(arg) + logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) + logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) + rhs_vars.extend(vv.result) + logger.debug("[SOUL BREW] arg is %s", arg) + ######## + logger.debug("[3rd rail] visual_args is %s", visual_args) # logger.debug("[3rd rail] visited_args is %s", visited_args) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 6ace6fdf..4bf381eb 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -473,7 +473,7 @@ def process_function(self, call_node, definition): saved_function_call_index = self.function_call_index def_node = definition.node - + saved_variables = self.save_local_scope(def_node.lineno, saved_function_call_index) logger.debug("BEFORE saved_variables are %s", saved_variables) diff --git a/pyt/label_visitor.py b/pyt/label_visitor.py index 341baea8..f5c25550 100644 --- a/pyt/label_visitor.py +++ b/pyt/label_visitor.py @@ -1,4 +1,3 @@ -"""FILL ME IN""" import ast diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index d4926b01..fd7cd89c 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -94,12 +94,21 @@ def visit_Call(self, node): logger.debug("[voyager] arg.func is %s", arg.func) if isinstance(arg.func, ast.Name): logger.debug("[voyager] arg.func.id is %s", arg.func.id) + # We can't just visit because we need to add 'ret_' self.result.append('ret_' + arg.func.id) elif isinstance(arg.func, ast.Attribute): logger.debug("It is an attribute!") - logger.debug("[3rd rail] arg.func.attr is %s", arg.func.attr) + logger.debug("[pb] arg.func.attr is %s", arg.func.attr) + logger.debug("[pb] type(arg.func.attr) is %s", type(arg.func.attr)) + logger.debug("[pb] arg.func is %s", arg.func) + logger.debug("[pb] type(arg.func) is %s", type(arg.func)) + logger.debug("[pb] arg.func.value is %s", arg.func.value) + logger.debug("[pb] type(arg.func.value) is %s", type(arg.func.value)) + # e.g. html.replace('{{ param }}', param) + # func.attr is replace + # func.value.id is html + # We want replace self.result.append('ret_' + arg.func.attr) - # raise else: logger.debug("type(arg.func) is %s", type(arg.func)) raise @@ -109,6 +118,7 @@ def visit_Call(self, node): for keyword in node.keywords: logger.debug("[voyager] keyword is %s", keyword) if isinstance(keyword, ast.Call): + # FILL ME IN MORE self.result.append('ret_' + keyword.func.id) else: self.visit(keyword) diff --git a/tests/vars_visitor_test.py b/tests/vars_visitor_test.py index 6baa9d2e..4f1c7c1e 100644 --- a/tests/vars_visitor_test.py +++ b/tests/vars_visitor_test.py @@ -44,6 +44,10 @@ def test_call5(self): vars = self.perform_vars_on_expression("resp = make_response(html.replace('{{ param }}', param))") self.assertEqual(vars.result, ['resp', 'ret_replace']) + def test_call6(self): + vars = self.perform_vars_on_expression("resp = make_response(html.replace.bar('{{ param }}', param))") + self.assertEqual(vars.result, ['resp', 'ret_bar']) + def test_keyword_vararg(self): vars = self.perform_vars_on_expression('print(arg = x)') self.assertEqual(vars.result, ['x']) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index eb869b7f..ffeed47a 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -60,14 +60,14 @@ def test_blackbox_library_call(self): File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 12: param = ¤call_1 File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 16: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + > Line 15: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 16: command = ¤call_2 + > Line 15: command = ¤call_2 File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 17: hey = command + > Line 16: hey = command File: example/vulnerable_code_across_files/blackbox_library_call.py - > reaches line 18, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(hey) + > reaches line 17, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(hey, shell=True) This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ @@ -104,7 +104,7 @@ def test_builtin_with_user_defined_inner(self): > Line 23: foo = ¤call_1 File: example/nested_functions_code/builtin_with_user_defined_inner.py > reaches line 24, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(foo) + ¤call_3 = ret_subprocess.call(foo, shell=True) This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -195,7 +195,7 @@ def test_sink_with_user_defined_inner(self): > Line 18: ¤call_2 = ret_outer File: example/nested_functions_code/sink_with_user_defined_inner.py > reaches line 18, trigger word "subprocess.call(": - ¤call_1 = ret_subprocess.call(outer(inner(req_param)),shell=True) + ¤call_1 = ret_subprocess.call(¤call_2, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index fc167680..84c8d4b4 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -190,3 +190,309 @@ def test_find_vulnerabilities_inter_command_injection(self): def test_find_vulnerabilities_inter_command_injection_2(self): vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + + def test_XSS_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_command_injection_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/command_injection.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/command_injection.py + > User input at line 15, trigger word "form[": + param = request.form['suggestion'] + Reassigned in: + File: example/vulnerable_code/command_injection.py + > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' + File: example/vulnerable_code/command_injection.py + > reaches line 18, trigger word "subprocess.call(": + ¤call_1 = ret_subprocess.call(command, shell=True) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_path_traversal_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_path_traversal_sanitised_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_sql_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/sql/sqli.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_form_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_form.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_url_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_url.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_no_vuln_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_reassign_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_reassign.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_sanitised_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_variable_assign_no_vuln_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_variable_assign_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_variable_multiple_assign_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/XSS.py + > User input at line 6, trigger word "get(": + ¤call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: example/vulnerable_code/XSS.py + > Line 6: param = ¤call_1 + File: example/vulnerable_code/XSS.py + > Line 9: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS.py + > Line 9: resp = ¤call_3 + File: example/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: example/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From 019e709f9e5176f99acf39ae5241df351c8007ad Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 13 Sep 2017 16:42:02 -0400 Subject: [PATCH 147/541] Fixed tests, killed results file, also I found a pretty bad bug I have not fixed yet --- .../sink_with_blackbox_inner.py | 19 ++ .../sink_with_result_of_blackbox_nested.py | 19 ++ example/vulnerable_code/path_traversal.py | 15 +- pyt/base_cfg.py | 26 +- pyt/interprocedural_cfg.py | 78 ++++-- pyt/vulnerabilities.py | 10 +- tests/analysis_base_test_case.py | 2 + tests/cfg_test.py | 28 +++ tests/vulnerabilities_across_files_test.py | 44 ++++ tests/vulnerabilities_test.py | 227 ++++++++---------- 10 files changed, 304 insertions(+), 164 deletions(-) create mode 100644 example/nested_functions_code/sink_with_blackbox_inner.py create mode 100644 example/nested_functions_code/sink_with_result_of_blackbox_nested.py diff --git a/example/nested_functions_code/sink_with_blackbox_inner.py b/example/nested_functions_code/sink_with_blackbox_inner.py new file mode 100644 index 00000000..51569dd7 --- /dev/null +++ b/example/nested_functions_code/sink_with_blackbox_inner.py @@ -0,0 +1,19 @@ +import subprocess +from flask import Flask, render_template, request + +# This is a lib we can't possibly see inside of +import scrypt + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + req_param = request.form['suggestion'] + + subprocess.call(scrypt.encypt(scrypt.encypt(req_param)), shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) diff --git a/example/nested_functions_code/sink_with_result_of_blackbox_nested.py b/example/nested_functions_code/sink_with_result_of_blackbox_nested.py new file mode 100644 index 00000000..7f86ff8a --- /dev/null +++ b/example/nested_functions_code/sink_with_result_of_blackbox_nested.py @@ -0,0 +1,19 @@ +import subprocess +from flask import Flask, render_template, request + +# This is a lib we can't possibly see inside of +import scrypt + + +app = Flask(__name__) + +@app.route('/menu', methods=['POST']) +def menu(): + req_param = request.form['suggestion'] + result = scrypt.encrypt(scrypt.encrypt(req_param)) + subprocess.call(result, shell=True) + + with open('menu.txt','r') as f: + menu = f.read() + + return render_template('command_injection.html', menu=menu) diff --git a/example/vulnerable_code/path_traversal.py b/example/vulnerable_code/path_traversal.py index dc09c4ce..fbafa653 100644 --- a/example/vulnerable_code/path_traversal.py +++ b/example/vulnerable_code/path_traversal.py @@ -3,12 +3,25 @@ app = Flask(__name__) +def outer(outer_arg, other_arg): + outer_ret_val = outer_arg + 'hey' + other_arg + return outer_ret_val + +def inner(): + return 'boom' + @app.route('/') def cat_picture(): image_name = request.args.get('image_name') if not image_name: + # image_name = 5 return 404 - return send_file(os.path.join(os.getcwd(), image_name)) + # return send_file(os.path.join(os.getcwd(), image_name)) + # send_file(os.path.join(os.getcwd(), image_name)) + hey = inner() + foo = outer(hey, image_name) # Inlining inner here fucks everything + send_file(foo) + return 'idk' if __name__ == '__main__': diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index ae659e89..32e46dd6 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -366,6 +366,7 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): if ingoing: # Only set it once first_node = ingoing[0] + logger.debug("here in my, node is %s", node) if self.node_to_connect(node) and node: if not first_node: if isinstance(node, ControlFlowNode): @@ -381,10 +382,15 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): logger.debug("Woah so first_node.incoming is %s", first_node.incoming) except Exception: pass - logger.debug("BEFORE cfg_statements are %s", cfg_statements) + # logger.debug("A1A Beachfront Ave BEFORE cfg_statements[-1] are %s", cfg_statements[-1]) + # logger.debug("Hmm so type(cfg_statements) is %s", type(cfg_statements)) + for i,s in enumerate(cfg_statements): + logger.debug("BEFORE SO CONFUSED statement #%s is %s", i, s) self.connect_nodes(cfg_statements) - logger.debug("AFTER cfg_statements are %s", cfg_statements) + for i,s in enumerate(cfg_statements): + logger.debug("AFTER SO CONFUSED statement #%s is %s", i, s) + # logger.debug("A1A Beachfront Ave AFTER cfg_statements[-1] are %s", cfg_statements[-1]) if cfg_statements: if first_node: @@ -453,6 +459,7 @@ def visit_If(self, node): last_statements = self.remove_breaks(body_connect_stmts.last_statements) + logger.debug("SO CONFUSED so last_statements is %s", last_statements) return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) def visit_NameConstant(self, node): @@ -815,6 +822,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): [], line_number=node.lineno, path=self.filenames[-1]) + original_prev_node = self.nodes[-1] # visited_args = [] visual_args = [] @@ -829,6 +837,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # for n in self.nodes: # if n == return_value_of_nested_call: # raise + logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) + logger.debug("BNBN About to append %s", return_value_of_nested_call) return_value_of_nested_call.connect(call_node) # visited_args.append(return_value_of_nested_call) @@ -860,6 +870,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # for n in self.nodes: # if n == return_value_of_nested_call: # raise + logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) + logger.debug("BNBN About to append %s", return_value_of_nested_call) return_value_of_nested_call.connect(call_node) # visited_args.append(return_value_of_nested_call) @@ -939,14 +951,14 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): self.blackbox_assignments.add(call_node) # IMPORTANT - logger.debug("[Integral] connecting %s", self.nodes[-1]) + logger.debug("[Integral] connecting %s", original_prev_node) logger.debug("[Integral] to call_node %s", call_node) # THE CULPRIT! - # self.nodes[-1].connect(call_node) + # original_prev_node.connect(call_node) # raise - logger.debug("1617CULPRIT self.nodes[-1] IS %s", self.nodes[-1]) - logger.debug("1617CULPRIT call_node IS %s", call_node) - self.connect_if_allowed(self.nodes[-1], call_node) + logger.debug("ON&ON original_prev_node IS %s", original_prev_node) + logger.debug("ON&ON call_node IS %s", call_node) + self.connect_if_allowed(original_prev_node, call_node) self.nodes.append(call_node) # raise # IMPORTANT diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 4bf381eb..86d72704 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -296,8 +296,17 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): except IndexError: logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) - # If there are no prev_nodes_to_avoid we just connect safely. - previous_node.connect(node_to_connect_to) + logger.debug("type(previous_node) is %s", type(previous_node)) + # if not image_name: + # return 404 + # print('foo') # We do not want to this line with `return 404` + if not isinstance(previous_node, ReturnNode): + # If there are no prev_nodes_to_avoid we just connect safely. + previous_node.connect(node_to_connect_to) + else: + logger.debug("SHUT DOWN, previous_node is ReturnNode") + logger.debug("PREV NODE IS A RETURN NODE") + def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): """Save the arguments of the definition being called. Visit the arguments if they're calls. @@ -313,8 +322,21 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function """ args_mapping = dict() + logger.debug("call_args are %s", call_args) + logger.debug("def_args are %s", def_args) + logger.debug("call_args are %s", len(call_args)) + logger.debug("def_args are %s", len(def_args)) # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): + if len(call_args) == 0: + logger.debug("WTF") + raise + logger.debug("Bout to die!") + logger.debug("call_args are %s", call_args) + logger.debug("def_args are %s", def_args) + logger.debug("call_args are %s", len(call_args)) + logger.debug("def_args are %s", len(def_args)) + def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] call_arg_label_visitor = LabelVisitor() @@ -468,36 +490,40 @@ def process_function(self, call_node, definition): Returns: Last node in self.nodes, probably the return of the function appended to self.nodes in return_handler. """ - try: - self.function_call_index += 1 - saved_function_call_index = self.function_call_index + # try: + self.function_call_index += 1 + saved_function_call_index = self.function_call_index - def_node = definition.node + def_node = definition.node - saved_variables = self.save_local_scope(def_node.lineno, - saved_function_call_index) - logger.debug("BEFORE saved_variables are %s", saved_variables) - args_mapping = self.save_def_args_in_temp(call_node.args, - Arguments(def_node.args), - call_node.lineno, - saved_function_call_index) + saved_variables = self.save_local_scope(def_node.lineno, + saved_function_call_index) + logger.debug("BEFORE saved_variables are %s", saved_variables) - self.filenames.append(definition.path) - self.create_local_scope_from_def_args(call_node.args, + # Check to make sure there is no bug + assert len(call_node.args) == len(Arguments(def_node.args)) + + args_mapping = self.save_def_args_in_temp(call_node.args, Arguments(def_node.args), - def_node.lineno, + call_node.lineno, saved_function_call_index) - function_nodes = self.visit_and_get_function_nodes(definition) - self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! - self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) - self.return_handler(call_node, function_nodes, saved_function_call_index) - logger.debug("AFTER saved_variables are %s", saved_variables) - self.function_return_stack.pop() - except IndexError: - error_call = get_call_names_as_string(call_node.func) - print('Error: Possible nameclash in "{}".' + - ' Call omitted!\n'.format(error_call)) + self.filenames.append(definition.path) + self.create_local_scope_from_def_args(call_node.args, + Arguments(def_node.args), + def_node.lineno, + saved_function_call_index) + function_nodes = self.visit_and_get_function_nodes(definition) + self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! + self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) + self.return_handler(call_node, function_nodes, saved_function_call_index) + + logger.debug("AFTER saved_variables are %s", saved_variables) + self.function_return_stack.pop() + # except IndexError: + # error_call = get_call_names_as_string(call_node.func) + # print('Error: Possible nameclash in "{}".' + + # ' Call omitted!\n'.format(error_call)) logger.debug('[Legal pad] returning %s', self.nodes[-1]) return self.nodes[-1] diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index bb1f9f1d..9fbe11af 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -304,9 +304,9 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() for node in source.secondary_nodes: - logger.debug("BLUE BOTTLE secondary node label is %s", node.label) + logger.debug("YEE secondary node label is %s", node.label) - logger.debug("[VOY] sink is %s", sink) + logger.debug("[BEATX] sink is %s", sink) logger.debug("[VOY] sink.cfg_node is %s", sink.cfg_node) if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes @@ -317,7 +317,7 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) - logger.debug("[VINEAPPLE] sink_args is %s", sink_args) + logger.debug("[BEATX] sink_args is %s", sink_args) for sarg in sink_args: if 'ret_' in sarg: logger.debug("special sarg is %s", sarg) @@ -417,6 +417,10 @@ def find_vulnerabilities(cfg_list, analysis_type, vulnerability_log = VulnerabilityLog() for cfg in cfg_list: + for i, n in enumerate(cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + logger.debug("#%s ingoing is %s", i, n.ingoing) + logger.debug("#%s outgoing is %s", i, n.outgoing) find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), trim_reassigned_in) diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 6f07a9f2..95c44306 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -5,6 +5,8 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import FixedPointAnalysis from pyt.lattice import Lattice +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class AnalysisBaseTestCase(BaseTestCase): diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 27566cde..b95781c5 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -783,6 +783,34 @@ def test_function_multiple_return(self): (call_foo, exit_foo), (_exit, call_foo)]) + def test_path_traversal(self): + path = 'example/vulnerable_code/path_traversal.py' + self.cfg_create_from_file(path) + + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + entry_foo = 1 + a = 2 + _if = 3 + ret_if = 4 + ret = 5 + exit_foo = 6 + call_foo = 7 + _exit = 8 + + self.assertInCfg([(entry_foo, entry), + (a, entry_foo), + (_if, a), + (ret_if, _if), + (ret, _if), + (exit_foo, ret_if), + (exit_foo, ret), + (call_foo, exit_foo), + (_exit, call_foo)]) def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index ffeed47a..9359c024 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -109,6 +109,29 @@ def test_builtin_with_user_defined_inner(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_result_of_blackbox_nested(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_blackbox_nested.py') + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ¤call_2 = ret_scrypt.encrypt(req_param) + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ¤call_1 = ret_scrypt.encrypt(¤call_2) + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: result = ¤call_1 + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > reaches line 14, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_result_of_user_defined_nested(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) @@ -155,6 +178,27 @@ def test_sink_with_result_of_user_defined_nested(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_blackbox_inner(self): + vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_blackbox_inner.py') + logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/nested_functions_code/sink_with_blackbox_inner.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ¤call_3 = ret_scrypt.encypt(req_param) + File: example/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ¤call_2 = ret_scrypt.encypt(¤call_3) + File: example/nested_functions_code/sink_with_blackbox_inner.py + > reaches line 14, trigger word "subprocess.call(": + ¤call_1 = ret_subprocess.call(¤call_2, shell=True) + This vulnerability is unknown due to: Label: ¤call_3 = ret_scrypt.encypt(req_param) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_sink_with_user_defined_inner(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 84c8d4b4..1ef3ed51 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -156,7 +156,10 @@ def test_find_vulnerabilities_variable_assign(self): def run_analysis(self, path): self.cfg_create_from_file(path) - + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + if len(self.cfg.nodes) != 6: + raise cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) @@ -278,6 +281,7 @@ def test_path_traversal_sanitised_result(self): > reaches line 9, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', param) """ + logger.debug("huh, vulnerability_description is %s", vulnerability_description) self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -286,21 +290,17 @@ def test_sql_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": + File: example/vulnerable_code/sql/sqli.py + > User input at line 26, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/sql/sqli.py + > Line 26: param = ¤call_1 + File: example/vulnerable_code/sql/sqli.py + > Line 27: result = ¤call_2 + File: example/vulnerable_code/sql/sqli.py + > reaches line 27, trigger word "execute(": + ¤call_2 = ret_db.engine.execute(param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -310,21 +310,19 @@ def test_XSS_form_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') + File: example/vulnerable_code/XSS_form.py + > User input at line 14, trigger word "form[": + data = request.form['my_text'] Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/XSS_form.py + > Line 15: ¤call_1 = ret_make_response(¤call_2) + File: example/vulnerable_code/XSS_form.py + > Line 15: resp = ¤call_1 + File: example/vulnerable_code/XSS_form.py + > Line 17: ret_example2_action = resp + File: example/vulnerable_code/XSS_form.py + > reaches line 15, trigger word "replace(": + ¤call_2 = ret_html1.replace('{{ data }}', data) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -334,68 +332,50 @@ def test_XSS_url_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') + File: example/vulnerable_code/XSS_url.py + > User input at line 4, trigger word "Flask function URL parameter": + url Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_url.py + > Line 6: param = url + File: example/vulnerable_code/XSS_url.py + > Line 9: ¤call_2 = ret_make_response(¤call_3) + File: example/vulnerable_code/XSS_url.py + > Line 9: resp = ¤call_2 + File: example/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_url.py > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + ¤call_3 = ret_html.replace('{{ param }}', param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_no_vuln_result(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) - """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) def test_XSS_reassign_result(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_reassign.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_reassign.py > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_reassign.py > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": + File: example/vulnerable_code/XSS_reassign.py + > Line 8: param = param + '' + File: example/vulnerable_code/XSS_reassign.py + > Line 11: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS_reassign.py + > Line 11: resp = ¤call_3 + File: example/vulnerable_code/XSS_reassign.py + > Line 12: ret_XSS1 = resp + File: example/vulnerable_code/XSS_reassign.py + > reaches line 11, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', param) """ @@ -406,69 +386,56 @@ def test_XSS_sanitised_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": + File: example/vulnerable_code/XSS_sanitised.py + > User input at line 7, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/XSS_sanitised.py + > Line 7: param = ¤call_1 + File: example/vulnerable_code/XSS_sanitised.py + > Line 9: ¤call_2 = ret_Markup.escape(param) + File: example/vulnerable_code/XSS_sanitised.py + > Line 9: param = ¤call_2 + File: example/vulnerable_code/XSS_sanitised.py + > Line 12: ¤call_4 = ret_make_response(¤call_5) + File: example/vulnerable_code/XSS_sanitised.py + > Line 12: resp = ¤call_4 + File: example/vulnerable_code/XSS_sanitised.py + > Line 13: ret_XSS1 = resp + File: example/vulnerable_code/XSS_sanitised.py + > reaches line 12, trigger word "replace(": + ¤call_5 = ret_html.replace('{{ param }}', param) + This vulnerability is potentially sanitised by: ['escape'] """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_assign_no_vuln_result(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) - """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) def test_XSS_variable_assign_result(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_variable_assign.py > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/XSS_variable_assign.py + > Line 8: other_var = param + '' + File: example/vulnerable_code/XSS_variable_assign.py + > Line 11: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS_variable_assign.py + > Line 11: resp = ¤call_3 + File: example/vulnerable_code/XSS_variable_assign.py + > Line 12: ret_XSS1 = resp + File: example/vulnerable_code/XSS_variable_assign.py + > reaches line 11, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', other_var) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -478,21 +445,27 @@ def test_XSS_variable_multiple_assign_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 8: other_var = param + '' + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 10: not_the_same_var = '' + other_var + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 12: another_one = not_the_same_var + '' + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 15: ¤call_3 = ret_make_response(¤call_4) + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 15: resp = ¤call_3 + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > Line 17: ret_XSS1 = resp + File: example/vulnerable_code/XSS_variable_multiple_assign.py + > reaches line 15, trigger word "replace(": + ¤call_4 = ret_html.replace('{{ param }}', another_one) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From 30b140888266db362664393867c8d5aa3a255884 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 13 Sep 2017 17:20:58 -0400 Subject: [PATCH 148/541] Problem illustration commit, nested_call_after_if --- .../vulnerable_code/nested_call_after_if.py | 8 +++ example/vulnerable_code/path_traversal.py | 7 +-- tests/cfg_test.py | 49 ++++++++++++------- 3 files changed, 40 insertions(+), 24 deletions(-) create mode 100644 example/vulnerable_code/nested_call_after_if.py diff --git a/example/vulnerable_code/nested_call_after_if.py b/example/vulnerable_code/nested_call_after_if.py new file mode 100644 index 00000000..744bb620 --- /dev/null +++ b/example/vulnerable_code/nested_call_after_if.py @@ -0,0 +1,8 @@ +import scrypt + + +image_name = request.args.get('image_name') +if not image_name: + image_name = 'foo' +foo = scrypt.encrypt(scrypt.encrypt(), image_name) # Nested call after if caused the problem +send_file(foo) diff --git a/example/vulnerable_code/path_traversal.py b/example/vulnerable_code/path_traversal.py index fbafa653..cb350fb3 100644 --- a/example/vulnerable_code/path_traversal.py +++ b/example/vulnerable_code/path_traversal.py @@ -14,12 +14,9 @@ def inner(): def cat_picture(): image_name = request.args.get('image_name') if not image_name: - # image_name = 5 + image_name = 'foo' return 404 - # return send_file(os.path.join(os.getcwd(), image_name)) - # send_file(os.path.join(os.getcwd(), image_name)) - hey = inner() - foo = outer(hey, image_name) # Inlining inner here fucks everything + foo = outer(inner(), image_name) # Nested call after if caused the problem send_file(foo) return 'idk' diff --git a/tests/cfg_test.py b/tests/cfg_test.py index b95781c5..72b65348 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -784,33 +784,44 @@ def test_function_multiple_return(self): (_exit, call_foo)]) def test_path_traversal(self): - path = 'example/vulnerable_code/path_traversal.py' + path = 'example/vulnerable_code/nested_call_after_if.py' self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=9) + self.assert_length(self.cfg.nodes, expected_length=10) entry = 0 - entry_foo = 1 - a = 2 + ret_request = 1 + image_name_equals_call_1 = 2 _if = 3 - ret_if = 4 - ret = 5 - exit_foo = 6 - call_foo = 7 - _exit = 8 - - self.assertInCfg([(entry_foo, entry), - (a, entry_foo), - (_if, a), - (ret_if, _if), - (ret, _if), - (exit_foo, ret_if), - (exit_foo, ret), - (call_foo, exit_foo), - (_exit, call_foo)]) + image_name_equals_foo = 4 + inner_call = 5 + outer_call = 6 + foo_equals_call_2 = 7 + ret_send_file = 8 + _exit = 9 + +# image_name = request.args.get('image_name') +# if not image_name: +# image_name = 'foo' +# foo = scrypt.encrypt(scrypt.encrypt(), image_name) # Nested call after if caused the problem +# send_file(foo) + + self.assertInCfg([(ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (inner_call, image_name_equals_foo), + (outer_call, inner_call), + (outer_call, image_name_equals_foo), # NO NO NO + (foo_equals_call_2, outer_call), + (foo_equals_call_2, _if), # NO NO NO + (foo_equals_call_2, image_name_equals_foo), # NO NO NO + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' From 31ccb8d97ce728da84b285d223b2dcc9abf15978 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Sep 2017 10:23:36 -0700 Subject: [PATCH 149/541] [refactor and clean]used itertools.chain for both args and keywordargs --- .../vulnerable_code/nested_call_after_if.py | 9 +- pyt/base_cfg.py | 120 +++--------------- pyt/liveness.py | 2 +- tests/cfg_test.py | 21 ++- 4 files changed, 37 insertions(+), 115 deletions(-) diff --git a/example/vulnerable_code/nested_call_after_if.py b/example/vulnerable_code/nested_call_after_if.py index 744bb620..68071be1 100644 --- a/example/vulnerable_code/nested_call_after_if.py +++ b/example/vulnerable_code/nested_call_after_if.py @@ -1,8 +1,15 @@ import scrypt +# def outer(outer_arg): +# outer_ret_val = outer_arg + 'hey' +# return outer_ret_val image_name = request.args.get('image_name') if not image_name: image_name = 'foo' -foo = scrypt.encrypt(scrypt.encrypt(), image_name) # Nested call after if caused the problem +# for x in range(0, 10): +# print(x) +# print('if this print statement is here everything works') +# print('foo') +foo = scrypt.outer(image_name) # Any call after if causes the problem send_file(foo) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 32e46dd6..c5ae9462 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -1,4 +1,5 @@ import ast +import itertools from collections import namedtuple from .ast_helper import Arguments, get_call_names_as_string @@ -187,6 +188,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. + path? """ super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) self.args = [] @@ -203,6 +205,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, * restore_nodes(list[Node]): List of nodes that were restored in the function call. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. + path? """ super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, None, line_number=line_number, path=path) @@ -291,6 +294,9 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): + logger.debug("DEATH") + logger.debug("n is %s", n) + logger.debug("next_node is %s", next_node) if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if @@ -385,11 +391,11 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): # logger.debug("A1A Beachfront Ave BEFORE cfg_statements[-1] are %s", cfg_statements[-1]) # logger.debug("Hmm so type(cfg_statements) is %s", type(cfg_statements)) for i,s in enumerate(cfg_statements): - logger.debug("BEFORE SO CONFUSED statement #%s is %s", i, s) + logger.debug("BEFORE SO MARG statement #%s is %s", i, s) self.connect_nodes(cfg_statements) for i,s in enumerate(cfg_statements): - logger.debug("AFTER SO CONFUSED statement #%s is %s", i, s) + logger.debug("AFTER SO MARG statement #%s is %s", i, s) # logger.debug("A1A Beachfront Ave AFTER cfg_statements[-1] are %s", cfg_statements[-1]) if cfg_statements: @@ -455,6 +461,7 @@ def visit_If(self, node): orelse_last_nodes = self.handle_or_else(node.orelse, test) body_connect_stmts.last_statements.extend(orelse_last_nodes) else: + logger.debug("SO CONFUSED LETS SEE, So we are adding test %s to ", test) body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node last_statements = self.remove_breaks(body_connect_stmts.last_statements) @@ -747,53 +754,9 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): saved_function_call_index = self.function_call_index self.undecided = False - # label = LabelVisitor() - # logger.debug("[BLUESTONE sucks] node is %s", node) - # logger.debug("[BLUESTONE sucks] node.func is %s", node.func) - # if isinstance(node.func, ast.Name): - # logger.debug("[BLUESTONE sucks] node.func.attr is %s", node.func.id) - # pass - # elif isinstance(node.func, ast.Attribute): - # attribute = node.func - - # logger.debug("HERE COMES THE CRAZY AST CODE") - # logger.debug("[3rd rail] attribute.attr is %s", attribute.attr) - # logger.debug("[3rd rail] attribute.value is %s", attribute.value) - # logger.debug("[3rd rail] type(attribute.value is %s", type(attribute.value)) - # if isinstance(attribute.value, ast.Name): - # logger.debug("[3rd rail] NAMENAMENAME dir(attribute.value) is %s", dir(attribute.value)) - # elif isinstance(attribute.value, ast.Attribute): - # logger.debug("[3rd rail] ATTRIBUTE ATTRIBUTE ATTRIBUTE dir(attribute.value) is %s", dir(attribute.value)) - # elif isinstance(attribute.value, ast.Call): - # the_call_before = attribute.value - # logger.debug("the_call_before.args is %s", the_call_before.args) - # for the_call_before_arg in the_call_before.args: - # label = LabelVisitor() - # label.visit(the_call_before_arg) - # logger.debug("the_call_before_arg is %s, and label.result is %s", the_call_before_arg, label.result) - # logger.debug("[3rd rail] CALL CALL CALL dir(attribute.value) is %s", dir(attribute.value)) - # elif isinstance(attribute.value, ast.Str): - # label = LabelVisitor() - # label.visit(attribute.value) - # logger.debug("[3rd rail] string attribute.value was %s", label.result) - # else: - # logger.debug("type(attribute.value) is %s", type(attribute.value)) - # raise - # else: - # raise - # logger.debug("AFTER THE CRAZY AST CODE") - # logger.debug("[3rd rail] node is %s", node) - # logger.debug("[3rd rail] node.args is %s", node.args) - # logger.debug("[3rd rail] node.func is %s", node.func) - # logger.debug("[3rd rail] node.keywords is %s", node.keywords) - # logger.debug("[3rd rail] dir(node) is %s", dir(node)) - label = LabelVisitor() label.visit(node) - # node should always be a call - assert isinstance(node, ast.Call) is True - logger.debug("[PR] the label.result is %s", label.result) index = label.result.find('(') if index == -1: @@ -822,12 +785,11 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): [], line_number=node.lineno, path=self.filenames[-1]) - original_prev_node = self.nodes[-1] # visited_args = [] visual_args = [] rhs_vars = [] - for arg in node.args: + for arg in itertools.chain(node.args, node.keywords): if isinstance(arg, ast.Call): # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) return_value_of_nested_call = self.visit(arg) @@ -859,40 +821,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) rhs_vars.extend(vv.result) logger.debug("[Voyager] arg is %s", arg) - ######## - for arg in node.keywords: - if isinstance(arg, ast.Call): - # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) - return_value_of_nested_call = self.visit(arg) - # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) - logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) - logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) - # for n in self.nodes: - # if n == return_value_of_nested_call: - # raise - logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) - logger.debug("BNBN About to append %s", return_value_of_nested_call) - return_value_of_nested_call.connect(call_node) - # visited_args.append(return_value_of_nested_call) - - logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) - visual_args.append(return_value_of_nested_call.left_hand_side) - rhs_vars.append(return_value_of_nested_call.left_hand_side) - else: - label = LabelVisitor() - label.visit(arg) - logger.debug("arg is %s, and label.result is %s", arg, label.result) - visual_args.append(label.result) - # visited_args.append(arg) - - from .vars_visitor import VarsVisitor - vv = VarsVisitor() - vv.visit(arg) - logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) - logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) - rhs_vars.extend(vv.result) - logger.debug("[SOUL BREW] arg is %s", arg) - ######## + ##### logger.debug("[3rd rail] visual_args is %s", visual_args) # logger.debug("[3rd rail] visited_args is %s", visited_args) @@ -925,42 +854,31 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("[qq] visual_args is %s", visual_args) logger.debug("[qq] rhs_vars is %s", rhs_vars) - # This is where we'll ask the user, then save the mapping or just use the mapping. + # This is where we'll ask the user, then save the mapping or just use the pre-made mapping. # Or perhaps we'll do that in vulnerabilities.py call_node.right_hand_side_variables = rhs_vars + # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? + # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? + # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? + # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? call_node.args = rhs_vars # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? # What is assigned to ret_func_foo in the builtin/blackbox case? - # ReturnNode - - # the old way - # call_node = Node(label.result, node, line_number=node.lineno, path=self.filenames[-1]) - # We need to know what the arguments are to a sink, - # we also need to know the arguments to a builtin or blackbox so we can have a mapping of - # e.g. arg1 taints return value and arg2 does not. - # call save_def_args_in_temp() - # call_args, def_args, line_number, saved_function_call_index - # args_mapping = save_def_args_in_temp(call_args???, def_args???, node.lineno, saved_function_call_index) - if blackbox: logger.debug("[qq] call_node being added to blackbox_calls is %s", call_node) # This makes so much sense! self.blackbox_assignments.add(call_node) # IMPORTANT - logger.debug("[Integral] connecting %s", original_prev_node) + logger.debug("[Integral] connecting %s", self.nodes[-1]) logger.debug("[Integral] to call_node %s", call_node) - # THE CULPRIT! - # original_prev_node.connect(call_node) - # raise - logger.debug("ON&ON original_prev_node IS %s", original_prev_node) + logger.debug("ON&ON self.nodes[-1] IS %s", self.nodes[-1]) logger.debug("ON&ON call_node IS %s", call_node) - self.connect_if_allowed(original_prev_node, call_node) + self.connect_if_allowed(self.nodes[-1], call_node) self.nodes.append(call_node) - # raise # IMPORTANT logger.debug("[Dominique bistro] call_node is %s", call_node) diff --git a/pyt/liveness.py b/pyt/liveness.py index 0fd608ef..c98d32a3 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -57,7 +57,7 @@ def remove_id_assignment(self, JOIN, cfg_node): def add_vars_assignment(self, JOIN, cfg_node): rvars = list() if isinstance(cfg_node, BBnode): - # A conscience descision was made not to include e.g. ¤call_N's in RHS vars + # A conscience decision was made not to include e.g. ¤call_N's in RHS vars rvars.extend(cfg_node.right_hand_side_variables) else: vv = VarsVisitor() diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 72b65348..7116dfd9 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -790,33 +790,30 @@ def test_path_traversal(self): for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=10) + self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 ret_request = 1 image_name_equals_call_1 = 2 _if = 3 image_name_equals_foo = 4 - inner_call = 5 - outer_call = 6 - foo_equals_call_2 = 7 - ret_send_file = 8 - _exit = 9 + blackbox_call = 5 + foo_equals_call_2 = 6 + ret_send_file = 7 + _exit = 8 + logger.debug("[Four barrel] blackbox_call type is %s", type(self.cfg.nodes[blackbox_call])) # image_name = request.args.get('image_name') # if not image_name: # image_name = 'foo' -# foo = scrypt.encrypt(scrypt.encrypt(), image_name) # Nested call after if caused the problem +# foo = scrypt.outer(image_name) # Any call after if causes the problem # send_file(foo) - self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), (image_name_equals_foo, _if), - (inner_call, image_name_equals_foo), - (outer_call, inner_call), - (outer_call, image_name_equals_foo), # NO NO NO - (foo_equals_call_2, outer_call), + (blackbox_call, image_name_equals_foo), + (foo_equals_call_2, blackbox_call), (foo_equals_call_2, _if), # NO NO NO (foo_equals_call_2, image_name_equals_foo), # NO NO NO (ret_send_file, foo_equals_call_2), From 7c76159df8e88784b0ac475bf950023df3164470 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Sep 2017 11:23:42 -0700 Subject: [PATCH 150/541] Made and passed test_blackbox_call_after_if, easy in that case at least --- .../vulnerable_code/blackbox_call_after_if.py | 8 +++ .../nested_blackbox_calls_after_for.py | 8 +++ .../vulnerable_code/nested_call_after_if.py | 15 ----- pyt/base_cfg.py | 57 +++++++++++++++---- pyt/liveness.py | 6 +- pyt/vulnerabilities.py | 4 +- tests/cfg_test.py | 45 ++++++++++++--- 7 files changed, 103 insertions(+), 40 deletions(-) create mode 100644 example/vulnerable_code/blackbox_call_after_if.py create mode 100644 example/vulnerable_code/nested_blackbox_calls_after_for.py delete mode 100644 example/vulnerable_code/nested_call_after_if.py diff --git a/example/vulnerable_code/blackbox_call_after_if.py b/example/vulnerable_code/blackbox_call_after_if.py new file mode 100644 index 00000000..3535e5de --- /dev/null +++ b/example/vulnerable_code/blackbox_call_after_if.py @@ -0,0 +1,8 @@ +import scrypt + + +image_name = request.args.get('image_name') +if not image_name: + image_name = 'foo' +foo = scrypt.outer(image_name) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/example/vulnerable_code/nested_blackbox_calls_after_for.py b/example/vulnerable_code/nested_blackbox_calls_after_for.py new file mode 100644 index 00000000..4da908a1 --- /dev/null +++ b/example/vulnerable_code/nested_blackbox_calls_after_for.py @@ -0,0 +1,8 @@ +import scrypt + + +image_name = request.args.get('image_name') +for x in range(0, 10): + print(x) +foo = scrypt.outer(scrypt.outer(image_name)) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/example/vulnerable_code/nested_call_after_if.py b/example/vulnerable_code/nested_call_after_if.py deleted file mode 100644 index 68071be1..00000000 --- a/example/vulnerable_code/nested_call_after_if.py +++ /dev/null @@ -1,15 +0,0 @@ -import scrypt - -# def outer(outer_arg): -# outer_ret_val = outer_arg + 'hey' -# return outer_ret_val - -image_name = request.args.get('image_name') -if not image_name: - image_name = 'foo' -# for x in range(0, 10): -# print(x) -# print('if this print statement is here everything works') -# print('foo') -foo = scrypt.outer(image_name) # Any call after if causes the problem -send_file(foo) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index c5ae9462..e7ea3330 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -149,6 +149,8 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, v super().__init__(label, ast_node, line_number=line_number, path=path) self.left_hand_side = left_hand_side self.right_hand_side_variables = right_hand_side_variables + + # TODO: REFACTOR THESE INTO AssignmentCallNode! # Only set in assignment_call_node() self.vv_result = vv_result # Only set True in assignment_call_node() @@ -177,8 +179,8 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) -class BBnode(AssignmentNode): - """Node used for handling restore nodes returning from function calls.""" +class BBorBInode(AssignmentNode): + """Node used for handling restore nodes returning from blackbox or builtin function calls.""" def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): """Create a Restore node. @@ -194,6 +196,23 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num self.args = [] +class AssignmentCallNode(AssignmentNode): + """Node used for X.""" + + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, vv_result, *, line_number, path, call_node): + """Create a X. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + path? + call_node? + """ + super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, vv_result, line_number=line_number, path=path) + self.call_node = call_node + class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" @@ -288,6 +307,8 @@ def connect_control_flow_node(self, control_flow_node, next_node): for last in control_flow_node[1]: # list of last nodes in ifs and elifs if isinstance(next_node, ControlFlowNode): last.connect(next_node.test) # connect to next if test case + elif isinstance(next_node, AssignmentCallNode): + last.connect(next_node.call_node) else: last.connect(next_node) @@ -301,6 +322,12 @@ def connect_nodes(self, nodes): self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if n.connect(next_node[0]) + # elif isinstance(n, AssignmentCallNode): + # Proceed as normal! + # raise + # elif isinstance(next_node, AssignmentCallNode): + # Proceed as normal! + # raise elif isinstance(next_node, RestoreNode): continue elif CALL_IDENTIFIER in next_node.label: @@ -634,15 +661,23 @@ def assignment_call_node(self, left_hand_label, ast_node): logger.debug("[NYSEC] type(call) is %s", type(call)) call_label = '' call_assignment = None - if isinstance(call, AssignmentNode): # assignment after returned nonbuiltin e.g. RestoreNode ¤call_1 = ret_outer + + # TODO eliminate else and code duplication + if isinstance(call, BBorBInode): + logger.debug("[sf]call is an BBorBInode!") + call_label = call.left_hand_side + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) + call.connect(call_assignment) + elif isinstance(call, AssignmentNode): # assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer # raise + logger.debug("[sf]call is an AssignmentNode!") call_label = call.left_hand_side - call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1]) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) call.connect(call_assignment) else: # assignment to builtin # Consider using call.left_hand_side instead of call.label # logger.debug("call.left_hand_side is %s", call.left_hand_side) - # raise + raise # call_label = call.left_hand_side call_label = call.label @@ -653,7 +688,7 @@ def assignment_call_node(self, left_hand_label, ast_node): vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) - call_assignment = AssignmentNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1]) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) if call in self.blackbox_calls: self.blackbox_assignments.add(call_assignment) @@ -780,11 +815,11 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + label.result[:index] + '(' logger.debug("[Dominique bistro] RHS is %s", RHS) - call_node = BBnode("", - LHS, - [], - line_number=node.lineno, - path=self.filenames[-1]) + call_node = BBorBInode("", + LHS, + [], + line_number=node.lineno, + path=self.filenames[-1]) # visited_args = [] visual_args = [] diff --git a/pyt/liveness.py b/pyt/liveness.py index c98d32a3..8c524724 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -2,7 +2,7 @@ from .analysis_base import AnalysisBase from .ast_helper import get_call_names_as_string -from .base_cfg import AssignmentNode, BBnode, EntryOrExitNode +from .base_cfg import AssignmentNode, BBorBInode, EntryOrExitNode from .constraint_table import constraint_join, constraint_table from .lattice import Lattice from .vars_visitor import VarsVisitor @@ -36,7 +36,7 @@ def is_condition(self, cfg_node): def remove_id_assignment(self, JOIN, cfg_node): lvars = list() - if isinstance(cfg_node, BBnode): + if isinstance(cfg_node, BBorBInode): lvars.append(cfg_node.left_hand_side) else: try: @@ -56,7 +56,7 @@ def remove_id_assignment(self, JOIN, cfg_node): def add_vars_assignment(self, JOIN, cfg_node): rvars = list() - if isinstance(cfg_node, BBnode): + if isinstance(cfg_node, BBorBInode): # A conscience decision was made not to include e.g. ¤call_N's in RHS vars rvars.extend(cfg_node.right_hand_side_variables) else: diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 9fbe11af..b8d937db 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -3,7 +3,7 @@ import ast from collections import namedtuple -from .base_cfg import AssignmentNode, BBnode, RestoreNode +from .base_cfg import AssignmentNode, BBorBInode, RestoreNode from .framework_adaptor import TaintedNode from .lattice import Lattice from .right_hand_side_visitor import RHSVisitor @@ -264,7 +264,7 @@ def get_sink_args(cfg_node): logger.debug("[VINEAPPLE] cfg_node.ast_node is %s", cfg_node.ast_node) logger.debug("[VINEAPPLE] type(cfg_node.ast_node) is %s", type(cfg_node.ast_node)) other_results = list() - if isinstance(cfg_node, BBnode): + if isinstance(cfg_node, BBorBInode): # logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) # for arg in cfg_node.args: # logger.debug("arg is %s", arg) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 7116dfd9..c921b200 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -783,8 +783,8 @@ def test_function_multiple_return(self): (call_foo, exit_foo), (_exit, call_foo)]) - def test_path_traversal(self): - path = 'example/vulnerable_code/nested_call_after_if.py' + def test_blackbox_call_after_if(self): + path = 'example/vulnerable_code/blackbox_call_after_if.py' self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): @@ -803,19 +803,46 @@ def test_path_traversal(self): _exit = 8 logger.debug("[Four barrel] blackbox_call type is %s", type(self.cfg.nodes[blackbox_call])) -# image_name = request.args.get('image_name') -# if not image_name: -# image_name = 'foo' -# foo = scrypt.outer(image_name) # Any call after if causes the problem -# send_file(foo) + + self.assertInCfg([(ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (blackbox_call, _if), + (blackbox_call, image_name_equals_foo), + (foo_equals_call_2, blackbox_call), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) + + def test_nested_blackbox_calls_after_if(self): + path = 'example/vulnerable_code/nested_blackbox_calls_after_if.py' + self.cfg_create_from_file(path) + + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + ret_request = 1 + image_name_equals_call_1 = 2 + _if = 3 + image_name_equals_foo = 4 + blackbox_call = 5 + foo_equals_call_2 = 6 + ret_send_file = 7 + _exit = 8 + + logger.debug("[Four barrel] blackbox_call type is %s", type(self.cfg.nodes[blackbox_call])) + self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), (image_name_equals_foo, _if), + (blackbox_call, _if), (blackbox_call, image_name_equals_foo), (foo_equals_call_2, blackbox_call), - (foo_equals_call_2, _if), # NO NO NO - (foo_equals_call_2, image_name_equals_foo), # NO NO NO (ret_send_file, foo_equals_call_2), (_exit, ret_send_file) ]) From c057b8e976e5af7aa90a4929ccefccb2aad73e4d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Sep 2017 11:52:15 -0700 Subject: [PATCH 151/541] Made and passed test_nested_blackbox_calls_after_for, easy in that case too --- .../nested_blackbox_calls_after_for.py | 2 +- pyt/base_cfg.py | 15 ++++++-- tests/cfg_test.py | 34 ++++++++++--------- 3 files changed, 31 insertions(+), 20 deletions(-) diff --git a/example/vulnerable_code/nested_blackbox_calls_after_for.py b/example/vulnerable_code/nested_blackbox_calls_after_for.py index 4da908a1..55deece4 100644 --- a/example/vulnerable_code/nested_blackbox_calls_after_for.py +++ b/example/vulnerable_code/nested_blackbox_calls_after_for.py @@ -4,5 +4,5 @@ image_name = request.args.get('image_name') for x in range(0, 10): print(x) -foo = scrypt.outer(scrypt.outer(image_name)) # Any call after ControlFlowNode caused the problem +foo = scrypt.outer(scrypt.inner(image_name)) # Any call after ControlFlowNode caused the problem send_file(foo) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index e7ea3330..3f74a4f9 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -194,6 +194,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num """ super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) self.args = [] + self.inner_most_call = self class AssignmentCallNode(AssignmentNode): @@ -308,7 +309,14 @@ def connect_control_flow_node(self, control_flow_node, next_node): if isinstance(next_node, ControlFlowNode): last.connect(next_node.test) # connect to next if test case elif isinstance(next_node, AssignmentCallNode): - last.connect(next_node.call_node) + call_node = next_node.call_node + logger.debug("SPOTI So call_node is %s", call_node) + # Loop to inner most function call + # e.g. scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` + while call_node != call_node.inner_most_call: + call_node = call_node.inner_most_call + logger.debug("SPOTI So call_node is now %s", call_node) + last.connect(call_node) else: last.connect(next_node) @@ -323,8 +331,8 @@ def connect_nodes(self, nodes): elif isinstance(next_node, ControlFlowNode): # case for if n.connect(next_node[0]) # elif isinstance(n, AssignmentCallNode): - # Proceed as normal! - # raise + # # Proceed as normal! + # raise # elif isinstance(next_node, AssignmentCallNode): # Proceed as normal! # raise @@ -837,6 +845,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) logger.debug("BNBN About to append %s", return_value_of_nested_call) return_value_of_nested_call.connect(call_node) + call_node.inner_most_call = return_value_of_nested_call # visited_args.append(return_value_of_nested_call) logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index c921b200..b8a06715 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -815,35 +815,37 @@ def test_blackbox_call_after_if(self): (_exit, ret_send_file) ]) - def test_nested_blackbox_calls_after_if(self): - path = 'example/vulnerable_code/nested_blackbox_calls_after_if.py' + def test_nested_blackbox_calls_after_for(self): + path = 'example/vulnerable_code/nested_blackbox_calls_after_for.py' self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=9) + self.assert_length(self.cfg.nodes, expected_length=10) entry = 0 ret_request = 1 image_name_equals_call_1 = 2 - _if = 3 - image_name_equals_foo = 4 - blackbox_call = 5 - foo_equals_call_2 = 6 - ret_send_file = 7 - _exit = 8 + _for = 3 + ret_print = 4 + inner_blackbox_call = 5 + outer_blackbox_call = 6 + foo_equals_call_3 = 7 + ret_send_file = 8 + _exit = 9 - logger.debug("[Four barrel] blackbox_call type is %s", type(self.cfg.nodes[blackbox_call])) + logger.debug("[Four barrel] inner_blackbox_call type is %s", type(self.cfg.nodes[inner_blackbox_call])) self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), - (_if, image_name_equals_call_1), - (image_name_equals_foo, _if), - (blackbox_call, _if), - (blackbox_call, image_name_equals_foo), - (foo_equals_call_2, blackbox_call), - (ret_send_file, foo_equals_call_2), + (_for, image_name_equals_call_1), + (ret_print, _for), + (_for, ret_print), + (inner_blackbox_call, _for), + (outer_blackbox_call, inner_blackbox_call), + (foo_equals_call_3, outer_blackbox_call), + (ret_send_file, foo_equals_call_3), (_exit, ret_send_file) ]) From c90a14e8e350cbe154c152d0371dc981f20e9765 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Sep 2017 12:42:28 -0700 Subject: [PATCH 152/541] [test]Made and passed test_multiple_nested_blackbox_calls_after_for, did some weird but necessary stuff --- ...ultiple_nested_blackbox_calls_after_for.py | 8 +++++++ .../nested_blackbox_calls_after_for.py | 8 ------- pyt/base_cfg.py | 17 ++++++++++++-- tests/cfg_test.py | 23 +++++++++++-------- 4 files changed, 37 insertions(+), 19 deletions(-) create mode 100644 example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py delete mode 100644 example/vulnerable_code/nested_blackbox_calls_after_for.py diff --git a/example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py b/example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py new file mode 100644 index 00000000..f4c0714f --- /dev/null +++ b/example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py @@ -0,0 +1,8 @@ +import scrypt + + +image_name = request.args.get('image_name') +for x in range(0, 10): + print(x) +foo = scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name)) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/example/vulnerable_code/nested_blackbox_calls_after_for.py b/example/vulnerable_code/nested_blackbox_calls_after_for.py deleted file mode 100644 index 55deece4..00000000 --- a/example/vulnerable_code/nested_blackbox_calls_after_for.py +++ /dev/null @@ -1,8 +0,0 @@ -import scrypt - - -image_name = request.args.get('image_name') -for x in range(0, 10): - print(x) -foo = scrypt.outer(scrypt.inner(image_name)) # Any call after ControlFlowNode caused the problem -send_file(foo) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 3f74a4f9..d015ac94 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -832,6 +832,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # visited_args = [] visual_args = [] rhs_vars = [] + last_return_value_of_nested_call = None + for arg in itertools.chain(node.args, node.keywords): if isinstance(arg, ast.Call): # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) @@ -844,8 +846,16 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): # raise logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) logger.debug("BNBN About to append %s", return_value_of_nested_call) - return_value_of_nested_call.connect(call_node) - call_node.inner_most_call = return_value_of_nested_call + + if last_return_value_of_nested_call: + # connect inner to other_inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + last_return_value_of_nested_call.connect(return_value_of_nested_call) + else: + # I should only set this once per loop, inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) + call_node.inner_most_call = return_value_of_nested_call + last_return_value_of_nested_call = return_value_of_nested_call + # visited_args.append(return_value_of_nested_call) logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) @@ -865,6 +875,9 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) rhs_vars.extend(vv.result) logger.debug("[Voyager] arg is %s", arg) + if last_return_value_of_nested_call: + # connect other_inner to outer in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + last_return_value_of_nested_call.connect(call_node) ##### logger.debug("[3rd rail] visual_args is %s", visual_args) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index b8a06715..56ed547c 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -815,14 +815,14 @@ def test_blackbox_call_after_if(self): (_exit, ret_send_file) ]) - def test_nested_blackbox_calls_after_for(self): - path = 'example/vulnerable_code/nested_blackbox_calls_after_for.py' + def test_multiple_nested_blackbox_calls_after_for(self): + path = 'example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=10) + self.assert_length(self.cfg.nodes, expected_length=11) entry = 0 ret_request = 1 @@ -830,12 +830,16 @@ def test_nested_blackbox_calls_after_for(self): _for = 3 ret_print = 4 inner_blackbox_call = 5 - outer_blackbox_call = 6 - foo_equals_call_3 = 7 - ret_send_file = 8 - _exit = 9 - + second_inner_blackbox_call = 6 + outer_blackbox_call = 7 + foo_equals_call_3 = 8 + ret_send_file = 9 + _exit = 10 + + logger.debug("[Four barrel] inner_blackbox_call is %s", self.cfg.nodes[inner_blackbox_call]) + logger.debug("[Four barrel] second_inner_blackbox_call is %s", self.cfg.nodes[second_inner_blackbox_call]) logger.debug("[Four barrel] inner_blackbox_call type is %s", type(self.cfg.nodes[inner_blackbox_call])) + logger.debug("[Four barrel] second_inner_blackbox_call type is %s", type(self.cfg.nodes[second_inner_blackbox_call])) self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), @@ -843,7 +847,8 @@ def test_nested_blackbox_calls_after_for(self): (ret_print, _for), (_for, ret_print), (inner_blackbox_call, _for), - (outer_blackbox_call, inner_blackbox_call), + (second_inner_blackbox_call, inner_blackbox_call), + (outer_blackbox_call, second_inner_blackbox_call), (foo_equals_call_3, outer_blackbox_call), (ret_send_file, foo_equals_call_3), (_exit, ret_send_file) From 62e4c9f5a336d5dc3d78c0c4b3f002ba8e9367fb Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 2 Oct 2017 19:25:03 -0700 Subject: [PATCH 153/541] random push incase laptop is stolen --- ...lackbox_and_user_defined_calls_after_if.py | 16 ++ ...iple_nested_user_defined_calls_after_if.py | 17 ++ pyt/base_cfg.py | 16 +- pyt/interprocedural_cfg.py | 5 +- tests/cfg_test.py | 165 ++++++++++++++++++ 5 files changed, 212 insertions(+), 7 deletions(-) create mode 100644 example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py create mode 100644 example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py diff --git a/example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py b/example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py new file mode 100644 index 00000000..343ea043 --- /dev/null +++ b/example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py @@ -0,0 +1,16 @@ +import scrypt + + +def outer(first_arg, second_arg, third_arg): + outer_ret_val = first_arg + second_arg + third_arg + return outer_ret_val + +def second_inner(inner_arg): + inner_ret_val = inner_arg + '2nd' + return inner_ret_val + +image_name = request.args.get('image_name') +if not image_name: + image_name = 'foo' +foo = outer(scrypt.first_inner(image_name), second_inner(image_name), scrypt.third_inner(image_name)) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py b/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py new file mode 100644 index 00000000..2a7d5039 --- /dev/null +++ b/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py @@ -0,0 +1,17 @@ +def outer(first_arg, second_arg): + outer_ret_val = first_arg + second_arg + return outer_ret_val + +def first_inner(first_inner_arg): + first_inner_ret_val = first_inner_arg + '1st' + return first_inner_ret_val + +def second_inner(second_inner_arg): + second_inner_ret_val = second_inner_arg + '2nd' + return second_inner_ret_val + +image_name = request.args.get('image_name') +if not image_name: + image_name = 'foo' +foo = outer(first_inner(image_name), second_inner(image_name)) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index d015ac94..bccb32c5 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -311,11 +311,17 @@ def connect_control_flow_node(self, control_flow_node, next_node): elif isinstance(next_node, AssignmentCallNode): call_node = next_node.call_node logger.debug("SPOTI So call_node is %s", call_node) - # Loop to inner most function call - # e.g. scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` - while call_node != call_node.inner_most_call: - call_node = call_node.inner_most_call - logger.debug("SPOTI So call_node is now %s", call_node) + if isinstance(call_node, BBorBInode): + # Loop to inner most function call + # e.g. scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` + while call_node != call_node.inner_most_call: + call_node = call_node.inner_most_call + logger.debug("SPOTI So call_node is now %s", call_node) + else: + # It is a user-defined call + # DO STUFF + # DO STUFF + pass last.connect(call_node) else: last.connect(next_node) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 86d72704..3cf45b3a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -346,8 +346,9 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) + # logger.debug if return_value_of_nested_call in self.blackbox_calls: - logger.debug("[Little collins] nested blackbox call, ouchie") + logger.debug("[San Francisco apartment] blackbox call INSIDE USER-DEFINED CALL, ouchie ouchie") raise continue else: @@ -500,7 +501,7 @@ def process_function(self, call_node, definition): saved_function_call_index) logger.debug("BEFORE saved_variables are %s", saved_variables) - # Check to make sure there is no bug + # Check to make sure there is no bug in the input code (for when I don't feel like running the test case with CPython) assert len(call_node.args) == len(Arguments(def_node.args)) args_mapping = self.save_def_args_in_temp(call_node.args, diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 56ed547c..8ef77111 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -815,6 +815,139 @@ def test_blackbox_call_after_if(self): (_exit, ret_send_file) ]) + def test_multiple_nested_user_defined_calls_after_if(self): + path = 'example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py' + self.cfg_create_from_file(path) + + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + + self.assert_length(self.cfg.nodes, expected_length=39) + +#24 is Label: image_name = inner_arg +#25 is Label: inner_ret_val = save_4_inner_ret_val + + entry = 0 + ret_request = 1 + image_name_equals_call_1 = 2 + _if = 3 + image_name_equals_foo = 4 + + save_2_image_name = 5 + save_3_image_name = 6 + temp_3_first_inner_arg = 7 + inner_arg_equals_temp_3 = 8 + function_entry_first_inner = 9 + first_inner_ret_val_assign_1st = 10 + ret_first_inner = 11 + function_exit_first_inner = 12 + image_name_equals_first_inner_arg = 13 + call_3_equals_ret_first_inner = 14 + temp_2_first_arg_equals_call_3 = 15 + + save_4_image_name = 16 + save_4_inner_ret_val = 17 + temp_4_inner_arg = 18 + inner_arg_equals_temp_4 = 19 + function_entry_second_inner = 20 + second_inner_ret_val_assign_2nd = 21 + + + + ret_second_inner = 22 + + + + function_exit_second_inner = 23 + image_name_equals_second_inner_arg = 24 + first_inner_ret_val_equals_save_4 = 25 + + call_4_equals_ret_second_inner = 26 + temp_2_second_arg_equals_call_4 = 27 + first_arg_equals_temp = 28 + second_arg_equals_temp = 29 + function_entry_outer = 30 + outer_ret_val_assignment = 31 + ret_outer = 32 + function_exit_outer = 33 + image_name_restore = 34 + call_2_equals_ret_outer = 35 + + foo_equals_call_2 = 36 + ret_send_file = 37 + _exit = 38 + + logger.debug("[Four barrel] save_2_image_name type is %s", type(self.cfg.nodes[save_2_image_name])) + + + logger.debug("[Four barrel] image_name_restore type is %s", type(self.cfg.nodes[image_name_restore])) + logger.debug("[Four barrel] call_2_equals_ret_outer type is %s", type(self.cfg.nodes[call_2_equals_ret_outer])) + + self.assertInCfg([(ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (call_2_equals_ret_outer, _if), ## NO NO NO + (call_2_equals_ret_outer, image_name_equals_foo), ## NO NO NO + (save_2_image_name, image_name_equals_foo), + + (save_3_image_name, save_2_image_name), + (temp_3_first_inner_arg, save_3_image_name), + (inner_arg_equals_temp_3, temp_3_first_inner_arg), + (function_entry_first_inner, inner_arg_equals_temp_3), + (first_inner_ret_val_assign_1st, function_entry_first_inner), + (ret_first_inner, first_inner_ret_val_assign_1st), + (function_exit_first_inner, ret_first_inner), + (image_name_equals_first_inner_arg, function_exit_first_inner), + (call_3_equals_ret_first_inner, image_name_equals_first_inner_arg), + (temp_2_first_arg_equals_call_3, call_3_equals_ret_first_inner), + (save_4_image_name, temp_2_first_arg_equals_call_3), + (save_4_inner_ret_val, save_4_image_name), + (temp_4_inner_arg, save_4_inner_ret_val), + (inner_arg_equals_temp_4, temp_4_inner_arg), + (function_entry_second_inner, inner_arg_equals_temp_4), + (second_inner_ret_val_assign_2nd, function_entry_second_inner), + (ret_second_inner, second_inner_ret_val_assign_2nd), + (function_exit_second_inner, ret_second_inner), + (image_name_equals_second_inner_arg, function_exit_second_inner), + (first_inner_ret_val_equals_save_4, image_name_equals_second_inner_arg), + # (Z, first_inner_ret_val_equals_save_4), + # (X, Z), + # (V, X), + # (K, V), + # (Z, K), + # (X, Z), + # (V, X), + # (K, V), + # (Z, K), + # (X, Z), + # (V, X), + # (K, V), + # (Z, K), + # (X, Z), + # (V, X), + # (K, V), + # (Z, K), + # (X, Z), + # (V, X), + # (K, V), + # (Z, K), + # (X, Z), + # (V, X), + # (K, V), + + + (outer_ret_val_assignment, function_entry_outer), + (ret_outer, outer_ret_val_assignment), + (function_exit_outer, ret_outer), + (image_name_restore, function_exit_outer), + (call_2_equals_ret_outer, image_name_restore), + + (foo_equals_call_2, call_2_equals_ret_outer), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) + def test_multiple_nested_blackbox_calls_after_for(self): path = 'example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' self.cfg_create_from_file(path) @@ -854,6 +987,38 @@ def test_multiple_nested_blackbox_calls_after_for(self): (_exit, ret_send_file) ]) + def test_multiple_nested_mixed_blackbox_and_user_defined_calls_after_if(self): + path = 'example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py' + self.cfg_create_from_file(path) + + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + + self.assert_length(self.cfg.nodes, expected_length=17) + + entry = 0 + ret_request = 1 + image_name_equals_call_1 = 2 + _if = 3 + image_name_equals_foo = 4 + # Function call starts here + + # ... + ret_send_file = 49 + _exit = 50 + + + self.assertInCfg([(ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (B, _if), + (B, image_name_equals_foo), + (A, B), + (ret_send_file, A), + (_exit, ret_send_file) + ]) + def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) From 3f0375b11e01448ce63b098d0b2626a0f6ffcb72 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 22 Oct 2017 13:17:56 -0700 Subject: [PATCH 154/541] [65] Made test_multiple_nested_user_defined_calls_after_if pass --- example/import_test_project/test_import.py | 2 + ...iple_nested_user_defined_calls_after_if.py | 2 + pyt/base_cfg.py | 18 +- pyt/interprocedural_cfg.py | 154 +++++++++++++----- tests/cfg_test.py | 51 ++---- tests/import_test.py | 4 +- tests/nested_functions_test.py | 2 +- 7 files changed, 153 insertions(+), 80 deletions(-) diff --git a/example/import_test_project/test_import.py b/example/import_test_project/test_import.py index 3f6a604d..6e117597 100644 --- a/example/import_test_project/test_import.py +++ b/example/import_test_project/test_import.py @@ -1,4 +1,6 @@ from A import B import A + + b = B('str') c = A.B('sss') diff --git a/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py b/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py index 2a7d5039..e99212f5 100644 --- a/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py +++ b/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py @@ -9,9 +9,11 @@ def first_inner(first_inner_arg): def second_inner(second_inner_arg): second_inner_ret_val = second_inner_arg + '2nd' return second_inner_ret_val + # return 'foo' image_name = request.args.get('image_name') if not image_name: image_name = 'foo' foo = outer(first_inner(image_name), second_inner(image_name)) # Any call after ControlFlowNode caused the problem send_file(foo) + diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index bccb32c5..c091af62 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -321,7 +321,23 @@ def connect_control_flow_node(self, control_flow_node, next_node): # It is a user-defined call # DO STUFF # DO STUFF - pass + logger.error("[NEW] call_node is %s", call_node) + logger.error("[NEW] call_node.first_node is %s", call_node.first_node) + logger.error("[NEW] type(call_node.first_node) is %s", type(call_node.first_node)) + logger.error("[NEW] dir(call_node.first_node) is %s", dir(call_node.first_node)) + logger.error("[NEW] call_node.first_node.inner_most_call is %s", call_node.first_node.inner_most_call) + logger.error("[NEW] type(call_node.first_node.inner_most_call) is %s", type(call_node.first_node.inner_most_call)) + logger.error("[NEW] dir(call_node.first_node.inner_most_call) is %s", dir(call_node.first_node.inner_most_call)) + # raise + call_node = call_node.first_node + try: + while call_node != call_node.inner_most_call: + call_node = call_node.inner_most_call + logger.debug("[NEW] call_node is now %s", call_node) + except AttributeError: + # No inner calls + # Possible improvement: Make new node for RestoreNode's made in process_function and make `self.inner_most_call = self` + pass last.connect(call_node) else: last.connect(next_node) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 3cf45b3a..98ad4eeb 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -242,14 +242,17 @@ def save_local_scope(self, line_number, saved_function_call_index): saved_function_call_index(int): Unique number for each call. Returns: - saved_variables(list[SavedVariable]) + (saved_variables(list[SavedVariable]), first_node[RestoreNode or None]) """ saved_variables = list() saved_variables_so_far = set() + first_node = None + logger.debug("self.nodes are %s", self.nodes) # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes if type(node) == AssignmentNode]: # type() is used on purpose here + logger.debug("So one assignment is %s", assignment) if isinstance(assignment, RestoreNode): continue if assignment.left_hand_side in saved_variables_so_far: @@ -259,16 +262,19 @@ def save_local_scope(self, line_number, saved_function_call_index): assignment.left_hand_side previous_node = self.nodes[-1] - r = RestoreNode(save_name + ' = ' + assignment.left_hand_side, - save_name, [assignment.left_hand_side], - line_number=line_number, path=self.filenames[-1]) - saved_scope_node = self.append_node(r) + saved_scope_node = RestoreNode(save_name + ' = ' + assignment.left_hand_side, + save_name, [assignment.left_hand_side], + line_number=line_number, path=self.filenames[-1]) + if not first_node: + first_node = saved_scope_node + + self.nodes.append(saved_scope_node) # Save LHS saved_variables.append(SavedVariable(LHS=save_name, RHS=assignment.left_hand_side)) self.connect_if_allowed(previous_node, saved_scope_node) - return saved_variables + return (saved_variables, first_node) def connect_if_allowed(self, previous_node, node_to_connect_to): try: @@ -281,34 +287,41 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): # print('hest') # print('next') # self.nodes[-1] is print('hest') if self.last_was_loop_stack[-1]: - logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) - logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) + # logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) + # logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) return except IndexError: pass try: if previous_node is not self.prev_nodes_to_avoid[-1]: - logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) + # logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) previous_node.connect(node_to_connect_to) - else: - logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) - logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) + # else: + # logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) + # logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) except IndexError: - logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") - logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) - logger.debug("type(previous_node) is %s", type(previous_node)) + # logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") + # logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) + # logger.debug("type(previous_node) is %s", type(previous_node)) + # if not image_name: # return 404 # print('foo') # We do not want to this line with `return 404` if not isinstance(previous_node, ReturnNode): # If there are no prev_nodes_to_avoid we just connect safely. previous_node.connect(node_to_connect_to) - else: - logger.debug("SHUT DOWN, previous_node is ReturnNode") - logger.debug("PREV NODE IS A RETURN NODE") + + # else: + # logger.debug("SHUT DOWN, previous_node is ReturnNode") + # logger.debug("PREV NODE IS A RETURN NODE") - def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function_call_index): + def save_def_args_in_temp(self, + call_args, + def_args, + line_number, + saved_function_call_index, + first_node): """Save the arguments of the definition being called. Visit the arguments if they're calls. Args: @@ -316,21 +329,28 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. saved_function_call_index(int): Unique number for each call. + first_node(None or RestoreNode): Used to connect previous statements to this function. Returns: args_mapping(dict): A mapping of call argument to definition argument. + first_node(None or RestoreNode): Used to connect previous statements to this function. """ args_mapping = dict() + last_return_value_of_nested_call = None logger.debug("call_args are %s", call_args) + for call_arg, def_arg in zip(call_args, def_args): + call_arg_label_visitor = LabelVisitor() + call_arg_label_visitor.visit(call_arg) + # def_arg_label_visitor = LabelVisitor() + # def_arg_label_visitor.visit(def_arg) + logger.debug("[nfs] call_arg is %s, def_arg is %s", call_arg_label_visitor.result, def_arg) + logger.debug("def_args are %s", def_args) logger.debug("call_args are %s", len(call_args)) logger.debug("def_args are %s", len(def_args)) # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): - if len(call_args) == 0: - logger.debug("WTF") - raise logger.debug("Bout to die!") logger.debug("call_args are %s", call_args) logger.debug("def_args are %s", def_args) @@ -341,17 +361,19 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function call_arg_label_visitor = LabelVisitor() call_arg_label_visitor.visit(call_arg) + logger.debug("[nfs] call_arg_label_visitor.result is %s", call_arg_label_visitor.result) call_arg_rhs_visitor = RHSVisitor() call_arg_rhs_visitor.visit(call_arg) + return_value_of_nested_call = None if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) - # logger.debug + if return_value_of_nested_call in self.blackbox_calls: logger.debug("[San Francisco apartment] blackbox call INSIDE USER-DEFINED CALL, ouchie ouchie") raise - continue else: + logger.debug("[nfs] return_value_of_nested_call.left_hand_side is %s", return_value_of_nested_call.left_hand_side) restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, def_arg_temp_name, return_value_of_nested_call.left_hand_side, @@ -363,11 +385,51 @@ def save_def_args_in_temp(self, call_args, def_args, line_number, saved_function call_arg_rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) + if not first_node: + first_node = restore_node + + # Ugly to have 2 if's for this, but necessary to ensure first_node has a value, otherwise we would need 2 `if not first_node`s + if isinstance(call_arg, ast.Call): + if last_return_value_of_nested_call: + # connect inner to other_inner in e.g. `outer(inner(image_name), other_inner(image_name))` + logger.debug("[NEW] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call.first_node) + + # shit, check if has first_node? + last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) + pass + else: + # I should only set this once per loop, inner in e.g. `outer(inner(image_name), other_inner(image_name))` + # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) + logger.debug("[NEW] setting inner_most_call of %s to %s", first_node, return_value_of_nested_call) + first_node.inner_most_call = return_value_of_nested_call.first_node + pass + # We purposefully should not set this as the first_node of return_value_of_nested_call, last makes sense + last_return_value_of_nested_call = return_value_of_nested_call + + self.connect_if_allowed(self.nodes[-1], restore_node) self.nodes.append(restore_node) - args_mapping[call_arg_label_visitor.result] = def_args[i] - return args_mapping + # So call_arg_label_visitor.result is what makes no fucking sense + if isinstance(call_arg, ast.Call): + logger.debug("[nfs] So call_arg is a call, maybe this should be:") + logger.debug("[nfs] this %s = %s", return_value_of_nested_call.left_hand_side, def_args[i]) + args_mapping[return_value_of_nested_call.left_hand_side] = def_args[i] + else: + # logger.debug("[nfs] we are still doing this %s = %s", call_arg_label_visitor.result, def_args[i]) + # args_mapping[call_arg_label_visitor.result] = def_args[i] + args_mapping[def_args[i]] = call_arg_label_visitor.result + # After loop + if last_return_value_of_nested_call: + # connect other_inner to outer in e.g. `outer(inner(image_name), other_inner(image_name))` + logger.debug("[NEW] connecting %s to %s", last_return_value_of_nested_call, first_node) + + # first_node or last or something else? + # raise + last_return_value_of_nested_call.connect(first_node) + pass + + return (args_mapping, first_node) def create_local_scope_from_def_args(self, call_args, @@ -414,6 +476,8 @@ def restore_saved_local_scope(self, """ restore_nodes = list() for var in saved_variables: + logger.debug("args_mapping is %s", args_mapping) + logger.debug("var.RHS is %s", var.RHS) # Is var.RHS a call argument? if var.RHS in args_mapping: # If so, use the corresponding definition argument for the RHS of the label. @@ -422,6 +486,8 @@ def restore_saved_local_scope(self, [var.LHS], line_number=line_number, path=self.filenames[-1])) + logger.debug("args_mapping is %s", args_mapping) + logger.debug("This makes no sense, just made %s = %s node", var.RHS, args_mapping[var.RHS]) else: # Create a node for e.g. foo = save_1_foo restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, @@ -443,13 +509,14 @@ def restore_saved_local_scope(self, return restore_nodes - def return_handler(self, call_node, function_nodes, saved_function_call_index): + def return_handler(self, call_node, function_nodes, saved_function_call_index, first_node): """Handle the return from a function during a function call. Args: call_node(ast.Call) : The node that calls the definition. function_nodes(list[Node]): List of nodes of the function being called. saved_function_call_index(int): Unique number for each call. + first_node """ for node in function_nodes: # Only `Return`s and `Raise`s can be of type ConnectToExitNode @@ -464,6 +531,9 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index): path=self.filenames[-1]) logger.debug("Florence, self.nodes[-1] is %s", self.nodes[-1]) logger.debug("Florence, return_node is %s", return_node) + # Important and new code vv + return_node.first_node = first_node + self.nodes[-1].connect(return_node) self.nodes.append(return_node) return @@ -497,28 +567,30 @@ def process_function(self, call_node, definition): def_node = definition.node - saved_variables = self.save_local_scope(def_node.lineno, - saved_function_call_index) + saved_variables, first_node = self.save_local_scope(def_node.lineno, + saved_function_call_index) logger.debug("BEFORE saved_variables are %s", saved_variables) # Check to make sure there is no bug in the input code (for when I don't feel like running the test case with CPython) assert len(call_node.args) == len(Arguments(def_node.args)) - args_mapping = self.save_def_args_in_temp(call_node.args, - Arguments(def_node.args), - call_node.lineno, - saved_function_call_index) - + args_mapping, first_node = self.save_def_args_in_temp(call_node.args, + Arguments(def_node.args), + call_node.lineno, + saved_function_call_index, + first_node) self.filenames.append(definition.path) self.create_local_scope_from_def_args(call_node.args, Arguments(def_node.args), def_node.lineno, saved_function_call_index) - function_nodes = self.visit_and_get_function_nodes(definition) + function_nodes, first_node = self.visit_and_get_function_nodes(definition, first_node) self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) - self.return_handler(call_node, function_nodes, saved_function_call_index) - + self.return_handler(call_node, + function_nodes, + saved_function_call_index, + first_node) logger.debug("AFTER saved_variables are %s", saved_variables) self.function_return_stack.pop() # except IndexError: @@ -529,19 +601,23 @@ def process_function(self, call_node, definition): logger.debug('[Legal pad] returning %s', self.nodes[-1]) return self.nodes[-1] - def visit_and_get_function_nodes(self, definition): + def visit_and_get_function_nodes(self, definition, first_node): """Visits the nodes of a user defined function. Args: definition(LocalModuleDefinition): Definition of the function being added. + first_node Returns: the_new_nodes(list[Node]): The nodes added while visiting the function. + first_node """ len_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] entry_node = self.append_node(EntryOrExitNode("Function Entry " + definition.name)) + if not first_node: + first_node = entry_node self.connect_if_allowed(previous_node, entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) @@ -555,7 +631,7 @@ def visit_and_get_function_nodes(self, definition): the_new_nodes = self.nodes[len_before_visiting_func:] self.return_connection_handler(the_new_nodes, exit_node) - return the_new_nodes + return (the_new_nodes, first_node) def visit_Call(self, node): _id = get_call_names_as_string(node.func) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 8ef77111..4779c736 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -834,6 +834,7 @@ def test_multiple_nested_user_defined_calls_after_if(self): image_name_equals_foo = 4 save_2_image_name = 5 + save_3_image_name = 6 temp_3_first_inner_arg = 7 inner_arg_equals_temp_3 = 8 @@ -851,18 +852,12 @@ def test_multiple_nested_user_defined_calls_after_if(self): inner_arg_equals_temp_4 = 19 function_entry_second_inner = 20 second_inner_ret_val_assign_2nd = 21 - - - ret_second_inner = 22 - - - function_exit_second_inner = 23 image_name_equals_second_inner_arg = 24 first_inner_ret_val_equals_save_4 = 25 - call_4_equals_ret_second_inner = 26 + temp_2_second_arg_equals_call_4 = 27 first_arg_equals_temp = 28 second_arg_equals_temp = 29 @@ -878,17 +873,18 @@ def test_multiple_nested_user_defined_calls_after_if(self): _exit = 38 logger.debug("[Four barrel] save_2_image_name type is %s", type(self.cfg.nodes[save_2_image_name])) - - logger.debug("[Four barrel] image_name_restore type is %s", type(self.cfg.nodes[image_name_restore])) + logger.debug("[Four barrel] call_2_equals_ret_outer is %s", self.cfg.nodes[call_2_equals_ret_outer]) logger.debug("[Four barrel] call_2_equals_ret_outer type is %s", type(self.cfg.nodes[call_2_equals_ret_outer])) self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), (image_name_equals_foo, _if), - (call_2_equals_ret_outer, _if), ## NO NO NO - (call_2_equals_ret_outer, image_name_equals_foo), ## NO NO NO + # (call_2_equals_ret_outer, _if), ## (Before) NO NO NO + # (call_2_equals_ret_outer, image_name_equals_foo), ## (Before) NO NO NO + (save_3_image_name, _if), ## (After) Aww yeah, feels so good + (save_3_image_name, image_name_equals_foo), ## (After) Aww yeah, feels so good (save_2_image_name, image_name_equals_foo), (save_3_image_name, save_2_image_name), @@ -900,6 +896,7 @@ def test_multiple_nested_user_defined_calls_after_if(self): (function_exit_first_inner, ret_first_inner), (image_name_equals_first_inner_arg, function_exit_first_inner), (call_3_equals_ret_first_inner, image_name_equals_first_inner_arg), + (save_4_image_name, call_3_equals_ret_first_inner), (temp_2_first_arg_equals_call_3, call_3_equals_ret_first_inner), (save_4_image_name, temp_2_first_arg_equals_call_3), (save_4_inner_ret_val, save_4_image_name), @@ -911,32 +908,12 @@ def test_multiple_nested_user_defined_calls_after_if(self): (function_exit_second_inner, ret_second_inner), (image_name_equals_second_inner_arg, function_exit_second_inner), (first_inner_ret_val_equals_save_4, image_name_equals_second_inner_arg), - # (Z, first_inner_ret_val_equals_save_4), - # (X, Z), - # (V, X), - # (K, V), - # (Z, K), - # (X, Z), - # (V, X), - # (K, V), - # (Z, K), - # (X, Z), - # (V, X), - # (K, V), - # (Z, K), - # (X, Z), - # (V, X), - # (K, V), - # (Z, K), - # (X, Z), - # (V, X), - # (K, V), - # (Z, K), - # (X, Z), - # (V, X), - # (K, V), - - + (call_4_equals_ret_second_inner, first_inner_ret_val_equals_save_4), + (save_2_image_name, call_4_equals_ret_second_inner), + (temp_2_second_arg_equals_call_4, call_4_equals_ret_second_inner), + (first_arg_equals_temp, temp_2_second_arg_equals_call_4), + (second_arg_equals_temp, first_arg_equals_temp), + (function_entry_outer, second_arg_equals_temp), (outer_ret_val_assignment, function_entry_outer), (ret_outer, outer_ret_val_assignment), (function_exit_outer, ret_outer), diff --git a/tests/import_test.py b/tests/import_test.py index 09afd69e..f7565c34 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -27,13 +27,13 @@ def test_import(self): "Exit B", "¤call_1 = ret_B", "b = ¤call_1", - "save_2_b = b", + # "save_2_b = b", "temp_2_s = 'sss'", "s = temp_2_s", "Function Entry A.B", "ret_A.B = s", "Exit A.B", - "b = save_2_b", + # "b = save_2_b", "¤call_2 = ret_A.B", "c = ¤call_2", "Exit module"] diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index a1c84a8d..c1d7ed46 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -26,7 +26,7 @@ def test_nested_user_defined_function_calls(self): "inner_ret_val = inner_arg + 'hey'", "ret_inner = inner_ret_val", "Exit inner", - "foo = inner_arg", + "foo = save_2_foo", "¤call_2 = ret_inner", "temp_1_outer_arg = ¤call_2", "outer_arg = temp_1_outer_arg", From eafcd6af129b867cbcf8132e8e15e5d4e4505f24 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 4 Nov 2017 15:33:28 -0700 Subject: [PATCH 155/541] Kill the results file for good, fix tests, only have 2 more left --- pyt/base_cfg.py | 14 ++- pyt/interprocedural_cfg.py | 47 +++---- pyt/reaching_definitions_taint.py | 3 + tests/__main__.py | 6 +- tests/import_test.py | 4 +- tests/results | 1 - tests/run.py | 91 -------------- tests/vulnerabilities_across_files_test.py | 33 ++--- tests/vulnerabilities_test.py | 136 ++++++++++----------- 9 files changed, 119 insertions(+), 216 deletions(-) delete mode 100644 tests/results delete mode 100644 tests/run.py diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index c091af62..86e4cc31 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -692,17 +692,22 @@ def assignment_call_node(self, left_hand_label, ast_node): call_label = '' call_assignment = None + # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. + vars_visitor = VarsVisitor() + vars_visitor.visit(ast_node.value) + logger.debug("[empa] vars_visitor.result is %s", vars_visitor.result) + # TODO eliminate else and code duplication if isinstance(call, BBorBInode): logger.debug("[sf]call is an BBorBInode!") call_label = call.left_hand_side - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], vv_result=vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) call.connect(call_assignment) elif isinstance(call, AssignmentNode): # assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer # raise logger.debug("[sf]call is an AssignmentNode!") call_label = call.left_hand_side - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], vv_result=None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) call.connect(call_assignment) else: # assignment to builtin # Consider using call.left_hand_side instead of call.label @@ -714,11 +719,8 @@ def assignment_call_node(self, left_hand_label, ast_node): rhs_visitor = RHSVisitor() rhs_visitor.visit(ast_node.value) - # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - vars_visitor = VarsVisitor() - vars_visitor.visit(ast_node.value) - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vv_result=vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) if call in self.blackbox_calls: self.blackbox_assignments.add(call_assignment) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 98ad4eeb..7964f6bf 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -12,7 +12,9 @@ ) from .ast_helper import Arguments, generate_ast, get_call_names_as_string from .base_cfg import ( + AssignmentCallNode, AssignmentNode, + BBorBInode, CALL_IDENTIFIER, CFG, ConnectToExitNode, @@ -249,12 +251,20 @@ def save_local_scope(self, line_number, saved_function_call_index): first_node = None logger.debug("self.nodes are %s", self.nodes) + for n in self.nodes: + try: + if n.left_hand_side == 'b': + logger.debug("n is %s",n) + logger.debug("type(n) is %s",type(n)) + # raise + except AttributeError: + pass # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes - if type(node) == AssignmentNode]: # type() is used on purpose here + if type(node) == AssignmentNode or type(node) == AssignmentCallNode or type(Node) == BBorBInode]: # type() is used on purpose here logger.debug("So one assignment is %s", assignment) if isinstance(assignment, RestoreNode): - continue + raise if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) @@ -287,35 +297,20 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): # print('hest') # print('next') # self.nodes[-1] is print('hest') if self.last_was_loop_stack[-1]: - # logger.debug("OMG LAST WAS A LOOP, previous_node is %s", previous_node) - # logger.debug("OMG LAST WAS A LOOP, node_to_connect_to is %s", node_to_connect_to) return except IndexError: pass try: if previous_node is not self.prev_nodes_to_avoid[-1]: - # logger.debug("ALLOWED, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) previous_node.connect(node_to_connect_to) - # else: - # logger.debug("SHUT DOWN, WOO, self.prev_nodes_to_avoid[-1] is %s", self.prev_nodes_to_avoid[-1]) - # logger.debug("SHUT DOWN, WOO, node_to_connect_to is %s", node_to_connect_to) except IndexError: - # logger.debug("ALLOWED, no self.prev_nodes_to_avoid[-1] ") - # logger.debug("ALLOWED, node_to_connect_to is %s and previous_node is %s", node_to_connect_to, previous_node) - # logger.debug("type(previous_node) is %s", type(previous_node)) - # if not image_name: # return 404 # print('foo') # We do not want to this line with `return 404` if not isinstance(previous_node, ReturnNode): - # If there are no prev_nodes_to_avoid we just connect safely. + # If there are no prev_nodes_to_avoid, we just connect safely. previous_node.connect(node_to_connect_to) - # else: - # logger.debug("SHUT DOWN, previous_node is ReturnNode") - # logger.debug("PREV NODE IS A RETURN NODE") - - def save_def_args_in_temp(self, call_args, def_args, @@ -385,6 +380,8 @@ def save_def_args_in_temp(self, call_arg_rhs_visitor.result, line_number=line_number, path=self.filenames[-1]) + + # TODO: If there are no ??, and no saved variables, ... then this is the first node if not first_node: first_node = restore_node @@ -394,15 +391,19 @@ def save_def_args_in_temp(self, # connect inner to other_inner in e.g. `outer(inner(image_name), other_inner(image_name))` logger.debug("[NEW] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call.first_node) - # shit, check if has first_node? - last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) - pass + if isinstance(return_value_of_nested_call, BBorBInode): + last_return_value_of_nested_call.connect(return_value_of_nested_call) + else: + last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) + else: # I should only set this once per loop, inner in e.g. `outer(inner(image_name), other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) logger.debug("[NEW] setting inner_most_call of %s to %s", first_node, return_value_of_nested_call) - first_node.inner_most_call = return_value_of_nested_call.first_node - pass + if isinstance(return_value_of_nested_call, BBorBInode): + first_node.inner_most_call = return_value_of_nested_call + else: + first_node.inner_most_call = return_value_of_nested_call.first_node # We purposefully should not set this as the first_node of return_value_of_nested_call, last makes sense last_return_value_of_nested_call = return_value_of_nested_call diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 34351239..21728c7e 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,6 +1,8 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase +from pyt.utils.log import enable_logger, logger +enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): @@ -14,6 +16,7 @@ def fixpointmethod(self, cfg_node): # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if cfg_node.vv_result: + logger.debug("So cfg_node.vv_result is a thing, for cfg_node %s", cfg_node) if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/tests/__main__.py b/tests/__main__.py index df8298a7..8fad5457 100644 --- a/tests/__main__.py +++ b/tests/__main__.py @@ -1,7 +1,5 @@ from unittest import TestLoader, TestSuite, TextTestRunner -from .run import check_files - test_suite = TestSuite() loader = TestLoader() @@ -10,9 +8,7 @@ runner = TextTestRunner(verbosity=2) result = runner.run(suite) -passed = check_files() - -if result.wasSuccessful() and passed: +if result.wasSuccessful(): print('Success') exit(0) else: diff --git a/tests/import_test.py b/tests/import_test.py index f7565c34..09afd69e 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -27,13 +27,13 @@ def test_import(self): "Exit B", "¤call_1 = ret_B", "b = ¤call_1", - # "save_2_b = b", + "save_2_b = b", "temp_2_s = 'sss'", "s = temp_2_s", "Function Entry A.B", "ret_A.B = s", "Exit A.B", - # "b = save_2_b", + "b = save_2_b", "¤call_2 = ret_A.B", "c = ¤call_2", "Exit module"] diff --git a/tests/results b/tests/results deleted file mode 100644 index 3b7550bd..00000000 --- a/tests/results +++ /dev/null @@ -1 +0,0 @@ -b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/command_injection.py\n > User input at line 15, trigger word "form[": \n\tparam = request.form[\'suggestion\']\nReassigned in: \n\tFile: example/vulnerable_code/command_injection.py\n\t > Line 16: command = \'echo \' + param + \' >> \' + \'menu.txt\'\nFile: example/vulnerable_code/command_injection.py\n > reaches line 18, trigger word "subprocess.call(": \n\tsubprocess.call(command,shell=True)\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nFile: example/vulnerable_code/path_traversal.py\n > reaches line 11, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > User input at line 8, trigger word "get(": \n\timage_name = request.args.get(\'image_name\')\nReassigned in: \n\tFile: example/vulnerable_code/path_traversal_sanitised.py\n\t > Line 10: image_name = image_name.replace(\'..\', \'\')\nFile: example/vulnerable_code/path_traversal_sanitised.py\n > reaches line 12, trigger word "send_file(": \n\tret_cat_picture = send_file(os.path.join(os.getcwd(), image_name))\nThis vulnerability is potentially sanitised by: ["\'..\'", "\'..\' in"]\n\n'#¤%&/()=?b'2 vulnerabilities found:\nVulnerability 1:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 26, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 27, trigger word "execute(": \n\tresult = db.engine.execute(param)\n\nVulnerability 2:\nFile: example/vulnerable_code/sql/sqli.py\n > User input at line 33, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nFile: example/vulnerable_code/sql/sqli.py\n > reaches line 36, trigger word "filter(": \n\tresult = session.query(User).filter(\'username={}\'.format(param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_form.py\n > User input at line 14, trigger word "form[": \n\tdata = request.form[\'my_text\']\nReassigned in: \n\tFile: example/vulnerable_code/XSS_form.py\n\t > Line 17: ret_example2_action = resp\nFile: example/vulnerable_code/XSS_form.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html1.replace(\'{{ data }}\', data))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_url.py\n > User input at line 4, trigger word "Flask function URL parameter": \n\turl\nReassigned in: \n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 6: param = url\n\tFile: example/vulnerable_code/XSS_url.py\n\t > Line 10: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_url.py\n > reaches line 9, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_reassign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 8: param = param + \'\'\n\tFile: example/vulnerable_code/XSS_reassign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_reassign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_sanitised.py\n > User input at line 7, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 9: param = Markup.escape(param)\n\tFile: example/vulnerable_code/XSS_sanitised.py\n\t > Line 13: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_sanitised.py\n > reaches line 12, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', param))\nThis vulnerability is potentially sanitised by: [\'escape\']\n\n'#¤%&/()=?b'0 vulnerabilities found:\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_assign.py\n\t > Line 12: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_assign.py\n > reaches line 11, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', other_var))\n\n'#¤%&/()=?b'1 vulnerability found:\nVulnerability 1:\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > User input at line 6, trigger word "get(": \n\tparam = request.args.get(\'param\', \'not set\')\nReassigned in: \n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 8: other_var = param + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 10: not_the_same_var = \'\' + other_var\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 12: another_one = not_the_same_var + \'\'\n\tFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n\t > Line 17: ret_XSS1 = resp\nFile: example/vulnerable_code/XSS_variable_multiple_assign.py\n > reaches line 15, trigger word "replace(": \n\tresp = make_response(html.replace(\'{{ param }}\', another_one))\n\n'#¤%&/()=? diff --git a/tests/run.py b/tests/run.py deleted file mode 100644 index 32709d6a..00000000 --- a/tests/run.py +++ /dev/null @@ -1,91 +0,0 @@ -import argparse -from subprocess import PIPE, run - - -delimiter = '#¤%&/()=?' -results_file = 'tests/results' -example_file_path = 'example/vulnerable_code/' -python_name = open('tests/python_name.txt', 'r').read().rstrip() -encoding = 'utf-8' - -parser = argparse.ArgumentParser() -parser.add_argument('-py', '--python', help='Specify Python 3.', type=str) -parser.add_argument('-s', '--save-results', - help='Add new results', action='store_true') -parser.add_argument('-p', '--pyt-output', - help='Print output of PyT for each file.', - action='store_true') - -files = ['XSS.py', 'command_injection.py', 'path_traversal.py', - 'path_traversal_sanitised.py', 'sql/sqli.py', 'XSS_form.py', - 'XSS_url.py', 'XSS_no_vuln.py', 'XSS_reassign.py', - 'XSS_sanitised.py', 'XSS_variable_assign_no_vuln.py', - 'XSS_variable_assign.py', 'XSS_variable_multiple_assign.py'] -files = [example_file_path + filename for filename in files] - - -def run_pyt(file_input, stdout=PIPE): - return run([python_name, '-m', 'pyt', '-f', file_input], stdout=stdout) - - -def check_files(): - try: - with open(results_file, 'r', encoding=encoding) as fd: - results = fd.read().split(delimiter) - except FileNotFoundError: - print(results_file + ' file was not found.' - ' Generate this file by running this' - ' script with option --save-results or -s.') - exit(1) - - # last element is empty because - # results file always ends with a delimiter: - results.pop() - - passed = True - - if len(results) != len(files): - print('Number of results are not equal to the number of files') - print('Results: ' + str(len(results)) + ' Files: ' + str(len(files))) - exit(0) - - for i, f in enumerate(files): - print('################# ' + f + ' #################') - process = run_pyt(file_input=f) - stdout = str(process.stdout) - if results[i] == stdout: - print('Test passed.') - else: - print('Test failed.') - passed = False - return passed - - -def save_results(): - with open(results_file, 'w', encoding=encoding) as fd: - for f in files: - print('################# ' + f + ' #################') - process = run_pyt(file_input=f) - fd.write(str(process.stdout)) - fd.write(delimiter) - print('Saved result to file: "' + results_file + '".') - - -def print_pyt_output(): - for f in files: - print('################# ' + f + ' #################') - run_pyt(f, stdout=None) - - -if __name__ == '__main__': - args = parser.parse_args() - - if args.python: - print('Set python name in ""python_name.txt".') - - if args.save_results: - save_results() - elif args.pyt_output: - print_pyt_output() - else: - check_files() diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 9359c024..d0a1a57f 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -81,29 +81,29 @@ def test_builtin_with_user_defined_inner(self): logger.debug("vulnerability_description is %s", vulnerability_description) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/builtin_with_user_defined_inner.py - > User input at line 20, trigger word "form[": + > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 14: save_2_req_param = req_param + > Line 10: save_2_req_param = req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 23: temp_2_inner_arg = req_param + > Line 19: temp_2_inner_arg = req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 14: inner_arg = temp_2_inner_arg + > Line 10: inner_arg = temp_2_inner_arg File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 15: yes_vuln = inner_arg + 'hey' + > Line 11: yes_vuln = inner_arg + 'hey' File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 16: ret_inner = yes_vuln + > Line 12: ret_inner = yes_vuln File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 14: req_param = inner_arg + > Line 10: req_param = save_2_req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 23: ¤call_2 = ret_inner + > Line 19: ¤call_2 = ret_inner File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 23: ¤call_1 = ret_scrypt.encrypt(¤call_2) + > Line 19: ¤call_1 = ret_scrypt.encrypt(¤call_2) File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 23: foo = ¤call_1 + > Line 19: foo = ¤call_1 File: example/nested_functions_code/builtin_with_user_defined_inner.py - > reaches line 24, trigger word "subprocess.call(": + > reaches line 20, trigger word "subprocess.call(": ¤call_3 = ret_subprocess.call(foo, shell=True) This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) """ @@ -128,7 +128,7 @@ def test_sink_with_result_of_blackbox_nested(self): File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > reaches line 14, trigger word "subprocess.call(": ¤call_3 = ret_subprocess.call(result, shell=True) - This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) + This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt(req_param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -155,7 +155,7 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 12: ret_inner = inner_ret_val File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 10: req_param = inner_arg + > Line 10: req_param = save_2_req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: ¤call_2 = ret_inner File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -174,7 +174,7 @@ def test_sink_with_result_of_user_defined_nested(self): > Line 17: result = ¤call_1 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > reaches line 18, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(result,shell=True) + ¤call_3 = ret_subprocess.call(result, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -195,8 +195,9 @@ def test_sink_with_blackbox_inner(self): File: example/nested_functions_code/sink_with_blackbox_inner.py > reaches line 14, trigger word "subprocess.call(": ¤call_1 = ret_subprocess.call(¤call_2, shell=True) - This vulnerability is unknown due to: Label: ¤call_3 = ret_scrypt.encypt(req_param) + This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encypt(¤call_3) """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_user_defined_inner(self): @@ -222,7 +223,7 @@ def test_sink_with_user_defined_inner(self): File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 12: ret_inner = inner_ret_val File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: req_param = inner_arg + > Line 10: req_param = save_3_req_param File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ¤call_3 = ret_inner File: example/nested_functions_code/sink_with_user_defined_inner.py diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 1ef3ed51..af45d020 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -112,13 +112,19 @@ def test_is_sanitised_false(self): sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] sanitiser_dict = {'escape': [cfg_node_1]} + # We should use mock instead + orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) - constraint_table[cfg_node_1] = 0 - constraint_table[cfg_node_2] = 0 + + constraint_table[cfg_node_1] = 0b0 + constraint_table[cfg_node_2] = 0b0 result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) self.assertEqual(result, False) + # Clean up + ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements + def test_is_sanitised_true(self): cfg_node_1 = Node('Awesome sanitiser', None, line_number=None, path=None) @@ -126,44 +132,27 @@ def test_is_sanitised_true(self): sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] sanitiser_dict = {'escape': [cfg_node_1]} + # We should use mock instead + orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements + lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) constraint_table[cfg_node_2] = 0b1 result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) self.assertEqual(result, True) - - def test_find_vulnerabilities_no_vuln(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) - - def test_find_vulnerabilities_sanitised(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') - - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - - def test_find_vulnerabilities_vulnerable(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - - def test_find_vulnerabilities_reassign(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_reassign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - - def test_find_vulnerabilities_variable_assign(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + # Clean up + ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements def run_analysis(self, path): self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - if len(self.cfg.nodes) != 6: - raise + # if len(self.cfg.nodes) != 6: + # raise cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) - initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) @@ -174,18 +163,6 @@ def test_find_vulnerabilities_assign_other_var(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - def test_find_vulnerabilities_variable_multiple_assign(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - - def test_find_vulnerabilities_variable_assign_no_vuln(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) - - def test_find_vulnerabilities_command_injection(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/command_injection.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - def test_find_vulnerabilities_inter_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) @@ -200,7 +177,7 @@ def test_XSS_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS.py @@ -241,21 +218,35 @@ def test_path_traversal_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') + File: example/vulnerable_code/path_traversal.py + > User input at line 15, trigger word "get(": + ¤call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/path_traversal.py + > Line 15: image_name = ¤call_1 + File: example/vulnerable_code/path_traversal.py + > Line 10: save_3_image_name = image_name + File: example/vulnerable_code/path_traversal.py + > Line 10: image_name = save_3_image_name + File: example/vulnerable_code/path_traversal.py + > Line 19: temp_2_other_arg = image_name + File: example/vulnerable_code/path_traversal.py + > Line 6: other_arg = temp_2_other_arg + File: example/vulnerable_code/path_traversal.py + > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg + File: example/vulnerable_code/path_traversal.py + > Line 8: ret_outer = outer_ret_val + File: example/vulnerable_code/path_traversal.py + > Line 19: ¤call_2 = ret_outer + File: example/vulnerable_code/path_traversal.py + > Line 19: foo = ¤call_2 + File: example/vulnerable_code/path_traversal.py + > Line 6: save_2_image_name = image_name + File: example/vulnerable_code/path_traversal.py + > Line 6: image_name = save_2_image_name + File: example/vulnerable_code/path_traversal.py + > reaches line 20, trigger word "send_file(": + ¤call_4 = ret_send_file(foo) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -265,21 +256,22 @@ def test_path_traversal_sanitised_result(self): self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": - ¤call_1 = ret_request.args.get('param', 'not set') + File: example/vulnerable_code/path_traversal_sanitised.py + > User input at line 8, trigger word "get(": + ¤call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + File: example/vulnerable_code/path_traversal_sanitised.py + > Line 8: image_name = ¤call_1 + File: example/vulnerable_code/path_traversal_sanitised.py + > Line 10: image_name = ¤call_2 + File: example/vulnerable_code/path_traversal_sanitised.py + > Line 12: ¤call_4 = ret_os.path.join(¤call_5, image_name) + File: example/vulnerable_code/path_traversal_sanitised.py + > Line 12: ret_cat_picture = ¤call_3 + File: example/vulnerable_code/path_traversal_sanitised.py + > reaches line 12, trigger word "send_file(": + ¤call_3 = ret_send_file(¤call_4) + This vulnerability is potentially sanitised by: ["'..'", "'..' in"] """ logger.debug("huh, vulnerability_description is %s", vulnerability_description) @@ -291,7 +283,7 @@ def test_sql_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/sql/sqli.py - > User input at line 26, trigger word "get(": + > User input at line 26, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/sql/sqli.py @@ -361,7 +353,7 @@ def test_XSS_reassign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_reassign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_reassign.py @@ -387,7 +379,7 @@ def test_XSS_sanitised_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_sanitised.py - > User input at line 7, trigger word "get(": + > User input at line 7, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_sanitised.py @@ -420,7 +412,7 @@ def test_XSS_variable_assign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_assign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_assign.py @@ -446,7 +438,7 @@ def test_XSS_variable_multiple_assign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_multiple_assign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_multiple_assign.py From a6441a36f4d69403e365bbf57c2c30dea3886384 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 5 Nov 2017 12:08:58 -0800 Subject: [PATCH 156/541] So test_multiple_blackbox_calls_in_user_defined_call_after_if passes and I didn't change anything after I wrote the test :) --- ...ox_calls_in_user_defined_call_after_if.py} | 0 ...defined_calls_in_blackbox_call_after_if.py | 16 ++++ pyt/interprocedural_cfg.py | 8 +- tests/cfg_test.py | 93 ++++++++++++++++--- 4 files changed, 101 insertions(+), 16 deletions(-) rename example/vulnerable_code/{multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py => multiple_blackbox_calls_in_user_defined_call_after_if.py} (100%) create mode 100644 example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py diff --git a/example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py b/example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py similarity index 100% rename from example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py rename to example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py diff --git a/example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py b/example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py new file mode 100644 index 00000000..bb6b2614 --- /dev/null +++ b/example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py @@ -0,0 +1,16 @@ +import scrypt + + +def first_inner(first_arg): + first_ret_val = first_arg + '1st' + return first_ret_val + +def third_inner(second_arg): + third_ret_val = second_arg + '2nd' + return third_ret_val + +image_name = request.args.get('image_name') +if not image_name: + image_name = 'foo' +foo = scrypt.outer(first_inner(image_name), scrypt.second_inner(image_name), third_inner(image_name)) # Any call after ControlFlowNode caused the problem +send_file(foo) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 7964f6bf..71952c59 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -385,21 +385,21 @@ def save_def_args_in_temp(self, if not first_node: first_node = restore_node - # Ugly to have 2 if's for this, but necessary to ensure first_node has a value, otherwise we would need 2 `if not first_node`s if isinstance(call_arg, ast.Call): if last_return_value_of_nested_call: # connect inner to other_inner in e.g. `outer(inner(image_name), other_inner(image_name))` - logger.debug("[NEW] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call.first_node) if isinstance(return_value_of_nested_call, BBorBInode): + logger.debug("[NEW1] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call) last_return_value_of_nested_call.connect(return_value_of_nested_call) else: + logger.debug("[NEW2] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call.first_node) last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) else: # I should only set this once per loop, inner in e.g. `outer(inner(image_name), other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) - logger.debug("[NEW] setting inner_most_call of %s to %s", first_node, return_value_of_nested_call) + logger.debug("[NEW3] setting inner_most_call of %s to %s", first_node, return_value_of_nested_call) if isinstance(return_value_of_nested_call, BBorBInode): first_node.inner_most_call = return_value_of_nested_call else: @@ -423,7 +423,7 @@ def save_def_args_in_temp(self, # After loop if last_return_value_of_nested_call: # connect other_inner to outer in e.g. `outer(inner(image_name), other_inner(image_name))` - logger.debug("[NEW] connecting %s to %s", last_return_value_of_nested_call, first_node) + logger.debug("[NEW4] connecting %s to first_node %s", last_return_value_of_nested_call, first_node) # first_node or last or something else? # raise diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 4779c736..d2d3ae82 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -964,14 +964,14 @@ def test_multiple_nested_blackbox_calls_after_for(self): (_exit, ret_send_file) ]) - def test_multiple_nested_mixed_blackbox_and_user_defined_calls_after_if(self): - path = 'example/vulnerable_code/multiple_nested_mixed_blackbox_and_user_defined_calls_after_if.py' + def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): + path = 'example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py' self.cfg_create_from_file(path) for i, n in enumerate(self.cfg.nodes): logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=17) + self.assert_length(self.cfg.nodes, expected_length=32) entry = 0 ret_request = 1 @@ -979,22 +979,91 @@ def test_multiple_nested_mixed_blackbox_and_user_defined_calls_after_if(self): _if = 3 image_name_equals_foo = 4 # Function call starts here + save_2_image_name = 5 - # ... - ret_send_file = 49 - _exit = 50 - + ret_scrypt_first = 6 + temp_2_first_arg = 7 + save_4_image_name = 8 + temp_4_inner_arg = 9 + inner_arg_equals_temp_4 = 10 + function_entry_second_inner = 11 + inner_ret_val_equals_inner_arg_2nd = 12 + ret_second_inner = 13 + function_exit_second_inner = 14 + + image_name_equals_save_4 = 15 + call_4_equals_ret_second_inner = 16 + temp_2_second_arg = 17 + + ret_scrypt_third = 18 + temp_2_third_arg_equals_call_5 = 19 + first_arg_equals_temp = 20 + second_arg_equals_temp = 21 + third_arg_equals_temp = 22 + function_entry_outer = 23 + outer_ret_val = 24 + ret_outer = 25 + exit_outer = 26 + image_name_equals_save_2 = 27 + call_2_equals_ret_outer = 28 + foo_equals_call_2 = 29 + ret_send_file = 30 + _exit = 31 self.assertInCfg([(ret_request, entry), + (save_2_image_name, ret_scrypt_third), # Makes sense + (ret_scrypt_first, _if), # Makes sense + (ret_scrypt_first, image_name_equals_foo), # Makes sense + (save_4_image_name, ret_scrypt_first), # Makes sense + (ret_scrypt_third, call_4_equals_ret_second_inner), # Makes sense (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), (image_name_equals_foo, _if), - (B, _if), - (B, image_name_equals_foo), - (A, B), - (ret_send_file, A), + (save_2_image_name, image_name_equals_foo), + (ret_scrypt_first, save_2_image_name), + (temp_2_first_arg, ret_scrypt_first), + (save_4_image_name, temp_2_first_arg), + (temp_4_inner_arg, save_4_image_name), + (inner_arg_equals_temp_4, temp_4_inner_arg), + (function_entry_second_inner, inner_arg_equals_temp_4), + (inner_ret_val_equals_inner_arg_2nd, function_entry_second_inner), + (ret_second_inner, inner_ret_val_equals_inner_arg_2nd), + (function_exit_second_inner, ret_second_inner), + (image_name_equals_save_4, function_exit_second_inner), + (call_4_equals_ret_second_inner, image_name_equals_save_4), + (temp_2_second_arg, call_4_equals_ret_second_inner), + (ret_scrypt_third, temp_2_second_arg), + (temp_2_third_arg_equals_call_5, ret_scrypt_third), + (first_arg_equals_temp, temp_2_third_arg_equals_call_5), + (second_arg_equals_temp, first_arg_equals_temp), + (third_arg_equals_temp, second_arg_equals_temp), + (function_entry_outer, third_arg_equals_temp), + (outer_ret_val, function_entry_outer), + (ret_outer, outer_ret_val), + (exit_outer, ret_outer), + (image_name_equals_save_2, exit_outer), + (call_2_equals_ret_outer, image_name_equals_save_2), + (foo_equals_call_2, call_2_equals_ret_outer), + (ret_send_file, foo_equals_call_2), (_exit, ret_send_file) - ]) + ]) + + def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): + path = 'example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py' + self.cfg_create_from_file(path) + + for i, n in enumerate(self.cfg.nodes): + logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) + + self.assert_length(self.cfg.nodes, expected_length=32) + + entry = 0 + ret_request = 1 + image_name_equals_call_1 = 2 + _if = 3 + image_name_equals_foo = 4 + # Function call starts here + save_2_image_name = 5 def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' From 5fb6ebc69b77d0e96bf4b6354703a1b55fb24cce Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 5 Nov 2017 17:43:36 -0800 Subject: [PATCH 157/541] Last test passes, cleaned up logging --- pyt/base_cfg.py | 229 +++++---------------- pyt/interprocedural_cfg.py | 77 +------ tests/cfg_test.py | 122 ++++++----- tests/nested_functions_test.py | 40 ---- tests/reaching_definitions_taint_test.py | 5 - tests/vulnerabilities_across_files_test.py | 76 ++++--- tests/vulnerabilities_test.py | 7 - 7 files changed, 173 insertions(+), 383 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 86e4cc31..444dad0d 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -49,17 +49,6 @@ def connect(self, successor): not isinstance(successor, EntryOrExitNode): return - # Debug connects! - # first = 'Exit does_this_kill_us' - # second = 'call_5' - # if first in self.label or first in successor.label: - # logger.debug("self.label is %s", self.label) - # logger.debug("successor.label is %s", successor.label) - # # raise - # if second in successor.label or second in self.label: - # logger.debug("I am being connected to %s", successor) - # raise - self.outgoing.append(successor) successor.ingoing.append(self) @@ -310,30 +299,27 @@ def connect_control_flow_node(self, control_flow_node, next_node): last.connect(next_node.test) # connect to next if test case elif isinstance(next_node, AssignmentCallNode): call_node = next_node.call_node - logger.debug("SPOTI So call_node is %s", call_node) if isinstance(call_node, BBorBInode): # Loop to inner most function call # e.g. scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` - while call_node != call_node.inner_most_call: - call_node = call_node.inner_most_call - logger.debug("SPOTI So call_node is now %s", call_node) + old_call_node = None + while call_node != old_call_node: + old_call_node = call_node + if isinstance(call_node, BBorBInode): + call_node = call_node.inner_most_call + else: + try: + call_node = call_node.first_node.inner_most_call + except AttributeError: + try: + call_node = call_node.first_node + except AttributeError: + pass else: - # It is a user-defined call - # DO STUFF - # DO STUFF - logger.error("[NEW] call_node is %s", call_node) - logger.error("[NEW] call_node.first_node is %s", call_node.first_node) - logger.error("[NEW] type(call_node.first_node) is %s", type(call_node.first_node)) - logger.error("[NEW] dir(call_node.first_node) is %s", dir(call_node.first_node)) - logger.error("[NEW] call_node.first_node.inner_most_call is %s", call_node.first_node.inner_most_call) - logger.error("[NEW] type(call_node.first_node.inner_most_call) is %s", type(call_node.first_node.inner_most_call)) - logger.error("[NEW] dir(call_node.first_node.inner_most_call) is %s", dir(call_node.first_node.inner_most_call)) - # raise call_node = call_node.first_node try: while call_node != call_node.inner_most_call: call_node = call_node.inner_most_call - logger.debug("[NEW] call_node is now %s", call_node) except AttributeError: # No inner calls # Possible improvement: Make new node for RestoreNode's made in process_function and make `self.inner_most_call = self` @@ -345,19 +331,10 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): - logger.debug("DEATH") - logger.debug("n is %s", n) - logger.debug("next_node is %s", next_node) if isinstance(n, ControlFlowNode): # case for if self.connect_control_flow_node(n, next_node) elif isinstance(next_node, ControlFlowNode): # case for if n.connect(next_node[0]) - # elif isinstance(n, AssignmentCallNode): - # # Proceed as normal! - # raise - # elif isinstance(next_node, AssignmentCallNode): - # Proceed as normal! - # raise elif isinstance(next_node, RestoreNode): continue elif CALL_IDENTIFIER in next_node.label: @@ -384,28 +361,20 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): self.prev_nodes_to_avoid.append(prev_node_to_avoid) first_node = None - logger.debug("\n\n\n***********in stmt_star_handler self.nodes[-1] is %s***************\n\n\n\n\n", self.nodes[-1]) node_not_to_step_passed = self.nodes[-1] for stmt in stmts: - logger.debug("[kaytranada]stmt is %s", stmt) - node = self.visit(stmt) if isinstance(stmt, ast.While) or isinstance(stmt, ast.For): self.last_was_loop_stack.append(True) else: self.last_was_loop_stack.append(False) - logger.debug("[kaytranada]node is %s", node) - logger.debug("[kaytranada]type(node) is %s", type(node)) - if isinstance(node, ControlFlowNode): break_nodes.extend(node.break_statements) elif isinstance(node, BreakNode): break_nodes.append(node) - logger.debug("BEFORE so first_node is %s", first_node) - if node and not first_node: # (Make sure first_node isn't already set.) # first_node is always a "node_to_connect", because it won't have ingoing otherwise # If we have e.g. @@ -419,17 +388,12 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): # e.g. We don't want to step passed the Except of an Except BB if current_node.ingoing[0] == node_not_to_step_passed: break - logger.debug("CURRENT_NODE is %s", current_node) - logger.debug("current_node.ingoing is %s", current_node.ingoing) - logger.debug("current_node.ingoing[0] is %s", current_node.ingoing[0]) - logger.debug("current_node.ingoing[0].ingoing is %s", current_node.ingoing[0].ingoing) - ingoing = current_node.ingoing current_node = current_node.ingoing[0] if ingoing: # Only set it once first_node = ingoing[0] - logger.debug("here in my, node is %s", node) + if self.node_to_connect(node) and node: if not first_node: if isinstance(node, ControlFlowNode): @@ -440,20 +404,8 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): if prev_node_to_avoid: self.prev_nodes_to_avoid.pop() self.last_was_loop_stack.pop() - logger.debug("Woah so first_node is %s", first_node) - try: - logger.debug("Woah so first_node.incoming is %s", first_node.incoming) - except Exception: - pass - # logger.debug("A1A Beachfront Ave BEFORE cfg_statements[-1] are %s", cfg_statements[-1]) - # logger.debug("Hmm so type(cfg_statements) is %s", type(cfg_statements)) - for i,s in enumerate(cfg_statements): - logger.debug("BEFORE SO MARG statement #%s is %s", i, s) self.connect_nodes(cfg_statements) - for i,s in enumerate(cfg_statements): - logger.debug("AFTER SO MARG statement #%s is %s", i, s) - # logger.debug("A1A Beachfront Ave AFTER cfg_statements[-1] are %s", cfg_statements[-1]) if cfg_statements: if first_node: @@ -462,9 +414,11 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): first_statement = self.get_first_statement(cfg_statements[0]) last_statements = self.get_last_statements(cfg_statements) - logger.debug("Legal Pad] last_statements are %s", last_statements) - return ConnectStatements(first_statement=first_statement, last_statements=last_statements, break_statements=break_nodes) - else: # When body of module only contains ignored nodes + + return ConnectStatements(first_statement=first_statement, + last_statements=last_statements, + break_statements=break_nodes) + else: # When body of module only contains ignored nodes return IgnoredNode() def visit_Module(self, node): @@ -484,16 +438,13 @@ def handle_or_else(self, orelse, test): Returns: The last nodes of the orelse branch. """ - logger.debug("orelse is %s", orelse) if isinstance(orelse[0], ast.If): control_flow_node = self.visit(orelse[0]) self.add_elif_label(control_flow_node.test) test.connect(control_flow_node.test) return control_flow_node.last_nodes else: - logger.debug("Ahh shit, so self.nodes[-1] is %s", self.nodes[-1]) else_connect_statements = self.stmt_star_handler(orelse, prev_node_to_avoid=self.nodes[-1]) - logger.debug("hmm, connecting %s to %s", test, else_connect_statements.first_statement) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -518,18 +469,15 @@ def visit_If(self, node): orelse_last_nodes = self.handle_or_else(node.orelse, test) body_connect_stmts.last_statements.extend(orelse_last_nodes) else: - logger.debug("SO CONFUSED LETS SEE, So we are adding test %s to ", test) body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node last_statements = self.remove_breaks(body_connect_stmts.last_statements) - logger.debug("SO CONFUSED so last_statements is %s", last_statements) return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) def visit_NameConstant(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - logger.debug("[oslo] label_visitor.result is %s", label_visitor.result) return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) def visit_Raise(self, node): @@ -540,7 +488,6 @@ def visit_Raise(self, node): def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): try: - logger.debug("[Tuesday] so fallback_cfg_node %s is being connected to %s", fallback_cfg_node, body.first_statement) fallback_cfg_node.connect(body.first_statement) except AttributeError: body = ConnectStatements([fallback_cfg_node], [fallback_cfg_node], list()) @@ -559,20 +506,14 @@ def visit_Try(self, node): name = '' handler_node = self.append_node(Node('except ' + name + ':', handler, line_number=handler.lineno, path=self.filenames[-1])) for body_node in body.last_statements: - logger.debug("[Tuesday]connecting %s with %s", body_node, handler_node) body_node.connect(handler_node) handler_body = self.stmt_star_handler(handler.body) - logger.debug("[sad panda] handler_node is %s", handler_node) - logger.debug("[sad panda] handler_body.first_statement is %s", handler_body.first_statement) handler_body = self.handle_stmt_star_ignore_node(handler_body, handler_node) last_statements.extend(handler_body.last_statements) - logger.debug("[Tuesday] BEFORE try_node is %s", try_node) if node.orelse: - logger.debug("body.last_statements[-1] is %s", body.last_statements[-1]) orelse_last_nodes = self.handle_or_else(node.orelse, body.last_statements[-1]) body.last_statements.extend(orelse_last_nodes) - logger.debug("[Tuesday] AFTER try_node is %s", try_node) if node.finalbody: finalbody = self.stmt_star_handler(node.finalbody) @@ -687,47 +628,39 @@ def assignment_call_node(self, left_hand_label, ast_node): self.undecided = True # Used for handling functions in assignments call = self.visit(ast_node.value) - logger.debug("[NYSEC] call is %s", call) - logger.debug("[NYSEC] type(call) is %s", type(call)) call_label = '' call_assignment = None # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) - logger.debug("[empa] vars_visitor.result is %s", vars_visitor.result) - # TODO eliminate else and code duplication + call_label = call.left_hand_side if isinstance(call, BBorBInode): - logger.debug("[sf]call is an BBorBInode!") - call_label = call.left_hand_side - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], vv_result=vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) - call.connect(call_assignment) - elif isinstance(call, AssignmentNode): # assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer - # raise - logger.debug("[sf]call is an AssignmentNode!") - call_label = call.left_hand_side - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], vv_result=None, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) - call.connect(call_assignment) - else: # assignment to builtin - # Consider using call.left_hand_side instead of call.label - # logger.debug("call.left_hand_side is %s", call.left_hand_side) - raise - # call_label = call.left_hand_side - - call_label = call.label - rhs_visitor = RHSVisitor() - rhs_visitor.visit(ast_node.value) - - - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, rhs_visitor.result, vv_result=vars_visitor.result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, + left_hand_label, + ast_node, + [call.left_hand_side], + vv_result=vars_visitor.result, + line_number=ast_node.lineno, + path=self.filenames[-1], + call_node=call) + # assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer + elif isinstance(call, AssignmentNode): + call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, + left_hand_label, + ast_node, + [call.left_hand_side], + vv_result=None, + line_number=ast_node.lineno, + path=self.filenames[-1], call_node=call) + call.connect(call_assignment) if call in self.blackbox_calls: self.blackbox_assignments.add(call_assignment) call_assignment.blackbox = True self.nodes.append(call_assignment) - self.undecided = False return call_assignment @@ -761,7 +694,6 @@ def loop_node_skeleton(self, test, node): else: last_nodes.append(test) # if there is no orelse, test needs an edge to the next_node - logger.debug("[broke] last_nodes are %s", last_nodes) return ControlFlowNode(test, last_nodes, list()) def add_while_label(self, node): @@ -812,10 +744,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): node() blackbox(bool): Whether or not it is a builtin or blackbox call. Returns: - FILL ME IN + TODO FILL ME IN """ - - logger.debug("[qq] ENTER self.blackbox_calls is %s", self.blackbox_calls) # Increment function_call_index self.function_call_index += 1 saved_function_call_index = self.function_call_index @@ -824,149 +754,84 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): label = LabelVisitor() label.visit(node) - logger.debug("[PR] the label.result is %s", label.result) index = label.result.find('(') if index == -1: - logger.warning("No ( in a call") + print("No ( in a call") raise - else: - logger.debug("[3rd rail] the call is %s", label.result[:index]) - logger.debug("[3rd rail] the args are %s", label.result[index:]) - logger.debug("[3rd rail] len(node.args) is %s", len(node.args)) - logger.debug("[3rd rail] len(node.keywords) is %s", len(node.keywords)) - try: - logger.debug("[3rd rail] len(node.starargs) is %s", len(node.starargs)) - except AttributeError: - pass - try: - logger.debug("[3rd rail] len(node.keywords) is %s", len(node.keywords)) - except AttributeError: - pass # Create e.g. ¤call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + label.result[:index] + '(' - logger.debug("[Dominique bistro] RHS is %s", RHS) + call_node = BBorBInode("", LHS, [], line_number=node.lineno, path=self.filenames[-1]) - - # visited_args = [] visual_args = [] rhs_vars = [] last_return_value_of_nested_call = None for arg in itertools.chain(node.args, node.keywords): if isinstance(arg, ast.Call): - # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) return_value_of_nested_call = self.visit(arg) - # logger.debug("[Dominique bistro] function_return_stack[-1] is %s", self.function_return_stack[-1]) - logger.debug("[OSLO WAS SO GOOD] return_value_of_nested_call is %s", return_value_of_nested_call) - logger.debug("[OSLO WAS SO GOOD] self.nodes is %s", self.nodes) - # for n in self.nodes: - # if n == return_value_of_nested_call: - # raise - logger.debug("BNBN So self.nodes[-1] is %s", self.nodes[-1]) - logger.debug("BNBN About to append %s", return_value_of_nested_call) if last_return_value_of_nested_call: # connect inner to other_inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` - last_return_value_of_nested_call.connect(return_value_of_nested_call) + # I should probably loop to the inner most call of other_inner here. + try: + last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) + except AttributeError: + last_return_value_of_nested_call.connect(return_value_of_nested_call) else: # I should only set this once per loop, inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) call_node.inner_most_call = return_value_of_nested_call last_return_value_of_nested_call = return_value_of_nested_call - # visited_args.append(return_value_of_nested_call) - - logger.debug("[3rd rail] should we add %s to visual_args?", return_value_of_nested_call.left_hand_side) visual_args.append(return_value_of_nested_call.left_hand_side) rhs_vars.append(return_value_of_nested_call.left_hand_side) else: label = LabelVisitor() label.visit(arg) - logger.debug("arg is %s, and label.result is %s", arg, label.result) visual_args.append(label.result) - # visited_args.append(arg) - from .vars_visitor import VarsVisitor vv = VarsVisitor() vv.visit(arg) - logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) - logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) rhs_vars.extend(vv.result) - logger.debug("[Voyager] arg is %s", arg) if last_return_value_of_nested_call: # connect other_inner to outer in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` last_return_value_of_nested_call.connect(call_node) - ##### - - logger.debug("[3rd rail] visual_args is %s", visual_args) - # logger.debug("[3rd rail] visited_args is %s", visited_args) - logger.debug("[VINEAPPLE] label.result is %s", label.result) if len(visual_args) > 0: for arg in visual_args: RHS = RHS + arg + ", " - logger.debug("[3rd rail] RHS[:len(RHS)-2] is %s", RHS[:len(RHS)-2]) # Replace the last ", " with a ) RHS = RHS[:len(RHS)-2] + ')' else: RHS = RHS + ')' - logger.debug("[Dominique bistro] RHS is now %s", RHS) call_node.label = LHS + " = " + RHS - # get_rhs = [] - # for arg in visited_args: - # try: - # logger.debug("[BLUESTONE sucks] type(arg.right_hand_side_variables) is %s", arg.right_hand_side_variables) - # get_rhs.extend(arg.right_hand_side_variables) - # except AttributeError: - # from .vars_visitor import VarsVisitor - # vv = VarsVisitor() - # vv.visit(arg) - # logger.debug("[BLUESTONE sucks] type(arg) is %s", type(arg)) - # logger.debug("[BLUESTONE sucks] vv.result is %s", vv.result) - # get_rhs.extend(vv.result) - # logger.debug("[qq] get_rhs is %s", get_rhs) + # Should strings be excluded from visual_args? It isn't like they'll ever be on an LHS - logger.debug("[qq] visual_args is %s", visual_args) - logger.debug("[qq] rhs_vars is %s", rhs_vars) # This is where we'll ask the user, then save the mapping or just use the pre-made mapping. # Or perhaps we'll do that in vulnerabilities.py call_node.right_hand_side_variables = rhs_vars # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? - # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? - # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? - # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? call_node.args = rhs_vars # What is assigned to ret_func_foo in the builtin/blackbox case? - # What is assigned to ret_func_foo in the builtin/blackbox case? - # What is assigned to ret_func_foo in the builtin/blackbox case? if blackbox: - logger.debug("[qq] call_node being added to blackbox_calls is %s", call_node) # This makes so much sense! self.blackbox_assignments.add(call_node) - # IMPORTANT - logger.debug("[Integral] connecting %s", self.nodes[-1]) - logger.debug("[Integral] to call_node %s", call_node) - logger.debug("ON&ON self.nodes[-1] IS %s", self.nodes[-1]) - logger.debug("ON&ON call_node IS %s", call_node) self.connect_if_allowed(self.nodes[-1], call_node) self.nodes.append(call_node) - # IMPORTANT - logger.debug("[Dominique bistro] call_node is %s", call_node) # WHY DO WE DO THIS? # WHEN DO WE ACTUALLY PUSH? # self.function_return_stack.pop() - logger.debug("[qq] EXIT self.blackbox_calls is %s", self.blackbox_calls) return call_node diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 71952c59..c7c3db43 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -250,21 +250,9 @@ def save_local_scope(self, line_number, saved_function_call_index): saved_variables_so_far = set() first_node = None - logger.debug("self.nodes are %s", self.nodes) - for n in self.nodes: - try: - if n.left_hand_side == 'b': - logger.debug("n is %s",n) - logger.debug("type(n) is %s",type(n)) - # raise - except AttributeError: - pass # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes if type(node) == AssignmentNode or type(node) == AssignmentCallNode or type(Node) == BBorBInode]: # type() is used on purpose here - logger.debug("So one assignment is %s", assignment) - if isinstance(assignment, RestoreNode): - raise if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) @@ -333,33 +321,10 @@ def save_def_args_in_temp(self, args_mapping = dict() last_return_value_of_nested_call = None - logger.debug("call_args are %s", call_args) - for call_arg, def_arg in zip(call_args, def_args): - call_arg_label_visitor = LabelVisitor() - call_arg_label_visitor.visit(call_arg) - # def_arg_label_visitor = LabelVisitor() - # def_arg_label_visitor.visit(def_arg) - logger.debug("[nfs] call_arg is %s, def_arg is %s", call_arg_label_visitor.result, def_arg) - - logger.debug("def_args are %s", def_args) - logger.debug("call_args are %s", len(call_args)) - logger.debug("def_args are %s", len(def_args)) # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): - logger.debug("Bout to die!") - logger.debug("call_args are %s", call_args) - logger.debug("def_args are %s", def_args) - logger.debug("call_args are %s", len(call_args)) - logger.debug("def_args are %s", len(def_args)) - def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] - call_arg_label_visitor = LabelVisitor() - call_arg_label_visitor.visit(call_arg) - logger.debug("[nfs] call_arg_label_visitor.result is %s", call_arg_label_visitor.result) - call_arg_rhs_visitor = RHSVisitor() - call_arg_rhs_visitor.visit(call_arg) - return_value_of_nested_call = None if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) @@ -368,13 +333,16 @@ def save_def_args_in_temp(self, logger.debug("[San Francisco apartment] blackbox call INSIDE USER-DEFINED CALL, ouchie ouchie") raise else: - logger.debug("[nfs] return_value_of_nested_call.left_hand_side is %s", return_value_of_nested_call.left_hand_side) restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, def_arg_temp_name, return_value_of_nested_call.left_hand_side, line_number=line_number, path=self.filenames[-1]) else: + call_arg_label_visitor = LabelVisitor() + call_arg_label_visitor.visit(call_arg) + call_arg_rhs_visitor = RHSVisitor() + call_arg_rhs_visitor.visit(call_arg) restore_node = RestoreNode(def_arg_temp_name + ' = ' + call_arg_label_visitor.result, def_arg_temp_name, call_arg_rhs_visitor.result, @@ -390,45 +358,30 @@ def save_def_args_in_temp(self, # connect inner to other_inner in e.g. `outer(inner(image_name), other_inner(image_name))` if isinstance(return_value_of_nested_call, BBorBInode): - logger.debug("[NEW1] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call) last_return_value_of_nested_call.connect(return_value_of_nested_call) else: - logger.debug("[NEW2] connecting %s to %s", last_return_value_of_nested_call, return_value_of_nested_call.first_node) last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) else: # I should only set this once per loop, inner in e.g. `outer(inner(image_name), other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) - logger.debug("[NEW3] setting inner_most_call of %s to %s", first_node, return_value_of_nested_call) if isinstance(return_value_of_nested_call, BBorBInode): first_node.inner_most_call = return_value_of_nested_call else: first_node.inner_most_call = return_value_of_nested_call.first_node # We purposefully should not set this as the first_node of return_value_of_nested_call, last makes sense last_return_value_of_nested_call = return_value_of_nested_call - - self.connect_if_allowed(self.nodes[-1], restore_node) self.nodes.append(restore_node) - # So call_arg_label_visitor.result is what makes no fucking sense if isinstance(call_arg, ast.Call): - logger.debug("[nfs] So call_arg is a call, maybe this should be:") - logger.debug("[nfs] this %s = %s", return_value_of_nested_call.left_hand_side, def_args[i]) args_mapping[return_value_of_nested_call.left_hand_side] = def_args[i] else: - # logger.debug("[nfs] we are still doing this %s = %s", call_arg_label_visitor.result, def_args[i]) - # args_mapping[call_arg_label_visitor.result] = def_args[i] args_mapping[def_args[i]] = call_arg_label_visitor.result # After loop if last_return_value_of_nested_call: # connect other_inner to outer in e.g. `outer(inner(image_name), other_inner(image_name))` - logger.debug("[NEW4] connecting %s to first_node %s", last_return_value_of_nested_call, first_node) - - # first_node or last or something else? - # raise last_return_value_of_nested_call.connect(first_node) - pass return (args_mapping, first_node) @@ -477,8 +430,6 @@ def restore_saved_local_scope(self, """ restore_nodes = list() for var in saved_variables: - logger.debug("args_mapping is %s", args_mapping) - logger.debug("var.RHS is %s", var.RHS) # Is var.RHS a call argument? if var.RHS in args_mapping: # If so, use the corresponding definition argument for the RHS of the label. @@ -487,8 +438,6 @@ def restore_saved_local_scope(self, [var.LHS], line_number=line_number, path=self.filenames[-1])) - logger.debug("args_mapping is %s", args_mapping) - logger.debug("This makes no sense, just made %s = %s node", var.RHS, args_mapping[var.RHS]) else: # Create a node for e.g. foo = save_1_foo restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, @@ -497,7 +446,6 @@ def restore_saved_local_scope(self, line_number=line_number, path=self.filenames[-1])) - # logger.debug("BEFORE restore_nodes are %s", restore_nodes) # Chain the restore nodes for node, successor in zip(restore_nodes, restore_nodes[1:]): node.connect(successor) @@ -506,7 +454,6 @@ def restore_saved_local_scope(self, # Connect the last node to the first restore node self.nodes[-1].connect(restore_nodes[0]) self.nodes.extend(restore_nodes) - # logger.debug("AFTER restore_nodes are %s", restore_nodes) return restore_nodes @@ -530,9 +477,6 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index, f [RHS], line_number=call_node.lineno, path=self.filenames[-1]) - logger.debug("Florence, self.nodes[-1] is %s", self.nodes[-1]) - logger.debug("Florence, return_node is %s", return_node) - # Important and new code vv return_node.first_node = first_node self.nodes[-1].connect(return_node) @@ -562,7 +506,6 @@ def process_function(self, call_node, definition): Returns: Last node in self.nodes, probably the return of the function appended to self.nodes in return_handler. """ - # try: self.function_call_index += 1 saved_function_call_index = self.function_call_index @@ -570,11 +513,7 @@ def process_function(self, call_node, definition): saved_variables, first_node = self.save_local_scope(def_node.lineno, saved_function_call_index) - logger.debug("BEFORE saved_variables are %s", saved_variables) - # Check to make sure there is no bug in the input code (for when I don't feel like running the test case with CPython) - assert len(call_node.args) == len(Arguments(def_node.args)) - args_mapping, first_node = self.save_def_args_in_temp(call_node.args, Arguments(def_node.args), call_node.lineno, @@ -592,14 +531,8 @@ def process_function(self, call_node, definition): function_nodes, saved_function_call_index, first_node) - logger.debug("AFTER saved_variables are %s", saved_variables) self.function_return_stack.pop() - # except IndexError: - # error_call = get_call_names_as_string(call_node.func) - # print('Error: Possible nameclash in "{}".' + - # ' Call omitted!\n'.format(error_call)) - logger.debug('[Legal pad] returning %s', self.nodes[-1]) return self.nodes[-1] def visit_and_get_function_nodes(self, definition, first_node): @@ -622,11 +555,9 @@ def visit_and_get_function_nodes(self, definition, first_node): self.connect_if_allowed(previous_node, entry_node) function_body_connect_statements = self.stmt_star_handler(definition.node.body) - logger.debug("holy crap, function_body_connect_statements.first_statement is %s", function_body_connect_statements.first_statement) entry_node.connect(function_body_connect_statements.first_statement) exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) - logger.debug("No light] function_body_connect_statements.last_statements are %s", function_body_connect_statements.last_statements) exit_node.connect_predecessors(function_body_connect_statements.last_statements) the_new_nodes = self.nodes[len_before_visiting_func:] diff --git a/tests/cfg_test.py b/tests/cfg_test.py index d2d3ae82..cc1a249a 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -143,7 +143,6 @@ def test_for_line_numbers(self): def test_for_func_iterator(self): self.cfg_create_from_file('example/example_inputs/for_func_iterator.py') - logger.debug("self.cfg.nodes are %s", self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 @@ -196,11 +195,6 @@ def test_orelse(self): self.cfg_create_from_file('example/example_inputs/try_orelse.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - - # logger.debug("self.cfg.nodes are %s", self.cfg.nodes) - for i,n in enumerate(self.cfg.nodes): - logger.debug("%s n.label is %s", i, n.label) - self.assert_length(self.cfg.nodes, expected_length=20) entry = 0 @@ -669,9 +663,6 @@ def test_simple_function(self): path = 'example/example_inputs/simple_function.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("#%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 @@ -682,7 +673,7 @@ def test_simple_function(self): body_foo = 5 exit_foo = 6 y_load = 7 - exit_ = 8 + _exit = 8 self.assertInCfg([self.connected(entry, input_call), self.connected(input_call, y_assignment), @@ -691,7 +682,7 @@ def test_simple_function(self): self.connected(entry_foo, body_foo), self.connected(body_foo, exit_foo), self.connected(exit_foo, y_load), - self.connected(y_load, exit_)]) + self.connected(y_load, _exit)]) def test_function_line_numbers(self): path = 'example/example_inputs/simple_function.py' @@ -732,7 +723,7 @@ def test_function_parameters(self): bar_print_x = 10 exit_bar = 11 restore_actual_y = 12 - exit_ = 13 + _exit = 13 self.assertInCfg([self.connected(entry, input_call), self.connected(input_call, y_assignment), @@ -746,7 +737,7 @@ def test_function_parameters(self): self.connected(bar_print_y, bar_print_x), self.connected(bar_print_x, exit_bar), self.connected(exit_bar, restore_actual_y), - self.connected(restore_actual_y, exit_)]) + self.connected(restore_actual_y, _exit)]) def test_function_with_return(self): path = 'example/example_inputs/simple_function_with_return.py' @@ -787,9 +778,6 @@ def test_blackbox_call_after_if(self): path = 'example/vulnerable_code/blackbox_call_after_if.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=9) entry = 0 @@ -802,8 +790,6 @@ def test_blackbox_call_after_if(self): ret_send_file = 7 _exit = 8 - logger.debug("[Four barrel] blackbox_call type is %s", type(self.cfg.nodes[blackbox_call])) - self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), @@ -819,14 +805,8 @@ def test_multiple_nested_user_defined_calls_after_if(self): path = 'example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=39) -#24 is Label: image_name = inner_arg -#25 is Label: inner_ret_val = save_4_inner_ret_val - entry = 0 ret_request = 1 image_name_equals_call_1 = 2 @@ -872,11 +852,6 @@ def test_multiple_nested_user_defined_calls_after_if(self): ret_send_file = 37 _exit = 38 - logger.debug("[Four barrel] save_2_image_name type is %s", type(self.cfg.nodes[save_2_image_name])) - logger.debug("[Four barrel] image_name_restore type is %s", type(self.cfg.nodes[image_name_restore])) - logger.debug("[Four barrel] call_2_equals_ret_outer is %s", self.cfg.nodes[call_2_equals_ret_outer]) - logger.debug("[Four barrel] call_2_equals_ret_outer type is %s", type(self.cfg.nodes[call_2_equals_ret_outer])) - self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), @@ -929,9 +904,6 @@ def test_multiple_nested_blackbox_calls_after_for(self): path = 'example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=11) entry = 0 @@ -946,11 +918,6 @@ def test_multiple_nested_blackbox_calls_after_for(self): ret_send_file = 9 _exit = 10 - logger.debug("[Four barrel] inner_blackbox_call is %s", self.cfg.nodes[inner_blackbox_call]) - logger.debug("[Four barrel] second_inner_blackbox_call is %s", self.cfg.nodes[second_inner_blackbox_call]) - logger.debug("[Four barrel] inner_blackbox_call type is %s", type(self.cfg.nodes[inner_blackbox_call])) - logger.debug("[Four barrel] second_inner_blackbox_call type is %s", type(self.cfg.nodes[second_inner_blackbox_call])) - self.assertInCfg([(ret_request, entry), (image_name_equals_call_1, ret_request), (_for, image_name_equals_call_1), @@ -968,9 +935,6 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): path = 'example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - self.assert_length(self.cfg.nodes, expected_length=32) entry = 0 @@ -1010,12 +974,12 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): ret_send_file = 30 _exit = 31 - self.assertInCfg([(ret_request, entry), - (save_2_image_name, ret_scrypt_third), # Makes sense - (ret_scrypt_first, _if), # Makes sense - (ret_scrypt_first, image_name_equals_foo), # Makes sense - (save_4_image_name, ret_scrypt_first), # Makes sense - (ret_scrypt_third, call_4_equals_ret_second_inner), # Makes sense + self.assertInCfg([(save_2_image_name, ret_scrypt_third), # Makes sense + (ret_scrypt_first, _if), # Makes sense + (ret_scrypt_first, image_name_equals_foo), # Makes sense + (save_4_image_name, ret_scrypt_first), # Makes sense + (ret_scrypt_third, call_4_equals_ret_second_inner), # Makes sense + (ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), (image_name_equals_foo, _if), @@ -1048,14 +1012,14 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): (_exit, ret_send_file) ]) + + + def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): path = 'example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py' self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - - self.assert_length(self.cfg.nodes, expected_length=32) + self.assert_length(self.cfg.nodes, expected_length=30) entry = 0 ret_request = 1 @@ -1063,7 +1027,63 @@ def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): _if = 3 image_name_equals_foo = 4 # Function call starts here - save_2_image_name = 5 + save_3_image_name = 5 + temp_3_first_arg = 6 + first_arg_equals_temp = 7 + function_entry_first_inner = 8 + first_ret_val_equals_first = 9 + ret_first_inner = 10 + function_exit_first_inner = 11 + image_name_equals_save_4 = 12 + call_3_equals_ret_first_inner = 13 + call_4_equals_ret_second_inner = 14 + save_5_image_name = 15 + save_5_first_ret_val = 16 + temp_5_second_arg = 17 + second_arg_equals_temp = 18 + function_entry_third_inner = 19 + third_ret_val = 20 + ret_third_inner = 21 + exit_third_inner = 22 + image_name_equals_save_5 = 23 + first_ret_val_equals_save_5 = 24 + call_5_equals_ret_third_inner = 25 + call_2_equals_ret_outer = 26 + foo_equals_call_2 = 27 + ret_send_file = 28 + _exit = 29 + + self.assertInCfg([(save_3_image_name, _if), # Makes sense + (ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (save_3_image_name, image_name_equals_foo), + (temp_3_first_arg, save_3_image_name), + (first_arg_equals_temp, temp_3_first_arg), + (function_entry_first_inner, first_arg_equals_temp), + (first_ret_val_equals_first, function_entry_first_inner), + (ret_first_inner, first_ret_val_equals_first), + (function_exit_first_inner, ret_first_inner), + (image_name_equals_save_4, function_exit_first_inner), + (call_3_equals_ret_first_inner, image_name_equals_save_4), + (call_4_equals_ret_second_inner, call_3_equals_ret_first_inner), + (save_5_image_name, call_4_equals_ret_second_inner), + (save_5_first_ret_val, save_5_image_name), + (temp_5_second_arg, save_5_first_ret_val), + (second_arg_equals_temp, temp_5_second_arg), + (function_entry_third_inner, second_arg_equals_temp), + (third_ret_val, function_entry_third_inner), + (ret_third_inner, third_ret_val), + (exit_third_inner, ret_third_inner), + (image_name_equals_save_5, exit_third_inner), + (first_ret_val_equals_save_5, image_name_equals_save_5), + (call_5_equals_ret_third_inner, first_ret_val_equals_save_5), + (call_2_equals_ret_outer, call_5_equals_ret_third_inner), + (foo_equals_call_2, call_2_equals_ret_outer), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index c1d7ed46..ea708e2e 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -39,45 +39,5 @@ def test_nested_user_defined_function_calls(self): "abc = ¤call_1", "Exit module"] - logger.debug("Nodes are:") - for node in self.cfg.nodes: - logger.debug("%s", node.label) - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) - - def test_builtin_with_user_defined_inner(self): - - path = os.path.normpath('example/nested_functions_code/builtin_with_user_defined_inner.py') - - project_modules = get_modules_and_packages(os.path.dirname(path)) - local_modules = get_directory_modules(os.path.dirname(path)) - - self.cfg_create_from_file(path, project_modules, local_modules) - - EXPECTED = ["TODO"] - - logger.debug("Nodes are:") - for node in self.cfg.nodes: - logger.debug("%s", node.label) - - # for node, expected_label in zip(self.cfg.nodes, EXPECTED): - # self.assertEqual(node.label, expected_label) - - # def test_nested_string_interpolation(self): - - # path = os.path.normpath('example/nested_functions_code/nested_string_interpolation.py') - - # project_modules = get_modules_and_packages(os.path.dirname(path)) - # local_modules = get_directory_modules(os.path.dirname(path)) - - # self.cfg_create_from_file(path, project_modules, local_modules) - - # EXPECTED = ['Not Yet'] - - # logger.debug("Nodes are:") - # for node in self.cfg.nodes: - # logger.debug("%s", node) - - # for node, expected_label in zip(self.cfg.nodes, EXPECTED): - # self.assertEqual(node.label, expected_label) diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index 53e80707..39158e20 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -3,8 +3,6 @@ from .analysis_base_test_case import AnalysisBaseTestCase from pyt.constraint_table import constraint_table from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): @@ -24,7 +22,6 @@ def test_linear_program(self): i = 0 for k, v in constraint_table.items(): row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - logger.debug("row is %s", row) self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) i = i + 1 @@ -72,7 +69,6 @@ def test_example(self): i = 0 for k, v in constraint_table.items(): row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - logger.debug("EXAMPLErow is %s", row) self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) i = i + 1 @@ -110,7 +106,6 @@ def test_while(self): i = 0 for k, v in constraint_table.items(): row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - logger.debug("row is %s", row) self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) i = i + 1 diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index d0a1a57f..6a9ec1bf 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -12,8 +12,6 @@ from pyt.lattice import Lattice from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class EngineTest(BaseTestCase): @@ -56,7 +54,7 @@ def test_blackbox_library_call(self): File: example/vulnerable_code_across_files/blackbox_library_call.py > User input at line 12, trigger word "get(": ¤call_1 = ret_request.args.get('suggestion') - Reassigned in: + Reassigned in: File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 12: param = ¤call_1 File: example/vulnerable_code_across_files/blackbox_library_call.py @@ -66,7 +64,7 @@ def test_blackbox_library_call(self): File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 16: hey = command File: example/vulnerable_code_across_files/blackbox_library_call.py - > reaches line 17, trigger word "subprocess.call(": + > reaches line 17, trigger word "subprocess.call(": ¤call_3 = ret_subprocess.call(hey, shell=True) This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ @@ -75,15 +73,13 @@ def test_blackbox_library_call(self): def test_builtin_with_user_defined_inner(self): vulnerability_log = self.run_analysis('example/nested_functions_code/builtin_with_user_defined_inner.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) - logger.debug("vulnerability_description is %s", vulnerability_description) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/builtin_with_user_defined_inner.py > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: save_2_req_param = req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py @@ -111,14 +107,13 @@ def test_builtin_with_user_defined_inner(self): def test_sink_with_result_of_blackbox_nested(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_blackbox_nested.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > User input at line 12, trigger word "form[": + > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: ¤call_2 = ret_scrypt.encrypt(req_param) File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py @@ -126,22 +121,39 @@ def test_sink_with_result_of_blackbox_nested(self): File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: result = ¤call_1 File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, trigger word "subprocess.call(": ¤call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt(req_param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ¤call_2 = ret_scrypt.encrypt(req_param) + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ¤call_1 = ret_scrypt.encrypt(¤call_2) + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: result = ¤call_1 + File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + > reaches line 14, trigger word "subprocess.call(": + ¤call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_result_of_user_defined_nested(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > User input at line 16, trigger word "form[": + > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: save_1_req_param = req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -173,43 +185,57 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: result = ¤call_1 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, trigger word "subprocess.call(": ¤call_3 = ret_subprocess.call(result, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_blackbox_inner(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_blackbox_inner.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_blackbox_inner.py - > User input at line 12, trigger word "form[": + > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ¤call_3 = ret_scrypt.encypt(req_param) File: example/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ¤call_2 = ret_scrypt.encypt(¤call_3) File: example/nested_functions_code/sink_with_blackbox_inner.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, trigger word "subprocess.call(": ¤call_1 = ret_subprocess.call(¤call_2, shell=True) This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encypt(¤call_3) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/nested_functions_code/sink_with_blackbox_inner.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] + Reassigned in: + File: example/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ¤call_3 = ret_scrypt.encypt(req_param) + File: example/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ¤call_2 = ret_scrypt.encypt(¤call_3) + File: example/nested_functions_code/sink_with_blackbox_inner.py + > reaches line 14, trigger word "subprocess.call(": + ¤call_1 = ret_subprocess.call(¤call_2, shell=True) + This vulnerability is unknown due to: Label: ¤call_3 = ret_scrypt.encypt(req_param) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_user_defined_inner(self): vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') - logger.debug("vulnerability_log.vulnerabilities is %s", vulnerability_log.vulnerabilities) self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_user_defined_inner.py - > User input at line 16, trigger word "form[": + > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 6: save_2_req_param = req_param File: example/nested_functions_code/sink_with_user_defined_inner.py @@ -239,7 +265,7 @@ def test_sink_with_user_defined_inner(self): File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ¤call_2 = ret_outer File: example/nested_functions_code/sink_with_user_defined_inner.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, trigger word "subprocess.call(": ¤call_1 = ret_subprocess.call(¤call_2, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index af45d020..ccdd05c2 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -9,8 +9,6 @@ from pyt.framework_helper import is_flask_route_function from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class EngineTest(BaseTestCase): @@ -146,10 +144,6 @@ def test_is_sanitised_true(self): def run_analysis(self, path): self.cfg_create_from_file(path) - for i, n in enumerate(self.cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - # if len(self.cfg.nodes) != 6: - # raise cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) @@ -273,7 +267,6 @@ def test_path_traversal_sanitised_result(self): ¤call_3 = ret_send_file(¤call_4) This vulnerability is potentially sanitised by: ["'..'", "'..' in"] """ - logger.debug("huh, vulnerability_description is %s", vulnerability_description) self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From 90caff58a297dc0ca97a7fafaac2e5c986f3f83e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 5 Nov 2017 17:50:00 -0800 Subject: [PATCH 158/541] [clean up] --- pyt/reaching_definitions_taint.py | 3 --- pyt/vars_visitor.py | 14 ------------- pyt/vulnerabilities.py | 33 ------------------------------- 3 files changed, 50 deletions(-) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 21728c7e..34351239 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,8 +1,6 @@ from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): @@ -16,7 +14,6 @@ def fixpointmethod(self, cfg_node): # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if cfg_node.vv_result: - logger.debug("So cfg_node.vv_result is a thing, for cfg_node %s", cfg_node) if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index fd7cd89c..8e91b26d 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -1,8 +1,6 @@ import ast from .ast_helper import get_call_names -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class VarsVisitor(ast.NodeVisitor): @@ -89,34 +87,22 @@ def visit_Call(self, node): self.visit(node.func) if node.args: for arg in node.args: - logger.debug("[voyager] arg is %s", arg) if isinstance(arg, ast.Call): - logger.debug("[voyager] arg.func is %s", arg.func) if isinstance(arg.func, ast.Name): - logger.debug("[voyager] arg.func.id is %s", arg.func.id) # We can't just visit because we need to add 'ret_' self.result.append('ret_' + arg.func.id) elif isinstance(arg.func, ast.Attribute): - logger.debug("It is an attribute!") - logger.debug("[pb] arg.func.attr is %s", arg.func.attr) - logger.debug("[pb] type(arg.func.attr) is %s", type(arg.func.attr)) - logger.debug("[pb] arg.func is %s", arg.func) - logger.debug("[pb] type(arg.func) is %s", type(arg.func)) - logger.debug("[pb] arg.func.value is %s", arg.func.value) - logger.debug("[pb] type(arg.func.value) is %s", type(arg.func.value)) # e.g. html.replace('{{ param }}', param) # func.attr is replace # func.value.id is html # We want replace self.result.append('ret_' + arg.func.attr) else: - logger.debug("type(arg.func) is %s", type(arg.func)) raise else: self.visit(arg) if node.keywords: for keyword in node.keywords: - logger.debug("[voyager] keyword is %s", keyword) if isinstance(keyword, ast.Call): # FILL ME IN MORE self.result.append('ret_' + keyword.func.id) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index b8d937db..52748ee3 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -260,23 +260,9 @@ def get_sink_args(cfg_node): return cfg_node.right_hand_side_variables vv = VarsVisitor() - logger.debug("[VINEAPPLE] cfg_node is %s", cfg_node) - logger.debug("[VINEAPPLE] cfg_node.ast_node is %s", cfg_node.ast_node) - logger.debug("[VINEAPPLE] type(cfg_node.ast_node) is %s", type(cfg_node.ast_node)) other_results = list() if isinstance(cfg_node, BBorBInode): - # logger.debug("[VINEAPPLE] So visited args is %s", cfg_node.args) - # for arg in cfg_node.args: - # logger.debug("arg is %s", arg) - # logger.debug("type of arg is %s", type(arg)) - # if isinstance(arg, RestoreNode): - # other_results.append(arg.left_hand_side) - # else: - # vv.visit(arg) other_results = cfg_node.args - logger.debug("[VINEAPPLE] So vv.result is %s", vv.result) - logger.debug("[VINEAPPLE] So other_results is %s", other_results) - # raise else: vv.visit(cfg_node.ast_node) @@ -303,32 +289,18 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black secondary_in_sink = list() - for node in source.secondary_nodes: - logger.debug("YEE secondary node label is %s", node.label) - - logger.debug("[BEATX] sink is %s", sink) - logger.debug("[VOY] sink.cfg_node is %s", sink.cfg_node) if source.secondary_nodes: secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, sink.cfg_node)] - logger.debug("[VOY] secondary in sink list is %s", secondary_in_sink) trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) - logger.debug("[BEATX] sink_args is %s", sink_args) - for sarg in sink_args: - if 'ret_' in sarg: - logger.debug("special sarg is %s", sarg) - logger.debug("[Voyager] sink_args are %s", sink_args) secondary_node_in_sink_args = None if sink_args: - logger.debug("secondary in sink list is %s", secondary_in_sink) for node in secondary_in_sink: - logger.debug("secondary in sink is %s", node) - logger.debug("secondary in sink.LHS is %s", node.left_hand_side) if sink_args and node.left_hand_side in sink_args: secondary_node_in_sink_args = node @@ -343,7 +315,6 @@ def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, black node_in_the_vulnerability_chain = secondary trimmed_reassignment_nodes.insert(0, node_in_the_vulnerability_chain) - logger.debug("[voy] source.cfg_node.left_hand_side is %s", source.cfg_node.left_hand_side) source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ if sink_args else None @@ -417,10 +388,6 @@ def find_vulnerabilities(cfg_list, analysis_type, vulnerability_log = VulnerabilityLog() for cfg in cfg_list: - for i, n in enumerate(cfg.nodes): - logger.debug("WANTAGH STARBUCKS #%s is %s", i, n) - logger.debug("#%s ingoing is %s", i, n.ingoing) - logger.debug("#%s outgoing is %s", i, n.outgoing) find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), trim_reassigned_in) From dde78b059c2449af39c5d37e0fd746deef9ba082 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 13:04:47 -0800 Subject: [PATCH 159/541] Refactor call assignment stuff to CallAssignmentNode --- pyt/base_cfg.py | 89 ++++++++++++++++--------------- pyt/framework_adaptor.py | 10 ++-- pyt/interprocedural_cfg.py | 20 ++++--- pyt/reaching_definitions_taint.py | 10 ++-- pyt/vars_visitor.py | 1 + pyt/vulnerabilities.py | 11 ++-- 6 files changed, 80 insertions(+), 61 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 444dad0d..26fcb0cf 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -125,7 +125,7 @@ def __init__(self, label): class AssignmentNode(Node): """CFG Node that represents an assignment.""" - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, vv_result, *, line_number, path): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): """Create an Assignment node. Args: @@ -139,12 +139,6 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, v self.left_hand_side = left_hand_side self.right_hand_side_variables = right_hand_side_variables - # TODO: REFACTOR THESE INTO AssignmentCallNode! - # Only set in assignment_call_node() - self.vv_result = vv_result - # Only set True in assignment_call_node() - self.blackbox = False - def __repr__(self): output_string = super().__repr__() output_string += '\n' @@ -153,6 +147,10 @@ def __repr__(self): 'right_hand_side_variables:\t', str(self.right_hand_side_variables))) +class TaintedNode(AssignmentNode): + pass + + class RestoreNode(AssignmentNode): """Node used for handling restore nodes returning from function calls.""" @@ -165,7 +163,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) + super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) class BBorBInode(AssignmentNode): @@ -179,9 +177,9 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. - path? + path? TODO """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, None, line_number=line_number, path=path) + super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) self.args = [] self.inner_most_call = self @@ -197,11 +195,13 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, v left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. - path? - call_node? + path? TODO + call_node? TODO """ - super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, vv_result, line_number=line_number, path=path) + super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) self.call_node = call_node + self.vv_result = vv_result + self.blackbox = False class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" @@ -216,7 +216,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, * line_number(Optional[int]): The line of the expression the Node represents. path? """ - super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, None, line_number=line_number, path=path) + super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) class Function(): @@ -285,7 +285,7 @@ def get_first_statement(self, node_or_tuple): else: return node_or_tuple - def node_to_connect(self, node): + def should_connect_node(self, node): """Determine if node should be in the final CFG.""" if isinstance(node, (FunctionNode, IgnoredNode)): return False @@ -361,7 +361,7 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): self.prev_nodes_to_avoid.append(prev_node_to_avoid) first_node = None - node_not_to_step_passed = self.nodes[-1] + node_not_to_step_past = self.nodes[-1] for stmt in stmts: node = self.visit(stmt) @@ -385,8 +385,8 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): ingoing = None current_node = node while current_node.ingoing: - # e.g. We don't want to step passed the Except of an Except BB - if current_node.ingoing[0] == node_not_to_step_passed: + # e.g. We don't want to step past the Except of an Except BB + if current_node.ingoing[0] == node_not_to_step_past: break ingoing = current_node.ingoing current_node = current_node.ingoing[0] @@ -394,7 +394,7 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): # Only set it once first_node = ingoing[0] - if self.node_to_connect(node) and node: + if node and self.should_connect_node(node): if not first_node: if isinstance(node, ControlFlowNode): first_node = node.test @@ -570,7 +570,7 @@ def assign_tuple_target(self, node, right_hand_side_variables): label.result += ' = ' label.visit(value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, None, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) self.connect_nodes(new_assignment_nodes) @@ -585,7 +585,7 @@ def assign_multi_target(self, node, right_hand_side_variables): left_hand_side = label.result label.result += ' = ' label.visit(node.value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, None, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) self.connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node @@ -609,7 +609,7 @@ def visit_Assign(self, node): print('Assignment not properly handled.', 'Could result in not finding a vulnerability.', 'Assignment:', label.result) - return self.append_node(AssignmentNode(label.result, label.result, node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, label.result, node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) elif len(node.targets) > 1: # x = y = 3 return self.assign_multi_target(node, rhs_visitor.result) @@ -621,7 +621,7 @@ def visit_Assign(self, node): else: # x = 4 label = LabelVisitor() label.visit(node) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" @@ -645,15 +645,16 @@ def assignment_call_node(self, left_hand_label, ast_node): line_number=ast_node.lineno, path=self.filenames[-1], call_node=call) - # assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer + # Assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer elif isinstance(call, AssignmentNode): call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], - vv_result=None, + vv_result=[], line_number=ast_node.lineno, - path=self.filenames[-1], call_node=call) + path=self.filenames[-1], + call_node=call) call.connect(call_assignment) if call in self.blackbox_calls: @@ -672,7 +673,7 @@ def visit_AugAssign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.target), node, rhs_visitor.result, None, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.target), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) def loop_node_skeleton(self, test, node): """Common handling of looped structures, while and for.""" @@ -733,18 +734,24 @@ def visit_Expr(self, node): def add_blackbox_or_builtin_call(self, node, blackbox=False): """Processes a blackbox or builtin function when it is called. + Nothing gets assigned to ret_func_foo in the builtin/blackbox case. Increments self.function_call_index each time it is called, we can refer to it as N in the comments. Create e.g. ¤call_1 = ret_func_foo RestoreNode. - Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. Visit the arguments if they're calls. (save_def_args_in_temp) - I do not think I care about this one actually -- Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) + + Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. + Visit the arguments if they're calls. (save_def_args_in_temp) + + I do not think I care about this one actually -- Create e.g. def_arg1 = temp_N_def_arg1 for each argument. + (create_local_scope_from_def_args) + Add RestoreNode to the end of the Nodes. Args: - node() + node(ast.Call) : The node that calls the definition. blackbox(bool): Whether or not it is a builtin or blackbox call. Returns: - TODO FILL ME IN + call_node(BBorBInode): The call node. """ # Increment function_call_index self.function_call_index += 1 @@ -777,14 +784,16 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): return_value_of_nested_call = self.visit(arg) if last_return_value_of_nested_call: - # connect inner to other_inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + # connect inner to other_inner in e.g. + # `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` # I should probably loop to the inner most call of other_inner here. try: last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) except AttributeError: last_return_value_of_nested_call.connect(return_value_of_nested_call) else: - # I should only set this once per loop, inner in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + # I should only set this once per loop, inner in e.g. + # `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) call_node.inner_most_call = return_value_of_nested_call last_return_value_of_nested_call = return_value_of_nested_call @@ -800,7 +809,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): vv.visit(arg) rhs_vars.extend(vv.result) if last_return_value_of_nested_call: - # connect other_inner to outer in e.g. `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` + # connect other_inner to outer in e.g. + # `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` last_return_value_of_nested_call.connect(call_node) if len(visual_args) > 0: @@ -812,27 +822,20 @@ def add_blackbox_or_builtin_call(self, node, blackbox=False): RHS = RHS + ')' call_node.label = LHS + " = " + RHS - # Should strings be excluded from visual_args? It isn't like they'll ever be on an LHS - # This is where we'll ask the user, then save the mapping or just use the pre-made mapping. # Or perhaps we'll do that in vulnerabilities.py call_node.right_hand_side_variables = rhs_vars - # DOCUMENT THE NEEED FOR BB_node.args, was it just for get_sink_args? + + # Used in get_sink_args call_node.args = rhs_vars - # What is assigned to ret_func_foo in the builtin/blackbox case? if blackbox: - # This makes so much sense! self.blackbox_assignments.add(call_node) self.connect_if_allowed(self.nodes[-1], call_node) self.nodes.append(call_node) - # WHY DO WE DO THIS? - # WHEN DO WE ACTUALLY PUSH? - # self.function_return_stack.pop() - return call_node def visit_Name(self, node): diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index d44e81df..7e00ddfe 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -2,7 +2,10 @@ import ast from .ast_helper import Arguments -from .base_cfg import AssignmentNode +from .base_cfg import ( + AssignmentNode, + TaintedNode +) from .interprocedural_cfg import interprocedural from .module_definitions import project_definitions @@ -39,7 +42,6 @@ def get_func_cfg_with_tainted_args(self, definition): for arg in args: tainted_node = TaintedNode(arg, arg, None, [], - None, line_number=definition_lineno, path=definition.path) function_entry_node.connect(tainted_node) @@ -73,7 +75,3 @@ def _get_func_nodes(): """Get all function nodes.""" return [definition for definition in project_definitions.values() if isinstance(definition.node, ast.FunctionDef)] - - -class TaintedNode(AssignmentNode): - pass diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index c7c3db43..96ed23d1 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -252,7 +252,9 @@ def save_local_scope(self, line_number, saved_function_call_index): # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes - if type(node) == AssignmentNode or type(node) == AssignmentCallNode or type(Node) == BBorBInode]: # type() is used on purpose here + if (type(node) == AssignmentNode or + type(node) == AssignmentCallNode or + type(Node) == BBorBInode)]: # type() is used on purpose here if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) @@ -331,6 +333,7 @@ def save_def_args_in_temp(self, if return_value_of_nested_call in self.blackbox_calls: logger.debug("[San Francisco apartment] blackbox call INSIDE USER-DEFINED CALL, ouchie ouchie") + # TODO: huh? raise else: restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, @@ -349,7 +352,7 @@ def save_def_args_in_temp(self, line_number=line_number, path=self.filenames[-1]) - # TODO: If there are no ??, and no saved variables, ... then this is the first node + # If there are no args and no saved variables, then this is the first node if not first_node: first_node = restore_node @@ -488,15 +491,18 @@ def process_function(self, call_node, definition): Increments self.function_call_index each time it is called, we can refer to it as N in the comments. Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode. (save_local_scope) - Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. Visit the arguments if they're calls. (save_def_args_in_temp) + Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. + Visit the arguments if they're calls. (save_def_args_in_temp) Create e.g. def_arg1 = temp_N_def_arg1 for each argument. (create_local_scope_from_def_args) Visit and get function nodes. (visit_and_get_function_nodes) - Loop through each save_N_LHS node and create an e.g. foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) + Loop through each save_N_LHS node and create an e.g. + foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) Create e.g. ¤call_1 = ret_func_foo RestoreNode. (return_handler) Notes: Page 31 in the original thesis, but changed a little. - We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyway, that we return in this function. + We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, + because it's the last node anyway, that we return in this function. e.g. ret_func_foo gets assigned to visit_Return. Args: @@ -526,7 +532,9 @@ def process_function(self, call_node, definition): saved_function_call_index) function_nodes, first_node = self.visit_and_get_function_nodes(definition, first_node) self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! - self.restore_saved_local_scope(saved_variables, args_mapping, def_node.lineno) + self.restore_saved_local_scope(saved_variables, + args_mapping, + def_node.lineno) self.return_handler(call_node, function_nodes, saved_function_call_index, diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 34351239..a93ec544 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,4 +1,7 @@ -from .base_cfg import AssignmentNode +from .base_cfg import ( + AssignmentCallNode, + AssignmentNode +) from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase @@ -12,8 +15,9 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - if cfg_node.vv_result: + # There are two if statements on purpose + if isinstance(cfg_node, AssignmentCallNode): + # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. if cfg_node.left_hand_side not in cfg_node.vv_result: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index 8e91b26d..6e9d5f78 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -98,6 +98,7 @@ def visit_Call(self, node): # We want replace self.result.append('ret_' + arg.func.attr) else: + # Deal with it when we have code that triggers it. raise else: self.visit(arg) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 52748ee3..53ee02db 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -3,8 +3,13 @@ import ast from collections import namedtuple -from .base_cfg import AssignmentNode, BBorBInode, RestoreNode -from .framework_adaptor import TaintedNode +from .base_cfg import ( + AssignmentCallNode, + AssignmentNode, + BBorBInode, + RestoreNode, + TaintedNode +) from .lattice import Lattice from .right_hand_side_visitor import RHSVisitor from .trigger_definitions_parser import default_trigger_word_file, parse @@ -120,7 +125,7 @@ def append_if_reassigned(assignment_list, secondary, node, lattice): try: reassigned = False # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - if node.vv_result and secondary.left_hand_side in node.vv_result: + if isinstance(node, AssignmentCallNode) and secondary.left_hand_side in node.vv_result: reassigned = True elif secondary.left_hand_side in node.right_hand_side_variables: reassigned = True From 6104eb4bf487c9e64d7d6fc56e78204f505eb424 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 14:12:12 -0800 Subject: [PATCH 160/541] Cleaned up blackbox stuff, updated docstrings --- pyt/base_cfg.py | 37 ++++++++++++-------- pyt/interprocedural_cfg.py | 69 ++++++++++++++++++-------------------- 2 files changed, 55 insertions(+), 51 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 26fcb0cf..cbf2d2c3 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -129,11 +129,12 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, * """Create an Assignment node. Args: - label (str): The label of the node, describing the expression it represents. + label(str): The label of the node, describing the expression it represents. left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + ast_node(_ast.Assign, _ast.AugAssign, _ast.Return or None) right_hand_side_variables(list[str]): A list of variables on the right hand side. - vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. """ super().__init__(label, ast_node, line_number=line_number, path=path) self.left_hand_side = left_hand_side @@ -162,6 +163,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. """ super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) @@ -177,7 +179,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. - path? TODO + path(string): Current filename. """ super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) self.args = [] @@ -187,20 +189,30 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num class AssignmentCallNode(AssignmentNode): """Node used for X.""" - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, vv_result, *, line_number, path, call_node): + def __init__(self, + label, + left_hand_side, + ast_node, + right_hand_side_variables, + vv_result, + *, + line_number, + path, + call_node): """Create a X. Args: label(str): The label of the node, describing the expression it represents. left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. + vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. line_number(Optional[int]): The line of the expression the Node represents. - path? TODO - call_node? TODO + path(string): Current filename. + call_node(BBorBInode or RestoreNode): Used in connect_control_flow_node. """ super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) - self.call_node = call_node self.vv_result = vv_result + self.call_node = call_node self.blackbox = False class ReturnNode(AssignmentNode, ConnectToExitNode): @@ -214,7 +226,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, * restore_nodes(list[Node]): List of nodes that were restored in the function call. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. - path? + path(string): Current filename. """ super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) @@ -322,7 +334,8 @@ def connect_control_flow_node(self, control_flow_node, next_node): call_node = call_node.inner_most_call except AttributeError: # No inner calls - # Possible improvement: Make new node for RestoreNode's made in process_function and make `self.inner_most_call = self` + # Possible improvement: Make new node for RestoreNode's made in process_function + # and make `self.inner_most_call = self` pass last.connect(call_node) else: @@ -657,10 +670,6 @@ def assignment_call_node(self, left_hand_label, ast_node): call_node=call) call.connect(call_assignment) - if call in self.blackbox_calls: - self.blackbox_assignments.add(call_assignment) - call_assignment.blackbox = True - self.nodes.append(call_assignment) self.undecided = False @@ -732,7 +741,7 @@ def visit_For(self, node): def visit_Expr(self, node): return self.visit(node.value) - def add_blackbox_or_builtin_call(self, node, blackbox=False): + def add_blackbox_or_builtin_call(self, node, blackbox): """Processes a blackbox or builtin function when it is called. Nothing gets assigned to ret_func_foo in the builtin/blackbox case. diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 96ed23d1..cb19ce27 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -38,27 +38,27 @@ SavedVariable = namedtuple('SavedVariable', 'LHS RHS') -NOT_A_BLACKBOX = set(['get', - 'Flask', - 'run', - 'get', - 'replace', - 'read', - 'set_cookie', - 'make_response', - 'SQLAlchemy', - 'Column', - 'execute', - 'sessionmaker', - 'Session', - 'filter', - 'execute', - 'call', - 'render_template', - 'redirect', - 'url_for', - 'flash', - 'jsonify']) +BUILTINS = set(['get', + 'Flask', + 'run', + 'get', + 'replace', + 'read', + 'set_cookie', + 'make_response', + 'SQLAlchemy', + 'Column', + 'execute', + 'sessionmaker', + 'Session', + 'filter', + 'execute', + 'call', + 'render_template', + 'redirect', + 'url_for', + 'flash', + 'jsonify']) class InterproceduralVisitor(Visitor): @@ -69,7 +69,6 @@ def __init__(self, node, project_modules, local_modules, self.local_modules = local_modules self.filenames = [filename] self.blackbox_assignments = set() - self.blackbox_calls = set() self.nodes = list() self.function_call_index = 0 self.undecided = False @@ -330,17 +329,13 @@ def save_def_args_in_temp(self, return_value_of_nested_call = None if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) - - if return_value_of_nested_call in self.blackbox_calls: - logger.debug("[San Francisco apartment] blackbox call INSIDE USER-DEFINED CALL, ouchie ouchie") - # TODO: huh? - raise - else: - restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, - def_arg_temp_name, - return_value_of_nested_call.left_hand_side, - line_number=line_number, - path=self.filenames[-1]) + restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, + def_arg_temp_name, + return_value_of_nested_call.left_hand_side, + line_number=line_number, + path=self.filenames[-1]) + if return_value_of_nested_call in self.blackbox_assignments: + self.blackbox_assignments.add(restore_node) else: call_arg_label_visitor = LabelVisitor() call_arg_label_visitor.visit(call_arg) @@ -585,9 +580,10 @@ def visit_Call(self, node): # e.g. "request.args.get" -> "get" last_attribute = _id.rpartition('.')[-1] + if definition: if isinstance(definition.node, ast.ClassDef): - self.add_blackbox_or_builtin_call(node) + self.add_blackbox_or_builtin_call(node, blackbox=False) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False self.function_return_stack.append(_id) @@ -595,11 +591,10 @@ def visit_Call(self, node): else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') - elif last_attribute not in NOT_A_BLACKBOX: + elif last_attribute not in BUILTINS: # Mark the call as a blackbox because we don't have the definition return self.add_blackbox_or_builtin_call(node, blackbox=True) - - return self.add_blackbox_or_builtin_call(node) + return self.add_blackbox_or_builtin_call(node, blackbox=False) def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): """ From e49c8b08d1a02fc5244282cf45eecf0422283685 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 18:51:00 -0800 Subject: [PATCH 161/541] Miscellaneous cleanup --- pyt/interprocedural_cfg.py | 15 ++++++++------- pyt/liveness.py | 11 +++++++++-- pyt/vars_visitor.py | 39 ++++++++++++++++---------------------- pyt/vulnerabilities.py | 14 +++++++++----- 4 files changed, 42 insertions(+), 37 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index cb19ce27..1ad21132 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -243,7 +243,8 @@ def save_local_scope(self, line_number, saved_function_call_index): saved_function_call_index(int): Unique number for each call. Returns: - (saved_variables(list[SavedVariable]), first_node[RestoreNode or None]) + saved_variables(list[SavedVariable]) + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. """ saved_variables = list() saved_variables_so_far = set() @@ -313,11 +314,11 @@ def save_def_args_in_temp(self, def_args(ast_helper.Arguments): Of the definition being called. line_number(int): Of the call being made. saved_function_call_index(int): Unique number for each call. - first_node(None or RestoreNode): Used to connect previous statements to this function. + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. Returns: args_mapping(dict): A mapping of call argument to definition argument. - first_node(None or RestoreNode): Used to connect previous statements to this function. + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. """ args_mapping = dict() last_return_value_of_nested_call = None @@ -347,7 +348,7 @@ def save_def_args_in_temp(self, line_number=line_number, path=self.filenames[-1]) - # If there are no args and no saved variables, then this is the first node + # If there are no saved variables, then this is the first node if not first_node: first_node = restore_node @@ -462,7 +463,7 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index, f call_node(ast.Call) : The node that calls the definition. function_nodes(list[Node]): List of nodes of the function being called. saved_function_call_index(int): Unique number for each call. - first_node + first_node(EntryOrExitNode or RestoreNode): Used to connect previous statements to this function. """ for node in function_nodes: # Only `Return`s and `Raise`s can be of type ConnectToExitNode @@ -543,11 +544,11 @@ def visit_and_get_function_nodes(self, definition, first_node): Args: definition(LocalModuleDefinition): Definition of the function being added. - first_node + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. Returns: the_new_nodes(list[Node]): The nodes added while visiting the function. - first_node + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. """ len_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] diff --git a/pyt/liveness.py b/pyt/liveness.py index 8c524724..d9aadde8 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -2,8 +2,15 @@ from .analysis_base import AnalysisBase from .ast_helper import get_call_names_as_string -from .base_cfg import AssignmentNode, BBorBInode, EntryOrExitNode -from .constraint_table import constraint_join, constraint_table +from .base_cfg import ( + AssignmentNode, + BBorBInode, + EntryOrExitNode +) +from .constraint_table import ( + constraint_join, + constraint_table +) from .lattice import Lattice from .vars_visitor import VarsVisitor diff --git a/pyt/vars_visitor.py b/pyt/vars_visitor.py index 6e9d5f78..f64abd9e 100644 --- a/pyt/vars_visitor.py +++ b/pyt/vars_visitor.py @@ -1,4 +1,5 @@ import ast +import itertools from .ast_helper import get_call_names @@ -85,30 +86,22 @@ def visit_Call(self, node): # This will not visit Flask in Flask(__name__) but it will visit request in `request.args.get() if not isinstance(node.func, ast.Name): self.visit(node.func) - if node.args: - for arg in node.args: - if isinstance(arg, ast.Call): - if isinstance(arg.func, ast.Name): - # We can't just visit because we need to add 'ret_' - self.result.append('ret_' + arg.func.id) - elif isinstance(arg.func, ast.Attribute): - # e.g. html.replace('{{ param }}', param) - # func.attr is replace - # func.value.id is html - # We want replace - self.result.append('ret_' + arg.func.attr) - else: - # Deal with it when we have code that triggers it. - raise + for arg in itertools.chain(node.args, node.keywords): + if isinstance(arg, ast.Call): + if isinstance(arg.func, ast.Name): + # We can't just visit because we need to add 'ret_' + self.result.append('ret_' + arg.func.id) + elif isinstance(arg.func, ast.Attribute): + # e.g. html.replace('{{ param }}', param) + # func.attr is replace + # func.value.id is html + # We want replace + self.result.append('ret_' + arg.func.attr) else: - self.visit(arg) - if node.keywords: - for keyword in node.keywords: - if isinstance(keyword, ast.Call): - # FILL ME IN MORE - self.result.append('ret_' + keyword.func.id) - else: - self.visit(keyword) + # Deal with it when we have code that triggers it. + raise + else: + self.visit(arg) def visit_Attribute(self, node): if not isinstance(node.value, ast.Name): diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 53ee02db..1faf85c1 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -249,10 +249,9 @@ def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): Returns: AssignmentNode or None """ - for blackbox_assignment in blackbox_assignments: - for node in trimmed_reassignment_nodes: - if node == blackbox_assignment: - return blackbox_assignment + for node in trimmed_reassignment_nodes: + if node in blackbox_assignments: + return node return None @@ -274,7 +273,12 @@ def get_sink_args(cfg_node): return vv.result + other_results -def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, blackbox_assignments): +def get_vulnerability(source, + sink, + triggers, + lattice, + trim_reassigned_in, + blackbox_assignments): """Get vulnerability between source and sink if it exists. Uses triggers to find sanitisers. From 18539bbe7175f7f37a657885c26bc6a95fa76020 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 19:17:15 -0800 Subject: [PATCH 162/541] Codeclimate Feedback --- pyt/base_cfg.py | 51 ++++++++++++++++++-------------------- pyt/interprocedural_cfg.py | 15 +++++------ 2 files changed, 32 insertions(+), 34 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index cbf2d2c3..98a37fec 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -215,6 +215,7 @@ def __init__(self, self.call_node = call_node self.blackbox = False + class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" @@ -304,6 +305,27 @@ def should_connect_node(self, node): else: return True + def get_inner_most_function_call(self, call_node): + # Loop to inner most function call + # e.g. return scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` + old_call_node = None + while call_node != old_call_node: + old_call_node = call_node + if isinstance(call_node, BBorBInode): + call_node = call_node.inner_most_call + else: + try: + call_node = call_node.first_node.inner_most_call + except AttributeError: + try: + call_node = call_node.first_node + except AttributeError: + # No inner calls + # Possible improvement: Make new node for RestoreNode's made in process_function + # and make `self.inner_most_call = self` + pass + return call_node + def connect_control_flow_node(self, control_flow_node, next_node): """Connect a ControlFlowNode properly to the next_node.""" for last in control_flow_node[1]: # list of last nodes in ifs and elifs @@ -311,33 +333,8 @@ def connect_control_flow_node(self, control_flow_node, next_node): last.connect(next_node.test) # connect to next if test case elif isinstance(next_node, AssignmentCallNode): call_node = next_node.call_node - if isinstance(call_node, BBorBInode): - # Loop to inner most function call - # e.g. scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` - old_call_node = None - while call_node != old_call_node: - old_call_node = call_node - if isinstance(call_node, BBorBInode): - call_node = call_node.inner_most_call - else: - try: - call_node = call_node.first_node.inner_most_call - except AttributeError: - try: - call_node = call_node.first_node - except AttributeError: - pass - else: - call_node = call_node.first_node - try: - while call_node != call_node.inner_most_call: - call_node = call_node.inner_most_call - except AttributeError: - # No inner calls - # Possible improvement: Make new node for RestoreNode's made in process_function - # and make `self.inner_most_call = self` - pass - last.connect(call_node) + inner_most_call_node = self.get_inner_most_function_call(call_node) + last.connect(inner_most_call_node) else: last.connect(next_node) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 1ad21132..b6f2171a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -253,8 +253,8 @@ def save_local_scope(self, line_number, saved_function_call_index): # Make e.g. save_N_LHS = assignment.LHS for each AssignmentNode for assignment in [node for node in self.nodes if (type(node) == AssignmentNode or - type(node) == AssignmentCallNode or - type(Node) == BBorBInode)]: # type() is used on purpose here + type(node) == AssignmentCallNode or + type(Node) == BBorBInode)]: # type() is used on purpose here if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) @@ -294,11 +294,13 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): if previous_node is not self.prev_nodes_to_avoid[-1]: previous_node.connect(node_to_connect_to) except IndexError: + # If there are no prev_nodes_to_avoid, we just connect safely. + # Except in this case: + # # if not image_name: # return 404 - # print('foo') # We do not want to this line with `return 404` + # print('foo') # We do not want to connect this line with `return 404` if not isinstance(previous_node, ReturnNode): - # If there are no prev_nodes_to_avoid, we just connect safely. previous_node.connect(node_to_connect_to) def save_def_args_in_temp(self, @@ -355,12 +357,10 @@ def save_def_args_in_temp(self, if isinstance(call_arg, ast.Call): if last_return_value_of_nested_call: # connect inner to other_inner in e.g. `outer(inner(image_name), other_inner(image_name))` - if isinstance(return_value_of_nested_call, BBorBInode): last_return_value_of_nested_call.connect(return_value_of_nested_call) else: last_return_value_of_nested_call.connect(return_value_of_nested_call.first_node) - else: # I should only set this once per loop, inner in e.g. `outer(inner(image_name), other_inner(image_name))` # (inner_most_call is used when predecessor is a ControlFlowNode in connect_control_flow_node) @@ -377,7 +377,8 @@ def save_def_args_in_temp(self, args_mapping[return_value_of_nested_call.left_hand_side] = def_args[i] else: args_mapping[def_args[i]] = call_arg_label_visitor.result - # After loop + + # After args loop if last_return_value_of_nested_call: # connect other_inner to outer in e.g. `outer(inner(image_name), other_inner(image_name))` last_return_value_of_nested_call.connect(first_node) From 5a0fa02ee833b3907593eff19e8037d8b811a0c0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 19:20:53 -0800 Subject: [PATCH 163/541] Remove logger imports --- pyt/base_cfg.py | 2 -- pyt/interprocedural_cfg.py | 2 -- pyt/vulnerabilities.py | 2 -- tests/analysis_base_test_case.py | 2 -- tests/cfg_test.py | 2 -- tests/nested_functions_test.py | 2 -- tests/reaching_definitions_test.py | 2 -- 7 files changed, 14 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 98a37fec..9ea0a885 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -6,8 +6,6 @@ from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor from .vars_visitor import VarsVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') ControlFlowNode = namedtuple('ControlFlowNode', diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index b6f2171a..90e7ff0f 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -33,8 +33,6 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') SavedVariable = namedtuple('SavedVariable', 'LHS RHS') diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 1faf85c1..a180df5b 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -20,8 +20,6 @@ Vulnerability, VulnerabilityLog ) -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 95c44306..6f07a9f2 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -5,8 +5,6 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import FixedPointAnalysis from pyt.lattice import Lattice -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class AnalysisBaseTestCase(BaseTestCase): diff --git a/tests/cfg_test.py b/tests/cfg_test.py index cc1a249a..08edb251 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,8 +1,6 @@ from .base_test_case import BaseTestCase from pyt.base_cfg import EntryOrExitNode, Node # from pyt.project_handler import get_modules -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class CFGGeneralTest(BaseTestCase): diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index ea708e2e..1fea4ec0 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -2,8 +2,6 @@ from .base_test_case import BaseTestCase from pyt.project_handler import get_directory_modules, get_modules_and_packages -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class NestedTest(BaseTestCase): diff --git a/tests/reaching_definitions_test.py b/tests/reaching_definitions_test.py index b3a6172c..13805f12 100644 --- a/tests/reaching_definitions_test.py +++ b/tests/reaching_definitions_test.py @@ -1,8 +1,6 @@ from .analysis_base_test_case import AnalysisBaseTestCase from pyt.constraint_table import constraint_table from pyt.reaching_definitions import ReachingDefinitionsAnalysis -from pyt.utils.log import enable_logger, logger -enable_logger(to_file='./pyt.log') class ReachingDefinitionsTest(AnalysisBaseTestCase): From 0fd5474d6960571b8e6ff5b9a815534c136ea979 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 11 Nov 2017 19:40:25 -0800 Subject: [PATCH 164/541] Exclude def chains from coveragerc --- .coveragerc | 1 + 1 file changed, 1 insertion(+) diff --git a/.coveragerc b/.coveragerc index 01a5eca8..16a0973e 100644 --- a/.coveragerc +++ b/.coveragerc @@ -10,6 +10,7 @@ exclude_lines = [run] omit = + pyt/definition_chains.py pyt/draw.py pyt/github_search.py pyt/intraprocedural_cfg.py From cbf2e933a28ba1f0679efd8faa76a9ec175e54ad Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 12 Nov 2017 12:19:15 -0800 Subject: [PATCH 165/541] Add django.nV files --- example/django.nV/taskManager/__init__.py | 13 + example/django.nV/taskManager/forms.py | 89 ++ example/django.nV/taskManager/misc.py | 41 + example/django.nV/taskManager/models.py | 105 +++ example/django.nV/taskManager/settings.py | 110 +++ .../django.nV/taskManager/taskManager_urls.py | 97 ++ .../taskManager/upload_controller.py | 27 + example/django.nV/taskManager/urls.py | 27 + example/django.nV/taskManager/views.py | 834 ++++++++++++++++++ example/django.nV/taskManager/wsgi.py | 14 + 10 files changed, 1357 insertions(+) create mode 100755 example/django.nV/taskManager/__init__.py create mode 100755 example/django.nV/taskManager/forms.py create mode 100755 example/django.nV/taskManager/misc.py create mode 100755 example/django.nV/taskManager/models.py create mode 100755 example/django.nV/taskManager/settings.py create mode 100755 example/django.nV/taskManager/taskManager_urls.py create mode 100644 example/django.nV/taskManager/upload_controller.py create mode 100755 example/django.nV/taskManager/urls.py create mode 100755 example/django.nV/taskManager/views.py create mode 100755 example/django.nV/taskManager/wsgi.py diff --git a/example/django.nV/taskManager/__init__.py b/example/django.nV/taskManager/__init__.py new file mode 100755 index 00000000..bc35e978 --- /dev/null +++ b/example/django.nV/taskManager/__init__.py @@ -0,0 +1,13 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# diff --git a/example/django.nV/taskManager/forms.py b/example/django.nV/taskManager/forms.py new file mode 100755 index 00000000..3153322b --- /dev/null +++ b/example/django.nV/taskManager/forms.py @@ -0,0 +1,89 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +""" forms.py contains various Django forms for the application """ + +from taskManager.models import Project, Task +from django import forms +from django.contrib.auth.models import User + + +def get_my_choices_users(): + """ Retrieves a list of all users in the system + for the user management page + """ + + user_list = User.objects.order_by('date_joined') + user_tuple = [] + counter = 1 + for user in user_list: + user_tuple.append((counter, user)) + counter = counter + 1 + return user_tuple + + +def get_my_choices_tasks(current_proj): + """ Retrieves all tasks in the system + for the task management page + """ + + task_list = [] + tasks = Task.objects.all() + for task in tasks: + if task.project == current_proj: + task_list.append(task) + + task_tuple = [] + counter = 1 + for task in task_list: + task_tuple.append((counter, task)) + counter = counter + 1 + return task_tuple + + +def get_my_choices_projects(): + """ Retrieves all projects in the system + for the project management page + """ + + proj_list = Project.objects.all() + proj_tuple = [] + counter = 1 + for proj in proj_list: + proj_tuple.append((counter, proj)) + counter = counter + 1 + return proj_tuple + +# A2: Broken Authentication and Session Management + + +class UserForm(forms.ModelForm): + """ User registration form """ + class Meta: + model = User + exclude = ['groups', 'user_permissions', 'last_login', 'date_joined', 'is_active'] + + +class ProjectFileForm(forms.Form): + """ Used for uploading files attached to projects """ + name = forms.CharField(max_length=300) + file = forms.FileField() + + +class ProfileForm(forms.Form): + """ Provides a form for editing your own profile """ + first_name = forms.CharField(max_length=30, required=False) + last_name = forms.CharField(max_length=30, required=False) + email = forms.CharField(max_length=300, required=False) + picture = forms.FileField(required=False) diff --git a/example/django.nV/taskManager/misc.py b/example/django.nV/taskManager/misc.py new file mode 100755 index 00000000..082f990d --- /dev/null +++ b/example/django.nV/taskManager/misc.py @@ -0,0 +1,41 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# +""" misc.py contains miscellaneous functions + + Functions that are used in multiple places in the + rest of the application, but are not tied to a + specific area are stored in misc.py +""" + +import os + + +def store_uploaded_file(title, uploaded_file): + """ Stores a temporary uploaded file on disk """ + upload_dir_path = '%s/static/taskManager/uploads' % ( + os.path.dirname(os.path.realpath(__file__))) + if not os.path.exists(upload_dir_path): + os.makedirs(upload_dir_path) + + # A1: Injection (shell) + # Let's avoid the file corruption race condition! + os.system( + "mv " + + uploaded_file.temporary_file_path() + + " " + + "%s/%s" % + (upload_dir_path, + title)) + + return '/static/taskManager/uploads/%s' % (title) diff --git a/example/django.nV/taskManager/models.py b/example/django.nV/taskManager/models.py new file mode 100755 index 00000000..c924df9b --- /dev/null +++ b/example/django.nV/taskManager/models.py @@ -0,0 +1,105 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +import datetime + +from django.contrib.auth.models import User + +from django.utils import timezone +from django.db import models + + +class UserProfile(models.Model): + user = models.OneToOneField(User) + image = models.CharField(max_length=3000, default="") + reset_token = models.CharField(max_length=7, default="") + reset_token_expiration = models.DateTimeField(default=timezone.now) + +class Project(models.Model): + title = models.CharField(max_length=50, default='Default') + text = models.CharField(max_length=500) + start_date = models.DateTimeField('date started') + due_date = models.DateTimeField( + 'date due', + default=( + timezone.now() + + datetime.timedelta( + weeks=1))) + users_assigned = models.ManyToManyField(User) + priority = models.IntegerField(default=1) + + def __str__(self): + return self.title + + def was_created_recently(self): + return self.start_date >= timezone.now() - datetime.timedelta(days=1) + + def is_overdue(self): + return self.due_date <= timezone.now() + + def percent_complete(self): + counter = 0 + for task in self.task_set.all(): + counter = counter + (1 if task.completed else 0) + try: + return round(float(counter) / self.task_set.count() * 100) + except ZeroDivisionError: + return 0 + + +class Task(models.Model): + project = models.ForeignKey(Project, default=1) + text = models.CharField(max_length=200) + title = models.CharField(max_length=200, default="N/A") + start_date = models.DateTimeField('date created') + due_date = models.DateTimeField( + 'date due', + default=( + timezone.now() + + datetime.timedelta( + weeks=1))) + completed = models.NullBooleanField(default=False) + users_assigned = models.ManyToManyField(User) + + def __str__(self): + return self.text + + def was_created_recently(self): + return self.start_date >= timezone.now() - datetime.timedelta(days=1) + + def is_overdue(self): + return self.due_date <= timezone.now() + + def percent_complete(self): + return 100 if self.completed else 0 + + +class Notes(models.Model): + task = models.ForeignKey(Task, default=1) + title = models.CharField(max_length=200, default="N/A") + text = models.CharField(max_length=200) + image = models.CharField(max_length=200) + user = models.CharField(max_length=200, default='ancestor') + + def __str__(self): + return self.text + + +class File(models.Model): + project = models.ForeignKey(Project) + name = models.CharField(max_length=300, default="") + path = models.CharField(max_length=3000, default="") + + def __str__(self): + return self.name diff --git a/example/django.nV/taskManager/settings.py b/example/django.nV/taskManager/settings.py new file mode 100755 index 00000000..17bb6978 --- /dev/null +++ b/example/django.nV/taskManager/settings.py @@ -0,0 +1,110 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +# Build paths inside the project like this: os.path.join(BASE_DIR, ...) +import os +BASE_DIR = os.path.dirname(os.path.dirname(__file__)) + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/1.7/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = '0yxzudryd8)-%)(fz&7q-!v&cq1u6vbfoc4u7@u_&i)b@4eh^q' + +# A5: Security Misconfiguration +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = True +TEMPLATE_DEBUG = True + +ALLOWED_HOSTS = [] + +# Application definition + +INSTALLED_APPS = ( + 'django.contrib.admin', + 'django.contrib.auth', + 'django.contrib.contenttypes', + 'django.contrib.messages', + 'django.contrib.staticfiles', + 'taskManager' +) + +MIDDLEWARE_CLASSES = ( + 'django.contrib.sessions.middleware.SessionMiddleware', + 'django.middleware.common.CommonMiddleware', + 'django.middleware.csrf.CsrfViewMiddleware', + 'django.contrib.auth.middleware.AuthenticationMiddleware', + 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', + 'django.contrib.messages.middleware.MessageMiddleware', + 'django.middleware.clickjacking.XFrameOptionsMiddleware', +) + +ROOT_URLCONF = 'taskManager.urls' + +WSGI_APPLICATION = 'taskManager.wsgi.application' + +FILE_UPLOAD_HANDLERS = ( + "django.core.files.uploadhandler.TemporaryFileUploadHandler",) + +# Database +# https://docs.djangoproject.com/en/1.7/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + } +} + +# Internationalization +# https://docs.djangoproject.com/en/1.7/topics/i18n/ + +LANGUAGE_CODE = 'en-us' + +TIME_ZONE = 'UTC' + +USE_I18N = True + +USE_L10N = True + +USE_TZ = True + +MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage' + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/1.7/howto/static-files/ + +STATIC_URL = '/static/' + +STATICFILES_DIRS = ( + os.path.join(BASE_DIR, "static"), + '/var/www/static/', +) + +TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')] + +LOGIN_URL = '/taskManager/login/' + +# A6: Sensitive Data Exposure +PASSWORD_HASHERS = ['django.contrib.auth.hashers.MD5PasswordHasher'] + +# A2: Broken Auth and Session Management +SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies" + +EMAIL_PORT = 1025 + +# Needs compatibility with older Django! +SESSION_SERIALIZER = "django.contrib.sessions.serializers.PickleSerializer" +SESSION_COOKIE_HTTPONLY = False diff --git a/example/django.nV/taskManager/taskManager_urls.py b/example/django.nV/taskManager/taskManager_urls.py new file mode 100755 index 00000000..2a1e4ad1 --- /dev/null +++ b/example/django.nV/taskManager/taskManager_urls.py @@ -0,0 +1,97 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +from django.conf.urls import patterns, url + +from taskManager import views + +urlpatterns = patterns('', + url(r'^$', views.index, name='index'), + + # File + url(r'^download/(?P\d+)/$', + views.download, name='download'), + url(r'^(?P\d+)/upload/$', + views.upload, name='upload'), + url(r'^downloadprofilepic/(?P\d+)/$', + views.download_profile_pic, name='download_profile_pic'), + + # Authentication & Authorization + url(r'^register/$', views.register, name='register'), + url(r'^login/$', views.login, name='login'), + url(r'^logout/$', views.logout_view, name='logout'), + url(r'^manage_groups/$', views.manage_groups, + name='manage_groups'), + url(r'^profile/$', views.profile, name='profile'), + url(r'^change_password/$', views.change_password, + name='change_password'), + url(r'^forgot_password/$', views.forgot_password, + name='forgot_password'), + url(r'^reset_password/$', views.reset_password, + name='reset_password'), + url(r'^profile/(?P\d+)$', + views.profile_by_id, name='profile_by_id'), + url(r'^profile_view/(?P\d+)$', + views.profile_view, name='profile_view'), + + # Projects + url(r'^project_create/$', views.project_create, + name='project_create'), + url(r'^(?P\d+)/edit_project/$', + views.project_edit, name='project_edit'), + url(r'^manage_projects/$', views.manage_projects, + name='manage_projects'), + url(r'^(?P\d+)/project_delete/$', + views.project_delete, name='project_delete'), + url(r'^(?P\d+)/$', + views.project_details, name='project_details'), + url(r'^project_list/$', views.project_list, + name='project_list'), + + # Tasks + url(r'^(?P\d+)/task_create/$', + views.task_create, name='task_create'), + url(r'^(?P\d+)/(?P\d+)/$', + views.task_details, name='task_details'), + url(r'^(?P\d+)/task_edit/(?P\d+)$', + views.task_edit, name='task_edit'), + url(r'^(?P\d+)/task_delete/(?P\d+)$', + views.task_delete, name='task_delete'), + url(r'^(?P\d+)/task_complete/(?P\d+)$', + views.task_complete, name='task_complete'), + url(r'^task_list/$', views.task_list, name='task_list'), + url(r'^(?P\d+)/manage_tasks/$', + views.manage_tasks, name='manage_tasks'), + + + # Notes + url(r'^(?P\d+)/(?P\d+)/note_create/$', + views.note_create, name='note_create'), + url(r'^(?P\d+)/(?P\d+)/note_edit/(?P\d+)$', + views.note_edit, name='note_edit'), + url(r'^(?P\d+)/(?P\d+)/note_delete/(?P\d+)$', + views.note_delete, name='note_delete'), + + url(r'^dashboard/$', views.dashboard, name='dashboard'), + url(r'^search/$', views.search, name='search'), + + + # Tutorials + url(r'^tutorials/$', views.tutorials, name='tutorials'), + url(r'^tutorials/(?P[a-z\-]+)/$', + views.show_tutorial, name='show_tutorial'), + + # Settings - DEBUG + url(r'^settings/$', views.tm_settings, name='settings'), + ) diff --git a/example/django.nV/taskManager/upload_controller.py b/example/django.nV/taskManager/upload_controller.py new file mode 100644 index 00000000..1be60d57 --- /dev/null +++ b/example/django.nV/taskManager/upload_controller.py @@ -0,0 +1,27 @@ +from taskManager.misc import store_uploaded_file + +def upload(request, project_id): + + if request.method == 'POST': + + proj = Project.objects.get(pk=project_id) + form = ProjectFileForm(request.POST, request.FILES) + + if form.is_valid(): + name = request.POST.get('name', False) + upload_path = store_uploaded_file(name, request.FILES['file']) + + #A1 - Injection (SQLi) + curs = connection.cursor() + curs.execute( + "insert into taskManager_file ('name','path','project_id') values ('%s','%s',%s)" % + (name, upload_path, project_id)) + + return redirect('/taskManager/' + project_id + + '/', {'new_file_added': True}) + else: + form = ProjectFileForm() + else: + form = ProjectFileForm() + return render_to_response( + 'taskManager/upload.html', {'form': form}, RequestContext(request)) \ No newline at end of file diff --git a/example/django.nV/taskManager/urls.py b/example/django.nV/taskManager/urls.py new file mode 100755 index 00000000..a45b3f4f --- /dev/null +++ b/example/django.nV/taskManager/urls.py @@ -0,0 +1,27 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +from django.conf.urls import patterns, include, url +from django.contrib import admin + +urlpatterns = patterns('', + url(r'^$', + 'taskManager.views.index', + name='index'), + url(r'^taskManager/', + include('taskManager.taskManager_urls', + namespace="taskManager")), + url(r'^admin/', + include(admin.site.urls)), + ) diff --git a/example/django.nV/taskManager/views.py b/example/django.nV/taskManager/views.py new file mode 100755 index 00000000..7e73e398 --- /dev/null +++ b/example/django.nV/taskManager/views.py @@ -0,0 +1,834 @@ +# _ _ __ __ +# __| |(_)__ _ _ _ __ _ ___ _ \ \ / / +# / _` || / _` | ' \/ _` / _ \_| ' \ V / +# \__,_|/ \__,_|_||_\__, \___(_)_||_\_/ +# |__/ |___/ +# +# INSECURE APPLICATION WARNING +# +# django.nV is a PURPOSELY INSECURE web-application +# meant to demonstrate Django security problems +# UNDER NO CIRCUMSTANCES should you take any code +# from django.nV for use in another web application! +# + +import datetime +import mimetypes +import os +import codecs + +from django.shortcuts import render, render_to_response, redirect +from django.http import HttpResponse +from django.utils import timezone +from django.template import RequestContext +from django.db import connection + +from django.views.decorators.csrf import csrf_exempt + +from django.contrib import messages +from django.contrib.auth import authenticate +from django.contrib.auth import login as auth_login +from django.contrib.auth.models import Group, User +from django.contrib.auth import logout + +from taskManager.models import Task, Project, Notes, File, UserProfile +from taskManager.misc import store_uploaded_file +from taskManager.forms import UserForm, ProjectFileForm, ProfileForm + + +def manage_tasks(request, project_id): + + user = request.user + proj = Project.objects.get(pk=project_id) + + if user.is_authenticated(): + + if user.has_perm('can_change_task'): + + if request.method == 'POST': + + userid = request.POST.get("userid") + taskid = request.POST.get("taskid") + + user = User.objects.get(pk=userid) + task = Task.objects.get(pk=taskid) + + task.users_assigned.add(user) + + return redirect('/taskManager/') + else: + return render_to_response( + 'taskManager/manage_tasks.html', + { + 'tasks': Task.objects.filter( + project=proj).order_by('title'), + 'users': User.objects.order_by('date_joined')}, + RequestContext(request)) + + else: + return redirect('/taskManager/', {'permission': False}) + + return redirect('/taskManager/', {'logged_in': False}) + + +def manage_projects(request): + + user = request.user + + if user.is_authenticated(): + logged_in = True + + if user.has_perm('can_change_group'): + + if request.method == 'POST': + + userid = request.POST.get("userid") + projectid = request.POST.get("projectid") + + user = User.objects.get(pk=userid) + project = Project.objects.get(pk=projectid) + + project.users_assigned.add(user) + + return redirect('/taskManager/') + else: + + return render_to_response( + 'taskManager/manage_projects.html', + { + 'projects': Project.objects.order_by('title'), + 'users': User.objects.order_by('date_joined'), + 'logged_in': logged_in}, + RequestContext(request)) + + else: + return redirect('/taskManager/', {'permission': False}) + + return redirect('/taskManager/', {'logged_in': False}) + +# A7 - Missing Function Level Access Control + + +def manage_groups(request): + + user = request.user + + if user.is_authenticated(): + + user_list = User.objects.order_by('date_joined') + + if request.method == 'POST': + + post_data = request.POST.dict() + + accesslevel = post_data["accesslevel"].strip() + + if accesslevel in ['admin_g', 'project_managers', 'team_member']: + + # Create the group if it doesn't already exist + try: + grp = Group.objects.get(name=accesslevel) + except Group.DoesNotExist: + grp = Group.objects.create(name=accesslevel) + specified_user = User.objects.get(pk=post_data["userid"]) + # Check if the user even exists + if specified_user is None: + return redirect('/taskManager/', {'permission': False}) + specified_user.groups.add(grp) + specified_user.save() + return render_to_response( + 'taskManager/manage_groups.html', + { + 'users': user_list, + 'groups_changed': True, + 'logged_in': True}, + RequestContext(request)) + else: + return render_to_response( + 'taskManager/manage_groups.html', + { + 'users': user_list, + 'logged_in': True}, + RequestContext(request)) + + else: + if user.has_perm('can_change_group'): + return render_to_response( + 'taskManager/manage_groups.html', + { + 'users': user_list, + 'logged_in': True}, + RequestContext(request)) + else: + return redirect('/taskManager/', {'permission': False}) + + return redirect('/taskManager/', {'logged_in': False}) + +# A4: Insecure Direct Object Reference (IDOR) + + +def upload(request, project_id): + + if request.method == 'POST': + + proj = Project.objects.get(pk=project_id) + form = ProjectFileForm(request.POST, request.FILES) + + if form.is_valid(): + name = request.POST.get('name', False) + upload_path = store_uploaded_file(name, request.FILES['file']) + + #A1 - Injection (SQLi) + curs = connection.cursor() + curs.execute( + "insert into taskManager_file ('name','path','project_id') values ('%s','%s',%s)" % + (name, upload_path, project_id)) + + return redirect('/taskManager/' + project_id + + '/', {'new_file_added': True}) + else: + form = ProjectFileForm() + else: + form = ProjectFileForm() + return render_to_response( + 'taskManager/upload.html', {'form': form}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def download(request, file_id): + + file = File.objects.get(pk=file_id) + abspath = open( + os.path.dirname( + os.path.realpath(__file__)) + + file.path, + 'rb') + response = HttpResponse(content=abspath.read()) + response['Content-Type'] = mimetypes.guess_type(file.path)[0] + response['Content-Disposition'] = 'attachment; filename=%s' % file.name + return response + + +def download_profile_pic(request, user_id): + + user = User.objects.get(pk=user_id) + filepath = user.userprofile.image + if len(filepath) > 1: + return redirect(filepath) + else: + return redirect('/static/taskManager/uploads/default.png') + #filename = user.get_full_name()+"."+filepath.split(".")[-1] + # try: + # abspath = open(filepath, 'rb') + # except: + # abspath = open("./taskmanager"+filepath, 'rb') + #response = HttpResponse(content=abspath.read()) + #response['Content-Type']= mimetypes.guess_type(filepath)[0] + # return response + +# A4: Insecure Direct Object Reference (IDOR) + + +def task_create(request, project_id): + + if request.method == 'POST': + + proj = Project.objects.get(pk=project_id) + + text = request.POST.get('text', False) + task_title = request.POST.get('task_title', False) + now = timezone.now() + task_duedate = timezone.now() + datetime.timedelta(weeks=1) + if request.POST.get('task_duedate') != '': + task_duedate = datetime.datetime.fromtimestamp( + int(request.POST.get('task_duedate', False))) + + task = Task( + text=text, + title=task_title, + start_date=now, + due_date=task_duedate, + project=proj) + + task.save() + task.users_assigned = [request.user] + + return redirect('/taskManager/' + project_id + + '/', {'new_task_added': True}) + else: + return render_to_response( + 'taskManager/task_create.html', {'proj_id': project_id}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def task_edit(request, project_id, task_id): + + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + + if request.method == 'POST': + + if task.project == proj: + + text = request.POST.get('text', False) + task_title = request.POST.get('task_title', False) + task_completed = request.POST.get('task_completed', False) + + task.title = task_title + task.text = text + task.completed = True if task_completed == "1" else False + task.save() + + return redirect('/taskManager/' + project_id + '/' + task_id) + else: + return render_to_response( + 'taskManager/task_edit.html', {'task': task}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def task_delete(request, project_id, task_id): + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + if proj is not None: + if task is not None and task.project == proj: + task.delete() + + return redirect('/taskManager/' + project_id + '/') + +# A4: Insecure Direct Object Reference (IDOR) + + +def task_complete(request, project_id, task_id): + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + if proj is not None: + if task is not None and task.project == proj: + task.completed = not task.completed + task.save() + + return redirect('/taskManager/' + project_id) + + +def project_create(request): + + if request.method == 'POST': + + title = request.POST.get('title', False) + text = request.POST.get('text', False) + project_priority = int(request.POST.get('project_priority', False)) + now = timezone.now() + project_duedate = timezone.make_aware(datetime.datetime.fromtimestamp( + int(request.POST.get('project_duedate', False)))) + + project = Project(title=title, + text=text, + priority=project_priority, + due_date=project_duedate, + start_date=now) + project.save() + project.users_assigned = [request.user.id] + + return redirect('/taskManager/', {'new_project_added': True}) + else: + return render_to_response( + 'taskManager/project_create.html', + {}, + RequestContext(request)) + + +# A4: Insecure Direct Object Reference (IDOR) +def project_edit(request, project_id): + + proj = Project.objects.get(pk=project_id) + + if request.method == 'POST': + + title = request.POST.get('title', False) + text = request.POST.get('text', False) + project_priority = int(request.POST.get('project_priority', False)) + project_duedate = datetime.datetime.fromtimestamp( + int(request.POST.get('project_duedate', False))) + + proj.title = title + proj.text = text + proj.priority = project_priority + proj.due_date = project_duedate + proj.save() + + return redirect('/taskManager/' + project_id + '/') + else: + return render_to_response( + 'taskManager/project_edit.html', {'proj': proj}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def project_delete(request, project_id): + # IDOR + project = Project.objects.get(pk=project_id) + project.delete() + return redirect('/taskManager/dashboard') + +# A10: Open Redirect + + +def logout_view(request): + logout(request) + return redirect(request.GET.get('redirect', '/taskManager/')) + + +def login(request): + if request.method == 'POST': + username = request.POST.get('username', False) + password = request.POST.get('password', False) + + if User.objects.filter(username=username).exists(): + user = authenticate(username=username, password=password) + if user is not None: + if user.is_active: + auth_login(request, user) + # Redirect to a success page. + return redirect('/taskManager/') + else: + # Return a 'disabled account' error message + return redirect('/taskManager/', {'disabled_user': True}) + else: + # Return an 'invalid login' error message. + return render(request, + 'taskManager/login.html', + {'failed_login': False}) + else: + return render(request, + 'taskManager/login.html', + {'invalid_username': False}) + else: + return render_to_response( + 'taskManager/login.html', + {}, + RequestContext(request)) + + +def register(request): + + context = RequestContext(request) + + registered = False + + if request.method == 'POST': + + user_form = UserForm(data=request.POST) + + # If the two forms are valid... + if user_form.is_valid(): + # Save the user's form data to the database. + user = user_form.save() + + user.set_password(user.password) + + # add user to lowest permission group + + #grp = Group.objects.get(name='team_member') + # user.groups.add(grp) + + user.userProfile = UserProfile.objects.create(user=user) + user.userProfile.save() + user.save() + + # Update our variable to tell the template registration was + # successful. + registered = True + + else: + print(user_form.errors) + + # Not a HTTP POST, so we render our form using two ModelForm instances. + # These forms will be blank, ready for user input. + else: + user_form = UserForm() + + # Render the template depending on the context. + return render_to_response( + 'taskManager/register.html', + {'user_form': user_form, 'registered': registered}, + context) + + +def index(request): + sorted_projects = Project.objects.order_by('-start_date') + + admin_level = False + + if request.user.groups.filter(name='admin_g').exists(): + admin_level = True + + list_to_show = [] + for project in sorted_projects: + if(project.users_assigned.filter(username=request.user.username)).exists(): + list_to_show.append(project) + + if request.user.is_authenticated(): + return redirect("/taskManager/dashboard") + else: + return render( + request, + 'taskManager/index.html', + {'project_list': sorted_projects, + 'user': request.user, + 'admin_level': admin_level} + ) + + +def profile_view(request, user_id): + try: + user = User.objects.get(pk=user_id) + except User.DoesNotExist: + return redirect("/taskManager/dashboard") + + if request.user.groups.filter(name='admin_g').exists(): + role = "Admin" + elif request.user.groups.filter(name='project_managers').exists(): + role = "Project Manager" + else: + role = "Team Member" + + sorted_projects = Project.objects.filter( + users_assigned=request.user.id).order_by('title') + + return render(request, 'taskManager/profile_view.html', + {'user': user, 'role': role, 'project_list': sorted_projects}) + + +def project_details(request, project_id): + proj = Project.objects.filter( + users_assigned=request.user.id, + pk=project_id) + if not proj: + messages.warning( + request, + 'You are not authorized to view this project') + return redirect('/taskManager/dashboard') + else: + proj = Project.objects.get(pk=project_id) + user_can_edit = request.user.has_perm('project_edit') + + return render(request, 'taskManager/project_details.html', + {'proj': proj, 'user_can_edit': user_can_edit}) + +# A4: Insecure Direct Object Reference (IDOR) + + +def note_create(request, project_id, task_id): + if request.method == 'POST': + + parent_task = Task.objects.get(pk=task_id) + + note_title = request.POST.get('note_title', False) + text = request.POST.get('text', False) + + note = Notes( + title=note_title, + text=text, + user=request.user, + task=parent_task) + + note.save() + return redirect('/taskManager/' + project_id + '/' + + task_id, {'new_note_added': True}) + else: + return render_to_response( + 'taskManager/note_create.html', {'task_id': task_id}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def note_edit(request, project_id, task_id, note_id): + + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + note = Notes.objects.get(pk=note_id) + + if request.method == 'POST': + + if task.project == proj: + + if note.task == task: + + text = request.POST.get('text', False) + note_title = request.POST.get('note_title', False) + + note.title = note_title + note.text = text + note.save() + + return redirect('/taskManager/' + project_id + '/' + task_id) + else: + return render_to_response( + 'taskManager/note_edit.html', {'note': note}, RequestContext(request)) + +# A4: Insecure Direct Object Reference (IDOR) + + +def note_delete(request, project_id, task_id, note_id): + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + note = Notes.objects.get(pk=note_id) + if proj is not None: + if task is not None and task.project == proj: + if note is not None and note.task == task: + note.delete() + + return redirect('/taskManager/' + project_id + '/' + task_id) + + +def task_details(request, project_id, task_id): + + task = Task.objects.get(pk=task_id) + + logged_in = True + + if not request.user.is_authenticated(): + logged_in = False + + admin_level = False + if request.user.groups.filter(name='admin_g').exists(): + admin_level = True + + pmanager_level = False + if request.user.groups.filter(name='project_managers').exists(): + pmanager_level = True + + assigned_to = False + if task.users_assigned.filter(username=request.user.username).exists(): + assigned_to = True + elif admin_level: + assigned_to = True + elif pmanager_level: + project_users = task.project.users_assigned + if project_users.filter(username=request.user.username).exists(): + assigned_to = True + + return render(request, + 'taskManager/task_details.html', + {'task': task, + 'assigned_to': assigned_to, + 'logged_in': logged_in, + 'completed_task': "Yes" if task.completed else "No"}) + + +def dashboard(request): + sorted_projects = Project.objects.filter( + users_assigned=request.user.id).order_by('title') + sorted_tasks = Task.objects.filter( + users_assigned=request.user.id).order_by('title') + return render(request, + 'taskManager/dashboard.html', + {'project_list': sorted_projects, + 'user': request.user, + 'task_list': sorted_tasks}) + + +def project_list(request): + sorted_projects = Project.objects.filter( + users_assigned=request.user.id).order_by('title') + user_can_edit = request.user.has_perm('project_edit') + user_can_delete = request.user.has_perm('project_delete') + user_can_add = request.user.has_perm('project_add') + return render(request, + 'taskManager/project_list.html', + {'project_list': sorted_projects, + 'user': request.user, + 'user_can_edit': user_can_edit, + 'user_can_delete': user_can_delete, + 'user_can_add': user_can_add}) + + +def task_list(request): + my_task_list = Task.objects.filter(users_assigned=request.user.id) + return render(request, 'taskManager/task_list.html', + {'task_list': my_task_list, 'user': request.user}) + + +def search(request): + query = request.GET.get('q', '') + + my_project_list = Project.objects.filter( + users_assigned=request.user.id).filter( + title__icontains=query).order_by('title') + my_task_list = Task.objects.filter( + users_assigned=request.user.id).filter( + title__icontains=query).order_by('title') + return render(request, + 'taskManager/search.html', + {'q': query, + 'task_list': my_task_list, + 'project_list': my_project_list, + 'user': request.user}) + + +def tutorials(request): + return render(request, + 'taskManager/tutorials.html', + {'user': request.user}) + + +def show_tutorial(request, vuln_id): + if vuln_id in [ + "injection", + "brokenauth", + "xss", + "idor", + "misconfig", + "exposure", + "access", + "csrf", + "components", + "redirects"]: + return render(request, 'taskManager/tutorials/' + vuln_id + '.html') + else: + return render(request, + 'taskManager/tutorials.html', + {'user': request.user}) + + +def profile(request): + return render(request, 'taskManager/profile.html', {'user': request.user}) + +# A4: Insecure Direct Object Reference (IDOR) +# A8: Cross Site Request Forgery (CSRF) + + +@csrf_exempt +def profile_by_id(request, user_id): + user = User.objects.get(pk=user_id) + + if request.method == 'POST': + form = ProfileForm(request.POST, request.FILES) + if form.is_valid(): + print("made it!") + if request.POST.get('username') != user.username: + user.username = request.POST.get('username') + if request.POST.get('first_name') != user.first_name: + user.first_name = request.POST.get('first_name') + if request.POST.get('last_name') != user.last_name: + user.last_name = request.POST.get('last_name') + if request.POST.get('email') != user.email: + user.email = request.POST.get('email') + if request.POST.get('password'): + user.set_password(request.POST.get('password')) + if request.FILES: + user.userprofile.image = store_uploaded_file(user.username + + "." + request.FILES['picture'].name.split(".")[-1], request.FILES['picture']) + user.userprofile.save() + user.save() + messages.info(request, "User Updated") + + return render(request, 'taskManager/profile.html', {'user': user}) + +# A8: Cross Site Request Forgery (CSRF) + +@csrf_exempt +def reset_password(request): + + if request.method == 'POST': + + reset_token = request.POST.get('reset_token') + + try: + userprofile = UserProfile.objects.get(reset_token = reset_token) + if timezone.now() > userprofile.reset_token_expiration: + # Reset the token and move on + userprofile.reset_token_expiration = timezone.now() + userprofile.reset_token = '' + userprofile.save() + return redirect('/taskManager/') + + except UserProfile.DoesNotExist: + messages.warning(request, 'Invalid password reset token') + return render(request, 'taskManager/reset_password.html') + + new_password = request.POST.get('new_password') + confirm_password = request.POST.get('confirm_password') + if new_password != confirm_password: + messages.warning(request, 'Passwords do not match') + return render(request, 'taskManager/reset_password.html') + + # Reset the user's password + remove the tokens + userprofile.user.set_password(new_password) + userprofile.reset_token = '' + userprofile.reset_token_expiration = timezone.now() + userprofile.user.save() + userprofile.save() + + messages.success(request, 'Password has been successfully reset') + return redirect('/taskManager/login') + + return render(request, 'taskManager/reset_password.html') + +# Vuln: Username Enumeration + +@csrf_exempt +def forgot_password(request): + + if request.method == 'POST': + t_email = request.POST.get('email') + + try: + reset_user = User.objects.get(email=t_email) + + # Generate secure random 6 digit number + res = "" + nums = [x for x in os.urandom(6)] + for x in nums: + res = res + str(x) + + reset_token = res[:6] + reset_user.userprofile.reset_token = reset_token + reset_user.userprofile.reset_token_expiration = timezone.now() + datetime.timedelta(minutes=10) + reset_user.userprofile.save() + reset_user.save() + + reset_user.email_user( + "Reset your password", + "You can reset your password at /taskManager/reset_password/. Use \"{}\" as your token. This link will only work for 10 minutes.".format(reset_token)) + + messages.success(request, 'Check your email for a reset token') + return redirect('/taskManager/reset_password') + except User.DoesNotExist: + messages.warning(request, 'Check your email for a reset token') + + return render(request, 'taskManager/forgot_password.html') + +# A8: Cross Site Request Forgery (CSRF) + +@csrf_exempt +def change_password(request): + + if request.method == 'POST': + user = request.user + old_password = request.POST.get('old_password') + new_password = request.POST.get('new_password') + confirm_password = request.POST.get('confirm_password') + + if authenticate(username=user.username, password=old_password): + if new_password == confirm_password: + user.set_password(new_password) + user.save() + messages.success(request, 'Password Updated') + else: + messages.warning(request, 'Passwords do not match') + else: + messages.warning(request, 'Invalid Password') + + return render(request, + 'taskManager/change_password.html', + {'user': request.user}) + + +def tm_settings(request): + settings_list = request.META + return render(request, + 'taskManager/settings.html', + {'settings': settings_list}) diff --git a/example/django.nV/taskManager/wsgi.py b/example/django.nV/taskManager/wsgi.py new file mode 100755 index 00000000..952165c1 --- /dev/null +++ b/example/django.nV/taskManager/wsgi.py @@ -0,0 +1,14 @@ +""" +WSGI config for projmanager project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/ +""" + +import os +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "taskManager.settings") + +from django.core.wsgi import get_wsgi_application +application = get_wsgi_application() From dd9d2dd9c8c966171609b5efee091103e011f877 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 12 Nov 2017 13:49:45 -0800 Subject: [PATCH 166/541] Added 2 more problem files --- .../taskManager/loop_false_negative.py | 23 +++++++++++++++++ .../redirect_maybe_should_trigger_vuln.py | 25 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 example/django.nV/taskManager/loop_false_negative.py create mode 100644 example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py diff --git a/example/django.nV/taskManager/loop_false_negative.py b/example/django.nV/taskManager/loop_false_negative.py new file mode 100644 index 00000000..20a4fb15 --- /dev/null +++ b/example/django.nV/taskManager/loop_false_negative.py @@ -0,0 +1,23 @@ +import os + +from tempfile import NamedTemporaryFile + +from django.shortcuts import redirect +from django.http import HttpResponse + +def download(request): + response = HttpResponse("Hi.") + fork_list = request.POST.getlist('fork_list') + if request.POST and len(fork_list) > 0: + tmp_file = NamedTemporaryFile() + cmd = "tar -czvf %s -C %s " % (tmp_file.name,DOWNLOADS) + for item in fork_list: + cmd += item + " " + os.system(cmd) + + response = HttpResponse(content_type='application/x-gzip') + response['Content-Disposition'] = 'attachment; filename="%s.tar.gz"' % tmp_file.name + response.write(tmp_file.file.read()) + else: + response = redirect("/list/") + return response diff --git a/example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py b/example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py new file mode 100644 index 00000000..66d3fb78 --- /dev/null +++ b/example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py @@ -0,0 +1,25 @@ +from django.shortcuts import render, render_to_response, redirect + + +def task_edit(request, project_id, task_id): + + proj = Project.objects.get(pk=project_id) + task = Task.objects.get(pk=task_id) + + if request.method == 'POST': + + if task.project == proj: + + text = request.POST.get('text', False) + task_title = request.POST.get('task_title', False) + task_completed = request.POST.get('task_completed', False) + + task.title = task_title + task.text = text + task.completed = True if task_completed == "1" else False + task.save() + + return redirect('/taskManager/' + project_id + '/' + task_id) + else: + return render_to_response( + 'taskManager/task_edit.html', {'task': task}, RequestContext(request)) \ No newline at end of file From 41d666524d2d4a54d25a30883215bc679dd83bf4 Mon Sep 17 00:00:00 2001 From: David O'Callaghan Date: Thu, 30 Nov 2017 15:02:58 +0000 Subject: [PATCH 167/541] Ignore .idea dir --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index c99dd699..fd915640 100644 --- a/.gitignore +++ b/.gitignore @@ -65,3 +65,6 @@ target/ .ipynb_checkpoints *~ *# + +#IDE +.idea/ From cab906beb68fb67213c989575dee6dcff7467f26 Mon Sep 17 00:00:00 2001 From: David O'Callaghan Date: Thu, 30 Nov 2017 15:03:52 +0000 Subject: [PATCH 168/541] Basic Django framework helper --- pyt/__main__.py | 8 +++++--- pyt/framework_helper.py | 10 +++++++++- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index fa37a36f..722ea0ee 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -15,8 +15,8 @@ from .framework_helper import ( is_flask_route_function, is_function, - is_function_without_leading_ -) + is_function_without_leading_, + is_django_view_function) from .github_search import scan_github, set_github_api_token from .interprocedural_cfg import interprocedural from .intraprocedural_cfg import intraprocedural @@ -83,7 +83,7 @@ def parse_args(args): help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: Flask(Default) or Every or Pylons.', + help='Choose an adaptor: Flask(Default) or Every or Pylons or Django.', type=str) parser.add_argument('-db', '--create-database', help='Creates a sql file that can be used to' + @@ -226,6 +226,8 @@ def main(command_line_args=sys.argv[1:]): framework_route_criteria = is_function elif args.adaptor and args.adaptor.lower().startswith('p'): framework_route_criteria = is_function_without_leading_ + elif args.adaptor and args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function else: framework_route_criteria = is_flask_route_function # Add all the route functions to the cfg_list diff --git a/pyt/framework_helper.py b/pyt/framework_helper.py index c35470b4..7e6848fd 100644 --- a/pyt/framework_helper.py +++ b/pyt/framework_helper.py @@ -1,7 +1,8 @@ """Provides helper functions that help with determining if a function is a route function.""" import ast -from .ast_helper import get_call_names +from pyt.base_cfg import Function +from .ast_helper import get_call_names, Arguments def is_function(function): @@ -18,6 +19,13 @@ def is_flask_route_function(ast_node): return False +def is_django_view_function(ast_node): + arguments = Arguments(ast_node.args) + if 'request' in arguments: + return True + return False + + def is_function_without_leading_(ast_node): if ast_node.name.startswith('_'): return False From 88265fbbba103e0f9985353ffa5b55a94a19e0bb Mon Sep 17 00:00:00 2001 From: David O'Callaghan Date: Sat, 2 Dec 2017 15:27:14 +0000 Subject: [PATCH 169/541] Add example Django class-based view and tests --- example/example_inputs/django_views.py | 17 ++++++++ .../flask_function_and_normal_functions.py | 3 ++ pyt/framework_helper.py | 6 +-- tests/framework_helper_test.py | 39 ++++++++++++++++--- 4 files changed, 57 insertions(+), 8 deletions(-) create mode 100644 example/example_inputs/django_views.py diff --git a/example/example_inputs/django_views.py b/example/example_inputs/django_views.py new file mode 100644 index 00000000..8bb17e0c --- /dev/null +++ b/example/example_inputs/django_views.py @@ -0,0 +1,17 @@ +def django_view_function(request, x): + return x + + +class DjangoViewClass(object): + def __init__(self): + pass + + @classmethod + def as_view(cls): + def view_function(request, x): + return x + return view_function + + +# in practice, this would be called in a Django URLconf file +view = DjangoViewClass.as_view() diff --git a/example/example_inputs/flask_function_and_normal_functions.py b/example/example_inputs/flask_function_and_normal_functions.py index bdbb783e..c816b56b 100644 --- a/example/example_inputs/flask_function_and_normal_functions.py +++ b/example/example_inputs/flask_function_and_normal_functions.py @@ -8,4 +8,7 @@ def _hidden_foo(): def flask_function(x): return x +def django_function(request, x): + return x + print('nothing') diff --git a/pyt/framework_helper.py b/pyt/framework_helper.py index 7e6848fd..29c7cccc 100644 --- a/pyt/framework_helper.py +++ b/pyt/framework_helper.py @@ -20,9 +20,9 @@ def is_flask_route_function(ast_node): def is_django_view_function(ast_node): - arguments = Arguments(ast_node.args) - if 'request' in arguments: - return True + if len(ast_node.args.args): + first_arg_name = ast_node.args.args[0].arg + return first_arg_name == 'request' return False diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py index 86d2bb1d..f18d2985 100644 --- a/tests/framework_helper_test.py +++ b/tests/framework_helper_test.py @@ -3,7 +3,8 @@ from pyt.framework_helper import ( is_flask_route_function, is_function, - is_function_without_leading_ + is_function_without_leading_, + is_django_view_function ) class FrameworkEngineTest(BaseTestCase): @@ -32,8 +33,8 @@ def test_find_every_function_without_leading_underscore(self): for func in funcs: if is_function_without_leading_(func.node): i = i + 1 - # So it is supposed to be 2, because we count all functions without a leading underscore - self.assertEqual(i, 2) + # So it is supposed to be 3, because we count all functions without a leading underscore + self.assertEqual(i, 3) def test_find_every_function(self): self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') @@ -45,5 +46,33 @@ def test_find_every_function(self): for func in funcs: if is_function(func.node): i = i + 1 - # So it is supposed to be 3, because we count all functions - self.assertEqual(len(funcs), 3) + # So it is supposed to be 4, because we count all functions + self.assertEqual(len(funcs), 4) + + def test_find_django_functions(self): + self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + + cfg_list = [self.cfg] + funcs = _get_func_nodes() + + i = 0 + for func in funcs: + if is_django_view_function(func.node): + self.assertEqual(func.node.name, 'django_function') + i = i + 1 + # So it is supposed to be 1 + self.assertEqual(i, 1) + + def test_find_django_views(self): + self.cfg_create_from_file('example/example_inputs/django_views.py') + + cfg_list = [self.cfg] + funcs = _get_func_nodes() + + i = 0 + for func in funcs: + if is_django_view_function(func.node): + self.assertIn('view_function', func.node.name) + i = i + 1 + # So it is supposed to be 2 + self.assertEqual(i, 2) From efbdbd745dc907ed15e713c57129a1ff1b24cb26 Mon Sep 17 00:00:00 2001 From: David O'Callaghan Date: Tue, 12 Dec 2017 21:50:07 +0000 Subject: [PATCH 170/541] Connect all arg tainted nodes to following nodes. Fixes #73 --- pyt/framework_adaptor.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 7e00ddfe..c56dfe50 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -47,9 +47,7 @@ def get_func_cfg_with_tainted_args(self, definition): function_entry_node.connect(tainted_node) # 1 and not 0 so that Entry Node remains first in the list func_cfg.nodes.insert(1, tainted_node) - - first_arg = func_cfg.nodes[len(args)] - first_arg.connect(first_node_after_args) + tainted_node.connect(first_node_after_args) return func_cfg From 738a0f817e890e012fccfad14c0b413d32395bc7 Mon Sep 17 00:00:00 2001 From: David O'Callaghan Date: Tue, 12 Dec 2017 22:09:28 +0000 Subject: [PATCH 171/541] Added Django trigger words and tests - Reworded description of framework function parameter --- example/vulnerable_code/django_XSS.py | 6 +++ .../django_trigger_words.pyt | 32 +++++++++++++++ pyt/vulnerabilities.py | 2 +- tests/vulnerabilities_test.py | 40 ++++++++++++++++++- 4 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 example/vulnerable_code/django_XSS.py create mode 100644 pyt/trigger_definitions/django_trigger_words.pyt diff --git a/example/vulnerable_code/django_XSS.py b/example/vulnerable_code/django_XSS.py new file mode 100644 index 00000000..6dd9560b --- /dev/null +++ b/example/vulnerable_code/django_XSS.py @@ -0,0 +1,6 @@ +from django.shortcuts import render + + +def xss1(request, param): + return render(request, 'templates/xss.html', {'param': param}) + diff --git a/pyt/trigger_definitions/django_trigger_words.pyt b/pyt/trigger_definitions/django_trigger_words.pyt new file mode 100644 index 00000000..53b54f66 --- /dev/null +++ b/pyt/trigger_definitions/django_trigger_words.pyt @@ -0,0 +1,32 @@ +sources: +POST.get( +GET.get( +META.get( +POST[ +GET[ +META[ +FILES[ +.data +form[ +form( +mark_safe( +cookies[ +files[ +SQLAlchemy + +sinks: +replace( -> escape +send_file( -> '..', '..' in +execute( +system( +filter( +subprocess.call( +render_template( +set_cookie( +redirect( +url_for( +flash( +jsonify( +render( +render_to_response( +Popen( \ No newline at end of file diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index a180df5b..c9edcf94 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -68,7 +68,7 @@ def identify_triggers(cfg, sources, sinks, lattice): """ assignment_nodes = filter_cfg_nodes(cfg, AssignmentNode) tainted_nodes = filter_cfg_nodes(cfg, TaintedNode) - tainted_trigger_nodes = [TriggerNode('Flask function URL parameter', None, + tainted_trigger_nodes = [TriggerNode('Framework function URL parameter', None, node) for node in tainted_nodes] sources_in_file = find_triggers(assignment_nodes, sources) sources_in_file.extend(tainted_trigger_nodes) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index ccdd05c2..491a382b 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -6,7 +6,7 @@ from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import is_flask_route_function +from pyt.framework_helper import is_flask_route_function, is_django_view_function from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -318,7 +318,7 @@ def test_XSS_url_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_url.py - > User input at line 4, trigger word "Flask function URL parameter": + > User input at line 4, trigger word "Framework function URL parameter": url Reassigned in: File: example/vulnerable_code/XSS_url.py @@ -454,3 +454,39 @@ def test_XSS_variable_multiple_assign_result(self): """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + +class EngineDjangoTest(BaseTestCase): + def run_empty(self): + return + + def run_analysis(self, path): + self.cfg_create_from_file(path) + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_django_view_function) + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + + trigger_word_file = os.path.join('pyt', 'trigger_definitions', 'django_trigger_words.pyt') + + return vulnerabilities.find_vulnerabilities(cfg_list, ReachingDefinitionsTaintAnalysis, trigger_word_file=trigger_word_file) + + def test_django_view_param(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/django_XSS.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=2) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/django_XSS.py + > User input at line 4, trigger word "Framework function URL parameter": + param + Reassigned in: + File: example/vulnerable_code/django_XSS.py + > Line 5: ret_xss1 = ¤call_1 + File: example/vulnerable_code/django_XSS.py + > reaches line 5, trigger word "render(": + ¤call_1 = ret_render(request, 'templates/xss.html', 'param'param) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From 90f548894ee59123a219cc43282c2e12a22a662c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 31 Dec 2017 07:10:25 -0800 Subject: [PATCH 172/541] Style changes --- ...y => django_flask_and_normal_functions.py} | 0 pyt/__main__.py | 23 ++++++++++--------- pyt/framework_helper.py | 3 +-- tests/framework_helper_test.py | 11 +++++---- tests/vulnerabilities_test.py | 10 ++++---- 5 files changed, 24 insertions(+), 23 deletions(-) rename example/example_inputs/{flask_function_and_normal_functions.py => django_flask_and_normal_functions.py} (100%) diff --git a/example/example_inputs/flask_function_and_normal_functions.py b/example/example_inputs/django_flask_and_normal_functions.py similarity index 100% rename from example/example_inputs/flask_function_and_normal_functions.py rename to example/example_inputs/django_flask_and_normal_functions.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 722ea0ee..c5ca05c5 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -13,10 +13,11 @@ from .fixed_point import analyse from .framework_adaptor import FrameworkAdaptor from .framework_helper import ( + is_django_view_function, is_flask_route_function, is_function, - is_function_without_leading_, - is_django_view_function) + is_function_without_leading_ +) from .github_search import scan_github, set_github_api_token from .interprocedural_cfg import interprocedural from .intraprocedural_cfg import intraprocedural @@ -83,7 +84,7 @@ def parse_args(args): help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: Flask(Default) or Every or Pylons or Django.', + help='Choose an adaptor: Flask(Default), Django, Every or Pylons', type=str) parser.add_argument('-db', '--create-database', help='Creates a sql file that can be used to' + @@ -222,14 +223,14 @@ def main(command_line_args=sys.argv[1:]): local_modules, path) cfg_list.append(interprocedural_cfg) - if args.adaptor and args.adaptor.lower().startswith('e'): - framework_route_criteria = is_function - elif args.adaptor and args.adaptor.lower().startswith('p'): - framework_route_criteria = is_function_without_leading_ - elif args.adaptor and args.adaptor.lower().startswith('d'): - framework_route_criteria = is_django_view_function - else: - framework_route_criteria = is_flask_route_function + framework_route_criteria = is_flask_route_function + if args.adaptor: + if args.adaptor.lower().startswith('e'): + framework_route_criteria = is_function + elif args.adaptor.lower().startswith('p'): + framework_route_criteria = is_function_without_leading_ + elif args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function # Add all the route functions to the cfg_list FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) diff --git a/pyt/framework_helper.py b/pyt/framework_helper.py index 29c7cccc..fd5996fa 100644 --- a/pyt/framework_helper.py +++ b/pyt/framework_helper.py @@ -1,8 +1,7 @@ """Provides helper functions that help with determining if a function is a route function.""" import ast -from pyt.base_cfg import Function -from .ast_helper import get_call_names, Arguments +from .ast_helper import get_call_names def is_function(function): diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py index f18d2985..db209c8b 100644 --- a/tests/framework_helper_test.py +++ b/tests/framework_helper_test.py @@ -1,15 +1,16 @@ from .base_test_case import BaseTestCase from pyt.framework_adaptor import _get_func_nodes from pyt.framework_helper import ( + is_django_view_function, is_flask_route_function, is_function, is_function_without_leading_, - is_django_view_function ) + class FrameworkEngineTest(BaseTestCase): def test_find_flask_functions(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -24,7 +25,7 @@ def test_find_flask_functions(self): def test_find_every_function_without_leading_underscore(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -37,7 +38,7 @@ def test_find_every_function_without_leading_underscore(self): self.assertEqual(i, 3) def test_find_every_function(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -50,7 +51,7 @@ def test_find_every_function(self): self.assertEqual(len(funcs), 4) def test_find_django_functions(self): - self.cfg_create_from_file('example/example_inputs/flask_function_and_normal_functions.py') + self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 491a382b..d3001869 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -6,7 +6,7 @@ from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import is_flask_route_function, is_django_view_function +from pyt.framework_helper import is_django_view_function, is_flask_route_function from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -318,7 +318,7 @@ def test_XSS_url_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_url.py - > User input at line 4, trigger word "Framework function URL parameter": + > User input at line 4, trigger word "Framework function URL parameter": url Reassigned in: File: example/vulnerable_code/XSS_url.py @@ -480,13 +480,13 @@ def test_django_view_param(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/django_XSS.py - > User input at line 4, trigger word "Framework function URL parameter": + > User input at line 4, trigger word "Framework function URL parameter": param - Reassigned in: + Reassigned in: File: example/vulnerable_code/django_XSS.py > Line 5: ret_xss1 = ¤call_1 File: example/vulnerable_code/django_XSS.py - > reaches line 5, trigger word "render(": + > reaches line 5, trigger word "render(": ¤call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From 62ede1f1580faad8f4b9dc186948448043b55852 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 25 Feb 2018 15:46:37 -0800 Subject: [PATCH 173/541] [Flask Trigger Words] Fix .get false-positive, change to request.args.get --- pyt/interprocedural_cfg.py | 42 +++++++++---------- .../flask_trigger_words.pyt | 2 +- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 90e7ff0f..b92d7949 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -36,27 +36,27 @@ SavedVariable = namedtuple('SavedVariable', 'LHS RHS') -BUILTINS = set(['get', - 'Flask', - 'run', - 'get', - 'replace', - 'read', - 'set_cookie', - 'make_response', - 'SQLAlchemy', - 'Column', - 'execute', - 'sessionmaker', - 'Session', - 'filter', - 'execute', - 'call', - 'render_template', - 'redirect', - 'url_for', - 'flash', - 'jsonify']) +BUILTINS = ( + 'get', + 'Flask', + 'run', + 'replace', + 'read', + 'set_cookie', + 'make_response', + 'SQLAlchemy', + 'Column', + 'execute', + 'sessionmaker', + 'Session', + 'filter', + 'call', + 'render_template', + 'redirect', + 'url_for', + 'flash', + 'jsonify' +) class InterproceduralVisitor(Visitor): diff --git a/pyt/trigger_definitions/flask_trigger_words.pyt b/pyt/trigger_definitions/flask_trigger_words.pyt index c5b53976..d7555a87 100644 --- a/pyt/trigger_definitions/flask_trigger_words.pyt +++ b/pyt/trigger_definitions/flask_trigger_words.pyt @@ -1,5 +1,5 @@ sources: -get( +request.args.get( .data form[ form( From 8aa41ba3f5079cf5cbcb580005cde133491b0871 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 25 Feb 2018 16:26:26 -0800 Subject: [PATCH 174/541] [Style] Change some function calls to be have shorter line length --- pyt/base_cfg.py | 181 +++++++--- pyt/interprocedural_cfg.py | 394 +++++++++++++-------- tests/vulnerabilities_across_files_test.py | 2 +- tests/vulnerabilities_test.py | 16 +- 4 files changed, 389 insertions(+), 204 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 9ea0a885..274329d2 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -180,7 +180,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num path(string): Current filename. """ super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) - self.args = [] + self.args = list() self.inner_most_call = self @@ -512,7 +512,12 @@ def visit_Try(self, node): name = handler.type.id except AttributeError: name = '' - handler_node = self.append_node(Node('except ' + name + ':', handler, line_number=handler.lineno, path=self.filenames[-1])) + handler_node = self.append_node(Node( + 'except ' + name + ':', + handler, + line_number=handler.lineno, + path=self.filenames[-1] + )) for body_node in body.last_statements: body_node.connect(handler_node) handler_body = self.stmt_star_handler(handler.body) @@ -578,7 +583,13 @@ def assign_tuple_target(self, node, right_hand_side_variables): label.result += ' = ' label.visit(value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode( + label.result, + self.extract_left_hand_side(target), + ast.Assign(target, value), + right_hand_side_variables, + line_number=node.lineno, path=self.filenames[-1] + ))) self.connect_nodes(new_assignment_nodes) @@ -593,7 +604,13 @@ def assign_multi_target(self, node, right_hand_side_variables): left_hand_side = label.result label.result += ' = ' label.visit(node.value) - new_assignment_nodes.append(self.append_node(AssignmentNode(label.result, left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1]))) + new_assignment_nodes.append(self.append_node(AssignmentNode( + label.result, + left_hand_side, + ast.Assign(target, node.value), + right_hand_side_variables, + line_number=node.lineno, path=self.filenames[-1] + ))) self.connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node @@ -617,7 +634,14 @@ def visit_Assign(self, node): print('Assignment not properly handled.', 'Could result in not finding a vulnerability.', 'Assignment:', label.result) - return self.append_node(AssignmentNode(label.result, label.result, node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode( + label.result, + label.result, + node, + rhs_visitor.result, + line_number=node.lineno, + path=self.filenames[-1] + )) elif len(node.targets) > 1: # x = y = 3 return self.assign_multi_target(node, rhs_visitor.result) @@ -629,7 +653,14 @@ def visit_Assign(self, node): else: # x = 4 label = LabelVisitor() label.visit(node) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode( + label.result, + self.extract_left_hand_side(node.targets[0]), + node, + rhs_visitor.result, + line_number=node.lineno, + path=self.filenames[-1] + )) def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" @@ -645,24 +676,28 @@ def assignment_call_node(self, left_hand_label, ast_node): call_label = call.left_hand_side if isinstance(call, BBorBInode): - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, - left_hand_label, - ast_node, - [call.left_hand_side], - vv_result=vars_visitor.result, - line_number=ast_node.lineno, - path=self.filenames[-1], - call_node=call) + call_assignment = AssignmentCallNode( + left_hand_label + ' = ' + call_label, + left_hand_label, + ast_node, + [call.left_hand_side], + vv_result=vars_visitor.result, + line_number=ast_node.lineno, + path=self.filenames[-1], + call_node=call + ) # Assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer elif isinstance(call, AssignmentNode): - call_assignment = AssignmentCallNode(left_hand_label + ' = ' + call_label, - left_hand_label, - ast_node, - [call.left_hand_side], - vv_result=[], - line_number=ast_node.lineno, - path=self.filenames[-1], - call_node=call) + call_assignment = AssignmentCallNode( + left_hand_label + ' = ' + call_label, + left_hand_label, + ast_node, + [call.left_hand_side], + vv_result=[], + line_number=ast_node.lineno, + path=self.filenames[-1], + call_node=call + ) call.connect(call_assignment) self.nodes.append(call_assignment) @@ -677,7 +712,14 @@ def visit_AugAssign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - return self.append_node(AssignmentNode(label.result, self.extract_left_hand_side(node.target), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(AssignmentNode( + label.result, + self.extract_left_hand_side(node.target), + node, + rhs_visitor.result, + line_number=node.lineno, + path=self.filenames[-1] + )) def loop_node_skeleton(self, test, node): """Common handling of looped structures, while and for.""" @@ -709,7 +751,12 @@ def visit_While(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.test) - test = self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + test = self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) self.add_while_label(test) @@ -725,7 +772,12 @@ def visit_For(self, node): target_label = LabelVisitor() target = target_label.visit(node.target) - for_node = self.append_node(Node("for " + target_label.result + " in " + iterator_label.result + ':', node, line_number=node.lineno, path=self.filenames[-1])) + for_node = self.append_node(Node( + "for " + target_label.result + " in " + iterator_label.result + ':', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) if isinstance(node.iter, ast.Call) and get_call_names_as_string(node.iter.func) in self.function_names: last_node = self.visit(node.iter) @@ -774,13 +826,15 @@ def add_blackbox_or_builtin_call(self, node, blackbox): LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + label.result[:index] + '(' - call_node = BBorBInode("", - LHS, - [], - line_number=node.lineno, - path=self.filenames[-1]) - visual_args = [] - rhs_vars = [] + call_node = BBorBInode( + label="", + left_hand_side=LHS, + right_hand_side_variables=[], + line_number=node.lineno, + path=self.filenames[-1] + ) + visual_args = list() + rhs_vars = list() last_return_value_of_nested_call = None for arg in itertools.chain(node.args, node.keywords): @@ -852,7 +906,12 @@ def visit_With(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.items[0]) - with_node = self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + with_node = self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) connect_statements = self.stmt_star_handler(node.body) with_node.connect(connect_statements.first_statement) return ControlFlowNode(with_node, connect_statements.last_statements, connect_statements.break_statements) @@ -864,43 +923,83 @@ def visit_Break(self, node): return self.append_node(BreakNode(node, line_number=node.lineno, path=self.filenames[-1])) def visit_Pass(self, node): - return self.append_node(Node('pass', node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + 'pass', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Continue(self, node): - return self.append_node(Node('continue', node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + 'continue', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Delete(self, node): labelVisitor = LabelVisitor() for expr in node.targets: labelVisitor.visit(expr) - return self.append_node(Node('del ' + labelVisitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + 'del ' + labelVisitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Assert(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.test) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Attribute(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Global(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Subscript(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Tuple(self, node): label_visitor = LabelVisitor() label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(Node( + label_visitor.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index b92d7949..f0e574df 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -161,21 +161,27 @@ def add_to_definitions(self, node): parent_definitions = self.get_parent_definitions() if parent_definitions: - parent_qualified_name = '.'.join(parent_definitions.classes + - [node.name]) - parent_definition = ModuleDefinition(parent_definitions, - parent_qualified_name, - local_definitions.module_name, - self.filenames[-1]) + parent_qualified_name = '.'.join( + parent_definitions.classes + + [node.name] + ) + parent_definition = ModuleDefinition( + parent_definitions, + parent_qualified_name, + local_definitions.module_name, + self.filenames[-1] + ) parent_definition.node = node parent_definitions.append_if_local_or_in_imports(parent_definition) local_qualified_name = '.'.join(local_definitions.classes + [node.name]) - local_definition = LocalModuleDefinition(local_definitions, - local_qualified_name, - None, - self.filenames[-1]) + local_definition = LocalModuleDefinition( + local_definitions, + local_qualified_name, + None, + self.filenames[-1] + ) local_definition.node = node local_definitions.append_if_local_or_in_imports(local_definition) @@ -203,18 +209,22 @@ def visit_Return(self, node): if isinstance(node.value, ast.Call): return_value_of_call = self.visit(node.value) - return_node = ReturnNode(LHS + ' = ' + return_value_of_call.left_hand_side, - LHS, return_value_of_call.left_hand_side, - node, line_number=node.lineno, - path=self.filenames[-1]) + return_node = ReturnNode( + LHS + ' = ' + return_value_of_call.left_hand_side, + LHS, return_value_of_call.left_hand_side, + node, line_number=node.lineno, + path=self.filenames[-1] + ) return_value_of_call.connect(return_node) self.nodes.append(return_node) return return_node - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, rhs_visitor.result, - node, line_number=node.lineno, - path=self.filenames[-1])) + return self.append_node(ReturnNode( + LHS + ' = ' + label.result, + LHS, rhs_visitor.result, + node, line_number=node.lineno, + path=self.filenames[-1] + )) def visit_Yield(self, node): label = LabelVisitor() @@ -228,10 +238,12 @@ def visit_Yield(self, node): this_function_name = self.function_return_stack[-1] LHS = 'yield_' + this_function_name - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, rhs_visitor.result, - node, line_number=node.lineno, - path=self.filenames[-1])) + return self.append_node(ReturnNode( + LHS + ' = ' + label.result, + LHS, rhs_visitor.result, + node, line_number=node.lineno, + path=self.filenames[-1]) + ) def save_local_scope(self, line_number, saved_function_call_index): """Save the local scope before entering a function call by saving all the LHS's of assignments so far. @@ -260,9 +272,11 @@ def save_local_scope(self, line_number, saved_function_call_index): assignment.left_hand_side previous_node = self.nodes[-1] - saved_scope_node = RestoreNode(save_name + ' = ' + assignment.left_hand_side, - save_name, [assignment.left_hand_side], - line_number=line_number, path=self.filenames[-1]) + saved_scope_node = RestoreNode( + save_name + ' = ' + assignment.left_hand_side, + save_name, [assignment.left_hand_side], + line_number=line_number, path=self.filenames[-1] + ) if not first_node: first_node = saved_scope_node @@ -330,11 +344,13 @@ def save_def_args_in_temp(self, return_value_of_nested_call = None if isinstance(call_arg, ast.Call): return_value_of_nested_call = self.visit(call_arg) - restore_node = RestoreNode(def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, - def_arg_temp_name, - return_value_of_nested_call.left_hand_side, - line_number=line_number, - path=self.filenames[-1]) + restore_node = RestoreNode( + def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, + def_arg_temp_name, + return_value_of_nested_call.left_hand_side, + line_number=line_number, + path=self.filenames[-1] + ) if return_value_of_nested_call in self.blackbox_assignments: self.blackbox_assignments.add(restore_node) else: @@ -342,11 +358,13 @@ def save_def_args_in_temp(self, call_arg_label_visitor.visit(call_arg) call_arg_rhs_visitor = RHSVisitor() call_arg_rhs_visitor.visit(call_arg) - restore_node = RestoreNode(def_arg_temp_name + ' = ' + call_arg_label_visitor.result, - def_arg_temp_name, - call_arg_rhs_visitor.result, - line_number=line_number, - path=self.filenames[-1]) + restore_node = RestoreNode( + def_arg_temp_name + ' = ' + call_arg_label_visitor.result, + def_arg_temp_name, + call_arg_rhs_visitor.result, + line_number=line_number, + path=self.filenames[-1] + ) # If there are no saved variables, then this is the first node if not first_node: @@ -403,11 +421,13 @@ def create_local_scope_from_def_args(self, for i in range(len(call_args)): def_arg_local_name = def_args[i] def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] - local_scope_node = RestoreNode(def_arg_local_name + ' = ' + def_arg_temp_name, - def_arg_local_name, - [def_arg_temp_name], - line_number=line_number, - path=self.filenames[-1]) + local_scope_node = RestoreNode( + def_arg_local_name + ' = ' + def_arg_temp_name, + def_arg_local_name, + [def_arg_temp_name], + line_number=line_number, + path=self.filenames[-1] + ) # Chain the local scope nodes together self.nodes[-1].connect(local_scope_node) self.nodes.append(local_scope_node) @@ -431,18 +451,22 @@ def restore_saved_local_scope(self, # Is var.RHS a call argument? if var.RHS in args_mapping: # If so, use the corresponding definition argument for the RHS of the label. - restore_nodes.append(RestoreNode(var.RHS + ' = ' + args_mapping[var.RHS], - var.RHS, - [var.LHS], - line_number=line_number, - path=self.filenames[-1])) + restore_nodes.append(RestoreNode( + var.RHS + ' = ' + args_mapping[var.RHS], + var.RHS, + [var.LHS], + line_number=line_number, + path=self.filenames[-1] + )) else: # Create a node for e.g. foo = save_1_foo - restore_nodes.append(RestoreNode(var.RHS + ' = ' + var.LHS, - var.RHS, - [var.LHS], - line_number=line_number, - path=self.filenames[-1])) + restore_nodes.append(RestoreNode( + var.RHS + ' = ' + var.LHS, + var.RHS, + [var.LHS], + line_number=line_number, + path=self.filenames[-1] + )) # Chain the restore nodes for node, successor in zip(restore_nodes, restore_nodes[1:]): @@ -470,11 +494,13 @@ def return_handler(self, call_node, function_nodes, saved_function_call_index, f # Create e.g. ¤call_1 = ret_func_foo RestoreNode LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + get_call_names_as_string(call_node.func) - return_node = RestoreNode(LHS + ' = ' + RHS, - LHS, - [RHS], - line_number=call_node.lineno, - path=self.filenames[-1]) + return_node = RestoreNode( + LHS + ' = ' + RHS, + LHS, + [RHS], + line_number=call_node.lineno, + path=self.filenames[-1] + ) return_node.first_node = first_node self.nodes[-1].connect(return_node) @@ -512,28 +538,41 @@ def process_function(self, call_node, definition): def_node = definition.node - saved_variables, first_node = self.save_local_scope(def_node.lineno, - saved_function_call_index) - - args_mapping, first_node = self.save_def_args_in_temp(call_node.args, - Arguments(def_node.args), - call_node.lineno, - saved_function_call_index, - first_node) + saved_variables, first_node = self.save_local_scope( + def_node.lineno, + saved_function_call_index + ) + + args_mapping, first_node = self.save_def_args_in_temp( + call_node.args, + Arguments(def_node.args), + call_node.lineno, + saved_function_call_index, + first_node + ) self.filenames.append(definition.path) - self.create_local_scope_from_def_args(call_node.args, - Arguments(def_node.args), - def_node.lineno, - saved_function_call_index) - function_nodes, first_node = self.visit_and_get_function_nodes(definition, first_node) + self.create_local_scope_from_def_args( + call_node.args, + Arguments(def_node.args), + def_node.lineno, + saved_function_call_index + ) + function_nodes, first_node = self.visit_and_get_function_nodes( + definition, + first_node + ) self.filenames.pop() # Should really probably move after restore_saved_local_scope!!! - self.restore_saved_local_scope(saved_variables, - args_mapping, - def_node.lineno) - self.return_handler(call_node, - function_nodes, - saved_function_call_index, - first_node) + self.restore_saved_local_scope( + saved_variables, + args_mapping, + def_node.lineno + ) + self.return_handler( + call_node, + function_nodes, + saved_function_call_index, + first_node + ) self.function_return_stack.pop() return self.nodes[-1] @@ -628,10 +667,14 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m if new_module_definitions.is_init: for def_ in new_module_definitions.definitions: - module_def_alias = handle_aliases_in_init_files(def_.name, - new_module_definitions.import_alias_mapping) - parent_def_alias = handle_aliases_in_init_files(def_.name, - parent_definitions.import_alias_mapping) + module_def_alias = handle_aliases_in_init_files( + def_.name, + new_module_definitions.import_alias_mapping + ) + parent_def_alias = handle_aliases_in_init_files( + def_.name, + parent_definitions.import_alias_mapping + ) # They should never both be set assert not (module_def_alias and parent_def_alias) @@ -655,29 +698,37 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m alias = handle_fdid_aliases(module_or_package_name, import_alias_mapping) if alias: module_or_package_name = alias - parent_definition = ModuleDefinition(parent_definitions, - qualified_name, - module_or_package_name, - self.filenames[-1]) + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + module_or_package_name, + self.filenames[-1] + ) else: - parent_definition = ModuleDefinition(parent_definitions, - qualified_name, - None, - self.filenames[-1]) + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + None, + self.filenames[-1] + ) else: qualified_name = '.'.join([module_or_package_name, def_name]) - parent_definition = ModuleDefinition(parent_definitions, - qualified_name, - parent_definitions.module_name, - self.filenames[-1]) + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + parent_definitions.module_name, + self.filenames[-1] + ) parent_definition.node = def_.node parent_definitions.definitions.append(parent_definition) else: - parent_definition = ModuleDefinition(parent_definitions, - def_name, - parent_definitions.module_name, - self.filenames[-1]) + parent_definition = ModuleDefinition( + parent_definitions, + def_name, + parent_definitions.module_name, + self.filenames[-1] + ) parent_definition.node = def_.node parent_definitions.definitions.append(parent_definition) @@ -694,40 +745,52 @@ def from_directory_import(self, module, real_names, local_names, import_alias_ma if init_exists and not skip_init: package_name = os.path.split(module_path)[1] - return self.add_module((module[0], init_file_location), - package_name, - local_names, - import_alias_mapping, - is_init=True, - from_from=True) + return self.add_module( + (module[0], init_file_location), + package_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True + ) for real_name in real_names: full_name = os.path.join(module_path, real_name) if os.path.isdir(full_name): new_init_file_location = os.path.join(full_name, '__init__.py') if os.path.isfile(new_init_file_location): - self.add_module((real_name, new_init_file_location), - real_name, - local_names, - import_alias_mapping, - is_init=True, - from_from=True, - from_fdid=True) + self.add_module( + (real_name, new_init_file_location), + real_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True, + from_fdid=True + ) else: raise Exception("from anything import directory needs an __init__.py file in directory") else: file_module = (real_name, full_name + '.py') - self.add_module(file_module, real_name, local_names, import_alias_mapping, from_from=True) + self.add_module( + file_module, + real_name, + local_names, + import_alias_mapping, + from_from=True + ) def import_package(self, module, module_name, local_name, import_alias_mapping): module_path = module[1] init_file_location = os.path.join(module_path, '__init__.py') init_exists = os.path.isfile(init_file_location) if init_exists: - return self.add_module((module[0], init_file_location), - module_name, - local_name, - import_alias_mapping, - is_init=True) + return self.add_module( + (module[0], init_file_location), + module_name, + local_name, + import_alias_mapping, + is_init=True + ) else: raise Exception("import directory needs an __init__.py file") @@ -736,25 +799,33 @@ def visit_Import(self, node): for module in self.local_modules: if name.name == module[0]: if os.path.isdir(module[1]): - return self.import_package(module, - name, - name.asname, - retrieve_import_alias_mapping(node.names)) - return self.add_module(module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names)) + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) for module in self.project_modules: if name.name == module[0]: if os.path.isdir(module[1]): - return self.import_package(module, - name, - name.asname, - retrieve_import_alias_mapping(node.names)) - return self.add_module(module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names)) + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) return IgnoredNode() def handle_relative_import(self, node): @@ -793,15 +864,20 @@ def handle_relative_import(self, node): # Is it a file? if name_with_dir.endswith('.py'): - return self.add_module((node.module, name_with_dir), None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True) - return self.from_directory_import((node.module, name_with_dir), - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - skip_init=skip_init) + return self.add_module( + (node.module, name_with_dir), + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) + return self.from_directory_import( + (node.module, name_with_dir), + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + skip_init=skip_init + ) def visit_ImportFrom(self, node): # Is it relative? @@ -811,25 +887,35 @@ def visit_ImportFrom(self, node): for module in self.local_modules: if node.module == module[0]: if os.path.isdir(module[1]): - return self.from_directory_import(module, - not_as_alias_handler(node.names), - as_alias_handler(node.names)) - return self.add_module(module, None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True) + return self.from_directory_import( + module, + not_as_alias_handler(node.names), + as_alias_handler(node.names) + ) + return self.add_module( + module, + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) for module in self.project_modules: name = module[0] if node.module == name: if os.path.isdir(module[1]): - return self.from_directory_import(module, - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names)) - return self.add_module(module, None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True) + return self.from_directory_import( + module, + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) return IgnoredNode() diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 6a9ec1bf..0c9a6153 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -52,7 +52,7 @@ def test_blackbox_library_call(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code_across_files/blackbox_library_call.py - > User input at line 12, trigger word "get(": + > User input at line 12, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('suggestion') Reassigned in: File: example/vulnerable_code_across_files/blackbox_library_call.py diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index d3001869..aeb39478 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -171,7 +171,7 @@ def test_XSS_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS.py @@ -213,7 +213,7 @@ def test_path_traversal_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal.py - > User input at line 15, trigger word "get(": + > User input at line 15, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal.py @@ -251,7 +251,7 @@ def test_path_traversal_sanitised_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal_sanitised.py - > User input at line 8, trigger word "get(": + > User input at line 8, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal_sanitised.py @@ -276,7 +276,7 @@ def test_sql_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/sql/sqli.py - > User input at line 26, trigger word "get(": + > User input at line 26, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/sql/sqli.py @@ -346,7 +346,7 @@ def test_XSS_reassign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_reassign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_reassign.py @@ -372,7 +372,7 @@ def test_XSS_sanitised_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_sanitised.py - > User input at line 7, trigger word "get(": + > User input at line 7, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_sanitised.py @@ -405,7 +405,7 @@ def test_XSS_variable_assign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_assign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_assign.py @@ -431,7 +431,7 @@ def test_XSS_variable_multiple_assign_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_multiple_assign.py - > User input at line 6, trigger word "get(": + > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_multiple_assign.py From c0186b8b731f7e0a13a6ec4ba85c13f76ecaa9ee Mon Sep 17 00:00:00 2001 From: Alexander Afanasyev Date: Mon, 26 Feb 2018 17:04:00 -0500 Subject: [PATCH 175/541] Added change directory installation step --- README.rst | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index ac1cd553..e9338d60 100644 --- a/README.rst +++ b/README.rst @@ -42,8 +42,9 @@ Install ======= 1. git clone https://github.com/python-security/pyt.git - 2. python setup.py install - 3. pyt -h + 2. cd pyt/ + 3. python setup.py install + 4. pyt -h Usage from Source From 83574dbb21305791919e3a2f16247a9899e52a16 Mon Sep 17 00:00:00 2001 From: MacBox7 Date: Tue, 27 Feb 2018 12:41:39 +0530 Subject: [PATCH 176/541] setup.py, requriements.txt:Update requests version Update necessory to work with other modules installed in same environment and using latest requests module. --- requirements.txt | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/requirements.txt b/requirements.txt index 2c02ff62..30405636 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ graphviz==0.4.10 -requests==2.10.0 +requests~=2.12 GitPython==2.0.8 coverage>=4.0, <4.4 diff --git a/setup.py b/setup.py index 35def26c..2bdb14dc 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,7 @@ ], install_requires=[ 'graphviz==0.4.10', - 'requests==2.10.0', + 'requests~=2.12', 'GitPython==2.0.8' ], include_package_data=True, From 6fed6434e098679fcb8e750f46ace543db56775f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Feb 2018 19:00:38 -0800 Subject: [PATCH 177/541] [Style] Cleanup def chains and save a little --- pyt/definition_chains.py | 20 ++++++++------------ pyt/save.py | 36 ++++++++++++++++++------------------ 2 files changed, 26 insertions(+), 30 deletions(-) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index 6c56248e..8c56dea2 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -9,19 +9,15 @@ def get_vars(node): vv = VarsVisitor() - if isinstance(node.ast_node, ast.While)\ - or isinstance(node.ast_node, ast.If): + if isinstance(node.ast_node, (ast.If, ast.While)): vv.visit(node.ast_node.test) - elif isinstance(node.ast_node, ast.FunctionDef) or\ - isinstance(node.ast_node, ast.ClassDef): - return list() + elif isinstance(node.ast_node, (ast.ClassDef, ast.FunctionDef)): + return set() else: try: vv.visit(node.ast_node) except AttributeError: # If no ast_node - vv.result = list() - - # remove duplicates: + vv.result = set() vv.result = set(vv.result) # Filter out lvars: @@ -58,11 +54,9 @@ def build_use_def_chain(cfg_nodes): def varse(node): vv = VarsVisitor() - if isinstance(node.ast_node, ast.FunctionDef) or\ - isinstance(node.ast_node, ast.ClassDef): + if isinstance(node.ast_node, (ast.ClassDef, ast.FunctionDef)): return list() - elif isinstance(node.ast_node, ast.While)\ - or isinstance(node.ast_node, ast.If): + elif isinstance(node.ast_node, (ast.If, ast.While)): vv.visit(node.ast_node.test) else: try: @@ -84,11 +78,13 @@ def build_def_use_chain(cfg_nodes): def_use = dict() lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) + # Make an empty list for each def for node in cfg_nodes: if isinstance(node, AssignmentNode): def_use[node] = list() for node in cfg_nodes: + # Rename varse for var in varse(node): for cnode in get_constraint_nodes(node, lattice): if var in cnode.left_hand_side: diff --git a/pyt/save.py b/pyt/save.py index 5ee6ebf2..e6bda65d 100644 --- a/pyt/save.py +++ b/pyt/save.py @@ -81,28 +81,28 @@ def __exit__(self, type, value, traceback): def def_use_chain_to_file(cfg_list): with Output('def-use_chain.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### Def-use chain for CFG {} #####{}' - .format(i, os.linesep)) - def_use = build_def_use_chain(cfg.nodes) - for k, v in def_use.items(): - fd.write('Def: {} -> Use: [{}]{}' - .format(k.label, - ', '.join([n.label for n in v]), - os.linesep)) + for i, cfg in enumerate(cfg_list): + fd.write('##### Def-use chain for CFG {} #####{}' + .format(i, os.linesep)) + def_use = build_def_use_chain(cfg.nodes) + for k, v in def_use.items(): + fd.write('Def: {} -> Use: [{}]{}' + .format(k.label, + ', '.join([n.label for n in v]), + os.linesep)) def use_def_chain_to_file(cfg_list): with Output('use-def_chain.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### Use-def chain for CFG {} #####{}' - .format(i, os.linesep)) - def_use = build_use_def_chain(cfg.nodes) - for k, v in def_use.items(): - fd.write('Use: {} -> Def: [{}]{}' - .format(k.label, - ', '.join([n[1].label for n in v]), - os.linesep)) + for i, cfg in enumerate(cfg_list): + fd.write('##### Use-def chain for CFG {} #####{}' + .format(i, os.linesep)) + def_use = build_use_def_chain(cfg.nodes) + for k, v in def_use.items(): + fd.write('Use: {} -> Def: [{}]{}' + .format(k.label, + ', '.join([n[1].label for n in v]), + os.linesep)) def cfg_to_file(cfg_list): From 1f85d76c0cbace81725065ce5589bf968b6f1b8a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 28 Feb 2018 22:08:33 -0800 Subject: [PATCH 178/541] Fix RHS vars being a string instead of a list for certain nodes --- pyt/base_cfg.py | 12 ++--- pyt/interprocedural_cfg.py | 27 ++++++----- pyt/intraprocedural_cfg.py | 15 ++++--- pyt/vulnerabilities.py | 91 ++++++++++++++++++++++---------------- 4 files changed, 84 insertions(+), 61 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 274329d2..d9235aab 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -814,17 +814,17 @@ def add_blackbox_or_builtin_call(self, node, blackbox): saved_function_call_index = self.function_call_index self.undecided = False - label = LabelVisitor() - label.visit(node) + call_label = LabelVisitor() + call_label.visit(node) - index = label.result.find('(') + index = call_label.result.find('(') if index == -1: print("No ( in a call") raise # Create e.g. ¤call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) - RHS = 'ret_' + label.result[:index] + '(' + RHS = 'ret_' + call_label.result[:index] + '(' call_node = BBorBInode( label="", @@ -880,11 +880,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): RHS = RHS + ')' call_node.label = LHS + " = " + RHS - # This is where we'll ask the user, then save the mapping or just use the pre-made mapping. - # Or perhaps we'll do that in vulnerabilities.py - call_node.right_hand_side_variables = rhs_vars - # Used in get_sink_args call_node.args = rhs_vars diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index f0e574df..6867fb1e 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -211,8 +211,10 @@ def visit_Return(self, node): return_value_of_call = self.visit(node.value) return_node = ReturnNode( LHS + ' = ' + return_value_of_call.left_hand_side, - LHS, return_value_of_call.left_hand_side, - node, line_number=node.lineno, + LHS, + [return_value_of_call.left_hand_side], + node, + line_number=node.lineno, path=self.filenames[-1] ) return_value_of_call.connect(return_node) @@ -221,8 +223,10 @@ def visit_Return(self, node): return self.append_node(ReturnNode( LHS + ' = ' + label.result, - LHS, rhs_visitor.result, - node, line_number=node.lineno, + LHS, + rhs_visitor.result, + node, + line_number=node.lineno, path=self.filenames[-1] )) @@ -240,8 +244,10 @@ def visit_Yield(self, node): LHS = 'yield_' + this_function_name return self.append_node(ReturnNode( LHS + ' = ' + label.result, - LHS, rhs_visitor.result, - node, line_number=node.lineno, + LHS, + rhs_visitor.result, + node, + line_number=node.lineno, path=self.filenames[-1]) ) @@ -268,13 +274,14 @@ def save_local_scope(self, line_number, saved_function_call_index): if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) - save_name = 'save_' + str(saved_function_call_index) + '_' +\ - assignment.left_hand_side + save_name = f'save_{saved_function_call_index}_{assignment.left_hand_side}' + previous_node = self.nodes[-1] saved_scope_node = RestoreNode( save_name + ' = ' + assignment.left_hand_side, - save_name, [assignment.left_hand_side], + save_name, + [assignment.left_hand_side], line_number=line_number, path=self.filenames[-1] ) if not first_node: @@ -347,7 +354,7 @@ def save_def_args_in_temp(self, restore_node = RestoreNode( def_arg_temp_name + ' = ' + return_value_of_nested_call.left_hand_side, def_arg_temp_name, - return_value_of_nested_call.left_hand_side, + [return_value_of_nested_call.left_hand_side], line_number=line_number, path=self.filenames[-1] ) diff --git a/pyt/intraprocedural_cfg.py b/pyt/intraprocedural_cfg.py index b31cdf05..5429f320 100644 --- a/pyt/intraprocedural_cfg.py +++ b/pyt/intraprocedural_cfg.py @@ -82,7 +82,8 @@ def visit_FunctionDef(self, node): arguments = Arguments(node.args) return self.append_node(Node('def ' + node.name + '(' + ','.join(arguments) + '):', - node, line_number=node.lineno, + node, + line_number=node.lineno, path=self.filenames[-1])) def visit_Return(self, node): @@ -97,8 +98,10 @@ def visit_Return(self, node): LHS = 'ret_' + 'MAYBE_FUNCTION_NAME' return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, rhs_visitor.result, - node, line_number=node.lineno, + LHS, + rhs_visitor.result, + node, + line_number=node.lineno, path=self.filenames[-1])) def visit_Yield(self, node): @@ -114,7 +117,8 @@ def visit_Yield(self, node): LHS = 'yield_' + 'MAYBE_FUNCTION_NAME' return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, rhs_visitor.result, - node, line_number=node.lineno, + node, + line_number=node.lineno, path=self.filenames[-1])) def visit_Call(self, node): @@ -134,7 +138,8 @@ def visit_ImportFrom(self, node): from_import = '' return self.append_node(Node(from_import + 'import ' + ', '.join(names), - node, line_number=node.lineno, + node, + line_number=node.lineno, path=self.filenames[-1])) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index c9edcf94..968992b7 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -27,8 +27,7 @@ class TriggerNode(): - def __init__(self, trigger_word, sanitisers, cfg_node, - secondary_nodes=None): + def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=None): self.trigger_word = trigger_word self.sanitisers = sanitisers self.cfg_node = cfg_node @@ -177,8 +176,8 @@ def build_sanitiser_node_dict(cfg, sinks_in_file): Args: cfg(CFG): cfg to traverse. - sinks_in_file(list[TriggerNode]): list of TriggerNodes contains - the sinks in the file + sinks_in_file(list[TriggerNode]): list of TriggerNodes containing + the sinks in the file. Returns: A string -> TriggerNode dict. @@ -294,21 +293,20 @@ def get_vulnerability(source, """ source_in_sink = lattice.in_constraint(source.cfg_node, sink.cfg_node) - secondary_in_sink = list() - + secondary_nodes_in_sink = list() if source.secondary_nodes: - secondary_in_sink = [secondary for secondary in source.secondary_nodes - if lattice.in_constraint(secondary, - sink.cfg_node)] + secondary_nodes_in_sink = [secondary for secondary in source.secondary_nodes + if lattice.in_constraint(secondary, + sink.cfg_node)] - trigger_node_in_sink = source_in_sink or secondary_in_sink + trigger_node_in_sink = source_in_sink or secondary_nodes_in_sink sink_args = get_sink_args(sink.cfg_node) secondary_node_in_sink_args = None if sink_args: - for node in secondary_in_sink: - if sink_args and node.left_hand_side in sink_args: + for node in secondary_nodes_in_sink: + if node.left_hand_side in sink_args: secondary_node_in_sink_args = node trimmed_reassignment_nodes = list() @@ -330,28 +328,38 @@ def get_vulnerability(source, if trigger_node_in_sink and lhs_in_sink_args: source_trigger_word = source.trigger_word sink_trigger_word = sink.trigger_word - sink_is_sanitised = is_sanitised(sink, - triggers.sanitiser_dict, - lattice) - blackbox_assignment_in_chain = is_unknown(trimmed_reassignment_nodes, - blackbox_assignments) + sink_is_sanitised = is_sanitised( + sink, + triggers.sanitiser_dict, + lattice + ) + blackbox_assignment_in_chain = is_unknown( + trimmed_reassignment_nodes, + blackbox_assignments + ) reassignment_nodes = source.secondary_nodes if trim_reassigned_in: reassignment_nodes = trimmed_reassignment_nodes if sink_is_sanitised: - return SanitisedVulnerability(source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - sink.sanitisers, - reassignment_nodes) + return SanitisedVulnerability( + source.cfg_node, source_trigger_word, + sink.cfg_node, sink_trigger_word, + sink.sanitisers, + reassignment_nodes + ) elif blackbox_assignment_in_chain: - return UnknownVulnerability(source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - blackbox_assignment_in_chain, - reassignment_nodes) + return UnknownVulnerability( + source.cfg_node, source_trigger_word, + sink.cfg_node, sink_trigger_word, + blackbox_assignment_in_chain, + reassignment_nodes + ) else: - return Vulnerability(source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - reassignment_nodes) + return Vulnerability( + source.cfg_node, source_trigger_word, + sink.cfg_node, sink_trigger_word, + reassignment_nodes + ) return None @@ -368,17 +376,20 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr triggers = identify_triggers(cfg, definitions.sources, definitions.sinks, lattice) for sink in triggers.sinks: for source in triggers.sources: - vulnerability = get_vulnerability(source, - sink, - triggers, - lattice, - trim_reassigned_in, - cfg.blackbox_assignments) + vulnerability = get_vulnerability( + source, + sink, + triggers, + lattice, + trim_reassigned_in, + cfg.blackbox_assignments + ) if vulnerability: vulnerability_log.append(vulnerability) -def find_vulnerabilities(cfg_list, analysis_type, +def find_vulnerabilities(cfg_list, + analysis_type, trim_reassigned_in=False, trigger_word_file=default_trigger_word_file): """Find vulnerabilities in a list of CFGs from a trigger_word_file. @@ -395,7 +406,11 @@ def find_vulnerabilities(cfg_list, analysis_type, vulnerability_log = VulnerabilityLog() for cfg in cfg_list: - find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, - Lattice(cfg.nodes, analysis_type), - trim_reassigned_in) + find_vulnerabilities_in_cfg( + cfg, + vulnerability_log, + definitions, + Lattice(cfg.nodes, analysis_type), + trim_reassigned_in + ) return vulnerability_log From 82c0fc7a5f13bd251a63dfa0e22e8ace092fa764 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 28 Feb 2018 22:39:01 -0800 Subject: [PATCH 179/541] Make right_hand_side_variable after ast_node in ReturnNode --- pyt/base_cfg.py | 8 ++++---- pyt/interprocedural_cfg.py | 6 +++--- pyt/intraprocedural_cfg.py | 5 +++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index d9235aab..8fb5ab7d 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -30,7 +30,7 @@ def __init__(self, label, ast_node, *, line_number, path): """Create a Node that can be used in a CFG. Args: - label (str): The label of the node, describing its expression. + label(str): The label of the node, describing its expression. line_number(Optional[int]): The line of the expression of the Node. """ self.label = label @@ -157,7 +157,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num """Create a Restore node. Args: - label (str): The label of the node, describing the expression it represents. + label(str): The label of the node, describing the expression it represents. left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. @@ -217,11 +217,11 @@ def __init__(self, class ReturnNode(AssignmentNode, ConnectToExitNode): """CFG node that represents a return from a call.""" - def __init__(self, label, left_hand_side, right_hand_side_variables, ast_node, *, line_number, path): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): """Create a CallReturn node. Args: - label (str): The label of the node, describing the expression it represents. + label(str): The label of the node, describing the expression it represents. restore_nodes(list[Node]): List of nodes that were restored in the function call. right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 6867fb1e..1be899ef 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -212,8 +212,8 @@ def visit_Return(self, node): return_node = ReturnNode( LHS + ' = ' + return_value_of_call.left_hand_side, LHS, - [return_value_of_call.left_hand_side], node, + [return_value_of_call.left_hand_side], line_number=node.lineno, path=self.filenames[-1] ) @@ -224,8 +224,8 @@ def visit_Return(self, node): return self.append_node(ReturnNode( LHS + ' = ' + label.result, LHS, - rhs_visitor.result, node, + rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1] )) @@ -245,8 +245,8 @@ def visit_Yield(self, node): return self.append_node(ReturnNode( LHS + ' = ' + label.result, LHS, - rhs_visitor.result, node, + rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1]) ) diff --git a/pyt/intraprocedural_cfg.py b/pyt/intraprocedural_cfg.py index 5429f320..5c990f23 100644 --- a/pyt/intraprocedural_cfg.py +++ b/pyt/intraprocedural_cfg.py @@ -99,8 +99,8 @@ def visit_Return(self, node): LHS = 'ret_' + 'MAYBE_FUNCTION_NAME' return self.append_node(ReturnNode(LHS + ' = ' + label.result, LHS, - rhs_visitor.result, node, + rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) @@ -116,8 +116,9 @@ def visit_Yield(self, node): LHS = 'yield_' + 'MAYBE_FUNCTION_NAME' return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, rhs_visitor.result, + LHS, node, + rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1])) From 7df6529b83f1fdf1a5fe91f38a0a1deedd2b43ec Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Mar 2018 18:53:04 -0800 Subject: [PATCH 180/541] [blackbox stuff] wrote get_vulnerability_chains, cleaned up def-use code --- pyt/definition_chains.py | 56 +++++++++++++++++++--------------------- pyt/vulnerabilities.py | 46 ++++++++++++++++++++++++++++----- 2 files changed, 65 insertions(+), 37 deletions(-) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index 8c56dea2..ee5c2132 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -1,6 +1,6 @@ import ast -from .base_cfg import AssignmentNode +from .base_cfg import AssignmentNode, EntryOrExitNode from .constraint_table import constraint_table from .lattice import Lattice from .reaching_definitions import ReachingDefinitionsAnalysis @@ -22,9 +22,7 @@ def get_vars(node): # Filter out lvars: for var in vv.result: - try: # if assignment node - # print('r', node.right_hand_side_variables) - # if var not in node.left_hand_side: + try: if var in node.right_hand_side_variables: yield var except AttributeError: @@ -37,56 +35,54 @@ def get_constraint_nodes(node, lattice): yield n +# TKTK: Clean up use-def too def build_use_def_chain(cfg_nodes): use_def = dict() lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) for node in cfg_nodes: definitions = list() - for cnode in get_constraint_nodes(node, lattice): + for constraint_node in get_constraint_nodes(node, lattice): for var in get_vars(node): - if var in cnode.left_hand_side: - definitions.append((var, cnode)) + if var in constraint_node.left_hand_side: + definitions.append((var, constraint_node)) use_def[node] = definitions return use_def -def varse(node): - vv = VarsVisitor() - if isinstance(node.ast_node, (ast.ClassDef, ast.FunctionDef)): - return list() - elif isinstance(node.ast_node, (ast.If, ast.While)): - vv.visit(node.ast_node.test) - else: - try: - vv.visit(node.ast_node) - except AttributeError: - return list() - +def get_uses(node): if isinstance(node, AssignmentNode): + # TKTK: Merge in master, then remove this `if` result = list() - for var in vv.result: - if var not in node.left_hand_side: - result.append(var) + if isinstance(node.right_hand_side_variables, str): + result.append(node.right_hand_side_variables) + else: + for var in node.right_hand_side_variables: + if var not in node.left_hand_side: + result.append(var) return result + elif isinstance(node, EntryOrExitNode): + return [] else: - return vv.result + raise def build_def_use_chain(cfg_nodes): def_use = dict() lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) - # Make an empty list for each def + # For every node for node in cfg_nodes: + # Make an empty list for each def if isinstance(node, AssignmentNode): def_use[node] = list() + # Get its uses + for variable in get_uses(node): + # Loop through all the nodes before it + for earlier_node in get_constraint_nodes(node, lattice): + # and add to the 'uses list' of each earlier node, when applicable + if variable in earlier_node.left_hand_side: + def_use[earlier_node].append(node) - for node in cfg_nodes: - # Rename varse - for var in varse(node): - for cnode in get_constraint_nodes(node, lattice): - if var in cnode.left_hand_side: - def_use[cnode].append(node) return def_use diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index c9edcf94..293004dc 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -10,6 +10,7 @@ RestoreNode, TaintedNode ) +from .definition_chains import build_def_use_chain from .lattice import Lattice from .right_hand_side_visitor import RHSVisitor from .trigger_definitions_parser import default_trigger_word_file, parse @@ -27,8 +28,7 @@ class TriggerNode(): - def __init__(self, trigger_word, sanitisers, cfg_node, - secondary_nodes=None): + def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=None): self.trigger_word = trigger_word self.sanitisers = sanitisers self.cfg_node = cfg_node @@ -271,12 +271,27 @@ def get_sink_args(cfg_node): return vv.result + other_results +def get_vulnerability_chains(current_node, sink, def_use, chain): + for use in def_use[current_node]: + if use == sink: + yield chain + else: + vuln_chain = list(chain) + vuln_chain.append(use) + yield from get_vulnerability_chains( + use, + sink, + def_use, + vuln_chain + ) + + def get_vulnerability(source, sink, triggers, lattice, trim_reassigned_in, - blackbox_assignments): + cfg): """Get vulnerability between source and sink if it exists. Uses triggers to find sanitisers. @@ -287,7 +302,7 @@ def get_vulnerability(source, triggers(Triggers): Triggers of the CFG. lattice(Lattice): The lattice we're analysing. trim_reassigned_in(bool): Whether or not the trim option is set. - blackbox_assignments(set[AssignmentNode]): used in is_unknown. + cfg(CFG): .blackbox_assignments used in is_unknown, .nodes used in build_def_use_chain Returns: A Vulnerability if it exists, else None @@ -295,12 +310,16 @@ def get_vulnerability(source, source_in_sink = lattice.in_constraint(source.cfg_node, sink.cfg_node) secondary_in_sink = list() - if source.secondary_nodes: + # When this is True and source_in_sink is not + # It is due to the secondary being a function call secondary_in_sink = [secondary for secondary in source.secondary_nodes if lattice.in_constraint(secondary, sink.cfg_node)] + if not source_in_sink: + if secondary_in_sink: + raise trigger_node_in_sink = source_in_sink or secondary_in_sink sink_args = get_sink_args(sink.cfg_node) @@ -312,7 +331,20 @@ def get_vulnerability(source, secondary_node_in_sink_args = node trimmed_reassignment_nodes = list() + if secondary_node_in_sink_args: + # TKTK: if interactive_mode + def_use = build_def_use_chain(cfg.nodes) + for chain in get_vulnerability_chains( + source.cfg_node, + sink.cfg_node, + def_use, + chain=[source.cfg_node] + ): + for node in chain: + if isinstance(node, BBorBInode): + print(f'Is {node.label} with tainted arg ??? vulnerable?') + trimmed_reassignment_nodes.append(secondary_node_in_sink_args) node_in_the_vulnerability_chain = secondary_node_in_sink_args # Here is where we do backwards slicing to traceback which nodes led to the vulnerability @@ -334,7 +366,7 @@ def get_vulnerability(source, triggers.sanitiser_dict, lattice) blackbox_assignment_in_chain = is_unknown(trimmed_reassignment_nodes, - blackbox_assignments) + cfg.blackbox_assignments) reassignment_nodes = source.secondary_nodes if trim_reassigned_in: reassignment_nodes = trimmed_reassignment_nodes @@ -373,7 +405,7 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr triggers, lattice, trim_reassigned_in, - cfg.blackbox_assignments) + cfg) if vulnerability: vulnerability_log.append(vulnerability) From 562e873c1a6c1ca8e1b0b4ce159bff1431053eea Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Mar 2018 19:04:13 -0800 Subject: [PATCH 181/541] Delete comment about duplicates --- pyt/definition_chains.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index 6c56248e..2ac0e077 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -21,7 +21,6 @@ def get_vars(node): except AttributeError: # If no ast_node vv.result = list() - # remove duplicates: vv.result = set(vv.result) # Filter out lvars: From e075e934c245d56d1959f3b48306b9e31bda3651 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 1 Mar 2018 19:10:58 -0800 Subject: [PATCH 182/541] [cleanup] remove if after merging in master that had the RHS vars fix --- pyt/definition_chains.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index ee5c2132..b6f9ed86 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -53,14 +53,10 @@ def build_use_def_chain(cfg_nodes): def get_uses(node): if isinstance(node, AssignmentNode): - # TKTK: Merge in master, then remove this `if` result = list() - if isinstance(node.right_hand_side_variables, str): - result.append(node.right_hand_side_variables) - else: - for var in node.right_hand_side_variables: - if var not in node.left_hand_side: - result.append(var) + for var in node.right_hand_side_variables: + if var not in node.left_hand_side: + result.append(var) return result elif isinstance(node, EntryOrExitNode): return [] From 12ab2e1057c0b31ea39437bcd2b75144ac20b50c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 2 Mar 2018 19:18:23 -0800 Subject: [PATCH 183/541] [blackbox stuff]Add interactive UI mode option, cleanup __main__ a bit --- pyt/__main__.py | 85 ++++++++++++++++++++++++++--------------- pyt/argument_helpers.py | 7 ++++ pyt/github_search.py | 4 +- pyt/vulnerabilities.py | 81 +++++++++++++++++++++++---------------- 4 files changed, 113 insertions(+), 64 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index c5ca05c5..6f8eae95 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -6,7 +6,7 @@ from datetime import date from pprint import pprint -from .argument_helpers import valid_date +from .argument_helpers import valid_date, UImode from .ast_helper import generate_ast from .draw import draw_cfgs, draw_lattices from .constraint_table import initialize_constraint_table, print_table @@ -37,6 +37,7 @@ verbose_cfg_to_file, vulnerabilities_to_file ) +from .trigger_definitions_parser import default_trigger_word_file from .vulnerabilities import find_vulnerabilities @@ -73,10 +74,18 @@ def parse_args(args): print_group.add_argument('-vp', '--verbose-print', help='Verbose printing of -p.', action='store_true') print_group.add_argument('-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', action='store_true') + help='Trims the reassigned list to the vulnerability chain.', + action='store_true', + default=False) + print_group.add_argument('-i', '--interactive', + help='Will ask you about each vulnerability chain and blackbox nodes.', + action='store_true', + default=False) parser.add_argument('-t', '--trigger-word-file', - help='Input trigger word file.', type=str) + help='Input trigger word file.', + type=str, + default=default_trigger_word_file) parser.add_argument('-py2', '--python-2', help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + ' needed when target file(s) are written in Python 2.', action='store_true') @@ -157,35 +166,42 @@ def parse_args(args): return parser.parse_args(args) -def analyse_repo(github_repo, analysis_type): +def analyse_repo(github_repo, analysis_type, ui_mode): cfg_list = list() project_modules = get_modules(os.path.dirname(github_repo.path)) intraprocedural(project_modules, cfg_list) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis_type) - vulnerability_log = find_vulnerabilities(cfg_list, analysis_type) + vulnerability_log = find_vulnerabilities( + cfg_list, + analysis_type, + args.trigger_word_file, + ui_mode + ) return vulnerability_log def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) - analysis = None + analysis = ReachingDefinitionsTaintAnalysis if args.liveness: analysis = LivenessAnalysis elif args.reaching: analysis = ReachingDefinitionsAnalysis - elif args.reaching_taint: - analysis = ReachingDefinitionsTaintAnalysis - else: - analysis = ReachingDefinitionsTaintAnalysis + + ui_mode = UImode.NORMAL + if args.interactive: + ui_mode = UImode.INTERACTIVE + elif args.trim_reassigned_in: + ui_mode = UImode.TRIM cfg_list = list() if args.git_repos: repos = get_repos(args.git_repos) for repo in repos: repo.clone() - vulnerability_log = analyse_repo(repo, analysis) + vulnerability_log = analyse_repo(repo, analysis, ui_mode) vulnerability_log.print_report() if not vulnerability_log.vulnerabilities: repo.clean_up() @@ -194,11 +210,23 @@ def main(command_line_args=sys.argv[1:]): if args.which == 'search': set_github_api_token() if args.start_date: - scan_github(args.search_string, args.start_date, - analysis, analyse_repo, args.csv_path) + scan_github( + args.search_string, + args.start_date, + analysis, + analyse_repo, + args.csv_path, + ui_mode + ) else: - scan_github(args.search_string, date(2010, 1, 1), - analysis, analyse_repo, args.csv_path) + scan_github( + args.search_string, + date(2010, 1, 1), + analysis, + analyse_repo, + args.csv_path, + ui_mode + ) exit() path = os.path.normpath(args.filepath) @@ -218,10 +246,12 @@ def main(command_line_args=sys.argv[1:]): if args.intraprocedural_analysis: intraprocedural(project_modules, cfg_list) else: - interprocedural_cfg = interprocedural(tree, - project_modules, - local_modules, - path) + interprocedural_cfg = interprocedural( + tree, + project_modules, + local_modules, + path + ) cfg_list.append(interprocedural_cfg) framework_route_criteria = is_flask_route_function if args.adaptor: @@ -238,17 +268,12 @@ def main(command_line_args=sys.argv[1:]): analyse(cfg_list, analysis_type=analysis) - vulnerability_log = None - if args.trigger_word_file: - vulnerability_log = find_vulnerabilities(cfg_list, - analysis, - args.trim_reassigned_in, - args.trigger_word_file) - else: - vulnerability_log = find_vulnerabilities(cfg_list, - analysis, - args.trim_reassigned_in) - + vulnerability_log = find_vulnerabilities( + cfg_list, + analysis, + args.trigger_word_file, + ui_mode + ) vulnerability_log.print_report() if args.draw_cfg: diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index c3685df7..1381f8f3 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -1,5 +1,6 @@ from argparse import ArgumentTypeError from datetime import datetime +from enum import Enum def valid_date(s): @@ -9,3 +10,9 @@ def valid_date(s): except ValueError: msg = "Not a valid date: '{0}'. Format: {1}".format(s, date_format) raise ArgumentTypeError(msg) + + +class UImode(Enum): + NORMAL = 0 + INTERACTIVE = 1 + TRIM = 2 diff --git a/pyt/github_search.py b/pyt/github_search.py index 0e200cd5..154242cd 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -198,7 +198,7 @@ def get_dates(start_date, end_date=date.today(), interval=7): delta.days % interval)) -def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv_path): +def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv_path, ui_mode): analyse_repo = analyse_repo_func for d in get_dates(start_date, interval=7): q = Query(SEARCH_REPO_URL, search_string, @@ -221,7 +221,7 @@ def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv save_repo_scan(repo, r.path, vulnerability_log=None, error='Other Error Unknown while cloning :-(') continue try: - vulnerability_log = analyse_repo(r, analysis_type) + vulnerability_log = analyse_repo(r, analysis_type, ui_mode) if vulnerability_log.vulnerabilities: save_repo_scan(repo, r.path, vulnerability_log) add_repo_to_csv(csv_path, r) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index b1e82e84..24626bb9 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -3,6 +3,7 @@ import ast from collections import namedtuple +from .argument_helpers import UImode from .base_cfg import ( AssignmentCallNode, AssignmentNode, @@ -286,12 +287,14 @@ def get_vulnerability_chains(current_node, sink, def_use, chain): ) -def get_vulnerability(source, - sink, - triggers, - lattice, - trim_reassigned_in, - cfg): +def get_vulnerability( + source, + sink, + triggers, + lattice, + cfg, + ui_mode +): """Get vulnerability between source and sink if it exists. Uses triggers to find sanitisers. @@ -301,8 +304,8 @@ def get_vulnerability(source, sink(TriggerNode): TriggerNode of the sink. triggers(Triggers): Triggers of the CFG. lattice(Lattice): The lattice we're analysing. - trim_reassigned_in(bool): Whether or not the trim option is set. cfg(CFG): .blackbox_assignments used in is_unknown, .nodes used in build_def_use_chain + ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. Returns: A Vulnerability if it exists, else None @@ -332,17 +335,17 @@ def get_vulnerability(source, trimmed_reassignment_nodes = list() if secondary_node_in_sink_args: - # TKTK: if interactive_mode - def_use = build_def_use_chain(cfg.nodes) - for chain in get_vulnerability_chains( - source.cfg_node, - sink.cfg_node, - def_use, - chain=[source.cfg_node] - ): - for node in chain: - if isinstance(node, BBorBInode): - print(f'Is {node.label} with tainted arg ??? vulnerable?') + if ui_mode == UImode.INTERACTIVE: + def_use = build_def_use_chain(cfg.nodes) + for chain in get_vulnerability_chains( + source.cfg_node, + sink.cfg_node, + def_use, + chain=[source.cfg_node] + ): + for node in chain: + if isinstance(node, BBorBInode): + print(f'Is {node.label} with tainted arg ??? vulnerable?') trimmed_reassignment_nodes.append(secondary_node_in_sink_args) node_in_the_vulnerability_chain = secondary_node_in_sink_args @@ -372,7 +375,7 @@ def get_vulnerability(source, cfg.blackbox_assignments ) reassignment_nodes = source.secondary_nodes - if trim_reassigned_in: + if ui_mode == UImode.TRIM: reassignment_nodes = trimmed_reassignment_nodes if sink_is_sanitised: return SanitisedVulnerability( @@ -397,7 +400,13 @@ def get_vulnerability(source, return None -def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, trim_reassigned_in): +def find_vulnerabilities_in_cfg( + cfg, + vulnerability_log, + definitions, + lattice, + ui_mode +): """Find vulnerabilities in a cfg. Args: @@ -405,9 +414,14 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. lattice(Lattice): The lattice we're analysing. - trim_reassigned_in(bool): Whether or not the trim option is set. + ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. """ - triggers = identify_triggers(cfg, definitions.sources, definitions.sinks, lattice) + triggers = identify_triggers( + cfg, + definitions.sources, + definitions.sinks, + lattice + ) for sink in triggers.sinks: for source in triggers.sources: vulnerability = get_vulnerability( @@ -415,23 +429,26 @@ def find_vulnerabilities_in_cfg(cfg, vulnerability_log, definitions, lattice, tr sink, triggers, lattice, - trim_reassigned_in, - cfg + cfg, + ui_mode ) if vulnerability: vulnerability_log.append(vulnerability) -def find_vulnerabilities(cfg_list, - analysis_type, - trim_reassigned_in=False, - trigger_word_file=default_trigger_word_file): +def find_vulnerabilities( + cfg_list, + analysis_type, + trigger_word_file, + ui_mode +): """Find vulnerabilities in a list of CFGs from a trigger_word_file. Args: - cfg_list (list[CFG]): the list of CFGs to scan. - trigger_word_file (string): file containing trigger words. - Defaults to the flask trigger word file. + cfg_list(list[CFG]): the list of CFGs to scan. + analysis_type(AnalysisBase): analysis object used to create lattice. + trigger_word_file(string): file containing trigger words. + ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. Returns: A VulnerabilityLog with found vulnerabilities. @@ -445,6 +462,6 @@ def find_vulnerabilities(cfg_list, vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), - trim_reassigned_in + ui_mode ) return vulnerability_log From f595ebb29b08cc151aa7e88d0687e582789255f6 Mon Sep 17 00:00:00 2001 From: MacBox7 Date: Sat, 3 Mar 2018 12:08:13 +0530 Subject: [PATCH 184/541] setup.py: pypi package Use pip install python-taint Works only on python3.6 Closes: https://github.com/python-security/pyt/issues/3 --- setup.cfg | 2 ++ setup.py | 7 ++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/setup.cfg b/setup.cfg index e69de29b..11e9ec40 100644 --- a/setup.cfg +++ b/setup.cfg @@ -0,0 +1,2 @@ +[metadata] +description-file = README.rst \ No newline at end of file diff --git a/setup.py b/setup.py index 2bdb14dc..42439df3 100644 --- a/setup.py +++ b/setup.py @@ -3,14 +3,15 @@ long_description = """""" setup( - name='pyt', - version='1.0.0a20 ', + name='python-taint', + version='0.1', description='Find security vulnerabilities in Python web applications' ' using static analysis.', long_description=long_description, url='https://github.com/python-security/pyt', author='python-security', author_email='mr.thalmann@gmail.com', + download_url='https://github.com/python-security/pyt/archive/0.1.tar.gz', license='GPLv2', classifiers=[ 'Development Status :: 3 - Alpha', @@ -23,7 +24,7 @@ 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', 'Programming Language :: Python :: 3.5' ], - keywords='security vulnerability web flask django pyt static analysis', + keywords=['security', 'vulnerability', 'web', 'flask', 'django', 'pyt', 'static', 'analysis'], packages=[ 'pyt' ], From 3093cc5c46749d51252313b010ce4a1af8806e2f Mon Sep 17 00:00:00 2001 From: MacBox7 Date: Sat, 3 Mar 2018 13:02:28 +0530 Subject: [PATCH 185/541] interprocedural_cfg.py: Works for python3.5 --- pyt/interprocedural_cfg.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 1be899ef..a500fa54 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -274,7 +274,7 @@ def save_local_scope(self, line_number, saved_function_call_index): if assignment.left_hand_side in saved_variables_so_far: continue saved_variables_so_far.add(assignment.left_hand_side) - save_name = f'save_{saved_function_call_index}_{assignment.left_hand_side}' + save_name = 'save_{}_{}'.format(saved_function_call_index, assignment.left_hand_side) previous_node = self.nodes[-1] From 57878c92a496ccdc3f3bf26c59718af6a8300891 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 3 Mar 2018 15:56:46 -0800 Subject: [PATCH 186/541] [nothing significant] changing gears to tox branch --- pyt/base_cfg.py | 24 +++++---- pyt/vulnerabilities.py | 119 ++++++++++++++++++++++++++++++++--------- 2 files changed, 109 insertions(+), 34 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 8fb5ab7d..c1710b3f 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -187,21 +187,24 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num class AssignmentCallNode(AssignmentNode): """Node used for X.""" - def __init__(self, - label, - left_hand_side, - ast_node, - right_hand_side_variables, - vv_result, - *, - line_number, - path, - call_node): + def __init__( + self, + label, + left_hand_side, + ast_node, + right_hand_side_variables, + vv_result, + *, + line_number, + path, + call_node + ): """Create a X. Args: label(str): The label of the node, describing the expression it represents. left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + ast_node right_hand_side_variables(list[str]): A list of variables on the right hand side. vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. line_number(Optional[int]): The line of the expression the Node represents. @@ -223,6 +226,7 @@ def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, * Args: label(str): The label of the node, describing the expression it represents. restore_nodes(list[Node]): List of nodes that were restored in the function call. + ast_node right_hand_side_variables(list[str]): A list of variables on the right hand side. line_number(Optional[int]): The line of the expression the Node represents. path(string): Current filename. diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 24626bb9..82b81cd6 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -46,16 +46,24 @@ def __repr__(self): output = 'TriggerNode(' if self.trigger_word: - output = output + 'trigger_word is ' + str(self.trigger_word) + ', ' + output = '{} trigger_word is {}, '.format( + output, + self.trigger_word + ) return ( output + - 'sanitisers are ' + str(self.sanitisers) + ', ' - 'cfg_node is ' + str(self.cfg_node) + ')\n' + 'sanitisers are {}, '.format(self.sanitisers) + + 'cfg_node is {})\n'.format(self.cfg_node) ) -def identify_triggers(cfg, sources, sinks, lattice): +def identify_triggers( + cfg, + sources, + sinks, + lattice +): """Identify sources, sinks and sanitisers in a CFG. Args: @@ -83,23 +91,35 @@ def identify_triggers(cfg, sources, sinks, lattice): return Triggers(sources_in_file, sinks_in_file, sanitiser_node_dict) -def filter_cfg_nodes(cfg, cfg_node_type): +def filter_cfg_nodes( + cfg, + cfg_node_type +): return [node for node in cfg.nodes if isinstance(node, cfg_node_type)] -def find_secondary_sources(assignment_nodes, sources, lattice): +def find_secondary_sources( + assignment_nodes, + sources, + lattice +): """ Sets the secondary_nodes attribute of each source in the sources list. Args: assignment_nodes([AssignmentNode]) sources([tuple]) + lattice(Lattice): The lattice we're analysing. """ for source in sources: source.secondary_nodes = find_assignments(assignment_nodes, source, lattice) -def find_assignments(assignment_nodes, source, lattice): +def find_assignments( + assignment_nodes, + source, + lattice +): old = list() # added in order to propagate reassignments of the source node @@ -113,14 +133,24 @@ def find_assignments(assignment_nodes, source, lattice): return new -def update_assignments(assignment_list, assignment_nodes, source, lattice): +def update_assignments( + assignment_list, + assignment_nodes, + source, + lattice +): for node in assignment_nodes: for other in assignment_list: if node not in assignment_list: append_if_reassigned(assignment_list, other, node, lattice) -def append_if_reassigned(assignment_list, secondary, node, lattice): +def append_if_reassigned( + assignment_list, + secondary, + node, + lattice +): try: reassigned = False # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. @@ -138,7 +168,10 @@ def append_if_reassigned(assignment_list, secondary, node, lattice): exit(0) -def find_triggers(nodes, trigger_words): +def find_triggers( + nodes, + trigger_words +): """Find triggers from the trigger_word_list in the nodes. Args: @@ -154,7 +187,10 @@ def find_triggers(nodes, trigger_words): return trigger_nodes -def label_contains(node, trigger_words): +def label_contains( + node, + trigger_words +): """Determine if node contains any of the trigger_words provided. Args: @@ -172,7 +208,10 @@ def label_contains(node, trigger_words): yield TriggerNode(trigger_word, sanitisers, node) -def build_sanitiser_node_dict(cfg, sinks_in_file): +def build_sanitiser_node_dict( + cfg, + sinks_in_file +): """Build a dict of string -> TriggerNode pairs, where the string is the sanitiser and the TriggerNode is a TriggerNode of the sanitiser. @@ -201,7 +240,10 @@ def build_sanitiser_node_dict(cfg, sinks_in_file): return sanitiser_node_dict -def find_sanitiser_nodes(sanitiser, sanitisers_in_file): +def find_sanitiser_nodes( + sanitiser, + sanitisers_in_file +): """Find nodes containing a particular sanitiser. Args: @@ -216,15 +258,17 @@ def find_sanitiser_nodes(sanitiser, sanitisers_in_file): yield sanitiser_tuple.cfg_node -def is_sanitised(sink, sanitiser_dict, lattice): +def is_sanitised( + sink, + sanitiser_dict, + lattice +): """Check if sink is sanitised by any santiser in the sanitiser_dict. Args: sink(TriggerNode): TriggerNode of the sink. sanitiser_dict(dict): dictionary of sink sanitiser pairs. - - Returns: - True or False + lattice(Lattice): The lattice we're analysing. """ for sanitiser in sink.sanitisers: for cfg_node in sanitiser_dict[sanitiser]: @@ -237,7 +281,10 @@ class SinkArgsError(Exception): pass -def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): +def is_unknown( + trimmed_reassignment_nodes, + blackbox_assignments +): """Check if vulnerability is unknown by seeing if a blackbox assignment is in trimmed_reassignment_nodes. @@ -254,7 +301,9 @@ def is_unknown(trimmed_reassignment_nodes, blackbox_assignments): return None -def get_sink_args(cfg_node): +def get_sink_args( + cfg_node +): if isinstance(cfg_node.ast_node, ast.Call): rhs_visitor = RHSVisitor() rhs_visitor.visit(cfg_node.ast_node) @@ -272,7 +321,12 @@ def get_sink_args(cfg_node): return vv.result + other_results -def get_vulnerability_chains(current_node, sink, def_use, chain): +def get_vulnerability_chains( + current_node, + sink, + def_use, + chain +): for use in def_use[current_node]: if use == sink: yield chain @@ -287,6 +341,21 @@ def get_vulnerability_chains(current_node, sink, def_use, chain): ) +def is_actually_vulnerable( + chain +): + for i in range(len(chain)): + if isinstance(chain[i], BBorBInode): + user_says = input( + 'Is the return value of {} '.format(chain[i].label) + + 'with tainted argument "{}" vulnerable? (Y/n)'.format(chain[i-1].left_hand_side) + ).lower() + print(f'The user says {user_says}') + if user_says.startswith('n'): + return False + return True + + def get_vulnerability( source, sink, @@ -341,11 +410,12 @@ def get_vulnerability( source.cfg_node, sink.cfg_node, def_use, - chain=[source.cfg_node] + [source.cfg_node] ): - for node in chain: - if isinstance(node, BBorBInode): - print(f'Is {node.label} with tainted arg ??? vulnerable?') + if is_actually_vulnerable(chain): + print('We have a vulnerability!') + + trimmed_reassignment_nodes.append(secondary_node_in_sink_args) node_in_the_vulnerability_chain = secondary_node_in_sink_args @@ -370,6 +440,7 @@ def get_vulnerability( triggers.sanitiser_dict, lattice ) + # TKTK: We do not have to call is_unknown if interactive mode is on blackbox_assignment_in_chain = is_unknown( trimmed_reassignment_nodes, cfg.blackbox_assignments From abc73d564f3fcef592f83aacbe419d50d7d404f8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 3 Mar 2018 16:58:28 -0800 Subject: [PATCH 187/541] testenv python headaches --- .activate.sh | 1 + .deactivate.sh | 1 + .pre-commit-config.yaml | 18 ++++++++++++++++++ Makefile | 21 +++++++++++++++++++++ requirements-dev.txt | 7 +++++++ requirements.txt | 4 ++-- tox.ini | 28 ++++++++++++++++++++++++++++ 7 files changed, 78 insertions(+), 2 deletions(-) create mode 100755 .activate.sh create mode 100755 .deactivate.sh create mode 100644 .pre-commit-config.yaml create mode 100644 Makefile create mode 100644 requirements-dev.txt create mode 100644 tox.ini diff --git a/.activate.sh b/.activate.sh new file mode 100755 index 00000000..72c43ac2 --- /dev/null +++ b/.activate.sh @@ -0,0 +1 @@ +venv/bin/activate diff --git a/.deactivate.sh b/.deactivate.sh new file mode 100755 index 00000000..d1898d74 --- /dev/null +++ b/.deactivate.sh @@ -0,0 +1 @@ +deactivate diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..1bc3924e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,18 @@ +- repo: https://github.com/pre-commit/pre-commit-hooks + sha: v0.9.1 + hooks: + - id: trailing-whitespace + - id: end-of-file-fixer + - id: autopep8-wrapper + - id: check-docstring-first + - id: debug-statements + - id: name-tests-test + exclude: tests/util + - id: flake8 + args: ['--ignore=E501'] + exclude: ^test_data/ +- repo: https://github.com/asottile/reorder_python_imports + sha: v0.3.5 + hooks: + - id: reorder-python-imports + language_version: python3.6 diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..46467c20 --- /dev/null +++ b/Makefile @@ -0,0 +1,21 @@ +.PHONY: minimal +minimal: setup + +.PHONY: setup +setup: + tox -e venv + +.PHONY: install-hooks +install-hooks: + tox -e pre-commit -- install -f --install-hooks + +.PHONY: test +test: + tox + +.PHONY: clean +clean: + find -name '*.pyc' -delete + find -name '__pycache__' -delete + rm -rf .tox + rm -rf venv diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 00000000..339d4dcc --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,7 @@ +flake8==3.5.0 +pre-commit==0.16.3 +py==1.5.2 +pycodestyle==2.3.1 +pyflakes==1.5.0 +tox==2.9.1 +virtualenv==15.1.0 diff --git a/requirements.txt b/requirements.txt index 30405636..f7b38d47 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ +coverage>=4.0, <4.4 +GitPython==2.0.8 graphviz==0.4.10 requests~=2.12 -GitPython==2.0.8 -coverage>=4.0, <4.4 diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..b591cb00 --- /dev/null +++ b/tox.ini @@ -0,0 +1,28 @@ +[tox] +project = pyt +# These should match the travis env list +envlist = py35,py36 +tox_pip_extensions_ext_venv_update = true + +[testenv] +deps = -rrequirements-dev.txt +commands = + coverage erase + coverage run -m pytest tests + coverage report --show-missing --fail-under 99 + pre-commit run --all-files + +[testenv:venv] +basepython = + 3.5: python3.5 + 3.6: python3.6 +envdir = venv +commands = + pre-commit install -f --install-hooks + +[testenv:pre-commit] +deps = pre-commit>=0.16.3 +commands = pre-commit {posargs} + +[pep8] +ignore = E501 From 25bb13b5ebd3a80dcf16c57d561e99587040dc10 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 4 Mar 2018 12:01:07 -0800 Subject: [PATCH 188/541] Bump version to .11 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 42439df3..6db760a0 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name='python-taint', - version='0.1', + version='0.11', description='Find security vulnerabilities in Python web applications' ' using static analysis.', long_description=long_description, From 9150b753dc1596b7c961217a4ab1896ffaf21a1a Mon Sep 17 00:00:00 2001 From: MacBox7 Date: Mon, 5 Mar 2018 14:34:00 +0530 Subject: [PATCH 189/541] fix download_url --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 6db760a0..27e28828 100644 --- a/setup.py +++ b/setup.py @@ -11,7 +11,7 @@ url='https://github.com/python-security/pyt', author='python-security', author_email='mr.thalmann@gmail.com', - download_url='https://github.com/python-security/pyt/archive/0.1.tar.gz', + download_url='https://github.com/python-security/pyt/archive/0.11.tar.gz', license='GPLv2', classifiers=[ 'Development Status :: 3 - Alpha', From b37e33e1a09e8dd6f4a806cc330869140e78770f Mon Sep 17 00:00:00 2001 From: MacBox7 Date: Mon, 5 Mar 2018 16:53:22 +0530 Subject: [PATCH 190/541] pyt/draw.py: Version compatible upto 3.3.7 Just replaced subprocess.run with a backward compatible function subprocess.call --- pyt/draw.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/draw.py b/pyt/draw.py index 9231d9a7..6044e2f3 100644 --- a/pyt/draw.py +++ b/pyt/draw.py @@ -2,7 +2,7 @@ import argparse from graphviz import Digraph from itertools import permutations -from subprocess import run +from subprocess import call from .base_cfg import AssignmentNode @@ -169,7 +169,7 @@ def add_anchor(filename): def run_dot(filename): filename += '.dot' - run(['dot', '-Tpdf', filename, '-o', filename.replace('.dot', '.pdf')]) + call(['dot', '-Tpdf', filename, '-o', filename.replace('.dot', '.pdf')]) def draw_lattice(cfg, output_filename='output'): """Draw CFG and output as pdf.""" From 2dcd5793d95738a5a21fd76122a7c48ce1717a53 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Mar 2018 09:57:06 -0800 Subject: [PATCH 191/541] [gotta go to work] made blackbox mapping file option, refactored all namedtuples --- pyt/__main__.py | 27 ++++++++++++++++++------ pyt/argument_helpers.py | 22 +++++++++++++++++++ pyt/base_cfg.py | 29 +++++++++++++++++-------- pyt/definition_chains.py | 10 ++++++--- pyt/interprocedural_cfg.py | 8 ++++++- pyt/trigger_definitions_parser.py | 11 ++++++---- pyt/vulnerabilities.py | 35 ++++++++++++++++++++++++++----- 7 files changed, 114 insertions(+), 28 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 6f8eae95..ca0fc9d9 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -6,7 +6,13 @@ from datetime import date from pprint import pprint -from .argument_helpers import valid_date, UImode +from .argument_helpers import ( + default_blackbox_mapping_file, + default_trigger_word_file, + valid_date, + VulnerabilityFiles, + UImode +) from .ast_helper import generate_ast from .draw import draw_cfgs, draw_lattices from .constraint_table import initialize_constraint_table, print_table @@ -37,7 +43,6 @@ verbose_cfg_to_file, vulnerabilities_to_file ) -from .trigger_definitions_parser import default_trigger_word_file from .vulnerabilities import find_vulnerabilities @@ -86,6 +91,10 @@ def parse_args(args): help='Input trigger word file.', type=str, default=default_trigger_word_file) + parser.add_argument('-b', '--blackbox-mapping-file', + help='Input blackbox mapping file.', + type=str, + default=default_blackbox_mapping_file) parser.add_argument('-py2', '--python-2', help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + ' needed when target file(s) are written in Python 2.', action='store_true') @@ -175,8 +184,11 @@ def analyse_repo(github_repo, analysis_type, ui_mode): vulnerability_log = find_vulnerabilities( cfg_list, analysis_type, - args.trigger_word_file, - ui_mode + ui_mode, + VulnerabilityFiles( + args.trigger_word_file, + args.blackbox_mapping_file + ) ) return vulnerability_log @@ -271,8 +283,11 @@ def main(command_line_args=sys.argv[1:]): vulnerability_log = find_vulnerabilities( cfg_list, analysis, - args.trigger_word_file, - ui_mode + ui_mode, + VulnerabilityFiles( + args.trigger_word_file, + arg.blackbox_mapping_file + ) ) vulnerability_log.print_report() diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index 1381f8f3..aa319851 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -1,8 +1,21 @@ from argparse import ArgumentTypeError +from collections import namedtuple from datetime import datetime from enum import Enum +default_blackbox_mapping_file = os.path.join( + os.path.dirname(__file__) +) + + +default_trigger_word_file = os.path.join( + os.path.dirname(__file__), + 'trigger_definitions', + 'flask_trigger_words.pyt' +) + + def valid_date(s): date_format = "%Y-%m-%d" try: @@ -16,3 +29,12 @@ class UImode(Enum): NORMAL = 0 INTERACTIVE = 1 TRIM = 2 + + +VulnerabilityFiles = namedtuple( + 'VulnerabilityFiles', + [ + 'triggers', + 'blackbox_mapping' + ] +) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index c1710b3f..bda9d454 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -8,13 +8,22 @@ from .vars_visitor import VarsVisitor -ControlFlowNode = namedtuple('ControlFlowNode', - 'test last_nodes break_statements') - -ConnectStatements = namedtuple('ConnectStatements', - 'first_statement' + - ' last_statements' + - ' break_statements') +ControlFlowNode = namedtuple( + 'ControlFlowNode', + [ + 'test', + 'last_nodes', + 'break_statements' + ] +) +ConnectStatements = namedtuple( + 'ConnectStatements', + [ + 'first_statement', + 'last_statements', + 'break_statements' + ] +) CALL_IDENTIFIER = '¤' @@ -169,7 +178,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num class BBorBInode(AssignmentNode): """Node used for handling restore nodes returning from blackbox or builtin function calls.""" - def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): + def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path, func_name): """Create a Restore node. Args: @@ -182,6 +191,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) self.args = list() self.inner_most_call = self + self.func_name = func_name class AssignmentCallNode(AssignmentNode): @@ -835,7 +845,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox): left_hand_side=LHS, right_hand_side_variables=[], line_number=node.lineno, - path=self.filenames[-1] + path=self.filenames[-1], + func_name=call_label.result[:index] ) visual_args = list() rhs_vars = list() diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index b6f9ed86..5c945d5e 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -58,10 +58,14 @@ def get_uses(node): if var not in node.left_hand_side: result.append(var) return result - elif isinstance(node, EntryOrExitNode): - return [] else: - raise + return [] + # elif isinstance(node, EntryOrExitNode): + # return [] + # else: + # print(f'\n\n\ntype(node) is {type(node)}') + # print(f'node is {node}\n\n\n') + # raise def build_def_use_chain(cfg_nodes): diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 1be899ef..e1b9b5bc 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -35,7 +35,13 @@ from .right_hand_side_visitor import RHSVisitor -SavedVariable = namedtuple('SavedVariable', 'LHS RHS') +SavedVariable = namedtuple( + 'SavedVariable', + [ + 'LHS', + 'RHS' + ] +) BUILTINS = ( 'get', 'Flask', diff --git a/pyt/trigger_definitions_parser.py b/pyt/trigger_definitions_parser.py index 65e13f9f..222b434c 100644 --- a/pyt/trigger_definitions_parser.py +++ b/pyt/trigger_definitions_parser.py @@ -6,10 +6,13 @@ SOURCES_KEYWORD = 'sources:' SINKS_KEYWORD = 'sinks:' -Definitions = namedtuple('Definitions', 'sources sinks') -default_trigger_word_file = os.path.join(os.path.dirname(__file__), - 'trigger_definitions', - 'flask_trigger_words.pyt') +Definitions = namedtuple( + 'Definitions', + [ + 'sources', + 'sinks' + ] +) def parse_section(iterator): diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 82b81cd6..7917e3aa 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -1,6 +1,7 @@ """Module for finding vulnerabilities based on a definitions file.""" import ast +import json from collections import namedtuple from .argument_helpers import UImode @@ -14,7 +15,7 @@ from .definition_chains import build_def_use_chain from .lattice import Lattice from .right_hand_side_visitor import RHSVisitor -from .trigger_definitions_parser import default_trigger_word_file, parse +from .trigger_definitions_parser import parse from .vars_visitor import VarsVisitor from .vulnerability_log import ( SanitisedVulnerability, @@ -24,8 +25,21 @@ ) -Sanitiser = namedtuple('Sanitiser', 'trigger_word cfg_node') -Triggers = namedtuple('Triggers', 'sources sinks sanitiser_dict') +Sanitiser = namedtuple( + 'Sanitiser', + [ + 'trigger_word', + 'cfg_node' + ] +) +Triggers = namedtuple( + 'Triggers', + [ + 'sources', + 'sinks', + 'sanitiser_dict' + ] +) class TriggerNode(): @@ -352,7 +366,9 @@ def is_actually_vulnerable( ).lower() print(f'The user says {user_says}') if user_says.startswith('n'): + print(f'\n\n\n\nThe user said {chain[i].func_name} DOES NOT ret a tainted val') return False + print(f'\n\n\n\nThe user said {chain[i].func_name} DOES ret a tainted val') return True @@ -510,21 +526,26 @@ def find_vulnerabilities_in_cfg( def find_vulnerabilities( cfg_list, analysis_type, + ui_mode, trigger_word_file, - ui_mode + blackbox_mapping_file ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. Args: cfg_list(list[CFG]): the list of CFGs to scan. analysis_type(AnalysisBase): analysis object used to create lattice. - trigger_word_file(string): file containing trigger words. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + trigger_word_file(string): file containing trigger words. + blackbox_mapping_file(string): file containing whether or not a blackbox function returns a tainted value. Returns: A VulnerabilityLog with found vulnerabilities. """ + # TKTK: change to tuple^ definitions = parse(trigger_word_file) + with open(blackbox_mapping_file) as f: + blackbox_mapping = json.load(f) vulnerability_log = VulnerabilityLog() for cfg in cfg_list: @@ -535,4 +556,8 @@ def find_vulnerabilities( Lattice(cfg.nodes, analysis_type), ui_mode ) + with open(filename, 'w') as f: + json.dump(blackbox_mapping, f) + + return vulnerability_log From 19a6a42f0b2726cc668cff3fa3b6f94cd43b2707 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Mar 2018 18:13:22 -0800 Subject: [PATCH 192/541] Bump version to .12, 3.3 and later work --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 27e28828..2f46df5a 100644 --- a/setup.py +++ b/setup.py @@ -4,14 +4,14 @@ setup( name='python-taint', - version='0.11', + version='0.12', description='Find security vulnerabilities in Python web applications' ' using static analysis.', long_description=long_description, url='https://github.com/python-security/pyt', author='python-security', author_email='mr.thalmann@gmail.com', - download_url='https://github.com/python-security/pyt/archive/0.11.tar.gz', + download_url='https://github.com/python-security/pyt/archive/0.12.tar.gz', license='GPLv2', classifiers=[ 'Development Status :: 3 - Alpha', From 7aa580b8a6c60227f37aa3eddc09dfa741f7a23c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Mar 2018 19:50:36 -0800 Subject: [PATCH 193/541] [cleanup] Moved trigger_definitions to vulnerability_definitions to have somewhere to put the blackbox mapping, DRYd the args.startdate --- example/vulnerable_code/multi_chain.py | 19 +++++++++++ pyt/__main__.py | 32 +++++++------------ pyt/argument_helpers.py | 7 ++-- pyt/trigger_definitions_parser.py | 2 +- .../blackbox_mapping.json | 9 ++++++ .../django_trigger_words.pyt | 0 .../flask_trigger_words.pyt | 0 .../test_triggers.pyt | 0 8 files changed, 46 insertions(+), 23 deletions(-) create mode 100644 example/vulnerable_code/multi_chain.py create mode 100644 pyt/vulnerability_definitions/blackbox_mapping.json rename pyt/{trigger_definitions => vulnerability_definitions}/django_trigger_words.pyt (100%) rename pyt/{trigger_definitions => vulnerability_definitions}/flask_trigger_words.pyt (100%) rename pyt/{trigger_definitions => vulnerability_definitions}/test_triggers.pyt (100%) diff --git a/example/vulnerable_code/multi_chain.py b/example/vulnerable_code/multi_chain.py new file mode 100644 index 00000000..7be9e884 --- /dev/null +++ b/example/vulnerable_code/multi_chain.py @@ -0,0 +1,19 @@ +import subprocess +from flask import Flask, render_template, request + + +app = Flask(__name__) + + +@app.route('/multi_chain', methods=['POST']) +def multi_chain(): + suggestion = request.form['suggestion'] + x = fast_eddie(suggestion, 'the') + y = x + 'foo' + z = minnesota_fats(suggestion, 'sting') + ben = graham(y, z) + + subprocess.call(ben, shell=True) + + return render_template('multi_chain.html') + diff --git a/pyt/__main__.py b/pyt/__main__.py index ca0fc9d9..e024d92a 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -171,7 +171,9 @@ def parse_args(args): search_parser.add_argument('-sd', '--start-date', help='Start date for repo search. ' - 'Criteria used is Created Date.', type=valid_date) + 'Criteria used is Created Date.', + type=valid_date, + default=date(2010, 1, 1)) return parser.parse_args(args) @@ -221,24 +223,14 @@ def main(command_line_args=sys.argv[1:]): if args.which == 'search': set_github_api_token() - if args.start_date: - scan_github( - args.search_string, - args.start_date, - analysis, - analyse_repo, - args.csv_path, - ui_mode - ) - else: - scan_github( - args.search_string, - date(2010, 1, 1), - analysis, - analyse_repo, - args.csv_path, - ui_mode - ) + scan_github( + args.search_string, + args.start_date, + analysis, + analyse_repo, + args.csv_path, + ui_mode + ) exit() path = os.path.normpath(args.filepath) @@ -286,7 +278,7 @@ def main(command_line_args=sys.argv[1:]): ui_mode, VulnerabilityFiles( args.trigger_word_file, - arg.blackbox_mapping_file + args.blackbox_mapping_file ) ) vulnerability_log.print_report() diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index aa319851..508e6ebf 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -1,3 +1,4 @@ +import os from argparse import ArgumentTypeError from collections import namedtuple from datetime import datetime @@ -5,13 +6,15 @@ default_blackbox_mapping_file = os.path.join( - os.path.dirname(__file__) + os.path.dirname(__file__), + 'vulnerability_definitions', + 'blackbox_mapping.json' ) default_trigger_word_file = os.path.join( os.path.dirname(__file__), - 'trigger_definitions', + 'vulnerability_definitions', 'flask_trigger_words.pyt' ) diff --git a/pyt/trigger_definitions_parser.py b/pyt/trigger_definitions_parser.py index 222b434c..248be29a 100644 --- a/pyt/trigger_definitions_parser.py +++ b/pyt/trigger_definitions_parser.py @@ -40,7 +40,7 @@ def parse_section(iterator): return -def parse(trigger_word_file=default_trigger_word_file): +def parse(trigger_word_file): """Parse the file for source and sink definitions. Returns: diff --git a/pyt/vulnerability_definitions/blackbox_mapping.json b/pyt/vulnerability_definitions/blackbox_mapping.json new file mode 100644 index 00000000..402cab38 --- /dev/null +++ b/pyt/vulnerability_definitions/blackbox_mapping.json @@ -0,0 +1,9 @@ +{ + "does_not_propagate": [ + "fast_eddie" + ], + "propagates": [ + "minnesota_fats", + "graham" + ] +} \ No newline at end of file diff --git a/pyt/trigger_definitions/django_trigger_words.pyt b/pyt/vulnerability_definitions/django_trigger_words.pyt similarity index 100% rename from pyt/trigger_definitions/django_trigger_words.pyt rename to pyt/vulnerability_definitions/django_trigger_words.pyt diff --git a/pyt/trigger_definitions/flask_trigger_words.pyt b/pyt/vulnerability_definitions/flask_trigger_words.pyt similarity index 100% rename from pyt/trigger_definitions/flask_trigger_words.pyt rename to pyt/vulnerability_definitions/flask_trigger_words.pyt diff --git a/pyt/trigger_definitions/test_triggers.pyt b/pyt/vulnerability_definitions/test_triggers.pyt similarity index 100% rename from pyt/trigger_definitions/test_triggers.pyt rename to pyt/vulnerability_definitions/test_triggers.pyt From e51073902aa650da5fcd4c6d391cc2be2549dbd9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 5 Mar 2018 19:52:15 -0800 Subject: [PATCH 194/541] [blackbox stuff] start to check and save the mapping, still need to figure out UI --- pyt/vulnerabilities.py | 72 +++++++++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 25 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 7917e3aa..9bc19b93 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -356,19 +356,29 @@ def get_vulnerability_chains( def is_actually_vulnerable( - chain + chain, + blackbox_mapping ): for i in range(len(chain)): if isinstance(chain[i], BBorBInode): - user_says = input( - 'Is the return value of {} '.format(chain[i].label) + - 'with tainted argument "{}" vulnerable? (Y/n)'.format(chain[i-1].left_hand_side) - ).lower() - print(f'The user says {user_says}') - if user_says.startswith('n'): - print(f'\n\n\n\nThe user said {chain[i].func_name} DOES NOT ret a tainted val') + if chain[i].func_name in blackbox_mapping['propagates']: + print(f'so {chain[i].func_name} does propagate') + elif chain[i].func_name in blackbox_mapping['does_not_propagate']: + print(f'so {chain[i].func_name} does not propagate') return False - print(f'\n\n\n\nThe user said {chain[i].func_name} DOES ret a tainted val') + else: + # TKTK: move if interactive mode all the way up here? + user_says = input( + 'Is the return value of {} '.format(chain[i].label) + + 'with tainted argument "{}" vulnerable? (Y/n)'.format(chain[i-1].left_hand_side) + ).lower() + print(f'The user says {user_says}') + if user_says.startswith('n'): + print(f'\n\n\n\nThe user said {chain[i].func_name} DOES NOT ret a tainted val') + blackbox_mapping['does_not_propagate'].append(chain[i].func_name) + return False + blackbox_mapping['propagates'].append(chain[i].func_name) + print(f'\n\n\n\nThe user said {chain[i].func_name} DOES ret a tainted val') return True @@ -378,7 +388,8 @@ def get_vulnerability( triggers, lattice, cfg, - ui_mode + ui_mode, + blackbox_mapping ): """Get vulnerability between source and sink if it exists. @@ -391,6 +402,7 @@ def get_vulnerability( lattice(Lattice): The lattice we're analysing. cfg(CFG): .blackbox_assignments used in is_unknown, .nodes used in build_def_use_chain ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + blackbox_mapping(dict): TODO Returns: A Vulnerability if it exists, else None @@ -428,8 +440,13 @@ def get_vulnerability( def_use, [source.cfg_node] ): - if is_actually_vulnerable(chain): - print('We have a vulnerability!') + if is_actually_vulnerable(chain, blackbox_mapping): + # print(f'\n\n\n\nWe have a vulnerability {chain}!') + print(f'\n\n\n\nWe have a vulnerability !') + else: + # print(f'\n\n\n\nWe DO NOT have a vulnerability {chain}!') + print(f'\n\n\n\nWe DO NOT have a vulnerability !') + @@ -471,6 +488,9 @@ def get_vulnerability( sink.sanitisers, reassignment_nodes ) + elif ui_mode == UImode.INTERACTIVE: + print('figure stuff out') + print('figure stuff out') elif blackbox_assignment_in_chain: return UnknownVulnerability( source.cfg_node, source_trigger_word, @@ -492,7 +512,8 @@ def find_vulnerabilities_in_cfg( vulnerability_log, definitions, lattice, - ui_mode + ui_mode, + blackbox_mapping ): """Find vulnerabilities in a cfg. @@ -502,6 +523,7 @@ def find_vulnerabilities_in_cfg( definitions(trigger_definitions_parser.Definitions): Source and sink definitions. lattice(Lattice): The lattice we're analysing. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + blackbox_mapping(dict): TODO """ triggers = identify_triggers( cfg, @@ -517,7 +539,8 @@ def find_vulnerabilities_in_cfg( triggers, lattice, cfg, - ui_mode + ui_mode, + blackbox_mapping ) if vulnerability: vulnerability_log.append(vulnerability) @@ -527,8 +550,7 @@ def find_vulnerabilities( cfg_list, analysis_type, ui_mode, - trigger_word_file, - blackbox_mapping_file + vulnerability_files ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. @@ -536,16 +558,15 @@ def find_vulnerabilities( cfg_list(list[CFG]): the list of CFGs to scan. analysis_type(AnalysisBase): analysis object used to create lattice. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. - trigger_word_file(string): file containing trigger words. - blackbox_mapping_file(string): file containing whether or not a blackbox function returns a tainted value. + vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files Returns: A VulnerabilityLog with found vulnerabilities. """ - # TKTK: change to tuple^ - definitions = parse(trigger_word_file) - with open(blackbox_mapping_file) as f: + definitions = parse(vulnerability_files.triggers) + with open(vulnerability_files.blackbox_mapping) as f: blackbox_mapping = json.load(f) + print(f'BEFORE blackbox_mapping is {blackbox_mapping}') vulnerability_log = VulnerabilityLog() for cfg in cfg_list: @@ -554,10 +575,11 @@ def find_vulnerabilities( vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), - ui_mode + ui_mode, + blackbox_mapping ) - with open(filename, 'w') as f: - json.dump(blackbox_mapping, f) - + print(f'AFTER blackbox_mapping is {blackbox_mapping}') + with open(vulnerability_files.blackbox_mapping, 'w') as f: + json.dump(blackbox_mapping, f, indent=4) return vulnerability_log From 3dc65bfe359fc0136c6785a24907968fe1ac9446 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 8 Mar 2018 18:42:36 -0800 Subject: [PATCH 195/541] [cleanup] Removed unnecessary code from the get_vulnerability function, made secondary_nodes a default empty list --- pyt/vulnerabilities.py | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 968992b7..06a9691b 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -27,7 +27,7 @@ class TriggerNode(): - def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=None): + def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=[]): self.trigger_word = trigger_word self.sanitisers = sanitisers self.cfg_node = cfg_node @@ -280,6 +280,10 @@ def get_vulnerability(source, Uses triggers to find sanitisers. + Note: When a secondary node is in_constraint with the sink + but not the source, the secondary is a save_N_LHS + node made in process_function in interprocedural_cfg. + Args: source(TriggerNode): TriggerNode of the source. sink(TriggerNode): TriggerNode of the sink. @@ -291,28 +295,22 @@ def get_vulnerability(source, Returns: A Vulnerability if it exists, else None """ - source_in_sink = lattice.in_constraint(source.cfg_node, sink.cfg_node) - - secondary_nodes_in_sink = list() - if source.secondary_nodes: - secondary_nodes_in_sink = [secondary for secondary in source.secondary_nodes - if lattice.in_constraint(secondary, - sink.cfg_node)] - - trigger_node_in_sink = source_in_sink or secondary_nodes_in_sink - + secondary_nodes_in_sink = [secondary for secondary in source.secondary_nodes + if lattice.in_constraint(secondary, + sink.cfg_node)] sink_args = get_sink_args(sink.cfg_node) - - secondary_node_in_sink_args = None + tainted_node_in_sink_arg = None if sink_args: + if source.cfg_node.left_hand_side in sink_args: + tainted_node_in_sink_arg = source.cfg_node for node in secondary_nodes_in_sink: if node.left_hand_side in sink_args: - secondary_node_in_sink_args = node + tainted_node_in_sink_arg = node - trimmed_reassignment_nodes = list() - if secondary_node_in_sink_args: - trimmed_reassignment_nodes.append(secondary_node_in_sink_args) - node_in_the_vulnerability_chain = secondary_node_in_sink_args + if tainted_node_in_sink_arg: + trimmed_reassignment_nodes = list() + trimmed_reassignment_nodes.append(tainted_node_in_sink_arg) + node_in_the_vulnerability_chain = tainted_node_in_sink_arg # Here is where we do backwards slicing to traceback which nodes led to the vulnerability for secondary in reversed(source.secondary_nodes): if lattice.in_constraint(secondary, sink.cfg_node): @@ -320,12 +318,6 @@ def get_vulnerability(source, node_in_the_vulnerability_chain = secondary trimmed_reassignment_nodes.insert(0, node_in_the_vulnerability_chain) - source_lhs_in_sink_args = source.cfg_node.left_hand_side in sink_args\ - if sink_args else None - - lhs_in_sink_args = source_lhs_in_sink_args or secondary_node_in_sink_args - - if trigger_node_in_sink and lhs_in_sink_args: source_trigger_word = source.trigger_word sink_trigger_word = sink.trigger_word sink_is_sanitised = is_sanitised( From b2bc7198841aae88125f43689c2933e16e911771 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 15 Mar 2018 16:10:02 -0700 Subject: [PATCH 196/541] Some huge vulnerabilities.py changes and cleanup, including a vuln_factory + alphabetize enums, make all end line comments have 2 spaces not 1, add AssignmentCallNode docstrings and DRYness, cleanup dead SinkArgsError code, rename vulnerability_log to vulnerability_helper, refactor all [0:..] to [:..] --- pyt/argument_helpers.py | 4 +- pyt/base_cfg.py | 62 ++-- pyt/github_search.py | 3 - pyt/repo_runner.py | 2 +- pyt/vulnerabilities.py | 271 ++++++++---------- .../blackbox_mapping.json | 7 +- ...ability_log.py => vulnerability_helper.py} | 111 +++++-- 7 files changed, 231 insertions(+), 229 deletions(-) rename pyt/{vulnerability_log.py => vulnerability_helper.py} (56%) diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index 508e6ebf..7f4aabdd 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -29,8 +29,8 @@ def valid_date(s): class UImode(Enum): - NORMAL = 0 - INTERACTIVE = 1 + INTERACTIVE = 0 + NORMAL = 1 TRIM = 2 diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index bda9d454..35305a17 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -195,7 +195,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num class AssignmentCallNode(AssignmentNode): - """Node used for X.""" + """Node used for when a call happens inside of an assignment.""" def __init__( self, @@ -209,7 +209,7 @@ def __init__( path, call_node ): - """Create a X. + """Create an Assignment Call node. Args: label(str): The label of the node, describing the expression it represents. @@ -400,7 +400,7 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): if node and not first_node: # (Make sure first_node isn't already set.) # first_node is always a "node_to_connect", because it won't have ingoing otherwise # If we have e.g. - # import os # An ignored node + # import os # An ignored node # value = None # first_node will be `value = None` if hasattr(node, 'ingoing'): @@ -491,7 +491,7 @@ def visit_If(self, node): orelse_last_nodes = self.handle_or_else(node.orelse, test) body_connect_stmts.last_statements.extend(orelse_last_nodes) else: - body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node + body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node last_statements = self.remove_breaks(body_connect_stmts.last_statements) @@ -575,7 +575,7 @@ def extract_left_hand_side(self, target): left_hand_side.replace('*', '') if '[' in left_hand_side: index = left_hand_side.index('[') - left_hand_side = target[0:index] + left_hand_side = target[:index] return left_hand_side @@ -607,7 +607,7 @@ def assign_tuple_target(self, node, right_hand_side_variables): self.connect_nodes(new_assignment_nodes) - return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node + return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node def assign_multi_target(self, node, right_hand_side_variables): new_assignment_nodes = list() @@ -627,12 +627,12 @@ def assign_multi_target(self, node, right_hand_side_variables): ))) self.connect_nodes(new_assignment_nodes) - return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node + return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node def visit_Assign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - if isinstance(node.targets[0], ast.Tuple): # x,y = [1,2] + if isinstance(node.targets[0], ast.Tuple): # x,y = [1,2] if isinstance(node.value, ast.Tuple): return self.assign_tuple_target(node, rhs_visitor.result) elif isinstance(node.value, ast.Call): @@ -678,40 +678,30 @@ def visit_Assign(self, node): def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" - self.undecided = True # Used for handling functions in assignments + self.undecided = True # Used for handling functions in assignments call = self.visit(ast_node.value) - call_label = '' - call_assignment = None - - # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - vars_visitor = VarsVisitor() - vars_visitor.visit(ast_node.value) - call_label = call.left_hand_side + if isinstance(call, BBorBInode): - call_assignment = AssignmentCallNode( - left_hand_label + ' = ' + call_label, - left_hand_label, - ast_node, - [call.left_hand_side], - vv_result=vars_visitor.result, - line_number=ast_node.lineno, - path=self.filenames[-1], - call_node=call - ) + # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. + vars_visitor = VarsVisitor() + vars_visitor.visit(ast_node.value) + vv_result = vars_visitor.result # Assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer elif isinstance(call, AssignmentNode): - call_assignment = AssignmentCallNode( - left_hand_label + ' = ' + call_label, - left_hand_label, - ast_node, - [call.left_hand_side], - vv_result=[], - line_number=ast_node.lineno, - path=self.filenames[-1], - call_node=call - ) + vv_result = list() + + call_assignment = AssignmentCallNode( + left_hand_label + ' = ' + call_label, + left_hand_label, + ast_node, + [call.left_hand_side], + vv_result=vv_result, + line_number=ast_node.lineno, + path=self.filenames[-1], + call_node=call + ) call.connect(call_assignment) self.nodes.append(call_assignment) diff --git a/pyt/github_search.py b/pyt/github_search.py index 154242cd..0c54ccbe 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -8,7 +8,6 @@ from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .repo_runner import add_repo_to_csv, NoEntryPathError from .save import save_repo_scan -from .vulnerabilities import SinkArgsError DEFAULT_TIMEOUT_IN_SECONDS = 60 @@ -228,8 +227,6 @@ def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv else: save_repo_scan(repo, r.path, vulnerability_log=None) r.clean_up() - except SinkArgsError as err: - save_repo_scan(repo, r.path, vulnerability_log=None, error=err) except SyntaxError as err: save_repo_scan(repo, r.path, vulnerability_log=None, error=err) except IOError as err: diff --git a/pyt/repo_runner.py b/pyt/repo_runner.py index 78ad414b..9af8acfe 100644 --- a/pyt/repo_runner.py +++ b/pyt/repo_runner.py @@ -27,7 +27,7 @@ def clone(self): r = self.URL.split('/')[-1].split('.') if len(r) > 1: - self.directory = '.'.join(r[0:-1]) + self.directory = '.'.join(r[:-1]) else: self.directory = r[0] diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 75f5649d..eace2c07 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -17,11 +17,10 @@ from .right_hand_side_visitor import RHSVisitor from .trigger_definitions_parser import parse from .vars_visitor import VarsVisitor -from .vulnerability_log import ( - SanitisedVulnerability, - UnknownVulnerability, - Vulnerability, - VulnerabilityLog +from .vulnerability_helper import ( + vuln_factory, + VulnerabilityLog, + VulnerabilityType ) @@ -272,67 +271,19 @@ def find_sanitiser_nodes( yield sanitiser_tuple.cfg_node -def is_sanitised( - sink, - sanitiser_dict, - lattice -): - """Check if sink is sanitised by any santiser in the sanitiser_dict. - - Args: - sink(TriggerNode): TriggerNode of the sink. - sanitiser_dict(dict): dictionary of sink sanitiser pairs. - lattice(Lattice): The lattice we're analysing. - """ - for sanitiser in sink.sanitisers: - for cfg_node in sanitiser_dict[sanitiser]: - if lattice.in_constraint(cfg_node, sink.cfg_node): - return True - return False - - -class SinkArgsError(Exception): - pass - - -def is_unknown( - trimmed_reassignment_nodes, - blackbox_assignments -): - """Check if vulnerability is unknown by seeing if a blackbox - assignment is in trimmed_reassignment_nodes. - - Args: - trimmed_reassignment_nodes(list[AssignmentNode]): reassignments leading to the vulnerability. - blackbox_assignments(set[AssignmentNode]): set of blackbox assignments. - - Returns: - AssignmentNode or None - """ - for node in trimmed_reassignment_nodes: - if node in blackbox_assignments: - return node - return None - - -def get_sink_args( - cfg_node -): +def get_sink_args(cfg_node): if isinstance(cfg_node.ast_node, ast.Call): rhs_visitor = RHSVisitor() rhs_visitor.visit(cfg_node.ast_node) return rhs_visitor.result elif isinstance(cfg_node.ast_node, ast.Assign): return cfg_node.right_hand_side_variables - - vv = VarsVisitor() - other_results = list() - if isinstance(cfg_node, BBorBInode): - other_results = cfg_node.args + elif isinstance(cfg_node, BBorBInode): + return cfg_node.args else: + vv = VarsVisitor() vv.visit(cfg_node.ast_node) - - return vv.result + other_results + return vv.result def get_vulnerability_chains( @@ -341,6 +292,14 @@ def get_vulnerability_chains( def_use, chain ): + """Traverses the def-use graph to find all paths from source to sink that cause a vulnerability. + + Args: + current_node() + sink() + def_use(dict): + chain(list(Node)): + """ for use in def_use[current_node]: if use == sink: yield chain @@ -355,31 +314,64 @@ def get_vulnerability_chains( ) -def is_actually_vulnerable( +def how_vulnerable( chain, - blackbox_mapping + blackbox_mapping, + sanitiser_nodes, + blackbox_assignments, + ui_mode, + vuln_deets ): - for i in range(len(chain)): - if isinstance(chain[i], BBorBInode): - if chain[i].func_name in blackbox_mapping['propagates']: - print(f'so {chain[i].func_name} does propagate') - elif chain[i].func_name in blackbox_mapping['does_not_propagate']: - print(f'so {chain[i].func_name} does not propagate') - return False - else: - # TKTK: move if interactive mode all the way up here? + """Iterates through the chain of nodes and checks the blackbox nodes against the blackbox mapping and sanitiser dictionary. + + Args: + chain(list(Node)): TODO + blackbox_mapping(dict): + sanitiser_nodes(set): + blackbox_assignments(set[AssignmentNode]): set of blackbox assignments, includes the ReturnNode's of BBorBInode's. + ui_mode(UImode): determines if we interact with the user when we don't already have a blackbox mapping available. + vuln_deets(dict): vulnerability details. + + Returns: + A VulnerabilityType depending on how vulnerable the chain is. + """ + for i, current_node in enumerate(chain): + if current_node in sanitiser_nodes: + vuln_deets['sanitiser'] = current_node + return Vulnerability.SANITISED + + if isinstance(current_node, BBorBInode): + if current_node.func_name in blackbox_mapping['propagates']: + continue + elif current_node.func_name in blackbox_mapping['does_not_propagate']: + return VulnerabilityType.FALSE + elif ui_mode == UImode.INTERACTIVE: user_says = input( - 'Is the return value of {} '.format(chain[i].label) + - 'with tainted argument "{}" vulnerable? (Y/n)'.format(chain[i-1].left_hand_side) + 'Is the return value of {} with tainted argument "{}" vulnerable? (Y/n)'.format( + current_node.label, + chain[i-1].left_hand_side + ) ).lower() - print(f'The user says {user_says}') if user_says.startswith('n'): - print(f'\n\n\n\nThe user said {chain[i].func_name} DOES NOT ret a tainted val') - blackbox_mapping['does_not_propagate'].append(chain[i].func_name) - return False - blackbox_mapping['propagates'].append(chain[i].func_name) - print(f'\n\n\n\nThe user said {chain[i].func_name} DOES ret a tainted val') - return True + blackbox_mapping['does_not_propagate'].append(current_node.func_name) + return VulnerabilityType.FALSE + blackbox_mapping['propagates'].append(current_node.func_name) + else: + vuln_deets['unknown_assignment'] = current_node + return VulnerabilityType.UNKNOWN + return VulnerabilityType.TRUE + + +def get_tainted_node_in_sink_args( + sink_args, + nodes_in_constaint +): + if not sink_args: + return None + # Starts with the node closest to the sink + for node in nodes_in_constaint: + if node.left_hand_side in sink_args: + return node def get_vulnerability( @@ -411,83 +403,58 @@ def get_vulnerability( Returns: A Vulnerability if it exists, else None """ - secondary_nodes_in_sink = [secondary for secondary in source.secondary_nodes - if lattice.in_constraint(secondary, - sink.cfg_node)] + nodes_in_constaint = [secondary for secondary in reversed(source.secondary_nodes) + if lattice.in_constraint(secondary, + sink.cfg_node)] + nodes_in_constaint.append(source.cfg_node) + sink_args = get_sink_args(sink.cfg_node) - tainted_node_in_sink_arg = None - if sink_args: - if source.cfg_node.left_hand_side in sink_args: - tainted_node_in_sink_arg = source.cfg_node - for node in secondary_nodes_in_sink: - if node.left_hand_side in sink_args: - tainted_node_in_sink_arg = node + tainted_node_in_sink_arg = get_tainted_node_in_sink_args( + sink_args, + nodes_in_constaint + ) if tainted_node_in_sink_arg: - if ui_mode == UImode.INTERACTIVE: - def_use = build_def_use_chain(cfg.nodes) - for chain in get_vulnerability_chains( - source.cfg_node, - sink.cfg_node, - def_use, - [source.cfg_node] - ): - if is_actually_vulnerable(chain, blackbox_mapping): - # print(f'\n\n\n\nWe have a vulnerability {chain}!') - print(f'\n\n\n\nWe have a vulnerability !') - else: - # print(f'\n\n\n\nWe DO NOT have a vulnerability {chain}!') - print(f'\n\n\n\nWe DO NOT have a vulnerability !') - - trimmed_reassignment_nodes = list() - trimmed_reassignment_nodes.append(tainted_node_in_sink_arg) - node_in_the_vulnerability_chain = tainted_node_in_sink_arg - # Here is where we do backwards slicing to traceback which nodes led to the vulnerability - for secondary in reversed(source.secondary_nodes): - if lattice.in_constraint(secondary, sink.cfg_node): - if secondary.left_hand_side in node_in_the_vulnerability_chain.right_hand_side_variables: - node_in_the_vulnerability_chain = secondary - trimmed_reassignment_nodes.insert(0, node_in_the_vulnerability_chain) - - source_trigger_word = source.trigger_word - sink_trigger_word = sink.trigger_word - - sink_is_sanitised = is_sanitised( - sink, - triggers.sanitiser_dict, - lattice - ) - # TKTK: We do not have to call is_unknown if interactive mode is on - blackbox_assignment_in_chain = is_unknown( - trimmed_reassignment_nodes, - cfg.blackbox_assignments - ) - reassignment_nodes = source.secondary_nodes - if ui_mode == UImode.TRIM: - reassignment_nodes = trimmed_reassignment_nodes - if sink_is_sanitised: - return SanitisedVulnerability( - source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - sink.sanitisers, - reassignment_nodes - ) - elif ui_mode == UImode.INTERACTIVE: - print('figure stuff out') - print('figure stuff out') - elif blackbox_assignment_in_chain: - return UnknownVulnerability( - source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - blackbox_assignment_in_chain, - reassignment_nodes - ) - else: - return Vulnerability( - source.cfg_node, source_trigger_word, - sink.cfg_node, sink_trigger_word, - reassignment_nodes + vuln_deets = { + 'source': source.cfg_node, + 'source_trigger_word': source.trigger_word, + 'sink': sink.cfg_node, + 'sink_trigger_word': sink.trigger_word, + 'reassignment_nodes': source.secondary_nodes + } + + # Imma get this working and then see if there is a better way + # Maybe using blackbox_mapping.json, maybe not. + sanitiser_nodes = set() + if sink.sanitisers: + print(f'so sink.sanitisers is {sink.sanitisers}') + for sanitiser in sink.sanitisers: + print(f'so triggers.sanitiser_dict[sanitiser] is {triggers.sanitiser_dict[sanitiser]}') + for cfg_node in triggers.sanitiser_dict[sanitiser]: + sanitiser_nodes.append(cfg_node) + + def_use = build_def_use_chain(cfg.nodes) + for chain in get_vulnerability_chains( + source.cfg_node, + sink.cfg_node, + def_use, + [source.cfg_node] + ): + vulnerability_type = how_vulnerable( + chain, + blackbox_mapping, + sanitiser_nodes, + cfg.blackbox_assignments, + ui_mode, + vuln_deets ) + if vulnerability_type == VulnerabilityType.FALSE: + continue + if ui_mode != UImode.NORMAL: + vuln_deets['reassignment_nodes'] = chain + + return vuln_factory(vulnerability_type)(**vuln_deets) + return None @@ -550,7 +517,6 @@ def find_vulnerabilities( definitions = parse(vulnerability_files.triggers) with open(vulnerability_files.blackbox_mapping) as f: blackbox_mapping = json.load(f) - print(f'BEFORE blackbox_mapping is {blackbox_mapping}') vulnerability_log = VulnerabilityLog() for cfg in cfg_list: @@ -562,7 +528,6 @@ def find_vulnerabilities( ui_mode, blackbox_mapping ) - print(f'AFTER blackbox_mapping is {blackbox_mapping}') with open(vulnerability_files.blackbox_mapping, 'w') as f: json.dump(blackbox_mapping, f, indent=4) diff --git a/pyt/vulnerability_definitions/blackbox_mapping.json b/pyt/vulnerability_definitions/blackbox_mapping.json index 402cab38..96c749fd 100644 --- a/pyt/vulnerability_definitions/blackbox_mapping.json +++ b/pyt/vulnerability_definitions/blackbox_mapping.json @@ -1,9 +1,10 @@ { "does_not_propagate": [ - "fast_eddie" + "fast_eddie", + "url_for" ], "propagates": [ - "minnesota_fats", - "graham" + "graham", + "minnesota_fats" ] } \ No newline at end of file diff --git a/pyt/vulnerability_log.py b/pyt/vulnerability_helper.py similarity index 56% rename from pyt/vulnerability_log.py rename to pyt/vulnerability_helper.py index d74fd653..f5208757 100644 --- a/pyt/vulnerability_log.py +++ b/pyt/vulnerability_helper.py @@ -1,9 +1,12 @@ -"""This module contains a vulnerability log. +"""This module contains vulnerability helpers. -This log is able to give precise information +Mostly is contains logs to give precise information about where a vulnerability is located. The log is printed to standard output. + +It is only used in vulnerabilities.py """ +from enum import Enum class VulnerabilityLog(): @@ -40,7 +43,8 @@ def __str__(self): reassignment += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + - node.label for node in self.reassignment_nodes]) + node.label for node in self.reassignment_nodes + ]) return reassignment @@ -48,34 +52,45 @@ class Vulnerability(): """Vulnerability containing the source and the sources trigger word, the sink and the sinks trigger word.""" - def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, reassignment_nodes): + def __init__( + self, + source, + source_trigger_word, + sink, + sink_trigger_word, + reassignment_nodes + ): """Set source and sink information.""" self.source = source self.source_trigger_word = source_trigger_word self.sink = sink self.sink_trigger_word = sink_trigger_word - self.reassignment_nodes = reassignment_nodes - self.__remove_sink_from_secondary_nodes() + self.reassignment_nodes = reassignment_nodes + self._remove_sink_from_secondary_nodes() - def __remove_sink_from_secondary_nodes(self): - if self.reassignment_nodes: - try: - self.reassignment_nodes.remove(self.sink) - except ValueError: - pass + def _remove_sink_from_secondary_nodes(self): + try: + self.reassignment_nodes.remove(self.sink) + except ValueError: + pass def __str__(self): """Pretty printing of a vulnerability.""" reassigned_str = Reassigned(self.reassignment_nodes) - return ('File: {}\n > User input at line {}, trigger word "{}":' - ' \n\t{}{}\nFile: {}\n > reaches line {}, trigger word' - ' "{}": \n\t{}'.format( - self.source.path, self.source.line_number, - self.source_trigger_word, self.source.label, - reassigned_str, self.sink.path, self.sink.line_number, - self.sink_trigger_word, self.sink.label)) + return ( + 'File: {}\n' + ' > User input at line {}, trigger word "{}": \n' + '\t {}{}\nFile: {}\n' + ' > reaches line {}, trigger word "{}": \n' + '\t{}'.format( + self.source.path, + self.source.line_number, self.source_trigger_word, + self.source.label, reassigned_str, self.sink.path, + self.sink.line_number, self.sink_trigger_word, + self.sink.label + ) + ) class SanitisedVulnerability(Vulnerability): @@ -83,8 +98,15 @@ class SanitisedVulnerability(Vulnerability): trigger word, the sink and the sinks trigger word. Also containing the sanitiser.""" - def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, sanitiser, reassignment_nodes): + def __init__( + self, + source, + source_trigger_word, + sink, + sink_trigger_word, + sanitiser, + reassignment_nodes + ): """Set source, sink and sanitiser information.""" super().__init__(source, source_trigger_word, sink, sink_trigger_word, reassignment_nodes) @@ -92,9 +114,11 @@ def __init__(self, source, source_trigger_word, def __str__(self): """Pretty printing of a vulnerability.""" - super_str = super().__str__() - return super_str + ('\nThis vulnerability is potentially sanitised by:' - ' {}'.format(self.sanitiser)) + return ( + super().__str__() + + '\nThis vulnerability is potentially sanitised by: ' + + self.sanitiser + ) class UnknownVulnerability(Vulnerability): @@ -102,15 +126,40 @@ class UnknownVulnerability(Vulnerability): trigger word, the sink and the sinks trigger word. Also containing the blackbox assignment.""" - def __init__(self, source, source_trigger_word, - sink, sink_trigger_word, blackbox_assignment, reassignment_nodes): + def __init__( + self, + source, + source_trigger_word, + sink, + sink_trigger_word, + unknown_assignment, + reassignment_nodes + ): """Set source, sink and blackbox assignment information.""" super().__init__(source, source_trigger_word, sink, sink_trigger_word, reassignment_nodes) - self.blackbox_assignment = blackbox_assignment + self.unknown_assignment = unknown_assignment def __str__(self): """Pretty printing of a vulnerability.""" - super_str = super().__str__() - return super_str + ('\nThis vulnerability is unknown due to:' - ' {}'.format(self.blackbox_assignment)) + return ( + super().__str__() + + '\nThis vulnerability is unknown due to: ' + + str(self.unknown_assignment) + ) + + +class VulnerabilityType(Enum): + FALSE = 0 + SANITISED = 1 + TRUE = 2 + UNKNOWN = 3 + + +def vuln_factory(vulnerability_type): + if vulnerability_type == VulnerabilityType.UNKNOWN: + return UnknownVulnerability + elif vulnerability_type == VulnerabilityType.SANITISED: + return SanitisedVulnerability + else: + return Vulnerability From e5d0b2c238097a0b44b0fb284ba763676c7f988d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 15 Mar 2018 21:04:44 -0700 Subject: [PATCH 197/541] Disinfected all but 3 tests, Scrubbed ugly special case code for VarsVisiting during an AssignmentCallNode, Rinsed build_def_use_chain, Wiped get_uses --- example/vulnerable_code/path_traversal.py | 2 +- pyt/__main__.py | 8 +- pyt/argument_helpers.py | 8 +- pyt/base_cfg.py | 22 ++-- pyt/definition_chains.py | 43 +++---- pyt/interprocedural_cfg.py | 11 +- pyt/reaching_definitions_taint.py | 15 +-- pyt/vulnerabilities.py | 45 +++---- pyt/vulnerability_helper.py | 32 +++-- tests/command_line_test.py | 8 +- tests/vulnerabilities_across_files_test.py | 16 ++- tests/vulnerabilities_test.py | 130 ++++++++++++++------- 12 files changed, 192 insertions(+), 148 deletions(-) diff --git a/example/vulnerable_code/path_traversal.py b/example/vulnerable_code/path_traversal.py index cb350fb3..7c80e2c0 100644 --- a/example/vulnerable_code/path_traversal.py +++ b/example/vulnerable_code/path_traversal.py @@ -16,7 +16,7 @@ def cat_picture(): if not image_name: image_name = 'foo' return 404 - foo = outer(inner(), image_name) # Nested call after if caused the problem + foo = outer(inner(), image_name) # Nested call after if caused the problem send_file(foo) return 'idk' diff --git a/pyt/__main__.py b/pyt/__main__.py index e024d92a..51bd1b7a 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -188,8 +188,8 @@ def analyse_repo(github_repo, analysis_type, ui_mode): analysis_type, ui_mode, VulnerabilityFiles( - args.trigger_word_file, - args.blackbox_mapping_file + args.blackbox_mapping_file, + args.trigger_word_file ) ) return vulnerability_log @@ -277,8 +277,8 @@ def main(command_line_args=sys.argv[1:]): analysis, ui_mode, VulnerabilityFiles( - args.trigger_word_file, - args.blackbox_mapping_file + args.blackbox_mapping_file, + args.trigger_word_file ) ) vulnerability_log.print_report() diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index 7f4aabdd..a020431e 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -36,8 +36,8 @@ class UImode(Enum): VulnerabilityFiles = namedtuple( 'VulnerabilityFiles', - [ - 'triggers', - 'blackbox_mapping' - ] + [ + 'blackbox_mapping', + 'triggers' + ] ) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 35305a17..99bca7ce 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -203,7 +203,6 @@ def __init__( left_hand_side, ast_node, right_hand_side_variables, - vv_result, *, line_number, path, @@ -216,13 +215,11 @@ def __init__( left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. ast_node right_hand_side_variables(list[str]): A list of variables on the right hand side. - vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. line_number(Optional[int]): The line of the expression the Node represents. path(string): Current filename. call_node(BBorBInode or RestoreNode): Used in connect_control_flow_node. """ super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) - self.vv_result = vv_result self.call_node = call_node self.blackbox = False @@ -314,8 +311,7 @@ def should_connect_node(self, node): """Determine if node should be in the final CFG.""" if isinstance(node, (FunctionNode, IgnoredNode)): return False - else: - return True + return True def get_inner_most_function_call(self, call_node): # Loop to inner most function call @@ -684,20 +680,18 @@ def assignment_call_node(self, left_hand_label, ast_node): call_label = call.left_hand_side if isinstance(call, BBorBInode): - # Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. + # Necessary to know e.g. + # `image_name = image_name.replace('..', '')` + # is a reassignment. vars_visitor = VarsVisitor() vars_visitor.visit(ast_node.value) - vv_result = vars_visitor.result - # Assignment after returned user-defined function call e.g. RestoreNode ¤call_1 = ret_outer - elif isinstance(call, AssignmentNode): - vv_result = list() + call.right_hand_side_variables.extend(vars_visitor.result) call_assignment = AssignmentCallNode( left_hand_label + ' = ' + call_label, left_hand_label, ast_node, [call.left_hand_side], - vv_result=vv_result, line_number=ast_node.lineno, path=self.filenames[-1], call_node=call @@ -886,8 +880,10 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_node.label = LHS + " = " + RHS call_node.right_hand_side_variables = rhs_vars - # Used in get_sink_args - call_node.args = rhs_vars + # Used in get_sink_args, not using right_hand_side_variables because it is extended in AssignmentCallNode + rhs_visitor = RHSVisitor() + rhs_visitor.visit(node) + call_node.args = rhs_visitor.result if blackbox: self.blackbox_assignments.add(call_node) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index b17af9d2..e61c3c01 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -1,6 +1,11 @@ import ast -from .base_cfg import AssignmentNode, EntryOrExitNode +from .base_cfg import ( + AssignmentNode, + AssignmentCallNode, + BBorBInode, + EntryOrExitNode +) from .constraint_table import constraint_table from .lattice import Lattice from .reaching_definitions import ReachingDefinitionsAnalysis @@ -52,38 +57,24 @@ def build_use_def_chain(cfg_nodes): return use_def -def get_uses(node): - if isinstance(node, AssignmentNode): - result = list() - for var in node.right_hand_side_variables: - if var not in node.left_hand_side: - result.append(var) - return result - else: - return [] - # elif isinstance(node, EntryOrExitNode): - # return [] - # else: - # print(f'\n\n\ntype(node) is {type(node)}') - # print(f'node is {node}\n\n\n') - # raise - - def build_def_use_chain(cfg_nodes): def_use = dict() lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) # For every node for node in cfg_nodes: - # Make an empty list for each def + # That's a definition if isinstance(node, AssignmentNode): + # Make an empty list for it in def_use dict def_use[node] = list() - # Get its uses - for variable in get_uses(node): - # Loop through all the nodes before it - for earlier_node in get_constraint_nodes(node, lattice): - # and add to the 'uses list' of each earlier node, when applicable - if variable in earlier_node.left_hand_side: - def_use[earlier_node].append(node) + + # Get its uses + for variable in node.right_hand_side_variables: + # Loop through most of the nodes before it + for earlier_node in get_constraint_nodes(node, lattice): + # and add to the 'uses list' of each earlier node, when applicable + # 'earlier node' here being a simplification + if variable in earlier_node.left_hand_side: + def_use[earlier_node].append(node) return def_use diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index ddbc1b22..003eb3e5 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -648,7 +648,16 @@ def visit_Call(self, node): return self.add_blackbox_or_builtin_call(node, blackbox=True) return self.add_blackbox_or_builtin_call(node, blackbox=False) - def add_module(self, module, module_or_package_name, local_names, import_alias_mapping, is_init=False, from_from=False, from_fdid=False): + def add_module( + self, + module, + module_or_package_name, + local_names, + import_alias_mapping, + is_init=False, + from_from=False, + from_fdid=False + ): """ Returns: The ExitNode that gets attached to the CFG of the class. diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index a93ec544..6e5d613a 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,7 +1,4 @@ -from .base_cfg import ( - AssignmentCallNode, - AssignmentNode -) +from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase @@ -15,14 +12,8 @@ def fixpointmethod(self, cfg_node): if isinstance(cfg_node, AssignmentNode): arrow_result = JOIN - # There are two if statements on purpose - if isinstance(cfg_node, AssignmentCallNode): - # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - if cfg_node.left_hand_side not in cfg_node.vv_result: - # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN - arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - # Other reassignment check - elif cfg_node.left_hand_side not in cfg_node.right_hand_side_variables: + # Reassignment check + if cfg_node.left_hand_side not in cfg_node.right_hand_side_variables: # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index eace2c07..9ec66b28 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -154,31 +154,20 @@ def update_assignments( ): for node in assignment_nodes: for other in assignment_list: - if node not in assignment_list: - append_if_reassigned(assignment_list, other, node, lattice) + if node not in assignment_list and lattice.in_constraint(other, node): + append_node_if_reassigned(assignment_list, other, node) -def append_if_reassigned( +def append_node_if_reassigned( assignment_list, secondary, - node, - lattice + node ): - try: - reassigned = False - # vv_result is necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - if isinstance(node, AssignmentCallNode) and secondary.left_hand_side in node.vv_result: - reassigned = True - elif secondary.left_hand_side in node.right_hand_side_variables: - reassigned = True - elif secondary.left_hand_side == node.left_hand_side: - reassigned = True - if reassigned and lattice.in_constraint(secondary, node): - assignment_list.append(node) - except AttributeError: - print(secondary) - print('EXCEPT' + secondary) - exit(0) + if ( + secondary.left_hand_side in node.right_hand_side_variables or + secondary.left_hand_side == node.left_hand_side + ): + assignment_list.append(node) def find_triggers( @@ -248,8 +237,10 @@ def build_sanitiser_node_dict( sanitiser_node_dict = dict() for sanitiser in sanitisers: - sanitiser_node_dict[sanitiser] = list(find_sanitiser_nodes(sanitiser, - sanitisers_in_file)) + sanitiser_node_dict[sanitiser] = list(find_sanitiser_nodes( + sanitiser, + sanitisers_in_file + )) return sanitiser_node_dict @@ -338,7 +329,7 @@ def how_vulnerable( for i, current_node in enumerate(chain): if current_node in sanitiser_nodes: vuln_deets['sanitiser'] = current_node - return Vulnerability.SANITISED + return VulnerabilityType.SANITISED if isinstance(current_node, BBorBInode): if current_node.func_name in blackbox_mapping['propagates']: @@ -423,22 +414,18 @@ def get_vulnerability( 'reassignment_nodes': source.secondary_nodes } - # Imma get this working and then see if there is a better way - # Maybe using blackbox_mapping.json, maybe not. sanitiser_nodes = set() if sink.sanitisers: - print(f'so sink.sanitisers is {sink.sanitisers}') for sanitiser in sink.sanitisers: - print(f'so triggers.sanitiser_dict[sanitiser] is {triggers.sanitiser_dict[sanitiser]}') for cfg_node in triggers.sanitiser_dict[sanitiser]: - sanitiser_nodes.append(cfg_node) + sanitiser_nodes.add(cfg_node) def_use = build_def_use_chain(cfg.nodes) for chain in get_vulnerability_chains( source.cfg_node, sink.cfg_node, def_use, - [source.cfg_node] + [] ): vulnerability_type = how_vulnerable( chain, diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerability_helper.py index f5208757..7f10a735 100644 --- a/pyt/vulnerability_helper.py +++ b/pyt/vulnerability_helper.py @@ -80,9 +80,9 @@ def __str__(self): reassigned_str = Reassigned(self.reassignment_nodes) return ( 'File: {}\n' - ' > User input at line {}, trigger word "{}": \n' + ' > User input at line {}, trigger word "{}":\n' '\t {}{}\nFile: {}\n' - ' > reaches line {}, trigger word "{}": \n' + ' > reaches line {}, trigger word "{}":\n' '\t{}'.format( self.source.path, self.source.line_number, self.source_trigger_word, @@ -104,12 +104,17 @@ def __init__( source_trigger_word, sink, sink_trigger_word, - sanitiser, - reassignment_nodes + reassignment_nodes, + sanitiser ): """Set source, sink and sanitiser information.""" - super().__init__(source, source_trigger_word, - sink, sink_trigger_word, reassignment_nodes) + super().__init__( + source, + source_trigger_word, + sink, + sink_trigger_word, + reassignment_nodes + ) self.sanitiser = sanitiser def __str__(self): @@ -117,7 +122,7 @@ def __str__(self): return ( super().__str__() + '\nThis vulnerability is potentially sanitised by: ' + - self.sanitiser + str(self.sanitiser) ) @@ -132,12 +137,17 @@ def __init__( source_trigger_word, sink, sink_trigger_word, - unknown_assignment, - reassignment_nodes + reassignment_nodes, + unknown_assignment ): """Set source, sink and blackbox assignment information.""" - super().__init__(source, source_trigger_word, - sink, sink_trigger_word, reassignment_nodes) + super().__init__( + source, + source_trigger_word, + sink, + sink_trigger_word, + reassignment_nodes + ) self.unknown_assignment = unknown_assignment def __str__(self): diff --git a/tests/command_line_test.py b/tests/command_line_test.py index 6749677c..e3c6992c 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -24,10 +24,10 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] - [-p | -vp | -trim] [-t TRIGGER_WORD_FILE] [-py2] - [-l LOG_LEVEL] [-a ADAPTOR] [-db] - [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-li | -re | -rt] - [-intra] [-ppm] + [-p | -vp | -trim | -i] [-t TRIGGER_WORD_FILE] + [-b BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] + [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] + [-li | -re | -rt] [-intra] [-ppm] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 0c9a6153..e1fdab51 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -3,6 +3,12 @@ from .base_test_case import BaseTestCase from pyt import trigger_definitions_parser, vulnerabilities +from pyt.argument_helpers import ( + default_blackbox_mapping_file, + default_trigger_word_file, + UImode, + VulnerabilityFiles +) from pyt.ast_helper import get_call_names_as_string from pyt.base_cfg import Node from pyt.constraint_table import constraint_table, initialize_constraint_table @@ -31,7 +37,15 @@ def run_analysis(self, path): analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - return vulnerabilities.find_vulnerabilities(cfg_list, ReachingDefinitionsTaintAnalysis) + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + default_trigger_word_file + ) + ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection.py') diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index aeb39478..50154121 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -1,12 +1,28 @@ import os from .base_test_case import BaseTestCase -from pyt import trigger_definitions_parser, vulnerabilities + +from pyt import ( + trigger_definitions_parser, + vulnerabilities +) +from pyt.argument_helpers import ( + default_blackbox_mapping_file, + default_trigger_word_file, + UImode, + VulnerabilityFiles +) from pyt.base_cfg import Node -from pyt.constraint_table import constraint_table, initialize_constraint_table +from pyt.constraint_table import( + constraint_table, + initialize_constraint_table +) from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import is_django_view_function, is_flask_route_function +from pyt.framework_helper import( + is_django_view_function, + is_flask_route_function +) from pyt.lattice import Lattice from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -20,7 +36,14 @@ def get_lattice_elements(self, cfg_nodes): return cfg_nodes def test_parse(self): - definitions = vulnerabilities.parse(trigger_word_file=os.path.join(os.getcwd(), 'pyt', 'trigger_definitions', 'test_triggers.pyt')) + definitions = vulnerabilities.parse( + trigger_word_file=os.path.join( + os.getcwd(), + 'pyt', + 'vulnerability_definitions', + 'test_triggers.pyt' + ) + ) self.assert_length(definitions.sources, expected_length=1) self.assert_length(definitions.sinks, expected_length=3) @@ -104,43 +127,43 @@ def test_build_sanitiser_node_dict(self): self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) - def test_is_sanitised_false(self): - cfg_node_1 = Node('Not sanitising at all', None, line_number=None, path=None) - cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) - sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] - sanitiser_dict = {'escape': [cfg_node_1]} + # def test_is_sanitised_false(self): + # cfg_node_1 = Node('Not sanitising at all', None, line_number=None, path=None) + # cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) + # sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] + # sanitiser_dict = {'escape': [cfg_node_1]} - # We should use mock instead - orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements - ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements - lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) + # # We should use mock instead + # orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements + # ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements + # lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) - constraint_table[cfg_node_1] = 0b0 - constraint_table[cfg_node_2] = 0b0 + # constraint_table[cfg_node_1] = 0b0 + # constraint_table[cfg_node_2] = 0b0 - result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) - self.assertEqual(result, False) - # Clean up - ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements + # result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) + # self.assertEqual(result, False) + # # Clean up + # ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements - def test_is_sanitised_true(self): - cfg_node_1 = Node('Awesome sanitiser', None, line_number=None, path=None) - cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) - sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] - sanitiser_dict = {'escape': [cfg_node_1]} + # def test_is_sanitised_true(self): + # cfg_node_1 = Node('Awesome sanitiser', None, line_number=None, path=None) + # cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) + # sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] + # sanitiser_dict = {'escape': [cfg_node_1]} - # We should use mock instead - orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements - ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements + # # We should use mock instead + # orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements + # ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements - lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) - constraint_table[cfg_node_2] = 0b1 + # lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) + # constraint_table[cfg_node_2] = 0b1 - result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) - self.assertEqual(result, True) - # Clean up - ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements + # result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) + # self.assertEqual(result, True) + # # Clean up + # ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements def run_analysis(self, path): self.cfg_create_from_file(path) @@ -151,7 +174,16 @@ def run_analysis(self, path): analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - return vulnerabilities.find_vulnerabilities(cfg_list, ReachingDefinitionsTaintAnalysis) + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + default_trigger_word_file + ) + ) + def test_find_vulnerabilities_assign_other_var(self): vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') @@ -252,10 +284,12 @@ def test_path_traversal_sanitised_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal_sanitised.py > User input at line 8, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') + ¤call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal_sanitised.py > Line 8: image_name = ¤call_1 + File: example/vulnerable_code/path_traversal_sanitised.py + > Line 10: ¤call_2 = ret_image_name.replace('..', '') File: example/vulnerable_code/path_traversal_sanitised.py > Line 10: image_name = ¤call_2 File: example/vulnerable_code/path_traversal_sanitised.py @@ -265,7 +299,7 @@ def test_path_traversal_sanitised_result(self): File: example/vulnerable_code/path_traversal_sanitised.py > reaches line 12, trigger word "send_file(": ¤call_3 = ret_send_file(¤call_4) - This vulnerability is potentially sanitised by: ["'..'", "'..' in"] + This vulnerability is potentially sanitised by: Label: ¤call_2 = ret_image_name.replace('..', '') """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -373,7 +407,7 @@ def test_XSS_sanitised_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_sanitised.py > User input at line 7, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ¤call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_sanitised.py > Line 7: param = ¤call_1 @@ -388,9 +422,9 @@ def test_XSS_sanitised_result(self): File: example/vulnerable_code/XSS_sanitised.py > Line 13: ret_XSS1 = resp File: example/vulnerable_code/XSS_sanitised.py - > reaches line 12, trigger word "replace(": + > reaches line 12, trigger word "replace(": ¤call_5 = ret_html.replace('{{ param }}', param) - This vulnerability is potentially sanitised by: ['escape'] + This vulnerability is potentially sanitised by: Label: ¤call_2 = ret_Markup.escape(param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -469,9 +503,21 @@ def run_analysis(self, path): analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - trigger_word_file = os.path.join('pyt', 'trigger_definitions', 'django_trigger_words.pyt') - - return vulnerabilities.find_vulnerabilities(cfg_list, ReachingDefinitionsTaintAnalysis, trigger_word_file=trigger_word_file) + trigger_word_file = os.path.join( + 'pyt', + 'vulnerability_definitions', + 'django_trigger_words.pyt' + ) + + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + trigger_word_file + ) + ) def test_django_view_param(self): vulnerability_log = self.run_analysis('example/vulnerable_code/django_XSS.py') From a5be8be7085ce78ebe77cd7e458dc5d4ffc81e98 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 15 Mar 2018 21:15:24 -0700 Subject: [PATCH 198/541] Mop up reasoning for .args comment, Scour passing in an empty list when we can default arg, Wipe old is_sanitised tests --- pyt/base_cfg.py | 2 +- pyt/vulnerabilities.py | 5 ++--- tests/vulnerabilities_test.py | 38 ----------------------------------- 3 files changed, 3 insertions(+), 42 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 99bca7ce..d8bec040 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -880,7 +880,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_node.label = LHS + " = " + RHS call_node.right_hand_side_variables = rhs_vars - # Used in get_sink_args, not using right_hand_side_variables because it is extended in AssignmentCallNode + # Used in get_sink_args, not using right_hand_side_variables because it is extended in assignment_call_node rhs_visitor = RHSVisitor() rhs_visitor.visit(node) call_node.args = rhs_visitor.result diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 9ec66b28..380d57d6 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -281,7 +281,7 @@ def get_vulnerability_chains( current_node, sink, def_use, - chain + chain=[] ): """Traverses the def-use graph to find all paths from source to sink that cause a vulnerability. @@ -424,8 +424,7 @@ def get_vulnerability( for chain in get_vulnerability_chains( source.cfg_node, sink.cfg_node, - def_use, - [] + def_use ): vulnerability_type = how_vulnerable( chain, diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 50154121..3e4b7e73 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -127,44 +127,6 @@ def test_build_sanitiser_node_dict(self): self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) - # def test_is_sanitised_false(self): - # cfg_node_1 = Node('Not sanitising at all', None, line_number=None, path=None) - # cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) - # sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] - # sanitiser_dict = {'escape': [cfg_node_1]} - - # # We should use mock instead - # orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements - # ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements - # lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) - - # constraint_table[cfg_node_1] = 0b0 - # constraint_table[cfg_node_2] = 0b0 - - # result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) - # self.assertEqual(result, False) - # # Clean up - # ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements - - - # def test_is_sanitised_true(self): - # cfg_node_1 = Node('Awesome sanitiser', None, line_number=None, path=None) - # cfg_node_2 = Node('something.replace("this", "with this")', None, line_number=None, path=None) - # sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node_2)] - # sanitiser_dict = {'escape': [cfg_node_1]} - - # # We should use mock instead - # orginal_get_lattice_elements = ReachingDefinitionsTaintAnalysis.get_lattice_elements - # ReachingDefinitionsTaintAnalysis.get_lattice_elements = self.get_lattice_elements - - # lattice = Lattice([cfg_node_1, cfg_node_2], analysis_type=ReachingDefinitionsTaintAnalysis) - # constraint_table[cfg_node_2] = 0b1 - - # result = vulnerabilities.is_sanitised(sinks_in_file[0], sanitiser_dict, lattice) - # self.assertEqual(result, True) - # # Clean up - # ReachingDefinitionsTaintAnalysis.get_lattice_elements = orginal_get_lattice_elements - def run_analysis(self, path): self.cfg_create_from_file(path) cfg_list = [self.cfg] From 77dc0418237245245d8a1190f93f4cabcc225319 Mon Sep 17 00:00:00 2001 From: Vaaaaa Date: Tue, 20 Mar 2018 05:50:53 +0000 Subject: [PATCH 199/541] Adding additional pre hooks --- .pre-commit-config.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1bc3924e..89a0ebf3 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,6 +6,8 @@ - id: autopep8-wrapper - id: check-docstring-first - id: debug-statements + - id: check-ast + - id: check-symlinks - id: name-tests-test exclude: tests/util - id: flake8 @@ -15,4 +17,4 @@ sha: v0.3.5 hooks: - id: reorder-python-imports - language_version: python3.6 + language_version: python3.6 \ No newline at end of file From 2f9b938d3ac4cbdb1078faf064fcf84c7ccd794b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 20 Mar 2018 09:45:08 -0700 Subject: [PATCH 200/541] Made node_types, inter_cfg_helper and base_cfg_helper files, Removed intraprocedural, changed {} to dict. --- pyt/__main__.py | 53 +- pyt/alias_helper.py | 7 +- pyt/base_cfg.py | 704 ++++++--------------- pyt/base_cfg_helper.py | 137 ++++ pyt/definition_chains.py | 2 +- pyt/draw.py | 2 +- pyt/framework_adaptor.py | 6 +- pyt/interprocedural_cfg.py | 316 ++++----- pyt/interprocedural_cfg_helper.py | 54 ++ pyt/intraprocedural_cfg.py | 179 ------ pyt/liveness.py | 10 +- pyt/module_definitions.py | 2 +- pyt/node_types.py | 228 +++++++ pyt/reaching_definitions.py | 2 +- pyt/reaching_definitions_base.py | 2 +- pyt/reaching_definitions_taint.py | 4 +- pyt/save.py | 2 +- pyt/vulnerabilities.py | 4 +- tests/cfg_test.py | 6 +- tests/command_line_test.py | 2 +- tests/vulnerabilities_across_files_test.py | 2 +- tests/vulnerabilities_test.py | 2 +- 22 files changed, 816 insertions(+), 910 deletions(-) create mode 100644 pyt/base_cfg_helper.py create mode 100644 pyt/interprocedural_cfg_helper.py delete mode 100644 pyt/intraprocedural_cfg.py create mode 100644 pyt/node_types.py diff --git a/pyt/__main__.py b/pyt/__main__.py index c5ca05c5..95a48c17 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -20,7 +20,6 @@ ) from .github_search import scan_github, set_github_api_token from .interprocedural_cfg import interprocedural -from .intraprocedural_cfg import intraprocedural from .lattice import print_lattice from .liveness import LivenessAnalysis from .project_handler import get_directory_modules, get_modules @@ -106,8 +105,6 @@ def parse_args(args): ' reaching definitions tainted version.', action='store_true') - parser.add_argument('-intra', '--intraprocedural-analysis', - help='Run intraprocedural analysis.', action='store_true') parser.add_argument('-ppm', '--print-project-modules', help='Print project modules.', action='store_true') @@ -159,8 +156,18 @@ def parse_args(args): def analyse_repo(github_repo, analysis_type): cfg_list = list() - project_modules = get_modules(os.path.dirname(github_repo.path)) - intraprocedural(project_modules, cfg_list) + directory = os.path.dirname(github_repo.path) + project_modules = get_modules(directory) + local_modules = get_directory_modules(directory) + tree = generate_ast(github_repo.path, python_2=args.python_2) + interprocedural_cfg = interprocedural( + tree, + project_modules, + local_modules, + github_repo.path + ) + cfg_list.append(interprocedural_cfg) + initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis_type) vulnerability_log = find_vulnerabilities(cfg_list, analysis_type) @@ -214,25 +221,23 @@ def main(command_line_args=sys.argv[1:]): tree = generate_ast(path, python_2=args.python_2) cfg_list = list() - - if args.intraprocedural_analysis: - intraprocedural(project_modules, cfg_list) - else: - interprocedural_cfg = interprocedural(tree, - project_modules, - local_modules, - path) - cfg_list.append(interprocedural_cfg) - framework_route_criteria = is_flask_route_function - if args.adaptor: - if args.adaptor.lower().startswith('e'): - framework_route_criteria = is_function - elif args.adaptor.lower().startswith('p'): - framework_route_criteria = is_function_without_leading_ - elif args.adaptor.lower().startswith('d'): - framework_route_criteria = is_django_view_function - # Add all the route functions to the cfg_list - FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + interprocedural_cfg = interprocedural( + tree, + project_modules, + local_modules, + path + ) + cfg_list.append(interprocedural_cfg) + framework_route_criteria = is_flask_route_function + if args.adaptor: + if args.adaptor.lower().startswith('e'): + framework_route_criteria = is_function + elif args.adaptor.lower().startswith('p'): + framework_route_criteria = is_function_without_leading_ + elif args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function + # Add all the route functions to the cfg_list + FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) initialize_constraint_table(cfg_list) diff --git a/pyt/alias_helper.py b/pyt/alias_helper.py index 648665fc..be98cfa0 100644 --- a/pyt/alias_helper.py +++ b/pyt/alias_helper.py @@ -10,6 +10,7 @@ def as_alias_handler(alias_list): list_.append(alias.name) return list_ + def handle_aliases_in_calls(name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. @@ -26,6 +27,7 @@ def handle_aliases_in_calls(name, import_alias_mapping): return name.replace(key, val) return None + def handle_aliases_in_init_files(name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. @@ -42,6 +44,7 @@ def handle_aliases_in_init_files(name, import_alias_mapping): return name.replace(val, key) return None + def handle_fdid_aliases(module_or_package_name, import_alias_mapping): """Returns either None or the handled alias. Used in add_module. @@ -52,6 +55,7 @@ def handle_fdid_aliases(module_or_package_name, import_alias_mapping): return key return None + def not_as_alias_handler(names_list): """Returns a list of names ignoring any aliases.""" list_ = list() @@ -59,10 +63,11 @@ def not_as_alias_handler(names_list): list_.append(alias.name) return list_ + def retrieve_import_alias_mapping(names_list): """Creates a dictionary mapping aliases to their respective name. import_alias_names is used in module_definitions.py and visit_Call""" - import_alias_names = {} + import_alias_names = dict() for alias in names_list: if alias.asname: diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 8fb5ab7d..a7967852 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -1,363 +1,44 @@ import ast import itertools -from collections import namedtuple -from .ast_helper import Arguments, get_call_names_as_string +from .ast_helper import ( + get_call_names_as_string +) +from .base_cfg_helper import ( + CALL_IDENTIFIER, + ConnectStatements, + connect_nodes, + extract_left_hand_side, + get_first_node, + get_first_statement, + get_last_statements, + remove_breaks +) from .label_visitor import LabelVisitor +from .node_types import ( + AssignmentNode, + AssignmentCallNode, + BBorBInode, + BreakNode, + ControlFlowNode, + IgnoredNode, + Node, + RestoreNode +) from .right_hand_side_visitor import RHSVisitor from .vars_visitor import VarsVisitor -ControlFlowNode = namedtuple('ControlFlowNode', - 'test last_nodes break_statements') - -ConnectStatements = namedtuple('ConnectStatements', - 'first_statement' + - ' last_statements' + - ' break_statements') -CALL_IDENTIFIER = '¤' - - -class IgnoredNode(): - """Ignored Node sent from an ast node that should not return anything.""" - - -class Node(): - """A Control Flow Graph node that contains a list of - ingoing and outgoing nodes and a list of its variables.""" - - def __init__(self, label, ast_node, *, line_number, path): - """Create a Node that can be used in a CFG. - - Args: - label(str): The label of the node, describing its expression. - line_number(Optional[int]): The line of the expression of the Node. - """ - self.label = label - self.ast_node = ast_node - self.line_number = line_number - self.path = path - self.ingoing = list() - self.outgoing = list() - - def connect(self, successor): - """Connect this node to its successor node by - setting its outgoing and the successors ingoing.""" - if isinstance(self, ConnectToExitNode) and\ - not isinstance(successor, EntryOrExitNode): - return - - self.outgoing.append(successor) - successor.ingoing.append(self) - - def connect_predecessors(self, predecessors): - """Connect all nodes in predecessors to this node.""" - for n in predecessors: - self.ingoing.append(n) - n.outgoing.append(self) - - def __str__(self): - """Print the label of the node.""" - return ''.join((' Label: ', self.label)) - - - def __repr__(self): - """Print a representation of the node.""" - label = ' '.join(('Label: ', self.label)) - line_number = 'Line number: ' + str(self.line_number) - outgoing = '' - ingoing = '' - if self.ingoing: - ingoing = ' '.join(('ingoing:\t', str([x.label for x in self.ingoing]))) - else: - ingoing = ' '.join(('ingoing:\t', '[]')) - - if self.outgoing: - outgoing = ' '.join(('outgoing:\t', str([x.label for x in self.outgoing]))) - else: - outgoing = ' '.join(('outgoing:\t', '[]')) - - return '\n' + '\n'.join((label, line_number, ingoing, outgoing)) - - -class ConnectToExitNode(): - pass - - -class FunctionNode(Node): - """CFG Node that represents a function definition. - - Used as a dummy for creating a list of function definitions. - """ - - def __init__(self, ast_node): - """Create a function node. - - This node is a dummy node representing a function definition. - """ - super().__init__(self.__class__.__name__, ast_node) - - -class RaiseNode(Node, ConnectToExitNode): - """CFG Node that represents a Raise statement.""" - - def __init__(self, label, ast_node, *, line_number, path): - """Create a Raise node.""" - super().__init__(label, ast_node, line_number=line_number, path=path) - - -class BreakNode(Node): - """CFG Node that represents a Break node.""" - - def __init__(self, ast_node, *, line_number, path): - super().__init__(self.__class__.__name__, ast_node, line_number=line_number, path=path) - - -class EntryOrExitNode(Node): - """CFG Node that represents an Exit or an Entry node.""" - - def __init__(self, label): - super().__init__(label, None, line_number=None, path=None) - - -class AssignmentNode(Node): - """CFG Node that represents an assignment.""" - - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): - """Create an Assignment node. - - Args: - label(str): The label of the node, describing the expression it represents. - left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. - ast_node(_ast.Assign, _ast.AugAssign, _ast.Return or None) - right_hand_side_variables(list[str]): A list of variables on the right hand side. - line_number(Optional[int]): The line of the expression the Node represents. - path(string): Current filename. - """ - super().__init__(label, ast_node, line_number=line_number, path=path) - self.left_hand_side = left_hand_side - self.right_hand_side_variables = right_hand_side_variables - - def __repr__(self): - output_string = super().__repr__() - output_string += '\n' - return ''.join((output_string, - 'left_hand_side:\t', str(self.left_hand_side), '\n', - 'right_hand_side_variables:\t', str(self.right_hand_side_variables))) - - -class TaintedNode(AssignmentNode): - pass - - -class RestoreNode(AssignmentNode): - """Node used for handling restore nodes returning from function calls.""" - - def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): - """Create a Restore node. - - Args: - label(str): The label of the node, describing the expression it represents. - left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. - right_hand_side_variables(list[str]): A list of variables on the right hand side. - line_number(Optional[int]): The line of the expression the Node represents. - path(string): Current filename. - """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) - - -class BBorBInode(AssignmentNode): - """Node used for handling restore nodes returning from blackbox or builtin function calls.""" - - def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): - """Create a Restore node. - - Args: - label(str): The label of the node, describing the expression it represents. - left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. - right_hand_side_variables(list[str]): A list of variables on the right hand side. - line_number(Optional[int]): The line of the expression the Node represents. - path(string): Current filename. - """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) - self.args = list() - self.inner_most_call = self - - -class AssignmentCallNode(AssignmentNode): - """Node used for X.""" - - def __init__(self, - label, - left_hand_side, - ast_node, - right_hand_side_variables, - vv_result, - *, - line_number, - path, - call_node): - """Create a X. - - Args: - label(str): The label of the node, describing the expression it represents. - left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. - right_hand_side_variables(list[str]): A list of variables on the right hand side. - vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. - line_number(Optional[int]): The line of the expression the Node represents. - path(string): Current filename. - call_node(BBorBInode or RestoreNode): Used in connect_control_flow_node. - """ - super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) - self.vv_result = vv_result - self.call_node = call_node - self.blackbox = False - - -class ReturnNode(AssignmentNode, ConnectToExitNode): - """CFG node that represents a return from a call.""" - - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): - """Create a CallReturn node. - - Args: - label(str): The label of the node, describing the expression it represents. - restore_nodes(list[Node]): List of nodes that were restored in the function call. - right_hand_side_variables(list[str]): A list of variables on the right hand side. - line_number(Optional[int]): The line of the expression the Node represents. - path(string): Current filename. - """ - super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) - - -class Function(): - """Representation of a function definition in the program.""" - - def __init__(self, nodes, args, decorator_list): - """Create a Function representation. - - Args: - nodes(list[Node]): The CFG of the Function. - args(ast.args): The arguments from a function AST node. - decorator_list(list[ast.decorator]): The list of decorators - from a function AST node. - """ - self.nodes = nodes - self.arguments = Arguments(args) - self.decorator_list = decorator_list - - def __repr__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) - return output - - def __str__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) - return output - - -class CFG(): - def __init__(self, nodes, blackbox_assignments): - self.nodes = nodes - self.blackbox_assignments = blackbox_assignments - - def __repr__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) - return output - - def __str__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) - return output - - class Visitor(ast.NodeVisitor): - def append_node(self, Node): - """Append a node to the CFG and return it.""" - self.nodes.append(Node) - return Node - - def get_first_statement(self, node_or_tuple): - """Find the first statement of the provided object. - - Returns: - The first element in the tuple if it is a tuple. - The node if it is a node. - """ - if isinstance(node_or_tuple, tuple): - return node_or_tuple[0] - else: - return node_or_tuple - - def should_connect_node(self, node): - """Determine if node should be in the final CFG.""" - if isinstance(node, (FunctionNode, IgnoredNode)): - return False - else: - return True - - def get_inner_most_function_call(self, call_node): - # Loop to inner most function call - # e.g. return scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` - old_call_node = None - while call_node != old_call_node: - old_call_node = call_node - if isinstance(call_node, BBorBInode): - call_node = call_node.inner_most_call - else: - try: - call_node = call_node.first_node.inner_most_call - except AttributeError: - try: - call_node = call_node.first_node - except AttributeError: - # No inner calls - # Possible improvement: Make new node for RestoreNode's made in process_function - # and make `self.inner_most_call = self` - pass - return call_node - - def connect_control_flow_node(self, control_flow_node, next_node): - """Connect a ControlFlowNode properly to the next_node.""" - for last in control_flow_node[1]: # list of last nodes in ifs and elifs - if isinstance(next_node, ControlFlowNode): - last.connect(next_node.test) # connect to next if test case - elif isinstance(next_node, AssignmentCallNode): - call_node = next_node.call_node - inner_most_call_node = self.get_inner_most_function_call(call_node) - last.connect(inner_most_call_node) - else: - last.connect(next_node) - - def connect_nodes(self, nodes): - """Connect the nodes in a list linearly.""" - for n, next_node in zip(nodes, nodes[1:]): - if isinstance(n, ControlFlowNode): # case for if - self.connect_control_flow_node(n, next_node) - elif isinstance(next_node, ControlFlowNode): # case for if - n.connect(next_node[0]) - elif isinstance(next_node, RestoreNode): - continue - elif CALL_IDENTIFIER in next_node.label: - continue - else: - n.connect(next_node) - - def get_last_statements(self, cfg_statements): - """Retrieve the last statements from a cfg_statements list.""" - if isinstance(cfg_statements[-1], ControlFlowNode): - return cfg_statements[-1].last_nodes - else: - return [cfg_statements[-1]] + def visit_Module(self, node): + return self.stmt_star_handler(node.body) - def stmt_star_handler(self, stmts, prev_node_to_avoid=None): + def stmt_star_handler( + self, + stmts, + prev_node_to_avoid=None + ): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -372,8 +53,9 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): node_not_to_step_past = self.nodes[-1] for stmt in stmts: + # stmt is 203 node = self.visit(stmt) - if isinstance(stmt, ast.While) or isinstance(stmt, ast.For): + if isinstance(stmt, (ast.For, ast.While)): self.last_was_loop_stack.append(True) else: self.last_was_loop_stack.append(False) @@ -383,62 +65,38 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): elif isinstance(node, BreakNode): break_nodes.append(node) - if node and not first_node: # (Make sure first_node isn't already set.) - # first_node is always a "node_to_connect", because it won't have ingoing otherwise - # If we have e.g. - # import os # An ignored node - # value = None - # first_node will be `value = None` - if hasattr(node, 'ingoing'): - ingoing = None - current_node = node - while current_node.ingoing: - # e.g. We don't want to step past the Except of an Except BB - if current_node.ingoing[0] == node_not_to_step_past: - break - ingoing = current_node.ingoing - current_node = current_node.ingoing[0] - if ingoing: - # Only set it once - first_node = ingoing[0] - - if node and self.should_connect_node(node): + if not isinstance(node, IgnoredNode): + cfg_statements.append(node) if not first_node: if isinstance(node, ControlFlowNode): first_node = node.test else: - first_node = node - cfg_statements.append(node) + first_node = get_first_node( + node, + node_not_to_step_past + ) if prev_node_to_avoid: self.prev_nodes_to_avoid.pop() self.last_was_loop_stack.pop() - self.connect_nodes(cfg_statements) + connect_nodes(cfg_statements) if cfg_statements: if first_node: first_statement = first_node else: - first_statement = self.get_first_statement(cfg_statements[0]) + first_statement = get_first_statement(cfg_statements[0]) - last_statements = self.get_last_statements(cfg_statements) + last_statements = get_last_statements(cfg_statements) - return ConnectStatements(first_statement=first_statement, - last_statements=last_statements, - break_statements=break_nodes) + return ConnectStatements( + first_statement=first_statement, + last_statements=last_statements, + break_statements=break_nodes + ) else: # When body of module only contains ignored nodes return IgnoredNode() - def visit_Module(self, node): - return self.stmt_star_handler(node.body) - - def add_if_label(self, CFG_node): - """Prepend 'if ' and append ':' to the label of a Node.""" - CFG_node.label = 'if ' + CFG_node.label + ':' - - def add_elif_label(self, CFG_node): - """Add the el to an already add_if_label'ed Node.""" - CFG_node.label = 'el' + CFG_node.label def handle_or_else(self, orelse, test): """Handle the orelse part of an if or try node. @@ -448,7 +106,8 @@ def handle_or_else(self, orelse, test): """ if isinstance(orelse[0], ast.If): control_flow_node = self.visit(orelse[0]) - self.add_elif_label(control_flow_node.test) + control_flow_node.test.label = 'el' + control_flow_node.test.label + test.connect(control_flow_node.test) return control_flow_node.last_nodes else: @@ -456,21 +115,24 @@ def handle_or_else(self, orelse, test): test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements - def remove_breaks(self, last_statements): - """Remove all break statements in last_statements.""" - return [n for n in last_statements if not isinstance(n, BreakNode)] - def visit_If(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.test) - test = self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) - - self.add_if_label(test) + test = self.append_node(Node( + 'if ' + label_visitor.result + ':', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) body_connect_stmts = self.stmt_star_handler(node.body) if isinstance(body_connect_stmts, IgnoredNode): - body_connect_stmts = ConnectStatements(first_statement=test, last_statements=[], break_statements=[]) + body_connect_stmts = ConnectStatements( + first_statement=test, + last_statements=[], + break_statements=[] + ) test.connect(body_connect_stmts.first_statement) if node.orelse: @@ -479,30 +141,39 @@ def visit_If(self, node): else: body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node - last_statements = self.remove_breaks(body_connect_stmts.last_statements) + last_statements = remove_breaks(body_connect_stmts.last_statements) return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) - def visit_NameConstant(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node) - return self.append_node(Node(label_visitor.result, node, line_number=node.lineno, path=self.filenames[-1])) - def visit_Raise(self, node): label = LabelVisitor() label.visit(node) - return self.append_node(RaiseNode(label.result, node, line_number=node.lineno, path=self.filenames[-1])) + return self.append_node(RaiseNode( + label.result, + node, + line_number=node.lineno, + path=self.filenames[-1] + )) def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): try: fallback_cfg_node.connect(body.first_statement) except AttributeError: - body = ConnectStatements([fallback_cfg_node], [fallback_cfg_node], list()) + body = ConnectStatements( + first_statement=[fallback_cfg_node], + last_statements=[fallback_cfg_node], + break_statements=[] + ) return body def visit_Try(self, node): - try_node = self.append_node(Node('Try', node, line_number=node.lineno, path=self.filenames[-1])) + try_node = self.append_node(Node( + 'Try', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) body = self.stmt_star_handler(node.body) body = self.handle_stmt_star_ignore_node(body, try_node) @@ -538,33 +209,10 @@ def visit_Try(self, node): body.last_statements.extend(finalbody.last_statements) - last_statements.extend(self.remove_breaks(body.last_statements)) + last_statements.extend(remove_breaks(body.last_statements)) return ControlFlowNode(try_node, last_statements, break_statements=body.break_statements) - def get_names(self, node, result): - """Recursively finds all names.""" - if isinstance(node, ast.Name): - return node.id + result - elif isinstance(node, ast.Subscript): - return result - else: - return self.get_names(node.value, result + '.' + node.attr) - - def extract_left_hand_side(self, target): - """Extract the left hand side variable from a target. - - Removes list indexes, stars and other left hand side elements. - """ - left_hand_side = self.get_names(target, '') - - left_hand_side.replace('*', '') - if '[' in left_hand_side: - index = left_hand_side.index('[') - left_hand_side = target[0:index] - - return left_hand_side - def assign_tuple_target(self, node, right_hand_side_variables): new_assignment_nodes = list() for i, target in enumerate(node.targets[0].elts): @@ -585,14 +233,14 @@ def assign_tuple_target(self, node, right_hand_side_variables): new_assignment_nodes.append(self.append_node(AssignmentNode( label.result, - self.extract_left_hand_side(target), + extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, line_number=node.lineno, path=self.filenames[-1] ))) - self.connect_nodes(new_assignment_nodes) + connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node def assign_multi_target(self, node, right_hand_side_variables): @@ -612,7 +260,7 @@ def assign_multi_target(self, node, right_hand_side_variables): line_number=node.lineno, path=self.filenames[-1] ))) - self.connect_nodes(new_assignment_nodes) + connect_nodes(new_assignment_nodes) return ControlFlowNode(new_assignment_nodes[0], [new_assignment_nodes[-1]], []) # return the last added node def visit_Assign(self, node): @@ -655,7 +303,7 @@ def visit_Assign(self, node): label.visit(node) return self.append_node(AssignmentNode( label.result, - self.extract_left_hand_side(node.targets[0]), + extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, line_number=node.lineno, @@ -714,54 +362,13 @@ def visit_AugAssign(self, node): return self.append_node(AssignmentNode( label.result, - self.extract_left_hand_side(node.target), + extract_left_hand_side(node.target), node, rhs_visitor.result, line_number=node.lineno, path=self.filenames[-1] )) - def loop_node_skeleton(self, test, node): - """Common handling of looped structures, while and for.""" - body_connect_stmts = self.stmt_star_handler(node.body, prev_node_to_avoid=self.nodes[-1]) - - test.connect(body_connect_stmts.first_statement) - test.connect_predecessors(body_connect_stmts.last_statements) - - # last_nodes is used for making connections to the next node in the parent node - # this is handled in stmt_star_handler - last_nodes = list() - last_nodes.extend(body_connect_stmts.break_statements) - - if node.orelse: - orelse_connect_stmts = self.stmt_star_handler(node.orelse, prev_node_to_avoid=self.nodes[-1]) - - test.connect(orelse_connect_stmts.first_statement) - last_nodes.extend(orelse_connect_stmts.last_statements) - else: - last_nodes.append(test) # if there is no orelse, test needs an edge to the next_node - - return ControlFlowNode(test, last_nodes, list()) - - def add_while_label(self, node): - """Prepend 'while' and append ':' to the label of a node.""" - node.label = 'while ' + node.label + ':' - - def visit_While(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node.test) - - test = self.append_node(Node( - label_visitor.result, - node, - line_number=node.lineno, - path=self.filenames[-1] - )) - - self.add_while_label(test) - - return self.loop_node_skeleton(test, node) - def visit_For(self, node): self.undecided = True # Used for handling functions in for loops @@ -785,8 +392,40 @@ def visit_For(self, node): return self.loop_node_skeleton(for_node, node) - def visit_Expr(self, node): - return self.visit(node.value) + def visit_While(self, node): + label_visitor = LabelVisitor() + label_visitor.visit(node.test) + + test = self.append_node(Node( + 'while ' + label_visitor.result + ':', + node, + line_number=node.lineno, + path=self.filenames[-1] + )) + + return self.loop_node_skeleton(test, node) + + def loop_node_skeleton(self, test, node): + """Common handling of looped structures, while and for.""" + body_connect_stmts = self.stmt_star_handler(node.body, prev_node_to_avoid=self.nodes[-1]) + + test.connect(body_connect_stmts.first_statement) + test.connect_predecessors(body_connect_stmts.last_statements) + + # last_nodes is used for making connections to the next node in the parent node + # this is handled in stmt_star_handler + last_nodes = list() + last_nodes.extend(body_connect_stmts.break_statements) + + if node.orelse: + orelse_connect_stmts = self.stmt_star_handler(node.orelse, prev_node_to_avoid=self.nodes[-1]) + + test.connect(orelse_connect_stmts.first_statement) + last_nodes.extend(orelse_connect_stmts.last_statements) + else: + last_nodes.append(test) # if there is no orelse, test needs an edge to the next_node + + return ControlFlowNode(test, last_nodes, list()) def add_blackbox_or_builtin_call(self, node, blackbox): """Processes a blackbox or builtin function when it is called. @@ -892,12 +531,6 @@ def add_blackbox_or_builtin_call(self, node, blackbox): return call_node - def visit_Name(self, node): - label = LabelVisitor() - label.visit(node) - - return self.append_node(Node(label.result, node, line_number=node.lineno, path=self.filenames[-1])) - def visit_With(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.items[0]) @@ -910,25 +543,14 @@ def visit_With(self, node): )) connect_statements = self.stmt_star_handler(node.body) with_node.connect(connect_statements.first_statement) - return ControlFlowNode(with_node, connect_statements.last_statements, connect_statements.break_statements) - - def visit_Str(self, node): - return IgnoredNode() + return ControlFlowNode( + with_node, + connect_statements.last_statements, + connect_statements.break_statements + ) def visit_Break(self, node): - return self.append_node(BreakNode(node, line_number=node.lineno, path=self.filenames[-1])) - - def visit_Pass(self, node): - return self.append_node(Node( - 'pass', - node, - line_number=node.lineno, - path=self.filenames[-1] - )) - - def visit_Continue(self, node): - return self.append_node(Node( - 'continue', + return self.append_node(BreakNode( node, line_number=node.lineno, path=self.filenames[-1] @@ -957,45 +579,73 @@ def visit_Assert(self, node): )) def visit_Attribute(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node) + return self.visit_miscelleaneous_node( + node + ) - return self.append_node(Node( - label_visitor.result, + def visit_Continue(self, node): + return self.visit_miscelleaneous_node( node, - line_number=node.lineno, - path=self.filenames[-1] - )) + custom_label='continue' + ) def visit_Global(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node) + return self.visit_miscelleaneous_node( + node + ) - return self.append_node(Node( - label_visitor.result, - node, - line_number=node.lineno, - path=self.filenames[-1] - )) + def visit_Name(self, node): + return self.visit_miscelleaneous_node( + node + ) - def visit_Subscript(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node) + def visit_NameConstant(self, node): + return self.visit_miscelleaneous_node( + node + ) - return self.append_node(Node( - label_visitor.result, + def visit_Pass(self, node): + return self.visit_miscelleaneous_node( node, - line_number=node.lineno, - path=self.filenames[-1] - )) + custom_label='pass' + ) + + def visit_Subscript(self, node): + return self.visit_miscelleaneous_node( + node + ) def visit_Tuple(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node) + return self.visit_miscelleaneous_node( + node + ) + + def visit_miscelleaneous_node( + self, + node, + custom_label=None + ): + if custom_label: + label = custom_label + else: + label_visitor = LabelVisitor() + label_visitor.visit(node) + label = label_visitor.result return self.append_node(Node( - label_visitor.result, + label, node, line_number=node.lineno, path=self.filenames[-1] )) + + def visit_Str(self, node): + return IgnoredNode() + + def visit_Expr(self, node): + return self.visit(node.value) + + def append_node(self, node): + """Append a node to the CFG and return it.""" + self.nodes.append(node) + return node diff --git a/pyt/base_cfg_helper.py b/pyt/base_cfg_helper.py new file mode 100644 index 00000000..fd1bc43f --- /dev/null +++ b/pyt/base_cfg_helper.py @@ -0,0 +1,137 @@ +import ast +from collections import namedtuple + +from .node_types import ( + AssignmentCallNode, + BBorBInode, + BreakNode, + ControlFlowNode, + RestoreNode +) + + +CALL_IDENTIFIER = '¤' + + +ConnectStatements = namedtuple('ConnectStatements', + 'first_statement' + + ' last_statements' + + ' break_statements') + + +def _get_inner_most_function_call(call_node): + # Loop to inner most function call + # e.g. return scrypt.inner in `foo = scrypt.outer(scrypt.inner(image_name))` + old_call_node = None + while call_node != old_call_node: + old_call_node = call_node + if isinstance(call_node, BBorBInode): + call_node = call_node.inner_most_call + else: + try: + call_node = call_node.first_node.inner_most_call + except AttributeError: + try: + call_node = call_node.first_node + except AttributeError: + # No inner calls + # Possible improvement: Make new node for RestoreNode's made in process_function + # and make `self.inner_most_call = self` + pass + return call_node + + +def _connect_control_flow_node(control_flow_node, next_node): + """Connect a ControlFlowNode properly to the next_node.""" + for last in control_flow_node[1]: # list of last nodes in ifs and elifs + if isinstance(next_node, ControlFlowNode): + last.connect(next_node.test) # connect to next if test case + elif isinstance(next_node, AssignmentCallNode): + call_node = next_node.call_node + inner_most_call_node = _get_inner_most_function_call(call_node) + last.connect(inner_most_call_node) + else: + last.connect(next_node) + + +def connect_nodes(nodes): + """Connect the nodes in a list linearly.""" + for n, next_node in zip(nodes, nodes[1:]): + if isinstance(n, ControlFlowNode): # case for if + _connect_control_flow_node(n, next_node) + elif isinstance(next_node, ControlFlowNode): # case for if + n.connect(next_node[0]) + elif isinstance(next_node, RestoreNode): + continue + elif CALL_IDENTIFIER in next_node.label: + continue + else: + n.connect(next_node) + + +def _get_names(node, result): + """Recursively finds all names.""" + if isinstance(node, ast.Name): + return node.id + result + elif isinstance(node, ast.Subscript): + return result + else: + return _get_names(node.value, result + '.' + node.attr) + + +def extract_left_hand_side(target): + """Extract the left hand side variable from a target. + + Removes list indexes, stars and other left hand side elements. + """ + left_hand_side = _get_names(target, '') + + left_hand_side.replace('*', '') + if '[' in left_hand_side: + index = left_hand_side.index('[') + left_hand_side = target[0:index] + + return left_hand_side + + +def get_first_node( + node, + node_not_to_step_past +): + ingoing = None + current_node = node + while current_node.ingoing: + # e.g. We don't want to step past the Except of an Except basic block + if current_node.ingoing[0] == node_not_to_step_past: + break + ingoing = current_node.ingoing + current_node = current_node.ingoing[0] + if ingoing: + return ingoing[0] + return current_node + + +def get_first_statement(node_or_tuple): + """Find the first statement of the provided object. + + Returns: + The first element in the tuple if it is a tuple. + The node if it is a node. + """ + if isinstance(node_or_tuple, tuple): + return node_or_tuple[0] + else: + return node_or_tuple + + +def get_last_statements(cfg_statements): + """Retrieve the last statements from a cfg_statements list.""" + if isinstance(cfg_statements[-1], ControlFlowNode): + return cfg_statements[-1].last_nodes + else: + return [cfg_statements[-1]] + + +def remove_breaks(last_statements): + """Remove all break statements in last_statements.""" + return [n for n in last_statements if not isinstance(n, BreakNode)] diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index 2ac0e077..c4435488 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -1,8 +1,8 @@ import ast -from .base_cfg import AssignmentNode from .constraint_table import constraint_table from .lattice import Lattice +from .node_types import AssignmentNode from .reaching_definitions import ReachingDefinitionsAnalysis from .vars_visitor import VarsVisitor diff --git a/pyt/draw.py b/pyt/draw.py index 9231d9a7..0e372557 100644 --- a/pyt/draw.py +++ b/pyt/draw.py @@ -4,7 +4,7 @@ from itertools import permutations from subprocess import run -from .base_cfg import AssignmentNode +from .node_types import AssignmentNode IGNORED_LABEL_NAME_CHARACHTERS = ':' diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index c56dfe50..78f88ec9 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -2,12 +2,12 @@ import ast from .ast_helper import Arguments -from .base_cfg import ( +from .interprocedural_cfg import interprocedural +from .module_definitions import project_definitions +from .node_types import ( AssignmentNode, TaintedNode ) -from .interprocedural_cfg import interprocedural -from .module_definitions import project_definitions class FrameworkAdaptor(): diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index a500fa54..88d2ef40 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -1,6 +1,5 @@ import ast import os.path -from collections import namedtuple from .alias_helper import ( as_alias_handler, @@ -10,55 +9,44 @@ not_as_alias_handler, retrieve_import_alias_mapping ) -from .ast_helper import Arguments, generate_ast, get_call_names_as_string +from .ast_helper import ( + Arguments, + generate_ast, + get_call_names_as_string +) from .base_cfg import ( + Visitor +) +from .base_cfg_helper import ( + CALL_IDENTIFIER +) +from .interprocedural_cfg_helper import ( + BUILTINS, + CFG, + return_connection_handler, + SavedVariable +) +from .label_visitor import LabelVisitor +from .module_definitions import ( + LocalModuleDefinition, + ModuleDefinition, + ModuleDefinitions +) +from .node_types import ( AssignmentCallNode, AssignmentNode, BBorBInode, - CALL_IDENTIFIER, - CFG, ConnectToExitNode, EntryOrExitNode, IgnoredNode, Node, RestoreNode, - ReturnNode, - Visitor -) -from .label_visitor import LabelVisitor -from .module_definitions import ( - LocalModuleDefinition, - ModuleDefinition, - ModuleDefinitions + ReturnNode ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -SavedVariable = namedtuple('SavedVariable', 'LHS RHS') -BUILTINS = ( - 'get', - 'Flask', - 'run', - 'replace', - 'read', - 'set_cookie', - 'make_response', - 'SQLAlchemy', - 'Column', - 'execute', - 'sessionmaker', - 'Session', - 'filter', - 'call', - 'render_template', - 'redirect', - 'url_for', - 'flash', - 'jsonify' -) - - class InterproceduralVisitor(Visitor): def __init__(self, node, project_modules, local_modules, filename, module_definitions=None): @@ -116,6 +104,11 @@ def init_function_cfg(self, node, module_definitions): entry_node = self.append_node(EntryOrExitNode("Entry function")) module_statements = self.stmt_star_handler(node.body) + exit_node = self.append_node(EntryOrExitNode("Exit function")) + + if isinstance(module_statements, IgnoredNode): + entry_node.connect(exit_node) + return first_node = module_statements.first_statement @@ -127,35 +120,12 @@ def init_function_cfg(self, node, module_definitions): last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) - def visit_ClassDef(self, node): - self.add_to_definitions(node) - - local_definitions = self.module_definitions_stack[-1] - local_definitions.classes.append(node.name) - - parent_definitions = self.get_parent_definitions() - if parent_definitions: - parent_definitions.classes.append(node.name) - - self.stmt_star_handler(node.body) - - local_definitions.classes.pop() - if parent_definitions: - parent_definitions.classes.pop() - - return IgnoredNode() - def get_parent_definitions(self): parent_definitions = None if len(self.module_definitions_stack) > 1: parent_definitions = self.module_definitions_stack[-2] return parent_definitions - def visit_FunctionDef(self, node): - self.add_to_definitions(node) - - return IgnoredNode() - def add_to_definitions(self, node): local_definitions = self.module_definitions_stack[-1] parent_definitions = self.get_parent_definitions() @@ -187,12 +157,28 @@ def add_to_definitions(self, node): self.function_names.append(node.name) - def return_connection_handler(self, nodes, exit_node): - """Connect all return statements to the Exit node.""" - for function_body_node in nodes: - if isinstance(function_body_node, ConnectToExitNode): - if exit_node not in function_body_node.outgoing: - function_body_node.connect(exit_node) + def visit_ClassDef(self, node): + self.add_to_definitions(node) + + local_definitions = self.module_definitions_stack[-1] + local_definitions.classes.append(node.name) + + parent_definitions = self.get_parent_definitions() + if parent_definitions: + parent_definitions.classes.append(node.name) + + self.stmt_star_handler(node.body) + + local_definitions.classes.pop() + if parent_definitions: + parent_definitions.classes.pop() + + return IgnoredNode() + + def visit_FunctionDef(self, node): + self.add_to_definitions(node) + + return IgnoredNode() def visit_Return(self, node): label = LabelVisitor() @@ -322,12 +308,14 @@ def connect_if_allowed(self, previous_node, node_to_connect_to): if not isinstance(previous_node, ReturnNode): previous_node.connect(node_to_connect_to) - def save_def_args_in_temp(self, - call_args, - def_args, - line_number, - saved_function_call_index, - first_node): + def save_def_args_in_temp( + self, + call_args, + def_args, + line_number, + saved_function_call_index, + first_node + ): """Save the arguments of the definition being called. Visit the arguments if they're calls. Args: @@ -346,6 +334,7 @@ def save_def_args_in_temp(self, # Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument for i, call_arg in enumerate(call_args): + # If this results in an IndexError it is invalid Python def_arg_temp_name = 'temp_' + str(saved_function_call_index) + '_' + def_args[i] return_value_of_nested_call = None @@ -408,11 +397,13 @@ def save_def_args_in_temp(self, return (args_mapping, first_node) - def create_local_scope_from_def_args(self, - call_args, - def_args, - line_number, - saved_function_call_index): + def create_local_scope_from_def_args( + self, + call_args, + def_args, + line_number, + saved_function_call_index + ): """Create the local scope before entering the body of a function call. Args: @@ -439,10 +430,42 @@ def create_local_scope_from_def_args(self, self.nodes[-1].connect(local_scope_node) self.nodes.append(local_scope_node) - def restore_saved_local_scope(self, - saved_variables, - args_mapping, - line_number): + def visit_and_get_function_nodes(self, definition, first_node): + """Visits the nodes of a user defined function. + + Args: + definition(LocalModuleDefinition): Definition of the function being added. + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. + + Returns: + the_new_nodes(list[Node]): The nodes added while visiting the function. + first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. + """ + len_before_visiting_func = len(self.nodes) + previous_node = self.nodes[-1] + entry_node = self.append_node(EntryOrExitNode("Function Entry " + + definition.name)) + if not first_node: + first_node = entry_node + self.connect_if_allowed(previous_node, entry_node) + + function_body_connect_statements = self.stmt_star_handler(definition.node.body) + entry_node.connect(function_body_connect_statements.first_statement) + + exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) + exit_node.connect_predecessors(function_body_connect_statements.last_statements) + + the_new_nodes = self.nodes[len_before_visiting_func:] + return_connection_handler(the_new_nodes, exit_node) + + return (the_new_nodes, first_node) + + def restore_saved_local_scope( + self, + saved_variables, + args_mapping, + line_number + ): """Restore the previously saved variables to their original values. Args: @@ -584,36 +607,6 @@ def process_function(self, call_node, definition): return self.nodes[-1] - def visit_and_get_function_nodes(self, definition, first_node): - """Visits the nodes of a user defined function. - - Args: - definition(LocalModuleDefinition): Definition of the function being added. - first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. - - Returns: - the_new_nodes(list[Node]): The nodes added while visiting the function. - first_node(EntryOrExitNode or None or RestoreNode): Used to connect previous statements to this function. - """ - len_before_visiting_func = len(self.nodes) - previous_node = self.nodes[-1] - entry_node = self.append_node(EntryOrExitNode("Function Entry " + - definition.name)) - if not first_node: - first_node = entry_node - self.connect_if_allowed(previous_node, entry_node) - - function_body_connect_statements = self.stmt_star_handler(definition.node.body) - entry_node.connect(function_body_connect_statements.first_statement) - - exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) - exit_node.connect_predecessors(function_body_connect_statements.last_statements) - - the_new_nodes = self.nodes[len_before_visiting_func:] - self.return_connection_handler(the_new_nodes, exit_node) - - return (the_new_nodes, first_node) - def visit_Call(self, node): _id = get_call_names_as_string(node.func) local_definitions = self.module_definitions_stack[-1] @@ -741,7 +734,14 @@ def add_module(self, module, module_or_package_name, local_names, import_alias_m return exit_node - def from_directory_import(self, module, real_names, local_names, import_alias_mapping, skip_init=False): + def from_directory_import( + self, + module, + real_names, + local_names, + import_alias_mapping, + skip_init=False + ): """ Directories don't need to be packages. """ @@ -785,6 +785,7 @@ def from_directory_import(self, module, real_names, local_names, import_alias_ma import_alias_mapping, from_from=True ) + return IgnoredNode() def import_package(self, module, module_name, local_name, import_alias_mapping): module_path = module[1] @@ -801,40 +802,6 @@ def import_package(self, module, module_name, local_name, import_alias_mapping): else: raise Exception("import directory needs an __init__.py file") - def visit_Import(self, node): - for name in node.names: - for module in self.local_modules: - if name.name == module[0]: - if os.path.isdir(module[1]): - return self.import_package( - module, - name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - for module in self.project_modules: - if name.name == module[0]: - if os.path.isdir(module[1]): - return self.import_package( - module, - name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return IgnoredNode() - def handle_relative_import(self, node): """ from A means node.level == 0 @@ -886,6 +853,40 @@ def handle_relative_import(self, node): skip_init=skip_init ) + def visit_Import(self, node): + for name in node.names: + for module in self.local_modules: + if name.name == module[0]: + if os.path.isdir(module[1]): + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + for module in self.project_modules: + if name.name == module[0]: + if os.path.isdir(module[1]): + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return IgnoredNode() + def visit_ImportFrom(self, node): # Is it relative? if node.level > 0: @@ -926,11 +927,20 @@ def visit_ImportFrom(self, node): return IgnoredNode() -def interprocedural(node, project_modules, local_modules, filename, - module_definitions=None): - - visitor = InterproceduralVisitor(node, - project_modules, - local_modules, filename, - module_definitions) - return CFG(visitor.nodes, visitor.blackbox_assignments) +def interprocedural( + node, + project_modules, + local_modules, + filename, + module_definitions=None +): + visitor = InterproceduralVisitor( + node, + project_modules, + local_modules, filename, + module_definitions + ) + return CFG( + visitor.nodes, + visitor.blackbox_assignments + ) diff --git a/pyt/interprocedural_cfg_helper.py b/pyt/interprocedural_cfg_helper.py new file mode 100644 index 00000000..d8ee6c7f --- /dev/null +++ b/pyt/interprocedural_cfg_helper.py @@ -0,0 +1,54 @@ +from collections import namedtuple + +from .node_types import ( + ConnectToExitNode +) + +SavedVariable = namedtuple('SavedVariable', 'LHS RHS') +BUILTINS = ( + 'get', + 'Flask', + 'run', + 'replace', + 'read', + 'set_cookie', + 'make_response', + 'SQLAlchemy', + 'Column', + 'execute', + 'sessionmaker', + 'Session', + 'filter', + 'call', + 'render_template', + 'redirect', + 'url_for', + 'flash', + 'jsonify' +) + + +class CFG(): + def __init__(self, nodes, blackbox_assignments): + self.nodes = nodes + self.blackbox_assignments = blackbox_assignments + + def __repr__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) + return output + + def __str__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) + return output + + +def return_connection_handler(nodes, exit_node): + """Connect all return statements to the Exit node.""" + for function_body_node in nodes: + if isinstance(function_body_node, ConnectToExitNode): + if exit_node not in function_body_node.outgoing: + function_body_node.connect(exit_node) diff --git a/pyt/intraprocedural_cfg.py b/pyt/intraprocedural_cfg.py deleted file mode 100644 index 5c990f23..00000000 --- a/pyt/intraprocedural_cfg.py +++ /dev/null @@ -1,179 +0,0 @@ -import ast - -from .ast_helper import Arguments, generate_ast -from .base_cfg import ( - CALL_IDENTIFIER, - CFG, - EntryOrExitNode, - IgnoredNode, - Node, - ReturnNode, - Visitor -) -from .label_visitor import LabelVisitor -from .right_hand_side_visitor import RHSVisitor - - -class IntraproceduralVisitor(Visitor): - - def __init__(self, node, filename): - """Create an empty CFG.""" - self.nodes = list() - self.undecided = False # Check if needed in intraprocedural - - self.function_names = list() - self.filenames = [filename] - - try: - # FunctionDef ast node - self.init_function_cfg(node) - except: # Error?! - # Module ast node - self.init_module_cfg(node) - - def init_module_cfg(self, node): - entry_node = self.append_node(EntryOrExitNode("Entry module")) - - module_statements = self.visit(node) - - if not module_statements: - raise Exception('Empty module. It seems that your file is empty,' + - ' there is nothing to analyse.') - - if not isinstance(module_statements, IgnoredNode): - first_node = module_statements.first_statement - - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) - - exit_node = self.append_node(EntryOrExitNode("Exit module")) - - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - else: - exit_node = self.append_node(EntryOrExitNode("Exit module")) - entry_node.connect(exit_node) - - def init_function_cfg(self, node): - - entry_node = self.append_node(EntryOrExitNode("Entry module")) - - module_statements = self.stmt_star_handler(node.body) - if isinstance(module_statements, IgnoredNode): - exit_node = self.append_node(EntryOrExitNode("Exit module")) - entry_node.connect(exit_node) - return - - first_node = module_statements.first_statement - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) - - exit_node = self.append_node(EntryOrExitNode("Exit module")) - - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - - def visit_ClassDef(self, node): - return self.append_node(Node('class ' + node.name, node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_FunctionDef(self, node): - arguments = Arguments(node.args) - return self.append_node(Node('def ' + node.name + '(' + - ','.join(arguments) + '):', - node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Return(self, node): - label = LabelVisitor() - label.visit(node) - - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyReturn' - - LHS = 'ret_' + 'MAYBE_FUNCTION_NAME' - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, - node, - rhs_visitor.result, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Yield(self, node): - label = LabelVisitor() - label.visit(node) - - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyYield' - - LHS = 'yield_' + 'MAYBE_FUNCTION_NAME' - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, - node, - rhs_visitor.result, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Call(self, node): - return self.add_builtin(node) - - def visit_Import(self, node): - names = [n.name for n in node.names] - return self.append_node(Node('Import ' + ', '.join(names), node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_ImportFrom(self, node): - names = [a.name for a in node.names] - try: - from_import = 'from ' + node.module + ' ' - except TypeError: - from_import = '' - return self.append_node(Node(from_import + 'import ' + - ', '.join(names), - node, - line_number=node.lineno, - path=self.filenames[-1])) - - -class FunctionDefVisitor(ast.NodeVisitor): - def __init__(self): - self.result = list() - - def visit_FunctionDef(self, node): - self.result.append(node) - #def visit_ClassDef(self, node): - # self.result.append(node) - - -def intraprocedural(project_modules, cfg_list): - functions = list() - dup = list() - for module in project_modules: - t = generate_ast(module[1]) - iv = IntraproceduralVisitor(t, filename=module[1]) - cfg_list.append(CFG(iv.nodes)) - dup.append(t) - fdv = FunctionDefVisitor() - fdv.visit(t) - dup.extend(fdv.result) - functions.extend([(f, module[1]) for f in fdv.result]) - - for f in functions: - iv = IntraproceduralVisitor(f[0], filename=f[1]) - cfg_list.append(CFG(iv.nodes)) - - s = set() - for d in dup: - if d in s: - raise Exception('Duplicates in the functions definitions list.') - else: - s.add(d) diff --git a/pyt/liveness.py b/pyt/liveness.py index d9aadde8..8d3fe4f3 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -2,16 +2,16 @@ from .analysis_base import AnalysisBase from .ast_helper import get_call_names_as_string -from .base_cfg import ( - AssignmentNode, - BBorBInode, - EntryOrExitNode -) from .constraint_table import ( constraint_join, constraint_table ) from .lattice import Lattice +from .node_types import ( + AssignmentNode, + BBorBInode, + EntryOrExitNode +) from .vars_visitor import VarsVisitor diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index 0a465d4c..0f7b72a2 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -62,7 +62,7 @@ def __init__(self, import_names=None, module_name=None, is_init=False, filename= self.filename = filename self.definitions = list() self.classes = list() - self.import_alias_mapping = {} + self.import_alias_mapping = dict() def append_if_local_or_in_imports(self, definition): """Add definition to list. diff --git a/pyt/node_types.py b/pyt/node_types.py new file mode 100644 index 00000000..495ac33b --- /dev/null +++ b/pyt/node_types.py @@ -0,0 +1,228 @@ +"""This module contains all of the CFG nodes types.""" +from collections import namedtuple + + +ControlFlowNode = namedtuple('ControlFlowNode', + 'test last_nodes break_statements') + +class IgnoredNode(): + """Ignored Node sent from an ast node that should not return anything.""" + pass + +class ConnectToExitNode(): + pass + + +class Node(): + """A Control Flow Graph node that contains a list of + ingoing and outgoing nodes and a list of its variables.""" + + def __init__(self, label, ast_node, *, line_number, path): + """Create a Node that can be used in a CFG. + + Args: + label(str): The label of the node, describing its expression. + line_number(Optional[int]): The line of the expression of the Node. + """ + self.label = label + self.ast_node = ast_node + self.line_number = line_number + self.path = path + self.ingoing = list() + self.outgoing = list() + + def connect(self, successor): + """Connect this node to its successor node by + setting its outgoing and the successors ingoing.""" + if isinstance(self, ConnectToExitNode) and not isinstance(successor, EntryOrExitNode): + return + + self.outgoing.append(successor) + successor.ingoing.append(self) + + def connect_predecessors(self, predecessors): + """Connect all nodes in predecessors to this node.""" + for n in predecessors: + self.ingoing.append(n) + n.outgoing.append(self) + + def __str__(self): + """Print the label of the node.""" + return ''.join((' Label: ', self.label)) + + + def __repr__(self): + """Print a representation of the node.""" + label = ' '.join(('Label: ', self.label)) + line_number = 'Line number: ' + str(self.line_number) + outgoing = '' + ingoing = '' + if self.ingoing: + ingoing = ' '.join(('ingoing:\t', str([x.label for x in self.ingoing]))) + else: + ingoing = ' '.join(('ingoing:\t', '[]')) + + if self.outgoing: + outgoing = ' '.join(('outgoing:\t', str([x.label for x in self.outgoing]))) + else: + outgoing = ' '.join(('outgoing:\t', '[]')) + + return '\n' + '\n'.join((label, line_number, ingoing, outgoing)) + + +class RaiseNode(Node, ConnectToExitNode): + """CFG Node that represents a Raise statement.""" + + def __init__(self, label, ast_node, *, line_number, path): + """Create a Raise node.""" + super().__init__(label, ast_node, line_number=line_number, path=path) + + +class BreakNode(Node): + """CFG Node that represents a Break node.""" + + def __init__(self, ast_node, *, line_number, path): + super().__init__(self.__class__.__name__, ast_node, line_number=line_number, path=path) + + +class EntryOrExitNode(Node): + """CFG Node that represents an Exit or an Entry node.""" + + def __init__(self, label): + super().__init__(label, None, line_number=None, path=None) + + +class AssignmentNode(Node): + """CFG Node that represents an assignment.""" + + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): + """Create an Assignment node. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + ast_node(_ast.Assign, _ast.AugAssign, _ast.Return or None) + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. + """ + super().__init__(label, ast_node, line_number=line_number, path=path) + self.left_hand_side = left_hand_side + self.right_hand_side_variables = right_hand_side_variables + + def __repr__(self): + output_string = super().__repr__() + output_string += '\n' + return ''.join((output_string, + 'left_hand_side:\t', str(self.left_hand_side), '\n', + 'right_hand_side_variables:\t', str(self.right_hand_side_variables))) + + +class TaintedNode(AssignmentNode): + pass + + +class RestoreNode(AssignmentNode): + """Node used for handling restore nodes returning from function calls.""" + + def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): + """Create a Restore node. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. + """ + super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) + + +class BBorBInode(AssignmentNode): + """Node used for handling restore nodes returning from blackbox or builtin function calls.""" + + def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path): + """Create a Restore node. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. + """ + super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) + self.args = list() + self.inner_most_call = self + + +class AssignmentCallNode(AssignmentNode): + """Node used for X.""" + + def __init__( + self, + label, + left_hand_side, + ast_node, + right_hand_side_variables, + vv_result, + *, + line_number, + path, + call_node + ): + """Create a X. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + right_hand_side_variables(list[str]): A list of variables on the right hand side. + vv_result(list[str]): Necessary to know `image_name = image_name.replace('..', '')` is a reassignment. + line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. + call_node(BBorBInode or RestoreNode): Used in connect_control_flow_node. + """ + super().__init__( + label, + left_hand_side, + ast_node, + right_hand_side_variables, + line_number=line_number, + path=path + ) + self.vv_result = vv_result + self.call_node = call_node + self.blackbox = False + + +class ReturnNode(AssignmentNode, ConnectToExitNode): + """CFG node that represents a return from a call.""" + + def __init__( + self, + label, + left_hand_side, + ast_node, + right_hand_side_variables, + *, + line_number, + path + ): + """Create a return from a call node. + + Args: + label(str): The label of the node, describing the expression it represents. + left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. + ast_node + right_hand_side_variables(list[str]): A list of variables on the right hand side. + line_number(Optional[int]): The line of the expression the Node represents. + path(string): Current filename. + """ + super().__init__( + label, + left_hand_side, + ast_node, + right_hand_side_variables, + line_number=line_number, + path=path + ) diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index 0c8317b3..3bf5d075 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -1,5 +1,5 @@ -from .base_cfg import AssignmentNode from .constraint_table import constraint_table +from .node_types import AssignmentNode from .reaching_definitions_base import ReachingDefinitionsAnalysisBase diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 48ed533d..9031c12d 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -1,7 +1,7 @@ from .analysis_base import AnalysisBase -from .base_cfg import AssignmentNode from .constraint_table import constraint_join from .lattice import Lattice +from .node_types import AssignmentNode class ReachingDefinitionsAnalysisBase(AnalysisBase): diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index a93ec544..4e0512b2 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,8 +1,8 @@ -from .base_cfg import ( +from .constraint_table import constraint_table +from .node_types import ( AssignmentCallNode, AssignmentNode ) -from .constraint_table import constraint_table from .reaching_definitions_base import ReachingDefinitionsAnalysisBase diff --git a/pyt/save.py b/pyt/save.py index 5ee6ebf2..a3a61059 100644 --- a/pyt/save.py +++ b/pyt/save.py @@ -1,9 +1,9 @@ import os from datetime import datetime -from .base_cfg import Node from .definition_chains import build_def_use_chain, build_use_def_chain from .lattice import Lattice +from .node_types import Node database_file_name = 'db.sql' diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 968992b7..ab1d130d 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -3,14 +3,14 @@ import ast from collections import namedtuple -from .base_cfg import ( +from .lattice import Lattice +from .node_types import ( AssignmentCallNode, AssignmentNode, BBorBInode, RestoreNode, TaintedNode ) -from .lattice import Lattice from .right_hand_side_visitor import RHSVisitor from .trigger_definitions_parser import default_trigger_word_file, parse from .vars_visitor import VarsVisitor diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 08edb251..da07706e 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,6 +1,5 @@ from .base_test_case import BaseTestCase -from pyt.base_cfg import EntryOrExitNode, Node -# from pyt.project_handler import get_modules +from pyt.node_types import EntryOrExitNode, Node class CFGGeneralTest(BaseTestCase): @@ -1086,9 +1085,6 @@ def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): def test_function_line_numbers_2(self): path = 'example/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) - # self.cfg = CFG(get_modules(path)) - # tree = generate_ast(path) - # self.cfg.create(tree) assignment_with_function = self.cfg.nodes[1] diff --git a/tests/command_line_test.py b/tests/command_line_test.py index 6749677c..3f90594e 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -27,7 +27,7 @@ def test_no_args(self): [-p | -vp | -trim] [-t TRIGGER_WORD_FILE] [-py2] [-l LOG_LEVEL] [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-li | -re | -rt] - [-intra] [-ppm] + [-ppm] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 0c9a6153..af57cdd9 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -4,12 +4,12 @@ from .base_test_case import BaseTestCase from pyt import trigger_definitions_parser, vulnerabilities from pyt.ast_helper import get_call_names_as_string -from pyt.base_cfg import Node from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_flask_route_function from pyt.lattice import Lattice +from pyt.node_types import Node from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index aeb39478..9fd0dac7 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -2,12 +2,12 @@ from .base_test_case import BaseTestCase from pyt import trigger_definitions_parser, vulnerabilities -from pyt.base_cfg import Node from pyt.constraint_table import constraint_table, initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_django_view_function, is_flask_route_function from pyt.lattice import Lattice +from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis From ea019012a8b4a5d6aaa7f3d8e58fb01219d30842 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 20 Mar 2018 09:58:45 -0700 Subject: [PATCH 201/541] Fixed mistake where I made a 2nd exitnode, make it DRYer --- pyt/base_cfg.py | 1 - pyt/interprocedural_cfg.py | 23 +++++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index a7967852..dfe5a30a 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -53,7 +53,6 @@ def stmt_star_handler( node_not_to_step_past = self.nodes[-1] for stmt in stmts: - # stmt is 203 node = self.visit(stmt) if isinstance(stmt, (ast.For, ast.While)): self.last_was_loop_stack.append(True) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 88d2ef40..e99f6d30 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -81,19 +81,20 @@ def init_cfg(self, node): raise Exception('Empty module. It seems that your file is empty,' + 'there is nothing to analyse.') - if not isinstance(module_statements, IgnoredNode): - first_node = module_statements.first_statement + exit_node = self.append_node(EntryOrExitNode("Exit module")) - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) + if isinstance(module_statements, IgnoredNode): + entry_node.connect(exit_node) + return - exit_node = self.append_node(EntryOrExitNode("Exit module")) + first_node = module_statements.first_statement + + if CALL_IDENTIFIER not in first_node.label: + entry_node.connect(first_node) - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - else: - exit_node = self.append_node(EntryOrExitNode("Exit module")) - entry_node.connect(exit_node) + + last_nodes = module_statements.last_statements + exit_node.connect_predecessors(last_nodes) def init_function_cfg(self, node, module_definitions): self.module_definitions_stack.append(module_definitions) @@ -115,8 +116,6 @@ def init_function_cfg(self, node, module_definitions): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit function")) - last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) From bde8140a4e36458fa6cd6350037282dfb9e5025a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 20 Mar 2018 10:01:07 -0700 Subject: [PATCH 202/541] Removed extra newline --- pyt/interprocedural_cfg.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index e99f6d30..062885ae 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -92,7 +92,6 @@ def init_cfg(self, node): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) From 84a25f2a58a4bb21d542bc09b760515bcbc5d3cf Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 21 Mar 2018 19:48:16 -0700 Subject: [PATCH 203/541] Get path_traversal_sanitised_2 to work, remove a bad connect in save_def_args_in_temp, make all tests pass, change double quotes to single quotes, cleanup stmt_star_handler/connect_if_allowed/comments/docstrings --- example/vulnerable_code/ensure_saved_scope.py | 25 +++ .../path_traversal_sanitised_2.py | 2 +- pyt/argument_helpers.py | 2 +- pyt/base_cfg.py | 66 +++--- pyt/definition_chains.py | 1 - pyt/interprocedural_cfg.py | 110 +++++---- pyt/intraprocedural_cfg.py | 12 +- pyt/vulnerabilities.py | 46 ++-- .../blackbox_mapping.json | 1 + pyt/vulnerability_helper.py | 10 +- tests/cfg_test.py | 212 +++++++++--------- tests/vulnerabilities_test.py | 97 ++++++-- 12 files changed, 350 insertions(+), 234 deletions(-) create mode 100644 example/vulnerable_code/ensure_saved_scope.py diff --git a/example/vulnerable_code/ensure_saved_scope.py b/example/vulnerable_code/ensure_saved_scope.py new file mode 100644 index 00000000..772a1600 --- /dev/null +++ b/example/vulnerable_code/ensure_saved_scope.py @@ -0,0 +1,25 @@ +import os +from flask import Flask, request, send_file + +app = Flask(__name__) + +def outer(outer_arg, other_arg): + outer_ret_val = outer_arg + 'hey' + other_arg + return outer_ret_val + +def inner(): + return 'boom' + +@app.route('/') +def cat_picture(): + image_name = request.args.get('image_name') + if not image_name: + image_name = 'foo' + return 404 + foo = outer(inner(), image_name) # Nested call after if caused the problem + send_file(image_name) + return 'idk' + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/example/vulnerable_code/path_traversal_sanitised_2.py b/example/vulnerable_code/path_traversal_sanitised_2.py index 2c85840f..afe1ac11 100644 --- a/example/vulnerable_code/path_traversal_sanitised_2.py +++ b/example/vulnerable_code/path_traversal_sanitised_2.py @@ -7,7 +7,7 @@ def cat_picture(): image_name = request.args.get('image_name') - if not '..' in image_name: + if '..' in image_name: return 404 return send_file(os.path.join(os.getcwd(), image_name)) diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index a020431e..05b4542c 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -35,7 +35,7 @@ class UImode(Enum): VulnerabilityFiles = namedtuple( - 'VulnerabilityFiles', + 'VulnerabilityFiles', [ 'blackbox_mapping', 'triggers' diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index d8bec040..67c1d085 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -323,20 +323,21 @@ def get_inner_most_function_call(self, call_node): call_node = call_node.inner_most_call else: try: - call_node = call_node.first_node.inner_most_call + # e.g. save_2_blah, even when there is a save_3_blah + call_node = call_node.first_node except AttributeError: - try: - call_node = call_node.first_node - except AttributeError: - # No inner calls - # Possible improvement: Make new node for RestoreNode's made in process_function - # and make `self.inner_most_call = self` - pass + # No inner calls + # Possible improvement: Make new node for RestoreNode's made in process_function + # and make `self.inner_most_call = self` + # So that we can duck type and not catch an exception when there are no inner calls. + # This is what we do in BBorBInode + pass + return call_node def connect_control_flow_node(self, control_flow_node, next_node): """Connect a ControlFlowNode properly to the next_node.""" - for last in control_flow_node[1]: # list of last nodes in ifs and elifs + for last in control_flow_node.last_nodes: if isinstance(next_node, ControlFlowNode): last.connect(next_node.test) # connect to next if test case elif isinstance(next_node, AssignmentCallNode): @@ -349,10 +350,10 @@ def connect_control_flow_node(self, control_flow_node, next_node): def connect_nodes(self, nodes): """Connect the nodes in a list linearly.""" for n, next_node in zip(nodes, nodes[1:]): - if isinstance(n, ControlFlowNode): # case for if + if isinstance(n, ControlFlowNode): self.connect_control_flow_node(n, next_node) - elif isinstance(next_node, ControlFlowNode): # case for if - n.connect(next_node[0]) + elif isinstance(next_node, ControlFlowNode): + n.connect(next_node.test) elif isinstance(next_node, RestoreNode): continue elif CALL_IDENTIFIER in next_node.label: @@ -375,18 +376,19 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): break_nodes = list() cfg_statements = list() - if prev_node_to_avoid: - self.prev_nodes_to_avoid.append(prev_node_to_avoid) + self.prev_nodes_to_avoid.append(prev_node_to_avoid) + self.last_control_flow_nodes.append(None) first_node = None node_not_to_step_past = self.nodes[-1] for stmt in stmts: node = self.visit(stmt) - if isinstance(stmt, ast.While) or isinstance(stmt, ast.For): - self.last_was_loop_stack.append(True) + + if isinstance(node, ControlFlowNode) and node.test.label != 'Try': + self.last_control_flow_nodes.append(node.test) else: - self.last_was_loop_stack.append(False) + self.last_control_flow_nodes.append(None) if isinstance(node, ControlFlowNode): break_nodes.extend(node.break_statements) @@ -419,9 +421,9 @@ def stmt_star_handler(self, stmts, prev_node_to_avoid=None): else: first_node = node cfg_statements.append(node) - if prev_node_to_avoid: - self.prev_nodes_to_avoid.pop() - self.last_was_loop_stack.pop() + + self.prev_nodes_to_avoid.pop() + self.last_control_flow_nodes.pop() self.connect_nodes(cfg_statements) @@ -453,6 +455,10 @@ def add_elif_label(self, CFG_node): def handle_or_else(self, orelse, test): """Handle the orelse part of an if or try node. + Args: + orelse(list[Node]) + test(Node) + Returns: The last nodes of the orelse branch. """ @@ -462,7 +468,10 @@ def handle_or_else(self, orelse, test): test.connect(control_flow_node.test) return control_flow_node.last_nodes else: - else_connect_statements = self.stmt_star_handler(orelse, prev_node_to_avoid=self.nodes[-1]) + else_connect_statements = self.stmt_star_handler( + orelse, + prev_node_to_avoid=self.nodes[-1] + ) test.connect(else_connect_statements.first_statement) return else_connect_statements.last_statements @@ -721,7 +730,10 @@ def visit_AugAssign(self, node): def loop_node_skeleton(self, test, node): """Common handling of looped structures, while and for.""" - body_connect_stmts = self.stmt_star_handler(node.body, prev_node_to_avoid=self.nodes[-1]) + body_connect_stmts = self.stmt_star_handler( + node.body, + prev_node_to_avoid=self.nodes[-1] + ) test.connect(body_connect_stmts.first_statement) test.connect_predecessors(body_connect_stmts.last_statements) @@ -732,7 +744,10 @@ def loop_node_skeleton(self, test, node): last_nodes.extend(body_connect_stmts.break_statements) if node.orelse: - orelse_connect_stmts = self.stmt_star_handler(node.orelse, prev_node_to_avoid=self.nodes[-1]) + orelse_connect_stmts = self.stmt_star_handler( + node.orelse, + prev_node_to_avoid=self.nodes[-1] + ) test.connect(orelse_connect_stmts.first_statement) last_nodes.extend(orelse_connect_stmts.last_statements) @@ -816,16 +831,13 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_label.visit(node) index = call_label.result.find('(') - if index == -1: - print("No ( in a call") - raise # Create e.g. ¤call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + call_label.result[:index] + '(' call_node = BBorBInode( - label="", + label='', left_hand_side=LHS, right_hand_side_variables=[], line_number=node.lineno, diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index e61c3c01..81eee885 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -41,7 +41,6 @@ def get_constraint_nodes(node, lattice): yield n -# TKTK: Clean up use-def too def build_use_def_chain(cfg_nodes): use_def = dict() lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 003eb3e5..23ff1404 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -80,7 +80,7 @@ def __init__(self, node, project_modules, local_modules, self.function_return_stack = list() self.module_definitions_stack = list() self.prev_nodes_to_avoid = list() - self.last_was_loop_stack = list() + self.last_control_flow_nodes = list() # Are we already in a module? if module_definitions: @@ -91,7 +91,7 @@ def __init__(self, node, project_modules, local_modules, def init_cfg(self, node): self.module_definitions_stack.append(ModuleDefinitions(filename=self.filenames[-1])) - entry_node = self.append_node(EntryOrExitNode("Entry module")) + entry_node = self.append_node(EntryOrExitNode('Entry module')) module_statements = self.visit(node) @@ -105,12 +105,12 @@ def init_cfg(self, node): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) else: - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) entry_node.connect(exit_node) def init_function_cfg(self, node, module_definitions): @@ -119,7 +119,7 @@ def init_function_cfg(self, node, module_definitions): self.function_names.append(node.name) self.function_return_stack.append(node.name) - entry_node = self.append_node(EntryOrExitNode("Entry function")) + entry_node = self.append_node(EntryOrExitNode('Entry function')) module_statements = self.stmt_star_handler(node.body) @@ -128,7 +128,7 @@ def init_function_cfg(self, node, module_definitions): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit function")) + exit_node = self.append_node(EntryOrExitNode('Exit function')) last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) @@ -302,38 +302,37 @@ def save_local_scope(self, line_number, saved_function_call_index): return (saved_variables, first_node) def connect_if_allowed(self, previous_node, node_to_connect_to): - try: - # Do not connect if last statement was a loop e.g. - # while x != 10: - # if x > 0: - # print(x) - # break - # else: - # print('hest') - # print('next') # self.nodes[-1] is print('hest') - if self.last_was_loop_stack[-1]: - return - except IndexError: - pass - try: - if previous_node is not self.prev_nodes_to_avoid[-1]: - previous_node.connect(node_to_connect_to) - except IndexError: - # If there are no prev_nodes_to_avoid, we just connect safely. - # Except in this case: - # - # if not image_name: - # return 404 - # print('foo') # We do not want to connect this line with `return 404` - if not isinstance(previous_node, ReturnNode): - previous_node.connect(node_to_connect_to) - - def save_def_args_in_temp(self, - call_args, - def_args, - line_number, - saved_function_call_index, - first_node): + # e.g. + # while x != 10: + # if x > 0: + # print(x) + # break + # else: + # print('hest') + # print('next') # self.nodes[-1] is print('hest') + # + # So we connect to `while x!= 10` instead + if self.last_control_flow_nodes[-1]: + self.last_control_flow_nodes[-1].connect(node_to_connect_to) + self.last_control_flow_nodes[-1] = None + return + + # Except in this case: + # + # if not image_name: + # return 404 + # print('foo') # We do not want to connect this line with `return 404` + if previous_node is not self.prev_nodes_to_avoid[-1] and not isinstance(previous_node, ReturnNode): + previous_node.connect(node_to_connect_to) + + def save_def_args_in_temp( + self, + call_args, + def_args, + line_number, + saved_function_call_index, + first_node + ): """Save the arguments of the definition being called. Visit the arguments if they're calls. Args: @@ -407,18 +406,15 @@ def save_def_args_in_temp(self, else: args_mapping[def_args[i]] = call_arg_label_visitor.result - # After args loop - if last_return_value_of_nested_call: - # connect other_inner to outer in e.g. `outer(inner(image_name), other_inner(image_name))` - last_return_value_of_nested_call.connect(first_node) - return (args_mapping, first_node) - def create_local_scope_from_def_args(self, - call_args, - def_args, - line_number, - saved_function_call_index): + def create_local_scope_from_def_args( + self, + call_args, + def_args, + line_number, + saved_function_call_index + ): """Create the local scope before entering the body of a function call. Args: @@ -445,10 +441,12 @@ def create_local_scope_from_def_args(self, self.nodes[-1].connect(local_scope_node) self.nodes.append(local_scope_node) - def restore_saved_local_scope(self, - saved_variables, - args_mapping, - line_number): + def restore_saved_local_scope( + self, + saved_variables, + args_mapping, + line_number + ): """Restore the previously saved variables to their original values. Args: @@ -603,7 +601,7 @@ def visit_and_get_function_nodes(self, definition, first_node): """ len_before_visiting_func = len(self.nodes) previous_node = self.nodes[-1] - entry_node = self.append_node(EntryOrExitNode("Function Entry " + + entry_node = self.append_node(EntryOrExitNode('Function Entry ' + definition.name)) if not first_node: first_node = entry_node @@ -612,7 +610,7 @@ def visit_and_get_function_nodes(self, definition, first_node): function_body_connect_statements = self.stmt_star_handler(definition.node.body) entry_node.connect(function_body_connect_statements.first_statement) - exit_node = self.append_node(EntryOrExitNode("Exit " + definition.name)) + exit_node = self.append_node(EntryOrExitNode('Exit ' + definition.name)) exit_node.connect_predecessors(function_body_connect_statements.last_statements) the_new_nodes = self.nodes[len_before_visiting_func:] @@ -790,7 +788,7 @@ def from_directory_import(self, module, real_names, local_names, import_alias_ma from_fdid=True ) else: - raise Exception("from anything import directory needs an __init__.py file in directory") + raise Exception('from anything import directory needs an __init__.py file in directory') else: file_module = (real_name, full_name + '.py') self.add_module( @@ -814,7 +812,7 @@ def import_package(self, module, module_name, local_name, import_alias_mapping): is_init=True ) else: - raise Exception("import directory needs an __init__.py file") + raise Exception('import directory needs an __init__.py file') def visit_Import(self, node): for name in node.names: diff --git a/pyt/intraprocedural_cfg.py b/pyt/intraprocedural_cfg.py index 5c990f23..1fe175b7 100644 --- a/pyt/intraprocedural_cfg.py +++ b/pyt/intraprocedural_cfg.py @@ -32,7 +32,7 @@ def __init__(self, node, filename): self.init_module_cfg(node) def init_module_cfg(self, node): - entry_node = self.append_node(EntryOrExitNode("Entry module")) + entry_node = self.append_node(EntryOrExitNode('Entry module')) module_statements = self.visit(node) @@ -46,21 +46,21 @@ def init_module_cfg(self, node): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) else: - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) entry_node.connect(exit_node) def init_function_cfg(self, node): - entry_node = self.append_node(EntryOrExitNode("Entry module")) + entry_node = self.append_node(EntryOrExitNode('Entry module')) module_statements = self.stmt_star_handler(node.body) if isinstance(module_statements, IgnoredNode): - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) entry_node.connect(exit_node) return @@ -68,7 +68,7 @@ def init_function_cfg(self, node): if CALL_IDENTIFIER not in first_node.label: entry_node.connect(first_node) - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 380d57d6..d0640c53 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -122,7 +122,7 @@ def find_secondary_sources( Args: assignment_nodes([AssignmentNode]) sources([tuple]) - lattice(Lattice): The lattice we're analysing. + lattice(Lattice): the lattice we're analysing. """ for source in sources: source.secondary_nodes = find_assignments(assignment_nodes, source, lattice) @@ -134,15 +134,16 @@ def find_assignments( lattice ): old = list() - - # added in order to propagate reassignments of the source node + # propagate reassignments of the source node new = [source.cfg_node] - update_assignments(new, assignment_nodes, source.cfg_node, lattice) while new != old: - old = new update_assignments(new, assignment_nodes, source.cfg_node, lattice) - new.remove(source.cfg_node) # remove source node from result + old = new + + # remove source node from result + del new[0] + return new @@ -289,7 +290,7 @@ def get_vulnerability_chains( current_node() sink() def_use(dict): - chain(list(Node)): + chain(list(Node)): A path of nodes between source to sink. """ for use in def_use[current_node]: if use == sink: @@ -309,16 +310,21 @@ def how_vulnerable( chain, blackbox_mapping, sanitiser_nodes, + potential_sanitiser, blackbox_assignments, ui_mode, vuln_deets ): """Iterates through the chain of nodes and checks the blackbox nodes against the blackbox mapping and sanitiser dictionary. + Note: potential_sanitiser is the only hack here, it is because we do not take p-use's into account yet. + e.g. we can only say potentially instead of definitely sanitised in the path_traversal_sanitised_2.py test. + Args: - chain(list(Node)): TODO - blackbox_mapping(dict): - sanitiser_nodes(set): + chain(list(Node)): A path of nodes between source to sink. + blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. + sanitiser_nodes(set): A set of nodes that are sanitisers for the sink. + potential_sanitiser(Node): An if or elif node that can potentially cause sanitisation. blackbox_assignments(set[AssignmentNode]): set of blackbox assignments, includes the ReturnNode's of BBorBInode's. ui_mode(UImode): determines if we interact with the user when we don't already have a blackbox mapping available. vuln_deets(dict): vulnerability details. @@ -329,6 +335,7 @@ def how_vulnerable( for i, current_node in enumerate(chain): if current_node in sanitiser_nodes: vuln_deets['sanitiser'] = current_node + vuln_deets['definite'] = True return VulnerabilityType.SANITISED if isinstance(current_node, BBorBInode): @@ -350,6 +357,12 @@ def how_vulnerable( else: vuln_deets['unknown_assignment'] = current_node return VulnerabilityType.UNKNOWN + + if potential_sanitiser: + vuln_deets['sanitiser'] = potential_sanitiser + vuln_deets['definite'] = False + return VulnerabilityType.SANITISED + return VulnerabilityType.TRUE @@ -386,10 +399,10 @@ def get_vulnerability( source(TriggerNode): TriggerNode of the source. sink(TriggerNode): TriggerNode of the sink. triggers(Triggers): Triggers of the CFG. - lattice(Lattice): The lattice we're analysing. + lattice(Lattice): the lattice we're analysing. cfg(CFG): .blackbox_assignments used in is_unknown, .nodes used in build_def_use_chain ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. - blackbox_mapping(dict): TODO + blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. Returns: A Vulnerability if it exists, else None @@ -415,10 +428,13 @@ def get_vulnerability( } sanitiser_nodes = set() + potential_sanitiser = None if sink.sanitisers: for sanitiser in sink.sanitisers: for cfg_node in triggers.sanitiser_dict[sanitiser]: sanitiser_nodes.add(cfg_node) + if 'if' in cfg_node.label and cfg_node.label.endswith(':'): + potential_sanitiser = cfg_node def_use = build_def_use_chain(cfg.nodes) for chain in get_vulnerability_chains( @@ -430,12 +446,14 @@ def get_vulnerability( chain, blackbox_mapping, sanitiser_nodes, + potential_sanitiser, cfg.blackbox_assignments, ui_mode, vuln_deets ) if vulnerability_type == VulnerabilityType.FALSE: continue + if ui_mode != UImode.NORMAL: vuln_deets['reassignment_nodes'] = chain @@ -458,9 +476,9 @@ def find_vulnerabilities_in_cfg( cfg(CFG): The CFG to find vulnerabilities in. vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. - lattice(Lattice): The lattice we're analysing. + lattice(Lattice): the lattice we're analysing. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. - blackbox_mapping(dict): TODO + blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. """ triggers = identify_triggers( cfg, diff --git a/pyt/vulnerability_definitions/blackbox_mapping.json b/pyt/vulnerability_definitions/blackbox_mapping.json index 96c749fd..fbb229e3 100644 --- a/pyt/vulnerability_definitions/blackbox_mapping.json +++ b/pyt/vulnerability_definitions/blackbox_mapping.json @@ -4,6 +4,7 @@ "url_for" ], "propagates": [ + "os.path.join", "graham", "minnesota_fats" ] diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerability_helper.py index 7f10a735..0e26c03e 100644 --- a/pyt/vulnerability_helper.py +++ b/pyt/vulnerability_helper.py @@ -39,7 +39,7 @@ def __init__(self, reassignment_nodes): def __str__(self): reassignment = '' if self.reassignment_nodes: - reassignment += '\nReassigned in: \n\t' + reassignment += '\nReassigned in:\n\t' reassignment += '\n\t'.join([ 'File: ' + node.path + '\n\t' + ' > Line ' + str(node.line_number) + ': ' + @@ -105,7 +105,8 @@ def __init__( sink, sink_trigger_word, reassignment_nodes, - sanitiser + sanitiser, + definite ): """Set source, sink and sanitiser information.""" super().__init__( @@ -116,12 +117,15 @@ def __init__( reassignment_nodes ) self.sanitiser = sanitiser + self.definite = definite def __str__(self): """Pretty printing of a vulnerability.""" return ( super().__str__() + - '\nThis vulnerability is potentially sanitised by: ' + + '\nThis vulnerability is ' + + ('' if self.definite else 'potentially ') + + 'sanitised by: ' + str(self.sanitiser) ) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 08edb251..9459c88e 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -788,16 +788,17 @@ def test_blackbox_call_after_if(self): ret_send_file = 7 _exit = 8 - self.assertInCfg([(ret_request, entry), - (image_name_equals_call_1, ret_request), - (_if, image_name_equals_call_1), - (image_name_equals_foo, _if), - (blackbox_call, _if), - (blackbox_call, image_name_equals_foo), - (foo_equals_call_2, blackbox_call), - (ret_send_file, foo_equals_call_2), - (_exit, ret_send_file) - ]) + self.assertInCfg([ + (ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (blackbox_call, _if), + (blackbox_call, image_name_equals_foo), + (foo_equals_call_2, blackbox_call), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) def test_multiple_nested_user_defined_calls_after_if(self): path = 'example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py' @@ -850,53 +851,50 @@ def test_multiple_nested_user_defined_calls_after_if(self): ret_send_file = 37 _exit = 38 - self.assertInCfg([(ret_request, entry), - (image_name_equals_call_1, ret_request), - (_if, image_name_equals_call_1), - (image_name_equals_foo, _if), - # (call_2_equals_ret_outer, _if), ## (Before) NO NO NO - # (call_2_equals_ret_outer, image_name_equals_foo), ## (Before) NO NO NO - (save_3_image_name, _if), ## (After) Aww yeah, feels so good - (save_3_image_name, image_name_equals_foo), ## (After) Aww yeah, feels so good - (save_2_image_name, image_name_equals_foo), - - (save_3_image_name, save_2_image_name), - (temp_3_first_inner_arg, save_3_image_name), - (inner_arg_equals_temp_3, temp_3_first_inner_arg), - (function_entry_first_inner, inner_arg_equals_temp_3), - (first_inner_ret_val_assign_1st, function_entry_first_inner), - (ret_first_inner, first_inner_ret_val_assign_1st), - (function_exit_first_inner, ret_first_inner), - (image_name_equals_first_inner_arg, function_exit_first_inner), - (call_3_equals_ret_first_inner, image_name_equals_first_inner_arg), - (save_4_image_name, call_3_equals_ret_first_inner), - (temp_2_first_arg_equals_call_3, call_3_equals_ret_first_inner), - (save_4_image_name, temp_2_first_arg_equals_call_3), - (save_4_inner_ret_val, save_4_image_name), - (temp_4_inner_arg, save_4_inner_ret_val), - (inner_arg_equals_temp_4, temp_4_inner_arg), - (function_entry_second_inner, inner_arg_equals_temp_4), - (second_inner_ret_val_assign_2nd, function_entry_second_inner), - (ret_second_inner, second_inner_ret_val_assign_2nd), - (function_exit_second_inner, ret_second_inner), - (image_name_equals_second_inner_arg, function_exit_second_inner), - (first_inner_ret_val_equals_save_4, image_name_equals_second_inner_arg), - (call_4_equals_ret_second_inner, first_inner_ret_val_equals_save_4), - (save_2_image_name, call_4_equals_ret_second_inner), - (temp_2_second_arg_equals_call_4, call_4_equals_ret_second_inner), - (first_arg_equals_temp, temp_2_second_arg_equals_call_4), - (second_arg_equals_temp, first_arg_equals_temp), - (function_entry_outer, second_arg_equals_temp), - (outer_ret_val_assignment, function_entry_outer), - (ret_outer, outer_ret_val_assignment), - (function_exit_outer, ret_outer), - (image_name_restore, function_exit_outer), - (call_2_equals_ret_outer, image_name_restore), - - (foo_equals_call_2, call_2_equals_ret_outer), - (ret_send_file, foo_equals_call_2), - (_exit, ret_send_file) - ]) + self.assertInCfg([ + (ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (save_2_image_name, _if), + (save_2_image_name, image_name_equals_foo), + + (save_3_image_name, save_2_image_name), + (temp_3_first_inner_arg, save_3_image_name), + (inner_arg_equals_temp_3, temp_3_first_inner_arg), + (function_entry_first_inner, inner_arg_equals_temp_3), + (first_inner_ret_val_assign_1st, function_entry_first_inner), + (ret_first_inner, first_inner_ret_val_assign_1st), + (function_exit_first_inner, ret_first_inner), + (image_name_equals_first_inner_arg, function_exit_first_inner), + (call_3_equals_ret_first_inner, image_name_equals_first_inner_arg), + (save_4_image_name, call_3_equals_ret_first_inner), + (temp_2_first_arg_equals_call_3, call_3_equals_ret_first_inner), + (save_4_image_name, temp_2_first_arg_equals_call_3), + (save_4_inner_ret_val, save_4_image_name), + (temp_4_inner_arg, save_4_inner_ret_val), + (inner_arg_equals_temp_4, temp_4_inner_arg), + (function_entry_second_inner, inner_arg_equals_temp_4), + (second_inner_ret_val_assign_2nd, function_entry_second_inner), + (ret_second_inner, second_inner_ret_val_assign_2nd), + (function_exit_second_inner, ret_second_inner), + (image_name_equals_second_inner_arg, function_exit_second_inner), + (first_inner_ret_val_equals_save_4, image_name_equals_second_inner_arg), + (call_4_equals_ret_second_inner, first_inner_ret_val_equals_save_4), + (temp_2_second_arg_equals_call_4, call_4_equals_ret_second_inner), + (first_arg_equals_temp, temp_2_second_arg_equals_call_4), + (second_arg_equals_temp, first_arg_equals_temp), + (function_entry_outer, second_arg_equals_temp), + (outer_ret_val_assignment, function_entry_outer), + (ret_outer, outer_ret_val_assignment), + (function_exit_outer, ret_outer), + (image_name_restore, function_exit_outer), + (call_2_equals_ret_outer, image_name_restore), + + (foo_equals_call_2, call_2_equals_ret_outer), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) def test_multiple_nested_blackbox_calls_after_for(self): path = 'example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' @@ -916,18 +914,19 @@ def test_multiple_nested_blackbox_calls_after_for(self): ret_send_file = 9 _exit = 10 - self.assertInCfg([(ret_request, entry), - (image_name_equals_call_1, ret_request), - (_for, image_name_equals_call_1), - (ret_print, _for), - (_for, ret_print), - (inner_blackbox_call, _for), - (second_inner_blackbox_call, inner_blackbox_call), - (outer_blackbox_call, second_inner_blackbox_call), - (foo_equals_call_3, outer_blackbox_call), - (ret_send_file, foo_equals_call_3), - (_exit, ret_send_file) - ]) + self.assertInCfg([ + (ret_request, entry), + (image_name_equals_call_1, ret_request), + (_for, image_name_equals_call_1), + (ret_print, _for), + (_for, ret_print), + (inner_blackbox_call, _for), + (second_inner_blackbox_call, inner_blackbox_call), + (outer_blackbox_call, second_inner_blackbox_call), + (foo_equals_call_3, outer_blackbox_call), + (ret_send_file, foo_equals_call_3), + (_exit, ret_send_file) + ]) def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): path = 'example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py' @@ -972,43 +971,42 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): ret_send_file = 30 _exit = 31 - self.assertInCfg([(save_2_image_name, ret_scrypt_third), # Makes sense - (ret_scrypt_first, _if), # Makes sense - (ret_scrypt_first, image_name_equals_foo), # Makes sense - (save_4_image_name, ret_scrypt_first), # Makes sense - (ret_scrypt_third, call_4_equals_ret_second_inner), # Makes sense - (ret_request, entry), - (image_name_equals_call_1, ret_request), - (_if, image_name_equals_call_1), - (image_name_equals_foo, _if), - (save_2_image_name, image_name_equals_foo), - (ret_scrypt_first, save_2_image_name), - (temp_2_first_arg, ret_scrypt_first), - (save_4_image_name, temp_2_first_arg), - (temp_4_inner_arg, save_4_image_name), - (inner_arg_equals_temp_4, temp_4_inner_arg), - (function_entry_second_inner, inner_arg_equals_temp_4), - (inner_ret_val_equals_inner_arg_2nd, function_entry_second_inner), - (ret_second_inner, inner_ret_val_equals_inner_arg_2nd), - (function_exit_second_inner, ret_second_inner), - (image_name_equals_save_4, function_exit_second_inner), - (call_4_equals_ret_second_inner, image_name_equals_save_4), - (temp_2_second_arg, call_4_equals_ret_second_inner), - (ret_scrypt_third, temp_2_second_arg), - (temp_2_third_arg_equals_call_5, ret_scrypt_third), - (first_arg_equals_temp, temp_2_third_arg_equals_call_5), - (second_arg_equals_temp, first_arg_equals_temp), - (third_arg_equals_temp, second_arg_equals_temp), - (function_entry_outer, third_arg_equals_temp), - (outer_ret_val, function_entry_outer), - (ret_outer, outer_ret_val), - (exit_outer, ret_outer), - (image_name_equals_save_2, exit_outer), - (call_2_equals_ret_outer, image_name_equals_save_2), - (foo_equals_call_2, call_2_equals_ret_outer), - (ret_send_file, foo_equals_call_2), - (_exit, ret_send_file) - ]) + self.assertInCfg([ + (save_2_image_name, _if), + (save_4_image_name, ret_scrypt_first), + (ret_scrypt_third, call_4_equals_ret_second_inner), + (ret_request, entry), + (image_name_equals_call_1, ret_request), + (_if, image_name_equals_call_1), + (image_name_equals_foo, _if), + (save_2_image_name, image_name_equals_foo), + (ret_scrypt_first, save_2_image_name), + (temp_2_first_arg, ret_scrypt_first), + (save_4_image_name, temp_2_first_arg), + (temp_4_inner_arg, save_4_image_name), + (inner_arg_equals_temp_4, temp_4_inner_arg), + (function_entry_second_inner, inner_arg_equals_temp_4), + (inner_ret_val_equals_inner_arg_2nd, function_entry_second_inner), + (ret_second_inner, inner_ret_val_equals_inner_arg_2nd), + (function_exit_second_inner, ret_second_inner), + (image_name_equals_save_4, function_exit_second_inner), + (call_4_equals_ret_second_inner, image_name_equals_save_4), + (temp_2_second_arg, call_4_equals_ret_second_inner), + (ret_scrypt_third, temp_2_second_arg), + (temp_2_third_arg_equals_call_5, ret_scrypt_third), + (first_arg_equals_temp, temp_2_third_arg_equals_call_5), + (second_arg_equals_temp, first_arg_equals_temp), + (third_arg_equals_temp, second_arg_equals_temp), + (function_entry_outer, third_arg_equals_temp), + (outer_ret_val, function_entry_outer), + (ret_outer, outer_ret_val), + (exit_outer, ret_outer), + (image_name_equals_save_2, exit_outer), + (call_2_equals_ret_outer, image_name_equals_save_2), + (foo_equals_call_2, call_2_equals_ret_outer), + (ret_send_file, foo_equals_call_2), + (_exit, ret_send_file) + ]) @@ -1051,7 +1049,7 @@ def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): ret_send_file = 28 _exit = 29 - self.assertInCfg([(save_3_image_name, _if), # Makes sense + self.assertInCfg([(save_3_image_name, _if), (ret_request, entry), (image_name_equals_call_1, ret_request), (_if, image_name_equals_call_1), diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 3e4b7e73..3d875e37 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -167,7 +167,7 @@ def test_XSS_result(self): File: example/vulnerable_code/XSS.py > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS.py > Line 6: param = ¤call_1 File: example/vulnerable_code/XSS.py @@ -191,7 +191,7 @@ def test_command_injection_result(self): File: example/vulnerable_code/command_injection.py > User input at line 15, trigger word "form[": param = request.form['suggestion'] - Reassigned in: + Reassigned in: File: example/vulnerable_code/command_injection.py > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' File: example/vulnerable_code/command_injection.py @@ -208,10 +208,12 @@ def test_path_traversal_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal.py > User input at line 15, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') - Reassigned in: + ¤call_1 = ret_request.args.get('image_name') + Reassigned in: File: example/vulnerable_code/path_traversal.py > Line 15: image_name = ¤call_1 + File: example/vulnerable_code/path_traversal.py + > Line 6: save_2_image_name = image_name File: example/vulnerable_code/path_traversal.py > Line 10: save_3_image_name = image_name File: example/vulnerable_code/path_traversal.py @@ -224,14 +226,12 @@ def test_path_traversal_result(self): > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg File: example/vulnerable_code/path_traversal.py > Line 8: ret_outer = outer_ret_val + File: example/vulnerable_code/path_traversal.py + > Line 6: image_name = save_2_image_name File: example/vulnerable_code/path_traversal.py > Line 19: ¤call_2 = ret_outer File: example/vulnerable_code/path_traversal.py > Line 19: foo = ¤call_2 - File: example/vulnerable_code/path_traversal.py - > Line 6: save_2_image_name = image_name - File: example/vulnerable_code/path_traversal.py - > Line 6: image_name = save_2_image_name File: example/vulnerable_code/path_traversal.py > reaches line 20, trigger word "send_file(": ¤call_4 = ret_send_file(foo) @@ -239,6 +239,44 @@ def test_path_traversal_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_ensure_saved_scope(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/ensure_saved_scope.py + > User input at line 15, trigger word "request.args.get(": + ¤call_1 = ret_request.args.get('image_name') + Reassigned in: + File: example/vulnerable_code/ensure_saved_scope.py + > Line 15: image_name = ¤call_1 + File: example/vulnerable_code/ensure_saved_scope.py + > Line 6: save_2_image_name = image_name + File: example/vulnerable_code/ensure_saved_scope.py + > Line 10: save_3_image_name = image_name + File: example/vulnerable_code/ensure_saved_scope.py + > Line 10: image_name = save_3_image_name + File: example/vulnerable_code/ensure_saved_scope.py + > Line 19: temp_2_other_arg = image_name + File: example/vulnerable_code/ensure_saved_scope.py + > Line 6: other_arg = temp_2_other_arg + File: example/vulnerable_code/ensure_saved_scope.py + > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg + File: example/vulnerable_code/ensure_saved_scope.py + > Line 8: ret_outer = outer_ret_val + File: example/vulnerable_code/ensure_saved_scope.py + > Line 6: image_name = save_2_image_name + File: example/vulnerable_code/ensure_saved_scope.py + > Line 19: ¤call_2 = ret_outer + File: example/vulnerable_code/ensure_saved_scope.py + > Line 19: foo = ¤call_2 + File: example/vulnerable_code/ensure_saved_scope.py + > reaches line 20, trigger word "send_file(": + ¤call_4 = ret_send_file(image_name) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_path_traversal_sanitised_result(self): vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) @@ -247,7 +285,7 @@ def test_path_traversal_sanitised_result(self): File: example/vulnerable_code/path_traversal_sanitised.py > User input at line 8, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('image_name') - Reassigned in: + Reassigned in: File: example/vulnerable_code/path_traversal_sanitised.py > Line 8: image_name = ¤call_1 File: example/vulnerable_code/path_traversal_sanitised.py @@ -261,7 +299,30 @@ def test_path_traversal_sanitised_result(self): File: example/vulnerable_code/path_traversal_sanitised.py > reaches line 12, trigger word "send_file(": ¤call_3 = ret_send_file(¤call_4) - This vulnerability is potentially sanitised by: Label: ¤call_2 = ret_image_name.replace('..', '') + This vulnerability is sanitised by: Label: ¤call_2 = ret_image_name.replace('..', '') + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_path_traversal_sanitised_2_result(self): + vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') + self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: example/vulnerable_code/path_traversal_sanitised_2.py + > User input at line 8, trigger word "request.args.get(": + ¤call_1 = ret_request.args.get('image_name') + Reassigned in: + File: example/vulnerable_code/path_traversal_sanitised_2.py + > Line 8: image_name = ¤call_1 + File: example/vulnerable_code/path_traversal_sanitised_2.py + > Line 12: ¤call_3 = ret_os.path.join(¤call_4, image_name) + File: example/vulnerable_code/path_traversal_sanitised_2.py + > Line 12: ret_cat_picture = ¤call_2 + File: example/vulnerable_code/path_traversal_sanitised_2.py + > reaches line 12, trigger word "send_file(": + ¤call_2 = ret_send_file(¤call_3) + This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -274,7 +335,7 @@ def test_sql_result(self): File: example/vulnerable_code/sql/sqli.py > User input at line 26, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/sql/sqli.py > Line 26: param = ¤call_1 File: example/vulnerable_code/sql/sqli.py @@ -294,7 +355,7 @@ def test_XSS_form_result(self): File: example/vulnerable_code/XSS_form.py > User input at line 14, trigger word "form[": data = request.form['my_text'] - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_form.py > Line 15: ¤call_1 = ret_make_response(¤call_2) File: example/vulnerable_code/XSS_form.py @@ -316,7 +377,7 @@ def test_XSS_url_result(self): File: example/vulnerable_code/XSS_url.py > User input at line 4, trigger word "Framework function URL parameter": url - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_url.py > Line 6: param = url File: example/vulnerable_code/XSS_url.py @@ -344,7 +405,7 @@ def test_XSS_reassign_result(self): File: example/vulnerable_code/XSS_reassign.py > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_reassign.py > Line 6: param = ¤call_1 File: example/vulnerable_code/XSS_reassign.py @@ -370,7 +431,7 @@ def test_XSS_sanitised_result(self): File: example/vulnerable_code/XSS_sanitised.py > User input at line 7, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_sanitised.py > Line 7: param = ¤call_1 File: example/vulnerable_code/XSS_sanitised.py @@ -386,7 +447,7 @@ def test_XSS_sanitised_result(self): File: example/vulnerable_code/XSS_sanitised.py > reaches line 12, trigger word "replace(": ¤call_5 = ret_html.replace('{{ param }}', param) - This vulnerability is potentially sanitised by: Label: ¤call_2 = ret_Markup.escape(param) + This vulnerability is sanitised by: Label: ¤call_2 = ret_Markup.escape(param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -403,7 +464,7 @@ def test_XSS_variable_assign_result(self): File: example/vulnerable_code/XSS_variable_assign.py > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_variable_assign.py > Line 6: param = ¤call_1 File: example/vulnerable_code/XSS_variable_assign.py @@ -429,7 +490,7 @@ def test_XSS_variable_multiple_assign_result(self): File: example/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, trigger word "request.args.get(": ¤call_1 = ret_request.args.get('param', 'not set') - Reassigned in: + Reassigned in: File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 6: param = ¤call_1 File: example/vulnerable_code/XSS_variable_multiple_assign.py From cfbefef87854071ee03432389a8ae7a71aaed387 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 22 Mar 2018 19:07:27 -0700 Subject: [PATCH 204/541] Made node types for If and Try statements statements, moved some LabelVisitor stuff to node_types, comments --- pyt/base_cfg.py | 28 ++++++++---------- pyt/fixed_point.py | 2 +- pyt/interprocedural_cfg.py | 4 +-- pyt/node_types.py | 58 ++++++++++++++++++++++++++++++++------ pyt/vulnerabilities.py | 10 ++++--- 5 files changed, 70 insertions(+), 32 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 555bc5dc..4f1862b9 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -21,9 +21,11 @@ BBorBInode, BreakNode, ControlFlowNode, + IfNode, IgnoredNode, Node, - RestoreNode + RestoreNode, + TryNode ) from .right_hand_side_visitor import RHSVisitor from .vars_visitor import VarsVisitor @@ -55,7 +57,7 @@ def stmt_star_handler( for stmt in stmts: node = self.visit(stmt) - if isinstance(node, ControlFlowNode) and node.test.label != 'Try': + if isinstance(node, ControlFlowNode) and not isinstance(node.test, TryNode): self.last_control_flow_nodes.append(node.test) else: self.last_control_flow_nodes.append(None) @@ -110,6 +112,7 @@ def handle_or_else(self, orelse, test): """ if isinstance(orelse[0], ast.If): control_flow_node = self.visit(orelse[0]) + # Prefix the if label with 'el' control_flow_node.test.label = 'el' + control_flow_node.test.label test.connect(control_flow_node.test) @@ -123,11 +126,8 @@ def handle_or_else(self, orelse, test): return else_connect_statements.last_statements def visit_If(self, node): - label_visitor = LabelVisitor() - label_visitor.visit(node.test) - - test = self.append_node(Node( - 'if ' + label_visitor.result + ':', + test = self.append_node(IfNode( + node.test, node, line_number=node.lineno, path=self.filenames[-1] @@ -153,11 +153,7 @@ def visit_If(self, node): return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) def visit_Raise(self, node): - label = LabelVisitor() - label.visit(node) - return self.append_node(RaiseNode( - label.result, node, line_number=node.lineno, path=self.filenames[-1] @@ -175,8 +171,7 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): return body def visit_Try(self, node): - try_node = self.append_node(Node( - 'Try', + try_node = self.append_node(TryNode( node, line_number=node.lineno, path=self.filenames[-1] @@ -243,7 +238,8 @@ def assign_tuple_target(self, node, right_hand_side_variables): extract_left_hand_side(target), ast.Assign(target, value), right_hand_side_variables, - line_number=node.lineno, path=self.filenames[-1] + line_number=node.lineno, + path=self.filenames[-1] ))) connect_nodes(new_assignment_nodes) @@ -263,7 +259,8 @@ def assign_multi_target(self, node, right_hand_side_variables): left_hand_side, ast.Assign(target, node.value), right_hand_side_variables, - line_number=node.lineno, path=self.filenames[-1] + line_number=node.lineno, + path=self.filenames[-1] ))) connect_nodes(new_assignment_nodes) @@ -448,7 +445,6 @@ def add_blackbox_or_builtin_call(self, node, blackbox): Returns: call_node(BBorBInode): The call node. """ - # Increment function_call_index self.function_call_index += 1 saved_function_call_index = self.function_call_index self.undecided = False diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index 806c172a..b0574934 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -26,7 +26,7 @@ def fixpoint_runner(self): for node in self.analysis.dep(q[0]): # for (v in dep(v_i)) q.append(node) # q.append(v): constraint_table[q[0]] = y # q[0].old_constraint = q[0].new_constraint # x_i = y - q = q[1:] # q = q.tail() # The list minus the head + q = q[1:] # q = q.tail() # The list minus the head def analyse(cfg_list, *, analysis_type): diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index 5ba9c31e..af81e277 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -81,7 +81,7 @@ def init_cfg(self, node): raise Exception('Empty module. It seems that your file is empty,' + 'there is nothing to analyse.') - exit_node = self.append_node(EntryOrExitNode("Exit module")) + exit_node = self.append_node(EntryOrExitNode('Exit module')) if isinstance(module_statements, IgnoredNode): entry_node.connect(exit_node) @@ -104,7 +104,7 @@ def init_function_cfg(self, node, module_definitions): entry_node = self.append_node(EntryOrExitNode('Entry function')) module_statements = self.stmt_star_handler(node.body) - exit_node = self.append_node(EntryOrExitNode("Exit function")) + exit_node = self.append_node(EntryOrExitNode('Exit function')) if isinstance(module_statements, IgnoredNode): entry_node.connect(exit_node) diff --git a/pyt/node_types.py b/pyt/node_types.py index b9b796b8..dbf9ceeb 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -1,6 +1,8 @@ """This module contains all of the CFG nodes types.""" from collections import namedtuple +from .label_visitor import LabelVisitor + ControlFlowNode = namedtuple( 'ControlFlowNode', @@ -58,7 +60,6 @@ def __str__(self): """Print the label of the node.""" return ''.join((' Label: ', self.label)) - def __repr__(self): """Print a representation of the node.""" label = ' '.join(('Label: ', self.label)) @@ -78,19 +79,43 @@ def __repr__(self): return '\n' + '\n'.join((label, line_number, ingoing, outgoing)) -class RaiseNode(Node, ConnectToExitNode): - """CFG Node that represents a Raise statement.""" +class BreakNode(Node): + """CFG Node that represents a Break statement.""" - def __init__(self, label, ast_node, *, line_number, path): - """Create a Raise node.""" - super().__init__(label, ast_node, line_number=line_number, path=path) + def __init__(self, ast_node, *, line_number, path): + super().__init__( + self.__class__.__name__, + ast_node, + line_number=line_number, + path=path + ) -class BreakNode(Node): - """CFG Node that represents a Break node.""" +class IfNode(Node): + """CFG Node that represents an If statement.""" + + def __init__(self, test_node, ast_node, *, line_number, path): + label_visitor = LabelVisitor() + label_visitor.visit(test_node) + + super().__init__( + 'if ' + label_visitor.result + ':', + ast_node, + line_number=line_number, + path=path + ) + + +class TryNode(Node): + """CFG Node that represents a Try statement.""" def __init__(self, ast_node, *, line_number, path): - super().__init__(self.__class__.__name__, ast_node, line_number=line_number, path=path) + super().__init__( + 'try:', + ast_node, + line_number=line_number, + path=path + ) class EntryOrExitNode(Node): @@ -100,6 +125,21 @@ def __init__(self, label): super().__init__(label, None, line_number=None, path=None) +class RaiseNode(Node, ConnectToExitNode): + """CFG Node that represents a Raise statement.""" + + def __init__(self, ast_node, *, line_number, path): + label = LabelVisitor() + label.visit(ast_node) + + super().__init__( + label_visitor.result, + ast_node, + line_number=line_number, + path=path + ) + + class AssignmentNode(Node): """CFG Node that represents an assignment.""" diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 7b726dc3..50306f80 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -11,6 +11,7 @@ AssignmentCallNode, AssignmentNode, BBorBInode, + IfNode, RestoreNode, TaintedNode ) @@ -290,7 +291,7 @@ def get_vulnerability_chains( current_node() sink() def_use(dict): - chain(list(Node)): A path of nodes between source to sink. + chain(list(Node)): A path of nodes between source and sink. """ for use in def_use[current_node]: if use == sink: @@ -321,7 +322,7 @@ def how_vulnerable( e.g. we can only say potentially instead of definitely sanitised in the path_traversal_sanitised_2.py test. Args: - chain(list(Node)): A path of nodes between source to sink. + chain(list(Node)): A path of nodes between source and sink. blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. sanitiser_nodes(set): A set of nodes that are sanitisers for the sink. potential_sanitiser(Node): An if or elif node that can potentially cause sanitisation. @@ -432,8 +433,9 @@ def get_vulnerability( if sink.sanitisers: for sanitiser in sink.sanitisers: for cfg_node in triggers.sanitiser_dict[sanitiser]: - sanitiser_nodes.add(cfg_node) - if 'if' in cfg_node.label and cfg_node.label.endswith(':'): + if isinstance(cfg_node, AssignmentNode): + sanitiser_nodes.add(cfg_node) + elif isinstance(cfg_node, IfNode): potential_sanitiser = cfg_node def_use = build_def_use_chain(cfg.nodes) From 0dead7c7df1fe3c2321577036a389508da65f9d2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 22 Mar 2018 19:12:24 -0700 Subject: [PATCH 205/541] Delete intra_cfg, same as in master --- pyt/intraprocedural_cfg.py | 179 ------------------------------------- 1 file changed, 179 deletions(-) delete mode 100644 pyt/intraprocedural_cfg.py diff --git a/pyt/intraprocedural_cfg.py b/pyt/intraprocedural_cfg.py deleted file mode 100644 index 1fe175b7..00000000 --- a/pyt/intraprocedural_cfg.py +++ /dev/null @@ -1,179 +0,0 @@ -import ast - -from .ast_helper import Arguments, generate_ast -from .base_cfg import ( - CALL_IDENTIFIER, - CFG, - EntryOrExitNode, - IgnoredNode, - Node, - ReturnNode, - Visitor -) -from .label_visitor import LabelVisitor -from .right_hand_side_visitor import RHSVisitor - - -class IntraproceduralVisitor(Visitor): - - def __init__(self, node, filename): - """Create an empty CFG.""" - self.nodes = list() - self.undecided = False # Check if needed in intraprocedural - - self.function_names = list() - self.filenames = [filename] - - try: - # FunctionDef ast node - self.init_function_cfg(node) - except: # Error?! - # Module ast node - self.init_module_cfg(node) - - def init_module_cfg(self, node): - entry_node = self.append_node(EntryOrExitNode('Entry module')) - - module_statements = self.visit(node) - - if not module_statements: - raise Exception('Empty module. It seems that your file is empty,' + - ' there is nothing to analyse.') - - if not isinstance(module_statements, IgnoredNode): - first_node = module_statements.first_statement - - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) - - exit_node = self.append_node(EntryOrExitNode('Exit module')) - - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - else: - exit_node = self.append_node(EntryOrExitNode('Exit module')) - entry_node.connect(exit_node) - - def init_function_cfg(self, node): - - entry_node = self.append_node(EntryOrExitNode('Entry module')) - - module_statements = self.stmt_star_handler(node.body) - if isinstance(module_statements, IgnoredNode): - exit_node = self.append_node(EntryOrExitNode('Exit module')) - entry_node.connect(exit_node) - return - - first_node = module_statements.first_statement - if CALL_IDENTIFIER not in first_node.label: - entry_node.connect(first_node) - - exit_node = self.append_node(EntryOrExitNode('Exit module')) - - last_nodes = module_statements.last_statements - exit_node.connect_predecessors(last_nodes) - - def visit_ClassDef(self, node): - return self.append_node(Node('class ' + node.name, node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_FunctionDef(self, node): - arguments = Arguments(node.args) - return self.append_node(Node('def ' + node.name + '(' + - ','.join(arguments) + '):', - node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Return(self, node): - label = LabelVisitor() - label.visit(node) - - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyReturn' - - LHS = 'ret_' + 'MAYBE_FUNCTION_NAME' - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, - node, - rhs_visitor.result, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Yield(self, node): - label = LabelVisitor() - label.visit(node) - - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyYield' - - LHS = 'yield_' + 'MAYBE_FUNCTION_NAME' - return self.append_node(ReturnNode(LHS + ' = ' + label.result, - LHS, - node, - rhs_visitor.result, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_Call(self, node): - return self.add_builtin(node) - - def visit_Import(self, node): - names = [n.name for n in node.names] - return self.append_node(Node('Import ' + ', '.join(names), node, - line_number=node.lineno, - path=self.filenames[-1])) - - def visit_ImportFrom(self, node): - names = [a.name for a in node.names] - try: - from_import = 'from ' + node.module + ' ' - except TypeError: - from_import = '' - return self.append_node(Node(from_import + 'import ' + - ', '.join(names), - node, - line_number=node.lineno, - path=self.filenames[-1])) - - -class FunctionDefVisitor(ast.NodeVisitor): - def __init__(self): - self.result = list() - - def visit_FunctionDef(self, node): - self.result.append(node) - #def visit_ClassDef(self, node): - # self.result.append(node) - - -def intraprocedural(project_modules, cfg_list): - functions = list() - dup = list() - for module in project_modules: - t = generate_ast(module[1]) - iv = IntraproceduralVisitor(t, filename=module[1]) - cfg_list.append(CFG(iv.nodes)) - dup.append(t) - fdv = FunctionDefVisitor() - fdv.visit(t) - dup.extend(fdv.result) - functions.extend([(f, module[1]) for f in fdv.result]) - - for f in functions: - iv = IntraproceduralVisitor(f[0], filename=f[1]) - cfg_list.append(CFG(iv.nodes)) - - s = set() - for d in dup: - if d in s: - raise Exception('Duplicates in the functions definitions list.') - else: - s.add(d) From 1d11a0521e3078d86bddeb2b0722a38fc6985855 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 22 Mar 2018 19:49:10 -0700 Subject: [PATCH 206/541] [DRY] Remove all 'line_number=node.lineno' for node def sites --- pyt/base_cfg.py | 4 ---- pyt/interprocedural_cfg.py | 6 ++---- pyt/node_types.py | 22 +++++++++++----------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index 4f1862b9..e0441840 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -129,7 +129,6 @@ def visit_If(self, node): test = self.append_node(IfNode( node.test, node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -155,7 +154,6 @@ def visit_If(self, node): def visit_Raise(self, node): return self.append_node(RaiseNode( node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -173,7 +171,6 @@ def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): def visit_Try(self, node): try_node = self.append_node(TryNode( node, - line_number=node.lineno, path=self.filenames[-1] )) body = self.stmt_star_handler(node.body) @@ -548,7 +545,6 @@ def visit_With(self, node): def visit_Break(self, node): return self.append_node(BreakNode( node, - line_number=node.lineno, path=self.filenames[-1] )) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index af81e277..af7830a3 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -198,7 +198,6 @@ def visit_Return(self, node): LHS, node, [return_value_of_call.left_hand_side], - line_number=node.lineno, path=self.filenames[-1] ) return_value_of_call.connect(return_node) @@ -210,7 +209,6 @@ def visit_Return(self, node): LHS, node, rhs_visitor.result, - line_number=node.lineno, path=self.filenames[-1] )) @@ -231,7 +229,6 @@ def visit_Yield(self, node): LHS, node, rhs_visitor.result, - line_number=node.lineno, path=self.filenames[-1]) ) @@ -266,7 +263,8 @@ def save_local_scope(self, line_number, saved_function_call_index): save_name + ' = ' + assignment.left_hand_side, save_name, [assignment.left_hand_side], - line_number=line_number, path=self.filenames[-1] + line_number=line_number, + path=self.filenames[-1] ) if not first_node: first_node = saved_scope_node diff --git a/pyt/node_types.py b/pyt/node_types.py index dbf9ceeb..bdbe59af 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -27,7 +27,7 @@ class Node(): """A Control Flow Graph node that contains a list of ingoing and outgoing nodes and a list of its variables.""" - def __init__(self, label, ast_node, *, line_number, path): + def __init__(self, label, ast_node, *, line_number=None, path): """Create a Node that can be used in a CFG. Args: @@ -36,7 +36,12 @@ def __init__(self, label, ast_node, *, line_number, path): """ self.label = label self.ast_node = ast_node - self.line_number = line_number + if line_number: + self.line_number = line_number + elif ast_node: + self.line_number = ast_node.lineno + else: + self.line_number = None self.path = path self.ingoing = list() self.outgoing = list() @@ -82,11 +87,10 @@ def __repr__(self): class BreakNode(Node): """CFG Node that represents a Break statement.""" - def __init__(self, ast_node, *, line_number, path): + def __init__(self, ast_node, *, path): super().__init__( self.__class__.__name__, ast_node, - line_number=line_number, path=path ) @@ -94,14 +98,13 @@ def __init__(self, ast_node, *, line_number, path): class IfNode(Node): """CFG Node that represents an If statement.""" - def __init__(self, test_node, ast_node, *, line_number, path): + def __init__(self, test_node, ast_node, *, path): label_visitor = LabelVisitor() label_visitor.visit(test_node) super().__init__( 'if ' + label_visitor.result + ':', ast_node, - line_number=line_number, path=path ) @@ -109,11 +112,10 @@ def __init__(self, test_node, ast_node, *, line_number, path): class TryNode(Node): """CFG Node that represents a Try statement.""" - def __init__(self, ast_node, *, line_number, path): + def __init__(self, ast_node, *, path): super().__init__( 'try:', ast_node, - line_number=line_number, path=path ) @@ -253,7 +255,6 @@ def __init__( ast_node, right_hand_side_variables, *, - line_number, path ): """Create a return from a call node. @@ -263,7 +264,6 @@ def __init__( left_hand_side(str): The variable on the left hand side of the assignment. Used for analysis. ast_node right_hand_side_variables(list[str]): A list of variables on the right hand side. - line_number(Optional[int]): The line of the expression the Node represents. path(string): Current filename. """ super().__init__( @@ -271,6 +271,6 @@ def __init__( left_hand_side, ast_node, right_hand_side_variables, - line_number=line_number, + line_number=ast_node.lineno, path=path ) From 8ef4acba4d88acdb718d97ec6b9fc46c7734dcc8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 22 Mar 2018 22:38:01 -0700 Subject: [PATCH 207/541] make test is all I need --- .activate.sh | 1 - .coveragerc | 2 ++ .deactivate.sh | 1 - Makefile | 18 ------------------ tox.ini | 28 ++++------------------------ 5 files changed, 6 insertions(+), 44 deletions(-) delete mode 100755 .activate.sh delete mode 100755 .deactivate.sh diff --git a/.activate.sh b/.activate.sh deleted file mode 100755 index 72c43ac2..00000000 --- a/.activate.sh +++ /dev/null @@ -1 +0,0 @@ -venv/bin/activate diff --git a/.coveragerc b/.coveragerc index 16a0973e..816ee31e 100644 --- a/.coveragerc +++ b/.coveragerc @@ -9,7 +9,9 @@ exclude_lines = def __str__ [run] +source = ./pyt omit = + pyt/__main__.py pyt/definition_chains.py pyt/draw.py pyt/github_search.py diff --git a/.deactivate.sh b/.deactivate.sh deleted file mode 100755 index d1898d74..00000000 --- a/.deactivate.sh +++ /dev/null @@ -1 +0,0 @@ -deactivate diff --git a/Makefile b/Makefile index 46467c20..aa039509 100644 --- a/Makefile +++ b/Makefile @@ -1,21 +1,3 @@ -.PHONY: minimal -minimal: setup - -.PHONY: setup -setup: - tox -e venv - -.PHONY: install-hooks -install-hooks: - tox -e pre-commit -- install -f --install-hooks - .PHONY: test test: tox - -.PHONY: clean -clean: - find -name '*.pyc' -delete - find -name '__pycache__' -delete - rm -rf .tox - rm -rf venv diff --git a/tox.ini b/tox.ini index b591cb00..29f0c7e1 100644 --- a/tox.ini +++ b/tox.ini @@ -1,28 +1,8 @@ -[tox] -project = pyt -# These should match the travis env list -envlist = py35,py36 -tox_pip_extensions_ext_venv_update = true - [testenv] +whitelist_externals = coverage deps = -rrequirements-dev.txt commands = coverage erase - coverage run -m pytest tests - coverage report --show-missing --fail-under 99 - pre-commit run --all-files - -[testenv:venv] -basepython = - 3.5: python3.5 - 3.6: python3.6 -envdir = venv -commands = - pre-commit install -f --install-hooks - -[testenv:pre-commit] -deps = pre-commit>=0.16.3 -commands = pre-commit {posargs} - -[pep8] -ignore = E501 + coverage run tests + coverage report --show-missing --fail-under 87 + pre-commit run From 6bb2a68da24a2504f6ea147ff6efe5273017dbb9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Mar 2018 16:55:57 -0700 Subject: [PATCH 208/541] [DRY] Remove more 'line_number=node.lineno' from node def sites --- pyt/base_cfg.py | 9 --------- pyt/node_types.py | 2 +- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/pyt/base_cfg.py b/pyt/base_cfg.py index e0441840..76d65d62 100644 --- a/pyt/base_cfg.py +++ b/pyt/base_cfg.py @@ -287,7 +287,6 @@ def visit_Assign(self, node): label.result, node, rhs_visitor.result, - line_number=node.lineno, path=self.filenames[-1] )) @@ -306,7 +305,6 @@ def visit_Assign(self, node): extract_left_hand_side(node.targets[0]), node, rhs_visitor.result, - line_number=node.lineno, path=self.filenames[-1] )) @@ -353,7 +351,6 @@ def visit_AugAssign(self, node): extract_left_hand_side(node.target), node, rhs_visitor.result, - line_number=node.lineno, path=self.filenames[-1] )) @@ -398,7 +395,6 @@ def visit_For(self, node): for_node = self.append_node(Node( "for " + target_label.result + " in " + iterator_label.result + ':', node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -415,7 +411,6 @@ def visit_While(self, node): test = self.append_node(Node( 'while ' + label_visitor.result + ':', node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -531,7 +526,6 @@ def visit_With(self, node): with_node = self.append_node(Node( label_visitor.result, node, - line_number=node.lineno, path=self.filenames[-1] )) connect_statements = self.stmt_star_handler(node.body) @@ -555,7 +549,6 @@ def visit_Delete(self, node): return self.append_node(Node( 'del ' + labelVisitor.result, node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -566,7 +559,6 @@ def visit_Assert(self, node): return self.append_node(Node( label_visitor.result, node, - line_number=node.lineno, path=self.filenames[-1] )) @@ -627,7 +619,6 @@ def visit_miscelleaneous_node( return self.append_node(Node( label, node, - line_number=node.lineno, path=self.filenames[-1] )) diff --git a/pyt/node_types.py b/pyt/node_types.py index bdbe59af..45d15159 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -145,7 +145,7 @@ def __init__(self, ast_node, *, line_number, path): class AssignmentNode(Node): """CFG Node that represents an assignment.""" - def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number=None, path): """Create an Assignment node. Args: From 3df4c288d82b308bf4d9cd62a8ff3c3e6ba34e26 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Mar 2018 17:20:22 -0700 Subject: [PATCH 209/541] Added a comment to ConnectToExitNode --- pyt/interprocedural_cfg.py | 72 ++++++++++++++++++++++++-------------- pyt/node_types.py | 1 + 2 files changed, 46 insertions(+), 27 deletions(-) diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index af7830a3..c9d8c21a 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -232,7 +232,39 @@ def visit_Yield(self, node): path=self.filenames[-1]) ) - def save_local_scope(self, line_number, saved_function_call_index): + def connect_if_allowed( + self, + previous_node, + node_to_connect_to + ): + # e.g. + # while x != 10: + # if x > 0: + # print(x) + # break + # else: + # print('hest') + # print('next') # self.nodes[-1] is print('hest') + # + # So we connect to `while x!= 10` instead + if self.last_control_flow_nodes[-1]: + self.last_control_flow_nodes[-1].connect(node_to_connect_to) + self.last_control_flow_nodes[-1] = None + return + + # Except in this case: + # + # if not image_name: + # return 404 + # print('foo') # We do not want to connect this line with `return 404` + if previous_node is not self.prev_nodes_to_avoid[-1] and not isinstance(previous_node, ReturnNode): + previous_node.connect(node_to_connect_to) + + def save_local_scope( + self, + line_number, + saved_function_call_index + ): """Save the local scope before entering a function call by saving all the LHS's of assignments so far. Args: @@ -277,30 +309,6 @@ def save_local_scope(self, line_number, saved_function_call_index): return (saved_variables, first_node) - def connect_if_allowed(self, previous_node, node_to_connect_to): - # e.g. - # while x != 10: - # if x > 0: - # print(x) - # break - # else: - # print('hest') - # print('next') # self.nodes[-1] is print('hest') - # - # So we connect to `while x!= 10` instead - if self.last_control_flow_nodes[-1]: - self.last_control_flow_nodes[-1].connect(node_to_connect_to) - self.last_control_flow_nodes[-1] = None - return - - # Except in this case: - # - # if not image_name: - # return 404 - # print('foo') # We do not want to connect this line with `return 404` - if previous_node is not self.prev_nodes_to_avoid[-1] and not isinstance(previous_node, ReturnNode): - previous_node.connect(node_to_connect_to) - def save_def_args_in_temp( self, call_args, @@ -418,7 +426,11 @@ def create_local_scope_from_def_args( self.nodes[-1].connect(local_scope_node) self.nodes.append(local_scope_node) - def visit_and_get_function_nodes(self, definition, first_node): + def visit_and_get_function_nodes( + self, + definition, + first_node + ): """Visits the nodes of a user defined function. Args: @@ -497,7 +509,13 @@ def restore_saved_local_scope( return restore_nodes - def return_handler(self, call_node, function_nodes, saved_function_call_index, first_node): + def return_handler( + self, + call_node, + function_nodes, + saved_function_call_index, + first_node + ): """Handle the return from a function during a function call. Args: diff --git a/pyt/node_types.py b/pyt/node_types.py index 45d15159..edd778e6 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -20,6 +20,7 @@ class IgnoredNode(): class ConnectToExitNode(): + """A common type between raise's and return's, used in return_handler""" pass From 3049f9c3302382524ede946d056538181b375920 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Mar 2018 20:24:54 -0700 Subject: [PATCH 210/541] Ran some pre-commit hooks on the pyt directory --- .pre-commit-config.yaml | 6 ------ pyt/__main__.py | 5 ++++- pyt/draw.py | 34 ++++++++++++++++++++++++---------- pyt/label_visitor.py | 30 +++++++++++++++--------------- pyt/module_definitions.py | 6 +++--- pyt/repo_runner.py | 4 +++- 6 files changed, 49 insertions(+), 36 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 89a0ebf3..cbfc92b1 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,9 +12,3 @@ exclude: tests/util - id: flake8 args: ['--ignore=E501'] - exclude: ^test_data/ -- repo: https://github.com/asottile/reorder_python_imports - sha: v0.3.5 - hooks: - - id: reorder-python-imports - language_version: python3.6 \ No newline at end of file diff --git a/pyt/__main__.py b/pyt/__main__.py index 95a48c17..d8b8e858 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -8,8 +8,11 @@ from .argument_helpers import valid_date from .ast_helper import generate_ast +from .constraint_table import ( + initialize_constraint_table, + print_table +) from .draw import draw_cfgs, draw_lattices -from .constraint_table import initialize_constraint_table, print_table from .fixed_point import analyse from .framework_adaptor import FrameworkAdaptor from .framework_helper import ( diff --git a/pyt/draw.py b/pyt/draw.py index bebdd6d3..2852691b 100644 --- a/pyt/draw.py +++ b/pyt/draw.py @@ -1,9 +1,10 @@ """Draws CFG.""" import argparse -from graphviz import Digraph from itertools import permutations from subprocess import call +from graphviz import Digraph + from .node_types import AssignmentNode @@ -16,7 +17,7 @@ 'bgcolor': 'transparent', 'rankdir': 'TB', 'splines': 'ortho', - 'margin' : '0.01', + 'margin': '0.01', }, 'nodes': { 'fontname': 'Gotham', @@ -43,7 +44,7 @@ 'bgcolor': 'transparent', 'rankdir': 'TB', 'splines': 'line', - 'margin' : '0.01', + 'margin': '0.01', 'ranksep': '1', }, 'nodes': { @@ -64,6 +65,7 @@ } } + def apply_styles(graph, styles): """Apply styles to graph.""" graph.graph_attr.update( @@ -77,7 +79,8 @@ def apply_styles(graph, styles): ) return graph -def draw_cfg(cfg, output_filename = 'output'): + +def draw_cfg(cfg, output_filename='output'): """Draw CFG and output as pdf.""" graph = Digraph(format='pdf') @@ -92,10 +95,11 @@ def draw_cfg(cfg, output_filename = 'output'): graph.node(stripped_label, stripped_label) for ingoing_node in node.ingoing: - graph.edge(ingoing_node.label.replace(IGNORED_LABEL_NAME_CHARACHTERS, ''), stripped_label) + graph.edge(ingoing_node.label.replace( + IGNORED_LABEL_NAME_CHARACHTERS, ''), stripped_label) graph = apply_styles(graph, cfg_styles) - graph.render(filename = output_filename) + graph.render(filename=output_filename) class Node(): @@ -123,11 +127,13 @@ def draw_node(l, graph, node): l.append((node_label, child_label)) draw_node(l, graph, child) + def make_lattice(s, length): p = Node(s, None) p.children = get_children(p, s, length) return p + def get_children(p, s, length): children = set() if length < 0: @@ -145,6 +151,7 @@ def get_children(p, s, length): children.add(n) return children + def add_anchor(filename): filename += '.dot' out = list() @@ -167,25 +174,28 @@ def add_anchor(filename): for line in out: fd.write(line) + def run_dot(filename): filename += '.dot' call(['dot', '-Tpdf', filename, '-o', filename.replace('.dot', '.pdf')]) + def draw_lattice(cfg, output_filename='output'): """Draw CFG and output as pdf.""" graph = Digraph(format='pdf') ll = [s.label for s in cfg.nodes if isinstance(s, AssignmentNode)] - root = make_lattice(ll,len(ll)-1) + root = make_lattice(ll, len(ll)-1) l = list() draw_node(l, graph, root) graph = apply_styles(graph, lattice_styles) - graph.render(filename = output_filename+'.dot') + graph.render(filename=output_filename+'.dot') add_anchor(output_filename) run_dot(output_filename) + def draw_lattice_from_labels(labels, output_filename): graph = Digraph(format='pdf') @@ -194,21 +204,25 @@ def draw_lattice_from_labels(labels, output_filename): draw_node(l, graph, root) graph = apply_styles(graph, lattice_styles) - graph.render(filename = output_filename+'.dot') + graph.render(filename=output_filename+'.dot') add_anchor(output_filename) run_dot(output_filename) + def draw_lattices(cfg_list, output_prefix='output'): for i, cfg in enumerate(cfg_list): draw_lattice(cfg, output_prefix + '_' + str(i)) + def draw_cfgs(cfg_list, output_prefix='output'): for i, cfg in enumerate(cfg_list): draw_cfg(cfg, output_prefix + '_' + str(i)) + parser = argparse.ArgumentParser() -parser.add_argument('-l', '--labels', nargs='+', help='Set of labels in lattice.') +parser.add_argument('-l', '--labels', nargs='+', + help='Set of labels in lattice.') parser.add_argument('-n', '--name', help='Specify filename.', type=str) if __name__ == '__main__': args = parser.parse_args() diff --git a/pyt/label_visitor.py b/pyt/label_visitor.py index f5c25550..ab2301b9 100644 --- a/pyt/label_visitor.py +++ b/pyt/label_visitor.py @@ -50,7 +50,7 @@ def visit_Return(self, node): def visit_Assign(self, node): for target in node.targets: self.visit(target) - self.result = ' '.join((self.result,'=')) + self.result = ' '.join((self.result, '=')) self.insert_space() self.visit(node.value) @@ -64,11 +64,11 @@ def visit_AugAssign(self, node): self.insert_space() self.visit(node.value) - def visit_Compare(self,node): + def visit_Compare(self, node): self.visit(node.left) self.insert_space() - for op,com in zip(node.ops,node.comparators): + for op, com in zip(node.ops, node.comparators): self.visit(op) self.insert_space() self.visit(com) @@ -121,7 +121,6 @@ def visit_SetComp(self, node): self.comprehensions(node) self.result += '}' - def visit_DictComp(self, node): self.result += '{' @@ -136,6 +135,7 @@ def visit_DictComp(self, node): self.visit(expression.iter) self.result += '}' + def visit_Attribute(self, node): self.visit(node.value) self.result += '.' @@ -229,7 +229,6 @@ def visit_BitAnd(self, node): def visit_FloorDiv(self, node): self.result += '//' - # cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn def visit_Eq(self, node): self.result += '==' @@ -240,26 +239,26 @@ def visit_Gt(self, node): def visit_Lt(self, node): self.result += '<' - def visit_NotEq(self,node): + def visit_NotEq(self, node): self.result += '!=' - def visit_GtE(self,node): + def visit_GtE(self, node): self.result += '>=' - def visit_LtE(self,node): + def visit_LtE(self, node): self.result += '<=' - def visit_Is(self,node): + def visit_Is(self, node): self.result += 'is' - def visit_IsNot(self,node): + def visit_IsNot(self, node): self.result += 'is not' - def visit_In(self,node): + def visit_In(self, node): self.result += 'in' - def visit_NotIn(self,node): - self.result +='not in' + def visit_NotIn(self, node): + self.result += 'not in' # unaryop = Invert | Not | UAdd | USub def visit_Invert(self, node): @@ -277,14 +276,15 @@ def visit_USub(self, node): # boolop = And | Or def visit_And(self, node): self.result += ' and ' + def visit_Or(self, node): self.result += ' or ' def visit_Num(self, node): self.result += str(node.n) - def visit_Name(self,node): + def visit_Name(self, node): self.result += node.id - def visit_Str(self,node): + def visit_Str(self, node): self.result += "'" + node.s + "'" diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index 0f7b72a2..4bde1ee8 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -127,12 +127,12 @@ def __str__(self): else: if isinstance(module, ast.alias): return ( - 'import_names is '+ str(self.import_names) + + 'import_names is ' + str(self.import_names) + ' No Definitions, module_name: ' + str(module.name) + - ' and filename: ' + str(self.filename) + + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n') return ( - 'import_names is '+ str(self.import_names) + + 'import_names is ' + str(self.import_names) + ' No Definitions, module_name: ' + str(module) + ' and filename: ' + str(self.filename) + ' and is_init: ' + str(self.is_init) + '\n') diff --git a/pyt/repo_runner.py b/pyt/repo_runner.py index 78ad414b..64de0d52 100644 --- a/pyt/repo_runner.py +++ b/pyt/repo_runner.py @@ -1,8 +1,9 @@ """This modules runs PyT on a CSV file of git repos.""" -import git import os import shutil +import git + DEFAULT_CSV_PATH = 'flask_open_source_apps.csv' @@ -14,6 +15,7 @@ class NoEntryPathError(Exception): class Repo: """Holder for a repo with git URL and a path to where the analysis should start""" + def __init__(self, URL, path=None): self.URL = URL.strip() if path: From 8fb7c859db44f406e3dcfb54a0b4631bc541684c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 23 Mar 2018 20:30:34 -0700 Subject: [PATCH 211/541] [flake8] on __main__ --- pyt/__main__.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index d8b8e858..0fe1d97f 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -129,8 +129,8 @@ def parse_args(args): help='Output the verbose CFGs to file.', action='store_true') save_parser.add_argument('-an', '--analysis', - help='Output analysis results to file' - + ' in form of a constraint table.', + help='Output analysis results to file' + + ' in form of a constraint table.', action='store_true') save_parser.add_argument('-la', '--lattice', help='Output lattice(s) to file.', action='store_true') @@ -162,7 +162,7 @@ def analyse_repo(github_repo, analysis_type): directory = os.path.dirname(github_repo.path) project_modules = get_modules(directory) local_modules = get_directory_modules(directory) - tree = generate_ast(github_repo.path, python_2=args.python_2) + tree = generate_ast(github_repo.path) interprocedural_cfg = interprocedural( tree, project_modules, From 8ee2e8ae6ed328a44d3be918de1e7d25f860bd5f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 26 Mar 2018 10:42:58 -0700 Subject: [PATCH 212/541] Add period at the end of docstring comment --- pyt/node_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/node_types.py b/pyt/node_types.py index edd778e6..400c7e55 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -20,7 +20,7 @@ class IgnoredNode(): class ConnectToExitNode(): - """A common type between raise's and return's, used in return_handler""" + """A common type between raise's and return's, used in return_handler.""" pass From d70133dc5a653260e2a926013b1d309839b65590 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 26 Mar 2018 18:56:04 -0700 Subject: [PATCH 213/541] [refactor] namedtuples changed field lists to tuples --- pyt/argument_helpers.py | 4 ++-- pyt/base_cfg_helper.py | 4 ++-- pyt/interprocedural_cfg_helper.py | 8 +++++++- pyt/node_types.py | 6 +++--- pyt/trigger_definitions_parser.py | 4 ++-- pyt/vulnerabilities.py | 8 ++++---- tests/analysis_base_test_case.py | 8 +++++++- tests/reaching_definitions_taint_test.py | 2 -- 8 files changed, 27 insertions(+), 17 deletions(-) diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index 05b4542c..a2ecee35 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -36,8 +36,8 @@ class UImode(Enum): VulnerabilityFiles = namedtuple( 'VulnerabilityFiles', - [ + ( 'blackbox_mapping', 'triggers' - ] + ) ) diff --git a/pyt/base_cfg_helper.py b/pyt/base_cfg_helper.py index e4a1784d..beac36e3 100644 --- a/pyt/base_cfg_helper.py +++ b/pyt/base_cfg_helper.py @@ -13,11 +13,11 @@ CALL_IDENTIFIER = '¤' ConnectStatements = namedtuple( 'ConnectStatements', - [ + ( 'first_statement', 'last_statements', 'break_statements' - ] + ) ) diff --git a/pyt/interprocedural_cfg_helper.py b/pyt/interprocedural_cfg_helper.py index d8ee6c7f..2a6b0ab2 100644 --- a/pyt/interprocedural_cfg_helper.py +++ b/pyt/interprocedural_cfg_helper.py @@ -4,7 +4,13 @@ ConnectToExitNode ) -SavedVariable = namedtuple('SavedVariable', 'LHS RHS') +SavedVariable = namedtuple( + 'SavedVariable', + ( + 'LHS', + 'RHS' + ) +) BUILTINS = ( 'get', 'Flask', diff --git a/pyt/node_types.py b/pyt/node_types.py index 400c7e55..effa63f2 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -6,11 +6,11 @@ ControlFlowNode = namedtuple( 'ControlFlowNode', - [ + ( 'test', 'last_nodes', 'break_statements' - ] + ) ) @@ -20,7 +20,7 @@ class IgnoredNode(): class ConnectToExitNode(): - """A common type between raise's and return's, used in return_handler.""" + """A common type between raise's and return's, used in return_handler""" pass diff --git a/pyt/trigger_definitions_parser.py b/pyt/trigger_definitions_parser.py index 248be29a..7515da4a 100644 --- a/pyt/trigger_definitions_parser.py +++ b/pyt/trigger_definitions_parser.py @@ -8,10 +8,10 @@ Definitions = namedtuple( 'Definitions', - [ + ( 'sources', 'sinks' - ] + ) ) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 50306f80..2ad8a2ce 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -27,18 +27,18 @@ Sanitiser = namedtuple( 'Sanitiser', - [ + ( 'trigger_word', 'cfg_node' - ] + ) ) Triggers = namedtuple( 'Triggers', - [ + ( 'sources', 'sinks', 'sanitiser_dict' - ] + ) ) diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 6f07a9f2..cdd33182 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -8,7 +8,13 @@ class AnalysisBaseTestCase(BaseTestCase): - connection = namedtuple('connection', 'constraintset element') + connection = namedtuple( + 'connection', + ( + 'constraintset', + 'element' + ) + ) def setUp(self): self.cfg = None diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index 39158e20..cb5d3d7e 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -1,5 +1,3 @@ -from collections import namedtuple, OrderedDict - from .analysis_base_test_case import AnalysisBaseTestCase from pyt.constraint_table import constraint_table from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis From 4447c75ec2462f5e27da872c7a12cb8452d7bbeb Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 26 Mar 2018 18:59:22 -0700 Subject: [PATCH 214/541] re-Add period at the end of docstring comment --- pyt/node_types.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/node_types.py b/pyt/node_types.py index effa63f2..cc2e0384 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -20,7 +20,7 @@ class IgnoredNode(): class ConnectToExitNode(): - """A common type between raise's and return's, used in return_handler""" + """A common type between raise's and return's, used in return_handler.""" pass From 9100a6e71af4b55c6a7c861be11db79ed8a5a2a9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 26 Mar 2018 20:22:31 -0700 Subject: [PATCH 215/541] Specify 3.6 in tox, refactor __str__ of Reassigned --- pyt/vulnerability_helper.py | 6 +++--- tox.ini | 3 +++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerability_helper.py index 0e26c03e..4fd7c4ea 100644 --- a/pyt/vulnerability_helper.py +++ b/pyt/vulnerability_helper.py @@ -41,9 +41,9 @@ def __str__(self): if self.reassignment_nodes: reassignment += '\nReassigned in:\n\t' reassignment += '\n\t'.join([ - 'File: ' + node.path + '\n\t' + ' > Line ' + - str(node.line_number) + ': ' + - node.label for node in self.reassignment_nodes + 'File: ' + node.path + '\n' + + '\t > Line ' + str(node.line_number) + ': ' + node.label + for node in self.reassignment_nodes ]) return reassignment diff --git a/tox.ini b/tox.ini index 29f0c7e1..4eeb372c 100644 --- a/tox.ini +++ b/tox.ini @@ -1,3 +1,6 @@ +[tox] +envlist = py36 + [testenv] whitelist_externals = coverage deps = -rrequirements-dev.txt From 3a10368e329a430762296c0edb234bcb1482dcfa Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 18:17:12 -0700 Subject: [PATCH 216/541] Removed seemingly unused annotate_cfg code from analysis_base --- pyt/analysis_base.py | 14 +------------- pyt/liveness.py | 2 +- pyt/reaching_definitions_base.py | 2 +- 3 files changed, 3 insertions(+), 15 deletions(-) diff --git a/pyt/analysis_base.py b/pyt/analysis_base.py index 488d3b8e..fb1f8f8b 100644 --- a/pyt/analysis_base.py +++ b/pyt/analysis_base.py @@ -7,22 +7,10 @@ class AnalysisBase(metaclass=ABCMeta): annotated_cfg_nodes = dict() - def __init__(self, cfg, visitor): - """Annotate visitor if not None and save visitor.""" - if visitor: - self.annotate_cfg(cfg, visitor) - self.visitor = visitor + def __init__(self, cfg): self.cfg = cfg self.build_lattice(cfg) - def annotate_cfg(self, cfg, visitor): - """Add the visitor to the cfg nodes.""" - for node in cfg.nodes: - if node.ast_node: - _visitor = visitor() - _visitor.visit(node.ast_node) - self.annotated_cfg_nodes[node] = _visitor.result - @staticmethod @abstractmethod def get_lattice_elements(cfg_nodes): diff --git a/pyt/liveness.py b/pyt/liveness.py index 8d3fe4f3..0428c644 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -19,7 +19,7 @@ class LivenessAnalysis(AnalysisBase): """Reaching definitions analysis rules implemented.""" def __init__(self, cfg): - super().__init__(cfg, None) + super().__init__(cfg) def join(self, cfg_node): """Joins all constraints of the ingoing nodes and returns them. diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 9031c12d..5fecaa6a 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -8,7 +8,7 @@ class ReachingDefinitionsAnalysisBase(AnalysisBase): """Reaching definitions analysis rules implemented.""" def __init__(self, cfg): - super().__init__(cfg, None) + super().__init__(cfg) def join(self, cfg_node): """Joins all constraints of the ingoing nodes and returns them. From b2a55761bd18979918b4dde98bb849f35696f6e0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 18:37:36 -0700 Subject: [PATCH 217/541] [maintenance] Deleted some deadcode, Added pragma: no cover and made some coveragerc changes, newlines --- .coveragerc | 11 +++++++---- pyt/ast_helper.py | 6 +++--- pyt/interprocedural_cfg.py | 10 ++++++++-- pyt/module_definitions.py | 20 ++++++++------------ pyt/project_handler.py | 10 ++++++---- pyt/vulnerability_helper.py | 2 +- 6 files changed, 33 insertions(+), 26 deletions(-) diff --git a/.coveragerc b/.coveragerc index 816ee31e..4b99120a 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,12 +1,15 @@ [report] exclude_lines = - if __name__ == .__main__.: - raise NotImplementedError - pass def print_lattice + def print_report def print_table + def valid_date def __repr__ def __str__ + if __name__ == .__main__.: + pass + pragma: no cover + raise NotImplementedError [run] source = ./pyt @@ -15,6 +18,6 @@ omit = pyt/definition_chains.py pyt/draw.py pyt/github_search.py - pyt/intraprocedural_cfg.py + pyt/liveness.py pyt/repo_runner.py pyt/save.py diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 9d1a81cd..1dc11c65 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -10,7 +10,7 @@ python_2_mode = False -def convert_to_3(path): +def convert_to_3(path): # pragma: no cover """Convert python 2 file to python 3.""" try: print('##### Trying to convert file to Python 3. #####') @@ -30,13 +30,13 @@ def generate_ast(path, python_2=False): """ # If set, it stays set. global python_2_mode - if python_2: + if python_2: # pragma: no cover python_2_mode = True if os.path.isfile(path): with open(path, 'r') as f: try: return ast.parse(f.read()) - except SyntaxError: + except SyntaxError: # pragma: no cover global recursive if not recursive: if not python_2_mode: diff --git a/pyt/interprocedural_cfg.py b/pyt/interprocedural_cfg.py index c9d8c21a..cd0a6b82 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/interprocedural_cfg.py @@ -48,8 +48,14 @@ class InterproceduralVisitor(Visitor): - def __init__(self, node, project_modules, local_modules, - filename, module_definitions=None): + def __init__( + self, + node, + project_modules, + local_modules, + filename, + module_definitions=None + ): """Create an empty CFG.""" self.project_modules = project_modules self.local_modules = local_modules diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index 0f7b72a2..7262f472 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -9,14 +9,18 @@ class ModuleDefinition(): """Handling of a definition.""" - + module_definitions = None name = None node = None path = None - module_definitions = None - def __init__(self, local_module_definitions, - name, parent_module_name, path): + def __init__( + self, + local_module_definitions, + name, + parent_module_name, + path + ): self.module_definitions = local_module_definitions self.parent_module_name = parent_module_name self.path = path @@ -85,14 +89,6 @@ def append_if_local_or_in_imports(self, definition): if definition.node not in project_definitions: project_definitions[definition.node] = definition - def is_import(self): - """Return whether it is a normal import statement and not a from import. - - This can be checked by checking the module name as it is only set - when it is a normal import. - """ - return self.module_name - def get_definition(self, name): """Get definitions by name.""" for definition in self.definitions: diff --git a/pyt/project_handler.py b/pyt/project_handler.py index eeee5f03..7d50b1e8 100644 --- a/pyt/project_handler.py +++ b/pyt/project_handler.py @@ -6,16 +6,15 @@ local_modules = list() -def get_directory_modules(directory, flush_local_modules=False): + + +def get_directory_modules(directory): """Return a list containing tuples of e.g. ('__init__', 'example/import_test_project/__init__.py') """ if local_modules and os.path.dirname(local_modules[0][1]) == directory: return local_modules - if flush_local_modules: - del local_modules[:] - if not os.path.isdir(directory): # example/import_test_project/A.py -> example/import_test_project directory = os.path.dirname(directory) @@ -31,6 +30,7 @@ def get_directory_modules(directory, flush_local_modules=False): return local_modules + def get_modules(path): """Return a list containing tuples of e.g. ('test_project.utils', 'example/test_project/utils.py') @@ -49,6 +49,7 @@ def get_modules(path): return modules + def get_modules_and_packages(path): """Return a list containing tuples of e.g. ('folder', 'example/test_project/folder', '.folder') @@ -76,6 +77,7 @@ def get_modules_and_packages(path): return modules + def is_python_file(path): if os.path.splitext(path)[1] == '.py': return True diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerability_helper.py index 4fd7c4ea..c1068c3d 100644 --- a/pyt/vulnerability_helper.py +++ b/pyt/vulnerability_helper.py @@ -72,7 +72,7 @@ def __init__( def _remove_sink_from_secondary_nodes(self): try: self.reassignment_nodes.remove(self.sink) - except ValueError: + except ValueError: # pragma: no cover pass def __str__(self): From ae7dc259d4450ca8fdb5722dc12276a0d5162bdb Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 19:00:32 -0700 Subject: [PATCH 218/541] Rename interprocedural_cfg to expr_visitor, and base_cf to stmt_visitor --- .pre-commit-config.yaml | 9 --------- pyt/__main__.py | 7 +++++-- pyt/alias_helper.py | 2 +- ...interprocedural_cfg.py => expr_visitor.py} | 10 +++------- ...l_cfg_helper.py => expr_visitor_helper.py} | 5 ++--- pyt/framework_adaptor.py | 2 +- pyt/{base_cfg.py => stmt_visitor.py} | 20 +++++++++---------- ...e_cfg_helper.py => stmt_visitor_helper.py} | 0 pyt/vulnerabilities.py | 2 +- tests/base_test_case.py | 2 +- tests/vulnerabilities_test.py | 1 - 11 files changed, 24 insertions(+), 36 deletions(-) rename pyt/{interprocedural_cfg.py => expr_visitor.py} (99%) rename pyt/{interprocedural_cfg_helper.py => expr_visitor_helper.py} (96%) rename pyt/{base_cfg.py => stmt_visitor.py} (99%) rename pyt/{base_cfg_helper.py => stmt_visitor_helper.py} (100%) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 89a0ebf3..8ef0f176 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -3,18 +3,9 @@ hooks: - id: trailing-whitespace - id: end-of-file-fixer - - id: autopep8-wrapper - id: check-docstring-first - id: debug-statements - id: check-ast - id: check-symlinks - - id: name-tests-test - exclude: tests/util - id: flake8 args: ['--ignore=E501'] - exclude: ^test_data/ -- repo: https://github.com/asottile/reorder_python_imports - sha: v0.3.5 - hooks: - - id: reorder-python-imports - language_version: python3.6 \ No newline at end of file diff --git a/pyt/__main__.py b/pyt/__main__.py index ce20a329..7e3eb8ec 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -14,8 +14,12 @@ UImode ) from .ast_helper import generate_ast +from .constraint_table import ( + initialize_constraint_table, + print_table +) from .draw import draw_cfgs, draw_lattices -from .constraint_table import initialize_constraint_table, print_table +from .expr_visitor import interprocedural from .fixed_point import analyse from .framework_adaptor import FrameworkAdaptor from .framework_helper import ( @@ -25,7 +29,6 @@ is_function_without_leading_ ) from .github_search import scan_github, set_github_api_token -from .interprocedural_cfg import interprocedural from .lattice import print_lattice from .liveness import LivenessAnalysis from .project_handler import get_directory_modules, get_modules diff --git a/pyt/alias_helper.py b/pyt/alias_helper.py index be98cfa0..9d294444 100644 --- a/pyt/alias_helper.py +++ b/pyt/alias_helper.py @@ -1,4 +1,4 @@ -"""This module contains helper functions for the interprocedural_cfg module.""" +"""This module contains alias helper functions for the expr_visitor module.""" def as_alias_handler(alias_list): """Returns a list of all the names that will be called.""" diff --git a/pyt/interprocedural_cfg.py b/pyt/expr_visitor.py similarity index 99% rename from pyt/interprocedural_cfg.py rename to pyt/expr_visitor.py index cd0a6b82..357e8d3d 100644 --- a/pyt/interprocedural_cfg.py +++ b/pyt/expr_visitor.py @@ -14,13 +14,7 @@ generate_ast, get_call_names_as_string ) -from .base_cfg import ( - Visitor -) -from .base_cfg_helper import ( - CALL_IDENTIFIER -) -from .interprocedural_cfg_helper import ( +from .expr_visitor_helper import ( BUILTINS, CFG, return_connection_handler, @@ -45,6 +39,8 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor +from .stmt_visitor import Visitor +from .stmt_visitor_helper import CALL_IDENTIFIER class InterproceduralVisitor(Visitor): diff --git a/pyt/interprocedural_cfg_helper.py b/pyt/expr_visitor_helper.py similarity index 96% rename from pyt/interprocedural_cfg_helper.py rename to pyt/expr_visitor_helper.py index 2a6b0ab2..aebeccd3 100644 --- a/pyt/interprocedural_cfg_helper.py +++ b/pyt/expr_visitor_helper.py @@ -1,8 +1,7 @@ from collections import namedtuple -from .node_types import ( - ConnectToExitNode -) +from .node_types import ConnectToExitNode + SavedVariable = namedtuple( 'SavedVariable', diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 78f88ec9..1618787e 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -2,7 +2,7 @@ import ast from .ast_helper import Arguments -from .interprocedural_cfg import interprocedural +from .expr_visitor import interprocedural from .module_definitions import project_definitions from .node_types import ( AssignmentNode, diff --git a/pyt/base_cfg.py b/pyt/stmt_visitor.py similarity index 99% rename from pyt/base_cfg.py rename to pyt/stmt_visitor.py index 76d65d62..c693b39a 100644 --- a/pyt/base_cfg.py +++ b/pyt/stmt_visitor.py @@ -4,16 +4,6 @@ from .ast_helper import ( get_call_names_as_string ) -from .base_cfg_helper import ( - CALL_IDENTIFIER, - ConnectStatements, - connect_nodes, - extract_left_hand_side, - get_first_node, - get_first_statement, - get_last_statements, - remove_breaks -) from .label_visitor import LabelVisitor from .node_types import ( AssignmentNode, @@ -28,6 +18,16 @@ TryNode ) from .right_hand_side_visitor import RHSVisitor +from .stmt_visitor_helper import ( + CALL_IDENTIFIER, + ConnectStatements, + connect_nodes, + extract_left_hand_side, + get_first_node, + get_first_statement, + get_last_statements, + remove_breaks +) from .vars_visitor import VarsVisitor diff --git a/pyt/base_cfg_helper.py b/pyt/stmt_visitor_helper.py similarity index 100% rename from pyt/base_cfg_helper.py rename to pyt/stmt_visitor_helper.py diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 2ad8a2ce..158a4714 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -394,7 +394,7 @@ def get_vulnerability( Note: When a secondary node is in_constraint with the sink but not the source, the secondary is a save_N_LHS - node made in process_function in interprocedural_cfg. + node made in process_function in expr_visitor. Args: source(TriggerNode): TriggerNode of the source. diff --git a/tests/base_test_case.py b/tests/base_test_case.py index a5cb415d..12589186 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -2,7 +2,7 @@ import unittest from pyt.ast_helper import generate_ast -from pyt.interprocedural_cfg import interprocedural +from pyt.expr_visitor import interprocedural from pyt.module_definitions import project_definitions diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 83388845..03f1274d 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -12,7 +12,6 @@ UImode, VulnerabilityFiles ) -from pyt.base_cfg import Node from pyt.constraint_table import( constraint_table, initialize_constraint_table From c1c77a0aaa5ac7ddaa3270f986c4a5bc58d0d411 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 19:01:15 -0700 Subject: [PATCH 219/541] remove trailing-whitespace --- pyt/stmt_visitor.py | 2 +- tests/vulnerabilities_test.py | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index c693b39a..5673f5fb 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -74,7 +74,7 @@ def stmt_star_handler( first_node = node.test else: first_node = get_first_node( - node, + node, node_not_to_step_past ) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 03f1274d..454e2b29 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -177,7 +177,7 @@ def test_XSS_result(self): File: example/vulnerable_code/XSS.py > Line 10: ret_XSS1 = resp File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": + > reaches line 9, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', param) """ @@ -189,13 +189,13 @@ def test_command_injection_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/command_injection.py - > User input at line 15, trigger word "form[": + > User input at line 15, trigger word "form[": param = request.form['suggestion'] Reassigned in: File: example/vulnerable_code/command_injection.py > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' File: example/vulnerable_code/command_injection.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, trigger word "subprocess.call(": ¤call_1 = ret_subprocess.call(command, shell=True) """ @@ -341,7 +341,7 @@ def test_sql_result(self): File: example/vulnerable_code/sql/sqli.py > Line 27: result = ¤call_2 File: example/vulnerable_code/sql/sqli.py - > reaches line 27, trigger word "execute(": + > reaches line 27, trigger word "execute(": ¤call_2 = ret_db.engine.execute(param) """ @@ -353,7 +353,7 @@ def test_XSS_form_result(self): vulnerability_description = str(vulnerability_log.vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_form.py - > User input at line 14, trigger word "form[": + > User input at line 14, trigger word "form[": data = request.form['my_text'] Reassigned in: File: example/vulnerable_code/XSS_form.py @@ -363,7 +363,7 @@ def test_XSS_form_result(self): File: example/vulnerable_code/XSS_form.py > Line 17: ret_example2_action = resp File: example/vulnerable_code/XSS_form.py - > reaches line 15, trigger word "replace(": + > reaches line 15, trigger word "replace(": ¤call_2 = ret_html1.replace('{{ data }}', data) """ @@ -387,7 +387,7 @@ def test_XSS_url_result(self): File: example/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp File: example/vulnerable_code/XSS_url.py - > reaches line 9, trigger word "replace(": + > reaches line 9, trigger word "replace(": ¤call_3 = ret_html.replace('{{ param }}', param) """ @@ -417,7 +417,7 @@ def test_XSS_reassign_result(self): File: example/vulnerable_code/XSS_reassign.py > Line 12: ret_XSS1 = resp File: example/vulnerable_code/XSS_reassign.py - > reaches line 11, trigger word "replace(": + > reaches line 11, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', param) """ @@ -476,7 +476,7 @@ def test_XSS_variable_assign_result(self): File: example/vulnerable_code/XSS_variable_assign.py > Line 12: ret_XSS1 = resp File: example/vulnerable_code/XSS_variable_assign.py - > reaches line 11, trigger word "replace(": + > reaches line 11, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', other_var) """ @@ -506,7 +506,7 @@ def test_XSS_variable_multiple_assign_result(self): File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 17: ret_XSS1 = resp File: example/vulnerable_code/XSS_variable_multiple_assign.py - > reaches line 15, trigger word "replace(": + > reaches line 15, trigger word "replace(": ¤call_4 = ret_html.replace('{{ param }}', another_one) """ From 33c0e93e428232eb869584f0b0c96b0161374db1 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 19:08:53 -0700 Subject: [PATCH 220/541] Rename inteprocedural to make_cfg and InterproceduralVisitor to ExprVisitor --- pyt/__main__.py | 10 +++++----- pyt/expr_visitor.py | 6 +++--- pyt/framework_adaptor.py | 12 ++++++++---- tests/base_test_case.py | 4 ++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 7e3eb8ec..ea84b68e 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -19,7 +19,7 @@ print_table ) from .draw import draw_cfgs, draw_lattices -from .expr_visitor import interprocedural +from .expr_visitor import make_cfg from .fixed_point import analyse from .framework_adaptor import FrameworkAdaptor from .framework_helper import ( @@ -183,13 +183,13 @@ def analyse_repo(github_repo, analysis_type, ui_mode): project_modules = get_modules(directory) local_modules = get_directory_modules(directory) tree = generate_ast(github_repo.path, python_2=args.python_2) - interprocedural_cfg = interprocedural( + cfg = make_cfg( tree, project_modules, local_modules, github_repo.path ) - cfg_list.append(interprocedural_cfg) + cfg_list.append(cfg) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis_type) @@ -257,13 +257,13 @@ def main(command_line_args=sys.argv[1:]): cfg_list = list() - interprocedural_cfg = interprocedural( + cfg = make_cfg( tree, project_modules, local_modules, path ) - cfg_list.append(interprocedural_cfg) + cfg_list.append(cfg) framework_route_criteria = is_flask_route_function if args.adaptor: if args.adaptor.lower().startswith('e'): diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 357e8d3d..4b40a83e 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -43,7 +43,7 @@ from .stmt_visitor_helper import CALL_IDENTIFIER -class InterproceduralVisitor(Visitor): +class ExprVisitor(Visitor): def __init__( self, node, @@ -944,14 +944,14 @@ def visit_ImportFrom(self, node): return IgnoredNode() -def interprocedural( +def make_cfg( node, project_modules, local_modules, filename, module_definitions=None ): - visitor = InterproceduralVisitor( + visitor = ExprVisitor( node, project_modules, local_modules, filename, diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index 1618787e..bf3732e3 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -2,7 +2,7 @@ import ast from .ast_helper import Arguments -from .expr_visitor import interprocedural +from .expr_visitor import make_cfg from .module_definitions import project_definitions from .node_types import ( AssignmentNode, @@ -24,9 +24,13 @@ def __init__(self, cfg_list, project_modules, local_modules, is_route_function): def get_func_cfg_with_tainted_args(self, definition): """Build a function cfg and return it, with all arguments tainted.""" - func_cfg = interprocedural(definition.node, self.project_modules, - self.local_modules, definition.path, - definition.module_definitions) + func_cfg = make_cfg( + definition.node, + self.project_modules, + self.local_modules, + definition.path, + definition.module_definitions + ) args = Arguments(definition.node.args) if args: diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 12589186..bbcb9d52 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -2,7 +2,7 @@ import unittest from pyt.ast_helper import generate_ast -from pyt.expr_visitor import interprocedural +from pyt.expr_visitor import make_cfg from pyt.module_definitions import project_definitions @@ -67,7 +67,7 @@ def assert_length(self, _list, *, expected_length): def cfg_create_from_file(self, filename, project_modules=list(), local_modules=list()): project_definitions.clear() tree = generate_ast(filename) - self.cfg = interprocedural(tree, project_modules, local_modules, filename) + self.cfg = make_cfg(tree, project_modules, local_modules, filename) def string_compare_alpha(self, output, expected_string): return [char for char in output if char.isalpha()] \ From 6de7f9b6789b8d3cf8d8b620d99a905def95717e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 27 Mar 2018 19:12:22 -0700 Subject: [PATCH 221/541] Rename Visitor to StmtVisitor --- pyt/expr_visitor.py | 4 ++-- pyt/stmt_visitor.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 4b40a83e..82fd6f33 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -39,11 +39,11 @@ ) from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor -from .stmt_visitor import Visitor +from .stmt_visitor import StmtVisitor from .stmt_visitor_helper import CALL_IDENTIFIER -class ExprVisitor(Visitor): +class ExprVisitor(StmtVisitor): def __init__( self, node, diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index 5673f5fb..95d912bf 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -31,7 +31,7 @@ from .vars_visitor import VarsVisitor -class Visitor(ast.NodeVisitor): +class StmtVisitor(ast.NodeVisitor): def visit_Module(self, node): return self.stmt_star_handler(node.body) From 01c2572b7d0b5392481976303b176fb82c2e51b5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 28 Mar 2018 18:49:20 -0700 Subject: [PATCH 222/541] Moved the import functions from expr_visitor to stmt_visitor --- pyt/expr_visitor.py | 310 +--------------------------------------- pyt/stmt_visitor.py | 337 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 325 insertions(+), 322 deletions(-) diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 82fd6f33..51f322cd 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -1,17 +1,10 @@ import ast -import os.path from .alias_helper import ( - as_alias_handler, - handle_aliases_in_calls, - handle_aliases_in_init_files, - handle_fdid_aliases, - not_as_alias_handler, - retrieve_import_alias_mapping + handle_aliases_in_calls ) from .ast_helper import ( Arguments, - generate_ast, get_call_names_as_string ) from .expr_visitor_helper import ( @@ -37,7 +30,6 @@ RestoreNode, ReturnNode ) -from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor from .stmt_visitor import StmtVisitor from .stmt_visitor_helper import CALL_IDENTIFIER @@ -643,306 +635,6 @@ def visit_Call(self, node): return self.add_blackbox_or_builtin_call(node, blackbox=True) return self.add_blackbox_or_builtin_call(node, blackbox=False) - def add_module( - self, - module, - module_or_package_name, - local_names, - import_alias_mapping, - is_init=False, - from_from=False, - from_fdid=False - ): - """ - Returns: - The ExitNode that gets attached to the CFG of the class. - """ - module_path = module[1] - - parent_definitions = self.module_definitions_stack[-1] - # The only place the import_alias_mapping is updated - parent_definitions.import_alias_mapping.update(import_alias_mapping) - parent_definitions.import_names = local_names - - new_module_definitions = ModuleDefinitions(local_names, module_or_package_name) - new_module_definitions.is_init = is_init - self.module_definitions_stack.append(new_module_definitions) - - # Analyse the file - self.filenames.append(module_path) - self.local_modules = get_directory_modules(module_path) - tree = generate_ast(module_path) - - # module[0] is None during e.g. "from . import foo", so we must str() - self.nodes.append(EntryOrExitNode('Module Entry ' + str(module[0]))) - self.visit(tree) - exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) - - # Done analysing, pop the module off - self.module_definitions_stack.pop() - self.filenames.pop() - - if new_module_definitions.is_init: - for def_ in new_module_definitions.definitions: - module_def_alias = handle_aliases_in_init_files( - def_.name, - new_module_definitions.import_alias_mapping - ) - parent_def_alias = handle_aliases_in_init_files( - def_.name, - parent_definitions.import_alias_mapping - ) - # They should never both be set - assert not (module_def_alias and parent_def_alias) - - def_name = def_.name - if parent_def_alias: - def_name = parent_def_alias - if module_def_alias: - def_name = module_def_alias - - local_definitions = self.module_definitions_stack[-1] - if local_definitions != parent_definitions: - raise - if not isinstance(module_or_package_name, str): - module_or_package_name = module_or_package_name.name - - if module_or_package_name: - if from_from: - qualified_name = def_name - - if from_fdid: - alias = handle_fdid_aliases(module_or_package_name, import_alias_mapping) - if alias: - module_or_package_name = alias - parent_definition = ModuleDefinition( - parent_definitions, - qualified_name, - module_or_package_name, - self.filenames[-1] - ) - else: - parent_definition = ModuleDefinition( - parent_definitions, - qualified_name, - None, - self.filenames[-1] - ) - else: - qualified_name = '.'.join([module_or_package_name, - def_name]) - parent_definition = ModuleDefinition( - parent_definitions, - qualified_name, - parent_definitions.module_name, - self.filenames[-1] - ) - parent_definition.node = def_.node - parent_definitions.definitions.append(parent_definition) - else: - parent_definition = ModuleDefinition( - parent_definitions, - def_name, - parent_definitions.module_name, - self.filenames[-1] - ) - parent_definition.node = def_.node - parent_definitions.definitions.append(parent_definition) - - return exit_node - - def from_directory_import( - self, - module, - real_names, - local_names, - import_alias_mapping, - skip_init=False - ): - """ - Directories don't need to be packages. - """ - module_path = module[1] - - init_file_location = os.path.join(module_path, '__init__.py') - init_exists = os.path.isfile(init_file_location) - - if init_exists and not skip_init: - package_name = os.path.split(module_path)[1] - return self.add_module( - (module[0], init_file_location), - package_name, - local_names, - import_alias_mapping, - is_init=True, - from_from=True - ) - for real_name in real_names: - full_name = os.path.join(module_path, real_name) - if os.path.isdir(full_name): - new_init_file_location = os.path.join(full_name, '__init__.py') - if os.path.isfile(new_init_file_location): - self.add_module( - (real_name, new_init_file_location), - real_name, - local_names, - import_alias_mapping, - is_init=True, - from_from=True, - from_fdid=True - ) - else: - raise Exception('from anything import directory needs an __init__.py file in directory') - else: - file_module = (real_name, full_name + '.py') - self.add_module( - file_module, - real_name, - local_names, - import_alias_mapping, - from_from=True - ) - return IgnoredNode() - - def import_package(self, module, module_name, local_name, import_alias_mapping): - module_path = module[1] - init_file_location = os.path.join(module_path, '__init__.py') - init_exists = os.path.isfile(init_file_location) - if init_exists: - return self.add_module( - (module[0], init_file_location), - module_name, - local_name, - import_alias_mapping, - is_init=True - ) - else: - raise Exception('import directory needs an __init__.py file') - - def handle_relative_import(self, node): - """ - from A means node.level == 0 - from . import B means node.level == 1 - from .A means node.level == 1 - """ - no_file = os.path.abspath(os.path.join(self.filenames[-1], os.pardir)) - skip_init = False - - if node.level == 1: - # Same directory as current file - if node.module: - name_with_dir = os.path.join(no_file, node.module.replace('.', '/')) - if not os.path.isdir(name_with_dir): - name_with_dir = name_with_dir + '.py' - # e.g. from . import X - else: - name_with_dir = no_file - # We do not want to analyse the init file of the current directory - skip_init = True - else: - parent = os.path.abspath(os.path.join(no_file, os.pardir)) - if node.level > 2: - # Perform extra `cd ..` however many times - for _ in range(0, node.level - 2): - parent = os.path.abspath(os.path.join(parent, os.pardir)) - if node.module: - name_with_dir = os.path.join(parent, node.module.replace('.', '/')) - if not os.path.isdir(name_with_dir): - name_with_dir = name_with_dir + '.py' - # e.g. from .. import X - else: - name_with_dir = parent - - # Is it a file? - if name_with_dir.endswith('.py'): - return self.add_module( - (node.module, name_with_dir), - None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True - ) - return self.from_directory_import( - (node.module, name_with_dir), - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - skip_init=skip_init - ) - - def visit_Import(self, node): - for name in node.names: - for module in self.local_modules: - if name.name == module[0]: - if os.path.isdir(module[1]): - return self.import_package( - module, - name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - for module in self.project_modules: - if name.name == module[0]: - if os.path.isdir(module[1]): - return self.import_package( - module, - name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) - ) - return IgnoredNode() - - def visit_ImportFrom(self, node): - # Is it relative? - if node.level > 0: - return self.handle_relative_import(node) - else: - for module in self.local_modules: - if node.module == module[0]: - if os.path.isdir(module[1]): - return self.from_directory_import( - module, - not_as_alias_handler(node.names), - as_alias_handler(node.names) - ) - return self.add_module( - module, - None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True - ) - for module in self.project_modules: - name = module[0] - if node.module == name: - if os.path.isdir(module[1]): - return self.from_directory_import( - module, - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( - module, - None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True - ) - return IgnoredNode() - def make_cfg( node, diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index 95d912bf..893e8656 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -1,22 +1,37 @@ import ast import itertools - +import os.path + +from .alias_helper import ( + as_alias_handler, + handle_aliases_in_init_files, + handle_fdid_aliases, + not_as_alias_handler, + retrieve_import_alias_mapping +) from .ast_helper import ( + generate_ast, get_call_names_as_string ) from .label_visitor import LabelVisitor +from .module_definitions import ( + ModuleDefinition, + ModuleDefinitions +) from .node_types import ( AssignmentNode, AssignmentCallNode, BBorBInode, BreakNode, ControlFlowNode, + EntryOrExitNode, IfNode, IgnoredNode, Node, - RestoreNode, + RaiseNode, TryNode ) +from .project_handler import get_directory_modules from .right_hand_side_visitor import RHSVisitor from .stmt_visitor_helper import ( CALL_IDENTIFIER, @@ -99,7 +114,6 @@ def stmt_star_handler( else: # When body of module only contains ignored nodes return IgnoredNode() - def handle_or_else(self, orelse, test): """Handle the orelse part of an if or try node. @@ -266,7 +280,7 @@ def assign_multi_target(self, node, right_hand_side_variables): def visit_Assign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - if isinstance(node.targets[0], ast.Tuple): # x,y = [1,2] + if isinstance(node.targets[0], ast.Tuple): # x,y = [1,2] if isinstance(node.value, ast.Tuple): return self.assign_tuple_target(node, rhs_visitor.result) elif isinstance(node.value, ast.Call): @@ -290,14 +304,14 @@ def visit_Assign(self, node): path=self.filenames[-1] )) - elif len(node.targets) > 1: # x = y = 3 + elif len(node.targets) > 1: # x = y = 3 return self.assign_multi_target(node, rhs_visitor.result) else: - if isinstance(node.value, ast.Call): # x = call() + if isinstance(node.value, ast.Call): # x = call() label = LabelVisitor() label.visit(node.targets[0]) return self.assignment_call_node(label.result, node) - else: # x = 4 + else: # x = 4 label = LabelVisitor() label.visit(node) return self.append_node(AssignmentNode( @@ -383,14 +397,12 @@ def loop_node_skeleton(self, test, node): return ControlFlowNode(test, last_nodes, list()) def visit_For(self, node): - self.undecided = True # Used for handling functions in for loops - - iterator_label = LabelVisitor() - iterator = iterator_label.visit(node.iter) self.undecided = False + iterator_label = LabelVisitor() + iterator_label.visit(node.iter) target_label = LabelVisitor() - target = target_label.visit(node.target) + target_label.visit(node.target) for_node = self.append_node(Node( "for " + target_label.result + " in " + iterator_label.result + ':', @@ -500,7 +512,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): for arg in visual_args: RHS = RHS + arg + ", " # Replace the last ", " with a ) - RHS = RHS[:len(RHS)-2] + ')' + RHS = RHS[:len(RHS) - 2] + ')' else: RHS = RHS + ')' call_node.label = LHS + " = " + RHS @@ -632,3 +644,302 @@ def append_node(self, node): """Append a node to the CFG and return it.""" self.nodes.append(node) return node + + def add_module( + self, + module, + module_or_package_name, + local_names, + import_alias_mapping, + is_init=False, + from_from=False, + from_fdid=False + ): + """ + Returns: + The ExitNode that gets attached to the CFG of the class. + """ + module_path = module[1] + + parent_definitions = self.module_definitions_stack[-1] + # The only place the import_alias_mapping is updated + parent_definitions.import_alias_mapping.update(import_alias_mapping) + parent_definitions.import_names = local_names + + new_module_definitions = ModuleDefinitions(local_names, module_or_package_name) + new_module_definitions.is_init = is_init + self.module_definitions_stack.append(new_module_definitions) + + # Analyse the file + self.filenames.append(module_path) + self.local_modules = get_directory_modules(module_path) + tree = generate_ast(module_path) + + # module[0] is None during e.g. "from . import foo", so we must str() + self.nodes.append(EntryOrExitNode('Module Entry ' + str(module[0]))) + self.visit(tree) + exit_node = self.append_node(EntryOrExitNode('Module Exit ' + str(module[0]))) + + # Done analysing, pop the module off + self.module_definitions_stack.pop() + self.filenames.pop() + + if new_module_definitions.is_init: + for def_ in new_module_definitions.definitions: + module_def_alias = handle_aliases_in_init_files( + def_.name, + new_module_definitions.import_alias_mapping + ) + parent_def_alias = handle_aliases_in_init_files( + def_.name, + parent_definitions.import_alias_mapping + ) + # They should never both be set + assert not (module_def_alias and parent_def_alias) + + def_name = def_.name + if parent_def_alias: + def_name = parent_def_alias + if module_def_alias: + def_name = module_def_alias + + local_definitions = self.module_definitions_stack[-1] + if local_definitions != parent_definitions: + raise + if not isinstance(module_or_package_name, str): + module_or_package_name = module_or_package_name.name + + if module_or_package_name: + if from_from: + qualified_name = def_name + + if from_fdid: + alias = handle_fdid_aliases(module_or_package_name, import_alias_mapping) + if alias: + module_or_package_name = alias + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + module_or_package_name, + self.filenames[-1] + ) + else: + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + None, + self.filenames[-1] + ) + else: + qualified_name = module_or_package_name + '.' + def_name + parent_definition = ModuleDefinition( + parent_definitions, + qualified_name, + parent_definitions.module_name, + self.filenames[-1] + ) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) + else: + parent_definition = ModuleDefinition( + parent_definitions, + def_name, + parent_definitions.module_name, + self.filenames[-1] + ) + parent_definition.node = def_.node + parent_definitions.definitions.append(parent_definition) + + return exit_node + + def from_directory_import( + self, + module, + real_names, + local_names, + import_alias_mapping, + skip_init=False + ): + """ + Directories don't need to be packages. + """ + module_path = module[1] + + init_file_location = os.path.join(module_path, '__init__.py') + init_exists = os.path.isfile(init_file_location) + + if init_exists and not skip_init: + package_name = os.path.split(module_path)[1] + return self.add_module( + (module[0], init_file_location), + package_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True + ) + for real_name in real_names: + full_name = os.path.join(module_path, real_name) + if os.path.isdir(full_name): + new_init_file_location = os.path.join(full_name, '__init__.py') + if os.path.isfile(new_init_file_location): + self.add_module( + (real_name, new_init_file_location), + real_name, + local_names, + import_alias_mapping, + is_init=True, + from_from=True, + from_fdid=True + ) + else: + raise Exception('from anything import directory needs an __init__.py file in directory') + else: + file_module = (real_name, full_name + '.py') + self.add_module( + file_module, + real_name, + local_names, + import_alias_mapping, + from_from=True + ) + return IgnoredNode() + + def import_package(self, module, module_name, local_name, import_alias_mapping): + module_path = module[1] + init_file_location = os.path.join(module_path, '__init__.py') + init_exists = os.path.isfile(init_file_location) + if init_exists: + return self.add_module( + (module[0], init_file_location), + module_name, + local_name, + import_alias_mapping, + is_init=True + ) + else: + raise Exception('import directory needs an __init__.py file') + + def handle_relative_import(self, node): + """ + from A means node.level == 0 + from . import B means node.level == 1 + from .A means node.level == 1 + """ + no_file = os.path.abspath(os.path.join(self.filenames[-1], os.pardir)) + skip_init = False + + if node.level == 1: + # Same directory as current file + if node.module: + name_with_dir = os.path.join(no_file, node.module.replace('.', '/')) + if not os.path.isdir(name_with_dir): + name_with_dir = name_with_dir + '.py' + # e.g. from . import X + else: + name_with_dir = no_file + # We do not want to analyse the init file of the current directory + skip_init = True + else: + parent = os.path.abspath(os.path.join(no_file, os.pardir)) + if node.level > 2: + # Perform extra `cd ..` however many times + for _ in range(0, node.level - 2): + parent = os.path.abspath(os.path.join(parent, os.pardir)) + if node.module: + name_with_dir = os.path.join(parent, node.module.replace('.', '/')) + if not os.path.isdir(name_with_dir): + name_with_dir = name_with_dir + '.py' + # e.g. from .. import X + else: + name_with_dir = parent + + # Is it a file? + if name_with_dir.endswith('.py'): + return self.add_module( + (node.module, name_with_dir), + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) + return self.from_directory_import( + (node.module, name_with_dir), + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + skip_init=skip_init + ) + + def visit_Import(self, node): + for name in node.names: + for module in self.local_modules: + if name.name == module[0]: + if os.path.isdir(module[1]): + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + for module in self.project_modules: + if name.name == module[0]: + if os.path.isdir(module[1]): + return self.import_package( + module, + name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + name.name, + name.asname, + retrieve_import_alias_mapping(node.names) + ) + return IgnoredNode() + + def visit_ImportFrom(self, node): + # Is it relative? + if node.level > 0: + return self.handle_relative_import(node) + else: + for module in self.local_modules: + if node.module == module[0]: + if os.path.isdir(module[1]): + return self.from_directory_import( + module, + not_as_alias_handler(node.names), + as_alias_handler(node.names) + ) + return self.add_module( + module, + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) + for module in self.project_modules: + name = module[0] + if node.module == name: + if os.path.isdir(module[1]): + return self.from_directory_import( + module, + not_as_alias_handler(node.names), + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names) + ) + return self.add_module( + module, + None, + as_alias_handler(node.names), + retrieve_import_alias_mapping(node.names), + from_from=True + ) + return IgnoredNode() From 4392be8760039aac7dca8b2d036b1d2dff84fbe8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 28 Mar 2018 18:57:22 -0700 Subject: [PATCH 223/541] Moved ClassDef, FunctionDef and Return functions from expr_visitor to stmt_visitor --- pyt/expr_visitor.py | 57 -------------------------------------------- pyt/stmt_visitor.py | 58 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 57 deletions(-) diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 51f322cd..2865f549 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -149,63 +149,6 @@ def add_to_definitions(self, node): self.function_names.append(node.name) - def visit_ClassDef(self, node): - self.add_to_definitions(node) - - local_definitions = self.module_definitions_stack[-1] - local_definitions.classes.append(node.name) - - parent_definitions = self.get_parent_definitions() - if parent_definitions: - parent_definitions.classes.append(node.name) - - self.stmt_star_handler(node.body) - - local_definitions.classes.pop() - if parent_definitions: - parent_definitions.classes.pop() - - return IgnoredNode() - - def visit_FunctionDef(self, node): - self.add_to_definitions(node) - - return IgnoredNode() - - def visit_Return(self, node): - label = LabelVisitor() - label.visit(node) - - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyReturn' - - this_function_name = self.function_return_stack[-1] - LHS = 'ret_' + this_function_name - - if isinstance(node.value, ast.Call): - return_value_of_call = self.visit(node.value) - return_node = ReturnNode( - LHS + ' = ' + return_value_of_call.left_hand_side, - LHS, - node, - [return_value_of_call.left_hand_side], - path=self.filenames[-1] - ) - return_value_of_call.connect(return_node) - self.nodes.append(return_node) - return return_node - - return self.append_node(ReturnNode( - LHS + ' = ' + label.result, - LHS, - node, - rhs_visitor.result, - path=self.filenames[-1] - )) - def visit_Yield(self, node): label = LabelVisitor() label.visit(node) diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index 893e8656..e82e02d6 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -29,6 +29,7 @@ IgnoredNode, Node, RaiseNode, + ReturnNode, TryNode ) from .project_handler import get_directory_modules @@ -165,12 +166,69 @@ def visit_If(self, node): return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) + def visit_ClassDef(self, node): + self.add_to_definitions(node) + + local_definitions = self.module_definitions_stack[-1] + local_definitions.classes.append(node.name) + + parent_definitions = self.get_parent_definitions() + if parent_definitions: + parent_definitions.classes.append(node.name) + + self.stmt_star_handler(node.body) + + local_definitions.classes.pop() + if parent_definitions: + parent_definitions.classes.pop() + + return IgnoredNode() + + def visit_FunctionDef(self, node): + self.add_to_definitions(node) + + return IgnoredNode() + def visit_Raise(self, node): return self.append_node(RaiseNode( node, path=self.filenames[-1] )) + def visit_Return(self, node): + label = LabelVisitor() + label.visit(node) + + try: + rhs_visitor = RHSVisitor() + rhs_visitor.visit(node.value) + except AttributeError: + rhs_visitor.result = 'EmptyReturn' + + this_function_name = self.function_return_stack[-1] + LHS = 'ret_' + this_function_name + + if isinstance(node.value, ast.Call): + return_value_of_call = self.visit(node.value) + return_node = ReturnNode( + LHS + ' = ' + return_value_of_call.left_hand_side, + LHS, + node, + [return_value_of_call.left_hand_side], + path=self.filenames[-1] + ) + return_value_of_call.connect(return_node) + self.nodes.append(return_node) + return return_node + + return self.append_node(ReturnNode( + LHS + ' = ' + label.result, + LHS, + node, + rhs_visitor.result, + path=self.filenames[-1] + )) + def handle_stmt_star_ignore_node(self, body, fallback_cfg_node): try: fallback_cfg_node.connect(body.first_statement) From 1095d63919058325ea3b52782ec30ec7f0d84198 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 28 Mar 2018 19:07:23 -0700 Subject: [PATCH 224/541] Moved all expr's into expr_visitor and stmt helper methods into stmt_visitor --- pyt/expr_visitor.py | 71 ++++++++++++---------------- pyt/stmt_visitor.py | 112 ++++++++++++++++++++++++-------------------- 2 files changed, 90 insertions(+), 93 deletions(-) diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 2865f549..0fbfa4d0 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -14,11 +14,7 @@ SavedVariable ) from .label_visitor import LabelVisitor -from .module_definitions import ( - LocalModuleDefinition, - ModuleDefinition, - ModuleDefinitions -) +from .module_definitions import ModuleDefinitions from .node_types import ( AssignmentCallNode, AssignmentNode, @@ -112,43 +108,6 @@ def init_function_cfg(self, node, module_definitions): last_nodes = module_statements.last_statements exit_node.connect_predecessors(last_nodes) - def get_parent_definitions(self): - parent_definitions = None - if len(self.module_definitions_stack) > 1: - parent_definitions = self.module_definitions_stack[-2] - return parent_definitions - - def add_to_definitions(self, node): - local_definitions = self.module_definitions_stack[-1] - parent_definitions = self.get_parent_definitions() - - if parent_definitions: - parent_qualified_name = '.'.join( - parent_definitions.classes + - [node.name] - ) - parent_definition = ModuleDefinition( - parent_definitions, - parent_qualified_name, - local_definitions.module_name, - self.filenames[-1] - ) - parent_definition.node = node - parent_definitions.append_if_local_or_in_imports(parent_definition) - - local_qualified_name = '.'.join(local_definitions.classes + - [node.name]) - local_definition = LocalModuleDefinition( - local_definitions, - local_qualified_name, - None, - self.filenames[-1] - ) - local_definition.node = node - local_definitions.append_if_local_or_in_imports(local_definition) - - self.function_names.append(node.name) - def visit_Yield(self, node): label = LabelVisitor() label.visit(node) @@ -169,6 +128,34 @@ def visit_Yield(self, node): path=self.filenames[-1]) ) + def visit_Attribute(self, node): + return self.visit_miscelleaneous_node( + node + ) + + def visit_Name(self, node): + return self.visit_miscelleaneous_node( + node + ) + + def visit_NameConstant(self, node): + return self.visit_miscelleaneous_node( + node + ) + + def visit_Str(self, node): + return IgnoredNode() + + def visit_Subscript(self, node): + return self.visit_miscelleaneous_node( + node + ) + + def visit_Tuple(self, node): + return self.visit_miscelleaneous_node( + node + ) + def connect_if_allowed( self, previous_node, diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index e82e02d6..dbf8a91e 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -15,6 +15,7 @@ ) from .label_visitor import LabelVisitor from .module_definitions import ( + LocalModuleDefinition, ModuleDefinition, ModuleDefinitions ) @@ -115,6 +116,66 @@ def stmt_star_handler( else: # When body of module only contains ignored nodes return IgnoredNode() + def get_parent_definitions(self): + parent_definitions = None + if len(self.module_definitions_stack) > 1: + parent_definitions = self.module_definitions_stack[-2] + return parent_definitions + + def add_to_definitions(self, node): + local_definitions = self.module_definitions_stack[-1] + parent_definitions = self.get_parent_definitions() + + if parent_definitions: + parent_qualified_name = '.'.join( + parent_definitions.classes + + [node.name] + ) + parent_definition = ModuleDefinition( + parent_definitions, + parent_qualified_name, + local_definitions.module_name, + self.filenames[-1] + ) + parent_definition.node = node + parent_definitions.append_if_local_or_in_imports(parent_definition) + + local_qualified_name = '.'.join(local_definitions.classes + + [node.name]) + local_definition = LocalModuleDefinition( + local_definitions, + local_qualified_name, + None, + self.filenames[-1] + ) + local_definition.node = node + local_definitions.append_if_local_or_in_imports(local_definition) + + self.function_names.append(node.name) + + def visit_ClassDef(self, node): + self.add_to_definitions(node) + + local_definitions = self.module_definitions_stack[-1] + local_definitions.classes.append(node.name) + + parent_definitions = self.get_parent_definitions() + if parent_definitions: + parent_definitions.classes.append(node.name) + + self.stmt_star_handler(node.body) + + local_definitions.classes.pop() + if parent_definitions: + parent_definitions.classes.pop() + + return IgnoredNode() + + def visit_FunctionDef(self, node): + self.add_to_definitions(node) + + return IgnoredNode() + def handle_or_else(self, orelse, test): """Handle the orelse part of an if or try node. @@ -166,29 +227,6 @@ def visit_If(self, node): return ControlFlowNode(test, last_statements, break_statements=body_connect_stmts.break_statements) - def visit_ClassDef(self, node): - self.add_to_definitions(node) - - local_definitions = self.module_definitions_stack[-1] - local_definitions.classes.append(node.name) - - parent_definitions = self.get_parent_definitions() - if parent_definitions: - parent_definitions.classes.append(node.name) - - self.stmt_star_handler(node.body) - - local_definitions.classes.pop() - if parent_definitions: - parent_definitions.classes.pop() - - return IgnoredNode() - - def visit_FunctionDef(self, node): - self.add_to_definitions(node) - - return IgnoredNode() - def visit_Raise(self, node): return self.append_node(RaiseNode( node, @@ -632,11 +670,6 @@ def visit_Assert(self, node): path=self.filenames[-1] )) - def visit_Attribute(self, node): - return self.visit_miscelleaneous_node( - node - ) - def visit_Continue(self, node): return self.visit_miscelleaneous_node( node, @@ -648,32 +681,12 @@ def visit_Global(self, node): node ) - def visit_Name(self, node): - return self.visit_miscelleaneous_node( - node - ) - - def visit_NameConstant(self, node): - return self.visit_miscelleaneous_node( - node - ) - def visit_Pass(self, node): return self.visit_miscelleaneous_node( node, custom_label='pass' ) - def visit_Subscript(self, node): - return self.visit_miscelleaneous_node( - node - ) - - def visit_Tuple(self, node): - return self.visit_miscelleaneous_node( - node - ) - def visit_miscelleaneous_node( self, node, @@ -692,9 +705,6 @@ def visit_miscelleaneous_node( path=self.filenames[-1] )) - def visit_Str(self, node): - return IgnoredNode() - def visit_Expr(self, node): return self.visit(node.value) From 661f264abbf583e5e5290c899bd48af615e84cf0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 1 Apr 2018 15:06:10 -0700 Subject: [PATCH 225/541] Delete VulnerabilityLog and print_report, make formatters/text.py and json.py, -j for JSON option, refactor CALL_IDENTIFIER to tilde because of /uUGLYNUMBERS json output, refactor super calls of the subclasses of Vulnerability to be silky smooth with kwargs, implement as_dict methods for Node and vulnerability types, make tests pass with these changes, fixed a few flake8y things --- func_counter.py | 4 +- pyt/__main__.py | 45 ++-- pyt/analysis_base.py | 6 +- pyt/ast_helper.py | 1 + pyt/draw.py | 2 +- pyt/expr_visitor.py | 6 +- pyt/formatters/json.py | 33 +++ pyt/formatters/text.py | 23 ++ pyt/framework_adaptor.py | 6 +- pyt/github_search.py | 22 +- pyt/liveness.py | 2 +- pyt/module_definitions.py | 1 + pyt/node_types.py | 11 +- pyt/save.py | 34 ++- pyt/stmt_visitor.py | 4 +- pyt/stmt_visitor_helper.py | 2 +- pyt/vulnerabilities.py | 42 ++-- pyt/vulnerability_helper.py | 149 +++++-------- tests/cfg_test.py | 30 +-- tests/command_line_test.py | 4 +- tests/import_test.py | 106 ++++----- tests/nested_functions_test.py | 8 +- tests/reaching_definitions_taint_test.py | 70 +++--- tests/reaching_definitions_test.py | 38 ++-- tests/vulnerabilities_across_files_test.py | 148 +++++++------ tests/vulnerabilities_test.py | 238 ++++++++++----------- 26 files changed, 526 insertions(+), 509 deletions(-) create mode 100644 pyt/formatters/json.py create mode 100644 pyt/formatters/text.py diff --git a/func_counter.py b/func_counter.py index 82b4dc55..82c7ff6e 100644 --- a/func_counter.py +++ b/func_counter.py @@ -20,14 +20,14 @@ def visit_Call(self, node): def visit_FunctionDef(self, node): if node.name in functions: - node.name += '¤' + node.name += '~' functions[node.name] = len(node.body) for n in node.body: self.visit(n) def visit_ClassDef(self, node): if node.name in classes: - node.name += '¤' + node.name += '~' classes[node.name] = len(node.body) for n in node.body: self.visit(n) diff --git a/pyt/__main__.py b/pyt/__main__.py index 12dc59e9..a07b3796 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -21,6 +21,10 @@ from .draw import draw_cfgs, draw_lattices from .expr_visitor import make_cfg from .fixed_point import analyse +from .formatters import ( + json, + text +) from .framework_adaptor import FrameworkAdaptor from .framework_helper import ( is_django_view_function, @@ -93,7 +97,7 @@ def parse_args(args): help='Input trigger word file.', type=str, default=default_trigger_word_file) - parser.add_argument('-b', '--blackbox-mapping-file', + parser.add_argument('-m', '--blackbox-mapping-file', help='Input blackbox mapping file.', type=str, default=default_blackbox_mapping_file) @@ -111,6 +115,10 @@ def parse_args(args): ' create a database.', action='store_true') parser.add_argument('-dl', '--draw-lattice', nargs='+', help='Draws a lattice.') + parser.add_argument('-j', '--json', + help='Prints JSON instead of report.', + action='store_true', + default=False) analysis_group = parser.add_mutually_exclusive_group() analysis_group.add_argument('-li', '--liveness', @@ -177,7 +185,7 @@ def parse_args(args): return parser.parse_args(args) -def analyse_repo(github_repo, analysis_type, ui_mode): +def analyse_repo(args, github_repo, analysis_type, ui_mode): cfg_list = list() directory = os.path.dirname(github_repo.path) project_modules = get_modules(directory) @@ -193,7 +201,7 @@ def analyse_repo(github_repo, analysis_type, ui_mode): initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=analysis_type) - vulnerability_log = find_vulnerabilities( + vulnerabilities = find_vulnerabilities( cfg_list, analysis_type, ui_mode, @@ -202,7 +210,7 @@ def analyse_repo(github_repo, analysis_type, ui_mode): args.trigger_word_file ) ) - return vulnerability_log + return vulnerabilities def main(command_line_args=sys.argv[1:]): @@ -225,9 +233,12 @@ def main(command_line_args=sys.argv[1:]): repos = get_repos(args.git_repos) for repo in repos: repo.clone() - vulnerability_log = analyse_repo(repo, analysis, ui_mode) - vulnerability_log.print_report() - if not vulnerability_log.vulnerabilities: + vulnerabilities = analyse_repo(args, repo, analysis, ui_mode) + if args.json: + json.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) + if not vulnerabilities: repo.clean_up() exit() @@ -239,7 +250,8 @@ def main(command_line_args=sys.argv[1:]): analysis, analyse_repo, args.csv_path, - ui_mode + ui_mode, + args ) exit() @@ -278,7 +290,7 @@ def main(command_line_args=sys.argv[1:]): analyse(cfg_list, analysis_type=analysis) - vulnerability_log = find_vulnerabilities( + vulnerabilities = find_vulnerabilities( cfg_list, analysis, ui_mode, @@ -287,7 +299,10 @@ def main(command_line_args=sys.argv[1:]): args.trigger_word_file ) ) - vulnerability_log.print_report() + if args.json: + json.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) if args.draw_cfg: if args.output_filename: @@ -295,9 +310,9 @@ def main(command_line_args=sys.argv[1:]): else: draw_cfgs(cfg_list) if args.print: - l = print_lattice(cfg_list, analysis) + lattice = print_lattice(cfg_list, analysis) - print_table(l) + print_table(lattice) for i, e in enumerate(cfg_list): print('############## CFG number: ', i) print(e) @@ -311,7 +326,7 @@ def main(command_line_args=sys.argv[1:]): pprint(project_modules) if args.create_database: - create_database(cfg_list, vulnerability_log) + create_database(cfg_list, vulnerabilities) if args.draw_lattice: draw_lattices(cfg_list) @@ -325,7 +340,7 @@ def main(command_line_args=sys.argv[1:]): cfg_to_file(cfg_list) verbose_cfg_to_file(cfg_list) lattice_to_file(cfg_list, analysis) - vulnerabilities_to_file(vulnerability_log) + vulnerabilities_to_file(vulnerabilities) else: if args.def_use_chain: def_use_chain_to_file(cfg_list) @@ -338,7 +353,7 @@ def main(command_line_args=sys.argv[1:]): if args.lattice: lattice_to_file(cfg_list, analysis) if args.vulnerabilities: - vulnerabilities_to_file(vulnerability_log) + vulnerabilities_to_file(vulnerabilities) if __name__ == '__main__': diff --git a/pyt/analysis_base.py b/pyt/analysis_base.py index fb1f8f8b..8a4bbcf6 100644 --- a/pyt/analysis_base.py +++ b/pyt/analysis_base.py @@ -1,5 +1,9 @@ """This module contains a base class for the analysis component used in PyT.""" -from abc import ABCMeta, abstractmethod + +from abc import ( + ABCMeta, + abstractmethod +) class AnalysisBase(metaclass=ABCMeta): diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 1dc11c65..985eee70 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -1,5 +1,6 @@ """This module contains helper function. Useful when working with the ast module.""" + import ast import os import subprocess diff --git a/pyt/draw.py b/pyt/draw.py index 2852691b..7dbf378a 100644 --- a/pyt/draw.py +++ b/pyt/draw.py @@ -1,4 +1,5 @@ """Draws CFG.""" + import argparse from itertools import permutations from subprocess import call @@ -103,7 +104,6 @@ def draw_cfg(cfg, output_filename='output'): class Node(): - def __init__(self, s, parent, children=None): self.s = s self.parent = parent diff --git a/pyt/expr_visitor.py b/pyt/expr_visitor.py index 0fbfa4d0..410d3b97 100644 --- a/pyt/expr_visitor.py +++ b/pyt/expr_visitor.py @@ -451,7 +451,7 @@ def return_handler( for node in function_nodes: # Only `Return`s and `Raise`s can be of type ConnectToExitNode if isinstance(node, ConnectToExitNode): - # Create e.g. ¤call_1 = ret_func_foo RestoreNode + # Create e.g. ~call_1 = ret_func_foo RestoreNode LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + get_call_names_as_string(call_node.func) return_node = RestoreNode( @@ -478,11 +478,11 @@ def process_function(self, call_node, definition): Visit and get function nodes. (visit_and_get_function_nodes) Loop through each save_N_LHS node and create an e.g. foo = save_1_foo or, if foo was a call arg, foo = arg_mapping[foo]. (restore_saved_local_scope) - Create e.g. ¤call_1 = ret_func_foo RestoreNode. (return_handler) + Create e.g. ~call_1 = ret_func_foo RestoreNode. (return_handler) Notes: Page 31 in the original thesis, but changed a little. - We don't have to return the ¤call_1 = ret_func_foo RestoreNode made in return_handler, + We don't have to return the ~call_1 = ret_func_foo RestoreNode made in return_handler, because it's the last node anyway, that we return in this function. e.g. ret_func_foo gets assigned to visit_Return. diff --git a/pyt/formatters/json.py b/pyt/formatters/json.py new file mode 100644 index 00000000..ad875216 --- /dev/null +++ b/pyt/formatters/json.py @@ -0,0 +1,33 @@ +"""This formatter outputs the issues in JSON.""" + +import json +from datetime import datetime + + +def report( + vulnerabilities, + fileobj +): + """ + Prints issues in JSON format. + + Args: + vulnerabilities: list of vulnerabilities to report + fileobj: The output file object, which may be sys.stdout + """ + TZ_AGNOSTIC_FORMAT = "%Y-%m-%dT%H:%M:%SZ" + time_string = datetime.utcnow().strftime(TZ_AGNOSTIC_FORMAT) + + machine_output = { + 'generated_at': time_string, + 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] + } + + result = json.dumps( + machine_output, + indent=4, + sort_keys=True + ) + + with fileobj: + fileobj.write(result) diff --git a/pyt/formatters/text.py b/pyt/formatters/text.py new file mode 100644 index 00000000..ace5cda4 --- /dev/null +++ b/pyt/formatters/text.py @@ -0,0 +1,23 @@ +"""This formatter outputs the issues as plain text.""" + + +def report( + vulnerabilities, + fileobj +): + """ + Prints issues in text format. + + Args: + vulnerabilities: list of vulnerabilities to report + fileobj: The output file object, which may be sys.stdout + """ + number_of_vulnerabilities = len(vulnerabilities) + with fileobj: + if number_of_vulnerabilities == 1: + fileobj.write('%s vulnerability found:' % number_of_vulnerabilities) + else: + fileobj.write('%s vulnerabilities found:' % number_of_vulnerabilities) + + for i, vulnerability in enumerate(vulnerabilities, start=1): + fileobj.write('Vulnerability {}:\n{}\n'.format(i, vulnerability)) diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index bf3732e3..d602a92f 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -1,13 +1,11 @@ """A generic framework adaptor that leaves route criteria to the caller.""" + import ast from .ast_helper import Arguments from .expr_visitor import make_cfg from .module_definitions import project_definitions -from .node_types import ( - AssignmentNode, - TaintedNode -) +from .node_types import TaintedNode class FrameworkAdaptor(): diff --git a/pyt/github_search.py b/pyt/github_search.py index 0c54ccbe..df0cb40c 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -197,7 +197,7 @@ def get_dates(start_date, end_date=date.today(), interval=7): delta.days % interval)) -def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv_path, ui_mode): +def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv_path, ui_mode, other_args): analyse_repo = analyse_repo_func for d in get_dates(start_date, interval=7): q = Query(SEARCH_REPO_URL, search_string, @@ -214,27 +214,27 @@ def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv try: r.clone() except NoEntryPathError as err: - save_repo_scan(repo, r.path, vulnerability_log=None, error=err) + save_repo_scan(repo, r.path, vulnerabilities=None, error=err) continue except: - save_repo_scan(repo, r.path, vulnerability_log=None, error='Other Error Unknown while cloning :-(') + save_repo_scan(repo, r.path, vulnerabilities=None, error='Other Error Unknown while cloning :-(') continue try: - vulnerability_log = analyse_repo(r, analysis_type, ui_mode) - if vulnerability_log.vulnerabilities: - save_repo_scan(repo, r.path, vulnerability_log) + vulnerabilities = analyse_repo(other_args, r, analysis_type, ui_mode) + if vulnerabilities: + save_repo_scan(repo, r.path, vulnerabilities) add_repo_to_csv(csv_path, r) else: - save_repo_scan(repo, r.path, vulnerability_log=None) + save_repo_scan(repo, r.path, vulnerabilities=None) r.clean_up() except SyntaxError as err: - save_repo_scan(repo, r.path, vulnerability_log=None, error=err) + save_repo_scan(repo, r.path, vulnerabilities=None, error=err) except IOError as err: - save_repo_scan(repo, r.path, vulnerability_log=None, error=err) + save_repo_scan(repo, r.path, vulnerabilities=None, error=err) except AttributeError as err: - save_repo_scan(repo, r.path, vulnerability_log=None, error=err) + save_repo_scan(repo, r.path, vulnerabilities=None, error=err) except: - save_repo_scan(repo, r.path, vulnerability_log=None, error='Other Error Unknown :-(') + save_repo_scan(repo, r.path, vulnerabilities=None, error='Other Error Unknown :-(') if __name__ == '__main__': for x in get_dates(date(2010, 1, 1), interval=93): diff --git a/pyt/liveness.py b/pyt/liveness.py index 0428c644..38935b94 100644 --- a/pyt/liveness.py +++ b/pyt/liveness.py @@ -64,7 +64,7 @@ def remove_id_assignment(self, JOIN, cfg_node): def add_vars_assignment(self, JOIN, cfg_node): rvars = list() if isinstance(cfg_node, BBorBInode): - # A conscience decision was made not to include e.g. ¤call_N's in RHS vars + # A conscience decision was made not to include e.g. ~call_N's in RHS vars rvars.extend(cfg_node.right_hand_side_variables) else: vv = VarsVisitor() diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index a5b2d490..bde14ce7 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -1,5 +1,6 @@ """This module handles module definitions which basically is a list of module definition.""" + import ast diff --git a/pyt/node_types.py b/pyt/node_types.py index cc2e0384..8451e9c3 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -47,6 +47,13 @@ def __init__(self, label, ast_node, *, line_number=None, path): self.ingoing = list() self.outgoing = list() + def as_dict(self): + return { + 'label': self.label.encode('utf-8').decode('utf-8'), + 'line_number': self.line_number, + 'path': self.path, + } + def connect(self, successor): """Connect this node to its successor node by setting its outgoing and the successors ingoing.""" @@ -132,8 +139,8 @@ class RaiseNode(Node, ConnectToExitNode): """CFG Node that represents a Raise statement.""" def __init__(self, ast_node, *, line_number, path): - label = LabelVisitor() - label.visit(ast_node) + label_visitor = LabelVisitor() + label_visitor.visit(ast_node) super().__init__( label_visitor.result, diff --git a/pyt/save.py b/pyt/save.py index 07a8a36d..5f0e3759 100644 --- a/pyt/save.py +++ b/pyt/save.py @@ -1,7 +1,11 @@ import os from datetime import datetime -from .definition_chains import build_def_use_chain, build_use_def_chain +from .definition_chains import ( + build_def_use_chain, + build_use_def_chain +) +from .formatters import text from .lattice import Lattice from .node_types import Node @@ -52,13 +56,13 @@ def insert_node(node): fd.write('NULL') fd.write(');') -def create_database(cfg_list, vulnerability_log): +def create_database(cfg_list, vulnerabilities): create_nodes_table() for cfg in cfg_list: for node in cfg.nodes: insert_node(node) create_vulnerabilities_table() - for vulnerability in vulnerability_log.vulnerabilities: + for vulnerability in vulnerabilities: insert_vulnerability(vulnerability) @@ -136,33 +140,19 @@ def lattice_to_file(cfg_list, analysis_type): fd.write('{} -> {}{}'.format(bin(v), str(k), os.linesep)) -def write_vlog_to_file(fd, vulnerability_log): - for i, vulnerability in enumerate(vulnerability_log.vulnerabilities, - start=1): - fd.write('Vulnerability {}:\n{}{}{}' - .format(i, vulnerability, os.linesep, os.linesep)) - - -def vulnerabilities_to_file(vulnerability_log): +def vulnerabilities_to_file(vulnerabilities): with Output('vulnerabilities.pyt') as fd: - number_of_vulnerabilities = len(vulnerability_log.vulnerabilities) - if number_of_vulnerabilities == 1: - fd.write('{} vulnerability found:{}' - .format(number_of_vulnerabilities, os.linesep)) - else: - fd.write('{} vulnerabilities found:{}' - .format(number_of_vulnerabilities, os.linesep)) - write_vlog_to_file(fd, vulnerability_log) + text.report(vulnerabilities, fd) -def save_repo_scan(repo, entry_path, vulnerability_log, error=None): +def save_repo_scan(repo, entry_path, vulnerabilities, error=None): with open('scan.pyt', 'a') as fd: fd.write('{}{}'.format(repo.name, os.linesep)) fd.write('{}{}'.format(repo.url, os.linesep)) fd.write('Entry file: {}{}'.format(entry_path, os.linesep)) fd.write('Scanned: {}{}'.format(datetime.now(), os.linesep)) - if vulnerability_log: - write_vlog_to_file(fd, vulnerability_log) + if vulnerabilities: + text.report(vulnerabilities, fd) else: fd.write('No vulnerabilities found.{}'.format(os.linesep)) if error: diff --git a/pyt/stmt_visitor.py b/pyt/stmt_visitor.py index dbf8a91e..c855c9bb 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/stmt_visitor.py @@ -529,7 +529,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): Nothing gets assigned to ret_func_foo in the builtin/blackbox case. Increments self.function_call_index each time it is called, we can refer to it as N in the comments. - Create e.g. ¤call_1 = ret_func_foo RestoreNode. + Create e.g. ~call_1 = ret_func_foo RestoreNode. Create e.g. temp_N_def_arg1 = call_arg1_label_visitor.result for each argument. Visit the arguments if they're calls. (save_def_args_in_temp) @@ -554,7 +554,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): index = call_label.result.find('(') - # Create e.g. ¤call_1 = ret_func_foo + # Create e.g. ~call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + call_label.result[:index] + '(' diff --git a/pyt/stmt_visitor_helper.py b/pyt/stmt_visitor_helper.py index beac36e3..21f1f666 100644 --- a/pyt/stmt_visitor_helper.py +++ b/pyt/stmt_visitor_helper.py @@ -10,7 +10,7 @@ ) -CALL_IDENTIFIER = '¤' +CALL_IDENTIFIER = '~' ConnectStatements = namedtuple( 'ConnectStatements', ( diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 158a4714..ba7debff 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -8,11 +8,9 @@ from .definition_chains import build_def_use_chain from .lattice import Lattice from .node_types import ( - AssignmentCallNode, AssignmentNode, BBorBInode, IfNode, - RestoreNode, TaintedNode ) from .right_hand_side_visitor import RHSVisitor @@ -20,7 +18,6 @@ from .vars_visitor import VarsVisitor from .vulnerability_helper import ( vuln_factory, - VulnerabilityLog, VulnerabilityType ) @@ -61,8 +58,8 @@ def __repr__(self): if self.trigger_word: output = '{} trigger_word is {}, '.format( - output, - self.trigger_word + output, + self.trigger_word ) return ( @@ -82,8 +79,7 @@ def identify_triggers( Args: cfg(CFG): CFG to find sources, sinks and sanitisers in. - sources(tuple): list of sources, - a source is a (source, sanitiser) tuple. + sources(tuple): list of sources, a source is a (source, sanitiser) tuple. sinks(tuple): list of sources, a sink is a (sink, sanitiser) tuple. Returns: @@ -336,7 +332,7 @@ def how_vulnerable( for i, current_node in enumerate(chain): if current_node in sanitiser_nodes: vuln_deets['sanitiser'] = current_node - vuln_deets['definite'] = True + vuln_deets['confident'] = True return VulnerabilityType.SANITISED if isinstance(current_node, BBorBInode): @@ -348,7 +344,7 @@ def how_vulnerable( user_says = input( 'Is the return value of {} with tainted argument "{}" vulnerable? (Y/n)'.format( current_node.label, - chain[i-1].left_hand_side + chain[i - 1].left_hand_side ) ).lower() if user_says.startswith('n'): @@ -361,7 +357,7 @@ def how_vulnerable( if potential_sanitiser: vuln_deets['sanitiser'] = potential_sanitiser - vuln_deets['definite'] = False + vuln_deets['confident'] = False return VulnerabilityType.SANITISED return VulnerabilityType.TRUE @@ -466,21 +462,21 @@ def get_vulnerability( def find_vulnerabilities_in_cfg( cfg, - vulnerability_log, definitions, lattice, ui_mode, - blackbox_mapping + blackbox_mapping, + vulnerabilities_list ): """Find vulnerabilities in a cfg. Args: cfg(CFG): The CFG to find vulnerabilities in. - vulnerability_log(vulnerability_log.VulnerabilityLog): The log in which to place found vulnerabilities. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. lattice(Lattice): the lattice we're analysing. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. + vulnerabilities_list(list): That we append to when we find vulnerabilities. """ triggers = identify_triggers( cfg, @@ -500,7 +496,7 @@ def find_vulnerabilities_in_cfg( blackbox_mapping ) if vulnerability: - vulnerability_log.append(vulnerability) + vulnerabilities_list.append(vulnerability) def find_vulnerabilities( @@ -518,23 +514,23 @@ def find_vulnerabilities( vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files Returns: - A VulnerabilityLog with found vulnerabilities. + A list of vulnerabilities. """ + vulnerabilities = list() definitions = parse(vulnerability_files.triggers) - with open(vulnerability_files.blackbox_mapping) as f: - blackbox_mapping = json.load(f) - vulnerability_log = VulnerabilityLog() + with open(vulnerability_files.blackbox_mapping) as infile: + blackbox_mapping = json.load(infile) for cfg in cfg_list: find_vulnerabilities_in_cfg( cfg, - vulnerability_log, definitions, Lattice(cfg.nodes, analysis_type), ui_mode, - blackbox_mapping + blackbox_mapping, + vulnerabilities ) - with open(vulnerability_files.blackbox_mapping, 'w') as f: - json.dump(blackbox_mapping, f, indent=4) + with open(vulnerability_files.blackbox_mapping, 'w') as outfile: + json.dump(blackbox_mapping, outfile, indent=4) - return vulnerability_log + return vulnerabilities diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerability_helper.py index c1068c3d..832160e0 100644 --- a/pyt/vulnerability_helper.py +++ b/pyt/vulnerability_helper.py @@ -1,57 +1,39 @@ -"""This module contains vulnerability helpers. - -Mostly is contains logs to give precise information - about where a vulnerability is located. -The log is printed to standard output. +"""This module contains vulnerability types and helpers. It is only used in vulnerabilities.py """ from enum import Enum -class VulnerabilityLog(): - """Log that consists of vulnerabilities.""" - - def __init__(self): - """Initialise list of vulnerabilities.""" - self.vulnerabilities = list() - - def append(self, vulnerability): - """Add vulnerability to the vulnerabilities list.""" - self.vulnerabilities.append(vulnerability) - - def print_report(self): - """Print list of vulnerabilities.""" - number_of_vulnerabilities = len(self.vulnerabilities) - if number_of_vulnerabilities == 1: - print('%s vulnerability found:' % number_of_vulnerabilities) - else: - print('%s vulnerabilities found:' % number_of_vulnerabilities) +class VulnerabilityType(Enum): + FALSE = 0 + SANITISED = 1 + TRUE = 2 + UNKNOWN = 3 - for i, vulnerability in enumerate(self.vulnerabilities, start=1): - print('Vulnerability {}:\n{}\n'.format(i, vulnerability)) +def vuln_factory(vulnerability_type): + if vulnerability_type == VulnerabilityType.UNKNOWN: + return UnknownVulnerability + elif vulnerability_type == VulnerabilityType.SANITISED: + return SanitisedVulnerability + else: + return Vulnerability -class Reassigned(): - def __init__(self, reassignment_nodes): - self.reassignment_nodes = reassignment_nodes - def __str__(self): - reassignment = '' - if self.reassignment_nodes: - reassignment += '\nReassigned in:\n\t' - reassignment += '\n\t'.join([ - 'File: ' + node.path + '\n' + - '\t > Line ' + str(node.line_number) + ': ' + node.label - for node in self.reassignment_nodes - ]) - return reassignment +def _get_reassignment_str(reassignment_nodes): + reassignments = '' + if reassignment_nodes: + reassignments += '\nReassigned in:\n\t' + reassignments += '\n\t'.join([ + 'File: ' + node.path + '\n' + + '\t > Line ' + str(node.line_number) + ': ' + node.label + for node in reassignment_nodes + ]) + return reassignments class Vulnerability(): - """Vulnerability containing the source and the sources trigger word, - the sink and the sinks trigger word.""" - def __init__( self, source, @@ -77,7 +59,7 @@ def _remove_sink_from_secondary_nodes(self): def __str__(self): """Pretty printing of a vulnerability.""" - reassigned_str = Reassigned(self.reassignment_nodes) + reassigned_str = _get_reassignment_str(self.reassignment_nodes) return ( 'File: {}\n' ' > User input at line {}, trigger word "{}":\n' @@ -92,68 +74,59 @@ def __str__(self): ) ) + def as_dict(self): + return { + 'source': self.source.as_dict(), + 'source_trigger_word': self.source_trigger_word, + 'sink': self.sink.as_dict(), + 'sink_trigger_word': self.sink_trigger_word, + 'type': self.__class__.__name__, + 'reassignment_nodes': [node.as_dict() for node in self.reassignment_nodes] + } -class SanitisedVulnerability(Vulnerability): - """A sanitised vulnerability containing the source and the sources - trigger word, the sink and the sinks trigger word. - Also containing the sanitiser.""" +class SanitisedVulnerability(Vulnerability): def __init__( self, - source, - source_trigger_word, - sink, - sink_trigger_word, - reassignment_nodes, + confident, sanitiser, - definite + **kwargs ): - """Set source, sink and sanitiser information.""" - super().__init__( - source, - source_trigger_word, - sink, - sink_trigger_word, - reassignment_nodes - ) + super().__init__(**kwargs) + self.confident = confident self.sanitiser = sanitiser - self.definite = definite def __str__(self): """Pretty printing of a vulnerability.""" return ( super().__str__() + '\nThis vulnerability is ' + - ('' if self.definite else 'potentially ') + + ('' if self.confident else 'potentially ') + 'sanitised by: ' + str(self.sanitiser) ) + def as_dict(self): + output = super().as_dict() + output['sanitiser'] = self.sanitiser.as_dict() + output['confident'] = self.confident + return output -class UnknownVulnerability(Vulnerability): - """An unknown vulnerability containing the source and the sources - trigger word, the sink and the sinks trigger word. - Also containing the blackbox assignment.""" +class UnknownVulnerability(Vulnerability): def __init__( self, - source, - source_trigger_word, - sink, - sink_trigger_word, - reassignment_nodes, - unknown_assignment + unknown_assignment, + **kwargs ): - """Set source, sink and blackbox assignment information.""" - super().__init__( - source, - source_trigger_word, - sink, - sink_trigger_word, - reassignment_nodes - ) + super().__init__(**kwargs) self.unknown_assignment = unknown_assignment + def as_dict(self): + output = super().as_dict() + output['unknown_assignment'] = self.unknown_assignment.as_dict() + return output + def __str__(self): """Pretty printing of a vulnerability.""" return ( @@ -161,19 +134,3 @@ def __str__(self): '\nThis vulnerability is unknown due to: ' + str(self.unknown_assignment) ) - - -class VulnerabilityType(Enum): - FALSE = 0 - SANITISED = 1 - TRUE = 2 - UNKNOWN = 3 - - -def vuln_factory(vulnerability_type): - if vulnerability_type == VulnerabilityType.UNKNOWN: - return UnknownVulnerability - elif vulnerability_type == VulnerabilityType.SANITISED: - return SanitisedVulnerability - else: - return Vulnerability diff --git a/tests/cfg_test.py b/tests/cfg_test.py index b0980ea6..1dcde561 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -73,10 +73,10 @@ def test_for_complete(self): exit_node = 7 self.assertEqual(self.cfg.nodes[for_node].label,'for x in range(3):') - self.assertEqual(self.cfg.nodes[body_1].label, '¤call_1 = ret_print(x)') + self.assertEqual(self.cfg.nodes[body_1].label, '~call_1 = ret_print(x)') self.assertEqual(self.cfg.nodes[body_2].label, 'y += 1') - self.assertEqual(self.cfg.nodes[else_body_1].label, "¤call_2 = ret_print('Final: %s' % x)") - self.assertEqual(self.cfg.nodes[else_body_2].label, '¤call_3 = ret_print(y)') + self.assertEqual(self.cfg.nodes[else_body_1].label, "~call_2 = ret_print('Final: %s' % x)") + self.assertEqual(self.cfg.nodes[else_body_2].label, '~call_3 = ret_print(y)') self.assertEqual(self.cfg.nodes[next_node].label, 'x = 3') self.assertInCfg([(for_node, entry), @@ -124,10 +124,10 @@ def test_for_line_numbers(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) for_node = self.nodes['for x in range(3):'] - body_1 = self.nodes['¤call_1 = ret_print(x)'] + body_1 = self.nodes['~call_1 = ret_print(x)'] body_2 = self.nodes['y += 1'] - else_body_1 = self.nodes["¤call_2 = ret_print('Final: %s' % x)"] - else_body_2 = self.nodes['¤call_3 = ret_print(y)'] + else_body_1 = self.nodes["~call_2 = ret_print('Final: %s' % x)"] + else_body_2 = self.nodes['~call_3 = ret_print(y)'] next_node = self.nodes['x = 3'] self.assertLineNumber(for_node, 1) @@ -200,14 +200,14 @@ def test_orelse(self): print_a5 = 3 except_im = 4 except_im_body_1 = 5 - value_equal_call_2 = 6 # value = ¤call_2 + value_equal_call_2 = 6 # value = ~call_2 print_wagyu = 7 save_node = 8 assign_to_temp = 9 assign_from_temp = 10 function_entry = 11 ret_of_subprocess_call = 12 - ret_does_this_kill_us_equal_call_5 = 13 # ret_does_this_kill_us = ¤call_5 + ret_does_this_kill_us_equal_call_5 = 13 # ret_does_this_kill_us = ~call_5 function_exit = 14 restore_node = 15 return_handler = 16 @@ -530,10 +530,10 @@ def test_assignment_multi_target_call(self): # This assert means N should be connected to N+1 self.assertInCfg([(1,0),(2,1),(3,2),(4,3),(5,4)]) - self.assertEqual(assignment_to_call1.label, '¤call_1 = ret_int(5)') - self.assertEqual(assignment_to_x.label, 'x = ¤call_1') - self.assertEqual(assignment_to_call2.label, '¤call_2 = ret_int(4)') - self.assertEqual(assignment_to_y.label, 'y = ¤call_2') + self.assertEqual(assignment_to_call1.label, '~call_1 = ret_int(5)') + self.assertEqual(assignment_to_x.label, 'x = ~call_1') + self.assertEqual(assignment_to_call2.label, '~call_2 = ret_int(4)') + self.assertEqual(assignment_to_y.label, 'y = ~call_2') def test_assignment_multi_target_line_numbers(self): self.cfg_create_from_file('example/example_inputs/assignment_two_targets.py') @@ -585,7 +585,7 @@ def test_assign_list_comprehension(self): self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[1] - self.assertEqual(call.label, "¤call_1 = ret_''.join((x.n for x in range(16)))") + self.assertEqual(call.label, "~call_1 = ret_''.join((x.n for x in range(16)))") l = zip(range(1, length), range(length)) @@ -684,7 +684,7 @@ def test_simple_function(self): def test_function_line_numbers(self): path = 'example/example_inputs/simple_function.py' self.cfg_create_from_file(path) - + input_call = self.cfg.nodes[1] y_assignment = self.cfg.nodes[2] save_y = self.cfg.nodes[3] @@ -1116,7 +1116,7 @@ def test_call_with_attribute(self): self.assert_length(self.cfg.nodes, expected_length=length) call = self.cfg.nodes[2] - self.assertEqual(call.label, "¤call_1 = ret_request.args.get('param', 'not set')") + self.assertEqual(call.label, "~call_1 = ret_request.args.get('param', 'not set')") l = zip(range(1, length), range(length)) self.assertInCfg(list(l)) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index b899fbc6..987a58de 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -25,9 +25,9 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] [-p | -vp | -trim | -i] [-t TRIGGER_WORD_FILE] - [-b BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] + [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] - [-li | -re | -rt] [-ppm] + [-j] [-li | -re | -rt] [-ppm] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" diff --git a/tests/import_test.py b/tests/import_test.py index 09afd69e..1ccecd07 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -25,8 +25,8 @@ def test_import(self): "Function Entry B", "ret_B = s", "Exit B", - "¤call_1 = ret_B", - "b = ¤call_1", + "~call_1 = ret_B", + "b = ~call_1", "save_2_b = b", "temp_2_s = 'sss'", "s = temp_2_s", @@ -34,8 +34,8 @@ def test_import(self): "ret_A.B = s", "Exit A.B", "b = save_2_b", - "¤call_2 = ret_A.B", - "c = ¤call_2", + "~call_2 = ret_A.B", + "c = ~call_2", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -59,8 +59,8 @@ def test_import_as(self): "Function Entry B", "ret_B = s", "Exit B", - "¤call_1 = ret_B", - "b = ¤call_1", + "~call_1 = ret_B", + "b = ~call_1", "save_2_b = b", "temp_2_s = 'sss'", "s = temp_2_s", @@ -68,8 +68,8 @@ def test_import_as(self): "ret_foo.B = s", "Exit A.B", "b = save_2_b", - "¤call_2 = ret_foo.B", - "c = ¤call_2", + "~call_2 = ret_foo.B", + "c = ~call_2", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -91,19 +91,19 @@ def test_from_file_import_star(self): "Function Entry B", "ret_B = s", "Exit B", - "¤call_1 = ret_B", + "~call_1 = ret_B", "temp_2_s = 'minute'", "s = temp_2_s", "Function Entry C", "ret_C = s + 'see'", "Exit C", - "¤call_2 = ret_C", + "~call_2 = ret_C", "temp_3_s = 'IPA'", "s = temp_3_s", "Function Entry D", "ret_D = s + 'dee'", "Exit D", - "¤call_3 = ret_D", + "~call_3 = ret_D", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -129,13 +129,13 @@ def test_from_package_import_star(self): "Module Exit folder", "Module Exit package_star", "Function Entry A.cobia", - "¤call_2 = ret_print('A')", + "~call_2 = ret_print('A')", "Exit A.cobia", "Function Entry B.al", - "¤call_4 = ret_print('B')", + "~call_4 = ret_print('B')", "Exit B.al", "Function Entry folder.C.pastor", - "¤call_6 = ret_print('C')", + "~call_6 = ret_print('C')", "Exit folder.C.pastor", "Exit module"] @@ -162,13 +162,13 @@ def test_from_package_import_star_with_alias(self): "Module Exit folder", "Module Exit package_star_with_alias", "Function Entry husk.cobia", - "¤call_2 = ret_print('A')", + "~call_2 = ret_print('A')", "Exit husk.cobia", "Function Entry meringue.al", - "¤call_4 = ret_print('B')", + "~call_4 = ret_print('B')", "Exit meringue.al", "Function Entry corn.mousse.pastor", - "¤call_6 = ret_print('C')", + "~call_6 = ret_print('C')", "Exit corn.mousse.pastor", "Exit module"] @@ -193,7 +193,7 @@ def test_from_directory(self): "Function Entry bar.H", "ret_bar.H = s + 'end'", "Exit bar.H", - "¤call_1 = ret_bar.H", + "~call_1 = ret_bar.H", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -217,8 +217,8 @@ def test_relative_level_1(self): "Function Entry B", "ret_B = s", "Exit B", - "¤call_1 = ret_B", - "b = ¤call_1", + "~call_1 = ret_B", + "b = ~call_1", "save_2_b = b", "temp_2_s = 'sss'", "s = temp_2_s", @@ -226,8 +226,8 @@ def test_relative_level_1(self): "ret_A.B = s", "Exit A.B", "b = save_2_b", - "¤call_2 = ret_A.B", - "c = ¤call_2", + "~call_2 = ret_A.B", + "c = ~call_2", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -262,8 +262,8 @@ def test_relative_between_folders(self): "Function Entry H", "ret_H = s + 'end'", "Exit H", - "¤call_1 = ret_H", - "result = ¤call_1", + "~call_1 = ret_H", + "result = ~call_1", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -286,7 +286,7 @@ def test_relative_from_directory(self): "Function Entry bar.H", "ret_bar.H = s + 'end'", "Exit bar.H", - "¤call_1 = ret_bar.H", + "~call_1 = ret_bar.H", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -309,8 +309,8 @@ def test_from_dot(self): 'Function Entry A.B', 'ret_A.B = s', 'Exit A.B', - '¤call_1 = ret_A.B', - 'c = ¤call_1', + '~call_1 = ret_A.B', + 'c = ~call_1', 'Exit module'] @@ -334,8 +334,8 @@ def test_from_dot_dot(self): 'Function Entry A.B', 'ret_A.B = s', 'Exit A.B', - '¤call_1 = ret_A.B', - 'c = ¤call_1', + '~call_1 = ret_A.B', + 'c = ~call_1', 'Exit module'] @@ -365,8 +365,8 @@ def test_multiple_files_with_aliases(self): "Function Entry A.cosme", "ret_A.cosme = s + 'aaa'", "Exit A.cosme", - "¤call_1 = ret_A.cosme", - "a = ¤call_1", + "~call_1 = ret_A.cosme", + "a = ~call_1", "save_2_a = a", "temp_2_s = 'mutton'", "s = temp_2_s", @@ -374,8 +374,8 @@ def test_multiple_files_with_aliases(self): "ret_keens.foo = s + 'bee'", "Exit B.foo", "a = save_2_a", - "¤call_2 = ret_keens.foo", - "b = ¤call_2", + "~call_2 = ret_keens.foo", + "b = ~call_2", "save_3_a = a", "save_3_b = b", "temp_3_s = 'tasting'", @@ -385,8 +385,8 @@ def test_multiple_files_with_aliases(self): "Exit C.foo", "a = save_3_a", "b = save_3_b", - "¤call_3 = ret_per_se.foo", - "c = ¤call_3", + "~call_3 = ret_per_se.foo", + "c = ~call_3", "save_4_a = a", "save_4_b = b", "save_4_c = c", @@ -398,8 +398,8 @@ def test_multiple_files_with_aliases(self): "a = save_4_a", "b = save_4_b", "c = save_4_c", - "¤call_4 = ret_duck_house.foo", - "d = ¤call_4", + "~call_4 = ret_duck_house.foo", + "d = ~call_4", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): @@ -422,8 +422,8 @@ def test_multiple_functions_with_aliases(self): "Function Entry B", "ret_keens = s", "Exit B", - "¤call_1 = ret_keens", - "a = ¤call_1", + "~call_1 = ret_keens", + "a = ~call_1", "save_2_a = a", "temp_2_s = 'tasting'", "s = temp_2_s", @@ -431,8 +431,8 @@ def test_multiple_functions_with_aliases(self): "ret_C = s + 'see'", "Exit C", "a = save_2_a", - "¤call_2 = ret_C", - "b = ¤call_2", + "~call_2 = ret_C", + "b = ~call_2", "save_3_a = a", "save_3_b = b", "temp_3_s = 'peking'", @@ -442,8 +442,8 @@ def test_multiple_functions_with_aliases(self): "Exit D", "a = save_3_a", "b = save_3_b", - "¤call_3 = ret_duck_house", - "c = ¤call_3", + "~call_3 = ret_duck_house", + "c = ~call_3", "Exit module"] @@ -467,7 +467,7 @@ def test_package_with_function(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function", "Function Entry package_with_function.StarbucksVisitor", - "¤call_2 = ret_print('Iced Mocha')", + "~call_2 = ret_print('Iced Mocha')", "Exit package_with_function.StarbucksVisitor", "Exit module"] @@ -491,7 +491,7 @@ def test_package_with_function_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function_and_alias", "Function Entry package_with_function_and_alias.EatalyVisitor", - "¤call_2 = ret_print('Iced Mocha')", + "~call_2 = ret_print('Iced Mocha')", "Exit package_with_function_and_alias.EatalyVisitor", "Exit module"] @@ -513,7 +513,7 @@ def test_package_with_file(self): "Module Exit Starbucks", "Module Exit package_with_file", "Function Entry package_with_file.Starbucks.Tea", - "¤call_2 = ret_print('Teavana Green')", + "~call_2 = ret_print('Teavana Green')", "Exit package_with_file.Starbucks.Tea", "Exit module"] @@ -535,7 +535,7 @@ def test_package_with_file_and_alias(self): "Module Exit Starbucks", "Module Exit package_with_file_and_alias", "Function Entry package_with_file_and_alias.Eataly.Tea", - "¤call_2 = ret_print('Teavana Green')", + "~call_2 = ret_print('Teavana Green')", "Exit package_with_file_and_alias.Eataly.Tea", "Exit module"] @@ -559,7 +559,7 @@ def test_package_with_folder(self): "Module Exit nested_folder_with_init", "Module Exit package_with_folder", "Function Entry package_with_folder.nested_folder_with_init.moose.fast", - "¤call_2 = ret_print('real fast')", + "~call_2 = ret_print('real fast')", "Exit package_with_folder.nested_folder_with_init.moose.fast", "Exit module"] @@ -583,7 +583,7 @@ def test_package_with_folder_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_folder_and_alias", "Function Entry package_with_folder_and_alias.heyo.moose.fast", - "¤call_2 = ret_print('real fast')", + "~call_2 = ret_print('real fast')", "Exit package_with_folder_and_alias.heyo.moose.fast", "Exit module"] @@ -607,7 +607,7 @@ def test_from_package_with_function(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function", "Function Entry StarbucksVisitor", - "¤call_2 = ret_print('Iced Mocha')", + "~call_2 = ret_print('Iced Mocha')", "Exit StarbucksVisitor", "Exit module"] @@ -631,7 +631,7 @@ def test_from_package_with_function_and_alias(self): "Module Exit nested_folder_with_init", "Module Exit package_with_function_and_alias", "Function Entry EatalyVisitor", - "¤call_2 = ret_print('Iced Mocha')", + "~call_2 = ret_print('Iced Mocha')", "Exit EatalyVisitor", "Exit module"] @@ -653,7 +653,7 @@ def test_from_package_with_file(self): "Module Exit Starbucks", "Module Exit package_with_file", "Function Entry Starbucks.Tea", - "¤call_2 = ret_print('Teavana Green')", + "~call_2 = ret_print('Teavana Green')", "Exit Starbucks.Tea", "Exit module"] @@ -675,7 +675,7 @@ def test_from_package_with_file_and_alias(self): "Module Exit Starbucks", "Module Exit package_with_file_and_alias", "Function Entry Eataly.Tea", - "¤call_2 = ret_print('Teavana Green')", + "~call_2 = ret_print('Teavana Green')", "Exit Eataly.Tea", "Exit module"] diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 1fea4ec0..0d4cba10 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -25,16 +25,16 @@ def test_nested_user_defined_function_calls(self): "ret_inner = inner_ret_val", "Exit inner", "foo = save_2_foo", - "¤call_2 = ret_inner", - "temp_1_outer_arg = ¤call_2", + "~call_2 = ret_inner", + "temp_1_outer_arg = ~call_2", "outer_arg = temp_1_outer_arg", "Function Entry outer", "outer_ret_val = outer_arg + 'hey'", "ret_outer = outer_ret_val", "Exit outer", "foo = save_1_foo", - "¤call_1 = ret_outer", - "abc = ¤call_1", + "~call_1 = ret_outer", + "abc = ~call_1", "Exit module"] for node, expected_label in zip(self.cfg.nodes, EXPECTED): diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index cb5d3d7e..1a02cce5 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -11,11 +11,11 @@ def test_linear_program(self): EXPECTED = [ "Label: Entry module:", - "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: y = x - 1: Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()" + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" ] i = 0 for k, v in constraint_table.items(): @@ -30,12 +30,12 @@ def test_if_program(self): EXPECTED = [ "Label: Entry module:", - "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: if x > 0:: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: y = x + 1: Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()" + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: if x > 0:: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: y = x + 1: Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" ] i = 0 for k, v in constraint_table.items(): @@ -49,20 +49,20 @@ def test_example(self): EXPECTED = [ "Label: Entry module:", - "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: ¤call_2 = ret_int(x): Label: ¤call_2 = ret_int(x), Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: x = ¤call_2: Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()" + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()" ] i = 0 for k, v in constraint_table.items(): @@ -90,16 +90,16 @@ def test_while(self): EXPECTED = [ "Label: Entry module: ", - "Label: ¤call_2 = ret_input(): Label: ¤call_2 = ret_input()", - "Label: ¤call_1 = ret_int(¤call_2): Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: while x < 10:: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input(", - "Label: x = x + 1: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: if x == 5:: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: BreakNode: Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: x = 6: Label: x = 6, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()", - "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ¤call_1, Label: ¤call_1 = ret_int(¤call_2), Label: ¤call_2 = ret_input()" + "Label: ~call_2 = ret_input(): Label: ~call_2 = ret_input()", + "Label: ~call_1 = ret_int(~call_2): Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: while x < 10:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input(", + "Label: x = x + 1: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: if x == 5:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: BreakNode: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: x = 6: Label: x = 6, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: Exit module: Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()" ] i = 0 for k, v in constraint_table.items(): diff --git a/tests/reaching_definitions_test.py b/tests/reaching_definitions_test.py index 13805f12..b76e4643 100644 --- a/tests/reaching_definitions_test.py +++ b/tests/reaching_definitions_test.py @@ -10,11 +10,11 @@ def test_linear_program(self): EXPECTED = [ "Label: Entry module: ", - "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: y = x - 1: Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: ¤call_2 = ret_print(x): Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: Exit module: Label: ¤call_2 = ret_print(x), Label: y = x - 1, Label: x = ¤call_1, Label: ¤call_1 = ret_input()", + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", ] i = 0 for k, v in constraint_table.items(): @@ -28,20 +28,20 @@ def test_example(self): EXPECTED = [ "Label: Entry module: ", - "Label: ¤call_1 = ret_input(): Label: ¤call_1 = ret_input()", - "Label: x = ¤call_1: Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: ¤call_2 = ret_int(x): Label: ¤call_2 = ret_int(x), Label: x = ¤call_1, Label: ¤call_1 = ret_input()", - "Label: x = ¤call_2: Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: x = x - y: Label: z = z - 1, Label: x = x - y, Label: y = x / 2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: y = x / 2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: ¤call_3 = ret_print(x): Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", - "Label: Exit module: Label: ¤call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ¤call_2, Label: ¤call_2 = ret_int(x), Label: ¤call_1 = ret_input()", + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x - y: Label: z = z - 1, Label: x = x - y, Label: y = x / 2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: y = x / 2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", ] i = 0 for k, v in constraint_table.items(): diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 4d049129..a92197cf 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -1,23 +1,19 @@ -import ast import os from .base_test_case import BaseTestCase -from pyt import trigger_definitions_parser, vulnerabilities from pyt.argument_helpers import ( default_blackbox_mapping_file, default_trigger_word_file, UImode, VulnerabilityFiles ) -from pyt.ast_helper import get_call_names_as_string -from pyt.constraint_table import constraint_table, initialize_constraint_table +from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_flask_route_function -from pyt.lattice import Lattice -from pyt.node_types import Node from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis +from pyt.vulnerabilities import find_vulnerabilities class EngineTest(BaseTestCase): @@ -37,7 +33,7 @@ def run_analysis(self, path): analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - return vulnerabilities.find_vulnerabilities( + return find_vulnerabilities( cfg_list, ReachingDefinitionsTaintAnalysis, UImode.NORMAL, @@ -48,47 +44,47 @@ def run_analysis(self, path): ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection.py') + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') + self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_absolute_from_file_command_injection_3(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') + self.assert_length(vulnerabilities, expected_length=0) def test_blackbox_library_call(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code_across_files/blackbox_library_call.py > User input at line 12, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('suggestion') + ~call_1 = ret_request.args.get('suggestion') Reassigned in: File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 12: param = ¤call_1 + > Line 12: param = ~call_1 File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 15: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + > Line 15: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') File: example/vulnerable_code_across_files/blackbox_library_call.py - > Line 15: command = ¤call_2 + > Line 15: command = ~call_2 File: example/vulnerable_code_across_files/blackbox_library_call.py > Line 16: hey = command File: example/vulnerable_code_across_files/blackbox_library_call.py > reaches line 17, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(hey, shell=True) - This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + ~call_3 = ret_subprocess.call(hey, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_builtin_with_user_defined_inner(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/builtin_with_user_defined_inner.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/nested_functions_code/builtin_with_user_defined_inner.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/builtin_with_user_defined_inner.py > User input at line 16, trigger word "form[": @@ -107,37 +103,37 @@ def test_builtin_with_user_defined_inner(self): File: example/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: req_param = save_2_req_param File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: ¤call_2 = ret_inner + > Line 19: ~call_2 = ret_inner File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: ¤call_1 = ret_scrypt.encrypt(¤call_2) + > Line 19: ~call_1 = ret_scrypt.encrypt(~call_2) File: example/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: foo = ¤call_1 + > Line 19: foo = ~call_1 File: example/nested_functions_code/builtin_with_user_defined_inner.py > reaches line 20, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(foo, shell=True) - This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) + ~call_3 = ret_subprocess.call(foo, shell=True) + This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_result_of_blackbox_nested(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_blackbox_nested.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_result_of_blackbox_nested.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ¤call_2 = ret_scrypt.encrypt(req_param) + > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ¤call_1 = ret_scrypt.encrypt(¤call_2) + > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: result = ¤call_1 + > Line 13: result = ~call_1 File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > reaches line 14, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(result, shell=True) - This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encrypt(req_param) + ~call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt(req_param) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py @@ -145,24 +141,24 @@ def test_sink_with_result_of_blackbox_nested(self): req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ¤call_2 = ret_scrypt.encrypt(req_param) + > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ¤call_1 = ret_scrypt.encrypt(¤call_2) + > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: result = ¤call_1 + > Line 13: result = ~call_1 File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py > reaches line 14, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(result, shell=True) - This vulnerability is unknown due to: Label: ¤call_1 = ret_scrypt.encrypt(¤call_2) + ~call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) or self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_result_of_user_defined_nested(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > User input at line 16, trigger word "form[": @@ -183,9 +179,9 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: req_param = save_2_req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: ¤call_2 = ret_inner + > Line 17: ~call_2 = ret_inner File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: temp_1_outer_arg = ¤call_2 + > Line 17: temp_1_outer_arg = ~call_2 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: outer_arg = temp_1_outer_arg File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -195,32 +191,32 @@ def test_sink_with_result_of_user_defined_nested(self): File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: req_param = save_1_req_param File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: ¤call_1 = ret_outer + > Line 17: ~call_1 = ret_outer File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: result = ¤call_1 + > Line 17: result = ~call_1 File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py > reaches line 18, trigger word "subprocess.call(": - ¤call_3 = ret_subprocess.call(result, shell=True) + ~call_3 = ret_subprocess.call(result, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - + def test_sink_with_blackbox_inner(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_blackbox_inner.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_blackbox_inner.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_blackbox_inner.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ¤call_3 = ret_scrypt.encypt(req_param) + > Line 14: ~call_3 = ret_scrypt.encypt(req_param) File: example/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ¤call_2 = ret_scrypt.encypt(¤call_3) + > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) File: example/nested_functions_code/sink_with_blackbox_inner.py > reaches line 14, trigger word "subprocess.call(": - ¤call_1 = ret_subprocess.call(¤call_2, shell=True) - This vulnerability is unknown due to: Label: ¤call_2 = ret_scrypt.encypt(¤call_3) + ~call_1 = ret_subprocess.call(~call_2, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encypt(~call_3) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ @@ -229,22 +225,22 @@ def test_sink_with_blackbox_inner(self): req_param = request.form['suggestion'] Reassigned in: File: example/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ¤call_3 = ret_scrypt.encypt(req_param) + > Line 14: ~call_3 = ret_scrypt.encypt(req_param) File: example/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ¤call_2 = ret_scrypt.encypt(¤call_3) + > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) File: example/nested_functions_code/sink_with_blackbox_inner.py > reaches line 14, trigger word "subprocess.call(": - ¤call_1 = ret_subprocess.call(¤call_2, shell=True) - This vulnerability is unknown due to: Label: ¤call_3 = ret_scrypt.encypt(req_param) + ~call_1 = ret_subprocess.call(~call_2, shell=True) + This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) or self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_user_defined_inner(self): - vulnerability_log = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/nested_functions_code/sink_with_user_defined_inner.py > User input at line 16, trigger word "form[": @@ -265,9 +261,9 @@ def test_sink_with_user_defined_inner(self): File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 10: req_param = save_3_req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: ¤call_3 = ret_inner + > Line 18: ~call_3 = ret_inner File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: temp_2_outer_arg = ¤call_3 + > Line 18: temp_2_outer_arg = ~call_3 File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 6: outer_arg = temp_2_outer_arg File: example/nested_functions_code/sink_with_user_defined_inner.py @@ -277,22 +273,22 @@ def test_sink_with_user_defined_inner(self): File: example/nested_functions_code/sink_with_user_defined_inner.py > Line 6: req_param = save_2_req_param File: example/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: ¤call_2 = ret_outer + > Line 18: ~call_2 = ret_outer File: example/nested_functions_code/sink_with_user_defined_inner.py > reaches line 18, trigger word "subprocess.call(": - ¤call_1 = ret_subprocess.call(¤call_2, shell=True) + ~call_1 = ret_subprocess.call(~call_2, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_find_vulnerabilities_import_file_command_injection(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_import_file_command_injection_2(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection_2.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection_2.py') + self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_import_file_command_injection_3(self): - vulnerability_log = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') + self.assert_length(vulnerabilities, expected_length=0) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 454e2b29..65538734 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -12,17 +12,13 @@ UImode, VulnerabilityFiles ) -from pyt.constraint_table import( - constraint_table, - initialize_constraint_table -) +from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import( is_django_view_function, is_flask_route_function ) -from pyt.lattice import Lattice from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -148,45 +144,45 @@ def run_analysis(self, path): def test_find_vulnerabilities_assign_other_var(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') + self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection.py') + self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection_2(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) + vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') + self.assert_length(vulnerabilities, expected_length=1) def test_XSS_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS.py > User input at line 6, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS.py - > Line 6: param = ¤call_1 + > Line 6: param = ~call_1 File: example/vulnerable_code/XSS.py - > Line 9: ¤call_3 = ret_make_response(¤call_4) + > Line 9: ~call_3 = ret_make_response(~call_4) File: example/vulnerable_code/XSS.py - > Line 9: resp = ¤call_3 + > Line 9: resp = ~call_3 File: example/vulnerable_code/XSS.py > Line 10: ret_XSS1 = resp File: example/vulnerable_code/XSS.py > reaches line 9, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + ~call_4 = ret_html.replace('{{ param }}', param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_command_injection_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/command_injection.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/command_injection.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/command_injection.py > User input at line 15, trigger word "form[": @@ -196,22 +192,22 @@ def test_command_injection_result(self): > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' File: example/vulnerable_code/command_injection.py > reaches line 18, trigger word "subprocess.call(": - ¤call_1 = ret_subprocess.call(command, shell=True) + ~call_1 = ret_subprocess.call(command, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal.py > User input at line 15, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') + ~call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal.py - > Line 15: image_name = ¤call_1 + > Line 15: image_name = ~call_1 File: example/vulnerable_code/path_traversal.py > Line 6: save_2_image_name = image_name File: example/vulnerable_code/path_traversal.py @@ -229,27 +225,27 @@ def test_path_traversal_result(self): File: example/vulnerable_code/path_traversal.py > Line 6: image_name = save_2_image_name File: example/vulnerable_code/path_traversal.py - > Line 19: ¤call_2 = ret_outer + > Line 19: ~call_2 = ret_outer File: example/vulnerable_code/path_traversal.py - > Line 19: foo = ¤call_2 + > Line 19: foo = ~call_2 File: example/vulnerable_code/path_traversal.py > reaches line 20, trigger word "send_file(": - ¤call_4 = ret_send_file(foo) + ~call_4 = ret_send_file(foo) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_ensure_saved_scope(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/ensure_saved_scope.py > User input at line 15, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') + ~call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/ensure_saved_scope.py - > Line 15: image_name = ¤call_1 + > Line 15: image_name = ~call_1 File: example/vulnerable_code/ensure_saved_scope.py > Line 6: save_2_image_name = image_name File: example/vulnerable_code/ensure_saved_scope.py @@ -267,112 +263,112 @@ def test_ensure_saved_scope(self): File: example/vulnerable_code/ensure_saved_scope.py > Line 6: image_name = save_2_image_name File: example/vulnerable_code/ensure_saved_scope.py - > Line 19: ¤call_2 = ret_outer + > Line 19: ~call_2 = ret_outer File: example/vulnerable_code/ensure_saved_scope.py - > Line 19: foo = ¤call_2 + > Line 19: foo = ~call_2 File: example/vulnerable_code/ensure_saved_scope.py > reaches line 20, trigger word "send_file(": - ¤call_4 = ret_send_file(image_name) + ~call_4 = ret_send_file(image_name) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal_sanitised.py > User input at line 8, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') + ~call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal_sanitised.py - > Line 8: image_name = ¤call_1 + > Line 8: image_name = ~call_1 File: example/vulnerable_code/path_traversal_sanitised.py - > Line 10: ¤call_2 = ret_image_name.replace('..', '') + > Line 10: ~call_2 = ret_image_name.replace('..', '') File: example/vulnerable_code/path_traversal_sanitised.py - > Line 10: image_name = ¤call_2 + > Line 10: image_name = ~call_2 File: example/vulnerable_code/path_traversal_sanitised.py - > Line 12: ¤call_4 = ret_os.path.join(¤call_5, image_name) + > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) File: example/vulnerable_code/path_traversal_sanitised.py - > Line 12: ret_cat_picture = ¤call_3 + > Line 12: ret_cat_picture = ~call_3 File: example/vulnerable_code/path_traversal_sanitised.py > reaches line 12, trigger word "send_file(": - ¤call_3 = ret_send_file(¤call_4) - This vulnerability is sanitised by: Label: ¤call_2 = ret_image_name.replace('..', '') + ~call_3 = ret_send_file(~call_4) + This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_2_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/path_traversal_sanitised_2.py > User input at line 8, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('image_name') + ~call_1 = ret_request.args.get('image_name') Reassigned in: File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 8: image_name = ¤call_1 + > Line 8: image_name = ~call_1 File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 12: ¤call_3 = ret_os.path.join(¤call_4, image_name) + > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 12: ret_cat_picture = ¤call_2 + > Line 12: ret_cat_picture = ~call_2 File: example/vulnerable_code/path_traversal_sanitised_2.py > reaches line 12, trigger word "send_file(": - ¤call_2 = ret_send_file(¤call_3) + ~call_2 = ret_send_file(~call_3) This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sql_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/sql/sqli.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/sql/sqli.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/sql/sqli.py > User input at line 26, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/sql/sqli.py - > Line 26: param = ¤call_1 + > Line 26: param = ~call_1 File: example/vulnerable_code/sql/sqli.py - > Line 27: result = ¤call_2 + > Line 27: result = ~call_2 File: example/vulnerable_code/sql/sqli.py > reaches line 27, trigger word "execute(": - ¤call_2 = ret_db.engine.execute(param) + ~call_2 = ret_db.engine.execute(param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_form_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_form.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_form.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_form.py > User input at line 14, trigger word "form[": data = request.form['my_text'] Reassigned in: File: example/vulnerable_code/XSS_form.py - > Line 15: ¤call_1 = ret_make_response(¤call_2) + > Line 15: ~call_1 = ret_make_response(~call_2) File: example/vulnerable_code/XSS_form.py - > Line 15: resp = ¤call_1 + > Line 15: resp = ~call_1 File: example/vulnerable_code/XSS_form.py > Line 17: ret_example2_action = resp File: example/vulnerable_code/XSS_form.py > reaches line 15, trigger word "replace(": - ¤call_2 = ret_html1.replace('{{ data }}', data) + ~call_2 = ret_html1.replace('{{ data }}', data) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_url_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_url.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_url.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_url.py > User input at line 4, trigger word "Framework function URL parameter": @@ -381,118 +377,118 @@ def test_XSS_url_result(self): File: example/vulnerable_code/XSS_url.py > Line 6: param = url File: example/vulnerable_code/XSS_url.py - > Line 9: ¤call_2 = ret_make_response(¤call_3) + > Line 9: ~call_2 = ret_make_response(~call_3) File: example/vulnerable_code/XSS_url.py - > Line 9: resp = ¤call_2 + > Line 9: resp = ~call_2 File: example/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp File: example/vulnerable_code/XSS_url.py > reaches line 9, trigger word "replace(": - ¤call_3 = ret_html.replace('{{ param }}', param) + ~call_3 = ret_html.replace('{{ param }}', param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_no_vuln_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') + self.assert_length(vulnerabilities, expected_length=0) def test_XSS_reassign_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_reassign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_reassign.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_reassign.py > User input at line 6, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_reassign.py - > Line 6: param = ¤call_1 + > Line 6: param = ~call_1 File: example/vulnerable_code/XSS_reassign.py > Line 8: param = param + '' File: example/vulnerable_code/XSS_reassign.py - > Line 11: ¤call_3 = ret_make_response(¤call_4) + > Line 11: ~call_3 = ret_make_response(~call_4) File: example/vulnerable_code/XSS_reassign.py - > Line 11: resp = ¤call_3 + > Line 11: resp = ~call_3 File: example/vulnerable_code/XSS_reassign.py > Line 12: ret_XSS1 = resp File: example/vulnerable_code/XSS_reassign.py > reaches line 11, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', param) + ~call_4 = ret_html.replace('{{ param }}', param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_sanitised_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_sanitised.py > User input at line 7, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_sanitised.py - > Line 7: param = ¤call_1 + > Line 7: param = ~call_1 File: example/vulnerable_code/XSS_sanitised.py - > Line 9: ¤call_2 = ret_Markup.escape(param) + > Line 9: ~call_2 = ret_Markup.escape(param) File: example/vulnerable_code/XSS_sanitised.py - > Line 9: param = ¤call_2 + > Line 9: param = ~call_2 File: example/vulnerable_code/XSS_sanitised.py - > Line 12: ¤call_4 = ret_make_response(¤call_5) + > Line 12: ~call_4 = ret_make_response(~call_5) File: example/vulnerable_code/XSS_sanitised.py - > Line 12: resp = ¤call_4 + > Line 12: resp = ~call_4 File: example/vulnerable_code/XSS_sanitised.py > Line 13: ret_XSS1 = resp File: example/vulnerable_code/XSS_sanitised.py > reaches line 12, trigger word "replace(": - ¤call_5 = ret_html.replace('{{ param }}', param) - This vulnerability is sanitised by: Label: ¤call_2 = ret_Markup.escape(param) + ~call_5 = ret_html.replace('{{ param }}', param) + This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_assign_no_vuln_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=0) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') + self.assert_length(vulnerabilities, expected_length=0) def test_XSS_variable_assign_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_assign.py > User input at line 6, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_assign.py - > Line 6: param = ¤call_1 + > Line 6: param = ~call_1 File: example/vulnerable_code/XSS_variable_assign.py > Line 8: other_var = param + '' File: example/vulnerable_code/XSS_variable_assign.py - > Line 11: ¤call_3 = ret_make_response(¤call_4) + > Line 11: ~call_3 = ret_make_response(~call_4) File: example/vulnerable_code/XSS_variable_assign.py - > Line 11: resp = ¤call_3 + > Line 11: resp = ~call_3 File: example/vulnerable_code/XSS_variable_assign.py > Line 12: ret_XSS1 = resp File: example/vulnerable_code/XSS_variable_assign.py > reaches line 11, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', other_var) + ~call_4 = ret_html.replace('{{ param }}', other_var) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_multiple_assign_result(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, trigger word "request.args.get(": - ¤call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 6: param = ¤call_1 + > Line 6: param = ~call_1 File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 8: other_var = param + '' File: example/vulnerable_code/XSS_variable_multiple_assign.py @@ -500,14 +496,14 @@ def test_XSS_variable_multiple_assign_result(self): File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 12: another_one = not_the_same_var + '' File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: ¤call_3 = ret_make_response(¤call_4) + > Line 15: ~call_3 = ret_make_response(~call_4) File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: resp = ¤call_3 + > Line 15: resp = ~call_3 File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 17: ret_XSS1 = resp File: example/vulnerable_code/XSS_variable_multiple_assign.py > reaches line 15, trigger word "replace(": - ¤call_4 = ret_html.replace('{{ param }}', another_one) + ~call_4 = ret_html.replace('{{ param }}', another_one) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -543,9 +539,9 @@ def run_analysis(self, path): ) def test_django_view_param(self): - vulnerability_log = self.run_analysis('example/vulnerable_code/django_XSS.py') - self.assert_length(vulnerability_log.vulnerabilities, expected_length=2) - vulnerability_description = str(vulnerability_log.vulnerabilities[0]) + vulnerabilities = self.run_analysis('example/vulnerable_code/django_XSS.py') + self.assert_length(vulnerabilities, expected_length=2) + vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: example/vulnerable_code/django_XSS.py @@ -553,9 +549,9 @@ def test_django_view_param(self): param Reassigned in: File: example/vulnerable_code/django_XSS.py - > Line 5: ret_xss1 = ¤call_1 + > Line 5: ret_xss1 = ~call_1 File: example/vulnerable_code/django_XSS.py > reaches line 5, trigger word "render(": - ¤call_1 = ret_render(request, 'templates/xss.html', 'param'param) + ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From af3ed6a1072a2a0bc1e1900f104f0dec3f186072 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 2 Apr 2018 20:07:39 -0700 Subject: [PATCH 226/541] Added 'No vulnerabilities found.' instead of '0 vulnerabilities found:' --- pyt/formatters/text.py | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/pyt/formatters/text.py b/pyt/formatters/text.py index ace5cda4..bfbe26f3 100644 --- a/pyt/formatters/text.py +++ b/pyt/formatters/text.py @@ -2,22 +2,24 @@ def report( - vulnerabilities, - fileobj + vulnerabilities, + fileobj ): - """ - Prints issues in text format. + """ + Prints issues in text format. - Args: - vulnerabilities: list of vulnerabilities to report - fileobj: The output file object, which may be sys.stdout - """ - number_of_vulnerabilities = len(vulnerabilities) - with fileobj: - if number_of_vulnerabilities == 1: - fileobj.write('%s vulnerability found:' % number_of_vulnerabilities) - else: - fileobj.write('%s vulnerabilities found:' % number_of_vulnerabilities) + Args: + vulnerabilities: list of vulnerabilities to report + fileobj: The output file object, which may be sys.stdout + """ + number_of_vulnerabilities = len(vulnerabilities) + with fileobj: + if number_of_vulnerabilities == 0: + fileobj.write('No vulnerabilities found.\n') + elif number_of_vulnerabilities == 1: + fileobj.write('%s vulnerability found:\n' % number_of_vulnerabilities) + else: + fileobj.write('%s vulnerabilities found:\n' % number_of_vulnerabilities) - for i, vulnerability in enumerate(vulnerabilities, start=1): - fileobj.write('Vulnerability {}:\n{}\n'.format(i, vulnerability)) + for i, vulnerability in enumerate(vulnerabilities, start=1): + fileobj.write('Vulnerability {}:\n{}\n'.format(i, vulnerability)) From c376808fcb7d9c43d7f77f876d34a5fc7190d929 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 2 Apr 2018 20:13:01 -0700 Subject: [PATCH 227/541] Remove sort_keys=True from json.py --- pyt/formatters/json.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyt/formatters/json.py b/pyt/formatters/json.py index ad875216..6016a6ee 100644 --- a/pyt/formatters/json.py +++ b/pyt/formatters/json.py @@ -25,8 +25,7 @@ def report( result = json.dumps( machine_output, - indent=4, - sort_keys=True + indent=4 ) with fileobj: From bad261e0a159e98277ccfcc0a7563d0ac3a380b6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 2 Apr 2018 20:23:47 -0700 Subject: [PATCH 228/541] Exclude formatters from test coverage, manual testing isn't that bad here, right? --- .coveragerc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.coveragerc b/.coveragerc index 4b99120a..3b2dc417 100644 --- a/.coveragerc +++ b/.coveragerc @@ -17,6 +17,8 @@ omit = pyt/__main__.py pyt/definition_chains.py pyt/draw.py + pyt/formatters/json.py + pyt/formatters/text.py pyt/github_search.py pyt/liveness.py pyt/repo_runner.py From d0435d704732f63e69a69ae0b68e3d83d8e30c14 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 2 Apr 2018 21:12:57 -0700 Subject: [PATCH 229/541] Add extra newline in text.py output --- pyt/formatters/text.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/formatters/text.py b/pyt/formatters/text.py index bfbe26f3..7961b05e 100644 --- a/pyt/formatters/text.py +++ b/pyt/formatters/text.py @@ -22,4 +22,4 @@ def report( fileobj.write('%s vulnerabilities found:\n' % number_of_vulnerabilities) for i, vulnerability in enumerate(vulnerabilities, start=1): - fileobj.write('Vulnerability {}:\n{}\n'.format(i, vulnerability)) + fileobj.write('Vulnerability {}:\n{}\n\n'.format(i, vulnerability)) From b57b889d424995e421b8a69cc1774db926138dc3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 8 Apr 2018 13:02:39 -0700 Subject: [PATCH 230/541] Bumped version to 0.2.0, fixed pyt.formatters ModuleNotFoundError issue --- pyt/formatters/__init__.py | 0 setup.py | 18 +++++++++--------- 2 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 pyt/formatters/__init__.py diff --git a/pyt/formatters/__init__.py b/pyt/formatters/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/setup.py b/setup.py index 2f46df5a..292eeaae 100644 --- a/setup.py +++ b/setup.py @@ -1,17 +1,20 @@ +from setuptools import find_packages from setuptools import setup -long_description = """""" + +VERSION = '0.2.0' setup( name='python-taint', - version='0.12', + packages=find_packages(exclude=(['tests*'])), + version=VERSION, description='Find security vulnerabilities in Python web applications' ' using static analysis.', - long_description=long_description, + long_description="Check out PyT on `GitHub `_!", url='https://github.com/python-security/pyt', author='python-security', author_email='mr.thalmann@gmail.com', - download_url='https://github.com/python-security/pyt/archive/0.12.tar.gz', + download_url='https://github.com/python-security/pyt/archive/{}.tar.gz'.format(VERSION), license='GPLv2', classifiers=[ 'Development Status :: 3 - Alpha', @@ -22,12 +25,9 @@ 'Topic :: Scientific/Engineering', 'Topic :: Utilities', 'License :: OSI Approved :: GNU General Public License v2 (GPLv2)', - 'Programming Language :: Python :: 3.5' - ], - keywords=['security', 'vulnerability', 'web', 'flask', 'django', 'pyt', 'static', 'analysis'], - packages=[ - 'pyt' + 'Programming Language :: Python :: 3.6' ], + keywords=['security', 'vulnerability', 'web', 'flask', 'django', 'static-analysis', 'program-analysis'], install_requires=[ 'graphviz==0.4.10', 'requests~=2.12', From c4cd04c1ffe79a1a64a2efb96e88aed40a2af1ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 9 Apr 2018 23:02:59 +0300 Subject: [PATCH 231/541] Create baseline.py just for checking error. it's not totally done --- pyt/baseline.py | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 pyt/baseline.py diff --git a/pyt/baseline.py b/pyt/baseline.py new file mode 100644 index 00000000..da5d1dd6 --- /dev/null +++ b/pyt/baseline.py @@ -0,0 +1,27 @@ +from pprint import pprint +import json + + +def isSame(res, base): + if res == base: + return(True) + return(False) + +def compare(results, baseline): + + baseline = json.load(open(baseline)) + results = json.load(open(results)) + result = {'generated_at':results["generated_at"], 'vulnerabilities':[]} + + if "generated_at" in results and baseline: + if not isSame(results["generated_at"], baseline["generated_at"]): + pprint(results["generated_at"]) + + if "vulnerabilities" in results and baseline: + if not isSame(results["vulnerabilities"], baseline["vulnerabilities"]): + for i in range(len(results["vulnerabilities"])): + if results["vulnerabilities"][i] not in baseline["vulnerabilities"]: + result["vulnerabilities"].append(results["vulnerabilities"][i]) + + result = json.dumps(result, indent=4) + print(result) From fb388e9ab07a35cdad324dce80ae4ab0a12240d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 9 Apr 2018 23:03:42 +0300 Subject: [PATCH 232/541] Update __main__.py --- pyt/__main__.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index a07b3796..1bffd661 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -50,6 +50,7 @@ vulnerabilities_to_file ) from .vulnerabilities import find_vulnerabilities +from .baseline import compare def parse_args(args): @@ -136,6 +137,11 @@ def parse_args(args): parser.add_argument('-ppm', '--print-project-modules', help='Print project modules.', action='store_true') + parser.add_argument('-b', '--baseline', + help='path of a baseline report to compare against ' + '(only JSON-formatted files are accepted)', + type=str, + default=False) save_parser = subparsers.add_parser('save', help='Save menu.') save_parser.set_defaults(which='save') @@ -167,6 +173,7 @@ def parse_args(args): help='Output everything to file.', action='store_true') + search_parser = subparsers.add_parser( 'github_search', help='Searches through github and runs PyT' @@ -242,6 +249,7 @@ def main(command_line_args=sys.argv[1:]): repo.clean_up() exit() + if args.which == 'search': set_github_api_token() scan_github( @@ -303,7 +311,9 @@ def main(command_line_args=sys.argv[1:]): json.report(vulnerabilities, sys.stdout) else: text.report(vulnerabilities, sys.stdout) - + if args.baseline: + baseline = args.baseline + compare(json.report(vulnerabilities, sys.stdout),baseline) if args.draw_cfg: if args.output_filename: draw_cfgs(cfg_list, args.output_filename) From 4bfa8152d3a7434a62e6505cf4d9bdd6b7b4a43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 9 Apr 2018 23:11:49 +0300 Subject: [PATCH 233/541] Update baseline.py --- pyt/baseline.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/baseline.py b/pyt/baseline.py index da5d1dd6..d7cad402 100644 --- a/pyt/baseline.py +++ b/pyt/baseline.py @@ -10,7 +10,7 @@ def isSame(res, base): def compare(results, baseline): baseline = json.load(open(baseline)) - results = json.load(open(results)) + #results = json.load(open(results)) result = {'generated_at':results["generated_at"], 'vulnerabilities':[]} if "generated_at" in results and baseline: From 2545cb55678d69bae1eea890190454f534b92b9b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 9 Apr 2018 19:08:25 -0700 Subject: [PATCH 234/541] [setup.py] Unpin reqs, include package_data, bump to 0.30 --- setup.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/setup.py b/setup.py index 292eeaae..e0ed08c5 100644 --- a/setup.py +++ b/setup.py @@ -2,12 +2,17 @@ from setuptools import setup -VERSION = '0.2.0' +VERSION = '0.30' + setup( name='python-taint', packages=find_packages(exclude=(['tests*'])), version=VERSION, + include_package_data=True, + package_data={ + 'pyt': ['*.json', '*.pyt'], + }, description='Find security vulnerabilities in Python web applications' ' using static analysis.', long_description="Check out PyT on `GitHub `_!", @@ -29,11 +34,10 @@ ], keywords=['security', 'vulnerability', 'web', 'flask', 'django', 'static-analysis', 'program-analysis'], install_requires=[ - 'graphviz==0.4.10', - 'requests~=2.12', - 'GitPython==2.0.8' + 'graphviz>=0.4.10', + 'requests>=2.12', + 'GitPython>=2.0.8' ], - include_package_data=True, entry_points={ 'console_scripts': [ 'pyt = pyt:main' From 2e47df7559bdd5bdac749e4cf522746ca86fe2a5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 10 Apr 2018 12:02:22 -0700 Subject: [PATCH 235/541] Add PyPI badge to README --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index e9338d60..be16dc05 100644 --- a/README.rst +++ b/README.rst @@ -7,6 +7,9 @@ .. image:: https://codeclimate.com/github/python-security/pyt/badges/coverage.svg :target: https://codeclimate.com/github/python-security/pyt/coverage +.. image:: https://badge.fury.io/py/python-taint.svg + :target: https://badge.fury.io/py/python-taint + Python Taint ============ From e824d1eb2ef469ef0d55d87c1653cd4383604856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 12 Apr 2018 00:11:24 +0300 Subject: [PATCH 236/541] Update __main__.py --- pyt/__main__.py | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 1bffd661..35944193 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -50,7 +50,7 @@ vulnerabilities_to_file ) from .vulnerabilities import find_vulnerabilities -from .baseline import compare +from .baseline import get_vulnerabilities_not_in_baseline def parse_args(args): @@ -308,12 +308,20 @@ def main(command_line_args=sys.argv[1:]): ) ) if args.json: - json.report(vulnerabilities, sys.stdout) + if args.baseline: + baseline = args.baseline + vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities,baseline) + json.report(vulnerabilities, sys.stdout) + else: + json.report(vulnerabilities, sys.stdout) else: - text.report(vulnerabilities, sys.stdout) - if args.baseline: - baseline = args.baseline - compare(json.report(vulnerabilities, sys.stdout),baseline) + if args.baseline: + baseline = args.baseline + vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities,baseline) + text.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) + if args.draw_cfg: if args.output_filename: draw_cfgs(cfg_list, args.output_filename) From 26a3bc0c3139844a4727430831057a30e65b060d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 12 Apr 2018 00:11:58 +0300 Subject: [PATCH 237/541] Update baseline.py --- pyt/baseline.py | 30 +++++++----------------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/pyt/baseline.py b/pyt/baseline.py index d7cad402..e957148a 100644 --- a/pyt/baseline.py +++ b/pyt/baseline.py @@ -1,27 +1,11 @@ -from pprint import pprint import json - -def isSame(res, base): - if res == base: - return(True) - return(False) - -def compare(results, baseline): - +def get_vulnerabilities_not_in_baseline(vulnerabilities, baseline): baseline = json.load(open(baseline)) - #results = json.load(open(results)) - result = {'generated_at':results["generated_at"], 'vulnerabilities':[]} - - if "generated_at" in results and baseline: - if not isSame(results["generated_at"], baseline["generated_at"]): - pprint(results["generated_at"]) - - if "vulnerabilities" in results and baseline: - if not isSame(results["vulnerabilities"], baseline["vulnerabilities"]): - for i in range(len(results["vulnerabilities"])): - if results["vulnerabilities"][i] not in baseline["vulnerabilities"]: - result["vulnerabilities"].append(results["vulnerabilities"][i]) - result = json.dumps(result, indent=4) - print(result) + output = list() + vulnerabilities =[vuln.as_dict() for vuln in vulnerabilities] + for vuln in vulnerabilities: + if vuln not in baseline['vulnerabilities']: + output.append(vuln) + return(output) From 217eb0f6603fae611a6035f48ec33b64049c0749 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 12 Apr 2018 00:19:00 +0300 Subject: [PATCH 238/541] Update json.py --- pyt/formatters/json.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/pyt/formatters/json.py b/pyt/formatters/json.py index 6016a6ee..6875daf4 100644 --- a/pyt/formatters/json.py +++ b/pyt/formatters/json.py @@ -17,11 +17,16 @@ def report( """ TZ_AGNOSTIC_FORMAT = "%Y-%m-%dT%H:%M:%SZ" time_string = datetime.utcnow().strftime(TZ_AGNOSTIC_FORMAT) - - machine_output = { - 'generated_at': time_string, - 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] - } + try: + machine_output = { + 'generated_at': time_string, + 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] + } + except: + machine_output = { + 'generated_at': time_string, + 'vulnerabilities': [vuln for vuln in vulnerabilities] + } result = json.dumps( machine_output, From e8bbf3f53f9c3965b96a3dd5be18a3b72e701a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 12 Apr 2018 22:21:09 +0300 Subject: [PATCH 239/541] Update baseline.py --- pyt/baseline.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyt/baseline.py b/pyt/baseline.py index e957148a..b6a57deb 100644 --- a/pyt/baseline.py +++ b/pyt/baseline.py @@ -1,5 +1,6 @@ import json + def get_vulnerabilities_not_in_baseline(vulnerabilities, baseline): baseline = json.load(open(baseline)) From a530a69c263bb7b5e5202dafb38b9fd29196cb38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 12 Apr 2018 22:55:31 +0300 Subject: [PATCH 240/541] Update __main__.py --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 35944193..86ff3ebf 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -14,6 +14,7 @@ UImode ) from .ast_helper import generate_ast +from .baseline import get_vulnerabilities_not_in_baseline from .constraint_table import ( initialize_constraint_table, print_table @@ -50,7 +51,6 @@ vulnerabilities_to_file ) from .vulnerabilities import find_vulnerabilities -from .baseline import get_vulnerabilities_not_in_baseline def parse_args(args): From fa2ef7e79553bf6fa6079a1b69c51dc48c1075d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 13 Apr 2018 12:20:43 +0300 Subject: [PATCH 241/541] Update baseline.py --- pyt/baseline.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/pyt/baseline.py b/pyt/baseline.py index b6a57deb..1e3258a0 100644 --- a/pyt/baseline.py +++ b/pyt/baseline.py @@ -3,10 +3,9 @@ def get_vulnerabilities_not_in_baseline(vulnerabilities, baseline): baseline = json.load(open(baseline)) - output = list() - vulnerabilities =[vuln.as_dict() for vuln in vulnerabilities] + vulnerabilities =[vuln for vuln in vulnerabilities] for vuln in vulnerabilities: - if vuln not in baseline['vulnerabilities']: + if vuln.as_dict() not in baseline['vulnerabilities']: output.append(vuln) return(output) From 4c9434b60bace1b9fc537368aa3f5944eeb027ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 13 Apr 2018 12:21:30 +0300 Subject: [PATCH 242/541] Update json.py --- pyt/formatters/json.py | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/pyt/formatters/json.py b/pyt/formatters/json.py index 6875daf4..efc95b95 100644 --- a/pyt/formatters/json.py +++ b/pyt/formatters/json.py @@ -10,23 +10,17 @@ def report( ): """ Prints issues in JSON format. - Args: vulnerabilities: list of vulnerabilities to report fileobj: The output file object, which may be sys.stdout """ TZ_AGNOSTIC_FORMAT = "%Y-%m-%dT%H:%M:%SZ" time_string = datetime.utcnow().strftime(TZ_AGNOSTIC_FORMAT) - try: - machine_output = { - 'generated_at': time_string, - 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] - } - except: - machine_output = { - 'generated_at': time_string, - 'vulnerabilities': [vuln for vuln in vulnerabilities] - } + + machine_output = { + 'generated_at': time_string, + 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] + } result = json.dumps( machine_output, From 458cf83623b18aa798fff670bb343bbfe8675076 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 13 Apr 2018 12:22:51 +0300 Subject: [PATCH 243/541] Update __main__.py --- pyt/__main__.py | 17 +++++------------ 1 file changed, 5 insertions(+), 12 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 86ff3ebf..4ceb67d1 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -307,20 +307,13 @@ def main(command_line_args=sys.argv[1:]): args.trigger_word_file ) ) + if args.baseline: + vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) + if args.json: - if args.baseline: - baseline = args.baseline - vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities,baseline) - json.report(vulnerabilities, sys.stdout) - else: - json.report(vulnerabilities, sys.stdout) + json.report(vulnerabilities, sys.stdout) else: - if args.baseline: - baseline = args.baseline - vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities,baseline) - text.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) + text.report(vulnerabilities, sys.stdout) if args.draw_cfg: if args.output_filename: From 8c4b03ab1029aa6738d96018f2fe3c1172da7aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 13 Apr 2018 12:38:51 +0300 Subject: [PATCH 244/541] update for baseline.py --- tests/command_line_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index 987a58de..a4663225 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -27,7 +27,7 @@ def test_no_args(self): [-p | -vp | -trim | -i] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] - [-j] [-li | -re | -rt] [-ppm] + [-j] [-li | -re | -rt] [-ppm] [-b BASELINE] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" From abbe248c4b2da9e7805ce65af7ee5cd672b38a3f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 14 Apr 2018 17:50:36 -0700 Subject: [PATCH 245/541] Delete the scan results folder, move it to the rtdpyt repo --- scan_results/archived_18_10_scan.pyt | 16590 --- scan_results/archived_24_10_scan.pyt | 139024 ------------------------ scan_results/archived_26_10_scan.pyt | 43642 -------- 3 files changed, 199256 deletions(-) delete mode 100644 scan_results/archived_18_10_scan.pyt delete mode 100644 scan_results/archived_24_10_scan.pyt delete mode 100644 scan_results/archived_26_10_scan.pyt diff --git a/scan_results/archived_18_10_scan.pyt b/scan_results/archived_18_10_scan.pyt deleted file mode 100644 index 7e8173e0..00000000 --- a/scan_results/archived_18_10_scan.pyt +++ /dev/null @@ -1,16590 +0,0 @@ -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 18:14:36.283896 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-11 18:14:38.118531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-11 18:14:39.802222 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-11 18:15:01.560131 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-11 18:15:31.945990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-11 18:15:34.648207 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-11 18:15:40.015333 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-11 18:15:40.525272 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-11 18:16:33.925018 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-11 18:16:36.461562 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-11 18:16:38.804206 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-11 18:16:41.854468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-11 18:16:44.056582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-11 18:17:33.470098 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-11 18:17:36.276229 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-11 18:17:38.585148 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-11 18:17:39.891936 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-11 18:17:44.604381 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-11 18:18:05.563985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-11 18:18:36.975871 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-11 18:18:38.464376 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-11 18:18:40.181802 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-11 18:18:41.982922 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-11 18:18:43.378892 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-11 18:18:44.759847 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-11 18:18:46.603485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-11 18:19:05.919632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-11 18:19:34.640362 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-11 18:19:38.116710 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-11 18:19:40.474051 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/skeleton/skeleton/__init__.py -Scanned: 2016-10-11 18:19:42.842073 -No vulnerabilities found. - - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-11 18:19:44.664503 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-11 18:19:47.693675 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-11 18:20:07.212612 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-11 18:20:34.666352 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-11 18:20:37.571363 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-11 18:20:39.976691 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-11 18:20:44.079990 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-11 18:20:46.200057 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/app/main.py -Scanned: 2016-10-11 18:20:47.420114 -No vulnerabilities found. - - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-11 18:20:48.703898 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-11 18:20:50.083954 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-11 18:21:07.497903 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-11 18:21:41.351971 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-11 18:21:43.098312 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-11 18:21:49.312440 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-11 18:21:50.924319 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-11 18:22:35.066156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-11 18:22:37.987421 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-11 18:22:42.941041 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-11 18:22:47.423300 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-11 18:22:48.702782 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-11 18:22:50.112654 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-11 18:22:51.349585 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:18:02.901113 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-11 20:18:04.733731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-11 20:18:06.463184 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-11 20:18:28.134558 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-11 20:18:58.811346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-11 20:19:01.387226 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-11 20:19:06.731978 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-11 20:19:08.554292 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-11 20:19:59.910739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-11 20:20:02.376825 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-11 20:20:04.670993 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-11 20:20:08.751428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-11 20:20:10.514371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-11 20:20:58.792617 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-11 20:21:02.665251 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-11 20:21:04.984108 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-11 20:21:06.288957 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-11 20:21:10.958518 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-11 20:21:31.831404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-11 20:22:03.188112 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-11 20:22:04.658253 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-11 20:22:06.362786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-11 20:22:08.117388 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-11 20:22:09.381476 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-11 20:22:10.656376 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-11 20:22:13.020246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-11 20:22:31.391063 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-11 20:22:59.763295 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-11 20:23:04.057223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-11 20:23:06.645265 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/skeleton/skeleton/__init__.py -Scanned: 2016-10-11 20:23:08.943721 -No vulnerabilities found. - - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-11 20:23:11.425157 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-11 20:23:14.777997 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-11 20:23:32.562510 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-11 20:23:59.907993 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-11 20:24:03.771246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-11 20:24:06.197794 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-11 20:24:09.673244 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-11 20:24:11.860935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/app/main.py -Scanned: 2016-10-11 20:24:13.103872 -No vulnerabilities found. - - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-11 20:24:14.388275 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-11 20:24:16.742093 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-11 20:24:32.193765 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-11 20:25:07.064759 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-11 20:25:09.813807 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-11 20:25:15.112722 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-11 20:25:17.793755 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-11 20:26:00.804157 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-11 20:26:04.598207 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-11 20:26:10.503276 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-11 20:26:12.854565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-11 20:26:14.077631 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-11 20:26:15.411397 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-11 20:26:17.688867 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-11 20:27:00.983942 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-11 20:27:04.753702 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-11 20:27:07.331298 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-11 20:27:10.570125 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-11 20:27:11.905794 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-11 20:27:16.453420 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-11 20:27:18.261312 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-11 20:27:34.357683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-11 20:28:05.200904 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-11 20:28:11.286584 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-11 20:28:13.024724 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-11 20:28:14.506566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-11 20:28:15.827475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-11 20:28:17.076736 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-11 20:28:18.609829 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-11 20:28:34.557573 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-11 20:29:08.108805 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-11 20:29:12.154045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-11 20:29:15.244469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-11 20:29:23.129953 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-11 20:29:26.674720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-11 20:29:28.074325 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-11 20:30:06.776461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-11 20:30:08.433792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-11 20:30:12.254774 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-11 20:30:17.552958 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-11 20:30:28.240315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-11 20:30:34.784109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-11 20:31:03.158769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-11 20:31:08.583387 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-11 20:31:15.171914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-11 20:31:16.640469 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-11 20:31:18.025292 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-11 20:31:25.571791 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:31:35.805946 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-11 20:32:03.340606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-11 20:32:08.773220 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-11 20:32:11.645504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-11 20:32:14.639639 -No vulnerabilities found. - - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-11 20:32:16.918063 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-11 20:32:18.436538 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/webapp/webapp/__init__.py -Scanned: 2016-10-11 20:32:35.963912 -No vulnerabilities found. - - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-11 20:33:16.298780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-11 20:33:17.767123 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-11 20:33:19.211552 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-11 20:33:29.962796 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-11 20:33:36.934717 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jmoiron/jmoiron.net. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:35:45.968871 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-11 20:35:47.816039 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-11 20:35:49.520772 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-11 20:36:12.624403 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-11 20:36:41.917490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-11 20:36:44.277824 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-11 20:36:49.538608 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-11 20:36:51.268231 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-11 20:37:43.676399 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-11 20:37:46.094982 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-11 20:37:48.392978 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-11 20:37:51.477595 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-11 20:37:53.332393 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-11 20:38:42.882299 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-11 20:38:45.768680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-11 20:38:48.090057 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-11 20:38:49.376864 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-11 20:38:54.057496 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-11 20:39:15.931396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-11 20:39:46.429910 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-11 20:39:47.898204 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-11 20:39:49.565852 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-11 20:39:51.370459 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-11 20:39:52.702048 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-11 20:39:54.012555 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-11 20:39:55.827702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-11 20:40:16.217215 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:42:36.743612 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-11 20:42:38.552705 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-11 20:42:40.260848 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-11 20:43:06.046684 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-11 20:43:32.250289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-11 20:43:35.133269 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-11 20:43:40.425365 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-11 20:43:42.261659 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-11 20:44:34.525610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-11 20:44:36.903381 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-11 20:44:39.291022 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-11 20:44:42.340859 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-11 20:44:44.200542 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-11 20:45:32.504830 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-11 20:45:37.378271 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-11 20:45:39.645429 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-11 20:45:41.034402 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-11 20:45:44.770003 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-11 20:46:09.650635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-11 20:46:38.025988 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-11 20:46:39.600106 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-11 20:46:41.327422 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-11 20:46:43.161709 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-11 20:46:44.513177 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-11 20:46:45.797387 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-11 20:46:47.654996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-11 20:47:10.000649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-11 20:47:33.570445 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-11 20:47:38.833148 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-11 20:47:41.220398 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:47:43.329781 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-11 20:47:45.213880 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-11 20:47:48.655874 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-11 20:48:11.280976 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-11 20:48:34.261254 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-11 20:48:39.138526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-11 20:48:40.610743 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-11 20:48:44.078267 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-11 20:48:46.279412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/app/main.py -Scanned: 2016-10-11 20:48:47.552567 -No vulnerabilities found. - - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-11 20:48:48.854078 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-11 20:48:50.216954 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-11 20:49:10.634653 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-11 20:49:41.657426 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-11 20:49:43.520256 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-11 20:49:49.936798 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-11 20:49:51.646827 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-11 20:50:34.942610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-11 20:50:41.483224 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-11 20:50:43.492102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-11 20:50:46.907168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-11 20:50:49.198148 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-11 20:50:50.551784 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-11 20:50:51.946271 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-11 20:51:35.848176 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-11 20:51:41.527399 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-11 20:51:43.164416 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-11 20:51:44.405603 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-11 20:51:45.831106 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-11 20:51:51.459423 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-11 20:51:53.291116 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-11 20:52:12.227586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-11 20:52:42.115718 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-11 20:52:45.255653 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-11 20:52:46.958417 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-11 20:52:48.473707 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-11 20:52:49.863513 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-11 20:52:51.127515 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-11 20:52:53.661894 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-11 20:53:12.131982 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-11 20:53:43.743938 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-11 20:53:45.755115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-11 20:53:48.841976 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-11 20:53:56.830004 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-11 20:54:00.399699 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-11 20:54:01.769239 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-11 20:54:43.029733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-11 20:54:44.610366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-11 20:54:46.511023 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-11 20:54:50.924599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-11 20:55:01.705222 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-11 20:55:13.114927 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-11 20:55:38.726118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-11 20:55:45.095413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-11 20:55:49.588402 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-11 20:55:51.028357 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-11 20:55:52.251325 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-11 20:55:58.752232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:56:13.333311 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-11 20:56:37.838407 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-11 20:56:45.283478 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-11 20:56:48.246922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-11 20:56:50.268491 -No vulnerabilities found. - - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-11 20:56:51.585840 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-11 20:56:53.134963 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-11 20:57:13.393638 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-11 20:57:51.343535 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-11 20:57:52.824851 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-11 20:57:54.323434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-11 20:58:03.090592 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 10:51:13.668182 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-12 10:51:14.636615 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-12 10:51:17.230215 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-12 10:51:39.714840 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-12 10:52:10.879643 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-12 10:52:11.928089 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-12 10:52:16.263660 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-12 10:52:17.787351 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-12 10:53:11.874384 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-12 10:53:15.325422 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-12 10:53:17.663919 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-12 10:53:18.635388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-12 10:53:19.139297 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-12 10:54:13.724573 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-12 10:54:14.209633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-12 10:54:17.425839 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-12 10:54:18.788238 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-12 10:54:22.158419 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-12 10:54:40.686327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-12 10:55:16.578803 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-12 10:55:18.073059 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-12 10:55:18.621464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-12 10:55:20.339051 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-12 10:55:21.666413 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-12 10:55:22.944759 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-12 10:55:23.442279 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-12 10:55:40.958702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-12 10:56:14.354096 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-12 10:56:18.942385 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-12 10:56:23.823614 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 10:56:25.847724 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-12 10:56:28.630445 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-12 10:56:34.301242 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-12 10:56:44.282652 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-12 10:57:14.620813 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-12 10:57:15.112022 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-12 10:57:20.435850 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-12 10:57:28.191712 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-12 10:57:28.731593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 10:57:29.215738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-12 10:57:30.433573 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-12 10:57:35.778860 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-12 10:57:43.186206 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-12 10:58:21.624757 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-12 10:58:26.355806 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-12 10:58:30.705084 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-12 10:58:37.406081 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-12 10:59:15.552737 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-12 10:59:18.793431 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-12 10:59:25.788838 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-12 10:59:30.212830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-12 10:59:31.937115 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-12 10:59:34.028492 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 10:59:36.312836 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-12 11:00:16.494760 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-12 11:00:18.638953 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-12 11:00:21.185543 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-12 11:00:27.472412 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-12 11:00:28.887407 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-12 11:00:35.099928 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 11:00:35.602345 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-12 11:00:44.121941 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 11:01:18.017175 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-12 11:01:28.054158 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-12 11:01:28.589605 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-12 11:01:31.074035 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-12 11:01:31.574720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-12 11:01:34.915753 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-12 11:01:36.447853 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-12 11:01:45.880468 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-12 11:02:23.447235 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-12 11:02:27.978172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-12 11:02:31.118557 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-12 11:02:40.262705 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-12 11:02:40.808059 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-12 11:02:42.212158 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-12 11:03:18.228825 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-12 11:03:18.749245 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-12 11:03:29.579930 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-12 11:03:32.048841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-12 11:03:42.021253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-12 11:03:46.522199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-12 11:04:19.155118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-12 11:04:19.650495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-12 11:04:30.222180 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-12 11:04:32.981106 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-12 11:04:34.330586 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-12 11:04:41.827599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:04:47.533167 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-12 11:05:20.071201 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-12 11:05:21.385958 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-12 11:05:24.911632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-12 11:05:31.992316 -No vulnerabilities found. - - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-12 11:05:33.402271 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-12 11:05:33.943424 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:05:47.985021 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-12 11:06:31.417371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 11:06:34.148915 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-12 11:06:34.659245 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-12 11:06:44.407577 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-12 11:06:47.920224 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fzuslide/video_new -https://github.com/fzuslide/video_new -Entry file: video_new/application.py -Scanned: 2016-10-12 11:07:22.185506 -No vulnerabilities found. - - -tomatohater/lydon -https://github.com/tomatohater/lydon -Entry file: lydon/lydon/__init__.py -Scanned: 2016-10-12 11:07:23.584083 -No vulnerabilities found. - - -williamratcliff/django-feedback -https://github.com/williamratcliff/django-feedback -Entry file: django-feedback/feedback.py -Scanned: 2016-10-12 11:07:35.524462 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelbm24/blog -https://github.com/joelbm24/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-12 11:07:37.359068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 11:07:50.214469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-12 11:07:51.527350 -Vulnerability 1: -File: bsg-raffle/raffle.py - > User input at line 39, trigger word "form[": - user_id = int(request.form['user_id']) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 2: -File: bsg-raffle/raffle.py - > User input at line 40, trigger word "form[": - prize = request.form['prize'] -Reassigned in: - File: bsg-raffle/raffle.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('winner_added.html',name=username[0], prize=prize) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 3: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 68, trigger word "execute(": - g.db.execute('INSERT INTO participants(name) - VALUES (?)', (username)) - -Vulnerability 4: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 70, trigger word "flash(": - flash('%s added successfully!' % username) - - - -adamgreig/pyautopull -https://github.com/adamgreig/pyautopull -Entry file: pyautopull/pyautopull.py -Scanned: 2016-10-12 11:07:52.799237 -No vulnerabilities found. - - -sean-/flask-skeleton -https://github.com/sean-/flask-skeleton -Entry file: None -Scanned: 2016-10-12 11:08:24.461484 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sean-/flask-skeleton. - -Runscope/httpbin -https://github.com/Runscope/httpbin -Entry file: httpbin/httpbin/filters.py -Scanned: 2016-10-12 11:08:29.242038 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hasgeek/flask-lastuser -https://github.com/hasgeek/flask-lastuser -Entry file: flask-lastuser/tests/test_mergeuser.py -Scanned: 2016-10-12 11:08:33.373966 -No vulnerabilities found. - - -BooBSD/flask-odesk -https://github.com/BooBSD/flask-odesk -Entry file: flask-odesk/tests.py -Scanned: 2016-10-12 11:08:35.310785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cool-shark/redimon -https://github.com/cool-shark/redimon -Entry file: redimon/src/redimon/app.py -Scanned: 2016-10-12 11:08:38.289505 -No vulnerabilities found. - - -pcsanwald/flask_site -https://github.com/pcsanwald/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-12 11:08:56.683660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 11:08:58.171678 -No vulnerabilities found. - - -dag/flask-sassy -https://github.com/dag/flask-sassy -Entry file: flask-sassy/tests/__init__.py -Scanned: 2016-10-12 11:09:23.482712 -No vulnerabilities found. - - -charlieevett/jiffy-portal -https://github.com/charlieevett/jiffy-portal -Entry file: jiffy-portal/portal/app.py -Scanned: 2016-10-12 11:09:24.843851 -No vulnerabilities found. - - -tomekwojcik/Flask-Module-Static-Files -https://github.com/tomekwojcik/Flask-Module-Static-Files -Entry file: Flask-Module-Static-Files/stest/__init__.py -Scanned: 2016-10-12 11:09:28.204510 -No vulnerabilities found. - - -justjkk/dotpath -https://github.com/justjkk/dotpath -Entry file: dotpath/run.py -Scanned: 2016-10-12 11:09:35.945826 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-12 11:09:37.782215 -Vulnerability 1: -File: semantic-bookclub/app/web.py - > User input at line 81, trigger word ".data": - book_title = dict(self.book.choices)[self.book.data] -File: semantic-bookclub/app/web.py - > reaches line 82, trigger word "flash(": - flash('%s have successfully borrowed %s' % (self.borrower.data, book_title)) - -Vulnerability 2: -File: semantic-bookclub/app/web.py - > User input at line 101, trigger word ".data": - member = Member.get_by(foaf_givenName=self.member.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - -Vulnerability 3: -File: semantic-bookclub/app/web.py - > User input at line 102, trigger word ".data": - book = Book.get_by(dcterms_identifier=self.book.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - - - -t9md/snippy -https://github.com/t9md/snippy -Entry file: snippy/snippy.py -Scanned: 2016-10-12 11:09:40.655158 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stehem/Tywna -https://github.com/stehem/Tywna -Entry file: Tywna/application/__init__.py -Scanned: 2016-10-12 11:09:49.655978 -No vulnerabilities found. - - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 11:09:53.880523 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:15:54.516424 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-12 11:15:55.848453 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-12 11:15:58.448862 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-12 11:16:17.877380 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-12 11:16:52.031000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-12 11:16:53.053320 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-12 11:16:57.372208 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-12 11:16:59.890526 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-12 11:17:52.896335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-12 11:17:56.227788 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-12 11:17:58.556232 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-12 11:17:59.535710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-12 11:18:00.050654 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-12 11:18:54.597942 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-12 11:18:55.096452 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-12 11:18:58.332176 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-12 11:18:59.684683 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-12 11:19:03.117748 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-12 11:19:19.669833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-12 11:19:57.507869 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-12 11:19:59.004026 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-12 11:19:59.513265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-12 11:20:01.269898 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-12 11:20:02.606417 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-12 11:20:03.815211 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-12 11:20:04.316454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-12 11:20:19.840101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-12 11:20:54.115519 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-12 11:21:00.676557 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-12 11:21:05.552772 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:21:07.951989 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-12 11:21:10.809470 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-12 11:21:16.373100 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-12 11:21:23.321705 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-12 11:21:54.620864 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-12 11:21:57.116735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-12 11:22:02.510494 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-12 11:22:10.209914 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-12 11:22:10.773206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 11:22:11.254909 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-12 11:22:12.601083 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-12 11:22:17.959594 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-12 11:22:21.325209 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-12 11:23:03.703426 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-12 11:23:08.490724 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-12 11:23:12.875082 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-12 11:23:18.908785 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-12 11:23:55.064886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-12 11:24:00.131390 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-12 11:24:08.125750 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-12 11:24:11.116450 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-12 11:24:12.362494 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-12 11:24:13.710153 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 11:24:19.058712 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-12 11:24:55.217969 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-12 11:24:59.216084 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-12 11:25:02.770636 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-12 11:25:09.013884 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-12 11:25:10.387781 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-12 11:25:15.243710 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 11:25:18.735218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-12 11:25:22.246866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 11:25:59.173671 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-12 11:26:10.258894 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-12 11:26:10.790190 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-12 11:26:12.284978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-12 11:26:12.789352 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-12 11:26:15.176493 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-12 11:26:19.717352 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-12 11:26:24.099729 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-12 11:27:05.621605 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-12 11:27:10.147448 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-12 11:27:13.252191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-12 11:27:22.460832 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-12 11:27:22.980595 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-12 11:27:24.361399 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-12 11:27:57.431839 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-12 11:27:59.946753 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-12 11:28:11.718036 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-12 11:28:14.172837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-12 11:28:24.143336 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-12 11:28:25.639273 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-12 11:28:58.248105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-12 11:29:00.750205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-12 11:29:12.363933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-12 11:29:14.880983 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-12 11:29:16.154647 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-12 11:29:24.663794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:29:27.181156 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-12 11:29:58.710538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-12 11:30:02.109127 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-12 11:30:06.652162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-12 11:30:13.706687 -No vulnerabilities found. - - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-12 11:30:14.971086 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-12 11:30:15.493923 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:30:27.720142 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-12 11:31:13.159092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 11:31:15.598321 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-12 11:31:16.117102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-12 11:31:26.880532 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-12 11:31:27.382591 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fzuslide/video_new -https://github.com/fzuslide/video_new -Entry file: video_new/application.py -Scanned: 2016-10-12 11:32:00.749636 -No vulnerabilities found. - - -tomatohater/lydon -https://github.com/tomatohater/lydon -Entry file: lydon/lydon/__init__.py -Scanned: 2016-10-12 11:32:03.136169 -No vulnerabilities found. - - -williamratcliff/django-feedback -https://github.com/williamratcliff/django-feedback -Entry file: django-feedback/feedback.py -Scanned: 2016-10-12 11:32:13.604654 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelbm24/blog -https://github.com/joelbm24/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-12 11:32:16.560850 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 11:32:26.138507 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-12 11:32:27.462969 -Vulnerability 1: -File: bsg-raffle/raffle.py - > User input at line 39, trigger word "form[": - user_id = int(request.form['user_id']) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 2: -File: bsg-raffle/raffle.py - > User input at line 40, trigger word "form[": - prize = request.form['prize'] -Reassigned in: - File: bsg-raffle/raffle.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('winner_added.html',name=username[0], prize=prize) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 3: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 68, trigger word "execute(": - g.db.execute('INSERT INTO participants(name) - VALUES (?)', (username)) - -Vulnerability 4: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 70, trigger word "flash(": - flash('%s added successfully!' % username) - - - -adamgreig/pyautopull -https://github.com/adamgreig/pyautopull -Entry file: pyautopull/pyautopull.py -Scanned: 2016-10-12 11:32:28.704165 -No vulnerabilities found. - - -sean-/flask-skeleton -https://github.com/sean-/flask-skeleton -Entry file: None -Scanned: 2016-10-12 11:33:04.339922 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sean-/flask-skeleton. - -Runscope/httpbin -https://github.com/Runscope/httpbin -Entry file: httpbin/httpbin/filters.py -Scanned: 2016-10-12 11:33:07.877518 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hasgeek/flask-lastuser -https://github.com/hasgeek/flask-lastuser -Entry file: flask-lastuser/tests/test_mergeuser.py -Scanned: 2016-10-12 11:33:14.976242 -No vulnerabilities found. - - -BooBSD/flask-odesk -https://github.com/BooBSD/flask-odesk -Entry file: flask-odesk/tests.py -Scanned: 2016-10-12 11:33:15.463472 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cool-shark/redimon -https://github.com/cool-shark/redimon -Entry file: redimon/src/redimon/app.py -Scanned: 2016-10-12 11:33:16.851933 -No vulnerabilities found. - - -pcsanwald/flask_site -https://github.com/pcsanwald/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-12 11:33:27.317945 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 11:33:29.828356 -No vulnerabilities found. - - -dag/flask-sassy -https://github.com/dag/flask-sassy -Entry file: flask-sassy/tests/__init__.py -Scanned: 2016-10-12 11:34:01.262757 -No vulnerabilities found. - - -charlieevett/jiffy-portal -https://github.com/charlieevett/jiffy-portal -Entry file: jiffy-portal/portal/app.py -Scanned: 2016-10-12 11:34:04.699312 -No vulnerabilities found. - - -tomekwojcik/Flask-Module-Static-Files -https://github.com/tomekwojcik/Flask-Module-Static-Files -Entry file: Flask-Module-Static-Files/stest/__init__.py -Scanned: 2016-10-12 11:34:08.969320 -No vulnerabilities found. - - -justjkk/dotpath -https://github.com/justjkk/dotpath -Entry file: dotpath/run.py -Scanned: 2016-10-12 11:34:13.499245 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-12 11:34:17.337277 -Vulnerability 1: -File: semantic-bookclub/app/web.py - > User input at line 81, trigger word ".data": - book_title = dict(self.book.choices)[self.book.data] -File: semantic-bookclub/app/web.py - > reaches line 82, trigger word "flash(": - flash('%s have successfully borrowed %s' % (self.borrower.data, book_title)) - -Vulnerability 2: -File: semantic-bookclub/app/web.py - > User input at line 101, trigger word ".data": - member = Member.get_by(foaf_givenName=self.member.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - -Vulnerability 3: -File: semantic-bookclub/app/web.py - > User input at line 102, trigger word ".data": - book = Book.get_by(dcterms_identifier=self.book.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - - - -t9md/snippy -https://github.com/t9md/snippy -Entry file: snippy/snippy.py -Scanned: 2016-10-12 11:34:18.309468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stehem/Tywna -https://github.com/stehem/Tywna -Entry file: Tywna/application/__init__.py -Scanned: 2016-10-12 11:34:32.328849 -No vulnerabilities found. - - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 11:34:32.952468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/bitpit-https-bridge -https://github.com/maxcountryman/bitpit-https-bridge -Entry file: bitpit-https-bridge/httpstobitpit/__init__.py -Scanned: 2016-10-12 11:34:34.431404 -No vulnerabilities found. - - -maxcountryman/flask-bcrypt -https://github.com/maxcountryman/flask-bcrypt -Entry file: flask-bcrypt/flask_bcrypt.py -Scanned: 2016-10-12 11:35:06.138757 -No vulnerabilities found. - - -kennethreitz-archive/flask-rest -https://github.com/kennethreitz-archive/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-12 11:35:14.904026 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tdryer/flask-forum -https://github.com/tdryer/flask-forum -Entry file: flask-forum/app.py -Scanned: 2016-10-12 11:35:17.200403 -Vulnerability 1: -File: flask-forum/app.py - > User input at line 124, trigger word ".data": - new_topic_id = post_topic(form.subject.data, form.content.data) -Reassigned in: - File: flask-forum/app.py - > Line 127: ret_MAYBE_FUNCTION_NAME = render_template('newtopic.html',form=form) -File: flask-forum/app.py - > reaches line 126, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/topic/' + new_topic_id) - -Vulnerability 2: -File: flask-forum/app.py - > User input at line 196, trigger word ".data": - username = form.username.data -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - -Vulnerability 3: -File: flask-forum/app.py - > User input at line 197, trigger word ".data": - password = form.password1.data -Reassigned in: - File: flask-forum/app.py - > Line 198: pw_hash = hashpw(password, gensalt()) -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - - - -dqminh/flask-mongoobject -https://github.com/dqminh/flask-mongoobject -Entry file: flask-mongoobject/examples_hello.py -Scanned: 2016-10-12 11:35:19.541113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gmonnerat/flask-sandbox -https://github.com/gmonnerat/flask-sandbox -Entry file: flask-sandbox/hello/hello.py -Scanned: 2016-10-12 11:35:20.719564 -No vulnerabilities found. - - -DarkSector/wombat -https://github.com/DarkSector/wombat -Entry file: wombat/wombatdb.py -Scanned: 2016-10-12 11:35:31.666327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lOlIl/Flask---Local-election -https://github.com/lOlIl/Flask---Local-election -Entry file: Flask---Local-election/app.py -Scanned: 2016-10-12 11:35:34.523187 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -paulftw/appengine-flask-template -https://github.com/paulftw/appengine-flask-template -Entry file: appengine-flask-template/app/app.py -Scanned: 2016-10-12 11:35:36.050201 -No vulnerabilities found. - - -flores/aquadoc -https://github.com/flores/aquadoc -Entry file: aquadoc/aquadoc.py -Scanned: 2016-10-12 11:36:05.806672 -No vulnerabilities found. - - -jorgeatorres/cotufa -https://github.com/jorgeatorres/cotufa -Entry file: cotufa/cotufa.py -Scanned: 2016-10-12 11:36:10.108515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbr/flask-kvsession -https://github.com/mbr/flask-kvsession -Entry file: flask-kvsession/tests/conftest.py -Scanned: 2016-10-12 11:36:21.042654 -No vulnerabilities found. - - -radekstepan/Flask-Skeleton-App -https://github.com/radekstepan/Flask-Skeleton-App -Entry file: Flask-Skeleton-App/flask_app.py -Scanned: 2016-10-12 11:36:29.837232 -No vulnerabilities found. - - -utahta/flask-on-fluxflex -https://github.com/utahta/flask-on-fluxflex -Entry file: flask-on-fluxflex/app/__init__.py -Scanned: 2016-10-12 11:36:36.580340 -No vulnerabilities found. - - -femmerling/brunch-flask-gae-skeleton -https://github.com/femmerling/brunch-flask-gae-skeleton -Entry file: brunch-flask-gae-skeleton/gae/main.py -Scanned: 2016-10-12 11:37:05.783703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amcameron/gchartsdemo -https://github.com/amcameron/gchartsdemo -Entry file: gchartsdemo/charts.py -Scanned: 2016-10-12 11:37:07.081166 -No vulnerabilities found. - - -bagyr/flaskPage -https://github.com/bagyr/flaskPage -Entry file: flaskPage/__init__.py -Scanned: 2016-10-12 11:37:10.324337 -No vulnerabilities found. - - -sbook/flask-script -https://github.com/sbook/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-12 11:37:21.901765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joemarct/flask-gae-app -https://github.com/joemarct/flask-gae-app -Entry file: flask-gae-app/flask/app.py -Scanned: 2016-10-12 11:37:26.330492 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bhagyashree-Mandora/The-Python-Task -https://github.com/Bhagyashree-Mandora/The-Python-Task -Entry file: The-Python-Task/main.py -Scanned: 2016-10-12 11:37:30.594048 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -piratesolutions/ps-website -https://github.com/piratesolutions/ps-website -Entry file: ps-website/app.py -Scanned: 2016-10-12 11:37:36.250528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samrat/blogengine -https://github.com/samrat/blogengine -Entry file: blogengine/blogengine.py -Scanned: 2016-10-12 11:37:37.579346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TimFletcher/cmprss -https://github.com/TimFletcher/cmprss -Entry file: cmprss/cmprss.py -Scanned: 2016-10-12 11:38:03.839833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyvanee/mappy -https://github.com/andyvanee/mappy -Entry file: mappy/mappy.py -Scanned: 2016-10-12 11:38:09.611105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barnslig/foreveralonebook -https://github.com/barnslig/foreveralonebook -Entry file: foreveralonebook/foreveralonebook.py -Scanned: 2016-10-12 11:38:16.511996 -Vulnerability 1: -File: foreveralonebook/foreveralonebook.py - > User input at line 47, trigger word "form[": - entry = escape(request.form['entry']) -File: foreveralonebook/foreveralonebook.py - > reaches line 57, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_posts (u_id, content) VALUES ({0}, '{1}');'.format(session['u_id'], entry)) - -Vulnerability 2: -File: foreveralonebook/foreveralonebook.py - > User input at line 113, trigger word "form[": - password = hashlib.sha1(request.form['new_pw']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 115, trigger word "execute(": - g.db.cur.execute('UPDATE feabook_user SET password = '{0}' WHERE id = '{1}';'.format(password, session['u_id'])) - -Vulnerability 3: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 157, trigger word "execute(": - g.db.cur.execute('SELECT username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 4: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 5: -File: foreveralonebook/foreveralonebook.py - > User input at line 152, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 6: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 169, trigger word "execute(": - g.db.cur.execute('SELECT id, username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 7: -File: foreveralonebook/foreveralonebook.py - > User input at line 193, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 222: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 223: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - -Vulnerability 8: -File: foreveralonebook/foreveralonebook.py - > User input at line 194, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - - - -geek22com/referral_dashboard_engine -https://github.com/geek22com/referral_dashboard_engine -Entry file: referral_dashboard_engine/heymoose/__init__.py -Scanned: 2016-10-12 11:38:38.059056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dqminh/flask-lettuce -https://github.com/dqminh/flask-lettuce -Entry file: flask-lettuce/test.py -Scanned: 2016-10-12 11:38:40.538882 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radekstepan/FlaskBudget -https://github.com/radekstepan/FlaskBudget -Entry file: FlaskBudget/budget.py -Scanned: 2016-10-12 11:38:43.380604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -UfSoft/Flask-MenuBuilder -https://github.com/UfSoft/Flask-MenuBuilder -Entry file: Flask-MenuBuilder/tests/test_menuitem.py -Scanned: 2016-10-12 11:39:04.781805 -No vulnerabilities found. - - -gregglind/flask-tool -https://github.com/gregglind/flask-tool -Entry file: flask-tool/flasktool/console.py -Scanned: 2016-10-12 11:39:09.106773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kblin/flask-downloader -https://github.com/kblin/flask-downloader -Entry file: flask-downloader/tests.py -Scanned: 2016-10-12 11:39:11.397014 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/flog -https://github.com/maxcountryman/flog -Entry file: flog/flog/__init__.py -Scanned: 2016-10-12 11:39:16.971065 -No vulnerabilities found. - - -sublee/Flask-Handler -https://github.com/sublee/Flask-Handler -Entry file: None -Scanned: 2016-10-12 11:39:19.172297 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sublee/Flask-Handler. - -Ramblurr/pyqdb -https://github.com/Ramblurr/pyqdb -Entry file: pyqdb/src/pyqdb.py -Scanned: 2016-10-12 11:39:41.706633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zackster/DijScrape--flask-rewrite- -https://github.com/zackster/DijScrape--flask-rewrite- -Entry file: DijScrape--flask-rewrite-/dijscrape.py -Scanned: 2016-10-12 11:39:43.007832 -No vulnerabilities found. - - -asenchi/pomp -https://github.com/asenchi/pomp -Entry file: pomp/pomp/pomp.py -Scanned: 2016-10-12 11:39:44.222280 -No vulnerabilities found. - - -tshirtman/snakenest -https://github.com/tshirtman/snakenest -Entry file: snakenest/main.py -Scanned: 2016-10-12 11:40:05.507537 -No vulnerabilities found. - - -jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -https://github.com/jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -Entry file: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/gmaps.py -Scanned: 2016-10-12 11:40:08.822876 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/env/lib/python2.7/genericpath.py - -triposo/geocodecache -https://github.com/triposo/geocodecache -Entry file: geocodecache/geocodecache.py -Scanned: 2016-10-12 11:40:12.037405 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toastwaffle/ToDoQuick -https://github.com/toastwaffle/ToDoQuick -Entry file: ToDoQuick/todoquick.py -Scanned: 2016-10-12 11:40:17.521473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coleifer/flask-peewee -https://github.com/coleifer/flask-peewee -Entry file: flask-peewee/example/app.py -Scanned: 2016-10-12 11:40:43.406112 -Vulnerability 1: -File: flask-peewee/example/admin.py - > User input at line 27, trigger word "get(": - next = request.form.get('next') or self.dashboard_url() -File: flask-peewee/example/admin.py - > reaches line 28, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -jeanphix/Flask-Dashed -https://github.com/jeanphix/Flask-Dashed -Entry file: Flask-Dashed/examples/sqlalchemy_backend.py -Scanned: 2016-10-12 11:40:46.914641 -No vulnerabilities found. - - -jarus/flask-mongokit -https://github.com/jarus/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-12 11:40:48.633588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -namlook/flask-apibee -https://github.com/namlook/flask-apibee -Entry file: flask-apibee/example/app.py -Scanned: 2016-10-12 11:40:50.397922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voluntas/heroku-template-flask -https://github.com/voluntas/heroku-template-flask -Entry file: heroku-template-flask/snowflake/__init__.py -Scanned: 2016-10-12 11:41:05.638508 -No vulnerabilities found. - - -Deepwalker/Flask-Bundle -https://github.com/Deepwalker/Flask-Bundle -Entry file: Flask-Bundle/samples/simple.py -Scanned: 2016-10-12 11:41:17.925434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunlightlabs/flask-districtoffices -https://github.com/sunlightlabs/flask-districtoffices -Entry file: flask-districtoffices/districtoffices.py -Scanned: 2016-10-12 11:41:20.762993 -No vulnerabilities found. - - -quanticle/flask_blog -https://github.com/quanticle/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-12 11:41:49.091710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garrettr/haps -https://github.com/garrettr/haps -Entry file: haps/quickstart.py -Scanned: 2016-10-12 11:41:50.427669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dsully/sitter -https://github.com/dsully/sitter -Entry file: sitter/sitter/__init__.py -Scanned: 2016-10-12 11:42:08.404544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/nodeblog -https://github.com/ahri/nodeblog -Entry file: nodeblog/blog.py -Scanned: 2016-10-12 11:42:09.603762 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/celeb -https://github.com/maxcountryman/celeb -Entry file: celeb/celeb/__init__.py -Scanned: 2016-10-12 11:42:13.168036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/PO -https://github.com/marchon/PO -Entry file: PO/main.py -Scanned: 2016-10-12 11:42:18.422899 -No vulnerabilities found. - - -slok/xlarrakoetxeaorg -https://github.com/slok/xlarrakoetxeaorg -Entry file: xlarrakoetxeaorg/mysite/blog/__init__.py -Scanned: 2016-10-12 11:42:21.811173 -No vulnerabilities found. - - -boboppie/pyLiftOver -https://github.com/boboppie/pyLiftOver -Entry file: pyLiftOver/flask/lift-over-app.py -Scanned: 2016-10-12 11:42:41.223391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -no0p/homepage -https://github.com/no0p/homepage -Entry file: homepage/site.py -Scanned: 2016-10-12 11:42:50.007821 -No vulnerabilities found. - - -tjosten/python-push -https://github.com/tjosten/python-push -Entry file: python-push/push.py -Scanned: 2016-10-12 11:42:51.333854 -No vulnerabilities found. - - -Joshkunz/PyChannel -https://github.com/Joshkunz/PyChannel -Entry file: PyChannel/PyChannel/__init__.py -Scanned: 2016-10-12 11:42:55.674942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbess/ytlinker -https://github.com/cbess/ytlinker -Entry file: ytlinker/flask/app.py -Scanned: 2016-10-12 11:42:58.676915 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openshift/flask-example -https://github.com/openshift/flask-example -Entry file: flask-example/wsgi/myflaskapp.py -Scanned: 2016-10-12 11:43:10.877484 -No vulnerabilities found. - - -wasabi0522/flaskr -https://github.com/wasabi0522/flaskr -Entry file: flaskr/flaskr/__init__.py -Scanned: 2016-10-12 11:43:42.596557 -No vulnerabilities found. - - -amehta/Flaskly -https://github.com/amehta/Flaskly -Entry file: Flaskly/flaskly.py -Scanned: 2016-10-12 11:43:51.351508 -Vulnerability 1: -File: Flaskly/flaskly.py - > User input at line 73, trigger word "form[": - url = request.form['long_url'] -Reassigned in: - File: Flaskly/flaskly.py - > Line 74: short = pickShortUrl(url) -File: Flaskly/flaskly.py - > reaches line 75, trigger word "flash(": - flash('Short Url http:/localhost/' + short) - - - -fyears/flaskr-redis -https://github.com/fyears/flaskr-redis -Entry file: flaskr-redis/app.py -Scanned: 2016-10-12 11:43:57.110854 -No vulnerabilities found. - - -Jc2k/flask-example -https://github.com/Jc2k/flask-example -Entry file: flask-example/web.py -Scanned: 2016-10-12 11:44:07.392733 -No vulnerabilities found. - - -brainTrain/flasktest -https://github.com/brainTrain/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-12 11:44:12.273099 -No vulnerabilities found. - - -proles/flaskr -https://github.com/proles/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 11:44:13.548165 -No vulnerabilities found. - - -joeyespo/hello-redis-tasks -https://github.com/joeyespo/hello-redis-tasks -Entry file: hello-redis-tasks/hello_redis_tasks.py -Scanned: 2016-10-12 11:44:18.936738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cemk/flask-expander -https://github.com/cemk/flask-expander -Entry file: flask-expander/expand.py -Scanned: 2016-10-12 11:44:21.140556 -No vulnerabilities found. - - -pygraz/old-flask-website -https://github.com/pygraz/old-flask-website -Entry file: old-flask-website/pygraz_website/__init__.py -Scanned: 2016-10-12 11:44:43.216139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasballinger/Utok -https://github.com/thomasballinger/Utok -Entry file: Utok/webapp.py -Scanned: 2016-10-12 11:44:55.393617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/Igualitos-appengine -https://github.com/lcruz/Igualitos-appengine -Entry file: Igualitos-appengine/config.py -Scanned: 2016-10-12 11:44:59.608222 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hettan/MyPortfolio -https://github.com/hettan/MyPortfolio -Entry file: MyPortfolio/web/myFlaskProject.py -Scanned: 2016-10-12 11:45:10.546097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/igualitos -https://github.com/lcruz/igualitos -Entry file: igualitos/config.py -Scanned: 2016-10-12 11:45:11.924631 -No vulnerabilities found. - - -agonzalezro/gplus-blog -https://github.com/agonzalezro/gplus-blog -Entry file: gplus-blog/gplusblog/__init__.py -Scanned: 2016-10-12 11:45:14.326097 -No vulnerabilities found. - - -fwenzel/strassendeutsch -https://github.com/fwenzel/strassendeutsch -Entry file: strassendeutsch/woerterbuch/__init__.py -Scanned: 2016-10-12 11:45:22.858964 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lzyy/chat -https://github.com/lzyy/chat -Entry file: chat/src/app.py -Scanned: 2016-10-12 11:45:52.518876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ferhensil/flask-example -https://github.com/ferhensil/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 11:45:54.005297 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanphix/flask-dashed-demo -https://github.com/jeanphix/flask-dashed-demo -Entry file: flask-dashed-demo/app.py -Scanned: 2016-10-12 11:46:08.774736 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenkam/msgbrd -https://github.com/kenkam/msgbrd -Entry file: msgbrd/app.py -Scanned: 2016-10-12 11:46:12.143973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grigouze/flask-jenkins-radiator -https://github.com/grigouze/flask-jenkins-radiator -Entry file: flask-jenkins-radiator/radiator/radiator.py -Scanned: 2016-10-12 11:46:15.385954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rduplain/flask-jquery-autosave-example -https://github.com/rduplain/flask-jquery-autosave-example -Entry file: flask-jquery-autosave-example/app.py -Scanned: 2016-10-12 11:46:19.951095 -No vulnerabilities found. - - -kracekumar/Gummi -https://github.com/kracekumar/Gummi -Entry file: Gummi/gummi/tests/test.py -Scanned: 2016-10-12 11:46:27.518422 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivoscc/qchaes -https://github.com/ivoscc/qchaes -Entry file: qchaes/runserver.py -Scanned: 2016-10-12 11:46:48.356326 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fdemmer/flask-principal -https://github.com/fdemmer/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-12 11:46:53.049136 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dasevilla/evernote-oauth-example -https://github.com/dasevilla/evernote-oauth-example -Entry file: evernote-oauth-example/webapp.py -Scanned: 2016-10-12 11:46:54.328780 -No vulnerabilities found. - - -zeninthehome/flaskr -https://github.com/zeninthehome/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 11:47:09.149316 -No vulnerabilities found. - - -joshfinnie/Flacker-News -https://github.com/joshfinnie/Flacker-News -Entry file: Flacker-News/flacker-news/app.py -Scanned: 2016-10-12 11:47:12.375265 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -moneill/uber-flask -https://github.com/moneill/uber-flask -Entry file: uber-flask/uber.py -Scanned: 2016-10-12 11:47:18.150655 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: uber-flask/env/lib/python2.7/genericpath.py - -nubela/radar-backend -https://github.com/nubela/radar-backend -Entry file: radar-backend/src/radar.py -Scanned: 2016-10-12 11:47:20.802894 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TxSSC/the-questionator -https://github.com/TxSSC/the-questionator -Entry file: the-questionator/questionator/__init__.py -Scanned: 2016-10-12 11:47:23.926894 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -satonaoya/flask-epio-skelton -https://github.com/satonaoya/flask-epio-skelton -Entry file: flask-epio-skelton/app.py -Scanned: 2016-10-12 11:47:44.213852 -No vulnerabilities found. - - -marksteve/bookmarks -https://github.com/marksteve/bookmarks -Entry file: bookmarks/bookmarks.py -Scanned: 2016-10-12 11:47:48.576422 -No vulnerabilities found. - - -paradoxxxzero/polldance -https://github.com/paradoxxxzero/polldance -Entry file: polldance/dance.py -Scanned: 2016-10-12 11:47:52.839796 -No vulnerabilities found. - - -flebel/Egami -https://github.com/flebel/Egami -Entry file: Egami/egami.py -Scanned: 2016-10-12 11:47:55.262516 -No vulnerabilities found. - - -mitsuhiko/flask-pastebin -https://github.com/mitsuhiko/flask-pastebin -Entry file: flask-pastebin/pastebin.py -Scanned: 2016-10-12 11:48:09.636700 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxcountryman/flask-seasurf -https://github.com/maxcountryman/flask-seasurf -Entry file: flask-seasurf/test_seasurf.py -Scanned: 2016-10-12 11:48:15.408984 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-12 11:48:21.403409 -No vulnerabilities found. - - -hasgeek/coaster -https://github.com/hasgeek/coaster -Entry file: coaster/tests/test_render_with.py -Scanned: 2016-10-12 11:48:25.435980 -No vulnerabilities found. - - -craigkerstiens/flask-helloworld -https://github.com/craigkerstiens/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-12 11:48:44.722068 -No vulnerabilities found. - - -jarodl/flask-github -https://github.com/jarodl/flask-github -Entry file: flask-github/example/example.py -Scanned: 2016-10-12 11:48:49.907936 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ahri/flask-mustache -https://github.com/ahri/flask-mustache -Entry file: flask-mustache/tests/test_mustache.py -Scanned: 2016-10-12 11:48:53.265139 -No vulnerabilities found. - - -gears/flask-gears -https://github.com/gears/flask-gears -Entry file: flask-gears/example/app.py -Scanned: 2016-10-12 11:48:55.680087 -No vulnerabilities found. - - -mitsuhiko/tugraz-flask-demo -https://github.com/mitsuhiko/tugraz-flask-demo -Entry file: tugraz-flask-demo/pastebin.py -Scanned: 2016-10-12 11:49:09.470460 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-12 11:49:13.793814 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -svieira/Budget-Manager -https://github.com/svieira/Budget-Manager -Entry file: None -Scanned: 2016-10-12 11:49:24.361296 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/svieira/Budget-Manager. - -solarmist/Flaskr -https://github.com/solarmist/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 11:49:45.692776 -No vulnerabilities found. - - -cybertoast/flask-router -https://github.com/cybertoast/flask-router -Entry file: flask-router/test_router.py -Scanned: 2016-10-12 11:49:53.521304 -No vulnerabilities found. - - -srusskih/Flask-application-template -https://github.com/srusskih/Flask-application-template -Entry file: Flask-application-template/myapp/myapp.py -Scanned: 2016-10-12 11:50:00.408036 -No vulnerabilities found. - - -Rootbuzz/heroku-basic-flask-app -https://github.com/Rootbuzz/heroku-basic-flask-app -Entry file: heroku-basic-flask-app/sso.py -Scanned: 2016-10-12 11:50:09.716698 -No vulnerabilities found. - - -adgaudio/async-webapp---gevent--psycopg2--flask -https://github.com/adgaudio/async-webapp---gevent--psycopg2--flask -Entry file: async-webapp---gevent--psycopg2--flask/app.py -Scanned: 2016-10-12 11:50:14.080925 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/chatter -https://github.com/maxcountryman/chatter -Entry file: chatter/chatter/__init__.py -Scanned: 2016-10-12 11:50:17.456391 -No vulnerabilities found. - - -zeak/pyProx -https://github.com/zeak/pyProx -Entry file: pyProx/pyProx.py -Scanned: 2016-10-12 11:50:21.682947 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subchild/iStockUtils -https://github.com/subchild/iStockUtils -Entry file: iStockUtils/istockutils.py -Scanned: 2016-10-12 11:50:25.114441 -No vulnerabilities found. - - -tsoporan/read.list -https://github.com/tsoporan/read.list -Entry file: None -Scanned: 2016-10-12 11:50:46.484740 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tsoporan/read.list. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 11:55:21.638541 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-12 11:55:23.492755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-12 11:55:25.915194 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-12 11:55:44.905155 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-12 11:56:18.994942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-12 11:56:19.983892 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-12 11:56:25.211555 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-12 11:56:26.706709 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-12 11:57:19.741620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-12 11:57:22.956761 -No vulnerabilities found. - - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-12 11:57:25.310716 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-12 11:57:26.295718 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-12 11:57:26.802105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-12 11:58:21.327935 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-12 11:58:21.825770 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-12 11:58:25.162199 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-12 11:58:26.506619 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-12 11:58:29.748422 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-12 11:58:47.319699 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-12 11:59:23.945036 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-12 11:59:25.480635 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-12 11:59:25.994046 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-12 11:59:27.822835 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-12 11:59:29.178735 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-12 11:59:30.505459 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-12 11:59:31.017526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-12 11:59:47.548423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-12 12:00:21.889466 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-12 12:00:27.163888 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-12 12:00:31.704163 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 12:00:33.939244 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-12 12:00:36.490418 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-12 12:00:41.763282 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-12 12:00:50.414701 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-12 12:01:22.804336 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-12 12:01:24.326954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-12 12:01:28.762048 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-12 12:01:35.726036 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-12 12:01:36.316101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 12:01:36.810388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-12 12:01:38.022774 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-12 12:01:43.408100 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-12 12:01:48.799094 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-12 12:02:30.166471 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-12 12:02:34.352294 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-12 12:02:39.092885 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-12 12:02:44.028999 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-12 12:03:23.188540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-12 12:03:28.019595 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-12 12:03:33.039504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-12 12:03:37.019949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-12 12:03:38.305599 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-12 12:03:39.677816 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 12:03:44.581522 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-12 12:04:23.724289 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-12 12:04:27.711280 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-12 12:04:29.235883 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-12 12:04:34.671436 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-12 12:04:36.067823 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-12 12:04:40.818594 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 12:04:43.327054 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-12 12:04:49.821017 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-12 12:05:27.667744 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-12 12:05:35.701436 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-12 12:05:36.205198 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-12 12:05:37.689483 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-12 12:05:38.186808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-12 12:05:40.391480 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-12 12:05:43.897677 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-12 12:05:51.246056 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-12 12:06:31.682444 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-12 12:06:35.424739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-12 12:06:38.501265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-12 12:06:52.840414 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-12 12:06:53.348744 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-12 12:06:54.656291 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-12 12:07:25.723386 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-12 12:07:28.222070 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-12 12:07:36.155691 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-12 12:07:39.634963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-12 12:07:54.619638 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-12 12:07:56.149703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-12 12:08:26.749423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-12 12:08:28.235760 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-12 12:08:37.851052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-12 12:08:40.342604 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-12 12:08:41.555144 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-12 12:08:55.053773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 12:08:57.728894 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-12 12:09:27.257834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-12 12:09:29.609269 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-12 12:09:32.164454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-12 12:09:39.247408 -No vulnerabilities found. - - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-12 12:09:40.567081 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-12 12:09:41.105620 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 12:09:58.381620 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-12 12:10:38.903926 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 12:10:41.436829 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-12 12:10:41.974436 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-12 12:10:57.755633 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-12 12:10:58.301544 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fzuslide/video_new -https://github.com/fzuslide/video_new -Entry file: video_new/application.py -Scanned: 2016-10-12 12:11:29.589033 -No vulnerabilities found. - - -tomatohater/lydon -https://github.com/tomatohater/lydon -Entry file: lydon/lydon/__init__.py -Scanned: 2016-10-12 12:11:30.941624 -No vulnerabilities found. - - -williamratcliff/django-feedback -https://github.com/williamratcliff/django-feedback -Entry file: django-feedback/feedback.py -Scanned: 2016-10-12 12:11:40.861992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelbm24/blog -https://github.com/joelbm24/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-12 12:11:42.348631 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 12:11:56.920396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-12 12:11:58.259096 -Vulnerability 1: -File: bsg-raffle/raffle.py - > User input at line 39, trigger word "form[": - user_id = int(request.form['user_id']) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 2: -File: bsg-raffle/raffle.py - > User input at line 40, trigger word "form[": - prize = request.form['prize'] -Reassigned in: - File: bsg-raffle/raffle.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('winner_added.html',name=username[0], prize=prize) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 3: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 68, trigger word "execute(": - g.db.execute('INSERT INTO participants(name) - VALUES (?)', (username)) - -Vulnerability 4: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 70, trigger word "flash(": - flash('%s added successfully!' % username) - - - -adamgreig/pyautopull -https://github.com/adamgreig/pyautopull -Entry file: pyautopull/pyautopull.py -Scanned: 2016-10-12 12:11:59.453870 -No vulnerabilities found. - - -sean-/flask-skeleton -https://github.com/sean-/flask-skeleton -Entry file: None -Scanned: 2016-10-12 12:12:31.989693 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sean-/flask-skeleton. - -Runscope/httpbin -https://github.com/Runscope/httpbin -Entry file: httpbin/httpbin/filters.py -Scanned: 2016-10-12 12:12:33.536901 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hasgeek/flask-lastuser -https://github.com/hasgeek/flask-lastuser -Entry file: flask-lastuser/tests/test_mergeuser.py -Scanned: 2016-10-12 12:12:38.510543 -No vulnerabilities found. - - -BooBSD/flask-odesk -https://github.com/BooBSD/flask-odesk -Entry file: flask-odesk/tests.py -Scanned: 2016-10-12 12:12:39.997657 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cool-shark/redimon -https://github.com/cool-shark/redimon -Entry file: redimon/src/redimon/app.py -Scanned: 2016-10-12 12:12:42.408167 -No vulnerabilities found. - - -pcsanwald/flask_site -https://github.com/pcsanwald/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-12 12:12:57.842988 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-12 12:13:00.224529 -No vulnerabilities found. - - -dag/flask-sassy -https://github.com/dag/flask-sassy -Entry file: flask-sassy/tests/__init__.py -Scanned: 2016-10-12 12:13:30.485664 -No vulnerabilities found. - - -charlieevett/jiffy-portal -https://github.com/charlieevett/jiffy-portal -Entry file: jiffy-portal/portal/app.py -Scanned: 2016-10-12 12:13:31.793183 -No vulnerabilities found. - - -tomekwojcik/Flask-Module-Static-Files -https://github.com/tomekwojcik/Flask-Module-Static-Files -Entry file: Flask-Module-Static-Files/stest/__init__.py -Scanned: 2016-10-12 12:13:35.402936 -No vulnerabilities found. - - -justjkk/dotpath -https://github.com/justjkk/dotpath -Entry file: dotpath/run.py -Scanned: 2016-10-12 12:13:37.904416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-12 12:13:41.579333 -Vulnerability 1: -File: semantic-bookclub/app/web.py - > User input at line 81, trigger word ".data": - book_title = dict(self.book.choices)[self.book.data] -File: semantic-bookclub/app/web.py - > reaches line 82, trigger word "flash(": - flash('%s have successfully borrowed %s' % (self.borrower.data, book_title)) - -Vulnerability 2: -File: semantic-bookclub/app/web.py - > User input at line 101, trigger word ".data": - member = Member.get_by(foaf_givenName=self.member.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - -Vulnerability 3: -File: semantic-bookclub/app/web.py - > User input at line 102, trigger word ".data": - book = Book.get_by(dcterms_identifier=self.book.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - - - -t9md/snippy -https://github.com/t9md/snippy -Entry file: snippy/snippy.py -Scanned: 2016-10-12 12:13:43.532933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stehem/Tywna -https://github.com/stehem/Tywna -Entry file: Tywna/application/__init__.py -Scanned: 2016-10-12 12:14:02.079328 -No vulnerabilities found. - - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-12 12:14:02.620172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/bitpit-https-bridge -https://github.com/maxcountryman/bitpit-https-bridge -Entry file: bitpit-https-bridge/httpstobitpit/__init__.py -Scanned: 2016-10-12 12:14:03.831115 -No vulnerabilities found. - - -maxcountryman/flask-bcrypt -https://github.com/maxcountryman/flask-bcrypt -Entry file: flask-bcrypt/flask_bcrypt.py -Scanned: 2016-10-12 12:14:33.558663 -No vulnerabilities found. - - -kennethreitz-archive/flask-rest -https://github.com/kennethreitz-archive/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-12 12:14:38.504566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tdryer/flask-forum -https://github.com/tdryer/flask-forum -Entry file: flask-forum/app.py -Scanned: 2016-10-12 12:14:41.853407 -Vulnerability 1: -File: flask-forum/app.py - > User input at line 124, trigger word ".data": - new_topic_id = post_topic(form.subject.data, form.content.data) -Reassigned in: - File: flask-forum/app.py - > Line 127: ret_MAYBE_FUNCTION_NAME = render_template('newtopic.html',form=form) -File: flask-forum/app.py - > reaches line 126, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/topic/' + new_topic_id) - -Vulnerability 2: -File: flask-forum/app.py - > User input at line 196, trigger word ".data": - username = form.username.data -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - -Vulnerability 3: -File: flask-forum/app.py - > User input at line 197, trigger word ".data": - password = form.password1.data -Reassigned in: - File: flask-forum/app.py - > Line 198: pw_hash = hashpw(password, gensalt()) -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - - - -dqminh/flask-mongoobject -https://github.com/dqminh/flask-mongoobject -Entry file: flask-mongoobject/examples_hello.py -Scanned: 2016-10-12 12:14:42.353361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gmonnerat/flask-sandbox -https://github.com/gmonnerat/flask-sandbox -Entry file: flask-sandbox/hello/hello.py -Scanned: 2016-10-12 12:14:44.539449 -No vulnerabilities found. - - -DarkSector/wombat -https://github.com/DarkSector/wombat -Entry file: wombat/wombatdb.py -Scanned: 2016-10-12 12:14:58.049244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lOlIl/Flask---Local-election -https://github.com/lOlIl/Flask---Local-election -Entry file: Flask---Local-election/app.py -Scanned: 2016-10-12 12:15:03.596872 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -paulftw/appengine-flask-template -https://github.com/paulftw/appengine-flask-template -Entry file: appengine-flask-template/app/app.py -Scanned: 2016-10-12 12:15:05.145597 -No vulnerabilities found. - - -flores/aquadoc -https://github.com/flores/aquadoc -Entry file: aquadoc/aquadoc.py -Scanned: 2016-10-12 12:15:33.031328 -No vulnerabilities found. - - -jorgeatorres/cotufa -https://github.com/jorgeatorres/cotufa -Entry file: cotufa/cotufa.py -Scanned: 2016-10-12 12:15:35.553712 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbr/flask-kvsession -https://github.com/mbr/flask-kvsession -Entry file: flask-kvsession/tests/conftest.py -Scanned: 2016-10-12 12:15:44.525849 -No vulnerabilities found. - - -radekstepan/Flask-Skeleton-App -https://github.com/radekstepan/Flask-Skeleton-App -Entry file: Flask-Skeleton-App/flask_app.py -Scanned: 2016-10-12 12:15:59.342887 -No vulnerabilities found. - - -utahta/flask-on-fluxflex -https://github.com/utahta/flask-on-fluxflex -Entry file: flask-on-fluxflex/app/__init__.py -Scanned: 2016-10-12 12:16:05.171936 -No vulnerabilities found. - - -femmerling/brunch-flask-gae-skeleton -https://github.com/femmerling/brunch-flask-gae-skeleton -Entry file: brunch-flask-gae-skeleton/gae/main.py -Scanned: 2016-10-12 12:16:30.806499 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amcameron/gchartsdemo -https://github.com/amcameron/gchartsdemo -Entry file: gchartsdemo/charts.py -Scanned: 2016-10-12 12:16:33.244522 -No vulnerabilities found. - - -bagyr/flaskPage -https://github.com/bagyr/flaskPage -Entry file: flaskPage/__init__.py -Scanned: 2016-10-12 12:16:36.447848 -No vulnerabilities found. - - -sbook/flask-script -https://github.com/sbook/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-12 12:16:43.917209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joemarct/flask-gae-app -https://github.com/joemarct/flask-gae-app -Entry file: flask-gae-app/flask/app.py -Scanned: 2016-10-12 12:16:45.461156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bhagyashree-Mandora/The-Python-Task -https://github.com/Bhagyashree-Mandora/The-Python-Task -Entry file: The-Python-Task/main.py -Scanned: 2016-10-12 12:16:58.963418 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -piratesolutions/ps-website -https://github.com/piratesolutions/ps-website -Entry file: ps-website/app.py -Scanned: 2016-10-12 12:17:04.451166 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samrat/blogengine -https://github.com/samrat/blogengine -Entry file: blogengine/blogengine.py -Scanned: 2016-10-12 12:17:04.952873 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TimFletcher/cmprss -https://github.com/TimFletcher/cmprss -Entry file: cmprss/cmprss.py -Scanned: 2016-10-12 12:17:31.496648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyvanee/mappy -https://github.com/andyvanee/mappy -Entry file: mappy/mappy.py -Scanned: 2016-10-12 12:17:33.033407 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barnslig/foreveralonebook -https://github.com/barnslig/foreveralonebook -Entry file: foreveralonebook/foreveralonebook.py -Scanned: 2016-10-12 12:17:40.966467 -Vulnerability 1: -File: foreveralonebook/foreveralonebook.py - > User input at line 47, trigger word "form[": - entry = escape(request.form['entry']) -File: foreveralonebook/foreveralonebook.py - > reaches line 57, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_posts (u_id, content) VALUES ({0}, '{1}');'.format(session['u_id'], entry)) - -Vulnerability 2: -File: foreveralonebook/foreveralonebook.py - > User input at line 113, trigger word "form[": - password = hashlib.sha1(request.form['new_pw']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 115, trigger word "execute(": - g.db.cur.execute('UPDATE feabook_user SET password = '{0}' WHERE id = '{1}';'.format(password, session['u_id'])) - -Vulnerability 3: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 157, trigger word "execute(": - g.db.cur.execute('SELECT username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 4: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 5: -File: foreveralonebook/foreveralonebook.py - > User input at line 152, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 6: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 169, trigger word "execute(": - g.db.cur.execute('SELECT id, username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 7: -File: foreveralonebook/foreveralonebook.py - > User input at line 193, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 222: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 223: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - -Vulnerability 8: -File: foreveralonebook/foreveralonebook.py - > User input at line 194, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - - - -geek22com/referral_dashboard_engine -https://github.com/geek22com/referral_dashboard_engine -Entry file: referral_dashboard_engine/heymoose/__init__.py -Scanned: 2016-10-12 12:17:42.492704 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dqminh/flask-lettuce -https://github.com/dqminh/flask-lettuce -Entry file: flask-lettuce/test.py -Scanned: 2016-10-12 12:17:59.097593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radekstepan/FlaskBudget -https://github.com/radekstepan/FlaskBudget -Entry file: FlaskBudget/budget.py -Scanned: 2016-10-12 12:18:05.068596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -UfSoft/Flask-MenuBuilder -https://github.com/UfSoft/Flask-MenuBuilder -Entry file: Flask-MenuBuilder/tests/test_menuitem.py -Scanned: 2016-10-12 12:18:32.528617 -No vulnerabilities found. - - -gregglind/flask-tool -https://github.com/gregglind/flask-tool -Entry file: flask-tool/flasktool/console.py -Scanned: 2016-10-12 12:18:33.025150 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kblin/flask-downloader -https://github.com/kblin/flask-downloader -Entry file: flask-downloader/tests.py -Scanned: 2016-10-12 12:18:37.533900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/flog -https://github.com/maxcountryman/flog -Entry file: flog/flog/__init__.py -Scanned: 2016-10-12 12:18:41.118091 -No vulnerabilities found. - - -sublee/Flask-Handler -https://github.com/sublee/Flask-Handler -Entry file: None -Scanned: 2016-10-12 12:18:43.369480 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sublee/Flask-Handler. - -Ramblurr/pyqdb -https://github.com/Ramblurr/pyqdb -Entry file: pyqdb/src/pyqdb.py -Scanned: 2016-10-12 12:18:59.829996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zackster/DijScrape--flask-rewrite- -https://github.com/zackster/DijScrape--flask-rewrite- -Entry file: DijScrape--flask-rewrite-/dijscrape.py -Scanned: 2016-10-12 12:19:06.204963 -No vulnerabilities found. - - -asenchi/pomp -https://github.com/asenchi/pomp -Entry file: pomp/pomp/pomp.py -Scanned: 2016-10-12 12:19:07.426265 -No vulnerabilities found. - - -tshirtman/snakenest -https://github.com/tshirtman/snakenest -Entry file: snakenest/main.py -Scanned: 2016-10-12 12:19:32.915416 -No vulnerabilities found. - - -jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -https://github.com/jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -Entry file: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/gmaps.py -Scanned: 2016-10-12 12:19:33.425214 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/env/lib/python2.7/genericpath.py - -triposo/geocodecache -https://github.com/triposo/geocodecache -Entry file: geocodecache/geocodecache.py -Scanned: 2016-10-12 12:19:37.940476 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toastwaffle/ToDoQuick -https://github.com/toastwaffle/ToDoQuick -Entry file: ToDoQuick/todoquick.py -Scanned: 2016-10-12 12:19:40.460543 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coleifer/flask-peewee -https://github.com/coleifer/flask-peewee -Entry file: flask-peewee/example/app.py -Scanned: 2016-10-12 12:19:49.036506 -Vulnerability 1: -File: flask-peewee/example/admin.py - > User input at line 27, trigger word "get(": - next = request.form.get('next') or self.dashboard_url() -File: flask-peewee/example/admin.py - > reaches line 28, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -jeanphix/Flask-Dashed -https://github.com/jeanphix/Flask-Dashed -Entry file: Flask-Dashed/examples/sqlalchemy_backend.py -Scanned: 2016-10-12 12:19:52.247429 -No vulnerabilities found. - - -jarus/flask-mongokit -https://github.com/jarus/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-12 12:20:00.749606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -namlook/flask-apibee -https://github.com/namlook/flask-apibee -Entry file: flask-apibee/example/app.py -Scanned: 2016-10-12 12:20:06.771773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voluntas/heroku-template-flask -https://github.com/voluntas/heroku-template-flask -Entry file: heroku-template-flask/snowflake/__init__.py -Scanned: 2016-10-12 12:20:33.367822 -No vulnerabilities found. - - -Deepwalker/Flask-Bundle -https://github.com/Deepwalker/Flask-Bundle -Entry file: Flask-Bundle/samples/simple.py -Scanned: 2016-10-12 12:20:40.819091 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunlightlabs/flask-districtoffices -https://github.com/sunlightlabs/flask-districtoffices -Entry file: flask-districtoffices/districtoffices.py -Scanned: 2016-10-12 12:20:44.568020 -No vulnerabilities found. - - -quanticle/flask_blog -https://github.com/quanticle/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-12 12:21:01.019698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garrettr/haps -https://github.com/garrettr/haps -Entry file: haps/quickstart.py -Scanned: 2016-10-12 12:21:06.535766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dsully/sitter -https://github.com/dsully/sitter -Entry file: sitter/sitter/__init__.py -Scanned: 2016-10-12 12:21:32.540916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/nodeblog -https://github.com/ahri/nodeblog -Entry file: nodeblog/blog.py -Scanned: 2016-10-12 12:21:34.040130 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/celeb -https://github.com/maxcountryman/celeb -Entry file: celeb/celeb/__init__.py -Scanned: 2016-10-12 12:21:38.533610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/PO -https://github.com/marchon/PO -Entry file: PO/main.py -Scanned: 2016-10-12 12:21:41.755232 -No vulnerabilities found. - - -slok/xlarrakoetxeaorg -https://github.com/slok/xlarrakoetxeaorg -Entry file: xlarrakoetxeaorg/mysite/blog/__init__.py -Scanned: 2016-10-12 12:21:45.942104 -No vulnerabilities found. - - -boboppie/pyLiftOver -https://github.com/boboppie/pyLiftOver -Entry file: pyLiftOver/flask/lift-over-app.py -Scanned: 2016-10-12 12:21:46.427439 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -no0p/homepage -https://github.com/no0p/homepage -Entry file: homepage/site.py -Scanned: 2016-10-12 12:21:54.888876 -No vulnerabilities found. - - -tjosten/python-push -https://github.com/tjosten/python-push -Entry file: python-push/push.py -Scanned: 2016-10-12 12:22:02.119525 -No vulnerabilities found. - - -Joshkunz/PyChannel -https://github.com/Joshkunz/PyChannel -Entry file: PyChannel/PyChannel/__init__.py -Scanned: 2016-10-12 12:22:06.623856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbess/ytlinker -https://github.com/cbess/ytlinker -Entry file: ytlinker/flask/app.py -Scanned: 2016-10-12 12:22:07.113311 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openshift/flask-example -https://github.com/openshift/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 12:22:34.352514 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wasabi0522/flaskr -https://github.com/wasabi0522/flaskr -Entry file: flaskr/flaskr/__init__.py -Scanned: 2016-10-12 12:22:48.859681 -No vulnerabilities found. - - -amehta/Flaskly -https://github.com/amehta/Flaskly -Entry file: Flaskly/flaskly.py -Scanned: 2016-10-12 12:23:02.614207 -Vulnerability 1: -File: Flaskly/flaskly.py - > User input at line 73, trigger word "form[": - url = request.form['long_url'] -Reassigned in: - File: Flaskly/flaskly.py - > Line 74: short = pickShortUrl(url) -File: Flaskly/flaskly.py - > reaches line 75, trigger word "flash(": - flash('Short Url http:/localhost/' + short) - - - -fyears/flaskr-redis -https://github.com/fyears/flaskr-redis -Entry file: flaskr-redis/app.py -Scanned: 2016-10-12 12:23:08.424484 -No vulnerabilities found. - - -Jc2k/flask-example -https://github.com/Jc2k/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 12:23:32.967891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brainTrain/flasktest -https://github.com/brainTrain/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-12 12:23:36.678545 -No vulnerabilities found. - - -proles/flaskr -https://github.com/proles/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 12:23:40.017868 -No vulnerabilities found. - - -joeyespo/hello-redis-tasks -https://github.com/joeyespo/hello-redis-tasks -Entry file: hello-redis-tasks/hello_redis_tasks.py -Scanned: 2016-10-12 12:23:41.529599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cemk/flask-expander -https://github.com/cemk/flask-expander -Entry file: flask-expander/expand.py -Scanned: 2016-10-12 12:23:45.860918 -No vulnerabilities found. - - -pygraz/old-flask-website -https://github.com/pygraz/old-flask-website -Entry file: old-flask-website/pygraz_website/__init__.py -Scanned: 2016-10-12 12:23:47.374795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasballinger/Utok -https://github.com/thomasballinger/Utok -Entry file: Utok/webapp.py -Scanned: 2016-10-12 12:24:07.803901 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/Igualitos-appengine -https://github.com/lcruz/Igualitos-appengine -Entry file: Igualitos-appengine/config.py -Scanned: 2016-10-12 12:24:08.307123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hettan/MyPortfolio -https://github.com/hettan/MyPortfolio -Entry file: MyPortfolio/web/myFlaskProject.py -Scanned: 2016-10-12 12:24:33.827218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/igualitos -https://github.com/lcruz/igualitos -Entry file: igualitos/config.py -Scanned: 2016-10-12 12:24:36.147290 -No vulnerabilities found. - - -agonzalezro/gplus-blog -https://github.com/agonzalezro/gplus-blog -Entry file: gplus-blog/gplusblog/__init__.py -Scanned: 2016-10-12 12:24:40.473477 -No vulnerabilities found. - - -fwenzel/strassendeutsch -https://github.com/fwenzel/strassendeutsch -Entry file: strassendeutsch/woerterbuch/__init__.py -Scanned: 2016-10-12 12:24:45.449410 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lzyy/chat -https://github.com/lzyy/chat -Entry file: chat/src/app.py -Scanned: 2016-10-12 12:25:03.054136 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ferhensil/flask-example -https://github.com/ferhensil/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 12:25:08.545560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanphix/flask-dashed-demo -https://github.com/jeanphix/flask-dashed-demo -Entry file: flask-dashed-demo/app.py -Scanned: 2016-10-12 12:25:34.557590 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenkam/msgbrd -https://github.com/kenkam/msgbrd -Entry file: msgbrd/app.py -Scanned: 2016-10-12 12:25:36.042594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grigouze/flask-jenkins-radiator -https://github.com/grigouze/flask-jenkins-radiator -Entry file: flask-jenkins-radiator/radiator/radiator.py -Scanned: 2016-10-12 12:25:40.532820 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rduplain/flask-jquery-autosave-example -https://github.com/rduplain/flask-jquery-autosave-example -Entry file: flask-jquery-autosave-example/app.py -Scanned: 2016-10-12 12:25:43.027713 -No vulnerabilities found. - - -kracekumar/Gummi -https://github.com/kracekumar/Gummi -Entry file: Gummi/gummi/tests/test.py -Scanned: 2016-10-12 12:25:45.523943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivoscc/qchaes -https://github.com/ivoscc/qchaes -Entry file: qchaes/runserver.py -Scanned: 2016-10-12 12:25:53.490277 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fdemmer/flask-principal -https://github.com/fdemmer/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-12 12:26:03.984227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dasevilla/evernote-oauth-example -https://github.com/dasevilla/evernote-oauth-example -Entry file: evernote-oauth-example/webapp.py -Scanned: 2016-10-12 12:26:10.257573 -No vulnerabilities found. - - -zeninthehome/flaskr -https://github.com/zeninthehome/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 12:26:36.043686 -No vulnerabilities found. - - -joshfinnie/Flacker-News -https://github.com/joshfinnie/Flacker-News -Entry file: Flacker-News/flacker-news/app.py -Scanned: 2016-10-12 12:26:36.532682 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -moneill/uber-flask -https://github.com/moneill/uber-flask -Entry file: uber-flask/uber.py -Scanned: 2016-10-12 12:26:41.127210 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: uber-flask/env/lib/python2.7/genericpath.py - -nubela/radar-backend -https://github.com/nubela/radar-backend -Entry file: radar-backend/src/radar.py -Scanned: 2016-10-12 12:26:42.631278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TxSSC/the-questionator -https://github.com/TxSSC/the-questionator -Entry file: the-questionator/questionator/__init__.py -Scanned: 2016-10-12 12:26:46.127026 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -satonaoya/flask-epio-skelton -https://github.com/satonaoya/flask-epio-skelton -Entry file: flask-epio-skelton/app.py -Scanned: 2016-10-12 12:26:49.342735 -No vulnerabilities found. - - -marksteve/bookmarks -https://github.com/marksteve/bookmarks -Entry file: bookmarks/bookmarks.py -Scanned: 2016-10-12 12:26:54.694335 -No vulnerabilities found. - - -paradoxxxzero/polldance -https://github.com/paradoxxxzero/polldance -Entry file: polldance/dance.py -Scanned: 2016-10-12 12:27:05.063307 -No vulnerabilities found. - - -flebel/Egami -https://github.com/flebel/Egami -Entry file: Egami/egami.py -Scanned: 2016-10-12 12:27:10.518027 -No vulnerabilities found. - - -mitsuhiko/flask-pastebin -https://github.com/mitsuhiko/flask-pastebin -Entry file: flask-pastebin/pastebin.py -Scanned: 2016-10-12 12:27:35.669546 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxcountryman/flask-seasurf -https://github.com/maxcountryman/flask-seasurf -Entry file: flask-seasurf/test_seasurf.py -Scanned: 2016-10-12 12:27:40.187109 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-12 12:27:44.108433 -No vulnerabilities found. - - -hasgeek/coaster -https://github.com/hasgeek/coaster -Entry file: coaster/tests/test_render_with.py -Scanned: 2016-10-12 12:27:48.849550 -No vulnerabilities found. - - -craigkerstiens/flask-helloworld -https://github.com/craigkerstiens/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-12 12:27:50.180842 -No vulnerabilities found. - - -jarodl/flask-github -https://github.com/jarodl/flask-github -Entry file: flask-github/example/example.py -Scanned: 2016-10-12 12:27:54.968873 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ahri/flask-mustache -https://github.com/ahri/flask-mustache -Entry file: flask-mustache/tests/test_mustache.py -Scanned: 2016-10-12 12:28:05.274701 -No vulnerabilities found. - - -gears/flask-gears -https://github.com/gears/flask-gears -Entry file: flask-gears/example/app.py -Scanned: 2016-10-12 12:28:10.642112 -No vulnerabilities found. - - -mitsuhiko/tugraz-flask-demo -https://github.com/mitsuhiko/tugraz-flask-demo -Entry file: tugraz-flask-demo/pastebin.py -Scanned: 2016-10-12 12:28:36.683726 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-12 12:28:37.925599 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -svieira/Budget-Manager -https://github.com/svieira/Budget-Manager -Entry file: None -Scanned: 2016-10-12 12:28:48.442112 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/svieira/Budget-Manager. - -solarmist/Flaskr -https://github.com/solarmist/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 12:28:50.719980 -No vulnerabilities found. - - -cybertoast/flask-router -https://github.com/cybertoast/flask-router -Entry file: flask-router/test_router.py -Scanned: 2016-10-12 12:29:05.437150 -No vulnerabilities found. - - -srusskih/Flask-application-template -https://github.com/srusskih/Flask-application-template -Entry file: Flask-application-template/myapp/myapp.py -Scanned: 2016-10-12 12:29:12.294736 -No vulnerabilities found. - - -Rootbuzz/heroku-basic-flask-app -https://github.com/Rootbuzz/heroku-basic-flask-app -Entry file: heroku-basic-flask-app/sso.py -Scanned: 2016-10-12 12:29:37.614441 -No vulnerabilities found. - - -adgaudio/async-webapp---gevent--psycopg2--flask -https://github.com/adgaudio/async-webapp---gevent--psycopg2--flask -Entry file: async-webapp---gevent--psycopg2--flask/app.py -Scanned: 2016-10-12 12:29:38.101795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/chatter -https://github.com/maxcountryman/chatter -Entry file: chatter/chatter/__init__.py -Scanned: 2016-10-12 12:29:43.574357 -No vulnerabilities found. - - -zeak/pyProx -https://github.com/zeak/pyProx -Entry file: pyProx/pyProx.py -Scanned: 2016-10-12 12:29:44.059332 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subchild/iStockUtils -https://github.com/subchild/iStockUtils -Entry file: iStockUtils/istockutils.py -Scanned: 2016-10-12 12:29:48.387438 -No vulnerabilities found. - - -tsoporan/read.list -https://github.com/tsoporan/read.list -Entry file: None -Scanned: 2016-10-12 12:29:50.880827 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dcrosta/flask-pymongo -https://github.com/dcrosta/flask-pymongo -Entry file: flask-pymongo/examples/wiki/wiki.py -Scanned: 2016-10-12 12:30:06.266805 -No vulnerabilities found. - - -jamesward/flaskbars -https://github.com/jamesward/flaskbars -Entry file: flaskbars/web.py -Scanned: 2016-10-12 12:30:11.659081 -No vulnerabilities found. - - -jarus/flask-fillin -https://github.com/jarus/flask-fillin -Entry file: flask-fillin/test_app/__init__.py -Scanned: 2016-10-12 12:30:13.034255 -No vulnerabilities found. - - -noisebridge/flask-noiselist -https://github.com/noisebridge/flask-noiselist -Entry file: flask-noiselist/src/noiselist/__init__.py -Scanned: 2016-10-12 12:30:38.451330 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -givp/Flask-MongoDB-Project -https://github.com/givp/Flask-MongoDB-Project -Entry file: Flask-MongoDB-Project/myapp.py -Scanned: 2016-10-12 12:30:39.722056 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-12 12:30:44.191916 -No vulnerabilities found. - - -wgkoro/flask_mongodb -https://github.com/wgkoro/flask_mongodb -Entry file: flask_mongodb/app/app.py -Scanned: 2016-10-12 12:30:45.416344 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danbruegge/flaskeleton -https://github.com/danbruegge/flaskeleton -Entry file: flaskeleton/app/__init__.py -Scanned: 2016-10-12 12:30:50.020440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spoqa/flask-beaker -https://github.com/spoqa/flask-beaker -Entry file: flask-beaker/test_beaker.py -Scanned: 2016-10-12 12:31:06.235956 -No vulnerabilities found. - - -BenjaminMalley/FlaskUser -https://github.com/BenjaminMalley/FlaskUser -Entry file: FlaskUser/tests/user_api_tests.py -Scanned: 2016-10-12 12:31:12.673652 -No vulnerabilities found. - - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-12 12:31:13.164116 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -jparise/flask-facebook -https://github.com/jparise/flask-facebook -Entry file: flask-facebook/tests/test_facebook.py -Scanned: 2016-10-12 12:31:38.555192 -No vulnerabilities found. - - -codeb2cc/flask-examples -https://github.com/codeb2cc/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-12 12:31:40.113004 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Opentaste/bombolone -https://github.com/Opentaste/bombolone -Entry file: bombolone/bombolone/app.py -Scanned: 2016-10-12 12:31:48.273874 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahamilton55/flaskr -https://github.com/ahamilton55/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 12:31:49.633292 -No vulnerabilities found. - - -rbastian/flaskr -https://github.com/rbastian/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 12:31:50.840477 -No vulnerabilities found. - - -RyanMcG/Bits-Books -https://github.com/RyanMcG/Bits-Books -Entry file: Bits-Books/web.py -Scanned: 2016-10-12 12:31:56.266286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -practo/r5d4 -https://github.com/practo/r5d4 -Entry file: r5d4/r5d4/__init__.py -Scanned: 2016-10-12 12:31:57.697824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -youknowone/flask-skeleton -https://github.com/youknowone/flask-skeleton -Entry file: None -Scanned: 2016-10-12 12:32:06.228708 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/youknowone/flask-skeleton. - -nourlcn/flask-note -https://github.com/nourlcn/flask-note -Entry file: flask-note/note.py -Scanned: 2016-10-12 12:32:18.456588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -w1mvy/flask_on_gae -https://github.com/w1mvy/flask_on_gae -Entry file: flask_on_gae/src/main.py -Scanned: 2016-10-12 12:32:21.068044 -No vulnerabilities found. - - -yukatou/flask-board_test -https://github.com/yukatou/flask-board_test -Entry file: flask-board_test/board/__init__.py -Scanned: 2016-10-12 12:32:39.452633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neilmiddleton/heroku_flask_example -https://github.com/neilmiddleton/heroku_flask_example -Entry file: heroku_flask_example/web.py -Scanned: 2016-10-12 12:32:40.693972 -No vulnerabilities found. - - -dhathorn/Blaskr -https://github.com/dhathorn/Blaskr -Entry file: Blaskr/blaskr/__init__.py -Scanned: 2016-10-12 12:32:45.278255 -No vulnerabilities found. - - -drewlustro/trackcircle -https://github.com/drewlustro/trackcircle -Entry file: None -Scanned: 2016-10-12 12:32:56.525274 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nicolaiarocci/flask-mimerender -https://github.com/nicolaiarocci/flask-mimerender -Entry file: flask-mimerender/src/example.py -Scanned: 2016-10-12 12:33:07.666462 -No vulnerabilities found. - - -ducu/rq-dashboard -https://github.com/ducu/rq-dashboard -Entry file: rq-dashboard/rq_dashboard/cli.py -Scanned: 2016-10-12 12:33:15.066186 -No vulnerabilities found. - - -ryands/flasknews -https://github.com/ryands/flasknews -Entry file: flasknews/news.py -Scanned: 2016-10-12 12:33:20.431971 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rsenk330/Flask-Cake -https://github.com/rsenk330/Flask-Cake -Entry file: Flask-Cake/flask_cake/tests/test_cake.py -Scanned: 2016-10-12 12:33:41.158791 -No vulnerabilities found. - - -jasonwyatt/Flask-ErrorMail -https://github.com/jasonwyatt/Flask-ErrorMail -Entry file: Flask-ErrorMail/example/simple.py -Scanned: 2016-10-12 12:33:42.579437 -No vulnerabilities found. - - -brocaar/flask-views -https://github.com/brocaar/flask-views -Entry file: flask-views/flask_views/tests/functional/base.py -Scanned: 2016-10-12 12:33:50.725248 -No vulnerabilities found. - - -simonz05/flask-wtf -https://github.com/simonz05/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-12 12:33:59.192452 -No vulnerabilities found. - - -nivardus/flask-sl -https://github.com/nivardus/flask-sl -Entry file: flask-sl/examples/app.py -Scanned: 2016-10-12 12:34:00.526309 -No vulnerabilities found. - - -andersoncardoso/flaskle -https://github.com/andersoncardoso/flaskle -Entry file: flaskle/flaskle.py -Scanned: 2016-10-12 12:34:01.867088 -No vulnerabilities found. - - -ferronrsmith/flask_projects -https://github.com/ferronrsmith/flask_projects -Entry file: flask_projects/flask_orm/ormapp.py -Scanned: 2016-10-12 12:34:11.852743 -No vulnerabilities found. - - -spanners/flask-blog -https://github.com/spanners/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 12:34:14.129259 -No vulnerabilities found. - - -kvesteri/flask-generic-views -https://github.com/kvesteri/flask-generic-views -Entry file: flask-generic-views/tests/__init__.py -Scanned: 2016-10-12 12:34:20.703612 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ehazlett/coiapi-flask -https://github.com/ehazlett/coiapi-flask -Entry file: coiapi-flask/coiapi/__init__.py -Scanned: 2016-10-12 12:34:40.118743 -No vulnerabilities found. - - -rmasters/progress-flask -https://github.com/rmasters/progress-flask -Entry file: progress-flask/progress.py -Scanned: 2016-10-12 12:34:45.806811 -No vulnerabilities found. - - -RDFLib/rdflib-web -https://github.com/RDFLib/rdflib-web -Entry file: rdflib-web/rdflib_web/lod.py -Scanned: 2016-10-12 12:34:51.597665 -Vulnerability 1: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 523, trigger word "url_for(": - url = url_for(path,type_=type_, label=label, format_=ext) - -Vulnerability 2: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 525, trigger word "url_for(": - url = url_for(path,type_=type_, label=label) - -Vulnerability 3: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 528, trigger word "url_for(": - url = url_for(path,label=label, format_=ext) - -Vulnerability 4: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 530, trigger word "url_for(": - url = url_for(path,label=label) - -Vulnerability 5: -File: rdflib-web/rdflib_web/lod.py - > User input at line 511, trigger word "get(": - mimetype = mimeutils.best_match([mimeutils.RDFXML_MIME, mimeutils.N3_MIME, mimeutils.NTRIPLES_MIME, mimeutils.HTML_MIME], request.headers.get('Accept')) -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 516: ext = '.' + mimeutils.mime_to_format(mimetype) - File: rdflib-web/rdflib_web/lod.py - > Line 519: ext = '' - File: rdflib-web/rdflib_web/lod.py - > Line 523: url = url_for(path,type_=type_, label=label, format_=ext) - File: rdflib-web/rdflib_web/lod.py - > Line 525: url = url_for(path,type_=type_, label=label) - File: rdflib-web/rdflib_web/lod.py - > Line 528: url = url_for(path,label=label, format_=ext) - File: rdflib-web/rdflib_web/lod.py - > Line 530: url = url_for(path,label=label) -File: rdflib-web/rdflib_web/lod.py - > reaches line 532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url, 303) - - - -zen4ever/goose-in-flask -https://github.com/zen4ever/goose-in-flask -Entry file: goose-in-flask/application.py -Scanned: 2016-10-12 12:35:07.251034 -No vulnerabilities found. - - -thinker007/flaskr -https://github.com/thinker007/flaskr -Entry file: flaskr/flaskr/flaskr.py -Scanned: 2016-10-12 12:35:08.649063 -No vulnerabilities found. - - -FND/Flask-RoutingManifest -https://github.com/FND/Flask-RoutingManifest -Entry file: Flask-RoutingManifest/test/test_manifest.py -Scanned: 2016-10-12 12:35:09.862719 -No vulnerabilities found. - - -Fluxx/trappist -https://github.com/Fluxx/trappist -Entry file: trappist/tests/test_app.py -Scanned: 2016-10-12 12:35:11.519641 -No vulnerabilities found. - - -babymastodon/host_flask -https://github.com/babymastodon/host_flask -Entry file: host_flask/templates/wsgi/template.py -Scanned: 2016-10-12 12:35:21.394963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cirode/test_flask_app -https://github.com/cirode/test_flask_app -Entry file: None -Scanned: 2016-10-12 12:35:44.194251 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cirode/test_flask_app. - -Opentaste/tiramisu-homepage -https://github.com/Opentaste/tiramisu-homepage -Entry file: tiramisu-homepage/libs/flask/app.py -Scanned: 2016-10-12 12:35:54.183192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fogleman/Boggle -https://github.com/fogleman/Boggle -Entry file: Boggle/__init__.py -Scanned: 2016-10-12 12:36:01.288871 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hickford/footballer-or-pasta -https://github.com/hickford/footballer-or-pasta -Entry file: footballer-or-pasta/app.py -Scanned: 2016-10-12 12:36:11.584076 -No vulnerabilities found. - - -drnlm/Sutekh-Web -https://github.com/drnlm/Sutekh-Web -Entry file: Sutekh-Web/sutekhweb.py -Scanned: 2016-10-12 12:36:15.100548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mahmoudhossam/blog -https://github.com/mahmoudhossam/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-12 12:36:20.594107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -polera/practical_python_deployments -https://github.com/polera/practical_python_deployments -Entry file: practical_python_deployments/app.py -Scanned: 2016-10-12 12:36:41.030412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eamonbanta/simple_calendar -https://github.com/eamonbanta/simple_calendar -Entry file: simple_calendar/index.py -Scanned: 2016-10-12 12:36:46.864304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flask-admin/flask-admin -https://github.com/flask-admin/flask-admin -Entry file: flask-admin/flask_admin/tests/test_form_upload.py -Scanned: 2016-10-12 12:37:10.543104 -No vulnerabilities found. - - -maxcountryman/flask-login -https://github.com/maxcountryman/flask-login -Entry file: flask-login/test_login.py -Scanned: 2016-10-12 12:37:13.089082 -Vulnerability 1: -File: flask-login/flask_login/login_manager.py - > User input at line 393, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: flask-login/flask_login/login_manager.py - > reaches line 412, trigger word "set_cookie(": - response.set_cookie(cookie_name,value=data, expires=expires, domain=domain, path=path, secure=secure, httponly=httponly) - - - -mattupstate/flask-security -https://github.com/mattupstate/flask-security -Entry file: flask-security/tests/conftest.py -Scanned: 2016-10-12 12:37:16.549372 -No vulnerabilities found. - - -jfinkels/flask-restless -https://github.com/jfinkels/flask-restless -Entry file: flask-restless/examples/clients/jquery/__main__.py -Scanned: 2016-10-12 12:37:21.667422 -No vulnerabilities found. - - -lepture/flask-wtf -https://github.com/lepture/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-12 12:37:24.784198 -No vulnerabilities found. - - -smurfix/flask-script -https://github.com/smurfix/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-12 12:37:25.272012 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-mail -https://github.com/mattupstate/flask-mail -Entry file: flask-mail/tests.py -Scanned: 2016-10-12 12:37:42.926416 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jarus/flask-testing -https://github.com/jarus/flask-testing -Entry file: flask-testing/examples/twill_site/todos/__init__.py -Scanned: 2016-10-12 12:37:45.726699 -No vulnerabilities found. - - -jpvanhal/flask-split -https://github.com/jpvanhal/flask-split -Entry file: flask-split/tests/__init__.py -Scanned: 2016-10-12 12:37:47.169207 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyllstromk/Flask-WhooshAlchemy -https://github.com/gyllstromk/Flask-WhooshAlchemy -Entry file: Flask-WhooshAlchemy/test/test_all.py -Scanned: 2016-10-12 12:37:52.788283 -No vulnerabilities found. - - -dormouse/Flask_Docs_ZhCn -https://github.com/dormouse/Flask_Docs_ZhCn -Entry file: Flask_Docs_ZhCn/flask/sessions.py -Scanned: 2016-10-12 12:38:05.440332 -No vulnerabilities found. - - -mattupstate/flask-social-example -https://github.com/mattupstate/flask-social-example -Entry file: flask-social-example/app/__init__.py -Scanned: 2016-10-12 12:38:13.261863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dplepage/flask-raptor -https://github.com/dplepage/flask-raptor -Entry file: flask-raptor/tests.py -Scanned: 2016-10-12 12:38:23.759291 -No vulnerabilities found. - - -mdipierro/gluino -https://github.com/mdipierro/gluino -Entry file: gluino/flask_example.py -Scanned: 2016-10-12 12:38:47.310039 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lanius/flask-mitten -https://github.com/lanius/flask-mitten -Entry file: flask-mitten/example/app.py -Scanned: 2016-10-12 12:38:48.609016 -No vulnerabilities found. - - -iwanbk/flasktor -https://github.com/iwanbk/flasktor -Entry file: flasktor/flasktor.py -Scanned: 2016-10-12 12:38:52.837797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelnovello/Flaskbook -https://github.com/rafaelnovello/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-12 12:39:01.050575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benselme/flask-makotemplates -https://github.com/benselme/flask-makotemplates -Entry file: flask-makotemplates/tests/test_mako.py -Scanned: 2016-10-12 12:39:13.419400 -No vulnerabilities found. - - -burningion/Flask-Dotcloud -https://github.com/burningion/Flask-Dotcloud -Entry file: Flask-Dotcloud/project/webapp/app.py -Scanned: 2016-10-12 12:39:14.620725 -No vulnerabilities found. - - -jmstaley/virtualenvwrapper.flask -https://github.com/jmstaley/virtualenvwrapper.flask -Entry file: None -Scanned: 2016-10-12 12:39:18.912625 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jmstaley/virtualenvwrapper.flask. - -asciimoo/potion -https://github.com/asciimoo/potion -Entry file: potion/potion/webapp.py -Scanned: 2016-10-12 12:39:25.510107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mgdelacroix/gist-flask -https://github.com/mgdelacroix/gist-flask -Entry file: gist-flask/gist-flask.py -Scanned: 2016-10-12 12:39:27.797364 -No vulnerabilities found. - - -radiosilence/Flask-Suave -https://github.com/radiosilence/Flask-Suave -Entry file: None -Scanned: 2016-10-12 12:39:43.477065 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/radiosilence/Flask-Suave. - -synchrone/skyms -https://github.com/synchrone/skyms -Entry file: skyms/skyms/app.py -Scanned: 2016-10-12 12:39:46.824038 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jason2506/flask-reqarg -https://github.com/jason2506/flask-reqarg -Entry file: flask-reqarg/tests/test_reqarg.py -Scanned: 2016-10-12 12:40:13.917607 -No vulnerabilities found. - - -ngilbert/flask_blog -https://github.com/ngilbert/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-12 12:40:14.401726 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maskota/flask-starter -https://github.com/maskota/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-12 12:40:19.615635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mateo41/simpleRest -https://github.com/mateo41/simpleRest -Entry file: simpleRest/sdge_rest.py -Scanned: 2016-10-12 12:40:28.576033 -No vulnerabilities found. - - -ghallberg/stuffster -https://github.com/ghallberg/stuffster -Entry file: stuffster/stuffster.py -Scanned: 2016-10-12 12:40:44.000489 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robin-wittler/easypeasy -https://github.com/robin-wittler/easypeasy -Entry file: easypeasy/blog.py -Scanned: 2016-10-12 12:40:49.868150 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonyblundell/socialdump -https://github.com/tonyblundell/socialdump -Entry file: socialdump/socialdump.py -Scanned: 2016-10-12 12:40:54.545461 -No vulnerabilities found. - - -samalba/geventwebsocket-on-dotcloud -https://github.com/samalba/geventwebsocket-on-dotcloud -Entry file: geventwebsocket-on-dotcloud/app.py -Scanned: 2016-10-12 12:41:14.230769 -No vulnerabilities found. - - -FND/statusq -https://github.com/FND/statusq -Entry file: statusq/statusq/__init__.py -Scanned: 2016-10-12 12:41:15.529179 -No vulnerabilities found. - - -octaflop/mrna -https://github.com/octaflop/mrna -Entry file: mrna/mrna/app.py -Scanned: 2016-10-12 12:41:19.812870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jasonmc/Tweets-GAE-app -https://github.com/jasonmc/Tweets-GAE-app -Entry file: Tweets-GAE-app/libs/flask/app.py -Scanned: 2016-10-12 12:41:26.660813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gcollazo/bcapi -https://github.com/gcollazo/bcapi -Entry file: bcapi/bcapi.py -Scanned: 2016-10-12 12:41:28.965031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EtnaTraining/todolist-python-server -https://github.com/EtnaTraining/todolist-python-server -Entry file: todolist-python-server/server.py -Scanned: 2016-10-12 12:41:47.674704 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simakazi/webcarcollection -https://github.com/simakazi/webcarcollection -Entry file: webcarcollection/webcarcollection/__init__.py -Scanned: 2016-10-12 12:41:52.570411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guzelgoz/hezenhotel -https://github.com/guzelgoz/hezenhotel -Entry file: hezenhotel/hezenhotel.py -Scanned: 2016-10-12 12:41:57.943676 -No vulnerabilities found. - - -hansonkd/FlaskBootstrapSecurity -https://github.com/hansonkd/FlaskBootstrapSecurity -Entry file: None -Scanned: 2016-10-12 12:42:15.926133 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hansonkd/FlaskBootstrapSecurity. - -playpauseandstop/Flask-Dropbox -https://github.com/playpauseandstop/Flask-Dropbox -Entry file: Flask-Dropbox/testapp/app.py -Scanned: 2016-10-12 12:42:17.682901 -No vulnerabilities found. - - -RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask -https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask -Entry file: None -Scanned: 2016-10-12 12:42:20.318147 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask. - -lmeunier/flaskup -https://github.com/lmeunier/flaskup -Entry file: flaskup/flaskup/__init__.py -Scanned: 2016-10-12 12:42:29.657703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajford/flask-sendmail -https://github.com/ajford/flask-sendmail -Entry file: flask-sendmail/tests.py -Scanned: 2016-10-12 12:42:45.029953 -No vulnerabilities found. - - -playpauseandstop/Flask-LazyViews -https://github.com/playpauseandstop/Flask-LazyViews -Entry file: None -Scanned: 2016-10-12 12:42:48.603213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playpauseandstop/Flask-LazyViews. - -elmcitylabs/ECL-Facebook -https://github.com/elmcitylabs/ECL-Facebook -Entry file: ECL-Facebook/examples/flask_example/example_app.py -Scanned: 2016-10-12 12:42:51.463265 -No vulnerabilities found. - - -tokuda109/flask-docs-ja -https://github.com/tokuda109/flask-docs-ja -Entry file: flask-docs-ja/setup.py -Scanned: 2016-10-12 12:43:07.747654 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelnovello/Flaskbook -https://github.com/rafaelnovello/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-12 12:43:16.691849 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benselme/flask-makotemplates -https://github.com/benselme/flask-makotemplates -Entry file: flask-makotemplates/tests/test_mako.py -Scanned: 2016-10-12 12:43:20.028950 -No vulnerabilities found. - - -joealcorn/PyPaste -https://github.com/joealcorn/PyPaste -Entry file: PyPaste/PyPaste/__init__.py -Scanned: 2016-10-12 12:43:26.779417 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wooptoo/flask-seed -https://github.com/wooptoo/flask-seed -Entry file: flask-seed/app.py -Scanned: 2016-10-12 12:43:29.967992 -Vulnerability 1: -File: flask-seed/app.py - > User input at line 67, trigger word "form[": - user = request.form['name'] -Reassigned in: - File: flask-seed/app.py - > Line 73: d = 'name''email'useremail - File: flask-seed/app.py - > Line 75: d = 'error''user exists' -File: flask-seed/app.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(d) - -Vulnerability 2: -File: flask-seed/app.py - > User input at line 68, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-seed/app.py - > Line 73: d = 'name''email'useremail - File: flask-seed/app.py - > Line 75: d = 'error''user exists' -File: flask-seed/app.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(d) - - - -fanzeyi/wobbuffet -https://github.com/fanzeyi/wobbuffet -Entry file: wobbuffet/wobbuffet.py -Scanned: 2016-10-12 12:43:56.753808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -higumachan/flask_twitter -https://github.com/higumachan/flask_twitter -Entry file: flask_twitter/example/app.py -Scanned: 2016-10-12 12:44:05.072341 -No vulnerabilities found. - - -djworth/flask-sessions -https://github.com/djworth/flask-sessions -Entry file: flask-sessions/web.py -Scanned: 2016-10-12 12:44:17.786111 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -axil/flask-test -https://github.com/axil/flask-test -Entry file: flask-test/hello.py -Scanned: 2016-10-12 12:44:26.466281 -No vulnerabilities found. - - -dtotheb/Flask-Control -https://github.com/dtotheb/Flask-Control -Entry file: Flask-Control/FlaskControl.py -Scanned: 2016-10-12 12:44:30.770086 -Vulnerability 1: -File: Flask-Control/FlaskControl.py - > User input at line 30, trigger word "get(": - pid = request.args.get('pid') -Reassigned in: - File: Flask-Control/FlaskControl.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(url_for('procs',p=pid)) -File: Flask-Control/FlaskControl.py - > reaches line 31, trigger word "subprocess.call(": - subprocess.call(['kill', pid]) - - - -yoshiki256/flask_bbs -https://github.com/yoshiki256/flask_bbs -Entry file: flask_bbs/flaskr.py -Scanned: 2016-10-12 12:44:46.026841 -No vulnerabilities found. - - -robotment/flask-twitter -https://github.com/robotment/flask-twitter -Entry file: flask-twitter/twitter/__init__.py -Scanned: 2016-10-12 12:44:49.448523 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nickah/Flask-Blog -https://github.com/nickah/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-12 12:44:51.621589 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulbarbu/flask-upload -https://github.com/paulbarbu/flask-upload -Entry file: flask-upload/index.py -Scanned: 2016-10-12 12:44:56.965606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zwass/Heroku-Flask-Starter -https://github.com/zwass/Heroku-Flask-Starter -Entry file: Heroku-Flask-Starter/app.py -Scanned: 2016-10-12 12:45:16.679572 -No vulnerabilities found. - - -aparrish/Simple-Flask-Example -https://github.com/aparrish/Simple-Flask-Example -Entry file: Simple-Flask-Example/concord.py -Scanned: 2016-10-12 12:45:17.963417 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benbenben1010/flask-shark-experiment -https://github.com/benbenben1010/flask-shark-experiment -Entry file: flask-shark-experiment/src/rooms.py -Scanned: 2016-10-12 12:45:23.183319 -No vulnerabilities found. - - -xlevus/appengine-flask-template -https://github.com/xlevus/appengine-flask-template -Entry file: appengine-flask-template/web.py -Scanned: 2016-10-12 12:45:27.409179 -No vulnerabilities found. - - -30loops/flask-on-30loops -https://github.com/30loops/flask-on-30loops -Entry file: flask-on-30loops/hello.py -Scanned: 2016-10-12 12:45:31.605401 -No vulnerabilities found. - - -melpomene/Berlin-Books-Flask -https://github.com/melpomene/Berlin-Books-Flask -Entry file: Berlin-Books-Flask/main.py -Scanned: 2016-10-12 12:45:47.055541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mateo41/simpleRest -https://github.com/mateo41/simpleRest -Entry file: simpleRest/sdge_rest.py -Scanned: 2016-10-12 12:45:49.471414 -No vulnerabilities found. - - -samalba/geventwebsocket-on-dotcloud -https://github.com/samalba/geventwebsocket-on-dotcloud -Entry file: geventwebsocket-on-dotcloud/app.py -Scanned: 2016-10-12 12:45:51.655630 -No vulnerabilities found. - - -yoshiki256/flaskr_on_fluxflex -https://github.com/yoshiki256/flaskr_on_fluxflex -Entry file: flaskr_on_fluxflex/flaskr.py -Scanned: 2016-10-12 12:45:56.879128 -No vulnerabilities found. - - -mygulamali/Geodesics -https://github.com/mygulamali/Geodesics -Entry file: Geodesics/geodesics.py -Scanned: 2016-10-12 12:46:17.724665 -No vulnerabilities found. - - -rmasters/mdpages -https://github.com/rmasters/mdpages -Entry file: mdpages/mdpages.py -Scanned: 2016-10-12 12:46:18.912863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmihailenco/ndbunq-example -https://github.com/vmihailenco/ndbunq-example -Entry file: ndbunq-example/app/app.py -Scanned: 2016-10-12 12:46:21.113208 -No vulnerabilities found. - - -gofetch/fetchweb -https://github.com/gofetch/fetchweb -Entry file: fetchweb/fetchweb/__init__.py -Scanned: 2016-10-12 12:46:28.657938 -Vulnerability 1: -File: fetchweb/fetchweb/views.py - > User input at line 144, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: fetchweb/fetchweb/views.py - > Line 147: filename = secure_filename(file.filename) -File: fetchweb/fetchweb/views.py - > reaches line 148, trigger word "flash(": - flash('uploaded file: %s' % filename) - -Vulnerability 2: -File: fetchweb/fetchweb/views.py - > User input at line 145, trigger word "form[": - url = request.form['torrent-url'] -File: fetchweb/fetchweb/views.py - > reaches line 150, trigger word "flash(": - flash('uploaded url: %s' % url) - - - -vr3v3n/TODO -https://github.com/vr3v3n/TODO -Entry file: TODO/todo.py -Scanned: 2016-10-12 12:46:31.960895 -No vulnerabilities found. - - -robertberry/rbrt-blog -https://github.com/robertberry/rbrt-blog -Entry file: rbrt-blog/blog.py -Scanned: 2016-10-12 12:46:47.337209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yoshiki256/shingeki_mederu_python -https://github.com/yoshiki256/shingeki_mederu_python -Entry file: shingeki_mederu_python/shingeki.py -Scanned: 2016-10-12 12:46:49.642980 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjmeyer/quincy -https://github.com/cjmeyer/quincy -Entry file: None -Scanned: 2016-10-12 12:46:52.152731 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cjmeyer/quincy. - -rdallasgray/archie-webservice -https://github.com/rdallasgray/archie-webservice -Entry file: archie-webservice/archie/__init__.py -Scanned: 2016-10-12 12:47:22.087507 -No vulnerabilities found. - - -swinton/Closest-UK-City -https://github.com/swinton/Closest-UK-City -Entry file: Closest-UK-City/webapp.py -Scanned: 2016-10-12 12:47:23.298291 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jamalzkhan/dropshare -https://github.com/jamalzkhan/dropshare -Entry file: dropshare/app.py -Scanned: 2016-10-12 12:47:24.582414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flyingclimber/LegalTally -https://github.com/flyingclimber/LegalTally -Entry file: LegalTally/legaltally.py -Scanned: 2016-10-12 12:47:28.893515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playpauseandstop/Flask-Dropbox -https://github.com/playpauseandstop/Flask-Dropbox -Entry file: Flask-Dropbox/testapp/app.py -Scanned: 2016-10-12 12:47:52.487951 -No vulnerabilities found. - - -jpvanhal/flask-basicauth -https://github.com/jpvanhal/flask-basicauth -Entry file: flask-basicauth/test_basicauth.py -Scanned: 2016-10-12 12:48:07.310499 -No vulnerabilities found. - - -mattupstate/flask-negotiate -https://github.com/mattupstate/flask-negotiate -Entry file: flask-negotiate/tests.py -Scanned: 2016-10-12 12:48:18.678245 -No vulnerabilities found. - - -ajford/flask-sendmail -https://github.com/ajford/flask-sendmail -Entry file: flask-sendmail/tests.py -Scanned: 2016-10-12 12:48:23.999775 -No vulnerabilities found. - - -dileeshvar/flask -https://github.com/dileeshvar/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 12:48:48.779924 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jpvanhal/flask-xuacompatible -https://github.com/jpvanhal/flask-xuacompatible -Entry file: flask-xuacompatible/flask_xuacompatible.py -Scanned: 2016-10-12 12:48:50.985522 -No vulnerabilities found. - - -ihor/FlaskTest -https://github.com/ihor/FlaskTest -Entry file: FlaskTest/FileShare/app.py -Scanned: 2016-10-12 12:48:52.300289 -No vulnerabilities found. - - -mrigor/url-shortener -https://github.com/mrigor/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-12 12:48:58.516906 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gumho/minimal-flask-gae-template -https://github.com/gumho/minimal-flask-gae-template -Entry file: minimal-flask-gae-template/packages/flask/sessions.py -Scanned: 2016-10-12 12:49:09.395375 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jamesward/hello-python-flask -https://github.com/jamesward/hello-python-flask -Entry file: hello-python-flask/web.py -Scanned: 2016-10-12 12:49:18.648274 -No vulnerabilities found. - - -khanhnguyenqk/flask-example -https://github.com/khanhnguyenqk/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 12:49:24.620516 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fnava621/flask-blog -https://github.com/fnava621/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 12:49:51.906325 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -higumachan/ladytile_flask -https://github.com/higumachan/ladytile_flask -Entry file: ladytile_flask/app.py -Scanned: 2016-10-12 12:49:53.086849 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gkoberger/gkoberger-flask -https://github.com/gkoberger/gkoberger-flask -Entry file: gkoberger-flask/app.py -Scanned: 2016-10-12 12:49:59.337330 -No vulnerabilities found. - - -teerytko/nokiantorpedo-flask -https://github.com/teerytko/nokiantorpedo-flask -Entry file: nokiantorpedo-flask/src/userapp.py -Scanned: 2016-10-12 12:50:00.689165 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pewpewarrows/Prometheus-Flask -https://github.com/Pewpewarrows/Prometheus-Flask -Entry file: None -Scanned: 2016-10-12 12:50:10.723881 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pewpewarrows/Prometheus-Flask. - -jrheard/task-flask -https://github.com/jrheard/task-flask -Entry file: task-flask/task-flask/app.py -Scanned: 2016-10-12 12:50:19.001811 -No vulnerabilities found. - - -alekzvik/testing-fs -https://github.com/alekzvik/testing-fs -Entry file: testing-fs/simple_app.py -Scanned: 2016-10-12 12:50:25.200362 -No vulnerabilities found. - - -yefim/TwilioPusherFlask -https://github.com/yefim/TwilioPusherFlask -Entry file: TwilioPusherFlask/app.py -Scanned: 2016-10-12 12:50:35.632372 -No vulnerabilities found. - - -rduplain/flask-svg-example -https://github.com/rduplain/flask-svg-example -Entry file: flask-svg-example/app.py -Scanned: 2016-10-12 12:50:36.864404 -No vulnerabilities found. - - -nulogy/competition-flask-bootstrap -https://github.com/nulogy/competition-flask-bootstrap -Entry file: competition-flask-bootstrap/app.py -Scanned: 2016-10-12 12:50:38.056787 -No vulnerabilities found. - - -pythonclt/cltwit -https://github.com/pythonclt/cltwit -Entry file: cltwit/minitwit.py -Scanned: 2016-10-12 12:50:49.433564 -No vulnerabilities found. - - -mikejarrett/company-time-clock -https://github.com/mikejarrett/company-time-clock -Entry file: company-time-clock/timeclock/webapp/__init__.py -Scanned: 2016-10-12 12:50:53.909464 -No vulnerabilities found. - - -lyaunzbe/Foo -https://github.com/lyaunzbe/Foo -Entry file: Foo/foo.py -Scanned: 2016-10-12 12:50:55.101124 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fnava621/heroku-flaskstyle-test -https://github.com/fnava621/heroku-flaskstyle-test -Entry file: heroku-flaskstyle-test/app.py -Scanned: 2016-10-12 12:51:04.503886 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: heroku-flaskstyle-test/.#app.py - -gofetch/fetchweb -https://github.com/gofetch/fetchweb -Entry file: fetchweb/fetchweb/__init__.py -Scanned: 2016-10-12 12:51:09.151487 -Vulnerability 1: -File: fetchweb/fetchweb/views.py - > User input at line 144, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: fetchweb/fetchweb/views.py - > Line 147: filename = secure_filename(file.filename) -File: fetchweb/fetchweb/views.py - > reaches line 148, trigger word "flash(": - flash('uploaded file: %s' % filename) - -Vulnerability 2: -File: fetchweb/fetchweb/views.py - > User input at line 145, trigger word "form[": - url = request.form['torrent-url'] -File: fetchweb/fetchweb/views.py - > reaches line 150, trigger word "flash(": - flash('uploaded url: %s' % url) - - - -rDaffa/Firstlight-Alarm -https://github.com/rDaffa/Firstlight-Alarm -Entry file: Firstlight-Alarm/app.py -Scanned: 2016-10-12 12:51:19.408719 -No vulnerabilities found. - - -metllord/stumble_score_py -https://github.com/metllord/stumble_score_py -Entry file: stumble_score_py/web.py -Scanned: 2016-10-12 12:51:26.325642 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tetsuharu/tawlkbox -https://github.com/tetsuharu/tawlkbox -Entry file: tawlkbox/__init__.py -Scanned: 2016-10-12 12:51:27.513616 -No vulnerabilities found. - - -mbr/flask-bootstrap -https://github.com/mbr/flask-bootstrap -Entry file: flask-bootstrap/sample_application/__init__.py -Scanned: 2016-10-12 12:51:42.023936 -No vulnerabilities found. - - -closeio/flask-mongorest -https://github.com/closeio/flask-mongorest -Entry file: flask-mongorest/example/app.py -Scanned: 2016-10-12 12:51:51.468672 -No vulnerabilities found. - - -mattupstate/flask-principal -https://github.com/mattupstate/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-12 12:51:52.951769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dansimau/flask-bootstrap -https://github.com/dansimau/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-12 12:51:55.681426 -No vulnerabilities found. - - -thrisp/flask-celery-example -https://github.com/thrisp/flask-celery-example -Entry file: flask-celery-example/app.py -Scanned: 2016-10-12 12:52:01.990956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jhezjkp/flask-principal -https://github.com/jhezjkp/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-12 12:52:08.474128 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yefim/flask-heroku-sample -https://github.com/yefim/flask-heroku-sample -Entry file: flask-heroku-sample/app.py -Scanned: 2016-10-12 12:52:19.711991 -No vulnerabilities found. - - -whichlight/flask-tweepy-oauth -https://github.com/whichlight/flask-tweepy-oauth -Entry file: flask-tweepy-oauth/server.py -Scanned: 2016-10-12 12:52:25.949429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kofrasa/flask-apputils -https://github.com/kofrasa/flask-apputils -Entry file: flask-apputils/tests/routing/__init__.py -Scanned: 2016-10-12 12:52:39.003331 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/heroku-flask-postgresql-template -https://github.com/cpdean/heroku-flask-postgresql-template -Entry file: heroku-flask-postgresql-template/app.py -Scanned: 2016-10-12 12:52:40.198650 -No vulnerabilities found. - - -asascience-open/Flask_Social_Auth -https://github.com/asascience-open/Flask_Social_Auth -Entry file: Flask_Social_Auth/flask_social_auth/__init__.py -Scanned: 2016-10-12 12:52:50.440694 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aldryncore/webservices -https://github.com/aldryncore/webservices -Entry file: webservices/examples/flask_app/app.py -Scanned: 2016-10-12 12:52:54.755768 -No vulnerabilities found. - - -mattupstate/flask-stache -https://github.com/mattupstate/flask-stache -Entry file: flask-stache/example/__init__.py -Scanned: 2016-10-12 12:52:56.066601 -No vulnerabilities found. - - -rdegges/flask-skel -https://github.com/rdegges/flask-skel -Entry file: flask-skel/skel/__init__.py -Scanned: 2016-10-12 12:53:02.292390 -No vulnerabilities found. - - -svieira/Flask-HipPocket -https://github.com/svieira/Flask-HipPocket -Entry file: Flask-HipPocket/flask_hippocket/pocket.py -Scanned: 2016-10-12 12:53:09.738539 -Vulnerability 1: -File: Flask-HipPocket/flask_hippocket/tests/mapper.py - > User input at line 38, trigger word "get(": - rv = tc.get('/') -File: Flask-HipPocket/flask_hippocket/tests/mapper.py - > reaches line 39, trigger word "url_for(": - self.assertTrue('The url for url_for('endpoint_name') is /' in rv.data.decode('utf-8')) - - - -honza/oauth-service -https://github.com/honza/oauth-service -Entry file: oauth-service/frontend/app.py -Scanned: 2016-10-12 12:53:26.563521 -No vulnerabilities found. - - -albertmatyi/flaskgaellery -https://github.com/albertmatyi/flaskgaellery -Entry file: flaskgaellery/flask/sessions.py -Scanned: 2016-10-12 12:53:30.508973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dougwt/ilmd-flask -https://github.com/dougwt/ilmd-flask -Entry file: ilmd-flask/app/__init__.py -Scanned: 2016-10-12 12:53:40.499417 -No vulnerabilities found. - - -dpflug/flask-barcodes -https://github.com/dpflug/flask-barcodes -Entry file: flask-barcodes/barcodes/__init__.py -Scanned: 2016-10-12 12:53:41.700784 -No vulnerabilities found. - - -feltnerm/flask-boilerplate -https://github.com/feltnerm/flask-boilerplate -Entry file: flask-boilerplate/apps/__init__.py -Scanned: 2016-10-12 12:53:51.403437 -No vulnerabilities found. - - -Dorianux/flask-yafowil -https://github.com/Dorianux/flask-yafowil -Entry file: flask-yafowil/example/srv.py -Scanned: 2016-10-12 12:53:55.936994 -No vulnerabilities found. - - -linyupark/flaskapps -https://github.com/linyupark/flaskapps -Entry file: flaskapps/example/__init__.py -Scanned: 2016-10-12 12:53:57.235942 -No vulnerabilities found. - - -tophatmonocle/lti_tool_provider_example_flask -https://github.com/tophatmonocle/lti_tool_provider_example_flask -Entry file: lti_tool_provider_example_flask/tool_provider.py -Scanned: 2016-10-12 12:54:02.551298 -No vulnerabilities found. - - -bradmontgomery/mempy-flask-tutorial -https://github.com/bradmontgomery/mempy-flask-tutorial -Entry file: mempy-flask-tutorial/hello.py -Scanned: 2016-10-12 12:54:09.883369 -No vulnerabilities found. - - -jaav/flaskbone1 -https://github.com/jaav/flaskbone1 -Entry file: flaskbone1/src/flask/sessions.py -Scanned: 2016-10-12 12:54:28.440201 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grimpy/lxcweb -https://github.com/grimpy/lxcweb -Entry file: lxcweb/lxcweb.py -Scanned: 2016-10-12 12:54:30.329048 -No vulnerabilities found. - - -tophatmonocle/lti_tool_consumer_example_flask -https://github.com/tophatmonocle/lti_tool_consumer_example_flask -Entry file: lti_tool_consumer_example_flask/tool_consumer.py -Scanned: 2016-10-12 12:54:42.043666 -No vulnerabilities found. - - -mbowcock/flask-rest -https://github.com/mbowcock/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-12 12:54:50.569148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -newsapps/flask-bakery -https://github.com/newsapps/flask-bakery -Entry file: flask-bakery/app.py -Scanned: 2016-10-12 12:54:55.851291 -No vulnerabilities found. - - -mnbbrown/flask-sample -https://github.com/mnbbrown/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-12 12:54:58.167280 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmihailenco/flask-hello -https://github.com/vmihailenco/flask-hello -Entry file: flask-hello/blibb_api/hello.py -Scanned: 2016-10-12 12:55:03.378873 -No vulnerabilities found. - - -mbr/flask-obscurity -https://github.com/mbr/flask-obscurity -Entry file: flask-obscurity/tests/test_extension.py -Scanned: 2016-10-12 12:55:10.729474 -No vulnerabilities found. - - -yiwinking/flask_project -https://github.com/yiwinking/flask_project -Entry file: flask_project/flaskr.py -Scanned: 2016-10-12 12:55:20.975521 -No vulnerabilities found. - - -bdelbosc/restapp -https://github.com/bdelbosc/restapp -Entry file: restapp/restapp/__init__.py -Scanned: 2016-10-12 12:55:27.375253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguel250/miguelpz-core -https://github.com/miguel250/miguelpz-core -Entry file: miguelpz-core/app/config/__init__.py -Scanned: 2016-10-12 12:55:30.815852 -No vulnerabilities found. - - -rduplain/flask-svg-example -https://github.com/rduplain/flask-svg-example -Entry file: flask-svg-example/app.py -Scanned: 2016-10-12 12:55:40.057828 -No vulnerabilities found. - - -sergray/Flask-MailErrors -https://github.com/sergray/Flask-MailErrors -Entry file: Flask-MailErrors/tests.py -Scanned: 2016-10-12 12:55:42.296884 -No vulnerabilities found. - - -kalimatas/writedownme -https://github.com/kalimatas/writedownme -Entry file: writedownme/flask/sessions.py -Scanned: 2016-10-12 12:55:57.222261 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dbrgn/schlagzeilengenerator -https://github.com/dbrgn/schlagzeilengenerator -Entry file: schlagzeilengenerator/app/app.py -Scanned: 2016-10-12 12:55:58.962705 -No vulnerabilities found. - - -martyanov/minitwit -https://github.com/martyanov/minitwit -Entry file: minitwit/minitwit.py -Scanned: 2016-10-12 12:56:04.382142 -No vulnerabilities found. - - -sethtrain/buntin.org -https://github.com/sethtrain/buntin.org -Entry file: None -Scanned: 2016-10-12 12:56:10.605182 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sethtrain/buntin.org. - -karanlyons/bestthing -https://github.com/karanlyons/bestthing -Entry file: bestthing/bestthing/__init__.py -Scanned: 2016-10-12 12:56:21.958535 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sneeu/board -https://github.com/sneeu/board -Entry file: board/board.py -Scanned: 2016-10-12 12:56:30.699222 -No vulnerabilities found. - - -omerk/spotify-http-control -https://github.com/omerk/spotify-http-control -Entry file: spotify-http-control/control.py -Scanned: 2016-10-12 12:56:40.970356 -No vulnerabilities found. - - -mfa/weight-app -https://github.com/mfa/weight-app -Entry file: weight-app/weight/main.py -Scanned: 2016-10-12 12:56:44.230905 -Vulnerability 1: -File: weight-app/weight/views.py - > User input at line 43, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: weight-app/weight/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: weight-app/weight/views.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('.index')) - -Vulnerability 2: -File: weight-app/weight/views.py - > User input at line 43, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: weight-app/weight/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: weight-app/weight/views.py - > reaches line 44, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('.index')) - -Vulnerability 3: -File: weight-app/weight/views.py - > User input at line 103, trigger word "get(": - wid = request.args.get('wid') -Reassigned in: - File: weight-app/weight/views.py - > Line 107: elem = Weight.query.get(wid) - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 138: elem = Weight(weight=request.form['weight']) - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - -Vulnerability 4: -File: weight-app/weight/views.py - > User input at line 107, trigger word "get(": - elem = Weight.query.get(wid) -Reassigned in: - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 138: elem = Weight(weight=request.form['weight']) - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - -Vulnerability 5: -File: weight-app/weight/views.py - > User input at line 138, trigger word "form[": - elem = Weight(weight=request.form['weight']) -Reassigned in: - File: weight-app/weight/views.py - > Line 107: elem = Weight.query.get(wid) - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - - - -dsosby/pycanoed -https://github.com/dsosby/pycanoed -Entry file: pycanoed/app.py -Scanned: 2016-10-12 12:56:54.124340 -No vulnerabilities found. - - -danlamanna/Jackhammer-Gateway -https://github.com/danlamanna/Jackhammer-Gateway -Entry file: Jackhammer-Gateway/api.py -Scanned: 2016-10-12 12:56:56.475325 -No vulnerabilities found. - - -digiblink/reflaskr -https://github.com/digiblink/reflaskr -Entry file: reflaskr/app.py -Scanned: 2016-10-12 12:56:59.070047 -No vulnerabilities found. - - -Maplecroft/Ansel -https://github.com/Maplecroft/Ansel -Entry file: Ansel/app.py -Scanned: 2016-10-12 12:57:10.919864 -No vulnerabilities found. - - -mattupstate/flask-rq -https://github.com/mattupstate/flask-rq -Entry file: flask-rq/tests/flaskrq_tests.py -Scanned: 2016-10-12 12:57:31.052963 -No vulnerabilities found. - - -klen/Flask-Foundation -https://github.com/klen/Flask-Foundation -Entry file: Flask-Foundation/base/app.py -Scanned: 2016-10-12 12:57:42.852093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ib-lundgren/flask-oauthprovider -https://github.com/ib-lundgren/flask-oauthprovider -Entry file: flask-oauthprovider/examples/client.py -Scanned: 2016-10-12 12:57:44.708991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sashka/flask-googleauth -https://github.com/sashka/flask-googleauth -Entry file: flask-googleauth/flask_googleauth.py -Scanned: 2016-10-12 12:57:53.078523 -No vulnerabilities found. - - -benselme/flask-mako -https://github.com/benselme/flask-mako -Entry file: flask-mako/flask_mako.py -Scanned: 2016-10-12 12:57:57.643986 -No vulnerabilities found. - - -chriszf/flask_todolist -https://github.com/chriszf/flask_todolist -Entry file: flask_todolist/todolist/model.py -Scanned: 2016-10-12 12:58:10.819268 -No vulnerabilities found. - - -srusskih/flask-uploads -https://github.com/srusskih/flask-uploads -Entry file: flask-uploads/tests/test-uploads.py -Scanned: 2016-10-12 12:58:23.349387 -No vulnerabilities found. - - -Kozea/Flask-WeasyPrint -https://github.com/Kozea/Flask-WeasyPrint -Entry file: Flask-WeasyPrint/flask_weasyprint/tests.py -Scanned: 2016-10-12 12:58:28.920582 -No vulnerabilities found. - - -mattupstate/flask-environments -https://github.com/mattupstate/flask-environments -Entry file: flask-environments/tests/__init__.py -Scanned: 2016-10-12 12:58:31.289403 -No vulnerabilities found. - - -kofrasa/flask-apputils -https://github.com/kofrasa/flask-apputils -Entry file: flask-apputils/tests/routing/__init__.py -Scanned: 2016-10-12 12:58:44.268178 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DeaconDesperado/Flask-SQLAlchemy-Example -https://github.com/DeaconDesperado/Flask-SQLAlchemy-Example -Entry file: Flask-SQLAlchemy-Example/testapp.py -Scanned: 2016-10-12 12:58:53.536171 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -closeio/flask-common -https://github.com/closeio/flask-common -Entry file: flask-common/tests/__init__.py -Scanned: 2016-10-12 12:58:58.503067 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/flask-snooze -https://github.com/ahri/flask-snooze -Entry file: flask-snooze/tests/test_snooze.py -Scanned: 2016-10-12 12:58:59.818705 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jokull/flask-halalchemy -https://github.com/jokull/flask-halalchemy -Entry file: flask-halalchemy/test_example.py -Scanned: 2016-10-12 12:59:05.129345 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kofrasa/flaskapp -https://github.com/kofrasa/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 12:59:11.432783 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomasd/flask-emailactivation -https://github.com/tomasd/flask-emailactivation -Entry file: flask-emailactivation/tests/test_activation.py -Scanned: 2016-10-12 12:59:23.769079 -No vulnerabilities found. - - -asgoel/flask-twitter -https://github.com/asgoel/flask-twitter -Entry file: flask-twitter/twitter/__init__.py -Scanned: 2016-10-12 12:59:41.225433 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AnIrishDuck/flask-mako-legacy -https://github.com/AnIrishDuck/flask-mako-legacy -Entry file: flask-mako-legacy/test_flask_mako.py -Scanned: 2016-10-12 12:59:45.586936 -No vulnerabilities found. - - -fdb/fliki -https://github.com/fdb/fliki -Entry file: fliki/fliki.py -Scanned: 2016-10-12 12:59:53.834703 -No vulnerabilities found. - - -lazy-coders/mt_scrapper -https://github.com/lazy-coders/mt_scrapper -Entry file: mt_scrapper/mt_scrapper.py -Scanned: 2016-10-12 13:00:00.596999 -No vulnerabilities found. - - -Senso/fiasco-flask -https://github.com/Senso/fiasco-flask -Entry file: fiasco-flask/fiasco/__init__.py -Scanned: 2016-10-12 13:00:02.056635 -Vulnerability 1: -File: fiasco-flask/fiasco/views.py - > User input at line 109, trigger word ".data": - playset = models.Playset(name=form.name.data, desc=form.description.data, owner=session['uid']) -Reassigned in: - File: fiasco-flask/fiasco/views.py - > Line 119: n_table = models.Details(playset.id, 'need', need_detail) - File: fiasco-flask/fiasco/views.py - > Line 120: o_table = models.Details(playset.id, 'object', obj_detail) - File: fiasco-flask/fiasco/views.py - > Line 121: l_table = models.Details(playset.id, 'location', loc_detail) - File: fiasco-flask/fiasco/views.py - > Line 122: r_table = models.Details(playset.id, 'relationship', rel_detail) - File: fiasco-flask/fiasco/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('new_playset.html',error=error, form=form) - File: fiasco-flask/fiasco/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: fiasco-flask/fiasco/views.py - > reaches line 131, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/edit_playset/' + str(playset.id)) - - - -encodes/flask-snippet -https://github.com/encodes/flask-snippet -Entry file: flask-snippet/app/__init__.py -Scanned: 2016-10-12 13:00:06.035374 -Vulnerability 1: -File: flask-snippet/app/users/views.py - > User input at line 35, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-snippet/app/users/views.py - > Line 40: session['user_id'] = user.id -File: flask-snippet/app/users/views.py - > reaches line 41, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -SmartViking/MaBlag -https://github.com/SmartViking/MaBlag -Entry file: MaBlag/blog.py -Scanned: 2016-10-12 13:00:24.708351 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keithfancher/Flaskr -https://github.com/keithfancher/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 13:00:30.015953 -No vulnerabilities found. - - -daviddedden/flaskr -https://github.com/daviddedden/flaskr -Entry file: flaskr/test.py -Scanned: 2016-10-12 13:00:36.674004 -No vulnerabilities found. - - -tophatmonocle/lti_tool_provider_example_flask -https://github.com/tophatmonocle/lti_tool_provider_example_flask -Entry file: lti_tool_provider_example_flask/tool_provider.py -Scanned: 2016-10-12 13:00:43.013222 -No vulnerabilities found. - - -filipecifali/Flask-Ping-Site -https://github.com/filipecifali/Flask-Ping-Site -Entry file: Flask-Ping-Site/flaskSite.py -Scanned: 2016-10-12 13:00:46.366107 -No vulnerabilities found. - - -DanielKinsman/flask-pyjs-jsonrpc-test -https://github.com/DanielKinsman/flask-pyjs-jsonrpc-test -Entry file: flask-pyjs-jsonrpc-test/web.py -Scanned: 2016-10-12 13:00:54.651434 -No vulnerabilities found. - - -whichlight/flask-couchdb-binary-image-labeler -https://github.com/whichlight/flask-couchdb-binary-image-labeler -Entry file: flask-couchdb-binary-image-labeler/server.py -Scanned: 2016-10-12 13:01:01.551915 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tophatmonocle/lti_tool_consumer_example_flask -https://github.com/tophatmonocle/lti_tool_consumer_example_flask -Entry file: lti_tool_consumer_example_flask/tool_consumer.py -Scanned: 2016-10-12 13:01:06.324098 -No vulnerabilities found. - - -melignus/Appengine-Help-Desk -https://github.com/melignus/Appengine-Help-Desk -Entry file: Appengine-Help-Desk/app.py -Scanned: 2016-10-12 13:01:18.184328 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dustinmm80/flask_test -https://github.com/dustinmm80/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-12 13:01:24.656466 -No vulnerabilities found. - - -curiousleo/kardiopraxis-flask -https://github.com/curiousleo/kardiopraxis-flask -Entry file: kardiopraxis-flask/kardiopraxis.py -Scanned: 2016-10-12 13:01:58.524020 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -encodes/flask-finance -https://github.com/encodes/flask-finance -Entry file: flask-finance/app/__init__.py -Scanned: 2016-10-12 13:01:59.842438 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramin32/Flask-Template -https://github.com/ramin32/Flask-Template -Entry file: Flask-Template/project_name/__init__.py -Scanned: 2016-10-12 13:02:03.039611 -No vulnerabilities found. - - -toastercup/flask-scormcloud -https://github.com/toastercup/flask-scormcloud -Entry file: flask-scormcloud/manage.py -Scanned: 2016-10-12 13:02:06.346959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -weldan/flask_setup -https://github.com/weldan/flask_setup -Entry file: flask_setup/app.py -Scanned: 2016-10-12 13:02:12.657298 -No vulnerabilities found. - - -michellesun/flask_ms -https://github.com/michellesun/flask_ms -Entry file: flask_ms/flaskr.py -Scanned: 2016-10-12 13:02:25.574561 -No vulnerabilities found. - - -shea256/flask-project-template -https://github.com/shea256/flask-project-template -Entry file: flask-project-template/app.py -Scanned: 2016-10-12 13:02:35.461214 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-project-template/venv/lib/python2.7/genericpath.py - -Kinghack/flask-oauth-china -https://github.com/Kinghack/flask-oauth-china -Entry file: flask-oauth-china/example/facebook.py -Scanned: 2016-10-12 13:02:37.044397 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -StefanWallin/python-Flask-lab -https://github.com/StefanWallin/python-Flask-lab -Entry file: python-Flask-lab/app.py -Scanned: 2016-10-12 13:02:44.304432 -No vulnerabilities found. - - -rvause/project-base-flask -https://github.com/rvause/project-base-flask -Entry file: None -Scanned: 2016-10-12 13:02:55.075196 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rvause/project-base-flask. - -emilianox/opener -https://github.com/emilianox/opener -Entry file: opener/opener.py -Scanned: 2016-10-12 13:03:00.417339 -No vulnerabilities found. - - -oksana-slu/sqlfla -https://github.com/oksana-slu/sqlfla -Entry file: sqlfla/eventor/__init__.py -Scanned: 2016-10-12 13:03:06.427888 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -johngriffin/ldpy-api -https://github.com/johngriffin/ldpy-api -Entry file: ldpy-api/app.py -Scanned: 2016-10-12 13:03:07.721029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nryoung/Array-Size -https://github.com/nryoung/Array-Size -Entry file: Array-Size/raid.py -Scanned: 2016-10-12 13:03:13.036701 -No vulnerabilities found. - - -ciaron/pandaflask_old -https://github.com/ciaron/pandaflask_old -Entry file: pandaflask_old/pandachrome.py -Scanned: 2016-10-12 13:03:37.132845 -Vulnerability 1: -File: pandaflask_old/pandachrome.py - > User input at line 208, trigger word "get(": - title = request.form.get('title') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 217: category = Category(title=title, description=description, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 218, trigger word "flash(": - flash('successfully created new category ' + title) - -Vulnerability 2: -File: pandaflask_old/pandachrome.py - > User input at line 230, trigger word "get(": - title = request.form.get('title') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 240: project = Project(title=title, description=description, category_id=category_id, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 241, trigger word "flash(": - flash('successfully created new project ' + title + ', category ' + category_id) - -Vulnerability 3: -File: pandaflask_old/pandachrome.py - > User input at line 232, trigger word "get(": - category_id = request.form.get('category_id') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 240: project = Project(title=title, description=description, category_id=category_id, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 241, trigger word "flash(": - flash('successfully created new project ' + title + ', category ' + category_id) - - - -dlitvakb/MOVEapp -https://github.com/dlitvakb/MOVEapp -Entry file: MOVEapp/appserver.py -Scanned: 2016-10-12 13:03:38.745269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clee/boilerplate -https://github.com/clee/boilerplate -Entry file: boilerplate/boilerplate.py -Scanned: 2016-10-12 13:03:44.982625 -No vulnerabilities found. - - -hvnsweeting/mtaskflask -https://github.com/hvnsweeting/mtaskflask -Entry file: mtaskflask/mtask.py -Scanned: 2016-10-12 13:03:47.421687 -No vulnerabilities found. - - -keithfancher/Stories -https://github.com/keithfancher/Stories -Entry file: Stories/stories.py -Scanned: 2016-10-12 13:03:55.831750 -No vulnerabilities found. - - -t20/henhealth -https://github.com/t20/henhealth -Entry file: henhealth/hen.py -Scanned: 2016-10-12 13:04:01.726293 -No vulnerabilities found. - - -klinkin/vksunshine -https://github.com/klinkin/vksunshine -Entry file: vksunshine/vksunshine/application.py -Scanned: 2016-10-12 13:04:09.553183 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ChrisAnn/FRog -https://github.com/ChrisAnn/FRog -Entry file: FRog/FRog.py -Scanned: 2016-10-12 13:04:10.786763 -No vulnerabilities found. - - -hirish/DinnerDesignr -https://github.com/hirish/DinnerDesignr -Entry file: DinnerDesignr/dinnerDesignr.py -Scanned: 2016-10-12 13:04:13.906876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jakecoffman/flask-tutorial -https://github.com/jakecoffman/flask-tutorial -Entry file: flask-tutorial/part 6 - databases/flaskr.py -Scanned: 2016-10-12 13:04:33.882139 -No vulnerabilities found. - - -syrusakbary/Flask-SuperAdmin -https://github.com/syrusakbary/Flask-SuperAdmin -Entry file: Flask-SuperAdmin/flask_superadmin/tests/test_model.py -Scanned: 2016-10-12 13:04:43.296498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guotie/flaskbbs -https://github.com/guotie/flaskbbs -Entry file: flaskbbs/flaskcommon/auth/views.py -Scanned: 2016-10-12 13:04:46.487607 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdegges/flask-dynamo -https://github.com/rdegges/flask-dynamo -Entry file: flask-dynamo/tests/test_manager.py -Scanned: 2016-10-12 13:04:48.991646 -No vulnerabilities found. - - -maxcountryman/flask-themes -https://github.com/maxcountryman/flask-themes -Entry file: flask-themes/tests/test-themes.py -Scanned: 2016-10-12 13:04:56.707715 -No vulnerabilities found. - - -klen/Flask-Collect -https://github.com/klen/Flask-Collect -Entry file: Flask-Collect/flask_collect/collect.py -Scanned: 2016-10-12 13:05:02.624962 -No vulnerabilities found. - - -kvesteri/flask-storage -https://github.com/kvesteri/flask-storage -Entry file: flask-storage/tests/__init__.py -Scanned: 2016-10-12 13:05:11.976758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thesteve0/openshift-mongo-flask-example -https://github.com/thesteve0/openshift-mongo-flask-example -Entry file: openshift-mongo-flask-example/wsgi/myflaskapp.py -Scanned: 2016-10-12 13:05:13.423039 -No vulnerabilities found. - - -zeraholladay/Flask-Oauth2-Example -https://github.com/zeraholladay/Flask-Oauth2-Example -Entry file: Flask-Oauth2-Example/app.py -Scanned: 2016-10-12 13:05:34.275471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mtth/kit -https://github.com/mtth/kit -Entry file: kit/examples/poller/poller/app/views.py -Scanned: 2016-10-12 13:05:45.137207 -No vulnerabilities found. - - -codecool/flask-app-structure -https://github.com/codecool/flask-app-structure -Entry file: flask-app-structure/myapp/__init__.py -Scanned: 2016-10-12 13:05:46.626977 -No vulnerabilities found. - - -DeaconDesperado/Flask-SQLAlchemy-Example -https://github.com/DeaconDesperado/Flask-SQLAlchemy-Example -Entry file: Flask-SQLAlchemy-Example/testapp.py -Scanned: 2016-10-12 13:05:47.113148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kvesteri/flask-test -https://github.com/kvesteri/flask-test -Entry file: flask-test/tests/__init__.py -Scanned: 2016-10-12 13:05:56.715689 -No vulnerabilities found. - - -ipconfiger/pyImageServer -https://github.com/ipconfiger/pyImageServer -Entry file: pyImageServer/serv.py -Scanned: 2016-10-12 13:06:12.045633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Khan/flask-wtf -https://github.com/Khan/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-12 13:06:16.087352 -No vulnerabilities found. - - -ravenac95/flask-command -https://github.com/ravenac95/flask-command -Entry file: flask-command/tests/fixtures/factory_app.py -Scanned: 2016-10-12 13:06:27.426933 -No vulnerabilities found. - - -encodes/flask-snippet -https://github.com/encodes/flask-snippet -Entry file: flask-snippet/app/__init__.py -Scanned: 2016-10-12 13:06:47.340887 -Vulnerability 1: -File: flask-snippet/app/users/views.py - > User input at line 35, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-snippet/app/users/views.py - > Line 40: session['user_id'] = user.id -File: flask-snippet/app/users/views.py - > reaches line 41, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -vaus/Flaskyll -https://github.com/vaus/Flaskyll -Entry file: Flaskyll/scripts/flaskyll.py -Scanned: 2016-10-12 13:06:48.629387 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -christianpbrink/flaskdemo -https://github.com/christianpbrink/flaskdemo -Entry file: flaskdemo/src/flaskdemo/__init__.py -Scanned: 2016-10-12 13:06:57.004546 -No vulnerabilities found. - - -vsergeyev/flasklutskio -https://github.com/vsergeyev/flasklutskio -Entry file: flasklutskio/app.py -Scanned: 2016-10-12 13:07:02.208082 -No vulnerabilities found. - - -lb1a/flaskplay -https://github.com/lb1a/flaskplay -Entry file: flaskplay/flaskr.py -Scanned: 2016-10-12 13:07:05.522263 -No vulnerabilities found. - - -fdb/helloflask -https://github.com/fdb/helloflask -Entry file: helloflask/helloflask.py -Scanned: 2016-10-12 13:07:12.775375 -No vulnerabilities found. - - -gparuthi/FlaskServer -https://github.com/gparuthi/FlaskServer -Entry file: FlaskServer/server.py -Scanned: 2016-10-12 13:07:35.015874 -No vulnerabilities found. - - -iambibhas/flask-blog -https://github.com/iambibhas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:07:46.012549 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -alexisbellido/flask-basics -https://github.com/alexisbellido/flask-basics -Entry file: flask-basics/hello.py -Scanned: 2016-10-12 13:07:49.377384 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akaptur/Flask-tutorial -https://github.com/akaptur/Flask-tutorial -Entry file: Flask-tutorial/flask_app.py -Scanned: 2016-10-12 13:07:57.602640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ihptru/Ubot-flask -https://github.com/ihptru/Ubot-flask -Entry file: Ubot-flask/ubotflask.py -Scanned: 2016-10-12 13:08:02.811997 -No vulnerabilities found. - - -Dipsomaniac/Flask-Mixer -https://github.com/Dipsomaniac/Flask-Mixer -Entry file: Flask-Mixer/tests/__init__.py -Scanned: 2016-10-12 13:08:06.493025 -No vulnerabilities found. - - -bx2/handbag-flask -https://github.com/bx2/handbag-flask -Entry file: handbag-flask/flaskapp-template/app.py -Scanned: 2016-10-12 13:08:13.725345 -No vulnerabilities found. - - -whoeverest/NSND-Upvoting -https://github.com/whoeverest/NSND-Upvoting -Entry file: NSND-Upvoting/upvote-list.py -Scanned: 2016-10-12 13:08:35.891237 -No vulnerabilities found. - - -naudo/flask-hello-world -https://github.com/naudo/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-12 13:08:45.813047 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Smil3y/MyFlaskr -https://github.com/Smil3y/MyFlaskr -Entry file: MyFlaskr/flaskr.py -Scanned: 2016-10-12 13:08:58.116558 -No vulnerabilities found. - - -jonathancone/helloflask -https://github.com/jonathancone/helloflask -Entry file: helloflask/app.py -Scanned: 2016-10-12 13:09:03.954453 -No vulnerabilities found. - - -vicould/simple_blog -https://github.com/vicould/simple_blog -Entry file: simple_blog/blog.py -Scanned: 2016-10-12 13:09:06.535283 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rafax/flush -https://github.com/rafax/flush -Entry file: flush/flush.py -Scanned: 2016-10-12 13:09:14.707096 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fenbox/chord -https://github.com/fenbox/chord -Entry file: chord/chord.py -Scanned: 2016-10-12 13:09:16.100953 -No vulnerabilities found. - - -R2Drink2/r2drink2-server -https://github.com/R2Drink2/r2drink2-server -Entry file: None -Scanned: 2016-10-12 13:09:29.521179 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/R2Drink2/r2drink2-server. - -mafrosis/youtube-dl -https://github.com/mafrosis/youtube-dl -Entry file: youtube-dl/youtube_dl/__init__.py -Scanned: 2016-10-12 13:09:37.377731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrwilson/git-serve -https://github.com/mrwilson/git-serve -Entry file: git-serve/git_serve/app.py -Scanned: 2016-10-12 13:09:47.160282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -allaud/Sufx -https://github.com/allaud/Sufx -Entry file: Sufx/app.py -Scanned: 2016-10-12 13:09:51.324123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miniatureape/etsy-api-demo -https://github.com/miniatureape/etsy-api-demo -Entry file: etsy-api-demo/app.py -Scanned: 2016-10-12 13:09:58.709380 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -troythewolfe/nNest -https://github.com/troythewolfe/nNest -Entry file: None -Scanned: 2016-10-12 13:10:08.287042 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/troythewolfe/nNest. - -andor44/lohere- -https://github.com/andor44/lohere- -Entry file: lohere-/lohereminusz.py -Scanned: 2016-10-12 13:10:09.837871 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -richard-to/dashgourd-web-api -https://github.com/richard-to/dashgourd-web-api -Entry file: dashgourd-web-api/example/app.py -Scanned: 2016-10-12 13:10:14.102310 -No vulnerabilities found. - - -pyloque/doumail_machine -https://github.com/pyloque/doumail_machine -Entry file: doumail_machine/main.py -Scanned: 2016-10-12 13:10:17.039812 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clee/boilerplate -https://github.com/clee/boilerplate -Entry file: boilerplate/boilerplate.py -Scanned: 2016-10-12 13:10:30.363281 -No vulnerabilities found. - - -ashutoshrishi/adventuresontheweb -https://github.com/ashutoshrishi/adventuresontheweb -Entry file: adventuresontheweb/flask/sessions.py -Scanned: 2016-10-12 13:10:41.174355 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trenta3dev/wafwfy -https://github.com/trenta3dev/wafwfy -Entry file: wafwfy/wafwfy/__init__.py -Scanned: 2016-10-12 13:10:43.585764 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bendavis78/irclog -https://github.com/bendavis78/irclog -Entry file: irclog/app.py -Scanned: 2016-10-12 13:10:47.886744 -No vulnerabilities found. - - -practo/MyCQ -https://github.com/practo/MyCQ -Entry file: MyCQ/mycq/__init__.py -Scanned: 2016-10-12 13:10:51.381249 -No vulnerabilities found. - - -sijinjoseph/multunus-puzzle -https://github.com/sijinjoseph/multunus-puzzle -Entry file: multunus-puzzle/src/app.py -Scanned: 2016-10-12 13:11:00.519742 -Vulnerability 1: -File: multunus-puzzle/src/app.py - > User input at line 21, trigger word "form[": - redirect_to = url_for('tagcloud',twitterhandle=request.form['handle']) -Reassigned in: - File: multunus-puzzle/src/app.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: multunus-puzzle/src/app.py - > reaches line 22, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(redirect_to) - - - -gaker/slides -https://github.com/gaker/slides -Entry file: slides/slides.py -Scanned: 2016-10-12 13:11:05.162249 -No vulnerabilities found. - - -addumb/toyapp -https://github.com/addumb/toyapp -Entry file: toyapp/toy/__init__.py -Scanned: 2016-10-12 13:11:16.558195 -Vulnerability 1: -File: toyapp/toy/views.py - > User input at line 77, trigger word "form[": - val = float(request.form['value']) -Reassigned in: - File: toyapp/toy/views.py - > Line 86: ret_MAYBE_FUNCTION_NAME = 'Setting %s to %s at %s' % (key, val, str(ts)) -File: toyapp/toy/views.py - > reaches line 83, trigger word "execute(": - g.db.execute('insert into events (key, value, ts) values (?, ?, ?)', (key, val, ts)) - -Vulnerability 2: -File: toyapp/toy/views.py - > User input at line 79, trigger word "form[": - ts = float(request.form['ts']) -Reassigned in: - File: toyapp/toy/views.py - > Line 81: ts = time.time() - File: toyapp/toy/views.py - > Line 86: ret_MAYBE_FUNCTION_NAME = 'Setting %s to %s at %s' % (key, val, str(ts)) -File: toyapp/toy/views.py - > reaches line 83, trigger word "execute(": - g.db.execute('insert into events (key, value, ts) values (?, ?, ?)', (key, val, ts)) - - - -petezhut/BigDay -https://github.com/petezhut/BigDay -Entry file: BigDay/app.py -Scanned: 2016-10-12 13:11:30.989786 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -akabaker/remote_rgb -https://github.com/akabaker/remote_rgb -Entry file: remote_rgb/app.py -Scanned: 2016-10-12 13:11:38.271123 -No vulnerabilities found. - - -kyubuns/favme -https://github.com/kyubuns/favme -Entry file: favme/hello.py -Scanned: 2016-10-12 13:11:42.614613 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelverhagen/flask-rauth -https://github.com/joelverhagen/flask-rauth -Entry file: flask-rauth/example/facebook.py -Scanned: 2016-10-12 13:11:52.924250 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattupstate/flask-security-example -https://github.com/mattupstate/flask-security-example -Entry file: flask-security-example/app.py -Scanned: 2016-10-12 13:11:59.354066 -No vulnerabilities found. - - -MichaelDiBernardo/ddd-flask-example -https://github.com/MichaelDiBernardo/ddd-flask-example -Entry file: ddd-flask-example/blogex/blogex_app.py -Scanned: 2016-10-12 13:12:05.744774 -No vulnerabilities found. - - -FelixLoether/flask-image-upload-thing -https://github.com/FelixLoether/flask-image-upload-thing -Entry file: flask-image-upload-thing/example.py -Scanned: 2016-10-12 13:12:11.994286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jjjjeeffff/flask-skeleton -https://github.com/jjjjeeffff/flask-skeleton -Entry file: None -Scanned: 2016-10-12 13:12:14.539710 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jjjjeeffff/flask-skeleton. - -mgood/flask-failsafe -https://github.com/mgood/flask-failsafe -Entry file: flask-failsafe/test/test_app.py -Scanned: 2016-10-12 13:12:17.059555 -No vulnerabilities found. - - -arvindkhadri/flask-social -https://github.com/arvindkhadri/flask-social -Entry file: flask-social/tests/test_app/__init__.py -Scanned: 2016-10-12 13:12:39.630176 -No vulnerabilities found. - - -dantezhu/flask_util_js -https://github.com/dantezhu/flask_util_js -Entry file: flask_util_js/examples/main.py -Scanned: 2016-10-12 13:12:43.113923 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kielpedia/flask-sqlalchemy-postgres-heroku-example -https://github.com/kielpedia/flask-sqlalchemy-postgres-heroku-example -Entry file: flask-sqlalchemy-postgres-heroku-example/Flasktest/__init__.py -Scanned: 2016-10-12 13:12:52.904325 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yamatt/flask-blog -https://github.com/yamatt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:12:59.468185 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -marconi/flask-chat -https://github.com/marconi/flask-chat -Entry file: flask-chat/chat.py -Scanned: 2016-10-12 13:13:07.071325 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjurney/enron-python-flask-cassandra-pig -https://github.com/rjurney/enron-python-flask-cassandra-pig -Entry file: enron-python-flask-cassandra-pig/index.py -Scanned: 2016-10-12 13:13:11.440649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KaviCorp/flask_pysaml2 -https://github.com/KaviCorp/flask_pysaml2 -Entry file: flask_pysaml2/tests/test_saml.py -Scanned: 2016-10-12 13:13:16.267570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulchakravarti/flask-skeleton -https://github.com/paulchakravarti/flask-skeleton -Entry file: None -Scanned: 2016-10-12 13:13:38.776063 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paulchakravarti/flask-skeleton. - -tomekwojcik/flask-htauth -https://github.com/tomekwojcik/flask-htauth -Entry file: flask-htauth/example.py -Scanned: 2016-10-12 13:13:43.965794 -No vulnerabilities found. - - -skual/backend-flask -https://github.com/skual/backend-flask -Entry file: None -Scanned: 2016-10-12 13:13:49.404256 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/skual/backend-flask. - -memeticlabs/flask-mongokit -https://github.com/memeticlabs/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-12 13:14:00.431464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mokshaproject/moksha-flask-hello_world -https://github.com/mokshaproject/moksha-flask-hello_world -Entry file: moksha-flask-hello_world/tutorial.py -Scanned: 2016-10-12 13:14:16.751782 -No vulnerabilities found. - - -geekforbrains/squid -https://github.com/geekforbrains/squid -Entry file: squid/run.py -Scanned: 2016-10-12 13:14:18.430023 -No vulnerabilities found. - - -fallingfree/flask-principal-simple-example -https://github.com/fallingfree/flask-principal-simple-example -Entry file: flask-principal-simple-example/auth.py -Scanned: 2016-10-12 13:14:32.881458 -Vulnerability 1: -File: flask-principal-simple-example/auth.py - > User input at line 136, trigger word ".data": - user = User.query.filter(User.username == form.username.data).first() -File: flask-principal-simple-example/auth.py - > reaches line 143, trigger word "flash(": - flash('欢迎你, %s' % user.username) - - - -trilan/stencil-flask -https://github.com/trilan/stencil-flask -Entry file: stencil-flask/stencil_flask/template/{app_name}/__init__.py -Scanned: 2016-10-12 13:14:43.665918 -No vulnerabilities found. - - -yangjiandong/flaskr -https://github.com/yangjiandong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:14:50.117381 -No vulnerabilities found. - - -NEETFUTURE/flaskr -https://github.com/NEETFUTURE/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:14:54.535962 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -narendranag/Flaskr -https://github.com/narendranag/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 13:15:07.353136 -No vulnerabilities found. - - -luanfonceca/flaskbook -https://github.com/luanfonceca/flaskbook -Entry file: flaskbook/mange.py -Scanned: 2016-10-12 13:15:12.738485 -No vulnerabilities found. - - -johnschimmel/ITP-DWD-Fall2012-Week3-First-Server -https://github.com/johnschimmel/ITP-DWD-Fall2012-Week3-First-Server -Entry file: ITP-DWD-Fall2012-Week3-First-Server/app.py -Scanned: 2016-10-12 13:15:17.156799 -No vulnerabilities found. - - -saltycrane/flask-principal-example -https://github.com/saltycrane/flask-principal-example -Entry file: flask-principal-example/main.py -Scanned: 2016-10-12 13:15:18.381670 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KrzysztofWilczek/FlaskMaschines -https://github.com/KrzysztofWilczek/FlaskMaschines -Entry file: FlaskMaschines/app.py -Scanned: 2016-10-12 13:15:34.750181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trenta3dev/ziga -https://github.com/trenta3dev/ziga -Entry file: ziga/ziga/__init__.py -Scanned: 2016-10-12 13:15:41.121804 -No vulnerabilities found. - - -DeaconDesperado/flask_skel -https://github.com/DeaconDesperado/flask_skel -Entry file: flask_skel/listener.py -Scanned: 2016-10-12 13:15:54.551823 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -calebmadrigal/flask-adventures -https://github.com/calebmadrigal/flask-adventures -Entry file: flask-adventures/annuity_calculator.py -Scanned: 2016-10-12 13:16:02.388685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchibbins/simple-flask -https://github.com/marchibbins/simple-flask -Entry file: simple-flask/simple-flask.py -Scanned: 2016-10-12 13:16:17.660627 -No vulnerabilities found. - - -iambibhas/flask-blog -https://github.com/iambibhas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:16:18.199177 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -imiric/flask-scaffold -https://github.com/imiric/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-12 13:16:41.207937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arvs/CURC-flask -https://github.com/arvs/CURC-flask -Entry file: CURC-flask/app.py -Scanned: 2016-10-12 13:16:56.693226 -No vulnerabilities found. - - -suneel0101/flask-adventure -https://github.com/suneel0101/flask-adventure -Entry file: flask-adventure/app.py -Scanned: 2016-10-12 13:16:57.961160 -No vulnerabilities found. - - -memeticlabs/Redis-Flask -https://github.com/memeticlabs/Redis-Flask -Entry file: Redis-Flask/flask_redis.py -Scanned: 2016-10-12 13:17:03.223743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DartmouthHackerClub/flask_template -https://github.com/DartmouthHackerClub/flask_template -Entry file: flask_template/app.py -Scanned: 2016-10-12 13:17:08.563856 -Vulnerability 1: -File: flask_template/flask_cas.py - > User input at line 19, trigger word "get(": - r = requests.get(validate_url) -Reassigned in: - File: flask_template/flask_cas.py - > Line 20: doc = etree.fromstring(r.text) -File: flask_template/flask_cas.py - > reaches line 22, trigger word "replace(": - ret_MAYBE_FUNCTION_NAME = dict(((key.replace('{http://www.yale.edu/tp/cas}', ''), value) for (key, value) in recursive_dict(doc[0])[1].items())) - - - -bozoid/testblog -https://github.com/bozoid/testblog -Entry file: testblog/index.py -Scanned: 2016-10-12 13:17:19.672932 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: testblog/venv/lib/python2.7/genericpath.py - -alfredhq/alfred-listener -https://github.com/alfredhq/alfred-listener -Entry file: alfred-listener/alfred_listener/__init__.py -Scanned: 2016-10-12 13:17:21.237882 -No vulnerabilities found. - - -dhruvbaldawa/cj_calc -https://github.com/dhruvbaldawa/cj_calc -Entry file: cj_calc/app.py -Scanned: 2016-10-12 13:17:22.640533 -No vulnerabilities found. - - -openplans/shareabouts-flask-client -https://github.com/openplans/shareabouts-flask-client -Entry file: None -Scanned: 2016-10-12 13:17:44.486359 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/openplans/shareabouts-flask-client. - -hagino3000/flask-project-template -https://github.com/hagino3000/flask-project-template -Entry file: flask-project-template/app.py -Scanned: 2016-10-12 13:17:45.070074 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-project-template/venv/lib/python2.7/genericpath.py - -imaimiami/heroku_flask_template -https://github.com/imaimiami/heroku_flask_template -Entry file: heroku_flask_template/app/__init__.py -Scanned: 2016-10-12 13:17:59.229191 -No vulnerabilities found. - - -jhorman/sample-flask-project -https://github.com/jhorman/sample-flask-project -Entry file: sample-flask-project/app.py -Scanned: 2016-10-12 13:18:03.581829 -No vulnerabilities found. - - -infinitylx/test-task -https://github.com/infinitylx/test-task -Entry file: test-task/application.py -Scanned: 2016-10-12 13:18:15.032205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amaudy/flaskr-tutorial -https://github.com/amaudy/flaskr-tutorial -Entry file: flaskr-tutorial/flaskr.py -Scanned: 2016-10-12 13:18:21.416547 -No vulnerabilities found. - - -gavinb/flaskr-eb -https://github.com/gavinb/flaskr-eb -Entry file: flaskr-eb/flaskr.py -Scanned: 2016-10-12 13:18:22.701371 -No vulnerabilities found. - - -vkukushkin88/test_books -https://github.com/vkukushkin88/test_books -Entry file: test_books/db/db_models.py -Scanned: 2016-10-12 13:18:42.501846 -No vulnerabilities found. - - -nicolashery/safire -https://github.com/nicolashery/safire -Entry file: safire/app.py -Scanned: 2016-10-12 13:18:45.755713 -No vulnerabilities found. - - -fjarri/publicfields-backend -https://github.com/fjarri/publicfields-backend -Entry file: publicfields-backend/backend/__init__.py -Scanned: 2016-10-12 13:18:53.187355 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sdornan/imgination -https://github.com/sdornan/imgination -Entry file: imgination/application.py -Scanned: 2016-10-12 13:18:59.709915 -No vulnerabilities found. - - -Citizen01/Kozea-project1 -https://github.com/Citizen01/Kozea-project1 -Entry file: Kozea-project1/index.py -Scanned: 2016-10-12 13:19:06.654375 -Vulnerability 1: -File: Kozea-project1/index.py - > User input at line 110, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: Kozea-project1/index.py - > Line 122: session['username'] = username - File: Kozea-project1/index.py - > Line 123: session['id'] = User.query.filter_by(username=username).first().id - File: Kozea-project1/index.py - > Line 121: session['logged_in'] = True -File: Kozea-project1/index.py - > reaches line 124, trigger word "flash(": - flash('Welcome on Kozupload, %s !' % username, 'success') - - - -noise/fortune-redis -https://github.com/noise/fortune-redis -Entry file: fortune-redis/fortune_server.py -Scanned: 2016-10-12 13:19:12.312959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ipedrazas/surl -https://github.com/ipedrazas/surl -Entry file: surl/shortener.py -Scanned: 2016-10-12 13:19:14.640729 -Vulnerability 1: -File: surl/shortener.py - > User input at line 88, trigger word "form[": - link = request.form['link'] -Reassigned in: - File: surl/shortener.py - > Line 92: url = objects.find_one('link'link) -File: surl/shortener.py - > reaches line 95, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('url'URL + url['url_id']) - -Vulnerability 2: -File: surl/shortener.py - > User input at line 88, trigger word "form[": - link = request.form['link'] -Reassigned in: - File: surl/shortener.py - > Line 92: url = objects.find_one('link'link) -File: surl/shortener.py - > reaches line 97, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('url'URL + short_id(link)) - - - -dash1291/grabset -https://github.com/dash1291/grabset -Entry file: grabset/grabset.py -Scanned: 2016-10-12 13:19:22.020201 -No vulnerabilities found. - - -alexmic/trippin -https://github.com/alexmic/trippin -Entry file: trippin/server.py -Scanned: 2016-10-12 13:19:25.036109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aquaya/sawyer -https://github.com/aquaya/sawyer -Entry file: sawyer/application/__init__.py -Scanned: 2016-10-12 13:19:35.785832 -No vulnerabilities found. - - -metermaid/thirstybot -https://github.com/metermaid/thirstybot -Entry file: thirstybot/app.py -Scanned: 2016-10-12 13:19:43.821589 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timney/meblog -https://github.com/timney/meblog -Entry file: meblog/app.py -Scanned: 2016-10-12 13:19:51.008304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oxtopus/barkeeper -https://github.com/oxtopus/barkeeper -Entry file: barkeeper/barkeeper/app.py -Scanned: 2016-10-12 13:19:59.748767 -No vulnerabilities found. - - -ngopal/quote_generator -https://github.com/ngopal/quote_generator -Entry file: quote_generator/main.py -Scanned: 2016-10-12 13:20:04.384353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wesleyk/WhoPaid -https://github.com/wesleyk/WhoPaid -Entry file: WhoPaid/WhoPaid.py -Scanned: 2016-10-12 13:20:09.823973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smanek/challenge -https://github.com/smanek/challenge -Entry file: challenge/challenge.py -Scanned: 2016-10-12 13:20:15.313877 -No vulnerabilities found. - - -neocxi/coursemonitor -https://github.com/neocxi/coursemonitor -Entry file: coursemonitor/flask/sessions.py -Scanned: 2016-10-12 13:20:25.720493 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alfg/inviteme -https://github.com/alfg/inviteme -Entry file: inviteme/inviteme.py -Scanned: 2016-10-12 13:20:27.064471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kfigaj/FizzBuzzPro -https://github.com/kfigaj/FizzBuzzPro -Entry file: FizzBuzzPro/FizzBuzzPro/fizzbuzz.py -Scanned: 2016-10-12 13:20:35.347105 -No vulnerabilities found. - - -richardneish/lists -https://github.com/richardneish/lists -Entry file: lists/lists/__init__.py -Scanned: 2016-10-12 13:20:43.658444 -No vulnerabilities found. - - -MalphasWats/pyDimension -https://github.com/MalphasWats/pyDimension -Entry file: pyDimension/pyDimension/__init__.py -Scanned: 2016-10-12 13:20:47.070330 -Vulnerability 1: -File: pyDimension/pyDimension/views.py - > User input at line 43, trigger word "form[": - filename = request.form['filename'] -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 59: filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) - File: pyDimension/pyDimension/views.py - > Line 61: filename = get_safe_filename(request.form['filename']) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 2: -File: pyDimension/pyDimension/views.py - > User input at line 59, trigger word "form[": - filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 43: filename = request.form['filename'] - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 61: filename = get_safe_filename(request.form['filename']) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 3: -File: pyDimension/pyDimension/views.py - > User input at line 61, trigger word "form[": - filename = get_safe_filename(request.form['filename']) -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 43: filename = request.form['filename'] - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 59: filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 4: -File: pyDimension/pyDimension/access_control.py - > User input at line 20, trigger word "form[": - next = request.form['next'] -Reassigned in: - File: pyDimension/pyDimension/access_control.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('control_panel')) - File: pyDimension/pyDimension/access_control.py - > Line 31: ret_MAYBE_FUNCTION_NAME = render_template('login.html',next=request.args.get('next')) -File: pyDimension/pyDimension/access_control.py - > reaches line 25, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -DanielleSucher/Text-Donation -https://github.com/DanielleSucher/Text-Donation -Entry file: Text-Donation/app.py -Scanned: 2016-10-12 13:20:52.433497 -No vulnerabilities found. - - -flask-restful/flask-restful -https://github.com/flask-restful/flask-restful -Entry file: flask-restful/flask_restful/__init__.py -Scanned: 2016-10-12 13:21:08.123430 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rozza/flask-tumblelog -https://github.com/rozza/flask-tumblelog -Entry file: flask-tumblelog/tumblelog/__init__.py -Scanned: 2016-10-12 13:21:10.459300 -No vulnerabilities found. - - -lixxu/flask-paginate -https://github.com/lixxu/flask-paginate -Entry file: flask-paginate/example/app.py -Scanned: 2016-10-12 13:21:16.731464 -No vulnerabilities found. - - -e-dard/flask-s3 -https://github.com/e-dard/flask-s3 -Entry file: flask-s3/test_flask_static.py -Scanned: 2016-10-12 13:21:28.427980 -No vulnerabilities found. - - -singingwolfboy/flask-misaka -https://github.com/singingwolfboy/flask-misaka -Entry file: flask-misaka/tests.py -Scanned: 2016-10-12 13:21:48.597468 -No vulnerabilities found. - - -rangermeier/flaskberry -https://github.com/rangermeier/flaskberry -Entry file: flaskberry/flaskberry/__init__.py -Scanned: 2016-10-12 13:22:03.325416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -magaman384/flask-autocomplete -https://github.com/magaman384/flask-autocomplete -Entry file: flask-autocomplete/tests/test.py -Scanned: 2016-10-12 13:22:16.721238 -No vulnerabilities found. - - -GrexIt/flask-login-oauth2 -https://github.com/GrexIt/flask-login-oauth2 -Entry file: None -Scanned: 2016-10-12 13:22:28.528499 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/GrexIt/flask-login-oauth2. - -kielpedia/flask-sqlalchemy-postgres-heroku-example -https://github.com/kielpedia/flask-sqlalchemy-postgres-heroku-example -Entry file: flask-sqlalchemy-postgres-heroku-example/Flasktest/__init__.py -Scanned: 2016-10-12 13:22:35.018578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -renstrom/passbook_flask_example -https://github.com/renstrom/passbook_flask_example -Entry file: passbook_flask_example/app.py -Scanned: 2016-10-12 13:22:44.353855 -No vulnerabilities found. - - -teozkr/Flask-Pushrod -https://github.com/teozkr/Flask-Pushrod -Entry file: Flask-Pushrod/examples/pushrodr/step3.py -Scanned: 2016-10-12 13:22:54.442338 -No vulnerabilities found. - - -KaviCorp/flask_pysaml2 -https://github.com/KaviCorp/flask_pysaml2 -Entry file: flask_pysaml2/tests/test_saml.py -Scanned: 2016-10-12 13:23:00.943356 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MostAwesomeDude/flask-holster -https://github.com/MostAwesomeDude/flask-holster -Entry file: flask-holster/test.py -Scanned: 2016-10-12 13:23:06.648868 -No vulnerabilities found. - - -stevenewey/ssedemo -https://github.com/stevenewey/ssedemo -Entry file: ssedemo/sse_server.py -Scanned: 2016-10-12 13:23:22.907803 -No vulnerabilities found. - - -LarryEitel/gsapi -https://github.com/LarryEitel/gsapi -Entry file: gsapi/gsapi/run.py -Scanned: 2016-10-12 13:23:27.129004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gracedme/flaskblog -https://github.com/gracedme/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-12 13:23:29.222341 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -car34/flasktut -https://github.com/car34/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-12 13:23:36.587309 -No vulnerabilities found. - - -Pokom/flasking -https://github.com/Pokom/flasking -Entry file: flasking/flaskr.py -Scanned: 2016-10-12 13:23:48.556240 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasking/venv/lib/python2.7/genericpath.py - -jasonamyers/flaskr -https://github.com/jasonamyers/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:23:49.069797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nirix-old/flaskapp -https://github.com/nirix-old/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 13:23:52.578829 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -femmerling/EmeraldBox -https://github.com/femmerling/EmeraldBox -Entry file: EmeraldBox/app/__init__.py -Scanned: 2016-10-12 13:24:07.464481 -No vulnerabilities found. - - -corysandahl/FlaskAPI -https://github.com/corysandahl/FlaskAPI -Entry file: FlaskAPI/ProdAPI.py -Scanned: 2016-10-12 13:24:08.728415 -No vulnerabilities found. - - -pearkes/invite -https://github.com/pearkes/invite -Entry file: invite/app.py -Scanned: 2016-10-12 13:24:12.050691 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MalphasWats/flask-blueprint-loader -https://github.com/MalphasWats/flask-blueprint-loader -Entry file: flask-blueprint-loader/dashboard/dashboard.py -Scanned: 2016-10-12 13:24:24.363949 -No vulnerabilities found. - - -tswast/cryptogram-flask -https://github.com/tswast/cryptogram-flask -Entry file: cryptogram-flask/cryptogram.py -Scanned: 2016-10-12 13:24:29.119141 -No vulnerabilities found. - - -Fibio/flask-mongoset -https://github.com/Fibio/flask-mongoset -Entry file: flask-mongoset/flask_mongoset.py -Scanned: 2016-10-12 13:24:38.110207 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suneel0101/flask-hn -https://github.com/suneel0101/flask-hn -Entry file: flask-hn/app.py -Scanned: 2016-10-12 13:24:45.330288 -No vulnerabilities found. - - -lvidarte/flask-examples -https://github.com/lvidarte/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-12 13:24:49.845267 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mstriemer/todo-flask -https://github.com/mstriemer/todo-flask -Entry file: todo-flask/todo.py -Scanned: 2016-10-12 13:24:54.054162 -No vulnerabilities found. - - -tribbettz/flask-microblog -https://github.com/tribbettz/flask-microblog -Entry file: flask-microblog/app/__init__.py -Scanned: 2016-10-12 13:25:02.450867 -No vulnerabilities found. - - -codecool/flask-uploads -https://github.com/codecool/flask-uploads -Entry file: flask-uploads/test-uploads.py -Scanned: 2016-10-12 13:25:12.892028 -No vulnerabilities found. - - -nirix-old/mantid_flask -https://github.com/nirix-old/mantid_flask -Entry file: None -Scanned: 2016-10-12 13:25:25.359928 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nirix-old/mantid_flask. - -DartmouthHackerClub/blitzlistr-flask -https://github.com/DartmouthHackerClub/blitzlistr-flask -Entry file: blitzlistr-flask/app.py -Scanned: 2016-10-12 13:25:29.685293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -otsuarez/flask-blog -https://github.com/otsuarez/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:25:30.219965 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -philwade/flask-presentation -https://github.com/philwade/flask-presentation -Entry file: flask-presentation/code/loop.py -Scanned: 2016-10-12 13:25:38.254344 -No vulnerabilities found. - - -mattdeboard/flask-cloudfront -https://github.com/mattdeboard/flask-cloudfront -Entry file: flask-cloudfront/flask_cloudfront/tests/base.py -Scanned: 2016-10-12 13:25:45.595652 -No vulnerabilities found. - - -apjd/flask-gae -https://github.com/apjd/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-12 13:25:50.129142 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -demitri/DMFlaskTemplate -https://github.com/demitri/DMFlaskTemplate -Entry file: DMFlaskTemplate/myapplication/myapplication/__init__.py -Scanned: 2016-10-12 13:26:03.077933 -No vulnerabilities found. - - -Zanfa/Twilio-SMS-Voting -https://github.com/Zanfa/Twilio-SMS-Voting -Entry file: Twilio-SMS-Voting/server.py -Scanned: 2016-10-12 13:26:10.579397 -No vulnerabilities found. - - -jvoisin/pyste -https://github.com/jvoisin/pyste -Entry file: pyste/flaskr.py -Scanned: 2016-10-12 13:26:12.873364 -Vulnerability 1: -File: pyste/flaskr.py - > User input at line 57, trigger word "form[": - delta = datetime.timedelta(seconds=int(request.form['expiration'])) -Reassigned in: - File: pyste/flaskr.py - > Line 58: expiration = datetime.datetime.now() + delta - File: pyste/flaskr.py - > Line 60: expiration = datetime.datetime(1, 1, 1) -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - -Vulnerability 2: -File: pyste/flaskr.py - > User input at line 62, trigger word "form[": - identifier = hashlib.sha1(request.form['input'] + time.ctime()).hexdigest()[8] -Reassigned in: - File: pyste/flaskr.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('index.html',identifier=identifier, url=request.url) - File: pyste/flaskr.py - > Line 79: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: pyste/flaskr.py - > Line 55: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - -Vulnerability 3: -File: pyste/flaskr.py - > User input at line 63, trigger word "form[": - paste = highlight(request.form['input'], guess_lexer(request.form['input']), HtmlFormatter(linenos='table')) -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - - - -codeanu/flask-login-oauth2 -https://github.com/codeanu/flask-login-oauth2 -Entry file: None -Scanned: 2016-10-12 13:26:25.372040 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codeanu/flask-login-oauth2. - -sclabs/flask.gilgi.org -https://github.com/sclabs/flask.gilgi.org -Entry file: None -Scanned: 2016-10-12 13:26:46.442681 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sclabs/flask.gilgi.org. - -MalphasWats/instruments -https://github.com/MalphasWats/instruments -Entry file: instruments/instruments/__init__.py -Scanned: 2016-10-12 13:26:53.030298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msapoz/toothsometreats -https://github.com/msapoz/toothsometreats -Entry file: toothsometreats/toothsome.py -Scanned: 2016-10-12 13:26:55.372450 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -george25c/helloflask -https://github.com/george25c/helloflask -Entry file: helloflask/app.py -Scanned: 2016-10-12 13:27:03.644724 -No vulnerabilities found. - - -nirix/alchemyflask -https://github.com/nirix/alchemyflask -Entry file: alchemyflask/app.py -Scanned: 2016-10-12 13:27:10.909958 -No vulnerabilities found. - - -pwyf/IATI-Implementation-Schedules -https://github.com/pwyf/IATI-Implementation-Schedules -Entry file: IATI-Implementation-Schedules/impschedules/__init__.py -Scanned: 2016-10-12 13:27:17.130121 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sigmavirus24/subscribed -https://github.com/sigmavirus24/subscribed -Entry file: subscribed/subscribed/app.py -Scanned: 2016-10-12 13:27:26.481977 -No vulnerabilities found. - - -gbaldera/todo -https://github.com/gbaldera/todo -Entry file: todo/todo/__init__.py -Scanned: 2016-10-12 13:27:30.264255 -No vulnerabilities found. - - -mgill25/Blog -https://github.com/mgill25/Blog -Entry file: Blog/Blog/__init__.py -Scanned: 2016-10-12 13:27:38.080369 -No vulnerabilities found. - - -hernamesbarbara/NAICS -https://github.com/hernamesbarbara/NAICS -Entry file: NAICS/app.py -Scanned: 2016-10-12 13:27:54.489834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scwu/Evernote-Blog-Engine -https://github.com/scwu/Evernote-Blog-Engine -Entry file: Evernote-Blog-Engine/blog.py -Scanned: 2016-10-12 13:27:55.783947 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ybz/yaniv_bz -https://github.com/ybz/yaniv_bz -Entry file: yaniv_bz/app.py -Scanned: 2016-10-12 13:28:14.032735 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jul/wsgi_social_experminet -https://github.com/jul/wsgi_social_experminet -Entry file: wsgi_social_experminet/www/socialize.py -Scanned: 2016-10-12 13:28:27.286165 -No vulnerabilities found. - - -bezfeng/skinmd-frontend -https://github.com/bezfeng/skinmd-frontend -Entry file: skinmd-frontend/script_server.py -Scanned: 2016-10-12 13:28:35.890902 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barosl/photox -https://github.com/barosl/photox -Entry file: photox/photox.py -Scanned: 2016-10-12 13:28:37.217309 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasboyt/txtRPG -https://github.com/thomasboyt/txtRPG -Entry file: txtRPG/rpg_app/__init__.py -Scanned: 2016-10-12 13:28:38.471760 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smanek/challenge -https://github.com/smanek/challenge -Entry file: challenge/challenge.py -Scanned: 2016-10-12 13:28:52.408420 -No vulnerabilities found. - - -hacksu/ksu-flash-info -https://github.com/hacksu/ksu-flash-info -Entry file: ksu-flash-info/app.py -Scanned: 2016-10-12 13:28:56.969312 -No vulnerabilities found. - - -adamcharnock/docsite -https://github.com/adamcharnock/docsite -Entry file: docsite/server.py -Scanned: 2016-10-12 13:29:04.208287 -No vulnerabilities found. - - -qnub/cavy -https://github.com/qnub/cavy -Entry file: cavy/project/flask/sessions.py -Scanned: 2016-10-12 13:29:17.606269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DazWorrall/flask-sse -https://github.com/DazWorrall/flask-sse -Entry file: flask-sse/example/example.py -Scanned: 2016-10-12 13:29:37.578339 -No vulnerabilities found. - - -hobbeswalsh/flask-sillywalk -https://github.com/hobbeswalsh/flask-sillywalk -Entry file: flask-sillywalk/flask_sillywalk/sillywalk.py -Scanned: 2016-10-12 13:29:39.126072 -No vulnerabilities found. - - -twip/flask_twip -https://github.com/twip/flask_twip -Entry file: flask_twip/examples/heroku/app.py -Scanned: 2016-10-12 13:29:47.659278 -No vulnerabilities found. - - -doobeh/Flask-S3-Uploader -https://github.com/doobeh/Flask-S3-Uploader -Entry file: Flask-S3-Uploader/app.py -Scanned: 2016-10-12 13:29:57.502712 -No vulnerabilities found. - - -tzulberti/Flask-PyPi-Proxy -https://github.com/tzulberti/Flask-PyPi-Proxy -Entry file: Flask-PyPi-Proxy/flask_pypi_proxy/app.py -Scanned: 2016-10-12 13:30:13.677935 -No vulnerabilities found. - - -rehandalal/flask-funnel -https://github.com/rehandalal/flask-funnel -Entry file: flask-funnel/flask_funnel/tests/test_funnel.py -Scanned: 2016-10-12 13:30:31.383107 -No vulnerabilities found. - - -rbin/OctoFlask -https://github.com/rbin/OctoFlask -Entry file: OctoFlask/__init__.py -Scanned: 2016-10-12 13:30:33.884427 -No vulnerabilities found. - - -mimming/python-flask-google-api-starter -https://github.com/mimming/python-flask-google-api-starter -Entry file: python-flask-google-api-starter/cal.py -Scanned: 2016-10-12 13:30:38.108452 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MichelleGlauser/Flask -https://github.com/MichelleGlauser/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-12 13:30:47.829311 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tzangms/python-websocket-example -https://github.com/tzangms/python-websocket-example -Entry file: python-websocket-example/app/__init__.py -Scanned: 2016-10-12 13:30:57.550211 -No vulnerabilities found. - - -jakecoffman/flask-bootstrap -https://github.com/jakecoffman/flask-bootstrap -Entry file: flask-bootstrap/flaskr.py -Scanned: 2016-10-12 13:31:05.454313 -No vulnerabilities found. - - -lomatus/flask2sae -https://github.com/lomatus/flask2sae -Entry file: flask2sae/1/app/__init__.py -Scanned: 2016-10-12 13:31:13.920013 -No vulnerabilities found. - - -Roasbeef/FlaskrNews -https://github.com/Roasbeef/FlaskrNews -Entry file: FlaskrNews/libs/flask/sessions.py -Scanned: 2016-10-12 13:31:19.748548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marksteve/flask-stathat -https://github.com/marksteve/flask-stathat -Entry file: flask-stathat/example.py -Scanned: 2016-10-12 13:31:29.163057 -No vulnerabilities found. - - -byslee3/Flask_Tutorial -https://github.com/byslee3/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-12 13:31:33.537966 -No vulnerabilities found. - - -gzb1985/flask-boilerplate -https://github.com/gzb1985/flask-boilerplate -Entry file: flask-boilerplate/flask_boilerplate/__init__.py -Scanned: 2016-10-12 13:31:39.722575 -No vulnerabilities found. - - -scolex/flask-forum -https://github.com/scolex/flask-forum -Entry file: flask-forum/app/__init__.py -Scanned: 2016-10-12 13:31:40.934856 -No vulnerabilities found. - - -bwghughes/flasksse -https://github.com/bwghughes/flasksse -Entry file: flasksse/app.py -Scanned: 2016-10-12 13:31:48.133318 -No vulnerabilities found. - - -soccermetrics/flask-skeleton -https://github.com/soccermetrics/flask-skeleton -Entry file: None -Scanned: 2016-10-12 13:31:57.135181 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/soccermetrics/flask-skeleton. - -kvesteri/flask-jinjahelpers -https://github.com/kvesteri/flask-jinjahelpers -Entry file: flask-jinjahelpers/tests/__init__.py -Scanned: 2016-10-12 13:32:05.471905 -No vulnerabilities found. - - -jmhobbs/redboard -https://github.com/jmhobbs/redboard -Entry file: redboard/src/redboard_server.py -Scanned: 2016-10-12 13:32:13.810791 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kates/flask-mold -https://github.com/kates/flask-mold -Entry file: flask-mold/app.py -Scanned: 2016-10-12 13:32:17.454370 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JanStevens/ArduinoPi-Python -https://github.com/JanStevens/ArduinoPi-Python -Entry file: ArduinoPi-Python/main.py -Scanned: 2016-10-12 13:32:29.802002 -No vulnerabilities found. - - -landakram/microblog -https://github.com/landakram/microblog -Entry file: microblog/app.py -Scanned: 2016-10-12 13:32:34.202474 -No vulnerabilities found. - - -mies/wercker-flask-api -https://github.com/mies/wercker-flask-api -Entry file: wercker-flask-api/app.py -Scanned: 2016-10-12 13:32:39.410707 -No vulnerabilities found. - - -dengmin/base_framework_flask -https://github.com/dengmin/base_framework_flask -Entry file: None -Scanned: 2016-10-12 13:32:41.701117 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dengmin/base_framework_flask. - -tquach/talent-curator -https://github.com/tquach/talent-curator -Entry file: talent-curator/talent_curator/__init__.py -Scanned: 2016-10-12 13:32:53.788810 -No vulnerabilities found. - - -vitalk/flask-mailer -https://github.com/vitalk/flask-mailer -Entry file: flask-mailer/tests/conftest.py -Scanned: 2016-10-12 13:32:55.453309 -No vulnerabilities found. - - -drdaeman/flask-toybox -https://github.com/drdaeman/flask-toybox -Entry file: flask-toybox/tests/test_negotiation.py -Scanned: 2016-10-12 13:32:58.933590 -No vulnerabilities found. - - -lorden/flaskeleton -https://github.com/lorden/flaskeleton -Entry file: flaskeleton/app/__init__.py -Scanned: 2016-10-12 13:33:05.427999 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daneoshiga/flaskr -https://github.com/daneoshiga/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:33:13.973328 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Khady/flaskdotahorrible -https://github.com/Khady/flaskdotahorrible -Entry file: flaskdotahorrible/dota2.py -Scanned: 2016-10-12 13:33:23.762190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ruke89/FlaskSite -https://github.com/Ruke89/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-12 13:33:34.737411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tribbettz/flask-mongo-tumblelog -https://github.com/tribbettz/flask-mongo-tumblelog -Entry file: flask-mongo-tumblelog/app/__init__.py -Scanned: 2016-10-12 13:33:40.530268 -No vulnerabilities found. - - -tobiasandtobias/flask-assetslite -https://github.com/tobiasandtobias/flask-assetslite -Entry file: flask-assetslite/tests/tests.py -Scanned: 2016-10-12 13:33:41.929248 -No vulnerabilities found. - - -zhangcheng/Flask-Sandbox -https://github.com/zhangcheng/Flask-Sandbox -Entry file: Flask-Sandbox/src/app.py -Scanned: 2016-10-12 13:33:49.267220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kracekumar/flask-apache -https://github.com/kracekumar/flask-apache -Entry file: flask-apache/app.py -Scanned: 2016-10-12 13:33:58.960301 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bcho-archive/flask-bootstrap -https://github.com/bcho-archive/flask-bootstrap -Entry file: flask-bootstrap/origin/app.py -Scanned: 2016-10-12 13:34:06.177263 -No vulnerabilities found. - - -standyro/flask-testbed -https://github.com/standyro/flask-testbed -Entry file: flask-testbed/test.py -Scanned: 2016-10-12 13:34:15.428278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sfermigier/flask-linktester -https://github.com/sfermigier/flask-linktester -Entry file: flask-linktester/tests/dummy_app.py -Scanned: 2016-10-12 13:34:17.942940 -No vulnerabilities found. - - -mstriemer/todo-flask -https://github.com/mstriemer/todo-flask -Entry file: todo-flask/todo.py -Scanned: 2016-10-12 13:34:41.133211 -No vulnerabilities found. - - -kageurufu/flask-couchdb -https://github.com/kageurufu/flask-couchdb -Entry file: flask-couchdb/example/guestbook.py -Scanned: 2016-10-12 13:34:42.553418 -No vulnerabilities found. - - -jharkins/restful-flask -https://github.com/jharkins/restful-flask -Entry file: restful-flask/rest_ideas.py -Scanned: 2016-10-12 13:34:49.786309 -No vulnerabilities found. - - -yeradis/flask-nanoblog -https://github.com/yeradis/flask-nanoblog -Entry file: flask-nanoblog/nanoblog/__init__.py -Scanned: 2016-10-12 13:34:56.249264 -No vulnerabilities found. - - -lubiana/flask-quotedb -https://github.com/lubiana/flask-quotedb -Entry file: flask-quotedb/app/__init__.py -Scanned: 2016-10-12 13:34:59.479633 -No vulnerabilities found. - - -mercul3s/flask_tutorial -https://github.com/mercul3s/flask_tutorial -Entry file: flask_tutorial/flaskr.py -Scanned: 2016-10-12 13:35:06.752767 -No vulnerabilities found. - - -SAFeSEA/pyEssayAnalyser -https://github.com/SAFeSEA/pyEssayAnalyser -Entry file: pyEssayAnalyser/src/pyEssayAnalyser.py -Scanned: 2016-10-12 13:35:20.438932 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-js-hostname-example -https://github.com/mitsuhiko/flask-js-hostname-example -Entry file: flask-js-hostname-example/testapp.py -Scanned: 2016-10-12 13:35:37.151566 -No vulnerabilities found. - - -proto/flask-simple-blog -https://github.com/proto/flask-simple-blog -Entry file: flask-simple-blog/app.py -Scanned: 2016-10-12 13:35:41.349056 -No vulnerabilities found. - - -colinkahn/flask-redis-browserid -https://github.com/colinkahn/flask-redis-browserid -Entry file: flask-redis-browserid/run.py -Scanned: 2016-10-12 13:35:42.569808 -No vulnerabilities found. - - -pleomax00/flask-mongo-skel -https://github.com/pleomax00/flask-mongo-skel -Entry file: flask-mongo-skel/src/thirdparty/flask/sessions.py -Scanned: 2016-10-12 13:36:03.056853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iolab12/python_flask_demo -https://github.com/iolab12/python_flask_demo -Entry file: python_flask_demo/todo.py -Scanned: 2016-10-12 13:36:16.828192 -No vulnerabilities found. - - -eneldoserrata/flask-python-dominicana-apps -https://github.com/eneldoserrata/flask-python-dominicana-apps -Entry file: flask-python-dominicana-apps/app/__init__.py -Scanned: 2016-10-12 13:36:19.030930 -No vulnerabilities found. - - -shinderuman/python_flask_helloworld -https://github.com/shinderuman/python_flask_helloworld -Entry file: python_flask_helloworld/app.py -Scanned: 2016-10-12 13:36:35.410503 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python_flask_helloworld/lib/python2.7/genericpath.py - -ilyapuchka/PyObjC-FlaskAdmin -https://github.com/ilyapuchka/PyObjC-FlaskAdmin -Entry file: PyObjC-FlaskAdmin/myadmin/__init__.py -Scanned: 2016-10-12 13:36:37.759284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tnebel/minitwit -https://github.com/tnebel/minitwit -Entry file: minitwit/minitwit.py -Scanned: 2016-10-12 13:36:56.530186 -No vulnerabilities found. - - -renn999/PyBlogtle -https://github.com/renn999/PyBlogtle -Entry file: None -Scanned: 2016-10-12 13:37:00.814029 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/renn999/PyBlogtle. - -bezfeng/skinmd-frontend -https://github.com/bezfeng/skinmd-frontend -Entry file: skinmd-frontend/script_server.py -Scanned: 2016-10-12 13:37:30.770965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -orangejulius/jlink -https://github.com/orangejulius/jlink -Entry file: jlink/jlink.py -Scanned: 2016-10-12 13:37:38.036192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sramana/meetup-photos -https://github.com/sramana/meetup-photos -Entry file: meetup-photos/main.py -Scanned: 2016-10-12 13:37:42.567358 -No vulnerabilities found. - - -DartmouthHackerClub/dnd_search -https://github.com/DartmouthHackerClub/dnd_search -Entry file: dnd_search/app.py -Scanned: 2016-10-12 13:37:43.877160 -No vulnerabilities found. - - -bigsnarfdude/netflix_examples -https://github.com/bigsnarfdude/netflix_examples -Entry file: netflix_examples/flask_hello_world.py -Scanned: 2016-10-12 13:37:50.197722 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kierandarcy/qrimage -https://github.com/kierandarcy/qrimage -Entry file: qrimage/app.py -Scanned: 2016-10-12 13:37:56.533033 -No vulnerabilities found. - - -ekaputra07/poredit -https://github.com/ekaputra07/poredit -Entry file: poredit/poredit/poredit.py -Scanned: 2016-10-12 13:38:01.310990 -No vulnerabilities found. - - -jualvarez/worktracker -https://github.com/jualvarez/worktracker -Entry file: worktracker/worktracker.py -Scanned: 2016-10-12 13:38:08.688458 -Vulnerability 1: -File: worktracker/worktracker.py - > User input at line 146, trigger word "get(": - project = g.db.query(Project).get(id) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 154: project = Project(request.form['name']) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 2: -File: worktracker/worktracker.py - > User input at line 154, trigger word "form[": - project = Project(request.form['name']) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 146: project = g.db.query(Project).get(id) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 3: -File: worktracker/worktracker.py - > User input at line 146, trigger word "get(": - project = g.db.query(Project).get(id) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 154: project = Project(request.form['name']) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 4: -File: worktracker/worktracker.py - > User input at line 154, trigger word "form[": - project = Project(request.form['name']) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 146: project = g.db.query(Project).get(id) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - - - -rochacon/simple-gapps-group-signup -https://github.com/rochacon/simple-gapps-group-signup -Entry file: simple-gapps-group-signup/app.py -Scanned: 2016-10-12 13:38:17.943142 -No vulnerabilities found. - - -Timothee/Passeplat -https://github.com/Timothee/Passeplat -Entry file: Passeplat/passeplat.py -Scanned: 2016-10-12 13:38:20.287871 -No vulnerabilities found. - - -blazarus/Link-Shortener -https://github.com/blazarus/Link-Shortener -Entry file: Link-Shortener/linkshort/__init__.py -Scanned: 2016-10-12 13:38:31.560362 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cenobites/flask-jsonrpc -https://github.com/cenobites/flask-jsonrpc -Entry file: flask-jsonrpc/run.py -Scanned: 2016-10-12 13:38:45.200719 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -insynchq/flask-googlelogin -https://github.com/insynchq/flask-googlelogin -Entry file: flask-googlelogin/example_offline.py -Scanned: 2016-10-12 13:38:51.180471 -No vulnerabilities found. - - -shea256/flask-app-generator -https://github.com/shea256/flask-app-generator -Entry file: flask-app-generator/resources/basic_app/app.py -Scanned: 2016-10-12 13:38:57.615558 -No vulnerabilities found. - - -albertogg/flask-bootstrap-skel -https://github.com/albertogg/flask-bootstrap-skel -Entry file: flask-bootstrap-skel/application/__init__.py -Scanned: 2016-10-12 13:39:01.603545 -No vulnerabilities found. - - -alecthomas/flask_injector -https://github.com/alecthomas/flask_injector -Entry file: flask_injector/flask_injector_tests.py -Scanned: 2016-10-12 13:39:09.356330 -No vulnerabilities found. - - -ema/flask-moresql -https://github.com/ema/flask-moresql -Entry file: flask-moresql/flask_moresql.py -Scanned: 2016-10-12 13:39:18.775509 -No vulnerabilities found. - - -gregorynicholas/flask-gae_blobstore -https://github.com/gregorynicholas/flask-gae_blobstore -Entry file: flask-gae_blobstore/flask_gae_blobstore_tests.py -Scanned: 2016-10-12 13:39:33.343477 -No vulnerabilities found. - - -icecreammatt/flask-empty -https://github.com/icecreammatt/flask-empty -Entry file: flask-empty/app/__init__.py -Scanned: 2016-10-12 13:39:43.937267 -No vulnerabilities found. - - -david-torres/flask-quickstart -https://github.com/david-torres/flask-quickstart -Entry file: flask-quickstart/application/__init__.py -Scanned: 2016-10-12 13:39:48.038419 -No vulnerabilities found. - - -rahulbot/GV-GetToKnow-flask -https://github.com/rahulbot/GV-GetToKnow-flask -Entry file: GV-GetToKnow-flask/gettoknow.py -Scanned: 2016-10-12 13:39:58.158202 -No vulnerabilities found. - - -oturing/flask-br -https://github.com/oturing/flask-br -Entry file: flask-br/examples/flaskr/flaskr.py -Scanned: 2016-10-12 13:40:02.932922 -No vulnerabilities found. - - -ismaild/flaskr-bdd -https://github.com/ismaild/flaskr-bdd -Entry file: flaskr-bdd/flaskr.py -Scanned: 2016-10-12 13:40:09.235049 -No vulnerabilities found. - - -regadas/flask-tornado-websocket -https://github.com/regadas/flask-tornado-websocket -Entry file: flask-tornado-websocket/app/__init__.py -Scanned: 2016-10-12 13:40:19.567686 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lomatus/flask2sae -https://github.com/lomatus/flask2sae -Entry file: flask2sae/1/app/__init__.py -Scanned: 2016-10-12 13:40:22.003146 -No vulnerabilities found. - - -yaniv-aknin/aknin-flask-skeleton -https://github.com/yaniv-aknin/aknin-flask-skeleton -Entry file: aknin-flask-skeleton/application/app.py -Scanned: 2016-10-12 13:40:47.985078 -No vulnerabilities found. - - -marksteve/flask-stathat -https://github.com/marksteve/flask-stathat -Entry file: flask-stathat/example.py -Scanned: 2016-10-12 13:40:52.308830 -No vulnerabilities found. - - -pengfei-xue/openshift-flask-mongdb -https://github.com/pengfei-xue/openshift-flask-mongdb -Entry file: openshift-flask-mongdb/blog/main.py -Scanned: 2016-10-12 13:40:59.931906 -Vulnerability 1: -File: openshift-flask-mongdb/blog/blueprints/apis/views.py - > User input at line 27, trigger word "get(": - term = request.args.get('term', None) -File: openshift-flask-mongdb/blog/blueprints/apis/views.py - > reaches line 33, trigger word "filter(": - result = list(filter(term.lower() in tag.lower(), set(result))) - - - -ncweinhold/flask-knockout-example -https://github.com/ncweinhold/flask-knockout-example -Entry file: flask-knockout-example/app.py -Scanned: 2016-10-12 13:41:02.180501 -No vulnerabilities found. - - -gkoberger/flask-heroku -https://github.com/gkoberger/flask-heroku -Entry file: flask-heroku/app.py -Scanned: 2016-10-12 13:41:09.886356 -No vulnerabilities found. - - -theho/flask-riak-skeleton -https://github.com/theho/flask-riak-skeleton -Entry file: None -Scanned: 2016-10-12 13:41:20.946708 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/theho/flask-riak-skeleton. - -davirtavares/flask-complexform -https://github.com/davirtavares/flask-complexform -Entry file: flask-complexform/testeflask.py -Scanned: 2016-10-12 13:41:40.132495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brab/flaskr -https://github.com/brab/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:41:42.626186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lmeunier/flasktodo -https://github.com/lmeunier/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-12 13:41:51.668143 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqwinters/Flaskr -https://github.com/lqwinters/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 13:42:02.367955 -No vulnerabilities found. - - -thermosilla/flaskapp -https://github.com/thermosilla/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 13:42:08.875822 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcus-darden/flask1 -https://github.com/marcus-darden/flask1 -Entry file: flask1/app.py -Scanned: 2016-10-12 13:42:22.585366 -No vulnerabilities found. - - -Alir3z4/flask-microblog-sqlalchemy -https://github.com/Alir3z4/flask-microblog-sqlalchemy -Entry file: flask-microblog-sqlalchemy/app/__init__.py -Scanned: 2016-10-12 13:42:34.326724 -No vulnerabilities found. - - -seansawyer/foh -https://github.com/seansawyer/foh -Entry file: foh/foh/__init__.py -Scanned: 2016-10-12 13:42:40.683688 -No vulnerabilities found. - - -feik/flask-blog -https://github.com/feik/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:42:43.222828 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -randallm/whatsthehomework_flask -https://github.com/randallm/whatsthehomework_flask -Entry file: whatsthehomework_flask/wth/__init__.py -Scanned: 2016-10-12 13:42:53.124644 -No vulnerabilities found. - - -robottaway/flask_websocket -https://github.com/robottaway/flask_websocket -Entry file: flask_websocket/app/__init__.py -Scanned: 2016-10-12 13:43:02.829495 -No vulnerabilities found. - - -vladke/flask-blog -https://github.com/vladke/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:43:09.383104 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -protunt/flask-blog -https://github.com/protunt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:43:22.452199 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -makotoworld/flask-example -https://github.com/makotoworld/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-12 13:43:33.980359 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikepea/flask_playing -https://github.com/mikepea/flask_playing -Entry file: None -Scanned: 2016-10-12 13:43:41.289941 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mikepea/flask_playing. - -feigner/flask-testbed -https://github.com/feigner/flask-testbed -Entry file: flask-testbed/test.py -Scanned: 2016-10-12 13:43:43.850532 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smileyteresa/flask-blog -https://github.com/smileyteresa/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:43:48.389628 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -naot-said/test-flask -https://github.com/naot-said/test-flask -Entry file: test-flask/hello.py -Scanned: 2016-10-12 13:43:53.709265 -No vulnerabilities found. - - -shabda/learning_flask -https://github.com/shabda/learning_flask -Entry file: learning_flask/flaskr/flaskr.py -Scanned: 2016-10-12 13:44:00.011379 -No vulnerabilities found. - - -RainCT/flask-template-with-social -https://github.com/RainCT/flask-template-with-social -Entry file: flask-template-with-social/webapp/__init__.py -Scanned: 2016-10-12 13:44:23.961396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdmurphy/flask-reservoir-jsonp-wrapper -https://github.com/rdmurphy/flask-reservoir-jsonp-wrapper -Entry file: flask-reservoir-jsonp-wrapper/grabber.py -Scanned: 2016-10-12 13:44:45.213195 -No vulnerabilities found. - - -gagansaini/example-python-flask -https://github.com/gagansaini/example-python-flask -Entry file: example-python-flask/app.py -Scanned: 2016-10-12 13:44:50.281278 -No vulnerabilities found. - - -ncweinhold/flask-code-sharing -https://github.com/ncweinhold/flask-code-sharing -Entry file: flask-code-sharing/pasteapp/__init__.py -Scanned: 2016-10-12 13:44:54.775632 -No vulnerabilities found. - - -iolab12/flask_demo_2 -https://github.com/iolab12/flask_demo_2 -Entry file: flask_demo_2/polls.py -Scanned: 2016-10-12 13:45:03.673385 -No vulnerabilities found. - - -plaes/wirexfers-flask-demo -https://github.com/plaes/wirexfers-flask-demo -Entry file: wirexfers-flask-demo/wirexfers_flask_demo/__init__.py -Scanned: 2016-10-12 13:45:11.003410 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -yeojz/skeleton-bottle-flask -https://github.com/yeojz/skeleton-bottle-flask -Entry file: skeleton-bottle-flask/thirdparty/flask/sessions.py -Scanned: 2016-10-12 13:45:26.656319 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drawcode/flask-template-basic -https://github.com/drawcode/flask-template-basic -Entry file: flask-template-basic/app/__init__.py -Scanned: 2016-10-12 13:45:27.990834 -Vulnerability 1: -File: flask-template-basic/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-template-basic/app/users/views.py - > Line 38: session['user_id'] = user.id -File: flask-template-basic/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -nanorepublica/secret-santa -https://github.com/nanorepublica/secret-santa -Entry file: secret-santa/secret_santa.py -Scanned: 2016-10-12 13:45:36.697018 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ardinor/yamazumi -https://github.com/ardinor/yamazumi -Entry file: yamazumi/yamazumi/__init__.py -Scanned: 2016-10-12 13:45:41.910962 -No vulnerabilities found. - - -seme0021/flaskr-reader -https://github.com/seme0021/flaskr-reader -Entry file: flaskr-reader/app.py -Scanned: 2016-10-12 13:45:46.900635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vijaym123/FaceDetection-SimpleCVandFlask -https://github.com/vijaym123/FaceDetection-SimpleCVandFlask -Entry file: FaceDetection-SimpleCVandFlask/upload.py -Scanned: 2016-10-12 13:45:54.744315 -No vulnerabilities found. - - -ryanc/mmmpaste -https://github.com/ryanc/mmmpaste -Entry file: mmmpaste/mmmpaste/__init__.py -Scanned: 2016-10-12 13:46:01.527853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rowandh/pytorrent -https://github.com/rowandh/pytorrent -Entry file: pytorrent/bt/Tracker.py -Scanned: 2016-10-12 13:46:22.817717 -No vulnerabilities found. - - -gatesphere/ptah -https://github.com/gatesphere/ptah -Entry file: ptah/sitebuilder.py -Scanned: 2016-10-12 13:46:28.140704 -No vulnerabilities found. - - -ericevenchick/site -https://github.com/ericevenchick/site -Entry file: site/site.py -Scanned: 2016-10-12 13:46:45.010055 -No vulnerabilities found. - - -wantsomechocolate/PythonWebsite -https://github.com/wantsomechocolate/PythonWebsite -Entry file: PythonWebsite/app.py -Scanned: 2016-10-12 13:46:53.281970 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jineshpaloor/Mysite -https://github.com/jineshpaloor/Mysite -Entry file: Mysite/home.py -Scanned: 2016-10-12 13:46:54.740602 -No vulnerabilities found. - - -schinken/py-powerctrl -https://github.com/schinken/py-powerctrl -Entry file: py-powerctrl/main.py -Scanned: 2016-10-12 13:47:01.478781 -No vulnerabilities found. - - -rudolpho/kazapp -https://github.com/rudolpho/kazapp -Entry file: kazapp/kazapp.py -Scanned: 2016-10-12 13:47:05.519818 -No vulnerabilities found. - - -daleobrien/bootflask -https://github.com/daleobrien/bootflask -Entry file: bootflask/main.py -Scanned: 2016-10-12 13:47:12.270256 -No vulnerabilities found. - - -nerdguy/httpfirmata -https://github.com/nerdguy/httpfirmata -Entry file: httpfirmata/httpfirmata/server.py -Scanned: 2016-10-12 13:47:23.817518 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anusharanganathan/diskMonitor -https://github.com/anusharanganathan/diskMonitor -Entry file: diskMonitor/webui.py -Scanned: 2016-10-12 13:47:29.168196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leibatt/forms -https://github.com/leibatt/forms -Entry file: forms/form_serv.py -Scanned: 2016-10-12 13:47:35.498099 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tjstum/isawyou-too -https://github.com/tjstum/isawyou-too -Entry file: isawyou-too/isy/__init__.py -Scanned: 2016-10-12 13:47:43.873754 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Foxboron/FoxBlog -https://github.com/Foxboron/FoxBlog -Entry file: FoxBlog/app/__init__.py -Scanned: 2016-10-12 13:47:54.805667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbit/uwsgicc -https://github.com/unbit/uwsgicc -Entry file: uwsgicc/uwsgicc.py -Scanned: 2016-10-12 13:47:56.424543 -No vulnerabilities found. - - -jmhobbs/batsdboard -https://github.com/jmhobbs/batsdboard -Entry file: batsdboard/src/batsdboard_server.py -Scanned: 2016-10-12 13:48:01.647280 -No vulnerabilities found. - - -LarryEitel/pyfem -https://github.com/LarryEitel/pyfem -Entry file: pyfem/pyfem/app.py -Scanned: 2016-10-12 13:48:06.576963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hciudad/webhook_listener -https://github.com/hciudad/webhook_listener -Entry file: webhook_listener/app.py -Scanned: 2016-10-12 13:48:11.785953 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/secret_santa -https://github.com/sagnew/secret_santa -Entry file: secret_santa/app.py -Scanned: 2016-10-12 13:48:32.936241 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vc4a/vc4a-python-example -https://github.com/vc4a/vc4a-python-example -Entry file: vc4a-python-example/app.py -Scanned: 2016-10-12 13:48:44.635456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-12 13:48:55.424395 -No vulnerabilities found. - - -miguelgrinberg/microblog -https://github.com/miguelgrinberg/microblog -Entry file: microblog/app/__init__.py -Scanned: 2016-10-12 13:48:57.830594 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-12 13:49:02.023053 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-12 13:49:05.277442 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-12 13:49:12.678515 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-12 13:49:31.498211 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trtg/flask_assets_tutorial -https://github.com/trtg/flask_assets_tutorial -Entry file: flask_assets_tutorial/example/__init__.py -Scanned: 2016-10-12 13:49:33.272926 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-12 13:49:36.988683 -No vulnerabilities found. - - -maxcnunes/flaskgaedemo -https://github.com/maxcnunes/flaskgaedemo -Entry file: flaskgaedemo/main.py -Scanned: 2016-10-12 13:50:04.505876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -domenicosolazzo/flask_examples -https://github.com/domenicosolazzo/flask_examples -Entry file: flask_examples/logger_example.py -Scanned: 2016-10-12 13:50:05.868971 -No vulnerabilities found. - - -akostyuk/flask-dbmigrate -https://github.com/akostyuk/flask-dbmigrate -Entry file: flask-dbmigrate/tests.py -Scanned: 2016-10-12 13:50:25.702059 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -50onRed/phillypug-flask -https://github.com/50onRed/phillypug-flask -Entry file: phillypug-flask/phillypug/app.py -Scanned: 2016-10-12 13:50:32.994836 -No vulnerabilities found. - - -booo/flask-gtfs -https://github.com/booo/flask-gtfs -Entry file: None -Scanned: 2016-10-12 13:50:45.840718 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/booo/flask-gtfs. - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-12 13:50:49.161501 -No vulnerabilities found. - - -sagarrakshe/flaskr -https://github.com/sagarrakshe/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:50:54.664985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 13:50:56.164066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: None -Scanned: 2016-10-12 13:51:05.877306 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/faruken/flask-web.py-jvm. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-12 13:51:14.524800 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eddawong/FlaskStudy -https://github.com/eddawong/FlaskStudy -Entry file: FlaskStudy/main.py -Scanned: 2016-10-12 13:51:25.811469 -No vulnerabilities found. - - -nerevu/prometheus -https://github.com/nerevu/prometheus -Entry file: prometheus/app/__init__.py -Scanned: 2016-10-12 13:51:36.590628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -floweb/liensdujour -https://github.com/floweb/liensdujour -Entry file: liensdujour/liensdujour/liensdujour.py -Scanned: 2016-10-12 13:51:38.233468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-12 13:51:47.390862 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-12 13:51:49.885114 -No vulnerabilities found. - - -parryjacob/flask-boilerplate -https://github.com/parryjacob/flask-boilerplate -Entry file: flask-boilerplate/project/__init__.py -Scanned: 2016-10-12 13:51:56.261210 -No vulnerabilities found. - - -scottdnz/flask_skeleton -https://github.com/scottdnz/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-12 13:51:57.678062 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -protunt/flask-blog -https://github.com/protunt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 13:52:02.221598 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -jpercent/flask-control -https://github.com/jpercent/flask-control -Entry file: flask-control/example.py -Scanned: 2016-10-12 13:52:06.467372 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-12 13:52:15.266945 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ceasar/pocket_flask -https://github.com/Ceasar/pocket_flask -Entry file: pocket_flask/app/__init__.py -Scanned: 2016-10-12 13:52:27.097817 -No vulnerabilities found. - - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-12 13:52:33.710558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rhyselsmore/flask-modus -https://github.com/rhyselsmore/flask-modus -Entry file: flask-modus/test_flask_modus.py -Scanned: 2016-10-12 13:52:37.996067 -No vulnerabilities found. - - -pavlenko-volodymyr/flask-study -https://github.com/pavlenko-volodymyr/flask-study -Entry file: flask-study/src/app/__init__.py -Scanned: 2016-10-12 13:52:47.258072 -No vulnerabilities found. - - -slizadel/flask-gitrcv -https://github.com/slizadel/flask-gitrcv -Entry file: flask-gitrcv/flask-gitrcv/gitrcv.py -Scanned: 2016-10-12 13:52:50.464100 -No vulnerabilities found. - - -apjd/flask-heroku -https://github.com/apjd/flask-heroku -Entry file: flask-heroku/flasky.py -Scanned: 2016-10-12 13:52:56.731837 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-12 13:52:58.072817 -No vulnerabilities found. - - -CMGS/poll -https://github.com/CMGS/poll -Entry file: poll/app.py -Scanned: 2016-10-12 13:53:11.859555 -No vulnerabilities found. - - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-12 13:53:15.695519 -No vulnerabilities found. - - -alph486/SimpleFlaskAPI -https://github.com/alph486/SimpleFlaskAPI -Entry file: SimpleFlaskAPI/app.py -Scanned: 2016-10-12 13:53:26.959463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunilJacob/Paint-app-using-Flask -https://github.com/JunilJacob/Paint-app-using-Flask -Entry file: Paint-app-using-Flask/hello.py -Scanned: 2016-10-12 13:53:34.619987 -Vulnerability 1: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 18, trigger word "execute(": - c.execute('DELETE FROM Image WHERE file=?', iname) - -Vulnerability 2: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 3: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 4: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 36, trigger word "render_template(": - resp = Response('' + render_template('paint.html'),status=200, mimetype='html') - - - -dimfox/flask-mega-tutorial -https://github.com/dimfox/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-12 13:53:38.868558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuxuecheng/python_flask_guestbook -https://github.com/liuxuecheng/python_flask_guestbook -Entry file: python_flask_guestbook/main.py -Scanned: 2016-10-12 13:53:48.144709 -No vulnerabilities found. - - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-12 13:53:57.097975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-12 13:54:01.495134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshkurz/exi -https://github.com/joshkurz/exi -Entry file: exi/exi/tests/security/test_app/__init__.py -Scanned: 2016-10-12 13:54:04.828414 -No vulnerabilities found. - - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-12 13:54:20.388868 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-12 13:54:28.061837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thoughtnirvana/redux -https://github.com/thoughtnirvana/redux -Entry file: redux/main.py -Scanned: 2016-10-12 13:54:35.515263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dogrdon/txtr -https://github.com/dogrdon/txtr -Entry file: txtr/txtr.py -Scanned: 2016-10-12 13:54:44.602440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -booo/baedproject -https://github.com/booo/baedproject -Entry file: baedproject/app.py -Scanned: 2016-10-12 13:54:48.839661 -No vulnerabilities found. - - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-12 13:54:52.593537 -No vulnerabilities found. - - -skinofstars/monkey -https://github.com/skinofstars/monkey -Entry file: monkey/app.py -Scanned: 2016-10-12 13:54:57.847174 -No vulnerabilities found. - - -zhoutuo/dota2bbq -https://github.com/zhoutuo/dota2bbq -Entry file: dota2bbq/wsgi.py -Scanned: 2016-10-12 13:55:07.124512 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-12 13:55:08.457080 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kalimatas/herokuflask -https://github.com/kalimatas/herokuflask -Entry file: herokuflask/app.py -Scanned: 2016-10-12 13:55:14.674758 -No vulnerabilities found. - - -norbert/helloflask -https://github.com/norbert/helloflask -Entry file: helloflask/app.py -Scanned: 2016-10-12 13:55:16.910689 -No vulnerabilities found. - - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-12 13:55:29.077388 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -Pusungwi/lobotomizer -https://github.com/Pusungwi/lobotomizer -Entry file: None -Scanned: 2016-10-12 13:55:34.445606 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pusungwi/lobotomizer. - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-12 13:55:43.570832 -No vulnerabilities found. - - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-12 13:55:50.225618 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sburns/switchboard -https://github.com/sburns/switchboard -Entry file: switchboard/sample_app.py -Scanned: 2016-10-12 13:55:52.524029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -takosuke/pizzasuicideclub -https://github.com/takosuke/pizzasuicideclub -Entry file: pizzasuicideclub/psc_app/__init__.py -Scanned: 2016-10-12 13:56:05.567672 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-12 13:56:07.179239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bogdan-kulynych/cloudlectures -https://github.com/bogdan-kulynych/cloudlectures -Entry file: cloudlectures/flask/sessions.py -Scanned: 2016-10-12 13:56:10.669756 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neilduncan/FlickrPlaceholders -https://github.com/neilduncan/FlickrPlaceholders -Entry file: FlickrPlaceholders/main.py -Scanned: 2016-10-12 13:56:17.367424 -No vulnerabilities found. - - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-12 13:56:30.666941 -No vulnerabilities found. - - -DanielleSucher/BookQueue -https://github.com/DanielleSucher/BookQueue -Entry file: BookQueue/app.py -Scanned: 2016-10-12 13:56:35.005309 -Vulnerability 1: -File: BookQueue/app.py - > User input at line 145, trigger word "form[": - from_email = request.form['sender'].lower() -File: BookQueue/app.py - > reaches line 146, trigger word "filter(": - query = User.query.filter(User.email == from_email) - - - -msergdeez/vwcontrol -https://github.com/msergdeez/vwcontrol -Entry file: vwcontrol/vwcontrol.py -Scanned: 2016-10-12 13:56:41.913658 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amaterasu-/placeholder -https://github.com/amaterasu-/placeholder -Entry file: placeholder/image.py -Scanned: 2016-10-12 13:56:50.113250 -No vulnerabilities found. - - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-12 13:57:11.181347 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikeboers/Flask-Images -https://github.com/mikeboers/Flask-Images -Entry file: Flask-Images/tests/__init__.py -Scanned: 2016-10-12 13:57:13.368099 -No vulnerabilities found. - - -bkabrda/flask-whooshee -https://github.com/bkabrda/flask-whooshee -Entry file: flask-whooshee/test.py -Scanned: 2016-10-12 13:57:16.112110 -No vulnerabilities found. - - -koon-kai/kiblog -https://github.com/koon-kai/kiblog -Entry file: kiblog/app.py -Scanned: 2016-10-12 13:57:29.266217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deepgully/me -https://github.com/deepgully/me -Entry file: me/settings.py -Scanned: 2016-10-12 13:57:41.306585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -berlotto/flask-app-template -https://github.com/berlotto/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-12 13:57:42.663685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/flask-jsonpify -https://github.com/corydolphin/flask-jsonpify -Entry file: flask-jsonpify/test.py -Scanned: 2016-10-12 13:57:51.079518 -No vulnerabilities found. - - -mickey06/Flask-principal-example -https://github.com/mickey06/Flask-principal-example -Entry file: Flask-principal-example/FPrincipals.py -Scanned: 2016-10-12 13:57:54.505401 -No vulnerabilities found. - - -crazygit/flask -https://github.com/crazygit/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 13:57:59.433515 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joelrojo/flask -https://github.com/joelrojo/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 13:58:07.301392 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wingu/flask_filters -https://github.com/wingu/flask_filters -Entry file: flask_filters/test_flask_filters.py -Scanned: 2016-10-12 13:58:18.599340 -No vulnerabilities found. - - -seanrose/box-arcade -https://github.com/seanrose/box-arcade -Entry file: box-arcade/app/__init__.py -Scanned: 2016-10-12 13:58:34.075958 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-12 13:58:36.998524 -No vulnerabilities found. - - -eadmundo/flask-static-blog -https://github.com/eadmundo/flask-static-blog -Entry file: flask-static-blog/app/__init__.py -Scanned: 2016-10-12 13:58:51.913481 -No vulnerabilities found. - - -BuongiornoMIP/Reding -https://github.com/BuongiornoMIP/Reding -Entry file: Reding/reding/app.py -Scanned: 2016-10-12 13:58:57.051779 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-12 13:59:01.966744 -No vulnerabilities found. - - -colwilson/flask-lazyapi -https://github.com/colwilson/flask-lazyapi -Entry file: flask-lazyapi/demo_server.py -Scanned: 2016-10-12 13:59:08.506139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asgoel/Merge-flask -https://github.com/asgoel/Merge-flask -Entry file: Merge-flask/app.py -Scanned: 2016-10-12 13:59:16.522055 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-DataBrowser -https://github.com/xiechao06/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-12 13:59:22.550139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-12 13:59:23.835577 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -gregimba/Vodka -https://github.com/gregimba/Vodka -Entry file: Vodka/app.py -Scanned: 2016-10-12 13:59:31.482769 -No vulnerabilities found. - - -corydolphin/flask-olinauth -https://github.com/corydolphin/flask-olinauth -Entry file: flask-olinauth/example.py -Scanned: 2016-10-12 13:59:52.862278 -No vulnerabilities found. - - -theho/flask-wsgi -https://github.com/theho/flask-wsgi -Entry file: flask-wsgi/wsgi.py -Scanned: 2016-10-12 13:59:56.167444 -No vulnerabilities found. - - -0atman/flask-basic -https://github.com/0atman/flask-basic -Entry file: flask-basic/flask-basic.py -Scanned: 2016-10-12 14:00:08.975947 -No vulnerabilities found. - - -danielestevez/flasktutorial -https://github.com/danielestevez/flasktutorial -Entry file: flasktutorial/app/__init__.py -Scanned: 2016-10-12 14:00:24.371826 -No vulnerabilities found. - - -adityaathalye/flaskr -https://github.com/adityaathalye/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:00:29.911883 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-12 14:00:44.759415 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pityonline/flaskr -https://github.com/pityonline/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:00:52.287735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 14:00:55.809647 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clmns/flasktest -https://github.com/clmns/flasktest -Entry file: flasktest/nachh/app.py -Scanned: 2016-10-12 14:01:01.239899 -No vulnerabilities found. - - -zfdang/memcached-in-openshift -https://github.com/zfdang/memcached-in-openshift -Entry file: memcached-in-openshift/wsgi/main.py -Scanned: 2016-10-12 14:01:14.199811 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Masagin/FlaskCelery -https://github.com/Masagin/FlaskCelery -Entry file: FlaskCelery/flask.py -Scanned: 2016-10-12 14:01:19.511769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ConceptPending/flaskTemplate -https://github.com/ConceptPending/flaskTemplate -Entry file: flaskTemplate/server.py -Scanned: 2016-10-12 14:01:27.819418 -No vulnerabilities found. - - -AlexMost/Flask-starter -https://github.com/AlexMost/Flask-starter -Entry file: Flask-starter/app.py -Scanned: 2016-10-12 14:01:37.643195 -No vulnerabilities found. - - -prabeesh/Studentapp-Flask -https://github.com/prabeesh/Studentapp-Flask -Entry file: Studentapp-Flask/test.py -Scanned: 2016-10-12 14:01:44.946614 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garethpaul/flask-sample -https://github.com/garethpaul/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-12 14:01:52.470648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-12 14:02:01.396127 -No vulnerabilities found. - - -EvilDmitri/flask-mikroblog -https://github.com/EvilDmitri/flask-mikroblog -Entry file: flask-mikroblog/app/__init__.py -Scanned: 2016-10-12 14:02:09.819587 -No vulnerabilities found. - - -ekfriis/flask-mbtiles -https://github.com/ekfriis/flask-mbtiles -Entry file: flask-mbtiles/mbtileserver.py -Scanned: 2016-10-12 14:02:14.113834 -No vulnerabilities found. - - -hyaticua/flask-blog -https://github.com/hyaticua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 14:02:19.713415 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -maxcnunes/flask_bravi -https://github.com/maxcnunes/flask_bravi -Entry file: flask_bravi/braviapp/__init__.py -Scanned: 2016-10-12 14:02:25.218704 -No vulnerabilities found. - - -naveenpremchand02/flask_url -https://github.com/naveenpremchand02/flask_url -Entry file: flask_url/url.py -Scanned: 2016-10-12 14:02:38.010159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhemao/flask_demo -https://github.com/zhemao/flask_demo -Entry file: flask_demo/application.py -Scanned: 2016-10-12 14:02:57.305603 -No vulnerabilities found. - - -dproni/flask_test -https://github.com/dproni/flask_test -Entry file: flask_test/flask_test.py -Scanned: 2016-10-12 14:03:01.598882 -No vulnerabilities found. - - -thearchduke/flask-boiler -https://github.com/thearchduke/flask-boiler -Entry file: None -Scanned: 2016-10-12 14:03:15.144559 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StefanKjartansson/bower-flask -https://github.com/StefanKjartansson/bower-flask -Entry file: bower-flask/server.py -Scanned: 2016-10-12 14:03:16.365624 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-12 14:03:20.755631 -No vulnerabilities found. - - -tanayseven/Voix -https://github.com/tanayseven/Voix -Entry file: None -Scanned: 2016-10-12 14:03:31.271274 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gatesphere/flaskr-flask-tutorial -https://github.com/gatesphere/flaskr-flask-tutorial -Entry file: flaskr-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-12 14:03:32.657102 -No vulnerabilities found. - - -xiechao06/Flask-NavBar -https://github.com/xiechao06/Flask-NavBar -Entry file: Flask-NavBar/flask_nav_bar.py -Scanned: 2016-10-12 14:03:39.106663 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/flask-oauth-tutorial -https://github.com/cpdean/flask-oauth-tutorial -Entry file: flask-oauth-tutorial/flaskr.py -Scanned: 2016-10-12 14:03:45.464058 -No vulnerabilities found. - - -SalemHarrache-Archive/flask_chat_eventsource -https://github.com/SalemHarrache-Archive/flask_chat_eventsource -Entry file: flask_chat_eventsource/server.py -Scanned: 2016-10-12 14:03:54.805228 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nsfyn55/flask-mega-tutorial -https://github.com/nsfyn55/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-12 14:03:57.384359 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-12 14:04:00.879160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kishorekdty/paint_using_flask -https://github.com/kishorekdty/paint_using_flask -Entry file: None -Scanned: 2016-10-12 14:04:10.199020 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kishorekdty/paint_using_flask. - -bazerk/baz-flask-base -https://github.com/bazerk/baz-flask-base -Entry file: baz-flask-base/app/app.py -Scanned: 2016-10-12 14:04:17.156305 -Vulnerability 1: -File: baz-flask-base/app/frontend/views.py - > User input at line 48, trigger word "get(": - form = LoginForm(login=request.args.get('login', None), next=request.args.get('next', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 52: user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id - File: baz-flask-base/app/frontend/views.py - > Line 65: ret_MAYBE_FUNCTION_NAME = render_template('frontend/login.html',form=form) -File: baz-flask-base/app/frontend/views.py - > reaches line 61, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('') - -Vulnerability 2: -File: baz-flask-base/app/frontend/views.py - > User input at line 52, trigger word ".data": - user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id -File: baz-flask-base/app/frontend/views.py - > reaches line 61, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('') - - - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-12 14:04:21.776661 -No vulnerabilities found. - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-12 14:04:33.980272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-12 14:04:34.524232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Heroku-Paint-Using-Flask -https://github.com/rasheedh/Heroku-Paint-Using-Flask -Entry file: None -Scanned: 2016-10-12 14:04:39.782075 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Heroku-Paint-Using-Flask. - -Andrey-Khobnya/flask-sessions-mongo -https://github.com/Andrey-Khobnya/flask-sessions-mongo -Entry file: flask-sessions-mongo/flask-sessions-mongo/examples/loginsession.py -Scanned: 2016-10-12 14:04:46.076094 -No vulnerabilities found. - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-12 14:04:58.955568 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -texuf/myflaskproject -https://github.com/texuf/myflaskproject -Entry file: myflaskproject/hello.py -Scanned: 2016-10-12 14:05:02.267423 -No vulnerabilities found. - - -kshitizrimal/flaskr-modified -https://github.com/kshitizrimal/flaskr-modified -Entry file: flaskr-modified/flaskr.py -Scanned: 2016-10-12 14:05:14.763481 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sreekanthkaralmanna/heroku-paint-app-using-flask -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask -Entry file: None -Scanned: 2016-10-12 14:05:26.093791 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask. - -prasanthkumara/Heroku-Paint-App-Using--Flask -https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask -Entry file: None -Scanned: 2016-10-12 14:05:35.474076 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask. - -pyxze/PyxzeCorpus -https://github.com/pyxze/PyxzeCorpus -Entry file: PyxzeCorpus/corpus.py -Scanned: 2016-10-12 14:05:40.772630 -No vulnerabilities found. - - -mikewallace1979/milk -https://github.com/mikewallace1979/milk -Entry file: milk/milk.py -Scanned: 2016-10-12 14:05:47.165348 -No vulnerabilities found. - - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-12 14:05:55.473987 -No vulnerabilities found. - - -goonpug/goonpug-stats -https://github.com/goonpug/goonpug-stats -Entry file: goonpug-stats/goonpug/__init__.py -Scanned: 2016-10-12 14:06:00.884202 -No vulnerabilities found. - - -csesoc/bark-core -https://github.com/csesoc/bark-core -Entry file: bark-core/bark/__init__.py -Scanned: 2016-10-12 14:06:03.931092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crcsmnky/thehotspot -https://github.com/crcsmnky/thehotspot -Entry file: thehotspot/v2/app.py -Scanned: 2016-10-12 14:06:11.985896 -No vulnerabilities found. - - -etscrivner/sovereign-states -https://github.com/etscrivner/sovereign-states -Entry file: sovereign-states/sovereign_states/api.py -Scanned: 2016-10-12 14:06:17.428656 -No vulnerabilities found. - - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-12 14:06:21.779113 -No vulnerabilities found. - - -sreedathns/paint-app-using-heroku-and-flask -https://github.com/sreedathns/paint-app-using-heroku-and-flask -Entry file: None -Scanned: 2016-10-12 14:06:25.990895 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreedathns/paint-app-using-heroku-and-flask. - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-12 14:06:36.490663 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -igrishaev/youtube-python-api-sample -https://github.com/igrishaev/youtube-python-api-sample -Entry file: youtube-python-api-sample/app.py -Scanned: 2016-10-12 14:06:43.732209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chadgh/chessy -https://github.com/chadgh/chessy -Entry file: None -Scanned: 2016-10-12 14:06:51.277068 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lee212/fg-ws -https://github.com/lee212/fg-ws -Entry file: fg-ws/fgws/ws/FGWSApps.py -Scanned: 2016-10-12 14:06:55.601786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simplyluke/dothis -https://github.com/simplyluke/dothis -Entry file: dothis/dothis.py -Scanned: 2016-10-12 14:07:03.414136 -No vulnerabilities found. - - -fusic-com/flask-todo -https://github.com/fusic-com/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-12 14:07:18.660308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kljensen/async-flask-sqlalchemy-example -https://github.com/kljensen/async-flask-sqlalchemy-example -Entry file: async-flask-sqlalchemy-example/server.py -Scanned: 2016-10-12 14:07:21.978036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fusic-com/flask-webcache -https://github.com/fusic-com/flask-webcache -Entry file: flask-webcache/contrib/sleepycalc/app.py -Scanned: 2016-10-12 14:07:26.379245 -No vulnerabilities found. - - -rehandalal/flask-mobility -https://github.com/rehandalal/flask-mobility -Entry file: flask-mobility/flask_mobility/tests/test_decorators.py -Scanned: 2016-10-12 14:07:37.048211 -Vulnerability 1: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 48, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 2: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 51, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 3: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 69, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 4: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 72, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 5: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 36, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 6: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 40, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'off') - - - -kelp404/Flask-GAE -https://github.com/kelp404/Flask-GAE -Entry file: None -Scanned: 2016-10-12 14:07:44.772996 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wbolster/flask-uuid -https://github.com/wbolster/flask-uuid -Entry file: flask-uuid/test_flask_uuid.py -Scanned: 2016-10-12 14:07:57.135328 -No vulnerabilities found. - - -pyr/url-shortener -https://github.com/pyr/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-12 14:08:03.133113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danielholmstrom/flask-alchemyview -https://github.com/danielholmstrom/flask-alchemyview -Entry file: flask-alchemyview/tests/test_with_flask_sqlalchemy.py -Scanned: 2016-10-12 14:08:13.061182 -No vulnerabilities found. - - -kommmy/Flask -https://github.com/kommmy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-12 14:08:17.585202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DavidWittman/csrgenerator.com -https://github.com/DavidWittman/csrgenerator.com -Entry file: None -Scanned: 2016-10-12 14:08:23.202910 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DavidWittman/csrgenerator.com. - -vovantics/flask-bluebone -https://github.com/vovantics/flask-bluebone -Entry file: flask-bluebone/app/app.py -Scanned: 2016-10-12 14:08:26.893467 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -vmi356/filemanager -https://github.com/vmi356/filemanager -Entry file: filemanager/manager.py -Scanned: 2016-10-12 14:08:38.272180 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaysonsantos/jinja-assets-compressor -https://github.com/jaysonsantos/jinja-assets-compressor -Entry file: jinja-assets-compressor/jac/contrib/flask.py -Scanned: 2016-10-12 14:08:57.153282 -No vulnerabilities found. - - -1000ch/flask-handson -https://github.com/1000ch/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-12 14:09:00.563973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-12 14:09:04.061809 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -cratejoy/flask-experiment -https://github.com/cratejoy/flask-experiment -Entry file: flask-experiment/test/test.py -Scanned: 2016-10-12 14:09:23.785358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbika/flaskm -https://github.com/rbika/flaskm -Entry file: flaskm/flaskm.py -Scanned: 2016-10-12 14:09:27.311048 -No vulnerabilities found. - - -jishnujagajeeve/Flaskr -https://github.com/jishnujagajeeve/Flaskr -Entry file: Flaskr/app.py -Scanned: 2016-10-12 14:09:37.664353 -No vulnerabilities found. - - -openfree/flaskr -https://github.com/openfree/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:09:41.193216 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -catfive/flaskr -https://github.com/catfive/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:09:47.740620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Basher51/Flaskr -https://github.com/Basher51/Flaskr -Entry file: Flaskr/app.py -Scanned: 2016-10-12 14:09:57.065365 -No vulnerabilities found. - - -nabetama/flaskr -https://github.com/nabetama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:10:00.564179 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikedll/flasksqlitedemo -https://github.com/mikedll/flasksqlitedemo -Entry file: flasksqlitedemo/app.py -Scanned: 2016-10-12 14:10:09.420506 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-12 14:10:19.439521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaste/FlaskDeferredHandler -https://github.com/kaste/FlaskDeferredHandler -Entry file: FlaskDeferredHandler/flask_handler_test.py -Scanned: 2016-10-12 14:10:20.754539 -No vulnerabilities found. - - -adityaathalye/flaskr2 -https://github.com/adityaathalye/flaskr2 -Entry file: flaskr2/app.py -Scanned: 2016-10-12 14:10:24.038789 -No vulnerabilities found. - - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-12 14:10:31.152460 -No vulnerabilities found. - - -abulte/flask-arduino-websocket-sqlite -https://github.com/abulte/flask-arduino-websocket-sqlite -Entry file: flask-arduino-websocket-sqlite/app.py -Scanned: 2016-10-12 14:10:38.635020 -No vulnerabilities found. - - -edouardswiac/linkstash-flask -https://github.com/edouardswiac/linkstash-flask -Entry file: linkstash-flask/app.py -Scanned: 2016-10-12 14:11:01.459969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: flask-microblog/app/__init__.py -Scanned: 2016-10-12 14:11:14.414431 -No vulnerabilities found. - - -GerardoGR/flask-boilerplate -https://github.com/GerardoGR/flask-boilerplate -Entry file: flask-boilerplate/appname/appname/__init__.py -Scanned: 2016-10-12 14:11:21.737656 -No vulnerabilities found. - - -futuregrid/flask_cm -https://github.com/futuregrid/flask_cm -Entry file: flask_cm/examples/forms/app.py -Scanned: 2016-10-12 14:11:30.418500 -No vulnerabilities found. - - -shunyata/flask-helloworld -https://github.com/shunyata/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-12 14:11:38.780791 -No vulnerabilities found. - - -stephen-allison/basic-flask -https://github.com/stephen-allison/basic-flask -Entry file: None -Scanned: 2016-10-12 14:11:43.179853 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stephen-allison/basic-flask. - -bollwyvl/flask-reloaded -https://github.com/bollwyvl/flask-reloaded -Entry file: None -Scanned: 2016-10-12 14:11:50.594946 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bollwyvl/flask-reloaded. - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-12 14:11:58.907363 -No vulnerabilities found. - - -mattolsen1/flask_tumblelog -https://github.com/mattolsen1/flask_tumblelog -Entry file: flask_tumblelog/tumblelog/__init__.py -Scanned: 2016-10-12 14:12:02.378413 -No vulnerabilities found. - - -jonomillin/learning-flask -https://github.com/jonomillin/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-12 14:12:11.364609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kitanata/flask-demo -https://github.com/kitanata/flask-demo -Entry file: flask-demo/part3.py -Scanned: 2016-10-12 14:12:14.715784 -No vulnerabilities found. - - -rahulthrissur/Flask_app -https://github.com/rahulthrissur/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-12 14:12:22.041835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanAlbert/flask-guestbook -https://github.com/DanAlbert/flask-guestbook -Entry file: flask-guestbook/guestbook.py -Scanned: 2016-10-12 14:12:25.354179 -No vulnerabilities found. - - -toastercup/flask-social -https://github.com/toastercup/flask-social -Entry file: flask-social/social/__init__.py -Scanned: 2016-10-12 14:12:39.682272 -No vulnerabilities found. - - -mozillazg/flask-demo -https://github.com/mozillazg/flask-demo -Entry file: None -Scanned: 2016-10-12 14:12:44.211471 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mozillazg/flask-demo. - -nthfloor/Flask_learn -https://github.com/nthfloor/Flask_learn -Entry file: Flask_learn/login_system/flskr.py -Scanned: 2016-10-12 14:12:56.373798 -No vulnerabilities found. - - -kirkeby/empty-flask -https://github.com/kirkeby/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-12 14:12:59.855990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flyingsparx/MongoFlask -https://github.com/flyingsparx/MongoFlask -Entry file: MongoFlask/application.py -Scanned: 2016-10-12 14:13:03.174718 -No vulnerabilities found. - - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-12 14:13:08.497694 -No vulnerabilities found. - - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-12 14:13:14.810387 -No vulnerabilities found. - - -rehandalal/buchner -https://github.com/rehandalal/buchner -Entry file: buchner/buchner/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-12 14:13:27.977167 -No vulnerabilities found. - - -vitalk/flask-staticutils -https://github.com/vitalk/flask-staticutils -Entry file: flask-staticutils/tests/test_app/__init__.py -Scanned: 2016-10-12 14:13:29.396898 -No vulnerabilities found. - - -danillosouza/flask-boilerplate -https://github.com/danillosouza/flask-boilerplate -Entry file: flask-boilerplate/app/__init__.py -Scanned: 2016-10-12 14:13:39.950983 -Vulnerability 1: -File: flask-boilerplate/app/users/views.py - > User input at line 36, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-boilerplate/app/users/views.py - > Line 41: session['user_id'] = user.id -File: flask-boilerplate/app/users/views.py - > reaches line 42, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -dogrdon/flask-map -https://github.com/dogrdon/flask-map -Entry file: None -Scanned: 2016-10-12 14:13:48.960781 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chiwong/flask_quickstart -https://github.com/chiwong/flask_quickstart -Entry file: flask_quickstart/hello.py -Scanned: 2016-10-12 14:13:55.533246 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_quickstart/venv_hello/lib/python2.6/genericpath.py - -archieyang/flask_app -https://github.com/archieyang/flask_app -Entry file: flask_app/flask_app.py -Scanned: 2016-10-12 14:14:04.279892 -Vulnerability 1: -File: flask_app/flask_app.py - > User input at line 50, trigger word "form[": - secured_pwd = secure_hash(salt, request.form['password']) -File: flask_app/flask_app.py - > reaches line 52, trigger word "execute(": - g.db.execute('insert into users ( username, salt, password ) values (?, ?, ?)', [request.form['username'], salt, secured_pwd]) - - - -sapid/Flask-Community -https://github.com/sapid/Flask-Community -Entry file: None -Scanned: 2016-10-12 14:14:06.412066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sapid/Flask-Community. - -eudaimonious/HangmanWebsite -https://github.com/eudaimonious/HangmanWebsite -Entry file: HangmanWebsite/application_hangman.py -Scanned: 2016-10-12 14:14:18.660263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grimkeke/miniblog -https://github.com/grimkeke/miniblog -Entry file: miniblog/app/__init__.py -Scanned: 2016-10-12 14:14:23.783419 -No vulnerabilities found. - - -bracken1983/flaskBlogDemo -https://github.com/bracken1983/flaskBlogDemo -Entry file: flaskBlogDemo/flask-sqlalchemy-test.py -Scanned: 2016-10-12 14:14:33.242977 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmcgahan/flask-labs-bb -https://github.com/mmcgahan/flask-labs-bb -Entry file: flask-labs-bb/flask_labs/__init__.py -Scanned: 2016-10-12 14:14:37.839789 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-12 14:14:44.655092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daisuzu/flask-app-sample -https://github.com/daisuzu/flask-app-sample -Entry file: flask-app-sample/db.py -Scanned: 2016-10-12 14:14:51.969177 -No vulnerabilities found. - - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-12 14:15:01.445379 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -ipfans/openshift-flask-template -https://github.com/ipfans/openshift-flask-template -Entry file: openshift-flask-template/wsgi/mainapp.py -Scanned: 2016-10-12 14:15:05.922820 -No vulnerabilities found. - - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-12 14:15:09.220508 -No vulnerabilities found. - - -garbados/flask-the-gauntlet -https://github.com/garbados/flask-the-gauntlet -Entry file: flask-the-gauntlet/app.py -Scanned: 2016-10-12 14:15:15.524905 -No vulnerabilities found. - - -penpyt/flask-couchdb-auth -https://github.com/penpyt/flask-couchdb-auth -Entry file: flask-couchdb-auth/example/guestbook.py -Scanned: 2016-10-12 14:15:26.548677 -No vulnerabilities found. - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-12 14:15:34.055573 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-12 14:15:39.677582 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -pinchsoft/flask-newrelic-dotcloud -https://github.com/pinchsoft/flask-newrelic-dotcloud -Entry file: flask-newrelic-dotcloud/app.py -Scanned: 2016-10-12 14:15:44.980232 -No vulnerabilities found. - - -NoxDineen/microblog -https://github.com/NoxDineen/microblog -Entry file: microblog/app/__init__.py -Scanned: 2016-10-12 14:16:00.883788 -No vulnerabilities found. - - -PurplePilot/zanzeeba -https://github.com/PurplePilot/zanzeeba -Entry file: zanzeeba/appstd.py -Scanned: 2016-10-12 14:16:11.809248 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pitxon/sivir -https://github.com/Pitxon/sivir -Entry file: sivir/app.py -Scanned: 2016-10-12 14:16:13.113657 -No vulnerabilities found. - - -philangist/url-shorten -https://github.com/philangist/url-shorten -Entry file: url-shorten/shorten.py -Scanned: 2016-10-12 14:16:16.528591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabionatali/DigiWebStats -https://github.com/fabionatali/DigiWebStats -Entry file: DigiWebStats/app.py -Scanned: 2016-10-12 14:16:25.182827 -No vulnerabilities found. - - -confessin/addressbook -https://github.com/confessin/addressbook -Entry file: addressbook/addressbook.py -Scanned: 2016-10-12 14:16:26.488498 -No vulnerabilities found. - - -nafur/flmpc -https://github.com/nafur/flmpc -Entry file: flmpc/main.py -Scanned: 2016-10-12 14:16:35.959709 -No vulnerabilities found. - - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-12 14:16:41.298150 -No vulnerabilities found. - - -hit9/flask-sign-in-with-github.py -https://github.com/hit9/flask-sign-in-with-github.py -Entry file: None -Scanned: 2016-10-12 14:16:45.597744 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hit9/flask-sign-in-with-github.py. - -Kaibin/Condom_Data_Server -https://github.com/Kaibin/Condom_Data_Server -Entry file: Condom_Data_Server/app.py -Scanned: 2016-10-12 14:16:53.029816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -honestappalachia/honest_site -https://github.com/honestappalachia/honest_site -Entry file: honest_site/run.py -Scanned: 2016-10-12 14:17:01.442880 -Vulnerability 1: -File: honest_site/run.py - > User input at line 36, trigger word "get(": - template = page.meta.get('template', 'default.html') -File: honest_site/run.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -daikeshi/one-dollar-metasearch-engine -https://github.com/daikeshi/one-dollar-metasearch-engine -Entry file: one-dollar-metasearch-engine/app/__init__.py -Scanned: 2016-10-12 14:17:10.643261 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-12 14:17:17.215458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-social -https://github.com/mattupstate/flask-social -Entry file: flask-social/tests/test_app/__init__.py -Scanned: 2016-10-12 14:17:28.193815 -No vulnerabilities found. - - -xiyoulaoyuanjia/flaskapp -https://github.com/xiyoulaoyuanjia/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 14:17:35.720956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-12 14:17:42.085778 -No vulnerabilities found. - - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-12 14:17:46.475497 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trustrachel/Flask-FeatureFlags -https://github.com/trustrachel/Flask-FeatureFlags -Entry file: Flask-FeatureFlags/tests/fixtures.py -Scanned: 2016-10-12 14:17:54.259278 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rahulkmr/flask-bigapp-template -https://github.com/rahulkmr/flask-bigapp-template -Entry file: flask-bigapp-template/main.py -Scanned: 2016-10-12 14:18:02.355204 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -whtsky/Flask-WeRoBot -https://github.com/whtsky/Flask-WeRoBot -Entry file: Flask-WeRoBot/flask_werobot.py -Scanned: 2016-10-12 14:18:07.817573 -No vulnerabilities found. - - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-12 14:18:14.376667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/flask-tlsauth -https://github.com/stef/flask-tlsauth -Entry file: flask-tlsauth/demo/webapp.py -Scanned: 2016-10-12 14:18:16.690910 -No vulnerabilities found. - - -OpenTechSchool/python-flask-code -https://github.com/OpenTechSchool/python-flask-code -Entry file: python-flask-code/core/files-templates/catseverywhere.py -Scanned: 2016-10-12 14:18:26.048684 -No vulnerabilities found. - - -aahluwal/flask -https://github.com/aahluwal/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 14:18:36.443439 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-12 14:18:43.004086 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rollbar/rollbar-flask-example -https://github.com/rollbar/rollbar-flask-example -Entry file: rollbar-flask-example/hello.py -Scanned: 2016-10-12 14:18:47.344037 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqez/flasky -https://github.com/lqez/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-12 14:18:53.897501 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florapdx/My-Blog -https://github.com/florapdx/My-Blog -Entry file: My-Blog/sitebuilder.py -Scanned: 2016-10-12 14:19:13.175715 -No vulnerabilities found. - - -clef/sample-flask -https://github.com/clef/sample-flask -Entry file: sample-flask/app.py -Scanned: 2016-10-12 14:19:14.599813 -No vulnerabilities found. - - -Jd007/flask-rest -https://github.com/Jd007/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-12 14:19:25.629617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-12 14:19:30.000431 -No vulnerabilities found. - - -zeuxisoo/python-flask-social-oauth-facebook -https://github.com/zeuxisoo/python-flask-social-oauth-facebook -Entry file: None -Scanned: 2016-10-12 14:19:37.329461 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeuxisoo/python-flask-social-oauth-facebook. - -lpolepeddi/sightings -https://github.com/lpolepeddi/sightings -Entry file: sightings/routes.py -Scanned: 2016-10-12 14:19:53.016186 -No vulnerabilities found. - - -sholsapp/flask-skeleton -https://github.com/sholsapp/flask-skeleton -Entry file: None -Scanned: 2016-10-12 14:19:54.019420 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sholsapp/flask-skeleton. - -adatlabor/soa-demo -https://github.com/adatlabor/soa-demo -Entry file: soa-demo/service.py -Scanned: 2016-10-12 14:20:07.942172 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-12 14:20:17.268883 -No vulnerabilities found. - - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-12 14:20:18.688554 -No vulnerabilities found. - - -kirang89/flask-boiler -https://github.com/kirang89/flask-boiler -Entry file: None -Scanned: 2016-10-12 14:20:26.191949 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -topherjaynes/flasktut -https://github.com/topherjaynes/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-12 14:20:38.672786 -No vulnerabilities found. - - -aerialdomo/flaskblog -https://github.com/aerialdomo/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-12 14:20:43.252396 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -jonascj/flaskr -https://github.com/jonascj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:20:53.784197 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel/__init__.py -Scanned: 2016-10-12 14:20:55.252521 -No vulnerabilities found. - - -a2lin/flaskapp -https://github.com/a2lin/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 14:21:01.777433 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pinoytech/flaskapp -https://github.com/pinoytech/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-12 14:21:07.280744 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thinboy92/flasktuts -https://github.com/thinboy92/flasktuts -Entry file: flasktuts/app/__init__.py -Scanned: 2016-10-12 14:21:15.820849 -No vulnerabilities found. - - -aahluwal/flaskagain -https://github.com/aahluwal/flaskagain -Entry file: flaskagain/judgement.py -Scanned: 2016-10-12 14:21:24.385541 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskagain/renv/lib/python2.7/genericpath.py - -elboby/flask-config-override -https://github.com/elboby/flask-config-override -Entry file: flask-config-override/flask_config_override/test/test_cookie.py -Scanned: 2016-10-12 14:21:27.820137 -No vulnerabilities found. - - -MrFichter/flask1 -https://github.com/MrFichter/flask1 -Entry file: flask1/flask1.py -Scanned: 2016-10-12 14:21:29.127831 -No vulnerabilities found. - - -guilhermecomum/FlaskTutorial -https://github.com/guilhermecomum/FlaskTutorial -Entry file: FlaskTutorial/flaskr/flaskr.py -Scanned: 2016-10-12 14:21:39.224809 -No vulnerabilities found. - - -sherzberg/flask-native-package -https://github.com/sherzberg/flask-native-package -Entry file: flask-native-package/application.py -Scanned: 2016-10-12 14:21:55.164410 -No vulnerabilities found. - - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-12 14:21:56.687860 -No vulnerabilities found. - - -xrefor/flask_tut -https://github.com/xrefor/flask_tut -Entry file: flask_tut/flaskr.py -Scanned: 2016-10-12 14:22:03.039727 -No vulnerabilities found. - - -y2bishop2y/vagrant.flask -https://github.com/y2bishop2y/vagrant.flask -Entry file: None -Scanned: 2016-10-12 14:22:08.478991 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/y2bishop2y/vagrant.flask. - -markchadwick/flask-empty -https://github.com/markchadwick/flask-empty -Entry file: flask-empty/main.py -Scanned: 2016-10-12 14:22:15.827343 -No vulnerabilities found. - - -McrCoderDojo/Flask-Webapps -https://github.com/McrCoderDojo/Flask-Webapps -Entry file: Flask-Webapps/flask1.py -Scanned: 2016-10-12 14:22:28.737539 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -xjdrew/flask-demo -https://github.com/xjdrew/flask-demo -Entry file: None -Scanned: 2016-10-12 14:22:29.233147 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xjdrew/flask-demo. - -aerialdomo/flask_microblog -https://github.com/aerialdomo/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-12 14:22:42.353570 -No vulnerabilities found. - - -xrefor/flask_stuff -https://github.com/xrefor/flask_stuff -Entry file: flask_stuff/main.py -Scanned: 2016-10-12 14:22:55.173036 -No vulnerabilities found. - - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/app.py -Scanned: 2016-10-12 14:22:56.477124 -No vulnerabilities found. - - -jcerise/flask-photos -https://github.com/jcerise/flask-photos -Entry file: flask-photos/app.py -Scanned: 2016-10-12 14:23:03.816918 -No vulnerabilities found. - - -adesst/flask-blog -https://github.com/adesst/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 14:23:08.386904 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Hardtack/Flask-Router -https://github.com/Hardtack/Flask-Router -Entry file: Flask-Router/flask_router/tests.py -Scanned: 2016-10-12 14:23:19.661941 -No vulnerabilities found. - - -smdmustaffa/PythonFlask -https://github.com/smdmustaffa/PythonFlask -Entry file: PythonFlask/app/routes.py -Scanned: 2016-10-12 14:23:28.992842 -No vulnerabilities found. - - -jinzhangg/flask-helloworld -https://github.com/jinzhangg/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-12 14:23:30.332755 -No vulnerabilities found. - - -bogavante/mitsuhiko-flask -https://github.com/bogavante/mitsuhiko-flask -Entry file: mitsuhiko-flask/setup.py -Scanned: 2016-10-12 14:23:43.337775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hardez/Flask-Skeleton -https://github.com/hardez/Flask-Skeleton -Entry file: Flask-Skeleton/app/__init__.py -Scanned: 2016-10-12 14:23:56.636336 -No vulnerabilities found. - - -stfy86/pruebitasFlask -https://github.com/stfy86/pruebitasFlask -Entry file: pruebitasFlask/practica4/src/app/__init__.py -Scanned: 2016-10-12 14:24:09.896929 -No vulnerabilities found. - - -kracekumar/test-flask -https://github.com/kracekumar/test-flask -Entry file: test-flask/app.py -Scanned: 2016-10-12 14:24:17.758582 -No vulnerabilities found. - - -charliecrissman/microblog -https://github.com/charliecrissman/microblog -Entry file: microblog/app/__init__.py -Scanned: 2016-10-12 14:24:29.595252 -No vulnerabilities found. - - -gourneau/anode -https://github.com/gourneau/anode -Entry file: anode/app.py -Scanned: 2016-10-12 14:24:39.514823 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmahnken/Flask_to_do_list -https://github.com/mmahnken/Flask_to_do_list -Entry file: Flask_to_do_list/tipsy.py -Scanned: 2016-10-12 14:24:56.553443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abulte/Flask-Bootstrap-Fanstatic -https://github.com/abulte/Flask-Bootstrap-Fanstatic -Entry file: Flask-Bootstrap-Fanstatic/application/__init__.py -Scanned: 2016-10-12 14:25:04.368316 -No vulnerabilities found. - - -jennyferpinto/Flask_Part_1 -https://github.com/jennyferpinto/Flask_Part_1 -Entry file: Flask_Part_1/tipsy.py -Scanned: 2016-10-12 14:25:09.900585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephanienkram/Flask-Log-Tracker -https://github.com/stephanienkram/Flask-Log-Tracker -Entry file: Flask-Log-Tracker/main.py -Scanned: 2016-10-12 14:25:26.696193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwmeyer/minimal-flask-socketserver -https://github.com/mwmeyer/minimal-flask-socketserver -Entry file: minimal-flask-socketserver/flash_socket.py -Scanned: 2016-10-12 14:25:30.812243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-12 14:25:31.303219 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -isms/flask-phonebank-dashboard -https://github.com/isms/flask-phonebank-dashboard -Entry file: flask-phonebank-dashboard/app.py -Scanned: 2016-10-12 14:25:40.310993 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-12 14:25:46.639964 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-12 14:25:56.971584 -No vulnerabilities found. - - -jpanganiban/flask-heroku-kickstart -https://github.com/jpanganiban/flask-heroku-kickstart -Entry file: None -Scanned: 2016-10-12 14:25:58.385813 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jpanganiban/flask-heroku-kickstart. - -justinxreese/ajax-calculator-flask -https://github.com/justinxreese/ajax-calculator-flask -Entry file: None -Scanned: 2016-10-12 14:26:08.523470 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -prabeesh/Paintapp-Javascript-Canvas-Flask -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask -Entry file: Paintapp-Javascript-Canvas-Flask/test.py -Scanned: 2016-10-12 14:26:09.826953 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 19, trigger word "execute(": - cur.execute('SELECT * FROM Image WHERE imgname=?', imgname) - -Vulnerability 2: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - -Vulnerability 3: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 25: ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - - - -godber/flask-mobile-switch -https://github.com/godber/flask-mobile-switch -Entry file: flask-mobile-switch/missionops/missionops/__init__.py -Scanned: 2016-10-12 14:26:19.477874 -No vulnerabilities found. - - -naveenpremchand02/paintapp-using-Flask -https://github.com/naveenpremchand02/paintapp-using-Flask -Entry file: None -Scanned: 2016-10-12 14:26:20.769600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/naveenpremchand02/paintapp-using-Flask. - -orkunozbek/deploy_test -https://github.com/orkunozbek/deploy_test -Entry file: deploy_test/app_pack/__init__.py -Scanned: 2016-10-12 14:26:30.103292 -No vulnerabilities found. - - -emi1337/movie_rater -https://github.com/emi1337/movie_rater -Entry file: movie_rater/judgement.py -Scanned: 2016-10-12 14:26:39.175190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-12 14:26:45.235004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -y2bishop2y/microengine -https://github.com/y2bishop2y/microengine -Entry file: microengine/lib/flask_sqlalchemy.py -Scanned: 2016-10-12 14:26:52.236265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-12 14:26:57.852527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akshar-raaj/flaks -https://github.com/akshar-raaj/flaks -Entry file: flaks/hello.py -Scanned: 2016-10-12 14:26:59.141050 -No vulnerabilities found. - - -soniacs/cabinet -https://github.com/soniacs/cabinet -Entry file: cabinet/app/__init__.py -Scanned: 2016-10-12 14:27:05.788612 -Vulnerability 1: -File: cabinet/app/views/clients.py - > User input at line 33, trigger word "form[": - client = Client(name=request.form['name'], company=request.form['company'], website=request.form['website'], twitter=request.form['twitter'], email=request.form['email'], telephone=request.form['telephone'], skype=request.form['skype'], street=request.form['street'], street_2=request.form['street_2'], city=request.form['city'], state=request.form['state'], postcode=request.form['postcode'], country=request.form['country'], notes=request.form['notes']) -File: cabinet/app/views/clients.py - > reaches line 50, trigger word "flash(": - flash('Client '%s' was added.' % client.name) - -Vulnerability 2: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 80: ret_MAYBE_FUNCTION_NAME = render_template('clients/edit.html',title='Edit %s' % client.name, client=client) - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 78, trigger word "flash(": - flash('Client '%s' has been updated.' % client.name) - -Vulnerability 3: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 95: ret_MAYBE_FUNCTION_NAME = render_template('clients/delete.html',title='Delete %s' % client.name, client=client) - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 93, trigger word "flash(": - flash('Client '%s' has been deleted.' % client.name) - -Vulnerability 4: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 5: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 6: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "get(": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 7: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "form[": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 8: -File: cabinet/app/views/invoices.py - > User input at line 33, trigger word "form[": - invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 9: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 80: ret_MAYBE_FUNCTION_NAME = render_template('invoices/edit.html',title='Edit Invoice %s' % invoice.name, invoice=invoice, clients=clients, projects=projects) - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 78, trigger word "flash(": - flash('Invoice '%s' has been updated.' % invoice.name) - -Vulnerability 10: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 97: ret_MAYBE_FUNCTION_NAME = render_template('invoices/delete.html',title='Delete Invoice %s' % invoice.name, invoice=invoice) - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 95, trigger word "flash(": - flash('Invoice '%s' has been deleted.' % invoice.name) - -Vulnerability 11: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 12: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 13: -File: cabinet/app/views/projects.py - > User input at line 31, trigger word "form[": - project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 14: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('projects/edit.html',title='Edit %s' % project.name, project=project, clients=clients) - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 69, trigger word "flash(": - flash('Project '%s' has been updated.' % project.name) - -Vulnerability 15: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('projects/delete.html',title='Delete %s' % project.name, project=project) - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 85, trigger word "flash(": - flash('Project '%s' has been deleted.' % project.name) - - - -MattStockton/manpage -https://github.com/MattStockton/manpage -Entry file: manpage/app.py -Scanned: 2016-10-12 14:27:10.965731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qzio/tododis -https://github.com/qzio/tododis -Entry file: tododis/app.py -Scanned: 2016-10-12 14:27:20.060868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-12 14:27:21.359383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aromanovich/flask-webtest -https://github.com/aromanovich/flask-webtest -Entry file: flask-webtest/tests/core.py -Scanned: 2016-10-12 14:27:58.597218 -No vulnerabilities found. - - -ashcrow/flask-track-usage -https://github.com/ashcrow/flask-track-usage -Entry file: flask-track-usage/test/__init__.py -Scanned: 2016-10-12 14:28:00.370453 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lepture/flask-shorturl -https://github.com/lepture/flask-shorturl -Entry file: flask-shorturl/test_shorturl.py -Scanned: 2016-10-12 14:28:05.780972 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 14:28:10.333890 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-12 14:28:18.837176 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 14:28:33.735828 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wangzexin/flask -https://github.com/wangzexin/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 14:28:40.646868 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -samsolariusleo/Flask -https://github.com/samsolariusleo/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-12 14:28:48.188398 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tornado-utils/tornado-restless -https://github.com/tornado-utils/tornado-restless -Entry file: tornado-restless/tests/base.py -Scanned: 2016-10-12 14:28:59.977043 -No vulnerabilities found. - - -adamgreenhall/flask-haml-sass-coffee-template -https://github.com/adamgreenhall/flask-haml-sass-coffee-template -Entry file: flask-haml-sass-coffee-template/app.py -Scanned: 2016-10-12 14:29:05.794183 -No vulnerabilities found. - - -prakhar1989/flask-tuts -https://github.com/prakhar1989/flask-tuts -Entry file: flask-tuts/lesson-2/blogs/__init__.py -Scanned: 2016-10-12 14:29:23.378312 -No vulnerabilities found. - - -Treeki/bitBoard -https://github.com/Treeki/bitBoard -Entry file: bitBoard/bitBoard/__init__.py -Scanned: 2016-10-12 14:29:32.670512 -Vulnerability 1: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 757: ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 760: ret_MAYBE_FUNCTION_NAME = render_template('move_thread.html',form=form, forum=forum, thread=thread, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 710, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 2: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) - File: bitBoard/bitBoard/views/board.py - > Line 869: ret_MAYBE_FUNCTION_NAME = form.redirect(url=thread.url) - File: bitBoard/bitBoard/views/board.py - > Line 871: ret_MAYBE_FUNCTION_NAME = render_template('confirm.html',form=form, crumbs_type='thread', forum=forum, thread=thread, final_crumb='%s Thread' % cap_verb, message=message, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 802, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 3: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 4: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - - - -byu-osl/familytree-sample-app -https://github.com/byu-osl/familytree-sample-app -Entry file: familytree-sample-app/app.py -Scanned: 2016-10-12 14:29:36.093621 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmiasko/flask-barcode -https://github.com/kmiasko/flask-barcode -Entry file: flask-barcode/wsgi.py -Scanned: 2016-10-12 14:29:41.520214 -No vulnerabilities found. - - -jayzcode/helloflask -https://github.com/jayzcode/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-12 14:29:51.633809 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-12 14:30:07.467859 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -maxcountryman/flask-simpleoauth -https://github.com/maxcountryman/flask-simpleoauth -Entry file: flask-simpleoauth/flask_simpleoauth/app.py -Scanned: 2016-10-12 14:30:11.830984 -Vulnerability 1: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 30, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.index')) - -Vulnerability 2: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 42, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.login')) - -Vulnerability 4: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -bayazee/flask-mosession -https://github.com/bayazee/flask-mosession -Entry file: flask-mosession/example/example.py -Scanned: 2016-10-12 14:30:21.275097 -No vulnerabilities found. - - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-12 14:30:25.540683 -No vulnerabilities found. - - -krushton/flask-api-example -https://github.com/krushton/flask-api-example -Entry file: flask-api-example/app.py -Scanned: 2016-10-12 14:30:31.920519 -No vulnerabilities found. - - -bootandy/flask-sample -https://github.com/bootandy/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-12 14:30:34.441859 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -damour/flaskr -https://github.com/damour/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:30:40.974561 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -roshow/flasktutorial -https://github.com/roshow/flasktutorial -Entry file: None -Scanned: 2016-10-12 14:30:56.334252 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jph98/flaskdmg -https://github.com/jph98/flaskdmg -Entry file: flaskdmg/flaskexample.py -Scanned: 2016-10-12 14:30:59.648459 -No vulnerabilities found. - - -akshar-raaj/flaskr -https://github.com/akshar-raaj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:31:01.185267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 14:31:06.626325 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:31:11.124999 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codergirl/flaskbabar -https://github.com/codergirl/flaskbabar -Entry file: flaskbabar/hello.py -Scanned: 2016-10-12 14:31:21.573031 -Vulnerability 1: -File: flaskbabar/hello.py - > User input at line 44, trigger word "get(": - new_user = BabarUser(request.args.get('username'), request.args.get('email')) -Reassigned in: - File: flaskbabar/hello.py - > Line 47: json = new_user.id'username''email'new_user.namenew_user.email -File: flaskbabar/hello.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 2: -File: flaskbabar/hello.py - > User input at line 61, trigger word "get(": - the_user = db.session.query(BabarUser).filter_by(id=request.args.get('user_id')).first() -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 3: -File: flaskbabar/hello.py - > User input at line 62, trigger word "get(": - task_name = request.args.get('name') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 4: -File: flaskbabar/hello.py - > User input at line 63, trigger word "get(": - task_description = request.args.get('description') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 5: -File: flaskbabar/hello.py - > User input at line 64, trigger word "get(": - dismissable = request.args.get('dismissable') -Reassigned in: - File: flaskbabar/hello.py - > Line 66: dismissable = True - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 6: -File: flaskbabar/hello.py - > User input at line 67, trigger word "get(": - due_date = request.args.get('due_date') -Reassigned in: - File: flaskbabar/hello.py - > Line 69: due_date = datetime.datetime.fromtimestamp(float(due_date)) - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - - - -rajendrakrp/GAE-Flask-OpenID -https://github.com/rajendrakrp/GAE-Flask-OpenID -Entry file: GAE-Flask-OpenID/flask/sessions.py -Scanned: 2016-10-12 14:31:27.089519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JLtheking/FlaskExample -https://github.com/JLtheking/FlaskExample -Entry file: FlaskExample/routes.py -Scanned: 2016-10-12 14:31:32.642352 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aussiroth/FlaskPractical -https://github.com/Aussiroth/FlaskPractical -Entry file: FlaskPractical/flask/routes.py -Scanned: 2016-10-12 14:31:36.204879 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -dorajistyle/proposal_center_python_flask_sqlalchemy_jade -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade -Entry file: proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -Scanned: 2016-10-12 14:31:43.217840 -No vulnerabilities found. - - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-12 14:31:56.156789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haburibe/flask-myapps -https://github.com/haburibe/flask-myapps -Entry file: flask-myapps/todos/todos.py -Scanned: 2016-10-12 14:32:00.465628 -No vulnerabilities found. - - -mykolasmith/flask-leaderboard -https://github.com/mykolasmith/flask-leaderboard -Entry file: flask-leaderboard/leaderboard/__init__.py -Scanned: 2016-10-12 14:32:02.946518 -No vulnerabilities found. - - -betobaz/app_flask -https://github.com/betobaz/app_flask -Entry file: app_flask/app/routes.py -Scanned: 2016-10-12 14:32:07.383223 -No vulnerabilities found. - - -redfive/python-flask -https://github.com/redfive/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-12 14:32:13.528859 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atbaker/flask-tutorial -https://github.com/atbaker/flask-tutorial -Entry file: flask-tutorial/app/__init__.py -Scanned: 2016-10-12 14:32:33.097668 -No vulnerabilities found. - - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-12 14:32:36.409157 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -gabrielengel/learn-flask -https://github.com/gabrielengel/learn-flask -Entry file: learn-flask/01-minimal/minimal.py -Scanned: 2016-10-12 14:32:42.768203 -No vulnerabilities found. - - -mutaku/alfred_flask -https://github.com/mutaku/alfred_flask -Entry file: alfred_flask/alfred.py -Scanned: 2016-10-12 14:33:00.588958 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcilioleite/flask-saude -https://github.com/marcilioleite/flask-saude -Entry file: flask-saude/app/__init__.py -Scanned: 2016-10-12 14:33:04.352135 -No vulnerabilities found. - - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-12 14:33:07.664209 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -elimgoodman/Personnel-Flask -https://github.com/elimgoodman/Personnel-Flask -Entry file: Personnel-Flask/app/__init__.py -Scanned: 2016-10-12 14:33:13.580290 -No vulnerabilities found. - - -bradmerlin/porty_flask -https://github.com/bradmerlin/porty_flask -Entry file: porty_flask/app.py -Scanned: 2016-10-12 14:33:38.139489 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asap/watchman.flask -https://github.com/asap/watchman.flask -Entry file: None -Scanned: 2016-10-12 14:33:43.457320 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/asap/watchman.flask. - -marksteve/flask-nsq -https://github.com/marksteve/flask-nsq -Entry file: flask-nsq/test.py -Scanned: 2016-10-12 14:33:51.801908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Duelist/ianb-flask -https://github.com/Duelist/ianb-flask -Entry file: ianb-flask/ianb/__init__.py -Scanned: 2016-10-12 14:34:03.747577 -No vulnerabilities found. - - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-12 14:34:08.825599 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -lachezar/tada_backend -https://github.com/lachezar/tada_backend -Entry file: tada_backend/todo.py -Scanned: 2016-10-12 14:34:13.568485 -No vulnerabilities found. - - -luxuia/gene_designer -https://github.com/luxuia/gene_designer -Entry file: gene_designer/geneDesigne.py -Scanned: 2016-10-12 14:34:30.346157 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephanienkram/Flask-Money-Tracker -https://github.com/stephanienkram/Flask-Money-Tracker -Entry file: Flask-Money-Tracker/main.py -Scanned: 2016-10-12 14:34:38.021489 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cismet/sqlparse-flask-webservice -https://github.com/cismet/sqlparse-flask-webservice -Entry file: sqlparse-flask-webservice/sqlparse_webservice.py -Scanned: 2016-10-12 14:34:40.193911 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonascj/flask_logger_test -https://github.com/jonascj/flask_logger_test -Entry file: flask_logger_test/flask_logger_test.py -Scanned: 2016-10-12 14:34:43.508762 -No vulnerabilities found. - - -rubinovitz/flask-gevent-boiler -https://github.com/rubinovitz/flask-gevent-boiler -Entry file: flask-gevent-boiler/app.py -Scanned: 2016-10-12 14:34:51.852930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rartavia/flask-babel-example -https://github.com/rartavia/flask-babel-example -Entry file: flask-babel-example/flask-babel-example.py -Scanned: 2016-10-12 14:35:01.202546 -No vulnerabilities found. - - -bradmerlin/mxit-spock_flask -https://github.com/bradmerlin/mxit-spock_flask -Entry file: mxit-spock_flask/app.py -Scanned: 2016-10-12 14:35:04.762651 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elidickinson/flask-proxy-demo -https://github.com/elidickinson/flask-proxy-demo -Entry file: flask-proxy-demo/hello.py -Scanned: 2016-10-12 14:35:08.089074 -No vulnerabilities found. - - -luckypool/flask-blueprints-template -https://github.com/luckypool/flask-blueprints-template -Entry file: flask-blueprints-template/hello/__init__.py -Scanned: 2016-10-12 14:35:23.886799 -No vulnerabilities found. - - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-12 14:35:25.438255 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -chrismeono1022/microblog_flask_tutorial -https://github.com/chrismeono1022/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/app/__init__.py -Scanned: 2016-10-12 14:35:40.320868 -No vulnerabilities found. - - -adamjmarkham/flask-micro-blog -https://github.com/adamjmarkham/flask-micro-blog -Entry file: flask-micro-blog/micro_blog_flask.py -Scanned: 2016-10-12 14:35:43.741730 -No vulnerabilities found. - - -krushton/flask-location-example -https://github.com/krushton/flask-location-example -Entry file: flask-location-example/app.py -Scanned: 2016-10-12 14:35:52.094806 -No vulnerabilities found. - - -david-torres/flask-rest-quickstart -https://github.com/david-torres/flask-rest-quickstart -Entry file: flask-rest-quickstart/application/__init__.py -Scanned: 2016-10-12 14:36:04.936574 -No vulnerabilities found. - - -bradmerlin/mxit-blackjack_flask -https://github.com/bradmerlin/mxit-blackjack_flask -Entry file: mxit-blackjack_flask/app.py -Scanned: 2016-10-12 14:36:11.670591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyhmltn/stripe-flask-test -https://github.com/andyhmltn/stripe-flask-test -Entry file: stripe-flask-test/main.py -Scanned: 2016-10-12 14:36:14.083667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manuclementz/shrt -https://github.com/manuclementz/shrt -Entry file: shrt/app.py -Scanned: 2016-10-12 14:36:26.902706 -No vulnerabilities found. - - -jsutterfield/flaskr-buildout -https://github.com/jsutterfield/flaskr-buildout -Entry file: flaskr-buildout/src/flaskr/flaskr.py -Scanned: 2016-10-12 14:36:38.295831 -No vulnerabilities found. - - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-12 14:36:40.644897 -No vulnerabilities found. - - -wangxiaoxiao88/python-bookmanager -https://github.com/wangxiaoxiao88/python-bookmanager -Entry file: python-bookmanager/app.py -Scanned: 2016-10-12 14:36:44.098696 -No vulnerabilities found. - - -Syerram/maintenance-server -https://github.com/Syerram/maintenance-server -Entry file: maintenance-server/run.py -Scanned: 2016-10-12 14:36:52.448419 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/boilerflask-facebook -https://github.com/corydolphin/boilerflask-facebook -Entry file: boilerflask-facebook/boilerflask/__init__.py -Scanned: 2016-10-12 14:37:02.202137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-12 14:37:04.716175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subdesign/temp_Flaskblog -https://github.com/subdesign/temp_Flaskblog -Entry file: temp_Flaskblog/app.py -Scanned: 2016-10-12 14:37:09.305204 -No vulnerabilities found. - - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-12 14:37:16.193267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liontree/lemonbook -https://github.com/liontree/lemonbook -Entry file: lemonbook/__init__.py -Scanned: 2016-10-12 14:37:29.163011 -Vulnerability 1: -File: lemonbook/common/flask_login.py - > User input at line 227, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 2: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 55: date = date.replace('/', '') - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - -Vulnerability 3: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 55: date = date.replace('/', '') - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - - - -abhiomkar/contacts-rest -https://github.com/abhiomkar/contacts-rest -Entry file: contacts-rest/contacts.py -Scanned: 2016-10-12 14:37:30.456581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Giorgix/thor -https://github.com/Giorgix/thor -Entry file: thor/thor.py -Scanned: 2016-10-12 14:37:34.887173 -No vulnerabilities found. - - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: nozomiServer/app.py -Scanned: 2016-10-12 14:37:44.390970 -No vulnerabilities found. - - -lepture/flask-oauthlib -https://github.com/lepture/flask-oauthlib -Entry file: flask-oauthlib/flask_oauthlib/provider/oauth1.py -Scanned: 2016-10-12 14:37:55.550971 -Vulnerability 1: -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > User input at line 87, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH1_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 90: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 86: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > reaches line 89, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 2: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 104, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH2_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 107: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 103: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 106, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 3: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 447, trigger word "get(": - redirect_uri = credentials.get('redirect_uri') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 464: ret_MAYBE_FUNCTION_NAME = redirect(add_params_to_uri(self.error_uri, 'error'str(e))) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 455: ret_MAYBE_FUNCTION_NAME = create_response(ret) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 458: ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(self.error_uri)) -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 461, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(redirect_uri or self.error_uri)) - - - -miguelgrinberg/Flask-HTTPAuth -https://github.com/miguelgrinberg/Flask-HTTPAuth -Entry file: Flask-HTTPAuth/examples/basic_auth.py -Scanned: 2016-10-12 14:38:02.451558 -No vulnerabilities found. - - -cburmeister/flask-bones -https://github.com/cburmeister/flask-bones -Entry file: flask-bones/app/__init__.py -Scanned: 2016-10-12 14:38:06.989823 -No vulnerabilities found. - - -sysr-q/flask-nsa -https://github.com/sysr-q/flask-nsa -Entry file: flask-nsa/example_app.py -Scanned: 2016-10-12 14:38:12.318094 -No vulnerabilities found. - - -lepture/flask-storage -https://github.com/lepture/flask-storage -Entry file: flask-storage/tests/__init__.py -Scanned: 2016-10-12 14:38:13.827581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plastboks/Flaskmarks -https://github.com/plastboks/Flaskmarks -Entry file: Flaskmarks/flaskmarks/__init__.py -Scanned: 2016-10-12 14:38:38.435685 -Vulnerability 1: -File: Flaskmarks/flaskmarks/views/auth.py - > User input at line 33, trigger word ".data": - u = User.by_uname_or_email(form.username.data) -File: Flaskmarks/flaskmarks/views/auth.py - > reaches line 38, trigger word "flash(": - flash('Welcome %s.' % u.username,category='success') - - - -martinp/jarvis2 -https://github.com/martinp/jarvis2 -Entry file: jarvis2/app/main.py -Scanned: 2016-10-12 14:38:45.072281 -No vulnerabilities found. - - -akhilchandran/flask -https://github.com/akhilchandran/flask -Entry file: flask/setup.py -Scanned: 2016-10-12 14:38:45.967538 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -JamesHoover/Flask -https://github.com/JamesHoover/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-12 14:38:52.520913 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhanababu-nyros/flask-sqlalchemy -https://github.com/dhanababu-nyros/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-12 14:39:02.841743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -klen/mixer -https://github.com/klen/mixer -Entry file: mixer/tests/test_flask.py -Scanned: 2016-10-12 14:39:08.636688 -No vulnerabilities found. - - -wrobstory/mcflyin -https://github.com/wrobstory/mcflyin -Entry file: mcflyin/mcflyin/application.py -Scanned: 2016-10-12 14:39:16.032149 -No vulnerabilities found. - - -Hardtack/Flask-Negotiation -https://github.com/Hardtack/Flask-Negotiation -Entry file: Flask-Negotiation/tests/test_negotiation.py -Scanned: 2016-10-12 14:39:25.593617 -No vulnerabilities found. - - -marksteve/flask-redisconfig -https://github.com/marksteve/flask-redisconfig -Entry file: flask-redisconfig/example.py -Scanned: 2016-10-12 14:39:42.015269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benhosmer/flask-zurb -https://github.com/benhosmer/flask-zurb -Entry file: flask-zurb/app.py -Scanned: 2016-10-12 14:39:50.739116 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mies/getting-started-flask-redis -https://github.com/mies/getting-started-flask-redis -Entry file: getting-started-flask-redis/app.py -Scanned: 2016-10-12 14:39:54.180776 -No vulnerabilities found. - - -eriktaubeneck/flask-twitter-oembedder -https://github.com/eriktaubeneck/flask-twitter-oembedder -Entry file: flask-twitter-oembedder/tests/test_flask_twitter_oembedder.py -Scanned: 2016-10-12 14:40:07.096535 -No vulnerabilities found. - - -DasIch/Flask-MakeStatic -https://github.com/DasIch/Flask-MakeStatic -Entry file: Flask-MakeStatic/flask_makestatic/__init__.py -Scanned: 2016-10-12 14:40:10.775213 -No vulnerabilities found. - - -insynchq/flask-captain -https://github.com/insynchq/flask-captain -Entry file: flask-captain/example.py -Scanned: 2016-10-12 14:40:16.227170 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fedenusy/flaskr -https://github.com/fedenusy/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-12 14:40:24.736689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmiao/Flaskr -https://github.com/scottmiao/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-12 14:40:30.253137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rubensayshi/flaskbp -https://github.com/rubensayshi/flaskbp -Entry file: flaskbp/flaskbp/application.py -Scanned: 2016-10-12 14:40:35.589904 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ovet/flaskboard -https://github.com/ovet/flaskboard -Entry file: flaskboard/flaskboard.py -Scanned: 2016-10-12 14:40:42.923190 -No vulnerabilities found. - - -iaserrat/flaskify -https://github.com/iaserrat/flaskify -Entry file: flaskify/flaskify.py -Scanned: 2016-10-12 14:40:48.240801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EventMobi/thorium -https://github.com/EventMobi/thorium -Entry file: thorium/thorium/testsuite/test_thoriumflask.py -Scanned: 2016-10-12 14:40:59.010088 -No vulnerabilities found. - - -paraboul/FlaskPress -https://github.com/paraboul/FlaskPress -Entry file: None -Scanned: 2016-10-12 14:41:04.501921 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paraboul/FlaskPress. - -dl33/FlaskBlog -https://github.com/dl33/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-12 14:41:13.982204 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/flask-ip-hostname-resolvers -https://github.com/flebel/flask-ip-hostname-resolvers -Entry file: flask-ip-hostname-resolvers/ip.py -Scanned: 2016-10-12 14:41:15.320924 -No vulnerabilities found. - - -newbiemasih/Flask-Course -https://github.com/newbiemasih/Flask-Course -Entry file: None -Scanned: 2016-10-12 14:41:21.020571 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -port-/flask-skeleton -https://github.com/port-/flask-skeleton -Entry file: None -Scanned: 2016-10-12 14:41:25.550779 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/port-/flask-skeleton. - -AlexeyMK/gglto_flask -https://github.com/AlexeyMK/gglto_flask -Entry file: gglto_flask/gglto.py -Scanned: 2016-10-12 14:41:36.396231 -No vulnerabilities found. - - -xor-xor/webapp_flask -https://github.com/xor-xor/webapp_flask -Entry file: webapp_flask/app.py -Scanned: 2016-10-12 14:41:43.742528 -No vulnerabilities found. - - -suneel0101/flask-buddy -https://github.com/suneel0101/flask-buddy -Entry file: flask-buddy/server.py -Scanned: 2016-10-12 14:41:49.057019 -No vulnerabilities found. - - -sanoju/GaeFlask -https://github.com/sanoju/GaeFlask -Entry file: GaeFlask/flask/sessions.py -Scanned: 2016-10-12 14:41:57.258634 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kfk/flask-blog -https://github.com/kfk/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-12 14:42:03.806971 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -irakasleibiltaria/flask-tutorial -https://github.com/irakasleibiltaria/flask-tutorial -Entry file: flask-tutorial/hello.py -Scanned: 2016-10-12 14:42:08.134580 -No vulnerabilities found. - - -wodim/flask-test -https://github.com/wodim/flask-test -Entry file: flask-test/hello.py -Scanned: 2016-10-12 14:42:15.490112 -No vulnerabilities found. - - -sammyrulez/flask-grolla -https://github.com/sammyrulez/flask-grolla -Entry file: flask-grolla/tests.py -Scanned: 2016-10-12 14:42:28.145847 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxbucknell/vanilla_flask -https://github.com/maxbucknell/vanilla_flask -Entry file: vanilla_flask/vanilla/__init__.py -Scanned: 2016-10-12 14:42:33.041393 -No vulnerabilities found. - - -DamnedFacts/flask-contact -https://github.com/DamnedFacts/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-12 14:42:35.549753 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcilioleite/flask-websocket -https://github.com/marcilioleite/flask-websocket -Entry file: flask-websocket/server.py -Scanned: 2016-10-12 14:42:43.869135 -No vulnerabilities found. - - -duffy25/sample_flask -https://github.com/duffy25/sample_flask -Entry file: sample_flask/sample_flask.py -Scanned: 2016-10-12 14:42:56.138022 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elijahc/hello_flask -https://github.com/elijahc/hello_flask -Entry file: hello_flask/hello.py -Scanned: 2016-10-12 14:43:05.460034 -No vulnerabilities found. - - -tmadsen/flask-scaffold -https://github.com/tmadsen/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-12 14:43:15.491569 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomashley/flask-template -https://github.com/tomashley/flask-template -Entry file: flask-template/app/urls.py -Scanned: 2016-10-12 14:43:17.947551 -No vulnerabilities found. - - -PromooD/flask-aselect -https://github.com/PromooD/flask-aselect -Entry file: flask-aselect/flask_aselect/core.py -Scanned: 2016-10-12 14:43:29.371071 -No vulnerabilities found. - - -danthemanvsqz/Flask-Demo -https://github.com/danthemanvsqz/Flask-Demo -Entry file: Flask-Demo/contacts.py -Scanned: 2016-10-12 14:43:33.068037 -No vulnerabilities found. - - -nisiotis/flask_app -https://github.com/nisiotis/flask_app -Entry file: None -Scanned: 2016-10-12 14:43:35.567033 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nisiotis/flask_app. - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-12 14:43:44.544373 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -brianly/flask-mega-tutorial -https://github.com/brianly/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-12 14:43:49.059916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivosevicmikica/testiranje -https://github.com/ivosevicmikica/testiranje -Entry file: testiranje/index.py -Scanned: 2016-10-12 14:43:56.391643 -No vulnerabilities found. - - -myevan/microblog -https://github.com/myevan/microblog -Entry file: microblog/views.py -Scanned: 2016-10-12 14:44:05.736915 -No vulnerabilities found. - - -Eleonore9/StreetMap_ChallengePy -https://github.com/Eleonore9/StreetMap_ChallengePy -Entry file: StreetMap_ChallengePy/StreetMap.py -Scanned: 2016-10-12 14:44:09.189241 -No vulnerabilities found. - - -eriktaubeneck/flask-s3-assets-example -https://github.com/eriktaubeneck/flask-s3-assets-example -Entry file: flask-s3-assets-example/app/__init__.py -Scanned: 2016-10-12 14:44:18.586349 -No vulnerabilities found. - - -vasnake/mapfeatureserver -https://github.com/vasnake/mapfeatureserver -Entry file: None -Scanned: 2016-10-12 14:44:31.640826 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vasnake/mapfeatureserver. - -EvilDmitri/FlaskProject_FuncExe -https://github.com/EvilDmitri/FlaskProject_FuncExe -Entry file: None -Scanned: 2016-10-12 14:44:40.329096 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -epelz/flask-fb-demo -https://github.com/epelz/flask-fb-demo -Entry file: flask-fb-demo/main.py -Scanned: 2016-10-12 14:44:44.662680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonilxm/1stFlask -https://github.com/tonilxm/1stFlask -Entry file: 1stFlask/src/lib/flask/sessions.py -Scanned: 2016-10-12 14:44:52.719233 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cldershem/WebFlask-CleanTemplate -https://github.com/cldershem/WebFlask-CleanTemplate -Entry file: None -Scanned: 2016-10-12 14:45:01.867190 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brooks/python-flask-sample -https://github.com/brooks/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-12 14:45:10.080208 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -palei/Just-Another-Flask-App -https://github.com/palei/Just-Another-Flask-App -Entry file: Just-Another-Flask-App/app/__init__.py -Scanned: 2016-10-12 14:45:11.955515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noisufnoc/HowToFlask -https://github.com/noisufnoc/HowToFlask -Entry file: HowToFlask/app.py -Scanned: 2016-10-12 14:45:17.313270 -No vulnerabilities found. - - -FriendCode/python-flask-sample -https://github.com/FriendCode/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-12 14:45:28.355221 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -wavrin/flask-mongo-site -https://github.com/wavrin/flask-mongo-site -Entry file: flask-mongo-site/blog/__init__.py -Scanned: 2016-10-12 14:45:37.173880 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marulkan/nagios-status-flask -https://github.com/marulkan/nagios-status-flask -Entry file: nagios-status-flask/hello.py -Scanned: 2016-10-12 14:45:45.578018 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thrisp/flarf -https://github.com/thrisp/flarf -Entry file: flarf/examples/example.py -Scanned: 2016-10-12 14:45:51.267171 -No vulnerabilities found. - - -NSkelsey/trance_piano -https://github.com/NSkelsey/trance_piano -Entry file: trance_piano/app.py -Scanned: 2016-10-12 14:46:07.105865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: nozomiServer/app.py -Scanned: 2016-10-12 14:46:14.478765 -No vulnerabilities found. - - -skrieder/microblog -https://github.com/skrieder/microblog -Entry file: None -Scanned: 2016-10-12 14:46:23.869391 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -carlosvin/cmsflask -https://github.com/carlosvin/cmsflask -Entry file: cmsflask/cmsflask/__init__.py -Scanned: 2016-10-12 14:46:25.301601 -No vulnerabilities found. - - -Sadhanandh/Fb-page-manager -https://github.com/Sadhanandh/Fb-page-manager -Entry file: Fb-page-manager/flask_app.py -Scanned: 2016-10-12 14:46:29.730270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomas-/pyshorturls -https://github.com/thomas-/pyshorturls -Entry file: pyshorturls/short.py -Scanned: 2016-10-12 14:46:34.425424 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sangallimarco/arduino_raspberry_garden_ui -https://github.com/sangallimarco/arduino_raspberry_garden_ui -Entry file: arduino_raspberry_garden_ui/main.py -Scanned: 2016-10-12 14:46:39.272644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sigilioso/long_polling_example -https://github.com/sigilioso/long_polling_example -Entry file: long_polling_example/server.py -Scanned: 2016-10-12 14:46:51.079835 -No vulnerabilities found. - - -zxt/quotl -https://github.com/zxt/quotl -Entry file: quotl/quotl/__init__.py -Scanned: 2016-10-12 14:46:58.570392 -No vulnerabilities found. - - -bdeeney/crudite -https://github.com/bdeeney/crudite -Entry file: crudite/examples/hello_flask.py -Scanned: 2016-10-12 14:47:08.010559 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luhn/address-book -https://github.com/luhn/address-book -Entry file: address-book/app.py -Scanned: 2016-10-12 14:47:12.424179 -No vulnerabilities found. - - -cameronbracken/pitchforksearch -https://github.com/cameronbracken/pitchforksearch -Entry file: pitchforksearch/pitchforksearch/__init__.py -Scanned: 2016-10-12 14:47:18.889167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chromy/pithy -https://github.com/chromy/pithy -Entry file: None -Scanned: 2016-10-12 14:47:25.320025 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chromy/pithy. - -adedot/countries_project -https://github.com/adedot/countries_project -Entry file: countries_project/flaskr.py -Scanned: 2016-10-12 14:47:29.668758 -No vulnerabilities found. - - -titainium/PRPHOTO -https://github.com/titainium/PRPHOTO -Entry file: PRPHOTO/prphoto.py -Scanned: 2016-10-12 14:47:39.944944 -No vulnerabilities found. - - -keybits/stripe-experiments -https://github.com/keybits/stripe-experiments -Entry file: stripe-experiments/app.py -Scanned: 2016-10-12 14:47:41.296193 -No vulnerabilities found. - - -izaac/twitty -https://github.com/izaac/twitty -Entry file: twitty/twitty.py -Scanned: 2016-10-12 14:47:45.749140 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fc-thrisp-hurrata-dlm-graveyard/flack -https://github.com/fc-thrisp-hurrata-dlm-graveyard/flack -Entry file: flack/tests/test_app/__init__.py -Scanned: 2016-10-12 14:47:52.190188 -No vulnerabilities found. - - -cenk/github-flask -https://github.com/cenk/github-flask -Entry file: github-flask/test_flask_github.py -Scanned: 2016-10-12 14:48:08.630803 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -davidism/basic_flask -https://github.com/davidism/basic_flask -Entry file: basic_flask/basic_app/__init__.py -Scanned: 2016-10-12 14:48:25.923391 -No vulnerabilities found. - - -quokkaproject/quokka -https://github.com/quokkaproject/quokka -Entry file: quokka/quokka/tests/flask_csrf_test_client.py -Scanned: 2016-10-12 14:48:34.458288 -No vulnerabilities found. - - -akprasad/flask-forum -https://github.com/akprasad/flask-forum -Entry file: flask-forum/application/__init__.py -Scanned: 2016-10-12 14:48:41.462998 -No vulnerabilities found. - - -miguelgrinberg/Flask-Runner -https://github.com/miguelgrinberg/Flask-Runner -Entry file: Flask-Runner/examples/runner.py -Scanned: 2016-10-12 14:48:45.995883 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 08:11:24.915779 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 08:11:26.246544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 08:11:27.963021 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 08:11:28.473730 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 08:11:29.515950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 08:11:30.535521 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 08:11:33.880936 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 08:11:34.403575 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 08:11:35.417208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 08:11:36.440531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 08:11:38.682909 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 08:11:39.681068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 08:11:40.249110 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 08:12:23.420588 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 08:12:23.922133 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 08:12:26.173178 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 08:12:27.400028 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 08:12:30.023063 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 08:12:30.555396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 08:12:33.235919 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 08:12:34.691829 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 08:12:35.208274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 08:12:37.008561 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 08:12:38.326310 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 08:12:39.568423 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 08:12:40.068455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 08:12:40.570711 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 08:12:41.776165 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 08:12:42.315914 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 08:12:44.780121 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 08:12:46.910307 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 08:12:48.690731 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 08:12:51.676943 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 08:12:54.177473 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 08:13:23.567117 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 08:13:24.079266 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 08:13:25.417470 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 08:13:27.829119 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 08:13:28.363532 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 08:13:28.864068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 08:13:30.172271 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 08:13:32.381019 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 08:13:34.162825 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 08:13:36.849191 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 08:13:38.636915 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 08:13:40.938118 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 08:13:42.549817 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 08:13:43.603072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 08:13:46.041250 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 08:13:47.034308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 08:13:48.014451 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 08:13:49.208534 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 08:13:50.540502 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 08:13:53.887725 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 08:14:23.122241 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 08:14:25.705746 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 08:14:26.232298 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 08:14:27.444377 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 08:14:28.776840 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 08:14:31.747795 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 08:14:32.252219 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 08:14:33.773355 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 08:14:36.564019 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-18 08:14:38.562460 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-18 08:14:39.085435 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-18 08:14:39.589132 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-18 08:14:40.094300 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-18 08:14:41.325448 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-18 08:14:41.865295 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-18 08:14:44.192667 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 08:14:47.783476 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-18 08:14:48.304704 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-18 08:14:49.383943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-18 08:14:58.221312 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-18 08:14:58.774707 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-18 08:15:00.118659 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-18 08:15:23.150239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-18 08:15:24.667221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-18 08:15:28.505207 -No vulnerabilities found. - - diff --git a/scan_results/archived_24_10_scan.pyt b/scan_results/archived_24_10_scan.pyt deleted file mode 100644 index 8c0f8fd8..00000000 --- a/scan_results/archived_24_10_scan.pyt +++ /dev/null @@ -1,139024 +0,0 @@ -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 08:19:42.436429 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 08:19:43.655870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 08:19:45.364097 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 08:19:45.863042 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 08:19:46.916123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 08:19:47.933989 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 08:22:56.209701 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 08:22:57.153085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 08:22:58.859685 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 08:22:59.365883 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 08:23:00.438524 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 08:23:01.468237 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 08:23:04.811273 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 08:23:05.330904 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 08:23:06.309848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 08:23:07.331669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 11:41:35.562564 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 11:41:36.659504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 11:41:40.022878 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 11:41:40.554167 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 11:41:41.671421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 11:41:42.739624 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 11:41:46.113655 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 11:41:46.624298 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 11:41:47.650436 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 11:41:48.687696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 11:41:51.032280 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 11:41:52.070296 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 11:41:52.606835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 11:42:34.813432 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 11:42:35.357360 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 11:42:37.610225 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 11:42:38.905234 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 11:42:38.905495 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 11:42:44.172662 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 11:42:44.172913 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 11:42:44.704949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 11:42:48.301729 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 11:42:49.946381 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 11:42:50.487107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 11:42:52.361151 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 11:42:53.752367 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 11:42:55.135776 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 11:42:55.656497 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 11:42:56.164565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 11:42:57.560567 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 11:42:58.097159 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 11:43:04.242366 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 11:43:06.464977 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 11:43:10.158160 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 11:43:16.947372 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 11:43:22.000280 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 11:43:34.507666 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 11:43:36.072990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 11:43:37.470399 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 11:43:42.298217 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 11:43:42.875724 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 11:43:43.388066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 11:43:44.812093 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 11:43:46.239003 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 11:43:47.770811 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 11:43:51.984241 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 11:43:53.920507 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 11:43:56.333991 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 11:43:58.879143 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 11:43:59.985169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 11:44:04.143798 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 11:44:05.148825 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 11:44:06.193353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 11:44:08.454930 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 11:44:11.875376 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 11:44:19.200120 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 11:44:34.383681 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 11:44:39.060150 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 11:44:39.633654 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 11:44:40.982438 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 11:44:40.982703 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 11:44:42.522464 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 11:44:45.985672 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 11:44:45.985875 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 11:44:46.492996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 11:44:47.028629 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 11:44:49.827669 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-18 11:44:54.119226 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-18 11:44:54.859121 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-18 11:44:55.377404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-18 11:44:55.897829 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-18 11:44:57.179508 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-18 11:44:57.731470 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-18 11:45:01.231357 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 11:45:05.946703 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 11:45:05.946946 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-18 11:45:06.494266 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-18 11:45:07.651123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-18 11:45:18.132111 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-18 11:45:21.046712 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 14:11:54.283676 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 14:11:55.370283 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 14:11:58.220001 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 14:11:58.741469 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 14:11:59.833654 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 14:12:00.864551 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 14:12:04.096175 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 14:12:04.592227 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 14:12:05.573134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 14:12:06.581816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 14:12:08.946707 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 14:12:09.909178 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 14:12:10.401206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 14:12:53.222465 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 14:12:53.747317 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 14:12:55.984538 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 14:12:56.498114 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 14:12:56.498287 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 14:12:59.006771 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 14:12:59.007004 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 14:12:59.558813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 14:13:02.621316 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 14:13:04.084284 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 14:13:04.593997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 14:13:06.412361 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 14:13:07.623222 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 14:13:08.862211 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 14:13:09.500208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 14:13:10.006470 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 14:13:11.300345 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 14:13:11.828363 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 14:13:17.317700 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 14:13:19.433969 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 14:13:22.596874 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 14:13:28.853459 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 14:13:33.624171 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 14:13:52.895578 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 14:13:54.429684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 14:13:55.727953 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 14:14:00.013749 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 14:14:00.549121 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 14:14:01.056335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 14:14:02.397050 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 14:14:03.764227 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 14:14:05.135985 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 14:14:08.878675 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 14:14:10.592705 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 14:14:12.838281 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 14:14:15.058800 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 14:14:16.153446 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 14:14:19.784903 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 14:14:20.772409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 14:14:21.753289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 14:14:22.966470 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 14:14:24.362968 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 14:14:30.970323 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 14:14:52.452695 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 14:14:56.795535 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 14:14:57.330666 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 14:14:57.843380 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 14:14:57.843695 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 14:14:59.348031 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 14:15:01.938538 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 14:15:01.939141 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 14:15:03.429720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 14:15:04.925155 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 14:15:07.626716 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-18 14:15:11.465294 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-18 14:15:11.980271 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-18 14:15:12.472445 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-18 14:15:12.966640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-18 14:15:14.205580 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-18 14:15:14.730899 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-18 14:15:17.062437 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 14:15:20.548183 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 14:15:20.548367 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-18 14:15:21.049435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-18 14:15:22.122721 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-18 14:15:42.179811 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-18 14:15:42.698788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-18 14:15:44.024348 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-18 14:15:53.039938 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-18 14:15:55.573531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-18 14:15:59.378014 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-18 14:16:01.839794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-18 14:16:03.812399 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-18 14:16:05.360565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-18 14:16:06.873371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-18 14:16:07.386548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-18 14:16:12.988985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-18 14:16:14.573057 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-18 14:16:15.771105 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-18 14:16:16.263481 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 14:16:17.809050 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-18 14:16:18.335435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-18 14:16:19.714950 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-18 14:16:21.241116 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: None -Scanned: 2016-10-18 14:16:22.226183 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fay/flask-skeleton. - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-18 14:16:23.452554 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-18 14:16:23.975994 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 14:16:45.514677 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-18 14:17:00.014640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-18 14:17:02.590878 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-18 14:17:03.123305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-18 14:17:04.880933 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-18 14:17:05.404310 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fzuslide/video_new -https://github.com/fzuslide/video_new -Entry file: video_new/application.py -Scanned: 2016-10-18 14:17:07.712407 -No vulnerabilities found. - - -tomatohater/lydon -https://github.com/tomatohater/lydon -Entry file: lydon/lydon/__init__.py -Scanned: 2016-10-18 14:17:09.094706 -No vulnerabilities found. - - -williamratcliff/django-feedback -https://github.com/williamratcliff/django-feedback -Entry file: django-feedback/feedback.py -Scanned: 2016-10-18 14:17:13.624404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelbm24/blog -https://github.com/joelbm24/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-18 14:17:15.598809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-18 14:17:17.235610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-18 14:17:18.653193 -Vulnerability 1: -File: bsg-raffle/raffle.py - > User input at line 39, trigger word "form[": - user_id = int(request.form['user_id']) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 2: -File: bsg-raffle/raffle.py - > User input at line 40, trigger word "form[": - prize = request.form['prize'] -Reassigned in: - File: bsg-raffle/raffle.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('winner_added.html',name=username[0], prize=prize) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 3: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 68, trigger word "execute(": - g.db.execute('INSERT INTO participants(name) - VALUES (?)', (username)) - -Vulnerability 4: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 70, trigger word "flash(": - flash('%s added successfully!' % username) - - - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-18 14:17:18.653472 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -adamgreig/pyautopull -https://github.com/adamgreig/pyautopull -Entry file: pyautopull/pyautopull.py -Scanned: 2016-10-18 14:17:19.916480 -No vulnerabilities found. - - -sean-/flask-skeleton -https://github.com/sean-/flask-skeleton -Entry file: None -Scanned: 2016-10-18 14:17:21.116150 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sean-/flask-skeleton. - -Runscope/httpbin -https://github.com/Runscope/httpbin -Entry file: httpbin/httpbin/filters.py -Scanned: 2016-10-18 14:17:21.720077 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hasgeek/flask-lastuser -https://github.com/hasgeek/flask-lastuser -Entry file: flask-lastuser/tests/test_mergeuser.py -Scanned: 2016-10-18 14:17:24.048029 -No vulnerabilities found. - - -BooBSD/flask-odesk -https://github.com/BooBSD/flask-odesk -Entry file: flask-odesk/tests.py -Scanned: 2016-10-18 14:17:24.547197 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cool-shark/redimon -https://github.com/cool-shark/redimon -Entry file: redimon/src/redimon/app.py -Scanned: 2016-10-18 14:17:26.043351 -No vulnerabilities found. - - -pcsanwald/flask_site -https://github.com/pcsanwald/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-18 14:17:44.553810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-18 14:17:46.057840 -No vulnerabilities found. - - -dag/flask-sassy -https://github.com/dag/flask-sassy -Entry file: flask-sassy/tests/__init__.py -Scanned: 2016-10-18 14:17:54.348783 -No vulnerabilities found. - - -charlieevett/jiffy-portal -https://github.com/charlieevett/jiffy-portal -Entry file: jiffy-portal/portal/app.py -Scanned: 2016-10-18 14:17:57.786506 -No vulnerabilities found. - - -tomekwojcik/Flask-Module-Static-Files -https://github.com/tomekwojcik/Flask-Module-Static-Files -Entry file: Flask-Module-Static-Files/stest/__init__.py -Scanned: 2016-10-18 14:18:00.125611 -No vulnerabilities found. - - -justjkk/dotpath -https://github.com/justjkk/dotpath -Entry file: dotpath/run.py -Scanned: 2016-10-18 14:18:00.650538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-18 14:18:02.726664 -Vulnerability 1: -File: semantic-bookclub/app/web.py - > User input at line 81, trigger word ".data": - book_title = dict(self.book.choices)[self.book.data] -File: semantic-bookclub/app/web.py - > reaches line 82, trigger word "flash(": - flash('%s have successfully borrowed %s' % (self.borrower.data, book_title)) - -Vulnerability 2: -File: semantic-bookclub/app/web.py - > User input at line 101, trigger word ".data": - member = Member.get_by(foaf_givenName=self.member.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - -Vulnerability 3: -File: semantic-bookclub/app/web.py - > User input at line 102, trigger word ".data": - book = Book.get_by(dcterms_identifier=self.book.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - - - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-18 14:18:02.727432 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -t9md/snippy -https://github.com/t9md/snippy -Entry file: snippy/snippy.py -Scanned: 2016-10-18 14:18:03.740820 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stehem/Tywna -https://github.com/stehem/Tywna -Entry file: Tywna/application/__init__.py -Scanned: 2016-10-18 14:18:09.528717 -No vulnerabilities found. - - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-18 14:18:10.146341 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/bitpit-https-bridge -https://github.com/maxcountryman/bitpit-https-bridge -Entry file: bitpit-https-bridge/httpstobitpit/__init__.py -Scanned: 2016-10-18 14:18:11.502975 -No vulnerabilities found. - - -maxcountryman/flask-bcrypt -https://github.com/maxcountryman/flask-bcrypt -Entry file: flask-bcrypt/flask_bcrypt.py -Scanned: 2016-10-18 14:18:14.519688 -No vulnerabilities found. - - -kennethreitz-archive/flask-rest -https://github.com/kennethreitz-archive/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-18 14:18:15.505600 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tdryer/flask-forum -https://github.com/tdryer/flask-forum -Entry file: flask-forum/app.py -Scanned: 2016-10-18 14:18:16.868260 -Vulnerability 1: -File: flask-forum/app.py - > User input at line 124, trigger word ".data": - new_topic_id = post_topic(form.subject.data, form.content.data) -Reassigned in: - File: flask-forum/app.py - > Line 127: ret_MAYBE_FUNCTION_NAME = render_template('newtopic.html',form=form) -File: flask-forum/app.py - > reaches line 126, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/topic/' + new_topic_id) - -Vulnerability 2: -File: flask-forum/app.py - > User input at line 196, trigger word ".data": - username = form.username.data -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - -Vulnerability 3: -File: flask-forum/app.py - > User input at line 197, trigger word ".data": - password = form.password1.data -Reassigned in: - File: flask-forum/app.py - > Line 198: pw_hash = hashpw(password, gensalt()) -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - - - -tdryer/flask-forum -https://github.com/tdryer/flask-forum -Entry file: flask-forum/app.py -Scanned: 2016-10-18 14:18:16.868483 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dqminh/flask-mongoobject -https://github.com/dqminh/flask-mongoobject -Entry file: flask-mongoobject/examples_hello.py -Scanned: 2016-10-18 14:18:17.368744 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gmonnerat/flask-sandbox -https://github.com/gmonnerat/flask-sandbox -Entry file: flask-sandbox/hello/hello.py -Scanned: 2016-10-18 14:18:18.725502 -No vulnerabilities found. - - -DarkSector/wombat -https://github.com/DarkSector/wombat -Entry file: wombat/wombatdb.py -Scanned: 2016-10-18 14:18:19.258987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lOlIl/Flask---Local-election -https://github.com/lOlIl/Flask---Local-election -Entry file: Flask---Local-election/app.py -Scanned: 2016-10-18 14:18:19.853661 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -paulftw/appengine-flask-template -https://github.com/paulftw/appengine-flask-template -Entry file: appengine-flask-template/app/app.py -Scanned: 2016-10-18 14:18:21.552148 -No vulnerabilities found. - - -flores/aquadoc -https://github.com/flores/aquadoc -Entry file: aquadoc/aquadoc.py -Scanned: 2016-10-18 14:18:23.322269 -No vulnerabilities found. - - -jorgeatorres/cotufa -https://github.com/jorgeatorres/cotufa -Entry file: cotufa/cotufa.py -Scanned: 2016-10-18 14:18:23.858971 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbr/flask-kvsession -https://github.com/mbr/flask-kvsession -Entry file: flask-kvsession/tests/conftest.py -Scanned: 2016-10-18 14:18:27.125193 -No vulnerabilities found. - - -radekstepan/Flask-Skeleton-App -https://github.com/radekstepan/Flask-Skeleton-App -Entry file: Flask-Skeleton-App/flask_app.py -Scanned: 2016-10-18 14:18:45.084939 -No vulnerabilities found. - - -utahta/flask-on-fluxflex -https://github.com/utahta/flask-on-fluxflex -Entry file: flask-on-fluxflex/app/__init__.py -Scanned: 2016-10-18 14:18:46.977674 -No vulnerabilities found. - - -femmerling/brunch-flask-gae-skeleton -https://github.com/femmerling/brunch-flask-gae-skeleton -Entry file: brunch-flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 14:18:54.585187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amcameron/gchartsdemo -https://github.com/amcameron/gchartsdemo -Entry file: gchartsdemo/charts.py -Scanned: 2016-10-18 14:18:57.916613 -No vulnerabilities found. - - -bagyr/flaskPage -https://github.com/bagyr/flaskPage -Entry file: flaskPage/__init__.py -Scanned: 2016-10-18 14:19:00.169809 -No vulnerabilities found. - - -sbook/flask-script -https://github.com/sbook/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-18 14:19:03.669353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joemarct/flask-gae-app -https://github.com/joemarct/flask-gae-app -Entry file: flask-gae-app/flask/app.py -Scanned: 2016-10-18 14:19:04.194472 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bhagyashree-Mandora/The-Python-Task -https://github.com/Bhagyashree-Mandora/The-Python-Task -Entry file: The-Python-Task/main.py -Scanned: 2016-10-18 14:19:04.713860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -piratesolutions/ps-website -https://github.com/piratesolutions/ps-website -Entry file: ps-website/app.py -Scanned: 2016-10-18 14:19:10.221508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samrat/blogengine -https://github.com/samrat/blogengine -Entry file: blogengine/blogengine.py -Scanned: 2016-10-18 14:19:10.744298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TimFletcher/cmprss -https://github.com/TimFletcher/cmprss -Entry file: cmprss/cmprss.py -Scanned: 2016-10-18 14:19:12.274622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyvanee/mappy -https://github.com/andyvanee/mappy -Entry file: mappy/mappy.py -Scanned: 2016-10-18 14:19:12.837315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barnslig/foreveralonebook -https://github.com/barnslig/foreveralonebook -Entry file: foreveralonebook/foreveralonebook.py -Scanned: 2016-10-18 14:19:16.962719 -Vulnerability 1: -File: foreveralonebook/foreveralonebook.py - > User input at line 47, trigger word "form[": - entry = escape(request.form['entry']) -File: foreveralonebook/foreveralonebook.py - > reaches line 57, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_posts (u_id, content) VALUES ({0}, '{1}');'.format(session['u_id'], entry)) - -Vulnerability 2: -File: foreveralonebook/foreveralonebook.py - > User input at line 113, trigger word "form[": - password = hashlib.sha1(request.form['new_pw']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 115, trigger word "execute(": - g.db.cur.execute('UPDATE feabook_user SET password = '{0}' WHERE id = '{1}';'.format(password, session['u_id'])) - -Vulnerability 3: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 157, trigger word "execute(": - g.db.cur.execute('SELECT username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 4: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 5: -File: foreveralonebook/foreveralonebook.py - > User input at line 152, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 6: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 169, trigger word "execute(": - g.db.cur.execute('SELECT id, username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 7: -File: foreveralonebook/foreveralonebook.py - > User input at line 193, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 222: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 223: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - -Vulnerability 8: -File: foreveralonebook/foreveralonebook.py - > User input at line 194, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - - - -barnslig/foreveralonebook -https://github.com/barnslig/foreveralonebook -Entry file: foreveralonebook/foreveralonebook.py -Scanned: 2016-10-18 14:19:16.963160 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -geek22com/referral_dashboard_engine -https://github.com/geek22com/referral_dashboard_engine -Entry file: referral_dashboard_engine/heymoose/__init__.py -Scanned: 2016-10-18 14:19:17.512551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dqminh/flask-lettuce -https://github.com/dqminh/flask-lettuce -Entry file: flask-lettuce/test.py -Scanned: 2016-10-18 14:19:20.181413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radekstepan/FlaskBudget -https://github.com/radekstepan/FlaskBudget -Entry file: FlaskBudget/budget.py -Scanned: 2016-10-18 14:19:21.172496 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -UfSoft/Flask-MenuBuilder -https://github.com/UfSoft/Flask-MenuBuilder -Entry file: Flask-MenuBuilder/tests/test_menuitem.py -Scanned: 2016-10-18 14:19:23.557485 -No vulnerabilities found. - - -gregglind/flask-tool -https://github.com/gregglind/flask-tool -Entry file: flask-tool/flasktool/console.py -Scanned: 2016-10-18 14:19:24.067929 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kblin/flask-downloader -https://github.com/kblin/flask-downloader -Entry file: flask-downloader/tests.py -Scanned: 2016-10-18 14:19:24.575335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/flog -https://github.com/maxcountryman/flog -Entry file: flog/flog/__init__.py -Scanned: 2016-10-18 14:19:26.337679 -No vulnerabilities found. - - -sublee/Flask-Handler -https://github.com/sublee/Flask-Handler -Entry file: None -Scanned: 2016-10-18 14:19:26.855479 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sublee/Flask-Handler. - -Ramblurr/pyqdb -https://github.com/Ramblurr/pyqdb -Entry file: pyqdb/src/pyqdb.py -Scanned: 2016-10-18 14:19:44.356743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zackster/DijScrape--flask-rewrite- -https://github.com/zackster/DijScrape--flask-rewrite- -Entry file: DijScrape--flask-rewrite-/dijscrape.py -Scanned: 2016-10-18 14:19:46.837199 -No vulnerabilities found. - - -asenchi/pomp -https://github.com/asenchi/pomp -Entry file: pomp/pomp/pomp.py -Scanned: 2016-10-18 14:19:48.070396 -No vulnerabilities found. - - -tshirtman/snakenest -https://github.com/tshirtman/snakenest -Entry file: snakenest/main.py -Scanned: 2016-10-18 14:19:55.461720 -No vulnerabilities found. - - -jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -https://github.com/jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -Entry file: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/gmaps.py -Scanned: 2016-10-18 14:19:58.003693 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/env/lib/python2.7/genericpath.py - -triposo/geocodecache -https://github.com/triposo/geocodecache -Entry file: geocodecache/geocodecache.py -Scanned: 2016-10-18 14:19:59.526196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toastwaffle/ToDoQuick -https://github.com/toastwaffle/ToDoQuick -Entry file: ToDoQuick/todoquick.py -Scanned: 2016-10-18 14:20:01.485455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coleifer/flask-peewee -https://github.com/coleifer/flask-peewee -Entry file: flask-peewee/example/app.py -Scanned: 2016-10-18 14:20:08.140536 -Vulnerability 1: -File: flask-peewee/example/admin.py - > User input at line 27, trigger word "get(": - next = request.form.get('next') or self.dashboard_url() -File: flask-peewee/example/admin.py - > reaches line 28, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -coleifer/flask-peewee -https://github.com/coleifer/flask-peewee -Entry file: flask-peewee/example/app.py -Scanned: 2016-10-18 14:20:08.140718 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jeanphix/Flask-Dashed -https://github.com/jeanphix/Flask-Dashed -Entry file: Flask-Dashed/examples/sqlalchemy_backend.py -Scanned: 2016-10-18 14:20:12.114947 -No vulnerabilities found. - - -jarus/flask-mongokit -https://github.com/jarus/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-18 14:20:12.621604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -namlook/flask-apibee -https://github.com/namlook/flask-apibee -Entry file: flask-apibee/example/app.py -Scanned: 2016-10-18 14:20:13.608683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voluntas/heroku-template-flask -https://github.com/voluntas/heroku-template-flask -Entry file: heroku-template-flask/snowflake/__init__.py -Scanned: 2016-10-18 14:20:14.855039 -No vulnerabilities found. - - -Deepwalker/Flask-Bundle -https://github.com/Deepwalker/Flask-Bundle -Entry file: Flask-Bundle/samples/simple.py -Scanned: 2016-10-18 14:20:16.317176 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunlightlabs/flask-districtoffices -https://github.com/sunlightlabs/flask-districtoffices -Entry file: flask-districtoffices/districtoffices.py -Scanned: 2016-10-18 14:20:19.413535 -No vulnerabilities found. - - -quanticle/flask_blog -https://github.com/quanticle/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-18 14:20:20.885145 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garrettr/haps -https://github.com/garrettr/haps -Entry file: haps/quickstart.py -Scanned: 2016-10-18 14:20:21.440444 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dsully/sitter -https://github.com/dsully/sitter -Entry file: sitter/sitter/__init__.py -Scanned: 2016-10-18 14:20:23.427690 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/nodeblog -https://github.com/ahri/nodeblog -Entry file: nodeblog/blog.py -Scanned: 2016-10-18 14:20:24.957497 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/celeb -https://github.com/maxcountryman/celeb -Entry file: celeb/celeb/__init__.py -Scanned: 2016-10-18 14:20:25.471739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/PO -https://github.com/marchon/PO -Entry file: PO/main.py -Scanned: 2016-10-18 14:20:26.716785 -No vulnerabilities found. - - -slok/xlarrakoetxeaorg -https://github.com/slok/xlarrakoetxeaorg -Entry file: xlarrakoetxeaorg/mysite/blog/__init__.py -Scanned: 2016-10-18 14:20:29.472700 -No vulnerabilities found. - - -boboppie/pyLiftOver -https://github.com/boboppie/pyLiftOver -Entry file: pyLiftOver/flask/lift-over-app.py -Scanned: 2016-10-18 14:20:30.077745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -no0p/homepage -https://github.com/no0p/homepage -Entry file: homepage/site.py -Scanned: 2016-10-18 14:20:36.176013 -No vulnerabilities found. - - -tjosten/python-push -https://github.com/tjosten/python-push -Entry file: python-push/push.py -Scanned: 2016-10-18 14:20:45.490385 -No vulnerabilities found. - - -Joshkunz/PyChannel -https://github.com/Joshkunz/PyChannel -Entry file: PyChannel/PyChannel/__init__.py -Scanned: 2016-10-18 14:20:46.010177 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbess/ytlinker -https://github.com/cbess/ytlinker -Entry file: ytlinker/flask/app.py -Scanned: 2016-10-18 14:20:47.510933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openshift/flask-example -https://github.com/openshift/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 14:20:58.731763 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wasabi0522/flaskr -https://github.com/wasabi0522/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 14:21:04.666106 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amehta/Flaskly -https://github.com/amehta/Flaskly -Entry file: Flaskly/flaskly.py -Scanned: 2016-10-18 14:21:13.440493 -Vulnerability 1: -File: Flaskly/flaskly.py - > User input at line 73, trigger word "form[": - url = request.form['long_url'] -Reassigned in: - File: Flaskly/flaskly.py - > Line 74: short = pickShortUrl(url) -File: Flaskly/flaskly.py - > reaches line 75, trigger word "flash(": - flash('Short Url http:/localhost/' + short) - - - -amehta/Flaskly -https://github.com/amehta/Flaskly -Entry file: Flaskly/flaskly.py -Scanned: 2016-10-18 14:21:13.440657 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -fyears/flaskr-redis -https://github.com/fyears/flaskr-redis -Entry file: flaskr-redis/app.py -Scanned: 2016-10-18 14:21:15.140723 -No vulnerabilities found. - - -Jc2k/flask-example -https://github.com/Jc2k/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 14:21:15.660013 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brainTrain/flasktest -https://github.com/brainTrain/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-18 14:21:18.965771 -No vulnerabilities found. - - -proles/flaskr -https://github.com/proles/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 14:21:19.470495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joeyespo/hello-redis-tasks -https://github.com/joeyespo/hello-redis-tasks -Entry file: hello-redis-tasks/hello_redis_tasks.py -Scanned: 2016-10-18 14:21:19.974184 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cemk/flask-expander -https://github.com/cemk/flask-expander -Entry file: flask-expander/expand.py -Scanned: 2016-10-18 14:21:21.194359 -No vulnerabilities found. - - -pygraz/old-flask-website -https://github.com/pygraz/old-flask-website -Entry file: old-flask-website/pygraz_website/__init__.py -Scanned: 2016-10-18 14:21:21.717109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasballinger/Utok -https://github.com/thomasballinger/Utok -Entry file: Utok/webapp.py -Scanned: 2016-10-18 14:21:23.171682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/Igualitos-appengine -https://github.com/lcruz/Igualitos-appengine -Entry file: Igualitos-appengine/config.py -Scanned: 2016-10-18 14:21:23.720720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hettan/MyPortfolio -https://github.com/hettan/MyPortfolio -Entry file: MyPortfolio/web/myFlaskProject.py -Scanned: 2016-10-18 14:21:24.265297 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/igualitos -https://github.com/lcruz/igualitos -Entry file: igualitos/config.py -Scanned: 2016-10-18 14:21:26.618044 -No vulnerabilities found. - - -agonzalezro/gplus-blog -https://github.com/agonzalezro/gplus-blog -Entry file: gplus-blog/gplusblog/__init__.py -Scanned: 2016-10-18 14:21:27.963991 -No vulnerabilities found. - - -fwenzel/strassendeutsch -https://github.com/fwenzel/strassendeutsch -Entry file: strassendeutsch/woerterbuch/__init__.py -Scanned: 2016-10-18 14:21:28.969562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lzyy/chat -https://github.com/lzyy/chat -Entry file: chat/src/app.py -Scanned: 2016-10-18 14:21:45.667251 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ferhensil/flask-example -https://github.com/ferhensil/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 14:21:46.152183 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanphix/flask-dashed-demo -https://github.com/jeanphix/flask-dashed-demo -Entry file: flask-dashed-demo/app.py -Scanned: 2016-10-18 14:21:47.666636 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenkam/msgbrd -https://github.com/kenkam/msgbrd -Entry file: msgbrd/app.py -Scanned: 2016-10-18 14:21:59.703224 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grigouze/flask-jenkins-radiator -https://github.com/grigouze/flask-jenkins-radiator -Entry file: flask-jenkins-radiator/radiator/radiator.py -Scanned: 2016-10-18 14:22:01.214296 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rduplain/flask-jquery-autosave-example -https://github.com/rduplain/flask-jquery-autosave-example -Entry file: flask-jquery-autosave-example/app.py -Scanned: 2016-10-18 14:22:02.870404 -No vulnerabilities found. - - -kracekumar/Gummi -https://github.com/kracekumar/Gummi -Entry file: Gummi/gummi/tests/test.py -Scanned: 2016-10-18 14:22:03.370339 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivoscc/qchaes -https://github.com/ivoscc/qchaes -Entry file: qchaes/runserver.py -Scanned: 2016-10-18 14:22:09.369567 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fdemmer/flask-principal -https://github.com/fdemmer/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-18 14:22:12.872650 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dasevilla/evernote-oauth-example -https://github.com/dasevilla/evernote-oauth-example -Entry file: evernote-oauth-example/webapp.py -Scanned: 2016-10-18 14:22:15.125228 -No vulnerabilities found. - - -zeninthehome/flaskr -https://github.com/zeninthehome/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 14:22:16.126471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshfinnie/Flacker-News -https://github.com/joshfinnie/Flacker-News -Entry file: Flacker-News/flacker-news/app.py -Scanned: 2016-10-18 14:22:16.636978 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -moneill/uber-flask -https://github.com/moneill/uber-flask -Entry file: uber-flask/uber.py -Scanned: 2016-10-18 14:22:20.229262 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: uber-flask/env/lib/python2.7/genericpath.py - -nubela/radar-backend -https://github.com/nubela/radar-backend -Entry file: radar-backend/src/radar.py -Scanned: 2016-10-18 14:22:20.733831 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TxSSC/the-questionator -https://github.com/TxSSC/the-questionator -Entry file: the-questionator/questionator/__init__.py -Scanned: 2016-10-18 14:22:21.229995 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -satonaoya/flask-epio-skelton -https://github.com/satonaoya/flask-epio-skelton -Entry file: flask-epio-skelton/app.py -Scanned: 2016-10-18 14:22:22.472068 -No vulnerabilities found. - - -marksteve/bookmarks -https://github.com/marksteve/bookmarks -Entry file: bookmarks/bookmarks.py -Scanned: 2016-10-18 14:22:23.787256 -No vulnerabilities found. - - -paradoxxxzero/polldance -https://github.com/paradoxxxzero/polldance -Entry file: polldance/dance.py -Scanned: 2016-10-18 14:22:25.012424 -No vulnerabilities found. - - -flebel/Egami -https://github.com/flebel/Egami -Entry file: Egami/egami.py -Scanned: 2016-10-18 14:22:26.282946 -No vulnerabilities found. - - -mitsuhiko/flask-pastebin -https://github.com/mitsuhiko/flask-pastebin -Entry file: flask-pastebin/pastebin.py -Scanned: 2016-10-18 14:22:27.481056 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxcountryman/flask-seasurf -https://github.com/maxcountryman/flask-seasurf -Entry file: flask-seasurf/test_seasurf.py -Scanned: 2016-10-18 14:22:31.773651 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-18 14:22:33.956815 -No vulnerabilities found. - - -hasgeek/coaster -https://github.com/hasgeek/coaster -Entry file: coaster/tests/test_render_with.py -Scanned: 2016-10-18 14:22:38.228282 -No vulnerabilities found. - - -craigkerstiens/flask-helloworld -https://github.com/craigkerstiens/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-18 14:22:39.590842 -No vulnerabilities found. - - -jarodl/flask-github -https://github.com/jarodl/flask-github -Entry file: flask-github/example/example.py -Scanned: 2016-10-18 14:22:40.119074 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ahri/flask-mustache -https://github.com/ahri/flask-mustache -Entry file: flask-mustache/tests/test_mustache.py -Scanned: 2016-10-18 14:22:47.589172 -No vulnerabilities found. - - -gears/flask-gears -https://github.com/gears/flask-gears -Entry file: flask-gears/example/app.py -Scanned: 2016-10-18 14:22:48.988135 -No vulnerabilities found. - - -mitsuhiko/tugraz-flask-demo -https://github.com/mitsuhiko/tugraz-flask-demo -Entry file: tugraz-flask-demo/pastebin.py -Scanned: 2016-10-18 14:22:55.988340 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-18 14:23:00.533571 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 14:57:56.982363 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 14:57:58.281847 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 14:58:01.561669 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 14:58:02.101310 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 14:58:03.163076 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 14:58:04.164256 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 14:58:07.407624 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 14:58:07.916149 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 14:58:08.895744 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 14:58:09.958239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 14:58:12.226436 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 14:58:13.223302 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 14:58:13.721616 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 14:58:56.778555 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 14:58:57.292315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 14:58:59.550968 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 14:59:00.079058 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 14:59:00.079231 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 14:59:02.543102 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 14:59:02.543295 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 14:59:03.053029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 14:59:06.406394 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: None -Scanned: 2016-10-18 14:59:07.582666 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 14:59:08.098609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 14:59:09.782151 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:02:06.967089 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 15:02:08.734711 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 15:02:12.118705 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 15:02:12.623066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 15:02:13.723285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 15:02:14.773749 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 15:02:18.147040 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 15:02:18.666382 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 15:02:19.663167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 15:02:20.705699 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 15:02:23.161833 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 15:02:24.178706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 15:02:24.697072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 15:03:05.807928 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:03:06.317650 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 15:03:08.618248 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 15:03:09.162846 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:11:25.205710 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 15:11:26.960734 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 15:11:30.479840 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 15:11:30.997993 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 15:11:32.676827 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 15:11:34.547821 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 15:11:37.899429 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 15:11:38.435293 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 15:11:39.423052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 15:11:40.458905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 15:11:42.754118 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 15:11:43.840561 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 15:11:44.349971 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 15:12:24.358449 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:12:24.856553 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 15:12:27.011325 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 15:12:27.519803 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:14:40.587241 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 15:14:41.693850 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 15:14:44.953497 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 15:14:45.451604 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 15:14:46.485529 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 15:14:47.505274 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 15:14:50.708697 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 15:14:51.236793 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 15:14:52.197561 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 15:14:53.211902 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 15:14:55.470300 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 15:14:56.459622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 15:14:56.953860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 15:15:39.947494 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:15:40.446830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 15:15:42.692104 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 15:15:43.204685 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 15:15:45.657685 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 15:15:46.168571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 15:15:49.554395 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 15:15:51.074513 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 15:15:51.580125 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 15:15:53.331682 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 15:15:54.614012 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 15:15:55.894230 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 15:15:56.392706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 15:15:56.885336 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 15:15:58.076691 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 15:15:58.587733 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 15:16:04.606027 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:16:06.658552 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 15:16:10.215178 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 15:16:17.116404 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 15:16:22.062671 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 15:16:39.445749 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 15:16:40.961017 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 15:16:42.214106 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 15:16:46.839792 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 15:16:47.387778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:16:47.890278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 15:16:49.096667 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 15:16:50.403303 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 15:16:51.798591 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 15:16:55.829660 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 15:16:57.606730 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 15:16:59.873054 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 15:17:02.300327 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 15:17:03.352684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 15:17:07.349083 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 15:17:08.321633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 15:17:09.286890 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 15:17:10.471977 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 15:17:11.945547 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 15:17:19.284177 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 15:17:39.463451 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 15:17:42.990021 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 15:17:43.504704 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 15:17:44.005719 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 15:17:45.464518 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 15:17:49.017024 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:17:50.517593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 15:17:51.026641 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:19:13.739441 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 15:19:14.943780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 15:19:18.201779 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 15:19:18.694213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 15:19:19.763888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 15:19:20.771156 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 15:19:23.992700 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 15:19:26.758658 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 15:19:27.742948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 15:19:28.775926 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 15:19:31.555593 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 15:19:32.592414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 15:19:33.098703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 15:20:13.149022 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:20:13.674535 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 15:20:15.903504 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 15:20:17.217916 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 15:20:22.310793 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 15:20:22.808479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 15:20:26.082029 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 15:20:27.747028 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 15:20:28.254735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 15:20:29.944931 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 15:20:31.761587 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 15:20:33.178500 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 15:20:33.874390 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 15:20:34.364511 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 15:20:35.831844 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 15:20:36.326193 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 15:20:42.413284 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:20:44.544893 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 15:20:48.053035 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 15:20:54.936349 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 15:20:59.919990 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 15:21:12.275363 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 15:21:13.796236 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 15:21:15.101498 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 15:21:19.697418 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 15:21:20.229732 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:21:20.711845 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 15:21:21.915320 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 15:21:23.203542 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 15:21:24.657701 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 15:21:29.874722 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 15:21:32.253770 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 15:21:34.626982 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 15:21:37.095659 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 15:21:38.116933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 15:21:42.283737 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 15:21:43.269599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 15:21:44.267590 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 15:21:46.493619 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 15:21:49.854568 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 15:21:57.242331 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 15:22:12.379471 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 15:22:16.031507 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 15:22:16.553024 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 15:22:17.757724 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 15:22:19.311565 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 15:22:23.645271 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:22:24.149381 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 15:22:24.648768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 15:22:27.379602 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-18 15:22:31.900184 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-18 15:22:32.521442 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-18 15:22:33.033827 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-18 15:22:33.546876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-18 15:22:34.839628 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-18 15:22:35.443329 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-18 15:22:38.804386 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 15:22:43.364640 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-18 15:22:43.930320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-18 15:22:45.044093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-18 15:22:56.514269 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-18 15:22:57.030175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-18 15:22:58.376258 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-18 15:23:12.407581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-18 15:23:13.945701 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-18 15:23:18.755664 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-18 15:23:22.197085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-18 15:23:24.169072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-18 15:23:24.741620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-18 15:23:26.232346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-18 15:23:26.745784 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-18 15:23:32.482219 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-18 15:23:35.199926 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-18 15:23:36.446748 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-18 15:23:36.951168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:23:39.578910 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-18 15:23:40.095664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-18 15:23:41.445114 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-18 15:23:43.990434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: None -Scanned: 2016-10-18 15:23:45.034515 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fay/flask-skeleton. - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-18 15:23:46.240470 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-18 15:23:46.764773 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:24:00.109362 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-18 15:24:19.605419 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-18 15:24:23.180085 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-18 15:24:23.687080 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-18 15:24:25.355757 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:37:56.166695 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 15:37:57.381900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 15:38:00.437023 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 15:38:00.942693 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 15:38:01.983356 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 15:38:02.986380 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 15:38:06.219566 -No vulnerabilities found. - - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 15:38:06.726676 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 15:38:07.720285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 15:38:08.831689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 15:38:11.081062 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 15:38:12.039909 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 15:38:12.542613 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 15:38:55.296915 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:38:55.907837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 15:38:58.158178 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 15:38:59.370823 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 15:39:04.297545 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 15:39:04.805810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 15:39:07.825271 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 15:39:09.351299 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 15:39:09.857948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 15:39:11.633527 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 15:39:12.833089 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 15:39:14.016192 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 15:39:14.559337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 15:39:15.057175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 15:39:16.280238 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 15:39:16.788264 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 15:39:22.484108 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:39:24.506490 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 15:39:27.874332 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 15:39:34.357231 -No vulnerabilities found. - - -sublee/flask-autoindex -https://github.com/sublee/flask-autoindex -Entry file: flask-autoindex/flask_autoindex/__init__.py -Scanned: 2016-10-18 15:39:39.120603 -No vulnerabilities found. - - -ericmoritz/flaskcma -https://github.com/ericmoritz/flaskcma -Entry file: flaskcma/flaskcma/app.py -Scanned: 2016-10-18 15:39:54.383261 -No vulnerabilities found. - - -indexofire/flasky -https://github.com/indexofire/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 15:39:55.883403 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericmoritz/flask-auth -https://github.com/ericmoritz/flask-auth -Entry file: flask-auth/flaskext/auth/tests/workflow.py -Scanned: 2016-10-18 15:39:58.249320 -No vulnerabilities found. - - -sublee/flask-silk -https://github.com/sublee/flask-silk -Entry file: flask-silk/test.py -Scanned: 2016-10-18 15:40:02.542145 -No vulnerabilities found. - - -proudlygeek/proudlygeek-blog -https://github.com/proudlygeek/proudlygeek-blog -Entry file: proudlygeek-blog/flask/app.py -Scanned: 2016-10-18 15:40:03.071267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunKikuchi/flask-gae -https://github.com/JunKikuchi/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:40:03.573851 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenbot/flask-tweetfeed -https://github.com/glenbot/flask-tweetfeed -Entry file: flask-tweetfeed/tweetfeedapp.py -Scanned: 2016-10-18 15:40:04.809985 -No vulnerabilities found. - - -fsouza/palestra-flask-2010-giran -https://github.com/fsouza/palestra-flask-2010-giran -Entry file: palestra-flask-2010-giran/projetos/projetos.py -Scanned: 2016-10-18 15:40:06.185158 -No vulnerabilities found. - - -shiloa/flask-clean -https://github.com/shiloa/flask-clean -Entry file: flask-clean/app.py -Scanned: 2016-10-18 15:40:07.583515 -No vulnerabilities found. - - -dag/flask-genshi -https://github.com/dag/flask-genshi -Entry file: flask-genshi/examples/flaskr/flaskr.py -Scanned: 2016-10-18 15:40:11.446196 -No vulnerabilities found. - - -raliste/Flaskito -https://github.com/raliste/Flaskito -Entry file: Flaskito/flaskito/__init__.py -Scanned: 2016-10-18 15:40:13.149290 -No vulnerabilities found. - - -mikewest/flask-pyplaceholder -https://github.com/mikewest/flask-pyplaceholder -Entry file: flask-pyplaceholder/generator.py -Scanned: 2016-10-18 15:40:15.570155 -No vulnerabilities found. - - -whalesalad/arbesko-files -https://github.com/whalesalad/arbesko-files -Entry file: arbesko-files/files/__init__.py -Scanned: 2016-10-18 15:40:17.844797 -No vulnerabilities found. - - -danjac/Flask-Script -https://github.com/danjac/Flask-Script -Entry file: Flask-Script/tests.py -Scanned: 2016-10-18 15:40:18.901089 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjac/Flask-WTF -https://github.com/danjac/Flask-WTF -Entry file: Flask-WTF/examples/recaptcha/app.py -Scanned: 2016-10-18 15:40:22.655509 -No vulnerabilities found. - - -danjac/Flask-Mail -https://github.com/danjac/Flask-Mail -Entry file: Flask-Mail/tests.py -Scanned: 2016-10-18 15:40:23.636583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cropd/crashkurs-flask -https://github.com/cropd/crashkurs-flask -Entry file: crashkurs-flask/flask/app.py -Scanned: 2016-10-18 15:40:24.600983 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hasgeek/github-hook -https://github.com/hasgeek/github-hook -Entry file: github-hook/github-hook.py -Scanned: 2016-10-18 15:40:25.823536 -No vulnerabilities found. - - -pygloo/bewype-flask-controllers -https://github.com/pygloo/bewype-flask-controllers -Entry file: bewype-flask-controllers/bewype/flask/_app.py -Scanned: 2016-10-18 15:40:30.209745 -No vulnerabilities found. - - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 15:40:36.457070 -No vulnerabilities found. - - -Frozen-Flask/Frozen-Flask -https://github.com/Frozen-Flask/Frozen-Flask -Entry file: Frozen-Flask/flask_frozen/__init__.py -Scanned: 2016-10-18 15:40:54.583913 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cobrateam/flask-mongoalchemy -https://github.com/cobrateam/flask-mongoalchemy -Entry file: flask-mongoalchemy/flask_mongoalchemy/__init__.py -Scanned: 2016-10-18 15:40:58.040136 -No vulnerabilities found. - - -Flask-FlatPages/Flask-FlatPages -https://github.com/Flask-FlatPages/Flask-FlatPages -Entry file: Flask-FlatPages/tests/test_flask_flatpages.py -Scanned: 2016-10-18 15:40:58.557269 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fsouza/flask-rest-example -https://github.com/fsouza/flask-rest-example -Entry file: flask-rest-example/library.py -Scanned: 2016-10-18 15:40:59.765640 -Vulnerability 1: -File: flask-rest-example/library.py - > User input at line 63, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-rest-example/library.py - > Line 64: book = Book(id=2, name=name) -File: flask-rest-example/library.py - > reaches line 65, trigger word "flash(": - flash('Book %s sucessful saved!' % book.name) - - - -pilt/flask-versioned -https://github.com/pilt/flask-versioned -Entry file: flask-versioned/test_versioned.py -Scanned: 2016-10-18 15:41:01.203233 -No vulnerabilities found. - - -tokibito/flask-hgwebcommit -https://github.com/tokibito/flask-hgwebcommit -Entry file: flask-hgwebcommit/hgwebcommit/__init__.py -Scanned: 2016-10-18 15:41:06.375862 -Vulnerability 1: -File: flask-hgwebcommit/hgwebcommit/views.py - > User input at line 97, trigger word ".data": - message = operation_repo(repo, form.data['operation'], form.data['files'], form.data['commit_message']) -File: flask-hgwebcommit/hgwebcommit/views.py - > reaches line 98, trigger word "flash(": - flash(message) - - - -Nassty/flask-gae -https://github.com/Nassty/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 15:41:06.891418 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sgk/BulkDM -https://github.com/sgk/BulkDM -Entry file: BulkDM/application.py -Scanned: 2016-10-18 15:41:07.405780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sontek-archive/redditor-stats -https://github.com/sontek-archive/redditor-stats -Entry file: redditor-stats/web.py -Scanned: 2016-10-18 15:41:10.266705 -No vulnerabilities found. - - -zzzsochi/Flask-Gravatar -https://github.com/zzzsochi/Flask-Gravatar -Entry file: Flask-Gravatar/tests/test_core.py -Scanned: 2016-10-18 15:41:13.379755 -No vulnerabilities found. - - -dag/flask-zodb -https://github.com/dag/flask-zodb -Entry file: flask-zodb/flask_zodb.py -Scanned: 2016-10-18 15:41:13.897902 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -zen4ever/route53manager -https://github.com/zen4ever/route53manager -Entry file: route53manager/route53/__init__.py -Scanned: 2016-10-18 15:41:14.396810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-kitchensink -https://github.com/mitsuhiko/flask-kitchensink -Entry file: flask-kitchensink/example-code/hello.py -Scanned: 2016-10-18 15:41:14.909365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyeseast/flask-docviewer -https://github.com/eyeseast/flask-docviewer -Entry file: flask-docviewer/docviewer/app.py -Scanned: 2016-10-18 15:41:16.114189 -No vulnerabilities found. - - -dag/flask-attest -https://github.com/dag/flask-attest -Entry file: flask-attest/tests.py -Scanned: 2016-10-18 15:41:16.630223 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ekalinin/flask-noextref -https://github.com/ekalinin/flask-noextref -Entry file: flask-noextref/test_noextref.py -Scanned: 2016-10-18 15:41:19.959087 -No vulnerabilities found. - - -teohm/flitter -https://github.com/teohm/flitter -Entry file: flitter/flitter/__init__.py -Scanned: 2016-10-18 15:41:24.454439 -Vulnerability 1: -File: flitter/flitter/controllers/user.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flitter/flitter/controllers/user.py - > Line 24: session['user'] = username - File: flitter/flitter/controllers/user.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry.entries',username=username)) - File: flitter/flitter/controllers/user.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('signup.html',error=error) - File: flitter/flitter/controllers/user.py - > Line 15: ret_MAYBE_FUNCTION_NAME = redirect_to_user_page() -File: flitter/flitter/controllers/user.py - > reaches line 25, trigger word "flash(": - flash('Welcome, {0}.'.format(username)) - - - -aaront/calcmymarks2 -https://github.com/aaront/calcmymarks2 -Entry file: calcmymarks2/main.py -Scanned: 2016-10-18 15:41:24.967834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-feedback -https://github.com/mitsuhiko/flask-feedback -Entry file: flask-feedback/feedback.py -Scanned: 2016-10-18 15:41:26.087061 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilsaj/flask-admin-old -https://github.com/wilsaj/flask-admin-old -Entry file: flask-admin-old/test_admin.py -Scanned: 2016-10-18 15:41:37.114854 -No vulnerabilities found. - - -leandrosilva/flaskito -https://github.com/leandrosilva/flaskito -Entry file: flaskito/src/flaskito.py -Scanned: 2016-10-18 15:41:37.673149 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/Flask-API-Server -https://github.com/marchon/Flask-API-Server -Entry file: Flask-API-Server/apiserver/tests/app.py -Scanned: 2016-10-18 15:41:39.006577 -No vulnerabilities found. - - -kapilreddy/Shabda-Sangraha -https://github.com/kapilreddy/Shabda-Sangraha -Entry file: Shabda-Sangraha/dict.py -Scanned: 2016-10-18 15:41:55.018087 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tooxie/flask-syrinx -https://github.com/tooxie/flask-syrinx -Entry file: flask-syrinx/syrinx/__init__.py -Scanned: 2016-10-18 15:41:56.545755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshourisman/flask-shortly -https://github.com/joshourisman/flask-shortly -Entry file: flask-shortly/shortly/__init__.py -Scanned: 2016-10-18 15:42:00.539804 -No vulnerabilities found. - - -jamiltron/fitgen -https://github.com/jamiltron/fitgen -Entry file: fitgen/fitgen.py -Scanned: 2016-10-18 15:42:04.989819 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomviner/Flask-Name-that-actor-or-movie -https://github.com/tomviner/Flask-Name-that-actor-or-movie -Entry file: Flask-Name-that-actor-or-movie/namer.py -Scanned: 2016-10-18 15:42:06.972649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/checkinmapper -https://github.com/marchon/checkinmapper -Entry file: checkinmapper/checkinmapper.py -Scanned: 2016-10-18 15:42:07.588985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comfuture/simplesite -https://github.com/comfuture/simplesite -Entry file: simplesite/simplesite/core.py -Scanned: 2016-10-18 15:42:09.090526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/flylons -https://github.com/marchon/flylons -Entry file: flylons/application/__init__.py -Scanned: 2016-10-18 15:42:09.596107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwill/flask-engine -https://github.com/zachwill/flask-engine -Entry file: flask-engine/libs/flask/sessions.py -Scanned: 2016-10-18 15:42:14.222123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spantaleev/flask-sijax -https://github.com/spantaleev/flask-sijax -Entry file: flask-sijax/examples/comet.py -Scanned: 2016-10-18 15:42:15.769049 -No vulnerabilities found. - - -utahta/Flask-MVC-Pattern -https://github.com/utahta/Flask-MVC-Pattern -Entry file: Flask-MVC-Pattern/main.py -Scanned: 2016-10-18 15:42:16.998754 -No vulnerabilities found. - - -jzempel/flask-exceptional -https://github.com/jzempel/flask-exceptional -Entry file: flask-exceptional/flask_exceptional.py -Scanned: 2016-10-18 15:42:17.497473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qsnake/flask -https://github.com/qsnake/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:42:20.313929 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joeyespo/flask-scaffold -https://github.com/joeyespo/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-18 15:42:20.832057 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iwebhosting/collectd-flask -https://github.com/iwebhosting/collectd-flask -Entry file: collectd-flask/collectdflask.py -Scanned: 2016-10-18 15:42:22.187523 -No vulnerabilities found. - - -yxm0513/flask-ims -https://github.com/yxm0513/flask-ims -Entry file: flask-ims/flask/sessions.py -Scanned: 2016-10-18 15:42:23.725263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fay/flask-skeleton -https://github.com/fay/flask-skeleton -Entry file: None -Scanned: 2016-10-18 15:42:25.705532 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fay/flask-skeleton. - -joshourisman/flask-beans -https://github.com/joshourisman/flask-beans -Entry file: flask-beans/beans.py -Scanned: 2016-10-18 15:42:26.906962 -No vulnerabilities found. - - -jjinux/pyteladventure -https://github.com/jjinux/pyteladventure -Entry file: pyteladventure/pyteladventure/__init__.py -Scanned: 2016-10-18 15:42:27.462841 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mchambliss/flask -https://github.com/mchambliss/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:42:40.753387 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -robi42/backbone-flask -https://github.com/robi42/backbone-flask -Entry file: backbone-flask/app.py -Scanned: 2016-10-18 15:43:01.204307 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-18 15:43:05.681801 -No vulnerabilities found. - - -joshfinnie/Flask-shrtn -https://github.com/joshfinnie/Flask-shrtn -Entry file: Flask-shrtn/Flask-shrtn.py -Scanned: 2016-10-18 15:43:06.197331 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomatohater/goonhilly -https://github.com/tomatohater/goonhilly -Entry file: goonhilly/goonhilly.py -Scanned: 2016-10-18 15:43:07.887561 -No vulnerabilities found. - - -jmoiron/jmoiron.net -https://github.com/jmoiron/jmoiron.net -Entry file: None -Scanned: 2016-10-18 15:43:08.401944 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fzuslide/video_new -https://github.com/fzuslide/video_new -Entry file: video_new/application.py -Scanned: 2016-10-18 15:43:10.634143 -No vulnerabilities found. - - -tomatohater/lydon -https://github.com/tomatohater/lydon -Entry file: lydon/lydon/__init__.py -Scanned: 2016-10-18 15:43:12.010623 -No vulnerabilities found. - - -williamratcliff/django-feedback -https://github.com/williamratcliff/django-feedback -Entry file: django-feedback/feedback.py -Scanned: 2016-10-18 15:43:14.494099 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelbm24/blog -https://github.com/joelbm24/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-18 15:43:16.459842 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-18 15:43:18.021335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crisisking/bsg-raffle -https://github.com/crisisking/bsg-raffle -Entry file: bsg-raffle/raffle.py -Scanned: 2016-10-18 15:43:18.528350 -Vulnerability 1: -File: bsg-raffle/raffle.py - > User input at line 39, trigger word "form[": - user_id = int(request.form['user_id']) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 2: -File: bsg-raffle/raffle.py - > User input at line 40, trigger word "form[": - prize = request.form['prize'] -Reassigned in: - File: bsg-raffle/raffle.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('winner_added.html',name=username[0], prize=prize) -File: bsg-raffle/raffle.py - > reaches line 42, trigger word "execute(": - g.db.execute('INSERT INTO winners(participant_id, prize_name) - VALUES (?, ?)', (user_id, prize)) - -Vulnerability 3: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 68, trigger word "execute(": - g.db.execute('INSERT INTO participants(name) - VALUES (?)', (username)) - -Vulnerability 4: -File: bsg-raffle/raffle.py - > User input at line 66, trigger word "form[": - username = request.form['username'] -File: bsg-raffle/raffle.py - > reaches line 70, trigger word "flash(": - flash('%s added successfully!' % username) - - - -adamgreig/pyautopull -https://github.com/adamgreig/pyautopull -Entry file: pyautopull/pyautopull.py -Scanned: 2016-10-18 15:43:20.734876 -No vulnerabilities found. - - -sean-/flask-skeleton -https://github.com/sean-/flask-skeleton -Entry file: None -Scanned: 2016-10-18 15:43:21.892208 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sean-/flask-skeleton. - -Runscope/httpbin -https://github.com/Runscope/httpbin -Entry file: httpbin/httpbin/filters.py -Scanned: 2016-10-18 15:43:24.434299 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hasgeek/flask-lastuser -https://github.com/hasgeek/flask-lastuser -Entry file: flask-lastuser/tests/test_mergeuser.py -Scanned: 2016-10-18 15:43:27.842019 -No vulnerabilities found. - - -BooBSD/flask-odesk -https://github.com/BooBSD/flask-odesk -Entry file: flask-odesk/tests.py -Scanned: 2016-10-18 15:43:28.336271 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cool-shark/redimon -https://github.com/cool-shark/redimon -Entry file: redimon/src/redimon/app.py -Scanned: 2016-10-18 15:43:29.788182 -No vulnerabilities found. - - -pcsanwald/flask_site -https://github.com/pcsanwald/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-18 15:43:39.263190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suzanshakya/flask-clevercss -https://github.com/suzanshakya/flask-clevercss -Entry file: flask-clevercss/example/runserver.py -Scanned: 2016-10-18 15:43:41.791552 -No vulnerabilities found. - - -dag/flask-sassy -https://github.com/dag/flask-sassy -Entry file: flask-sassy/tests/__init__.py -Scanned: 2016-10-18 15:43:56.064189 -No vulnerabilities found. - - -charlieevett/jiffy-portal -https://github.com/charlieevett/jiffy-portal -Entry file: jiffy-portal/portal/app.py -Scanned: 2016-10-18 15:43:58.415189 -No vulnerabilities found. - - -tomekwojcik/Flask-Module-Static-Files -https://github.com/tomekwojcik/Flask-Module-Static-Files -Entry file: Flask-Module-Static-Files/stest/__init__.py -Scanned: 2016-10-18 15:44:00.749764 -No vulnerabilities found. - - -justjkk/dotpath -https://github.com/justjkk/dotpath -Entry file: dotpath/run.py -Scanned: 2016-10-18 15:44:01.282346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almet/semantic-bookclub -https://github.com/almet/semantic-bookclub -Entry file: semantic-bookclub/app/web.py -Scanned: 2016-10-18 15:44:01.813700 -Vulnerability 1: -File: semantic-bookclub/app/web.py - > User input at line 81, trigger word ".data": - book_title = dict(self.book.choices)[self.book.data] -File: semantic-bookclub/app/web.py - > reaches line 82, trigger word "flash(": - flash('%s have successfully borrowed %s' % (self.borrower.data, book_title)) - -Vulnerability 2: -File: semantic-bookclub/app/web.py - > User input at line 101, trigger word ".data": - member = Member.get_by(foaf_givenName=self.member.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - -Vulnerability 3: -File: semantic-bookclub/app/web.py - > User input at line 102, trigger word ".data": - book = Book.get_by(dcterms_identifier=self.book.data).one() -File: semantic-bookclub/app/web.py - > reaches line 105, trigger word "flash(": - flash('%s now owns %s' % (member.foaf_givenName.first, book.dcterms_title.first)) - - - -t9md/snippy -https://github.com/t9md/snippy -Entry file: snippy/snippy.py -Scanned: 2016-10-18 15:44:06.795368 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stehem/Tywna -https://github.com/stehem/Tywna -Entry file: Tywna/application/__init__.py -Scanned: 2016-10-18 15:44:12.617544 -No vulnerabilities found. - - -hoprocker/mylons -https://github.com/hoprocker/mylons -Entry file: mylons/lib/python2.5/site-packages/Flask-0.6.1-py2.5.egg/flask/app.py -Scanned: 2016-10-18 15:44:13.196979 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/bitpit-https-bridge -https://github.com/maxcountryman/bitpit-https-bridge -Entry file: bitpit-https-bridge/httpstobitpit/__init__.py -Scanned: 2016-10-18 15:44:14.517124 -No vulnerabilities found. - - -maxcountryman/flask-bcrypt -https://github.com/maxcountryman/flask-bcrypt -Entry file: flask-bcrypt/flask_bcrypt.py -Scanned: 2016-10-18 15:44:17.636972 -No vulnerabilities found. - - -kennethreitz-archive/flask-rest -https://github.com/kennethreitz-archive/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-18 15:44:18.600475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tdryer/flask-forum -https://github.com/tdryer/flask-forum -Entry file: flask-forum/app.py -Scanned: 2016-10-18 15:44:19.119923 -Vulnerability 1: -File: flask-forum/app.py - > User input at line 124, trigger word ".data": - new_topic_id = post_topic(form.subject.data, form.content.data) -Reassigned in: - File: flask-forum/app.py - > Line 127: ret_MAYBE_FUNCTION_NAME = render_template('newtopic.html',form=form) -File: flask-forum/app.py - > reaches line 126, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/topic/' + new_topic_id) - -Vulnerability 2: -File: flask-forum/app.py - > User input at line 196, trigger word ".data": - username = form.username.data -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - -Vulnerability 3: -File: flask-forum/app.py - > User input at line 197, trigger word ".data": - password = form.password1.data -Reassigned in: - File: flask-forum/app.py - > Line 198: pw_hash = hashpw(password, gensalt()) -File: flask-forum/app.py - > reaches line 199, trigger word "execute(": - g.db.execute('INSERT INTO users (username, password_hash) values (?, ?)', [username, pw_hash]) - - - -dqminh/flask-mongoobject -https://github.com/dqminh/flask-mongoobject -Entry file: flask-mongoobject/examples_hello.py -Scanned: 2016-10-18 15:44:19.621129 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gmonnerat/flask-sandbox -https://github.com/gmonnerat/flask-sandbox -Entry file: flask-sandbox/hello/hello.py -Scanned: 2016-10-18 15:44:20.872409 -No vulnerabilities found. - - -DarkSector/wombat -https://github.com/DarkSector/wombat -Entry file: wombat/wombatdb.py -Scanned: 2016-10-18 15:44:21.378643 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lOlIl/Flask---Local-election -https://github.com/lOlIl/Flask---Local-election -Entry file: Flask---Local-election/app.py -Scanned: 2016-10-18 15:44:21.898239 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -paulftw/appengine-flask-template -https://github.com/paulftw/appengine-flask-template -Entry file: appengine-flask-template/app/app.py -Scanned: 2016-10-18 15:44:23.632403 -No vulnerabilities found. - - -flores/aquadoc -https://github.com/flores/aquadoc -Entry file: aquadoc/aquadoc.py -Scanned: 2016-10-18 15:44:25.313650 -No vulnerabilities found. - - -jorgeatorres/cotufa -https://github.com/jorgeatorres/cotufa -Entry file: cotufa/cotufa.py -Scanned: 2016-10-18 15:44:25.832078 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbr/flask-kvsession -https://github.com/mbr/flask-kvsession -Entry file: flask-kvsession/tests/conftest.py -Scanned: 2016-10-18 15:44:31.135047 -No vulnerabilities found. - - -radekstepan/Flask-Skeleton-App -https://github.com/radekstepan/Flask-Skeleton-App -Entry file: Flask-Skeleton-App/flask_app.py -Scanned: 2016-10-18 15:44:40.001050 -No vulnerabilities found. - - -utahta/flask-on-fluxflex -https://github.com/utahta/flask-on-fluxflex -Entry file: flask-on-fluxflex/app/__init__.py -Scanned: 2016-10-18 15:44:41.791851 -No vulnerabilities found. - - -femmerling/brunch-flask-gae-skeleton -https://github.com/femmerling/brunch-flask-gae-skeleton -Entry file: brunch-flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 15:44:56.381126 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amcameron/gchartsdemo -https://github.com/amcameron/gchartsdemo -Entry file: gchartsdemo/charts.py -Scanned: 2016-10-18 15:44:58.736903 -No vulnerabilities found. - - -bagyr/flaskPage -https://github.com/bagyr/flaskPage -Entry file: flaskPage/__init__.py -Scanned: 2016-10-18 15:45:00.966594 -No vulnerabilities found. - - -sbook/flask-script -https://github.com/sbook/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-18 15:45:05.421093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joemarct/flask-gae-app -https://github.com/joemarct/flask-gae-app -Entry file: flask-gae-app/flask/app.py -Scanned: 2016-10-18 15:45:06.934463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bhagyashree-Mandora/The-Python-Task -https://github.com/Bhagyashree-Mandora/The-Python-Task -Entry file: The-Python-Task/main.py -Scanned: 2016-10-18 15:45:07.440958 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -piratesolutions/ps-website -https://github.com/piratesolutions/ps-website -Entry file: ps-website/app.py -Scanned: 2016-10-18 15:45:13.970879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samrat/blogengine -https://github.com/samrat/blogengine -Entry file: blogengine/blogengine.py -Scanned: 2016-10-18 15:45:14.489950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TimFletcher/cmprss -https://github.com/TimFletcher/cmprss -Entry file: cmprss/cmprss.py -Scanned: 2016-10-18 15:45:15.998367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyvanee/mappy -https://github.com/andyvanee/mappy -Entry file: mappy/mappy.py -Scanned: 2016-10-18 15:45:16.542848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barnslig/foreveralonebook -https://github.com/barnslig/foreveralonebook -Entry file: foreveralonebook/foreveralonebook.py -Scanned: 2016-10-18 15:45:19.589347 -Vulnerability 1: -File: foreveralonebook/foreveralonebook.py - > User input at line 47, trigger word "form[": - entry = escape(request.form['entry']) -File: foreveralonebook/foreveralonebook.py - > reaches line 57, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_posts (u_id, content) VALUES ({0}, '{1}');'.format(session['u_id'], entry)) - -Vulnerability 2: -File: foreveralonebook/foreveralonebook.py - > User input at line 113, trigger word "form[": - password = hashlib.sha1(request.form['new_pw']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 115, trigger word "execute(": - g.db.cur.execute('UPDATE feabook_user SET password = '{0}' WHERE id = '{1}';'.format(password, session['u_id'])) - -Vulnerability 3: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 157, trigger word "execute(": - g.db.cur.execute('SELECT username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 4: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 5: -File: foreveralonebook/foreveralonebook.py - > User input at line 152, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 164, trigger word "execute(": - g.db.cur.execute('INSERT INTO feabook_user (username, password) VALUES ('{0}', '{1}');'.format(username, password)) - -Vulnerability 6: -File: foreveralonebook/foreveralonebook.py - > User input at line 151, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 171: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 172: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 169, trigger word "execute(": - g.db.cur.execute('SELECT id, username FROM feabook_user WHERE username = '{0}';'.format(username)) - -Vulnerability 7: -File: foreveralonebook/foreveralonebook.py - > User input at line 193, trigger word "form[": - username = escape(request.form['username']) -Reassigned in: - File: foreveralonebook/foreveralonebook.py - > Line 222: session['username'] = username - File: foreveralonebook/foreveralonebook.py - > Line 223: session['u_id'] = rows[0][0] -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - -Vulnerability 8: -File: foreveralonebook/foreveralonebook.py - > User input at line 194, trigger word "form[": - password = hashlib.sha1(request.form['password']).hexdigest() -File: foreveralonebook/foreveralonebook.py - > reaches line 197, trigger word "execute(": - g.db.cur.execute('SELECT id, username, password FROM feabook_user WHERE username = '{0}' AND password = '{1}';'.format(username, password)) - - - -geek22com/referral_dashboard_engine -https://github.com/geek22com/referral_dashboard_engine -Entry file: referral_dashboard_engine/heymoose/__init__.py -Scanned: 2016-10-18 15:45:20.120197 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dqminh/flask-lettuce -https://github.com/dqminh/flask-lettuce -Entry file: flask-lettuce/test.py -Scanned: 2016-10-18 15:45:21.737767 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radekstepan/FlaskBudget -https://github.com/radekstepan/FlaskBudget -Entry file: FlaskBudget/budget.py -Scanned: 2016-10-18 15:45:22.711272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -UfSoft/Flask-MenuBuilder -https://github.com/UfSoft/Flask-MenuBuilder -Entry file: Flask-MenuBuilder/tests/test_menuitem.py -Scanned: 2016-10-18 15:45:25.040955 -No vulnerabilities found. - - -gregglind/flask-tool -https://github.com/gregglind/flask-tool -Entry file: flask-tool/flasktool/console.py -Scanned: 2016-10-18 15:45:25.554813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kblin/flask-downloader -https://github.com/kblin/flask-downloader -Entry file: flask-downloader/tests.py -Scanned: 2016-10-18 15:45:26.054288 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/flog -https://github.com/maxcountryman/flog -Entry file: flog/flog/__init__.py -Scanned: 2016-10-18 15:45:28.156319 -No vulnerabilities found. - - -sublee/Flask-Handler -https://github.com/sublee/Flask-Handler -Entry file: None -Scanned: 2016-10-18 15:45:29.654621 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sublee/Flask-Handler. - -Ramblurr/pyqdb -https://github.com/Ramblurr/pyqdb -Entry file: pyqdb/src/pyqdb.py -Scanned: 2016-10-18 15:45:40.113750 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zackster/DijScrape--flask-rewrite- -https://github.com/zackster/DijScrape--flask-rewrite- -Entry file: DijScrape--flask-rewrite-/dijscrape.py -Scanned: 2016-10-18 15:45:41.567892 -No vulnerabilities found. - - -asenchi/pomp -https://github.com/asenchi/pomp -Entry file: pomp/pomp/pomp.py -Scanned: 2016-10-18 15:45:42.757188 -No vulnerabilities found. - - -tshirtman/snakenest -https://github.com/tshirtman/snakenest -Entry file: snakenest/main.py -Scanned: 2016-10-18 15:45:58.155770 -No vulnerabilities found. - - -jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -https://github.com/jvreeland/Python-Web-Service-for-Android-GMaps-AsyncTask-Demo -Entry file: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/gmaps.py -Scanned: 2016-10-18 15:45:58.666381 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Python-Web-Service-for-Android-GMaps-AsyncTask-Demo/env/lib/python2.7/genericpath.py - -triposo/geocodecache -https://github.com/triposo/geocodecache -Entry file: geocodecache/geocodecache.py -Scanned: 2016-10-18 15:46:01.166703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toastwaffle/ToDoQuick -https://github.com/toastwaffle/ToDoQuick -Entry file: ToDoQuick/todoquick.py -Scanned: 2016-10-18 15:46:01.676256 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coleifer/flask-peewee -https://github.com/coleifer/flask-peewee -Entry file: flask-peewee/example/app.py -Scanned: 2016-10-18 15:46:05.871113 -Vulnerability 1: -File: flask-peewee/example/admin.py - > User input at line 27, trigger word "get(": - next = request.form.get('next') or self.dashboard_url() -File: flask-peewee/example/admin.py - > reaches line 28, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -jeanphix/Flask-Dashed -https://github.com/jeanphix/Flask-Dashed -Entry file: Flask-Dashed/examples/sqlalchemy_backend.py -Scanned: 2016-10-18 15:46:11.109857 -No vulnerabilities found. - - -jarus/flask-mongokit -https://github.com/jarus/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-18 15:46:11.630169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -namlook/flask-apibee -https://github.com/namlook/flask-apibee -Entry file: flask-apibee/example/app.py -Scanned: 2016-10-18 15:46:14.606695 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voluntas/heroku-template-flask -https://github.com/voluntas/heroku-template-flask -Entry file: heroku-template-flask/snowflake/__init__.py -Scanned: 2016-10-18 15:46:16.810154 -No vulnerabilities found. - - -Deepwalker/Flask-Bundle -https://github.com/Deepwalker/Flask-Bundle -Entry file: Flask-Bundle/samples/simple.py -Scanned: 2016-10-18 15:46:20.237340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunlightlabs/flask-districtoffices -https://github.com/sunlightlabs/flask-districtoffices -Entry file: flask-districtoffices/districtoffices.py -Scanned: 2016-10-18 15:46:22.361685 -No vulnerabilities found. - - -quanticle/flask_blog -https://github.com/quanticle/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-18 15:46:23.806630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garrettr/haps -https://github.com/garrettr/haps -Entry file: haps/quickstart.py -Scanned: 2016-10-18 15:46:24.321455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dsully/sitter -https://github.com/dsully/sitter -Entry file: sitter/sitter/__init__.py -Scanned: 2016-10-18 15:46:25.328660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/nodeblog -https://github.com/ahri/nodeblog -Entry file: nodeblog/blog.py -Scanned: 2016-10-18 15:46:25.826100 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/celeb -https://github.com/maxcountryman/celeb -Entry file: celeb/celeb/__init__.py -Scanned: 2016-10-18 15:46:26.325495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marchon/PO -https://github.com/marchon/PO -Entry file: PO/main.py -Scanned: 2016-10-18 15:46:27.539809 -No vulnerabilities found. - - -slok/xlarrakoetxeaorg -https://github.com/slok/xlarrakoetxeaorg -Entry file: xlarrakoetxeaorg/mysite/blog/__init__.py -Scanned: 2016-10-18 15:46:32.759499 -No vulnerabilities found. - - -boboppie/pyLiftOver -https://github.com/boboppie/pyLiftOver -Entry file: pyLiftOver/flask/lift-over-app.py -Scanned: 2016-10-18 15:46:33.247289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -no0p/homepage -https://github.com/no0p/homepage -Entry file: homepage/site.py -Scanned: 2016-10-18 15:46:38.932717 -No vulnerabilities found. - - -tjosten/python-push -https://github.com/tjosten/python-push -Entry file: python-push/push.py -Scanned: 2016-10-18 15:46:41.205972 -No vulnerabilities found. - - -Joshkunz/PyChannel -https://github.com/Joshkunz/PyChannel -Entry file: PyChannel/PyChannel/__init__.py -Scanned: 2016-10-18 15:46:41.715816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbess/ytlinker -https://github.com/cbess/ytlinker -Entry file: ytlinker/flask/app.py -Scanned: 2016-10-18 15:46:42.206463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openshift/flask-example -https://github.com/openshift/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 15:46:59.363444 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wasabi0522/flaskr -https://github.com/wasabi0522/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:47:06.304974 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amehta/Flaskly -https://github.com/amehta/Flaskly -Entry file: Flaskly/flaskly.py -Scanned: 2016-10-18 15:47:12.299035 -Vulnerability 1: -File: Flaskly/flaskly.py - > User input at line 73, trigger word "form[": - url = request.form['long_url'] -Reassigned in: - File: Flaskly/flaskly.py - > Line 74: short = pickShortUrl(url) -File: Flaskly/flaskly.py - > reaches line 75, trigger word "flash(": - flash('Short Url http:/localhost/' + short) - - - -fyears/flaskr-redis -https://github.com/fyears/flaskr-redis -Entry file: flaskr-redis/app.py -Scanned: 2016-10-18 15:47:16.000785 -No vulnerabilities found. - - -Jc2k/flask-example -https://github.com/Jc2k/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 15:47:16.497905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brainTrain/flasktest -https://github.com/brainTrain/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-18 15:47:20.959027 -No vulnerabilities found. - - -proles/flaskr -https://github.com/proles/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:47:21.463391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joeyespo/hello-redis-tasks -https://github.com/joeyespo/hello-redis-tasks -Entry file: hello-redis-tasks/hello_redis_tasks.py -Scanned: 2016-10-18 15:47:21.964679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cemk/flask-expander -https://github.com/cemk/flask-expander -Entry file: flask-expander/expand.py -Scanned: 2016-10-18 15:47:23.161862 -No vulnerabilities found. - - -pygraz/old-flask-website -https://github.com/pygraz/old-flask-website -Entry file: old-flask-website/pygraz_website/__init__.py -Scanned: 2016-10-18 15:47:23.675609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasballinger/Utok -https://github.com/thomasballinger/Utok -Entry file: Utok/webapp.py -Scanned: 2016-10-18 15:47:25.122505 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/Igualitos-appengine -https://github.com/lcruz/Igualitos-appengine -Entry file: Igualitos-appengine/config.py -Scanned: 2016-10-18 15:47:25.657504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hettan/MyPortfolio -https://github.com/hettan/MyPortfolio -Entry file: MyPortfolio/web/myFlaskProject.py -Scanned: 2016-10-18 15:47:26.158262 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcruz/igualitos -https://github.com/lcruz/igualitos -Entry file: igualitos/config.py -Scanned: 2016-10-18 15:47:27.526030 -No vulnerabilities found. - - -agonzalezro/gplus-blog -https://github.com/agonzalezro/gplus-blog -Entry file: gplus-blog/gplusblog/__init__.py -Scanned: 2016-10-18 15:47:28.858158 -No vulnerabilities found. - - -fwenzel/strassendeutsch -https://github.com/fwenzel/strassendeutsch -Entry file: strassendeutsch/woerterbuch/__init__.py -Scanned: 2016-10-18 15:47:30.883389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lzyy/chat -https://github.com/lzyy/chat -Entry file: chat/src/app.py -Scanned: 2016-10-18 15:47:40.520840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ferhensil/flask-example -https://github.com/ferhensil/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 15:47:42.005048 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanphix/flask-dashed-demo -https://github.com/jeanphix/flask-dashed-demo -Entry file: flask-dashed-demo/app.py -Scanned: 2016-10-18 15:47:42.504876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenkam/msgbrd -https://github.com/kenkam/msgbrd -Entry file: msgbrd/app.py -Scanned: 2016-10-18 15:47:59.506170 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grigouze/flask-jenkins-radiator -https://github.com/grigouze/flask-jenkins-radiator -Entry file: flask-jenkins-radiator/radiator/radiator.py -Scanned: 2016-10-18 15:48:02.008854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rduplain/flask-jquery-autosave-example -https://github.com/rduplain/flask-jquery-autosave-example -Entry file: flask-jquery-autosave-example/app.py -Scanned: 2016-10-18 15:48:03.637621 -No vulnerabilities found. - - -kracekumar/Gummi -https://github.com/kracekumar/Gummi -Entry file: Gummi/gummi/tests/test.py -Scanned: 2016-10-18 15:48:04.138281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivoscc/qchaes -https://github.com/ivoscc/qchaes -Entry file: qchaes/runserver.py -Scanned: 2016-10-18 15:48:08.121919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fdemmer/flask-principal -https://github.com/fdemmer/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-18 15:48:12.627540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dasevilla/evernote-oauth-example -https://github.com/dasevilla/evernote-oauth-example -Entry file: evernote-oauth-example/webapp.py -Scanned: 2016-10-18 15:48:15.834044 -No vulnerabilities found. - - -zeninthehome/flaskr -https://github.com/zeninthehome/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:48:16.805752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshfinnie/Flacker-News -https://github.com/joshfinnie/Flacker-News -Entry file: Flacker-News/flacker-news/app.py -Scanned: 2016-10-18 15:48:18.310939 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -moneill/uber-flask -https://github.com/moneill/uber-flask -Entry file: uber-flask/uber.py -Scanned: 2016-10-18 15:48:21.865639 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: uber-flask/env/lib/python2.7/genericpath.py - -nubela/radar-backend -https://github.com/nubela/radar-backend -Entry file: radar-backend/src/radar.py -Scanned: 2016-10-18 15:48:22.363410 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TxSSC/the-questionator -https://github.com/TxSSC/the-questionator -Entry file: the-questionator/questionator/__init__.py -Scanned: 2016-10-18 15:48:22.857516 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -satonaoya/flask-epio-skelton -https://github.com/satonaoya/flask-epio-skelton -Entry file: flask-epio-skelton/app.py -Scanned: 2016-10-18 15:48:25.079426 -No vulnerabilities found. - - -marksteve/bookmarks -https://github.com/marksteve/bookmarks -Entry file: bookmarks/bookmarks.py -Scanned: 2016-10-18 15:48:26.388927 -No vulnerabilities found. - - -paradoxxxzero/polldance -https://github.com/paradoxxxzero/polldance -Entry file: polldance/dance.py -Scanned: 2016-10-18 15:48:27.606364 -No vulnerabilities found. - - -flebel/Egami -https://github.com/flebel/Egami -Entry file: Egami/egami.py -Scanned: 2016-10-18 15:48:28.943372 -No vulnerabilities found. - - -mitsuhiko/flask-pastebin -https://github.com/mitsuhiko/flask-pastebin -Entry file: flask-pastebin/pastebin.py -Scanned: 2016-10-18 15:48:30.178493 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxcountryman/flask-seasurf -https://github.com/maxcountryman/flask-seasurf -Entry file: flask-seasurf/test_seasurf.py -Scanned: 2016-10-18 15:48:35.630752 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-18 15:48:37.651644 -No vulnerabilities found. - - -hasgeek/coaster -https://github.com/hasgeek/coaster -Entry file: coaster/tests/test_render_with.py -Scanned: 2016-10-18 15:48:41.322364 -No vulnerabilities found. - - -craigkerstiens/flask-helloworld -https://github.com/craigkerstiens/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-18 15:48:42.609968 -No vulnerabilities found. - - -jarodl/flask-github -https://github.com/jarodl/flask-github -Entry file: flask-github/example/example.py -Scanned: 2016-10-18 15:48:43.129457 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ahri/flask-mustache -https://github.com/ahri/flask-mustache -Entry file: flask-mustache/tests/test_mustache.py -Scanned: 2016-10-18 15:48:44.380547 -No vulnerabilities found. - - -gears/flask-gears -https://github.com/gears/flask-gears -Entry file: flask-gears/example/app.py -Scanned: 2016-10-18 15:48:45.690813 -No vulnerabilities found. - - -mitsuhiko/tugraz-flask-demo -https://github.com/mitsuhiko/tugraz-flask-demo -Entry file: tugraz-flask-demo/pastebin.py -Scanned: 2016-10-18 15:48:58.700098 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-18 15:49:00.210635 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -svieira/Budget-Manager -https://github.com/svieira/Budget-Manager -Entry file: None -Scanned: 2016-10-18 15:49:04.676071 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/svieira/Budget-Manager. - -solarmist/Flaskr -https://github.com/solarmist/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 15:49:07.176273 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cybertoast/flask-router -https://github.com/cybertoast/flask-router -Entry file: flask-router/test_router.py -Scanned: 2016-10-18 15:49:13.985072 -No vulnerabilities found. - - -srusskih/Flask-application-template -https://github.com/srusskih/Flask-application-template -Entry file: Flask-application-template/myapp/myapp.py -Scanned: 2016-10-18 15:49:17.773048 -No vulnerabilities found. - - -Rootbuzz/heroku-basic-flask-app -https://github.com/Rootbuzz/heroku-basic-flask-app -Entry file: heroku-basic-flask-app/sso.py -Scanned: 2016-10-18 15:49:18.974508 -No vulnerabilities found. - - -adgaudio/async-webapp---gevent--psycopg2--flask -https://github.com/adgaudio/async-webapp---gevent--psycopg2--flask -Entry file: async-webapp---gevent--psycopg2--flask/app.py -Scanned: 2016-10-18 15:49:19.480573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxcountryman/chatter -https://github.com/maxcountryman/chatter -Entry file: chatter/chatter/__init__.py -Scanned: 2016-10-18 15:49:22.919984 -No vulnerabilities found. - - -zeak/pyProx -https://github.com/zeak/pyProx -Entry file: pyProx/pyProx.py -Scanned: 2016-10-18 15:49:23.423851 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subchild/iStockUtils -https://github.com/subchild/iStockUtils -Entry file: iStockUtils/istockutils.py -Scanned: 2016-10-18 15:49:24.843649 -No vulnerabilities found. - - -tsoporan/read.list -https://github.com/tsoporan/read.list -Entry file: None -Scanned: 2016-10-18 15:49:25.349566 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dcrosta/flask-pymongo -https://github.com/dcrosta/flask-pymongo -Entry file: flask-pymongo/examples/wiki/wiki.py -Scanned: 2016-10-18 15:49:29.130027 -No vulnerabilities found. - - -jamesward/flaskbars -https://github.com/jamesward/flaskbars -Entry file: flaskbars/web.py -Scanned: 2016-10-18 15:49:30.771103 -No vulnerabilities found. - - -jarus/flask-fillin -https://github.com/jarus/flask-fillin -Entry file: flask-fillin/test_app/__init__.py -Scanned: 2016-10-18 15:49:32.757028 -No vulnerabilities found. - - -noisebridge/flask-noiselist -https://github.com/noisebridge/flask-noiselist -Entry file: flask-noiselist/src/noiselist/__init__.py -Scanned: 2016-10-18 15:49:33.264515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -givp/Flask-MongoDB-Project -https://github.com/givp/Flask-MongoDB-Project -Entry file: Flask-MongoDB-Project/myapp.py -Scanned: 2016-10-18 15:49:34.494590 -No vulnerabilities found. - - -maxcountryman/logmon -https://github.com/maxcountryman/logmon -Entry file: logmon/logmon/__init__.py -Scanned: 2016-10-18 15:49:38.030617 -No vulnerabilities found. - - -wgkoro/flask_mongodb -https://github.com/wgkoro/flask_mongodb -Entry file: flask_mongodb/app/app.py -Scanned: 2016-10-18 15:49:38.533963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danbruegge/flaskeleton -https://github.com/danbruegge/flaskeleton -Entry file: flaskeleton/app/__init__.py -Scanned: 2016-10-18 15:49:39.063571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spoqa/flask-beaker -https://github.com/spoqa/flask-beaker -Entry file: flask-beaker/test_beaker.py -Scanned: 2016-10-18 15:49:45.236793 -No vulnerabilities found. - - -BenjaminMalley/FlaskUser -https://github.com/BenjaminMalley/FlaskUser -Entry file: FlaskUser/tests/user_api_tests.py -Scanned: 2016-10-18 15:49:46.602706 -No vulnerabilities found. - - -mattoufoutu/flask-project-templates -https://github.com/mattoufoutu/flask-project-templates -Entry file: None -Scanned: 2016-10-18 15:49:47.102213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattoufoutu/flask-project-templates. - -jparise/flask-facebook -https://github.com/jparise/flask-facebook -Entry file: flask-facebook/tests/test_facebook.py -Scanned: 2016-10-18 15:50:00.470342 -No vulnerabilities found. - - -codeb2cc/flask-examples -https://github.com/codeb2cc/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-18 15:50:00.986473 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Opentaste/bombolone -https://github.com/Opentaste/bombolone -Entry file: bombolone/bombolone/app.py -Scanned: 2016-10-18 15:50:03.498884 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahamilton55/flaskr -https://github.com/ahamilton55/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:50:03.998996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbastian/flaskr -https://github.com/rbastian/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:50:05.488160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RyanMcG/Bits-Books -https://github.com/RyanMcG/Bits-Books -Entry file: Bits-Books/web.py -Scanned: 2016-10-18 15:50:07.992449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -practo/r5d4 -https://github.com/practo/r5d4 -Entry file: r5d4/r5d4/__init__.py -Scanned: 2016-10-18 15:50:09.488813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -youknowone/flask-skeleton -https://github.com/youknowone/flask-skeleton -Entry file: None -Scanned: 2016-10-18 15:50:13.978398 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/youknowone/flask-skeleton. - -nourlcn/flask-note -https://github.com/nourlcn/flask-note -Entry file: flask-note/note.py -Scanned: 2016-10-18 15:50:16.486055 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -w1mvy/flask_on_gae -https://github.com/w1mvy/flask_on_gae -Entry file: flask_on_gae/src/main.py -Scanned: 2016-10-18 15:50:19.895192 -No vulnerabilities found. - - -yukatou/flask-board_test -https://github.com/yukatou/flask-board_test -Entry file: flask-board_test/board/__init__.py -Scanned: 2016-10-18 15:50:20.403268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neilmiddleton/heroku_flask_example -https://github.com/neilmiddleton/heroku_flask_example -Entry file: heroku_flask_example/web.py -Scanned: 2016-10-18 15:50:21.605512 -No vulnerabilities found. - - -dhathorn/Blaskr -https://github.com/dhathorn/Blaskr -Entry file: Blaskr/blaskr/__init__.py -Scanned: 2016-10-18 15:50:23.295735 -No vulnerabilities found. - - -drewlustro/trackcircle -https://github.com/drewlustro/trackcircle -Entry file: None -Scanned: 2016-10-18 15:50:23.804378 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nicolaiarocci/flask-mimerender -https://github.com/nicolaiarocci/flask-mimerender -Entry file: flask-mimerender/src/example.py -Scanned: 2016-10-18 15:50:29.020996 -No vulnerabilities found. - - -ducu/rq-dashboard -https://github.com/ducu/rq-dashboard -Entry file: rq-dashboard/rq_dashboard/cli.py -Scanned: 2016-10-18 15:50:33.812664 -No vulnerabilities found. - - -ryands/flasknews -https://github.com/ryands/flasknews -Entry file: flasknews/news.py -Scanned: 2016-10-18 15:50:34.322459 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rsenk330/Flask-Cake -https://github.com/rsenk330/Flask-Cake -Entry file: Flask-Cake/flask_cake/tests/test_cake.py -Scanned: 2016-10-18 15:50:37.791101 -No vulnerabilities found. - - -jasonwyatt/Flask-ErrorMail -https://github.com/jasonwyatt/Flask-ErrorMail -Entry file: Flask-ErrorMail/example/simple.py -Scanned: 2016-10-18 15:50:39.318837 -No vulnerabilities found. - - -brocaar/flask-views -https://github.com/brocaar/flask-views -Entry file: flask-views/flask_views/tests/functional/base.py -Scanned: 2016-10-18 15:50:41.887604 -No vulnerabilities found. - - -simonz05/flask-wtf -https://github.com/simonz05/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-18 15:50:45.152056 -No vulnerabilities found. - - -nivardus/flask-sl -https://github.com/nivardus/flask-sl -Entry file: flask-sl/examples/app.py -Scanned: 2016-10-18 15:50:46.473544 -No vulnerabilities found. - - -andersoncardoso/flaskle -https://github.com/andersoncardoso/flaskle -Entry file: flaskle/flaskle.py -Scanned: 2016-10-18 15:50:47.790679 -No vulnerabilities found. - - -ferronrsmith/flask_projects -https://github.com/ferronrsmith/flask_projects -Entry file: flask_projects/flask_orm/ormapp.py -Scanned: 2016-10-18 15:50:54.031045 -No vulnerabilities found. - - -spanners/flask-blog -https://github.com/spanners/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 15:50:54.593259 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kvesteri/flask-generic-views -https://github.com/kvesteri/flask-generic-views -Entry file: flask-generic-views/tests/__init__.py -Scanned: 2016-10-18 15:50:55.093384 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ehazlett/coiapi-flask -https://github.com/ehazlett/coiapi-flask -Entry file: coiapi-flask/coiapi/__init__.py -Scanned: 2016-10-18 15:51:01.437349 -No vulnerabilities found. - - -rmasters/progress-flask -https://github.com/rmasters/progress-flask -Entry file: progress-flask/progress.py -Scanned: 2016-10-18 15:51:05.116681 -No vulnerabilities found. - - -RDFLib/rdflib-web -https://github.com/RDFLib/rdflib-web -Entry file: rdflib-web/rdflib_web/lod.py -Scanned: 2016-10-18 15:51:07.147731 -Vulnerability 1: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 523, trigger word "url_for(": - url = url_for(path,type_=type_, label=label, format_=ext) - -Vulnerability 2: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 525, trigger word "url_for(": - url = url_for(path,type_=type_, label=label) - -Vulnerability 3: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 528, trigger word "url_for(": - url = url_for(path,label=label, format_=ext) - -Vulnerability 4: -File: rdflib-web/rdflib_web/lod.py - > User input at line 515, trigger word ".data": - path = 'lod.data' -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 518: path = 'lod.page' - File: rdflib-web/rdflib_web/lod.py - > Line 532: ret_MAYBE_FUNCTION_NAME = redirect(url, 303) -File: rdflib-web/rdflib_web/lod.py - > reaches line 530, trigger word "url_for(": - url = url_for(path,label=label) - -Vulnerability 5: -File: rdflib-web/rdflib_web/lod.py - > User input at line 511, trigger word "get(": - mimetype = mimeutils.best_match([mimeutils.RDFXML_MIME, mimeutils.N3_MIME, mimeutils.NTRIPLES_MIME, mimeutils.HTML_MIME], request.headers.get('Accept')) -Reassigned in: - File: rdflib-web/rdflib_web/lod.py - > Line 516: ext = '.' + mimeutils.mime_to_format(mimetype) - File: rdflib-web/rdflib_web/lod.py - > Line 519: ext = '' - File: rdflib-web/rdflib_web/lod.py - > Line 523: url = url_for(path,type_=type_, label=label, format_=ext) - File: rdflib-web/rdflib_web/lod.py - > Line 525: url = url_for(path,type_=type_, label=label) - File: rdflib-web/rdflib_web/lod.py - > Line 528: url = url_for(path,label=label, format_=ext) - File: rdflib-web/rdflib_web/lod.py - > Line 530: url = url_for(path,label=label) -File: rdflib-web/rdflib_web/lod.py - > reaches line 532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url, 303) - - - -zen4ever/goose-in-flask -https://github.com/zen4ever/goose-in-flask -Entry file: goose-in-flask/application.py -Scanned: 2016-10-18 15:51:19.301484 -No vulnerabilities found. - - -thinker007/flaskr -https://github.com/thinker007/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 15:51:19.813235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FND/Flask-RoutingManifest -https://github.com/FND/Flask-RoutingManifest -Entry file: Flask-RoutingManifest/test/test_manifest.py -Scanned: 2016-10-18 15:51:21.024460 -No vulnerabilities found. - - -Fluxx/trappist -https://github.com/Fluxx/trappist -Entry file: trappist/tests/test_app.py -Scanned: 2016-10-18 15:51:23.131622 -No vulnerabilities found. - - -babymastodon/host_flask -https://github.com/babymastodon/host_flask -Entry file: host_flask/templates/wsgi/template.py -Scanned: 2016-10-18 15:51:24.099628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cirode/test_flask_app -https://github.com/cirode/test_flask_app -Entry file: None -Scanned: 2016-10-18 15:51:25.081133 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cirode/test_flask_app. - -Opentaste/tiramisu-homepage -https://github.com/Opentaste/tiramisu-homepage -Entry file: tiramisu-homepage/libs/flask/app.py -Scanned: 2016-10-18 15:51:26.060518 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fogleman/Boggle -https://github.com/fogleman/Boggle -Entry file: Boggle/__init__.py -Scanned: 2016-10-18 15:51:26.581864 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drnlm/Sutekh-Web -https://github.com/drnlm/Sutekh-Web -Entry file: Sutekh-Web/sutekhweb.py -Scanned: 2016-10-18 15:51:29.059539 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hickford/footballer-or-pasta -https://github.com/hickford/footballer-or-pasta -Entry file: footballer-or-pasta/app.py -Scanned: 2016-10-18 15:51:32.095993 -No vulnerabilities found. - - -mahmoudhossam/blog -https://github.com/mahmoudhossam/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-18 15:51:34.589333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -polera/practical_python_deployments -https://github.com/polera/practical_python_deployments -Entry file: practical_python_deployments/app.py -Scanned: 2016-10-18 15:51:35.104446 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eamonbanta/simple_calendar -https://github.com/eamonbanta/simple_calendar -Entry file: simple_calendar/index.py -Scanned: 2016-10-18 15:51:40.068987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flask-admin/flask-admin -https://github.com/flask-admin/flask-admin -Entry file: flask-admin/flask_admin/tests/test_form_upload.py -Scanned: 2016-10-18 15:51:55.628295 -No vulnerabilities found. - - -maxcountryman/flask-login -https://github.com/maxcountryman/flask-login -Entry file: flask-login/test_login.py -Scanned: 2016-10-18 15:51:58.876724 -Vulnerability 1: -File: flask-login/flask_login/login_manager.py - > User input at line 393, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: flask-login/flask_login/login_manager.py - > reaches line 412, trigger word "set_cookie(": - response.set_cookie(cookie_name,value=data, expires=expires, domain=domain, path=path, secure=secure, httponly=httponly) - - - -mattupstate/flask-security -https://github.com/mattupstate/flask-security -Entry file: flask-security/tests/conftest.py -Scanned: 2016-10-18 15:52:03.679096 -No vulnerabilities found. - - -jfinkels/flask-restless -https://github.com/jfinkels/flask-restless -Entry file: flask-restless/examples/clients/jquery/__main__.py -Scanned: 2016-10-18 15:52:10.099936 -No vulnerabilities found. - - -lepture/flask-wtf -https://github.com/lepture/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-18 15:52:14.211776 -No vulnerabilities found. - - -smurfix/flask-script -https://github.com/smurfix/flask-script -Entry file: flask-script/tests.py -Scanned: 2016-10-18 15:52:14.702820 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-mail -https://github.com/mattupstate/flask-mail -Entry file: flask-mail/tests.py -Scanned: 2016-10-18 15:52:15.239642 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jarus/flask-testing -https://github.com/jarus/flask-testing -Entry file: flask-testing/examples/twill_site/todos/__init__.py -Scanned: 2016-10-18 15:52:17.651773 -No vulnerabilities found. - - -jpvanhal/flask-split -https://github.com/jpvanhal/flask-split -Entry file: flask-split/tests/__init__.py -Scanned: 2016-10-18 15:52:18.146965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyllstromk/Flask-WhooshAlchemy -https://github.com/gyllstromk/Flask-WhooshAlchemy -Entry file: Flask-WhooshAlchemy/test/test_all.py -Scanned: 2016-10-18 15:52:19.892859 -No vulnerabilities found. - - -dormouse/Flask_Docs_ZhCn -https://github.com/dormouse/Flask_Docs_ZhCn -Entry file: Flask_Docs_ZhCn/flask/sessions.py -Scanned: 2016-10-18 15:52:26.967713 -No vulnerabilities found. - - -mattupstate/flask-social-example -https://github.com/mattupstate/flask-social-example -Entry file: flask-social-example/app/__init__.py -Scanned: 2016-10-18 15:52:27.468151 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dplepage/flask-raptor -https://github.com/dplepage/flask-raptor -Entry file: flask-raptor/tests.py -Scanned: 2016-10-18 15:52:30.082713 -No vulnerabilities found. - - -mdipierro/gluino -https://github.com/mdipierro/gluino -Entry file: gluino/flask_example.py -Scanned: 2016-10-18 15:52:31.582653 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lanius/flask-mitten -https://github.com/lanius/flask-mitten -Entry file: flask-mitten/example/app.py -Scanned: 2016-10-18 15:52:33.187419 -No vulnerabilities found. - - -iwanbk/flasktor -https://github.com/iwanbk/flasktor -Entry file: flasktor/flasktor.py -Scanned: 2016-10-18 15:52:33.729556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelnovello/Flaskbook -https://github.com/rafaelnovello/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-18 15:52:34.252095 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benselme/flask-makotemplates -https://github.com/benselme/flask-makotemplates -Entry file: flask-makotemplates/tests/test_mako.py -Scanned: 2016-10-18 15:52:35.689754 -No vulnerabilities found. - - -burningion/Flask-Dotcloud -https://github.com/burningion/Flask-Dotcloud -Entry file: Flask-Dotcloud/project/webapp/app.py -Scanned: 2016-10-18 15:52:36.894854 -No vulnerabilities found. - - -jmstaley/virtualenvwrapper.flask -https://github.com/jmstaley/virtualenvwrapper.flask -Entry file: None -Scanned: 2016-10-18 15:52:37.411817 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -asciimoo/potion -https://github.com/asciimoo/potion -Entry file: potion/potion/webapp.py -Scanned: 2016-10-18 15:52:37.900754 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mgdelacroix/gist-flask -https://github.com/mgdelacroix/gist-flask -Entry file: gist-flask/gist-flask.py -Scanned: 2016-10-18 15:52:39.217709 -No vulnerabilities found. - - -radiosilence/Flask-Suave -https://github.com/radiosilence/Flask-Suave -Entry file: None -Scanned: 2016-10-18 15:52:39.722694 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/radiosilence/Flask-Suave. - -synchrone/skyms -https://github.com/synchrone/skyms -Entry file: skyms/skyms/app.py -Scanned: 2016-10-18 15:52:40.709211 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ngilbert/flask_blog -https://github.com/ngilbert/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-18 15:52:56.165504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jason2506/flask-reqarg -https://github.com/jason2506/flask-reqarg -Entry file: flask-reqarg/tests/test_reqarg.py -Scanned: 2016-10-18 15:53:01.199461 -No vulnerabilities found. - - -maskota/flask-starter -https://github.com/maskota/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-18 15:53:04.745450 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mateo41/simpleRest -https://github.com/mateo41/simpleRest -Entry file: simpleRest/sdge_rest.py -Scanned: 2016-10-18 15:53:15.947078 -No vulnerabilities found. - - -ghallberg/stuffster -https://github.com/ghallberg/stuffster -Entry file: stuffster/stuffster.py -Scanned: 2016-10-18 15:53:16.473241 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robin-wittler/easypeasy -https://github.com/robin-wittler/easypeasy -Entry file: easypeasy/blog.py -Scanned: 2016-10-18 15:53:18.506627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonyblundell/socialdump -https://github.com/tonyblundell/socialdump -Entry file: socialdump/socialdump.py -Scanned: 2016-10-18 15:53:20.517734 -No vulnerabilities found. - - -samalba/geventwebsocket-on-dotcloud -https://github.com/samalba/geventwebsocket-on-dotcloud -Entry file: geventwebsocket-on-dotcloud/app.py -Scanned: 2016-10-18 15:53:28.241133 -No vulnerabilities found. - - -FND/statusq -https://github.com/FND/statusq -Entry file: statusq/statusq/__init__.py -Scanned: 2016-10-18 15:53:29.583087 -No vulnerabilities found. - - -octaflop/mrna -https://github.com/octaflop/mrna -Entry file: mrna/mrna/app.py -Scanned: 2016-10-18 15:53:30.088181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jasonmc/Tweets-GAE-app -https://github.com/jasonmc/Tweets-GAE-app -Entry file: Tweets-GAE-app/libs/flask/app.py -Scanned: 2016-10-18 15:53:30.603963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gcollazo/bcapi -https://github.com/gcollazo/bcapi -Entry file: bcapi/bcapi.py -Scanned: 2016-10-18 15:53:31.127784 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EtnaTraining/todolist-python-server -https://github.com/EtnaTraining/todolist-python-server -Entry file: todolist-python-server/server.py -Scanned: 2016-10-18 15:53:32.156836 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simakazi/webcarcollection -https://github.com/simakazi/webcarcollection -Entry file: webcarcollection/webcarcollection/__init__.py -Scanned: 2016-10-18 15:53:32.765203 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guzelgoz/hezenhotel -https://github.com/guzelgoz/hezenhotel -Entry file: hezenhotel/hezenhotel.py -Scanned: 2016-10-18 15:53:39.356134 -No vulnerabilities found. - - -hansonkd/FlaskBootstrapSecurity -https://github.com/hansonkd/FlaskBootstrapSecurity -Entry file: None -Scanned: 2016-10-18 15:53:40.901729 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hansonkd/FlaskBootstrapSecurity. - -playpauseandstop/Flask-Dropbox -https://github.com/playpauseandstop/Flask-Dropbox -Entry file: Flask-Dropbox/testapp/app.py -Scanned: 2016-10-18 15:53:43.241368 -No vulnerabilities found. - - -RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask -https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask -Entry file: None -Scanned: 2016-10-18 15:53:43.741876 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RobSpectre/Twilio-Hackpack-for-Heroku-and-Flask. - -lmeunier/flaskup -https://github.com/lmeunier/flaskup -Entry file: flaskup/flaskup/__init__.py -Scanned: 2016-10-18 15:53:44.775086 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajford/flask-sendmail -https://github.com/ajford/flask-sendmail -Entry file: flask-sendmail/tests.py -Scanned: 2016-10-18 15:53:46.261954 -No vulnerabilities found. - - -playpauseandstop/Flask-LazyViews -https://github.com/playpauseandstop/Flask-LazyViews -Entry file: None -Scanned: 2016-10-18 15:53:46.780278 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playpauseandstop/Flask-LazyViews. - -elmcitylabs/ECL-Facebook -https://github.com/elmcitylabs/ECL-Facebook -Entry file: ECL-Facebook/examples/flask_example/example_app.py -Scanned: 2016-10-18 15:53:49.146378 -No vulnerabilities found. - - -tokuda109/flask-docs-ja -https://github.com/tokuda109/flask-docs-ja -Entry file: flask-docs-ja/setup.py -Scanned: 2016-10-18 15:53:50.185683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelnovello/Flaskbook -https://github.com/rafaelnovello/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-18 15:54:00.162724 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benselme/flask-makotemplates -https://github.com/benselme/flask-makotemplates -Entry file: flask-makotemplates/tests/test_mako.py -Scanned: 2016-10-18 15:54:06.608853 -No vulnerabilities found. - - -joealcorn/PyPaste -https://github.com/joealcorn/PyPaste -Entry file: PyPaste/PyPaste/__init__.py -Scanned: 2016-10-18 15:54:12.154131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wooptoo/flask-seed -https://github.com/wooptoo/flask-seed -Entry file: flask-seed/app.py -Scanned: 2016-10-18 15:54:16.395806 -Vulnerability 1: -File: flask-seed/app.py - > User input at line 67, trigger word "form[": - user = request.form['name'] -Reassigned in: - File: flask-seed/app.py - > Line 73: d = 'name''email'useremail - File: flask-seed/app.py - > Line 75: d = 'error''user exists' -File: flask-seed/app.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(d) - -Vulnerability 2: -File: flask-seed/app.py - > User input at line 68, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-seed/app.py - > Line 73: d = 'name''email'useremail - File: flask-seed/app.py - > Line 75: d = 'error''user exists' -File: flask-seed/app.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(d) - - - -fanzeyi/wobbuffet -https://github.com/fanzeyi/wobbuffet -Entry file: wobbuffet/wobbuffet.py -Scanned: 2016-10-18 15:54:19.360274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -axil/flask-test -https://github.com/axil/flask-test -Entry file: flask-test/hello.py -Scanned: 2016-10-18 15:54:29.078850 -No vulnerabilities found. - - -higumachan/flask_twitter -https://github.com/higumachan/flask_twitter -Entry file: flask_twitter/example/app.py -Scanned: 2016-10-18 15:54:30.441289 -No vulnerabilities found. - - -dtotheb/Flask-Control -https://github.com/dtotheb/Flask-Control -Entry file: Flask-Control/FlaskControl.py -Scanned: 2016-10-18 15:54:33.028376 -Vulnerability 1: -File: Flask-Control/FlaskControl.py - > User input at line 30, trigger word "get(": - pid = request.args.get('pid') -Reassigned in: - File: Flask-Control/FlaskControl.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(url_for('procs',p=pid)) -File: Flask-Control/FlaskControl.py - > reaches line 31, trigger word "subprocess.call(": - subprocess.call(['kill', pid]) - - - -djworth/flask-sessions -https://github.com/djworth/flask-sessions -Entry file: flask-sessions/web.py -Scanned: 2016-10-18 15:54:33.545798 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yoshiki256/flask_bbs -https://github.com/yoshiki256/flask_bbs -Entry file: flask_bbs/flaskr.py -Scanned: 2016-10-18 15:54:34.803193 -No vulnerabilities found. - - -robotment/flask-twitter -https://github.com/robotment/flask-twitter -Entry file: flask-twitter/twitter/__init__.py -Scanned: 2016-10-18 15:54:35.315487 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nickah/Flask-Blog -https://github.com/nickah/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-18 15:54:35.808164 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulbarbu/flask-upload -https://github.com/paulbarbu/flask-upload -Entry file: flask-upload/index.py -Scanned: 2016-10-18 15:54:36.304308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zwass/Heroku-Flask-Starter -https://github.com/zwass/Heroku-Flask-Starter -Entry file: Heroku-Flask-Starter/app.py -Scanned: 2016-10-18 15:54:41.983672 -No vulnerabilities found. - - -aparrish/Simple-Flask-Example -https://github.com/aparrish/Simple-Flask-Example -Entry file: Simple-Flask-Example/concord.py -Scanned: 2016-10-18 15:54:42.516231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benbenben1010/flask-shark-experiment -https://github.com/benbenben1010/flask-shark-experiment -Entry file: flask-shark-experiment/src/rooms.py -Scanned: 2016-10-18 15:54:48.965826 -No vulnerabilities found. - - -xlevus/appengine-flask-template -https://github.com/xlevus/appengine-flask-template -Entry file: appengine-flask-template/web.py -Scanned: 2016-10-18 15:54:50.190852 -No vulnerabilities found. - - -30loops/flask-on-30loops -https://github.com/30loops/flask-on-30loops -Entry file: flask-on-30loops/hello.py -Scanned: 2016-10-18 15:54:51.387530 -No vulnerabilities found. - - -melpomene/Berlin-Books-Flask -https://github.com/melpomene/Berlin-Books-Flask -Entry file: Berlin-Books-Flask/main.py -Scanned: 2016-10-18 15:54:51.899167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mateo41/simpleRest -https://github.com/mateo41/simpleRest -Entry file: simpleRest/sdge_rest.py -Scanned: 2016-10-18 15:54:53.572352 -No vulnerabilities found. - - -samalba/geventwebsocket-on-dotcloud -https://github.com/samalba/geventwebsocket-on-dotcloud -Entry file: geventwebsocket-on-dotcloud/app.py -Scanned: 2016-10-18 15:54:54.777585 -No vulnerabilities found. - - -yoshiki256/flaskr_on_fluxflex -https://github.com/yoshiki256/flaskr_on_fluxflex -Entry file: flaskr_on_fluxflex/flaskr.py -Scanned: 2016-10-18 15:54:56.087621 -No vulnerabilities found. - - -rmasters/mdpages -https://github.com/rmasters/mdpages -Entry file: mdpages/mdpages.py -Scanned: 2016-10-18 15:54:57.093691 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmihailenco/ndbunq-example -https://github.com/vmihailenco/ndbunq-example -Entry file: ndbunq-example/app/app.py -Scanned: 2016-10-18 15:55:01.305588 -No vulnerabilities found. - - -gofetch/fetchweb -https://github.com/gofetch/fetchweb -Entry file: fetchweb/fetchweb/__init__.py -Scanned: 2016-10-18 15:55:07.198885 -Vulnerability 1: -File: fetchweb/fetchweb/views.py - > User input at line 144, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: fetchweb/fetchweb/views.py - > Line 147: filename = secure_filename(file.filename) -File: fetchweb/fetchweb/views.py - > reaches line 148, trigger word "flash(": - flash('uploaded file: %s' % filename) - -Vulnerability 2: -File: fetchweb/fetchweb/views.py - > User input at line 145, trigger word "form[": - url = request.form['torrent-url'] -File: fetchweb/fetchweb/views.py - > reaches line 150, trigger word "flash(": - flash('uploaded url: %s' % url) - - - -mygulamali/Geodesics -https://github.com/mygulamali/Geodesics -Entry file: Geodesics/geodesics.py -Scanned: 2016-10-18 15:55:13.573674 -No vulnerabilities found. - - -vr3v3n/TODO -https://github.com/vr3v3n/TODO -Entry file: TODO/todo.py -Scanned: 2016-10-18 15:55:17.413098 -No vulnerabilities found. - - -robertberry/rbrt-blog -https://github.com/robertberry/rbrt-blog -Entry file: rbrt-blog/blog.py -Scanned: 2016-10-18 15:55:17.931866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yoshiki256/shingeki_mederu_python -https://github.com/yoshiki256/shingeki_mederu_python -Entry file: shingeki_mederu_python/shingeki.py -Scanned: 2016-10-18 15:55:18.416435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjmeyer/quincy -https://github.com/cjmeyer/quincy -Entry file: None -Scanned: 2016-10-18 15:55:19.394073 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cjmeyer/quincy. - -rdallasgray/archie-webservice -https://github.com/rdallasgray/archie-webservice -Entry file: archie-webservice/archie/__init__.py -Scanned: 2016-10-18 15:55:34.300077 -No vulnerabilities found. - - -swinton/Closest-UK-City -https://github.com/swinton/Closest-UK-City -Entry file: Closest-UK-City/webapp.py -Scanned: 2016-10-18 15:55:34.820115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jamalzkhan/dropshare -https://github.com/jamalzkhan/dropshare -Entry file: dropshare/app.py -Scanned: 2016-10-18 15:55:35.381976 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flyingclimber/LegalTally -https://github.com/flyingclimber/LegalTally -Entry file: LegalTally/legaltally.py -Scanned: 2016-10-18 15:55:35.878538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playpauseandstop/Flask-Dropbox -https://github.com/playpauseandstop/Flask-Dropbox -Entry file: Flask-Dropbox/testapp/app.py -Scanned: 2016-10-18 15:55:39.993536 -No vulnerabilities found. - - -jpvanhal/flask-basicauth -https://github.com/jpvanhal/flask-basicauth -Entry file: flask-basicauth/test_basicauth.py -Scanned: 2016-10-18 15:55:41.831101 -No vulnerabilities found. - - -mattupstate/flask-negotiate -https://github.com/mattupstate/flask-negotiate -Entry file: flask-negotiate/tests.py -Scanned: 2016-10-18 15:55:43.180171 -No vulnerabilities found. - - -ajford/flask-sendmail -https://github.com/ajford/flask-sendmail -Entry file: flask-sendmail/tests.py -Scanned: 2016-10-18 15:55:44.684637 -No vulnerabilities found. - - -dileeshvar/flask -https://github.com/dileeshvar/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 15:55:53.068883 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jpvanhal/flask-xuacompatible -https://github.com/jpvanhal/flask-xuacompatible -Entry file: flask-xuacompatible/flask_xuacompatible.py -Scanned: 2016-10-18 15:55:54.354197 -No vulnerabilities found. - - -ihor/FlaskTest -https://github.com/ihor/FlaskTest -Entry file: FlaskTest/FileShare/app.py -Scanned: 2016-10-18 15:55:55.810512 -No vulnerabilities found. - - -mrigor/url-shortener -https://github.com/mrigor/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-18 15:55:56.323435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gumho/minimal-flask-gae-template -https://github.com/gumho/minimal-flask-gae-template -Entry file: minimal-flask-gae-template/packages/flask/sessions.py -Scanned: 2016-10-18 15:55:56.857076 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jamesward/hello-python-flask -https://github.com/jamesward/hello-python-flask -Entry file: hello-python-flask/web.py -Scanned: 2016-10-18 15:55:58.080216 -No vulnerabilities found. - - -khanhnguyenqk/flask-example -https://github.com/khanhnguyenqk/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 15:56:06.087269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fnava621/flask-blog -https://github.com/fnava621/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 15:56:16.122693 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -gkoberger/gkoberger-flask -https://github.com/gkoberger/gkoberger-flask -Entry file: gkoberger-flask/app.py -Scanned: 2016-10-18 15:56:25.698850 -No vulnerabilities found. - - -teerytko/nokiantorpedo-flask -https://github.com/teerytko/nokiantorpedo-flask -Entry file: nokiantorpedo-flask/src/userapp.py -Scanned: 2016-10-18 15:56:26.671434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -higumachan/ladytile_flask -https://github.com/higumachan/ladytile_flask -Entry file: ladytile_flask/app.py -Scanned: 2016-10-18 15:56:27.171593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pewpewarrows/Prometheus-Flask -https://github.com/Pewpewarrows/Prometheus-Flask -Entry file: None -Scanned: 2016-10-18 15:56:27.680256 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pewpewarrows/Prometheus-Flask. - -jrheard/task-flask -https://github.com/jrheard/task-flask -Entry file: task-flask/task-flask/app.py -Scanned: 2016-10-18 15:56:29.924936 -No vulnerabilities found. - - -alekzvik/testing-fs -https://github.com/alekzvik/testing-fs -Entry file: testing-fs/simple_app.py -Scanned: 2016-10-18 15:56:36.160861 -No vulnerabilities found. - - -yefim/TwilioPusherFlask -https://github.com/yefim/TwilioPusherFlask -Entry file: TwilioPusherFlask/app.py -Scanned: 2016-10-18 15:56:48.793429 -No vulnerabilities found. - - -rduplain/flask-svg-example -https://github.com/rduplain/flask-svg-example -Entry file: flask-svg-example/app.py -Scanned: 2016-10-18 15:56:50.048791 -No vulnerabilities found. - - -nulogy/competition-flask-bootstrap -https://github.com/nulogy/competition-flask-bootstrap -Entry file: competition-flask-bootstrap/app.py -Scanned: 2016-10-18 15:56:51.257086 -No vulnerabilities found. - - -pythonclt/cltwit -https://github.com/pythonclt/cltwit -Entry file: cltwit/minitwit.py -Scanned: 2016-10-18 15:56:52.602795 -No vulnerabilities found. - - -mikejarrett/company-time-clock -https://github.com/mikejarrett/company-time-clock -Entry file: company-time-clock/timeclock/webapp/__init__.py -Scanned: 2016-10-18 15:56:54.145566 -No vulnerabilities found. - - -lyaunzbe/Foo -https://github.com/lyaunzbe/Foo -Entry file: Foo/foo.py -Scanned: 2016-10-18 15:56:54.664916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fnava621/heroku-flaskstyle-test -https://github.com/fnava621/heroku-flaskstyle-test -Entry file: heroku-flaskstyle-test/app.py -Scanned: 2016-10-18 15:56:55.223374 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: heroku-flaskstyle-test/.#app.py - -gofetch/fetchweb -https://github.com/gofetch/fetchweb -Entry file: fetchweb/fetchweb/__init__.py -Scanned: 2016-10-18 15:56:57.079190 -Vulnerability 1: -File: fetchweb/fetchweb/views.py - > User input at line 144, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: fetchweb/fetchweb/views.py - > Line 147: filename = secure_filename(file.filename) -File: fetchweb/fetchweb/views.py - > reaches line 148, trigger word "flash(": - flash('uploaded file: %s' % filename) - -Vulnerability 2: -File: fetchweb/fetchweb/views.py - > User input at line 145, trigger word "form[": - url = request.form['torrent-url'] -File: fetchweb/fetchweb/views.py - > reaches line 150, trigger word "flash(": - flash('uploaded url: %s' % url) - - - -rDaffa/Firstlight-Alarm -https://github.com/rDaffa/Firstlight-Alarm -Entry file: Firstlight-Alarm/app.py -Scanned: 2016-10-18 15:56:58.278519 -No vulnerabilities found. - - -metllord/stumble_score_py -https://github.com/metllord/stumble_score_py -Entry file: stumble_score_py/web.py -Scanned: 2016-10-18 15:56:58.775606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tetsuharu/tawlkbox -https://github.com/tetsuharu/tawlkbox -Entry file: tawlkbox/__init__.py -Scanned: 2016-10-18 15:57:00.069672 -No vulnerabilities found. - - -mbr/flask-bootstrap -https://github.com/mbr/flask-bootstrap -Entry file: flask-bootstrap/sample_application/__init__.py -Scanned: 2016-10-18 15:57:06.829018 -No vulnerabilities found. - - -closeio/flask-mongorest -https://github.com/closeio/flask-mongorest -Entry file: flask-mongorest/example/app.py -Scanned: 2016-10-18 15:57:09.923748 -No vulnerabilities found. - - -mattupstate/flask-principal -https://github.com/mattupstate/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-18 15:57:10.421449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dansimau/flask-bootstrap -https://github.com/dansimau/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-18 15:57:12.517745 -No vulnerabilities found. - - -thrisp/flask-celery-example -https://github.com/thrisp/flask-celery-example -Entry file: flask-celery-example/app.py -Scanned: 2016-10-18 15:57:13.021878 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jhezjkp/flask-principal -https://github.com/jhezjkp/flask-principal -Entry file: flask-principal/tests/test_principal.py -Scanned: 2016-10-18 15:57:13.554438 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yefim/flask-heroku-sample -https://github.com/yefim/flask-heroku-sample -Entry file: flask-heroku-sample/app.py -Scanned: 2016-10-18 15:57:14.778429 -No vulnerabilities found. - - -whichlight/flask-tweepy-oauth -https://github.com/whichlight/flask-tweepy-oauth -Entry file: flask-tweepy-oauth/server.py -Scanned: 2016-10-18 15:57:15.272600 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kofrasa/flask-apputils -https://github.com/kofrasa/flask-apputils -Entry file: flask-apputils/tests/routing/__init__.py -Scanned: 2016-10-18 15:57:16.259208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/heroku-flask-postgresql-template -https://github.com/cpdean/heroku-flask-postgresql-template -Entry file: heroku-flask-postgresql-template/app.py -Scanned: 2016-10-18 15:57:17.482190 -No vulnerabilities found. - - -asascience-open/Flask_Social_Auth -https://github.com/asascience-open/Flask_Social_Auth -Entry file: Flask_Social_Auth/flask_social_auth/__init__.py -Scanned: 2016-10-18 15:57:18.980891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aldryncore/webservices -https://github.com/aldryncore/webservices -Entry file: webservices/examples/flask_app/app.py -Scanned: 2016-10-18 15:57:27.331095 -No vulnerabilities found. - - -mattupstate/flask-stache -https://github.com/mattupstate/flask-stache -Entry file: flask-stache/example/__init__.py -Scanned: 2016-10-18 15:57:28.670013 -No vulnerabilities found. - - -rdegges/flask-skel -https://github.com/rdegges/flask-skel -Entry file: flask-skel/skel/__init__.py -Scanned: 2016-10-18 15:57:29.949948 -No vulnerabilities found. - - -svieira/Flask-HipPocket -https://github.com/svieira/Flask-HipPocket -Entry file: Flask-HipPocket/flask_hippocket/pocket.py -Scanned: 2016-10-18 15:57:32.611292 -Vulnerability 1: -File: Flask-HipPocket/flask_hippocket/tests/mapper.py - > User input at line 38, trigger word "get(": - rv = tc.get('/') -File: Flask-HipPocket/flask_hippocket/tests/mapper.py - > reaches line 39, trigger word "url_for(": - self.assertTrue('The url for url_for('endpoint_name') is /' in rv.data.decode('utf-8')) - - - -honza/oauth-service -https://github.com/honza/oauth-service -Entry file: oauth-service/frontend/app.py -Scanned: 2016-10-18 15:57:36.939990 -No vulnerabilities found. - - -albertmatyi/flaskgaellery -https://github.com/albertmatyi/flaskgaellery -Entry file: flaskgaellery/flask/sessions.py -Scanned: 2016-10-18 15:57:37.467865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dougwt/ilmd-flask -https://github.com/dougwt/ilmd-flask -Entry file: ilmd-flask/app/__init__.py -Scanned: 2016-10-18 15:57:53.397218 -No vulnerabilities found. - - -dpflug/flask-barcodes -https://github.com/dpflug/flask-barcodes -Entry file: flask-barcodes/barcodes/__init__.py -Scanned: 2016-10-18 15:57:54.622386 -No vulnerabilities found. - - -feltnerm/flask-boilerplate -https://github.com/feltnerm/flask-boilerplate -Entry file: flask-boilerplate/apps/__init__.py -Scanned: 2016-10-18 15:57:56.617107 -No vulnerabilities found. - - -Dorianux/flask-yafowil -https://github.com/Dorianux/flask-yafowil -Entry file: flask-yafowil/example/srv.py -Scanned: 2016-10-18 15:57:58.353727 -No vulnerabilities found. - - -linyupark/flaskapps -https://github.com/linyupark/flaskapps -Entry file: flaskapps/example/__init__.py -Scanned: 2016-10-18 15:57:59.607751 -No vulnerabilities found. - - -tophatmonocle/lti_tool_provider_example_flask -https://github.com/tophatmonocle/lti_tool_provider_example_flask -Entry file: lti_tool_provider_example_flask/tool_provider.py -Scanned: 2016-10-18 15:58:00.995745 -No vulnerabilities found. - - -bradmontgomery/mempy-flask-tutorial -https://github.com/bradmontgomery/mempy-flask-tutorial -Entry file: mempy-flask-tutorial/hello.py -Scanned: 2016-10-18 15:58:02.371320 -No vulnerabilities found. - - -jaav/flaskbone1 -https://github.com/jaav/flaskbone1 -Entry file: flaskbone1/src/flask/sessions.py -Scanned: 2016-10-18 15:58:03.350542 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grimpy/lxcweb -https://github.com/grimpy/lxcweb -Entry file: lxcweb/lxcweb.py -Scanned: 2016-10-18 15:58:05.352839 -No vulnerabilities found. - - -tophatmonocle/lti_tool_consumer_example_flask -https://github.com/tophatmonocle/lti_tool_consumer_example_flask -Entry file: lti_tool_consumer_example_flask/tool_consumer.py -Scanned: 2016-10-18 15:58:07.170756 -No vulnerabilities found. - - -mbowcock/flask-rest -https://github.com/mbowcock/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-18 15:58:07.700698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -newsapps/flask-bakery -https://github.com/newsapps/flask-bakery -Entry file: flask-bakery/app.py -Scanned: 2016-10-18 15:58:12.048409 -No vulnerabilities found. - - -mnbbrown/flask-sample -https://github.com/mnbbrown/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-18 15:58:12.585657 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmihailenco/flask-hello -https://github.com/vmihailenco/flask-hello -Entry file: flask-hello/blibb_api/hello.py -Scanned: 2016-10-18 15:58:13.791634 -No vulnerabilities found. - - -mbr/flask-obscurity -https://github.com/mbr/flask-obscurity -Entry file: flask-obscurity/tests/test_extension.py -Scanned: 2016-10-18 15:58:15.144180 -No vulnerabilities found. - - -yiwinking/flask_project -https://github.com/yiwinking/flask_project -Entry file: flask_project/flaskr.py -Scanned: 2016-10-18 15:58:16.350870 -No vulnerabilities found. - - -bdelbosc/restapp -https://github.com/bdelbosc/restapp -Entry file: restapp/restapp/__init__.py -Scanned: 2016-10-18 15:58:16.858589 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguel250/miguelpz-core -https://github.com/miguel250/miguelpz-core -Entry file: miguelpz-core/app/config/__init__.py -Scanned: 2016-10-18 15:58:18.336587 -No vulnerabilities found. - - -rduplain/flask-svg-example -https://github.com/rduplain/flask-svg-example -Entry file: flask-svg-example/app.py -Scanned: 2016-10-18 15:58:19.535446 -No vulnerabilities found. - - -sergray/Flask-MailErrors -https://github.com/sergray/Flask-MailErrors -Entry file: Flask-MailErrors/tests.py -Scanned: 2016-10-18 15:58:21.309177 -No vulnerabilities found. - - -kalimatas/writedownme -https://github.com/kalimatas/writedownme -Entry file: writedownme/flask/sessions.py -Scanned: 2016-10-18 15:58:26.828425 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dbrgn/schlagzeilengenerator -https://github.com/dbrgn/schlagzeilengenerator -Entry file: schlagzeilengenerator/app/app.py -Scanned: 2016-10-18 15:58:30.040528 -No vulnerabilities found. - - -martyanov/minitwit -https://github.com/martyanov/minitwit -Entry file: minitwit/minitwit.py -Scanned: 2016-10-18 15:58:32.839396 -No vulnerabilities found. - - -sethtrain/buntin.org -https://github.com/sethtrain/buntin.org -Entry file: None -Scanned: 2016-10-18 15:58:33.439287 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -karanlyons/bestthing -https://github.com/karanlyons/bestthing -Entry file: bestthing/bestthing/__init__.py -Scanned: 2016-10-18 15:58:36.443181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sneeu/board -https://github.com/sneeu/board -Entry file: board/board.py -Scanned: 2016-10-18 15:58:38.752893 -No vulnerabilities found. - - -mfa/weight-app -https://github.com/mfa/weight-app -Entry file: weight-app/weight/main.py -Scanned: 2016-10-18 15:58:52.804503 -Vulnerability 1: -File: weight-app/weight/views.py - > User input at line 43, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: weight-app/weight/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: weight-app/weight/views.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('.index')) - -Vulnerability 2: -File: weight-app/weight/views.py - > User input at line 43, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: weight-app/weight/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: weight-app/weight/views.py - > reaches line 44, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('.index')) - -Vulnerability 3: -File: weight-app/weight/views.py - > User input at line 103, trigger word "get(": - wid = request.args.get('wid') -Reassigned in: - File: weight-app/weight/views.py - > Line 107: elem = Weight.query.get(wid) - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 138: elem = Weight(weight=request.form['weight']) - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - -Vulnerability 4: -File: weight-app/weight/views.py - > User input at line 107, trigger word "get(": - elem = Weight.query.get(wid) -Reassigned in: - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 138: elem = Weight(weight=request.form['weight']) - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - -Vulnerability 5: -File: weight-app/weight/views.py - > User input at line 138, trigger word "form[": - elem = Weight(weight=request.form['weight']) -Reassigned in: - File: weight-app/weight/views.py - > Line 107: elem = Weight.query.get(wid) - File: weight-app/weight/views.py - > Line 123: form = WeightForm(obj=elem) - File: weight-app/weight/views.py - > Line 129: form = WeightForm() - File: weight-app/weight/views.py - > Line 166: form.scale_name.data = elem.scale_name - File: weight-app/weight/views.py - > Line 170: form.scale_name.data = u1.default_scale_name - File: weight-app/weight/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = render_template('weight_edit.html',form=form, wrange=range(wmin, wmax)) - File: weight-app/weight/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('weight_list.html',elements=elements.items, paginate=elements, show_comment=False) -File: weight-app/weight/views.py - > reaches line 154, trigger word "flash(": - flash('Data saved [%s with %s]' % (elem.wdate, elem.weight), 'info') - - - -omerk/spotify-http-control -https://github.com/omerk/spotify-http-control -Entry file: spotify-http-control/control.py -Scanned: 2016-10-18 15:58:55.055338 -No vulnerabilities found. - - -dsosby/pycanoed -https://github.com/dsosby/pycanoed -Entry file: pycanoed/app.py -Scanned: 2016-10-18 15:58:58.949512 -No vulnerabilities found. - - -Maplecroft/Ansel -https://github.com/Maplecroft/Ansel -Entry file: Ansel/app.py -Scanned: 2016-10-18 15:59:00.785235 -No vulnerabilities found. - - -zxpower/reflaskr -https://github.com/zxpower/reflaskr -Entry file: reflaskr/app.py -Scanned: 2016-10-18 15:59:02.825493 -No vulnerabilities found. - - -danlamanna/Jackhammer-Gateway -https://github.com/danlamanna/Jackhammer-Gateway -Entry file: Jackhammer-Gateway/api.py -Scanned: 2016-10-18 15:59:04.045029 -No vulnerabilities found. - - -mattupstate/flask-rq -https://github.com/mattupstate/flask-rq -Entry file: flask-rq/tests/flaskrq_tests.py -Scanned: 2016-10-18 15:59:07.205965 -No vulnerabilities found. - - -klen/Flask-Foundation -https://github.com/klen/Flask-Foundation -Entry file: Flask-Foundation/base/app.py -Scanned: 2016-10-18 15:59:07.761573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ib-lundgren/flask-oauthprovider -https://github.com/ib-lundgren/flask-oauthprovider -Entry file: flask-oauthprovider/examples/client.py -Scanned: 2016-10-18 15:59:08.288479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sashka/flask-googleauth -https://github.com/sashka/flask-googleauth -Entry file: flask-googleauth/flask_googleauth.py -Scanned: 2016-10-18 15:59:09.663486 -No vulnerabilities found. - - -benselme/flask-mako -https://github.com/benselme/flask-mako -Entry file: flask-mako/flask_mako.py -Scanned: 2016-10-18 15:59:13.436310 -No vulnerabilities found. - - -chriszf/flask_todolist -https://github.com/chriszf/flask_todolist -Entry file: flask_todolist/todolist/model.py -Scanned: 2016-10-18 15:59:15.618684 -No vulnerabilities found. - - -srusskih/flask-uploads -https://github.com/srusskih/flask-uploads -Entry file: flask-uploads/tests/test-uploads.py -Scanned: 2016-10-18 15:59:17.229848 -No vulnerabilities found. - - -Kozea/Flask-WeasyPrint -https://github.com/Kozea/Flask-WeasyPrint -Entry file: Flask-WeasyPrint/flask_weasyprint/tests.py -Scanned: 2016-10-18 15:59:18.700858 -No vulnerabilities found. - - -mattupstate/flask-environments -https://github.com/mattupstate/flask-environments -Entry file: flask-environments/tests/__init__.py -Scanned: 2016-10-18 15:59:19.922157 -No vulnerabilities found. - - -kofrasa/flask-apputils -https://github.com/kofrasa/flask-apputils -Entry file: flask-apputils/tests/routing/__init__.py -Scanned: 2016-10-18 15:59:20.926622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DeaconDesperado/Flask-SQLAlchemy-Example -https://github.com/DeaconDesperado/Flask-SQLAlchemy-Example -Entry file: Flask-SQLAlchemy-Example/testapp.py -Scanned: 2016-10-18 15:59:21.421331 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -closeio/flask-common -https://github.com/closeio/flask-common -Entry file: flask-common/tests/__init__.py -Scanned: 2016-10-18 15:59:26.925259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahri/flask-snooze -https://github.com/ahri/flask-snooze -Entry file: flask-snooze/tests/test_snooze.py -Scanned: 2016-10-18 15:59:28.432390 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jokull/flask-halalchemy -https://github.com/jokull/flask-halalchemy -Entry file: flask-halalchemy/test_example.py -Scanned: 2016-10-18 15:59:30.954234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kofrasa/flaskapp -https://github.com/kofrasa/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 15:59:33.464562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomasd/flask-emailactivation -https://github.com/tomasd/flask-emailactivation -Entry file: flask-emailactivation/tests/test_activation.py -Scanned: 2016-10-18 15:59:34.825373 -No vulnerabilities found. - - -asgoel/flask-twitter -https://github.com/asgoel/flask-twitter -Entry file: flask-twitter/twitter/__init__.py -Scanned: 2016-10-18 15:59:50.320465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AnIrishDuck/flask-mako-legacy -https://github.com/AnIrishDuck/flask-mako-legacy -Entry file: flask-mako-legacy/test_flask_mako.py -Scanned: 2016-10-18 15:59:55.852255 -No vulnerabilities found. - - -fdb/fliki -https://github.com/fdb/fliki -Entry file: fliki/fliki.py -Scanned: 2016-10-18 15:59:57.136471 -No vulnerabilities found. - - -lazy-coders/mt_scrapper -https://github.com/lazy-coders/mt_scrapper -Entry file: mt_scrapper/mt_scrapper.py -Scanned: 2016-10-18 16:00:02.762321 -No vulnerabilities found. - - -Senso/fiasco-flask -https://github.com/Senso/fiasco-flask -Entry file: fiasco-flask/fiasco/__init__.py -Scanned: 2016-10-18 16:00:04.191107 -Vulnerability 1: -File: fiasco-flask/fiasco/views.py - > User input at line 109, trigger word ".data": - playset = models.Playset(name=form.name.data, desc=form.description.data, owner=session['uid']) -Reassigned in: - File: fiasco-flask/fiasco/views.py - > Line 119: n_table = models.Details(playset.id, 'need', need_detail) - File: fiasco-flask/fiasco/views.py - > Line 120: o_table = models.Details(playset.id, 'object', obj_detail) - File: fiasco-flask/fiasco/views.py - > Line 121: l_table = models.Details(playset.id, 'location', loc_detail) - File: fiasco-flask/fiasco/views.py - > Line 122: r_table = models.Details(playset.id, 'relationship', rel_detail) - File: fiasco-flask/fiasco/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('new_playset.html',error=error, form=form) - File: fiasco-flask/fiasco/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: fiasco-flask/fiasco/views.py - > reaches line 131, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/edit_playset/' + str(playset.id)) - - - -encodes/flask-snippet -https://github.com/encodes/flask-snippet -Entry file: flask-snippet/app/__init__.py -Scanned: 2016-10-18 16:00:06.143422 -Vulnerability 1: -File: flask-snippet/app/users/views.py - > User input at line 35, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-snippet/app/users/views.py - > Line 40: session['user_id'] = user.id -File: flask-snippet/app/users/views.py - > reaches line 41, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -SmartViking/MaBlag -https://github.com/SmartViking/MaBlag -Entry file: MaBlag/blog.py -Scanned: 2016-10-18 16:00:07.167735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keithfancher/Flaskr -https://github.com/keithfancher/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:00:07.681809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daviddedden/flaskr -https://github.com/daviddedden/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:00:08.185584 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tophatmonocle/lti_tool_provider_example_flask -https://github.com/tophatmonocle/lti_tool_provider_example_flask -Entry file: lti_tool_provider_example_flask/tool_provider.py -Scanned: 2016-10-18 16:00:09.451931 -No vulnerabilities found. - - -filipecifali/Flask-Ping-Site -https://github.com/filipecifali/Flask-Ping-Site -Entry file: Flask-Ping-Site/flaskSite.py -Scanned: 2016-10-18 16:00:10.771404 -No vulnerabilities found. - - -DanielKinsman/flask-pyjs-jsonrpc-test -https://github.com/DanielKinsman/flask-pyjs-jsonrpc-test -Entry file: flask-pyjs-jsonrpc-test/web.py -Scanned: 2016-10-18 16:00:12.000538 -No vulnerabilities found. - - -whichlight/flask-couchdb-binary-image-labeler -https://github.com/whichlight/flask-couchdb-binary-image-labeler -Entry file: flask-couchdb-binary-image-labeler/server.py -Scanned: 2016-10-18 16:00:12.509315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tophatmonocle/lti_tool_consumer_example_flask -https://github.com/tophatmonocle/lti_tool_consumer_example_flask -Entry file: lti_tool_consumer_example_flask/tool_consumer.py -Scanned: 2016-10-18 16:00:15.399519 -No vulnerabilities found. - - -melignus/Appengine-Help-Desk -https://github.com/melignus/Appengine-Help-Desk -Entry file: Appengine-Help-Desk/app.py -Scanned: 2016-10-18 16:00:16.001706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dustinmm80/flask_test -https://github.com/dustinmm80/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-18 16:00:17.427801 -No vulnerabilities found. - - -curiousleo/kardiopraxis-flask -https://github.com/curiousleo/kardiopraxis-flask -Entry file: kardiopraxis-flask/kardiopraxis.py -Scanned: 2016-10-18 16:00:20.929185 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -encodes/flask-finance -https://github.com/encodes/flask-finance -Entry file: flask-finance/app/__init__.py -Scanned: 2016-10-18 16:00:21.429428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramin32/Flask-Template -https://github.com/ramin32/Flask-Template -Entry file: Flask-Template/project_name/__init__.py -Scanned: 2016-10-18 16:00:28.193326 -No vulnerabilities found. - - -toastercup/flask-scormcloud -https://github.com/toastercup/flask-scormcloud -Entry file: flask-scormcloud/manage.py -Scanned: 2016-10-18 16:00:31.194148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -weldan/flask_setup -https://github.com/weldan/flask_setup -Entry file: flask_setup/app.py -Scanned: 2016-10-18 16:00:34.540905 -No vulnerabilities found. - - -michellesun/flask_ms -https://github.com/michellesun/flask_ms -Entry file: flask_ms/flaskr.py -Scanned: 2016-10-18 16:00:36.318853 -No vulnerabilities found. - - -shea256/flask-project-template -https://github.com/shea256/flask-project-template -Entry file: flask-project-template/app.py -Scanned: 2016-10-18 16:00:37.877477 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-project-template/venv/lib/python2.7/genericpath.py - -Kinghack/flask-oauth-china -https://github.com/Kinghack/flask-oauth-china -Entry file: flask-oauth-china/example/facebook.py -Scanned: 2016-10-18 16:00:39.409750 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -StefanWallin/python-Flask-lab -https://github.com/StefanWallin/python-Flask-lab -Entry file: python-Flask-lab/app.py -Scanned: 2016-10-18 16:00:51.642408 -No vulnerabilities found. - - -rvause/project-base-flask -https://github.com/rvause/project-base-flask -Entry file: None -Scanned: 2016-10-18 16:00:56.625855 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rvause/project-base-flask. - -emilianox/opener -https://github.com/emilianox/opener -Entry file: opener/opener.py -Scanned: 2016-10-18 16:01:00.905335 -No vulnerabilities found. - - -oksana-slu/sqlfla -https://github.com/oksana-slu/sqlfla -Entry file: sqlfla/eventor/__init__.py -Scanned: 2016-10-18 16:01:03.413581 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -johngriffin/ldpy-api -https://github.com/johngriffin/ldpy-api -Entry file: ldpy-api/app.py -Scanned: 2016-10-18 16:01:04.907766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nryoung/Array-Size -https://github.com/nryoung/Array-Size -Entry file: Array-Size/raid.py -Scanned: 2016-10-18 16:01:08.174207 -No vulnerabilities found. - - -ciaron/pandaflask_old -https://github.com/ciaron/pandaflask_old -Entry file: pandaflask_old/pandachrome.py -Scanned: 2016-10-18 16:01:13.098843 -Vulnerability 1: -File: pandaflask_old/pandachrome.py - > User input at line 208, trigger word "get(": - title = request.form.get('title') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 217: category = Category(title=title, description=description, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 218, trigger word "flash(": - flash('successfully created new category ' + title) - -Vulnerability 2: -File: pandaflask_old/pandachrome.py - > User input at line 230, trigger word "get(": - title = request.form.get('title') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 240: project = Project(title=title, description=description, category_id=category_id, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 241, trigger word "flash(": - flash('successfully created new project ' + title + ', category ' + category_id) - -Vulnerability 3: -File: pandaflask_old/pandachrome.py - > User input at line 232, trigger word "get(": - category_id = request.form.get('category_id') -Reassigned in: - File: pandaflask_old/pandachrome.py - > Line 240: project = Project(title=title, description=description, category_id=category_id, owner_id=owner.id) -File: pandaflask_old/pandachrome.py - > reaches line 241, trigger word "flash(": - flash('successfully created new project ' + title + ', category ' + category_id) - - - -dlitvakb/MOVEapp -https://github.com/dlitvakb/MOVEapp -Entry file: MOVEapp/appserver.py -Scanned: 2016-10-18 16:01:14.094528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hvnsweeting/mtaskflask -https://github.com/hvnsweeting/mtaskflask -Entry file: mtaskflask/mtask.py -Scanned: 2016-10-18 16:01:15.348340 -No vulnerabilities found. - - -keithfancher/Stories -https://github.com/keithfancher/Stories -Entry file: Stories/stories.py -Scanned: 2016-10-18 16:01:16.559681 -No vulnerabilities found. - - -clee/boilerplate -https://github.com/clee/boilerplate -Entry file: boilerplate/boilerplate.py -Scanned: 2016-10-18 16:01:17.852833 -No vulnerabilities found. - - -t20/henhealth -https://github.com/t20/henhealth -Entry file: henhealth/hen.py -Scanned: 2016-10-18 16:01:19.643544 -No vulnerabilities found. - - -klinkin/vksunshine -https://github.com/klinkin/vksunshine -Entry file: vksunshine/vksunshine/application.py -Scanned: 2016-10-18 16:01:20.871133 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ChrisAnn/FRog -https://github.com/ChrisAnn/FRog -Entry file: FRog/FRog.py -Scanned: 2016-10-18 16:01:22.101503 -No vulnerabilities found. - - -hirish/DinnerDesignr -https://github.com/hirish/DinnerDesignr -Entry file: DinnerDesignr/dinnerDesignr.py -Scanned: 2016-10-18 16:01:22.622470 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jakecoffman/flask-tutorial -https://github.com/jakecoffman/flask-tutorial -Entry file: flask-tutorial/part 6 - databases/flaskr.py -Scanned: 2016-10-18 16:01:25.315784 -No vulnerabilities found. - - -syrusakbary/Flask-SuperAdmin -https://github.com/syrusakbary/Flask-SuperAdmin -Entry file: Flask-SuperAdmin/flask_superadmin/tests/test_model.py -Scanned: 2016-10-18 16:01:25.897576 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guotie/flaskbbs -https://github.com/guotie/flaskbbs -Entry file: flaskbbs/flaskcommon/auth/views.py -Scanned: 2016-10-18 16:01:26.394565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdegges/flask-dynamo -https://github.com/rdegges/flask-dynamo -Entry file: flask-dynamo/tests/test_manager.py -Scanned: 2016-10-18 16:01:28.719189 -No vulnerabilities found. - - -maxcountryman/flask-themes -https://github.com/maxcountryman/flask-themes -Entry file: flask-themes/tests/test-themes.py -Scanned: 2016-10-18 16:01:30.324411 -No vulnerabilities found. - - -klen/Flask-Collect -https://github.com/klen/Flask-Collect -Entry file: Flask-Collect/flask_collect/collect.py -Scanned: 2016-10-18 16:01:32.943962 -No vulnerabilities found. - - -kvesteri/flask-storage -https://github.com/kvesteri/flask-storage -Entry file: flask-storage/tests/__init__.py -Scanned: 2016-10-18 16:01:33.922668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thesteve0/openshift-mongo-flask-example -https://github.com/thesteve0/openshift-mongo-flask-example -Entry file: openshift-mongo-flask-example/wsgi/myflaskapp.py -Scanned: 2016-10-18 16:01:35.261656 -No vulnerabilities found. - - -zeraholladay/Flask-Oauth2-Example -https://github.com/zeraholladay/Flask-Oauth2-Example -Entry file: Flask-Oauth2-Example/app.py -Scanned: 2016-10-18 16:01:38.276550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mtth/kit -https://github.com/mtth/kit -Entry file: kit/examples/poller/poller/app/views.py -Scanned: 2016-10-18 16:01:45.760932 -No vulnerabilities found. - - -codecool/flask-app-structure -https://github.com/codecool/flask-app-structure -Entry file: flask-app-structure/myapp/__init__.py -Scanned: 2016-10-18 16:01:52.206490 -No vulnerabilities found. - - -DeaconDesperado/Flask-SQLAlchemy-Example -https://github.com/DeaconDesperado/Flask-SQLAlchemy-Example -Entry file: Flask-SQLAlchemy-Example/testapp.py -Scanned: 2016-10-18 16:01:55.713739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kvesteri/flask-test -https://github.com/kvesteri/flask-test -Entry file: flask-test/tests/__init__.py -Scanned: 2016-10-18 16:01:58.189543 -No vulnerabilities found. - - -ipconfiger/pyImageServer -https://github.com/ipconfiger/pyImageServer -Entry file: pyImageServer/serv.py -Scanned: 2016-10-18 16:02:05.737746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Khan/flask-wtf -https://github.com/Khan/flask-wtf -Entry file: flask-wtf/examples/recaptcha/app.py -Scanned: 2016-10-18 16:02:09.557970 -No vulnerabilities found. - - -ravenac95/flask-command -https://github.com/ravenac95/flask-command -Entry file: flask-command/tests/fixtures/factory_app.py -Scanned: 2016-10-18 16:02:10.816518 -No vulnerabilities found. - - -encodes/flask-snippet -https://github.com/encodes/flask-snippet -Entry file: flask-snippet/app/__init__.py -Scanned: 2016-10-18 16:02:16.347319 -Vulnerability 1: -File: flask-snippet/app/users/views.py - > User input at line 35, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-snippet/app/users/views.py - > Line 40: session['user_id'] = user.id -File: flask-snippet/app/users/views.py - > reaches line 41, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -vaus/Flaskyll -https://github.com/vaus/Flaskyll -Entry file: Flaskyll/scripts/flaskyll.py -Scanned: 2016-10-18 16:02:16.841351 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -christianpbrink/flaskdemo -https://github.com/christianpbrink/flaskdemo -Entry file: flaskdemo/src/flaskdemo/__init__.py -Scanned: 2016-10-18 16:02:18.058860 -No vulnerabilities found. - - -vsergeyev/flasklutskio -https://github.com/vsergeyev/flasklutskio -Entry file: flasklutskio/app.py -Scanned: 2016-10-18 16:02:19.284420 -No vulnerabilities found. - - -lb1a/flaskplay -https://github.com/lb1a/flaskplay -Entry file: flaskplay/flaskr.py -Scanned: 2016-10-18 16:02:21.671965 -No vulnerabilities found. - - -fdb/helloflask -https://github.com/fdb/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-18 16:02:22.191382 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -gparuthi/FlaskServer -https://github.com/gparuthi/FlaskServer -Entry file: FlaskServer/server.py -Scanned: 2016-10-18 16:02:25.355025 -No vulnerabilities found. - - -iambibhas/flask-blog -https://github.com/iambibhas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:02:27.373326 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -akaptur/Flask-tutorial -https://github.com/akaptur/Flask-tutorial -Entry file: Flask-tutorial/flask_app.py -Scanned: 2016-10-18 16:02:27.864958 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ihptru/Ubot-flask -https://github.com/ihptru/Ubot-flask -Entry file: Ubot-flask/ubotflask.py -Scanned: 2016-10-18 16:02:30.113137 -No vulnerabilities found. - - -alexisbellido/flask-basics -https://github.com/alexisbellido/flask-basics -Entry file: flask-basics/hello.py -Scanned: 2016-10-18 16:02:31.698771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dipsomaniac/Flask-Mixer -https://github.com/Dipsomaniac/Flask-Mixer -Entry file: Flask-Mixer/tests/__init__.py -Scanned: 2016-10-18 16:02:35.158824 -No vulnerabilities found. - - -bx2/handbag-flask -https://github.com/bx2/handbag-flask -Entry file: handbag-flask/flaskapp-template/app.py -Scanned: 2016-10-18 16:02:36.391916 -No vulnerabilities found. - - -whoeverest/NSND-Upvoting -https://github.com/whoeverest/NSND-Upvoting -Entry file: NSND-Upvoting/upvote-list.py -Scanned: 2016-10-18 16:02:39.612453 -No vulnerabilities found. - - -naudo/flask-hello-world -https://github.com/naudo/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-18 16:02:40.169971 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Smil3y/MyFlaskr -https://github.com/Smil3y/MyFlaskr -Entry file: MyFlaskr/flaskr.py -Scanned: 2016-10-18 16:02:58.401027 -No vulnerabilities found. - - -jonathancone/helloflask -https://github.com/jonathancone/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-18 16:03:00.911171 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -vicould/simple_blog -https://github.com/vicould/simple_blog -Entry file: simple_blog/blog.py -Scanned: 2016-10-18 16:03:04.450378 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rafax/flush -https://github.com/rafax/flush -Entry file: flush/flush.py -Scanned: 2016-10-18 16:03:05.949203 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fenbox/chord -https://github.com/fenbox/chord -Entry file: chord/chord.py -Scanned: 2016-10-18 16:03:09.335487 -No vulnerabilities found. - - -R2Drink2/r2drink2-server -https://github.com/R2Drink2/r2drink2-server -Entry file: None -Scanned: 2016-10-18 16:03:10.842636 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/R2Drink2/r2drink2-server. - -mafrosis/youtube-dl -https://github.com/mafrosis/youtube-dl -Entry file: youtube-dl/youtube_dl/__init__.py -Scanned: 2016-10-18 16:03:14.337181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrwilson/git-serve -https://github.com/mrwilson/git-serve -Entry file: git-serve/git_serve/app.py -Scanned: 2016-10-18 16:03:15.305176 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -allaud/Sufx -https://github.com/allaud/Sufx -Entry file: Sufx/app.py -Scanned: 2016-10-18 16:03:17.820762 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miniatureape/etsy-api-demo -https://github.com/miniatureape/etsy-api-demo -Entry file: etsy-api-demo/app.py -Scanned: 2016-10-18 16:03:18.326549 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -troythewolfe/nNest -https://github.com/troythewolfe/nNest -Entry file: None -Scanned: 2016-10-18 16:03:18.839384 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/troythewolfe/nNest. - -andor44/lohere- -https://github.com/andor44/lohere- -Entry file: lohere-/lohereminusz.py -Scanned: 2016-10-18 16:03:21.374196 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ashutoshrishi/adventuresontheweb -https://github.com/ashutoshrishi/adventuresontheweb -Entry file: adventuresontheweb/flask/sessions.py -Scanned: 2016-10-18 16:03:22.915704 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clee/boilerplate -https://github.com/clee/boilerplate -Entry file: boilerplate/boilerplate.py -Scanned: 2016-10-18 16:03:24.148170 -No vulnerabilities found. - - -pyloque/doumail_machine -https://github.com/pyloque/doumail_machine -Entry file: doumail_machine/main.py -Scanned: 2016-10-18 16:03:24.648628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richard-to/dashgourd-web-api -https://github.com/richard-to/dashgourd-web-api -Entry file: dashgourd-web-api/example/app.py -Scanned: 2016-10-18 16:03:25.857546 -No vulnerabilities found. - - -trenta3dev/wafwfy -https://github.com/trenta3dev/wafwfy -Entry file: wafwfy/wafwfy/__init__.py -Scanned: 2016-10-18 16:03:26.364533 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bendavis78/irclog -https://github.com/bendavis78/irclog -Entry file: irclog/app.py -Scanned: 2016-10-18 16:03:28.594084 -No vulnerabilities found. - - -sijinjoseph/multunus-puzzle -https://github.com/sijinjoseph/multunus-puzzle -Entry file: multunus-puzzle/src/app.py -Scanned: 2016-10-18 16:03:30.302282 -Vulnerability 1: -File: multunus-puzzle/src/app.py - > User input at line 21, trigger word "form[": - redirect_to = url_for('tagcloud',twitterhandle=request.form['handle']) -Reassigned in: - File: multunus-puzzle/src/app.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: multunus-puzzle/src/app.py - > reaches line 22, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(redirect_to) - - - -practo/MyCQ -https://github.com/practo/MyCQ -Entry file: MyCQ/mycq/__init__.py -Scanned: 2016-10-18 16:03:32.949732 -No vulnerabilities found. - - -gaker/slides -https://github.com/gaker/slides -Entry file: slides/slides.py -Scanned: 2016-10-18 16:03:34.490862 -No vulnerabilities found. - - -addumb/toyapp -https://github.com/addumb/toyapp -Entry file: toyapp/toy/__init__.py -Scanned: 2016-10-18 16:03:38.603928 -Vulnerability 1: -File: toyapp/toy/views.py - > User input at line 77, trigger word "form[": - val = float(request.form['value']) -Reassigned in: - File: toyapp/toy/views.py - > Line 86: ret_MAYBE_FUNCTION_NAME = 'Setting %s to %s at %s' % (key, val, str(ts)) -File: toyapp/toy/views.py - > reaches line 83, trigger word "execute(": - g.db.execute('insert into events (key, value, ts) values (?, ?, ?)', (key, val, ts)) - -Vulnerability 2: -File: toyapp/toy/views.py - > User input at line 79, trigger word "form[": - ts = float(request.form['ts']) -Reassigned in: - File: toyapp/toy/views.py - > Line 81: ts = time.time() - File: toyapp/toy/views.py - > Line 86: ret_MAYBE_FUNCTION_NAME = 'Setting %s to %s at %s' % (key, val, str(ts)) -File: toyapp/toy/views.py - > reaches line 83, trigger word "execute(": - g.db.execute('insert into events (key, value, ts) values (?, ?, ?)', (key, val, ts)) - - - -petezhut/BigDay -https://github.com/petezhut/BigDay -Entry file: BigDay/app.py -Scanned: 2016-10-18 16:03:39.183245 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -akabaker/remote_rgb -https://github.com/akabaker/remote_rgb -Entry file: remote_rgb/app.py -Scanned: 2016-10-18 16:03:40.373904 -No vulnerabilities found. - - -kyubuns/favme -https://github.com/kyubuns/favme -Entry file: favme/hello.py -Scanned: 2016-10-18 16:03:40.939292 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelverhagen/flask-rauth -https://github.com/joelverhagen/flask-rauth -Entry file: flask-rauth/example/facebook.py -Scanned: 2016-10-18 16:03:56.808701 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mattupstate/flask-security-example -https://github.com/mattupstate/flask-security-example -Entry file: flask-security-example/app.py -Scanned: 2016-10-18 16:03:59.214946 -No vulnerabilities found. - - -MichaelDiBernardo/ddd-flask-example -https://github.com/MichaelDiBernardo/ddd-flask-example -Entry file: ddd-flask-example/blogex/blogex_app.py -Scanned: 2016-10-18 16:04:02.566454 -No vulnerabilities found. - - -FelixLoether/flask-image-upload-thing -https://github.com/FelixLoether/flask-image-upload-thing -Entry file: flask-image-upload-thing/example.py -Scanned: 2016-10-18 16:04:05.200243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jjjjeeffff/flask-skeleton -https://github.com/jjjjeeffff/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:04:06.828429 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jjjjeeffff/flask-skeleton. - -mgood/flask-failsafe -https://github.com/mgood/flask-failsafe -Entry file: flask-failsafe/test/test_app.py -Scanned: 2016-10-18 16:04:10.213661 -No vulnerabilities found. - - -arvindkhadri/flask-social -https://github.com/arvindkhadri/flask-social -Entry file: flask-social/tests/test_app/__init__.py -Scanned: 2016-10-18 16:04:12.983708 -No vulnerabilities found. - - -dantezhu/flask_util_js -https://github.com/dantezhu/flask_util_js -Entry file: flask_util_js/examples/main.py -Scanned: 2016-10-18 16:04:14.977410 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kielpedia/flask-sqlalchemy-postgres-heroku-example -https://github.com/kielpedia/flask-sqlalchemy-postgres-heroku-example -Entry file: flask-sqlalchemy-postgres-heroku-example/Flasktest/__init__.py -Scanned: 2016-10-18 16:04:18.088495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yamatt/flask-blog -https://github.com/yamatt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:04:18.751505 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -marconi/flask-chat -https://github.com/marconi/flask-chat -Entry file: flask-chat/chat.py -Scanned: 2016-10-18 16:04:19.259498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjurney/enron-python-flask-cassandra-pig -https://github.com/rjurney/enron-python-flask-cassandra-pig -Entry file: enron-python-flask-cassandra-pig/index.py -Scanned: 2016-10-18 16:04:22.018667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KaviCorp/flask_pysaml2 -https://github.com/KaviCorp/flask_pysaml2 -Entry file: flask_pysaml2/tests/test_saml.py -Scanned: 2016-10-18 16:04:23.524725 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulchakravarti/flask-skeleton -https://github.com/paulchakravarti/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:04:25.974113 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paulchakravarti/flask-skeleton. - -tomekwojcik/flask-htauth -https://github.com/tomekwojcik/flask-htauth -Entry file: flask-htauth/example.py -Scanned: 2016-10-18 16:04:27.562492 -No vulnerabilities found. - - -skual/backend-flask -https://github.com/skual/backend-flask -Entry file: None -Scanned: 2016-10-18 16:04:28.193535 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/skual/backend-flask. - -memeticlabs/flask-mongokit -https://github.com/memeticlabs/flask-mongokit -Entry file: flask-mongokit/tests/test_base.py -Scanned: 2016-10-18 16:04:31.196645 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mokshaproject/moksha-flask-hello_world -https://github.com/mokshaproject/moksha-flask-hello_world -Entry file: moksha-flask-hello_world/tutorial.py -Scanned: 2016-10-18 16:04:37.447824 -No vulnerabilities found. - - -geekforbrains/squid -https://github.com/geekforbrains/squid -Entry file: squid/run.py -Scanned: 2016-10-18 16:04:38.932318 -No vulnerabilities found. - - -fallingfree/flask-principal-simple-example -https://github.com/fallingfree/flask-principal-simple-example -Entry file: flask-principal-simple-example/auth.py -Scanned: 2016-10-18 16:04:40.152732 -Vulnerability 1: -File: flask-principal-simple-example/auth.py - > User input at line 136, trigger word ".data": - user = User.query.filter(User.username == form.username.data).first() -File: flask-principal-simple-example/auth.py - > reaches line 143, trigger word "flash(": - flash('欢迎你, %s' % user.username) - - - -trilan/stencil-flask -https://github.com/trilan/stencil-flask -Entry file: stencil-flask/stencil_flask/template/{app_name}/__init__.py -Scanned: 2016-10-18 16:04:42.010785 -No vulnerabilities found. - - -yangjiandong/flaskr -https://github.com/yangjiandong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:04:52.557117 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NEETFUTURE/flaskr -https://github.com/NEETFUTURE/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:04:57.102733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -narendranag/Flaskr -https://github.com/narendranag/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:05:02.106017 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luanfonceca/flaskbook -https://github.com/luanfonceca/flaskbook -Entry file: flaskbook/mange.py -Scanned: 2016-10-18 16:05:06.461306 -No vulnerabilities found. - - -johnschimmel/ITP-DWD-Fall2012-Week3-First-Server -https://github.com/johnschimmel/ITP-DWD-Fall2012-Week3-First-Server -Entry file: ITP-DWD-Fall2012-Week3-First-Server/app.py -Scanned: 2016-10-18 16:05:07.670121 -No vulnerabilities found. - - -saltycrane/flask-principal-example -https://github.com/saltycrane/flask-principal-example -Entry file: flask-principal-example/main.py -Scanned: 2016-10-18 16:05:10.206607 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KrzysztofWilczek/FlaskMaschines -https://github.com/KrzysztofWilczek/FlaskMaschines -Entry file: FlaskMaschines/app.py -Scanned: 2016-10-18 16:05:12.715610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trenta3dev/ziga -https://github.com/trenta3dev/ziga -Entry file: ziga/ziga/__init__.py -Scanned: 2016-10-18 16:05:16.116045 -No vulnerabilities found. - - -DeaconDesperado/flask_skel -https://github.com/DeaconDesperado/flask_skel -Entry file: flask_skel/listener.py -Scanned: 2016-10-18 16:05:17.100852 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -calebmadrigal/flask-adventures -https://github.com/calebmadrigal/flask-adventures -Entry file: flask-adventures/annuity_calculator.py -Scanned: 2016-10-18 16:05:19.079913 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iambibhas/flask-blog -https://github.com/iambibhas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:05:22.063111 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -marchibbins/simple-flask -https://github.com/marchibbins/simple-flask -Entry file: simple-flask/simple-flask.py -Scanned: 2016-10-18 16:05:24.767584 -No vulnerabilities found. - - -imiric/flask-scaffold -https://github.com/imiric/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-18 16:05:26.747848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arvs/CURC-flask -https://github.com/arvs/CURC-flask -Entry file: CURC-flask/app.py -Scanned: 2016-10-18 16:05:30.798355 -No vulnerabilities found. - - -suneel0101/flask-adventure -https://github.com/suneel0101/flask-adventure -Entry file: flask-adventure/app.py -Scanned: 2016-10-18 16:05:32.583061 -No vulnerabilities found. - - -memeticlabs/Redis-Flask -https://github.com/memeticlabs/Redis-Flask -Entry file: Redis-Flask/flask_redis.py -Scanned: 2016-10-18 16:05:33.098259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DartmouthHackerClub/flask_template -https://github.com/DartmouthHackerClub/flask_template -Entry file: flask_template/app.py -Scanned: 2016-10-18 16:05:35.427197 -Vulnerability 1: -File: flask_template/flask_cas.py - > User input at line 19, trigger word "get(": - r = requests.get(validate_url) -Reassigned in: - File: flask_template/flask_cas.py - > Line 20: doc = etree.fromstring(r.text) -File: flask_template/flask_cas.py - > reaches line 22, trigger word "replace(": - ret_MAYBE_FUNCTION_NAME = dict(((key.replace('{http://www.yale.edu/tp/cas}', ''), value) for (key, value) in recursive_dict(doc[0])[1].items())) - - - -bozoid/testblog -https://github.com/bozoid/testblog -Entry file: testblog/index.py -Scanned: 2016-10-18 16:05:36.050428 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: testblog/venv/lib/python2.7/genericpath.py - -alfredhq/alfred-listener -https://github.com/alfredhq/alfred-listener -Entry file: alfred-listener/alfred_listener/__init__.py -Scanned: 2016-10-18 16:05:38.380591 -No vulnerabilities found. - - -dhruvbaldawa/cj_calc -https://github.com/dhruvbaldawa/cj_calc -Entry file: cj_calc/app.py -Scanned: 2016-10-18 16:05:39.583353 -No vulnerabilities found. - - -openplans/shareabouts-flask-client -https://github.com/openplans/shareabouts-flask-client -Entry file: None -Scanned: 2016-10-18 16:05:41.547233 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/openplans/shareabouts-flask-client. - -hagino3000/flask-project-template -https://github.com/hagino3000/flask-project-template -Entry file: flask-project-template/app.py -Scanned: 2016-10-18 16:05:42.101578 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-project-template/venv/lib/python2.7/genericpath.py - -jhorman/sample-flask-project -https://github.com/jhorman/sample-flask-project -Entry file: sample-flask-project/app.py -Scanned: 2016-10-18 16:05:57.890820 -No vulnerabilities found. - - -imaimiami/heroku_flask_template -https://github.com/imaimiami/heroku_flask_template -Entry file: heroku_flask_template/app/__init__.py -Scanned: 2016-10-18 16:06:00.258283 -No vulnerabilities found. - - -amaudy/flaskr-tutorial -https://github.com/amaudy/flaskr-tutorial -Entry file: flaskr-tutorial/flaskr.py -Scanned: 2016-10-18 16:06:07.083656 -No vulnerabilities found. - - -infinitylx/test-task -https://github.com/infinitylx/test-task -Entry file: test-task/application.py -Scanned: 2016-10-18 16:06:07.636232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gavinb/flaskr-eb -https://github.com/gavinb/flaskr-eb -Entry file: flaskr-eb/flaskr.py -Scanned: 2016-10-18 16:06:11.874520 -No vulnerabilities found. - - -vkukushkin88/test_books -https://github.com/vkukushkin88/test_books -Entry file: test_books/db/db_models.py -Scanned: 2016-10-18 16:06:16.596107 -No vulnerabilities found. - - -nicolashery/safire -https://github.com/nicolashery/safire -Entry file: safire/app.py -Scanned: 2016-10-18 16:06:17.822451 -No vulnerabilities found. - - -fjarri/publicfields-backend -https://github.com/fjarri/publicfields-backend -Entry file: publicfields-backend/backend/__init__.py -Scanned: 2016-10-18 16:06:18.341681 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sdornan/imgination -https://github.com/sdornan/imgination -Entry file: imgination/application.py -Scanned: 2016-10-18 16:06:19.748835 -No vulnerabilities found. - - -Citizen01/Kozea-project1 -https://github.com/Citizen01/Kozea-project1 -Entry file: Kozea-project1/index.py -Scanned: 2016-10-18 16:06:21.547755 -Vulnerability 1: -File: Kozea-project1/index.py - > User input at line 110, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: Kozea-project1/index.py - > Line 122: session['username'] = username - File: Kozea-project1/index.py - > Line 123: session['id'] = User.query.filter_by(username=username).first().id - File: Kozea-project1/index.py - > Line 121: session['logged_in'] = True -File: Kozea-project1/index.py - > reaches line 124, trigger word "flash(": - flash('Welcome on Kozupload, %s !' % username, 'success') - - - -noise/fortune-redis -https://github.com/noise/fortune-redis -Entry file: fortune-redis/fortune_server.py -Scanned: 2016-10-18 16:06:22.051694 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dash1291/grabset -https://github.com/dash1291/grabset -Entry file: grabset/grabset.py -Scanned: 2016-10-18 16:06:23.374708 -No vulnerabilities found. - - -ipedrazas/surl -https://github.com/ipedrazas/surl -Entry file: surl/shortener.py -Scanned: 2016-10-18 16:06:24.607877 -Vulnerability 1: -File: surl/shortener.py - > User input at line 88, trigger word "form[": - link = request.form['link'] -Reassigned in: - File: surl/shortener.py - > Line 92: url = objects.find_one('link'link) -File: surl/shortener.py - > reaches line 95, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('url'URL + url['url_id']) - -Vulnerability 2: -File: surl/shortener.py - > User input at line 88, trigger word "form[": - link = request.form['link'] -Reassigned in: - File: surl/shortener.py - > Line 92: url = objects.find_one('link'link) -File: surl/shortener.py - > reaches line 97, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('url'URL + short_id(link)) - - - -alexmic/trippin -https://github.com/alexmic/trippin -Entry file: trippin/server.py -Scanned: 2016-10-18 16:06:25.117146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aquaya/sawyer -https://github.com/aquaya/sawyer -Entry file: sawyer/application/__init__.py -Scanned: 2016-10-18 16:06:27.590942 -No vulnerabilities found. - - -metermaid/thirstybot -https://github.com/metermaid/thirstybot -Entry file: thirstybot/app.py -Scanned: 2016-10-18 16:06:28.103350 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timney/meblog -https://github.com/timney/meblog -Entry file: meblog/app.py -Scanned: 2016-10-18 16:06:28.675998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oxtopus/barkeeper -https://github.com/oxtopus/barkeeper -Entry file: barkeeper/barkeeper/app.py -Scanned: 2016-10-18 16:06:32.884408 -No vulnerabilities found. - - -ngopal/quote_generator -https://github.com/ngopal/quote_generator -Entry file: quote_generator/main.py -Scanned: 2016-10-18 16:06:33.396371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wesleyk/WhoPaid -https://github.com/wesleyk/WhoPaid -Entry file: WhoPaid/WhoPaid.py -Scanned: 2016-10-18 16:06:34.889993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smanek/challenge -https://github.com/smanek/challenge -Entry file: challenge/challenge.py -Scanned: 2016-10-18 16:06:37.426118 -No vulnerabilities found. - - -neocxi/coursemonitor -https://github.com/neocxi/coursemonitor -Entry file: coursemonitor/flask/sessions.py -Scanned: 2016-10-18 16:06:37.935802 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alfg/inviteme -https://github.com/alfg/inviteme -Entry file: inviteme/inviteme.py -Scanned: 2016-10-18 16:06:39.475221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kfigaj/FizzBuzzPro -https://github.com/kfigaj/FizzBuzzPro -Entry file: FizzBuzzPro/FizzBuzzPro/fizzbuzz.py -Scanned: 2016-10-18 16:06:41.789788 -No vulnerabilities found. - - -richardneish/lists -https://github.com/richardneish/lists -Entry file: lists/lists/__init__.py -Scanned: 2016-10-18 16:06:43.029489 -No vulnerabilities found. - - -MalphasWats/pyDimension -https://github.com/MalphasWats/pyDimension -Entry file: pyDimension/pyDimension/__init__.py -Scanned: 2016-10-18 16:06:44.363162 -Vulnerability 1: -File: pyDimension/pyDimension/views.py - > User input at line 43, trigger word "form[": - filename = request.form['filename'] -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 59: filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) - File: pyDimension/pyDimension/views.py - > Line 61: filename = get_safe_filename(request.form['filename']) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 2: -File: pyDimension/pyDimension/views.py - > User input at line 59, trigger word "form[": - filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 43: filename = request.form['filename'] - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 61: filename = get_safe_filename(request.form['filename']) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 3: -File: pyDimension/pyDimension/views.py - > User input at line 61, trigger word "form[": - filename = get_safe_filename(request.form['filename']) -Reassigned in: - File: pyDimension/pyDimension/views.py - > Line 43: filename = request.form['filename'] - File: pyDimension/pyDimension/views.py - > Line 45: filename = '%s.txt' % safe_title - File: pyDimension/pyDimension/views.py - > Line 48: articleFile = codecs.open('%s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),encoding='utf-8', mode='w') - File: pyDimension/pyDimension/views.py - > Line 59: filename = '%s_%s' % (date, get_safe_filename(request.form['filename'])) - File: pyDimension/pyDimension/views.py - > Line 64: filename = '%s_%s.txt' % (date, safe_title) -File: pyDimension/pyDimension/views.py - > reaches line 50, trigger word "flash(": - flash('There was a problem accessing the file %s/%s' % (app.config['DRAFTS_ROOT_DIR'], filename),category='error') - -Vulnerability 4: -File: pyDimension/pyDimension/access_control.py - > User input at line 20, trigger word "form[": - next = request.form['next'] -Reassigned in: - File: pyDimension/pyDimension/access_control.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('control_panel')) - File: pyDimension/pyDimension/access_control.py - > Line 31: ret_MAYBE_FUNCTION_NAME = render_template('login.html',next=request.args.get('next')) -File: pyDimension/pyDimension/access_control.py - > reaches line 25, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -DanielleSucher/Text-Donation -https://github.com/DanielleSucher/Text-Donation -Entry file: Text-Donation/app.py -Scanned: 2016-10-18 16:06:53.767447 -No vulnerabilities found. - - -flask-restful/flask-restful -https://github.com/flask-restful/flask-restful -Entry file: flask-restful/flask_restful/__init__.py -Scanned: 2016-10-18 16:06:59.788861 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rozza/flask-tumblelog -https://github.com/rozza/flask-tumblelog -Entry file: flask-tumblelog/tumblelog/__init__.py -Scanned: 2016-10-18 16:07:04.157872 -No vulnerabilities found. - - -lixxu/flask-paginate -https://github.com/lixxu/flask-paginate -Entry file: flask-paginate/example/app.py -Scanned: 2016-10-18 16:07:07.778984 -No vulnerabilities found. - - -e-dard/flask-s3 -https://github.com/e-dard/flask-s3 -Entry file: flask-s3/test_flask_static.py -Scanned: 2016-10-18 16:07:12.946826 -No vulnerabilities found. - - -singingwolfboy/flask-misaka -https://github.com/singingwolfboy/flask-misaka -Entry file: flask-misaka/tests.py -Scanned: 2016-10-18 16:07:18.538572 -No vulnerabilities found. - - -rangermeier/flaskberry -https://github.com/rangermeier/flaskberry -Entry file: flaskberry/flaskberry/__init__.py -Scanned: 2016-10-18 16:07:19.522217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -magaman384/flask-autocomplete -https://github.com/magaman384/flask-autocomplete -Entry file: flask-autocomplete/tests/test.py -Scanned: 2016-10-18 16:07:23.810657 -No vulnerabilities found. - - -GrexIt/flask-login-oauth2 -https://github.com/GrexIt/flask-login-oauth2 -Entry file: None -Scanned: 2016-10-18 16:07:25.813091 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/GrexIt/flask-login-oauth2. - -kielpedia/flask-sqlalchemy-postgres-heroku-example -https://github.com/kielpedia/flask-sqlalchemy-postgres-heroku-example -Entry file: flask-sqlalchemy-postgres-heroku-example/Flasktest/__init__.py -Scanned: 2016-10-18 16:07:27.314178 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -renstrom/passbook_flask_example -https://github.com/renstrom/passbook_flask_example -Entry file: passbook_flask_example/app.py -Scanned: 2016-10-18 16:07:29.564226 -No vulnerabilities found. - - -teozkr/Flask-Pushrod -https://github.com/teozkr/Flask-Pushrod -Entry file: Flask-Pushrod/examples/pushrodr/step3.py -Scanned: 2016-10-18 16:07:32.194668 -No vulnerabilities found. - - -KaviCorp/flask_pysaml2 -https://github.com/KaviCorp/flask_pysaml2 -Entry file: flask_pysaml2/tests/test_saml.py -Scanned: 2016-10-18 16:07:32.713982 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MostAwesomeDude/flask-holster -https://github.com/MostAwesomeDude/flask-holster -Entry file: flask-holster/test.py -Scanned: 2016-10-18 16:07:35.178236 -No vulnerabilities found. - - -stevenewey/ssedemo -https://github.com/stevenewey/ssedemo -Entry file: ssedemo/sse_server.py -Scanned: 2016-10-18 16:07:41.631887 -No vulnerabilities found. - - -LarryEitel/gsapi -https://github.com/LarryEitel/gsapi -Entry file: gsapi/gsapi/run.py -Scanned: 2016-10-18 16:07:42.190231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pokom/flasking -https://github.com/Pokom/flasking -Entry file: flasking/flaskr.py -Scanned: 2016-10-18 16:07:43.208392 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasking/venv/lib/python2.7/genericpath.py - -car34/flasktut -https://github.com/car34/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-18 16:07:44.558255 -No vulnerabilities found. - - -gracedme/flaskblog -https://github.com/gracedme/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-18 16:07:45.111886 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -nirix-old/flaskapp -https://github.com/nirix-old/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:07:45.596203 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jasonamyers/flaskr -https://github.com/jasonamyers/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:07:53.139190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -femmerling/EmeraldBox -https://github.com/femmerling/EmeraldBox -Entry file: EmeraldBox/app/__init__.py -Scanned: 2016-10-18 16:08:00.877294 -No vulnerabilities found. - - -corysandahl/FlaskAPI -https://github.com/corysandahl/FlaskAPI -Entry file: FlaskAPI/ProdAPI.py -Scanned: 2016-10-18 16:08:02.145582 -No vulnerabilities found. - - -pearkes/invite -https://github.com/pearkes/invite -Entry file: invite/app.py -Scanned: 2016-10-18 16:08:03.657258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MalphasWats/flask-blueprint-loader -https://github.com/MalphasWats/flask-blueprint-loader -Entry file: flask-blueprint-loader/dashboard/dashboard.py -Scanned: 2016-10-18 16:08:07.901451 -No vulnerabilities found. - - -tswast/cryptogram-flask -https://github.com/tswast/cryptogram-flask -Entry file: cryptogram-flask/cryptogram.py -Scanned: 2016-10-18 16:08:09.109632 -No vulnerabilities found. - - -Fibio/flask-mongoset -https://github.com/Fibio/flask-mongoset -Entry file: flask-mongoset/flask_mongoset.py -Scanned: 2016-10-18 16:08:14.165220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -suneel0101/flask-hn -https://github.com/suneel0101/flask-hn -Entry file: flask-hn/app.py -Scanned: 2016-10-18 16:08:17.420258 -No vulnerabilities found. - - -mstriemer/todo-flask -https://github.com/mstriemer/todo-flask -Entry file: todo-flask/todo.py -Scanned: 2016-10-18 16:08:18.649853 -No vulnerabilities found. - - -tribbettz/flask-microblog -https://github.com/tribbettz/flask-microblog -Entry file: flask-microblog/app/__init__.py -Scanned: 2016-10-18 16:08:19.990176 -No vulnerabilities found. - - -codecool/flask-uploads -https://github.com/codecool/flask-uploads -Entry file: flask-uploads/test-uploads.py -Scanned: 2016-10-18 16:08:23.052271 -No vulnerabilities found. - - -nirix-old/mantid_flask -https://github.com/nirix-old/mantid_flask -Entry file: None -Scanned: 2016-10-18 16:08:23.567995 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nirix-old/mantid_flask. - -DartmouthHackerClub/blitzlistr-flask -https://github.com/DartmouthHackerClub/blitzlistr-flask -Entry file: blitzlistr-flask/app.py -Scanned: 2016-10-18 16:08:24.102250 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -otsuarez/flask-blog -https://github.com/otsuarez/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:08:24.663341 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -philwade/flask-presentation -https://github.com/philwade/flask-presentation -Entry file: flask-presentation/code/loop.py -Scanned: 2016-10-18 16:08:27.211473 -No vulnerabilities found. - - -mattdeboard/flask-cloudfront -https://github.com/mattdeboard/flask-cloudfront -Entry file: flask-cloudfront/flask_cloudfront/tests/base.py -Scanned: 2016-10-18 16:08:28.610452 -No vulnerabilities found. - - -apjd/flask-gae -https://github.com/apjd/flask-gae -Entry file: flask-gae/lib/flask/app.py -Scanned: 2016-10-18 16:08:29.139746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -demitri/DMFlaskTemplate -https://github.com/demitri/DMFlaskTemplate -Entry file: DMFlaskTemplate/myapplication/myapplication/__init__.py -Scanned: 2016-10-18 16:08:33.396733 -No vulnerabilities found. - - -Zanfa/Twilio-SMS-Voting -https://github.com/Zanfa/Twilio-SMS-Voting -Entry file: Twilio-SMS-Voting/server.py -Scanned: 2016-10-18 16:08:35.306643 -No vulnerabilities found. - - -jvoisin/pyste -https://github.com/jvoisin/pyste -Entry file: pyste/flaskr.py -Scanned: 2016-10-18 16:08:36.641010 -Vulnerability 1: -File: pyste/flaskr.py - > User input at line 57, trigger word "form[": - delta = datetime.timedelta(seconds=int(request.form['expiration'])) -Reassigned in: - File: pyste/flaskr.py - > Line 58: expiration = datetime.datetime.now() + delta - File: pyste/flaskr.py - > Line 60: expiration = datetime.datetime(1, 1, 1) -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - -Vulnerability 2: -File: pyste/flaskr.py - > User input at line 62, trigger word "form[": - identifier = hashlib.sha1(request.form['input'] + time.ctime()).hexdigest()[8] -Reassigned in: - File: pyste/flaskr.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('index.html',identifier=identifier, url=request.url) - File: pyste/flaskr.py - > Line 79: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: pyste/flaskr.py - > Line 55: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - -Vulnerability 3: -File: pyste/flaskr.py - > User input at line 63, trigger word "form[": - paste = highlight(request.form['input'], guess_lexer(request.form['input']), HtmlFormatter(linenos='table')) -File: pyste/flaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('INSERT INTO PASTE (id, title, expiration, content) VALUES (?, ?, ?, ?)', (identifier, request.form['title'], expiration, paste)) - - - -codeanu/flask-login-oauth2 -https://github.com/codeanu/flask-login-oauth2 -Entry file: None -Scanned: 2016-10-18 16:08:37.285821 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codeanu/flask-login-oauth2. - -sclabs/flask.gilgi.org -https://github.com/sclabs/flask.gilgi.org -Entry file: None -Scanned: 2016-10-18 16:08:44.402567 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MalphasWats/instruments -https://github.com/MalphasWats/instruments -Entry file: instruments/instruments/__init__.py -Scanned: 2016-10-18 16:08:45.944157 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msapoz/toothsometreats -https://github.com/msapoz/toothsometreats -Entry file: toothsometreats/toothsome.py -Scanned: 2016-10-18 16:08:46.459773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -george25c/helloflask -https://github.com/george25c/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-18 16:08:53.981137 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -nirix/alchemyflask -https://github.com/nirix/alchemyflask -Entry file: alchemyflask/app.py -Scanned: 2016-10-18 16:08:59.218123 -No vulnerabilities found. - - -pwyf/IATI-Implementation-Schedules -https://github.com/pwyf/IATI-Implementation-Schedules -Entry file: IATI-Implementation-Schedules/impschedules/__init__.py -Scanned: 2016-10-18 16:09:01.724475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sigmavirus24/subscribed -https://github.com/sigmavirus24/subscribed -Entry file: subscribed/subscribed/app.py -Scanned: 2016-10-18 16:09:05.062880 -No vulnerabilities found. - - -gbaldera/todo -https://github.com/gbaldera/todo -Entry file: todo/todo/__init__.py -Scanned: 2016-10-18 16:09:08.567593 -No vulnerabilities found. - - -mgill25/Blog -https://github.com/mgill25/Blog -Entry file: Blog/Blog/__init__.py -Scanned: 2016-10-18 16:09:14.465595 -No vulnerabilities found. - - -hernamesbarbara/NAICS -https://github.com/hernamesbarbara/NAICS -Entry file: NAICS/app.py -Scanned: 2016-10-18 16:09:17.928284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scwu/Evernote-Blog-Engine -https://github.com/scwu/Evernote-Blog-Engine -Entry file: Evernote-Blog-Engine/blog.py -Scanned: 2016-10-18 16:09:19.421879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ybz/yaniv_bz -https://github.com/ybz/yaniv_bz -Entry file: yaniv_bz/app.py -Scanned: 2016-10-18 16:09:22.420403 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -bezfeng/skinmd-frontend -https://github.com/bezfeng/skinmd-frontend -Entry file: skinmd-frontend/script_server.py -Scanned: 2016-10-18 16:09:23.959905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jul/wsgi_social_experminet -https://github.com/jul/wsgi_social_experminet -Entry file: wsgi_social_experminet/www/socialize.py -Scanned: 2016-10-18 16:09:25.282212 -No vulnerabilities found. - - -barosl/photox -https://github.com/barosl/photox -Entry file: photox/photox.py -Scanned: 2016-10-18 16:09:25.811098 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasboyt/txtRPG -https://github.com/thomasboyt/txtRPG -Entry file: txtRPG/rpg_app/__init__.py -Scanned: 2016-10-18 16:09:26.354248 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hacksu/ksu-flash-info -https://github.com/hacksu/ksu-flash-info -Entry file: ksu-flash-info/app.py -Scanned: 2016-10-18 16:09:30.158329 -No vulnerabilities found. - - -smanek/challenge -https://github.com/smanek/challenge -Entry file: challenge/challenge.py -Scanned: 2016-10-18 16:09:32.299754 -No vulnerabilities found. - - -qnub/cavy -https://github.com/qnub/cavy -Entry file: cavy/project/flask/sessions.py -Scanned: 2016-10-18 16:09:32.861343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adamcharnock/docsite -https://github.com/adamcharnock/docsite -Entry file: docsite/server.py -Scanned: 2016-10-18 16:09:36.597249 -No vulnerabilities found. - - -DazWorrall/flask-sse -https://github.com/DazWorrall/flask-sse -Entry file: flask-sse/example/example.py -Scanned: 2016-10-18 16:09:44.938878 -No vulnerabilities found. - - -hobbeswalsh/flask-sillywalk -https://github.com/hobbeswalsh/flask-sillywalk -Entry file: flask-sillywalk/flask_sillywalk/sillywalk.py -Scanned: 2016-10-18 16:09:46.426695 -No vulnerabilities found. - - -twip/flask_twip -https://github.com/twip/flask_twip -Entry file: flask_twip/examples/heroku/app.py -Scanned: 2016-10-18 16:09:48.071214 -No vulnerabilities found. - - -doobeh/Flask-S3-Uploader -https://github.com/doobeh/Flask-S3-Uploader -Entry file: Flask-S3-Uploader/app.py -Scanned: 2016-10-18 16:09:49.964470 -No vulnerabilities found. - - -tzulberti/Flask-PyPi-Proxy -https://github.com/tzulberti/Flask-PyPi-Proxy -Entry file: Flask-PyPi-Proxy/flask_pypi_proxy/app.py -Scanned: 2016-10-18 16:09:59.976814 -No vulnerabilities found. - - -rehandalal/flask-funnel -https://github.com/rehandalal/flask-funnel -Entry file: flask-funnel/flask_funnel/tests/test_funnel.py -Scanned: 2016-10-18 16:10:06.397775 -No vulnerabilities found. - - -rbin/OctoFlask -https://github.com/rbin/OctoFlask -Entry file: OctoFlask/__init__.py -Scanned: 2016-10-18 16:10:09.087000 -No vulnerabilities found. - - -mimming/python-flask-google-api-starter -https://github.com/mimming/python-flask-google-api-starter -Entry file: python-flask-google-api-starter/cal.py -Scanned: 2016-10-18 16:10:09.622830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MichelleGlauser/Flask -https://github.com/MichelleGlauser/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:10:15.638562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tzangms/python-websocket-example -https://github.com/tzangms/python-websocket-example -Entry file: python-websocket-example/app/__init__.py -Scanned: 2016-10-18 16:10:19.363167 -No vulnerabilities found. - - -jakecoffman/flask-bootstrap -https://github.com/jakecoffman/flask-bootstrap -Entry file: flask-bootstrap/flaskr.py -Scanned: 2016-10-18 16:10:20.918456 -No vulnerabilities found. - - -lomatus/flask2sae -https://github.com/lomatus/flask2sae -Entry file: flask2sae/1/app/__init__.py -Scanned: 2016-10-18 16:10:22.360134 -No vulnerabilities found. - - -Roasbeef/FlaskrNews -https://github.com/Roasbeef/FlaskrNews -Entry file: FlaskrNews/libs/flask/sessions.py -Scanned: 2016-10-18 16:10:22.887416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marksteve/flask-stathat -https://github.com/marksteve/flask-stathat -Entry file: flask-stathat/example.py -Scanned: 2016-10-18 16:10:25.226117 -No vulnerabilities found. - - -byslee3/Flask_Tutorial -https://github.com/byslee3/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-18 16:10:26.562351 -No vulnerabilities found. - - -gzb1985/flask-boilerplate -https://github.com/gzb1985/flask-boilerplate -Entry file: flask-boilerplate/flask_boilerplate/__init__.py -Scanned: 2016-10-18 16:10:28.099991 -No vulnerabilities found. - - -scolex/flask-forum -https://github.com/scolex/flask-forum -Entry file: flask-forum/app/__init__.py -Scanned: 2016-10-18 16:10:29.427912 -No vulnerabilities found. - - -bwghughes/flasksse -https://github.com/bwghughes/flasksse -Entry file: flasksse/app.py -Scanned: 2016-10-18 16:10:31.150484 -No vulnerabilities found. - - -kvesteri/flask-jinjahelpers -https://github.com/kvesteri/flask-jinjahelpers -Entry file: flask-jinjahelpers/tests/__init__.py -Scanned: 2016-10-18 16:10:33.336592 -No vulnerabilities found. - - -soccermetrics/flask-skeleton -https://github.com/soccermetrics/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:10:33.853104 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/soccermetrics/flask-skeleton. - -jmhobbs/redboard -https://github.com/jmhobbs/redboard -Entry file: redboard/src/redboard_server.py -Scanned: 2016-10-18 16:10:35.366031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kates/flask-mold -https://github.com/kates/flask-mold -Entry file: flask-mold/app.py -Scanned: 2016-10-18 16:10:35.901997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -landakram/microblog -https://github.com/landakram/microblog -Entry file: None -Scanned: 2016-10-18 16:10:38.432890 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JanStevens/ArduinoPi-Python -https://github.com/JanStevens/ArduinoPi-Python -Entry file: ArduinoPi-Python/main.py -Scanned: 2016-10-18 16:10:44.816969 -No vulnerabilities found. - - -mies/wercker-flask-api -https://github.com/mies/wercker-flask-api -Entry file: wercker-flask-api/app.py -Scanned: 2016-10-18 16:10:46.172143 -No vulnerabilities found. - - -dengmin/base_framework_flask -https://github.com/dengmin/base_framework_flask -Entry file: None -Scanned: 2016-10-18 16:10:46.688105 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dengmin/base_framework_flask. - -tquach/talent-curator -https://github.com/tquach/talent-curator -Entry file: talent-curator/talent_curator/__init__.py -Scanned: 2016-10-18 16:10:49.249906 -No vulnerabilities found. - - -vitalk/flask-mailer -https://github.com/vitalk/flask-mailer -Entry file: flask-mailer/tests/conftest.py -Scanned: 2016-10-18 16:10:50.713878 -No vulnerabilities found. - - -drdaeman/flask-toybox -https://github.com/drdaeman/flask-toybox -Entry file: flask-toybox/tests/test_negotiation.py -Scanned: 2016-10-18 16:10:52.093136 -No vulnerabilities found. - - -Khady/flaskdotahorrible -https://github.com/Khady/flaskdotahorrible -Entry file: flaskdotahorrible/dota2.py -Scanned: 2016-10-18 16:10:54.604692 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daneoshiga/flaskr -https://github.com/daneoshiga/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:10:59.154998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lorden/flaskeleton -https://github.com/lorden/flaskeleton -Entry file: flaskeleton/app/__init__.py -Scanned: 2016-10-18 16:11:02.680004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ruke89/FlaskSite -https://github.com/Ruke89/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-18 16:11:06.302409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tribbettz/flask-mongo-tumblelog -https://github.com/tribbettz/flask-mongo-tumblelog -Entry file: flask-mongo-tumblelog/app/__init__.py -Scanned: 2016-10-18 16:11:11.191269 -No vulnerabilities found. - - -standyro/flask-testbed -https://github.com/standyro/flask-testbed -Entry file: flask-testbed/test.py -Scanned: 2016-10-18 16:11:14.734650 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kracekumar/flask-apache -https://github.com/kracekumar/flask-apache -Entry file: flask-apache/app.py -Scanned: 2016-10-18 16:11:18.752332 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bcho-archive/flask-bootstrap -https://github.com/bcho-archive/flask-bootstrap -Entry file: flask-bootstrap/origin/app.py -Scanned: 2016-10-18 16:11:20.000098 -No vulnerabilities found. - - -tobiasandtobias/flask-assetslite -https://github.com/tobiasandtobias/flask-assetslite -Entry file: flask-assetslite/tests/tests.py -Scanned: 2016-10-18 16:11:21.329432 -No vulnerabilities found. - - -zhangcheng/Flask-Sandbox -https://github.com/zhangcheng/Flask-Sandbox -Entry file: Flask-Sandbox/src/app.py -Scanned: 2016-10-18 16:11:21.832004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sfermigier/flask-linktester -https://github.com/sfermigier/flask-linktester -Entry file: flask-linktester/tests/dummy_app.py -Scanned: 2016-10-18 16:11:24.279479 -No vulnerabilities found. - - -mstriemer/todo-flask -https://github.com/mstriemer/todo-flask -Entry file: todo-flask/todo.py -Scanned: 2016-10-18 16:11:28.529263 -No vulnerabilities found. - - -kageurufu/flask-couchdb -https://github.com/kageurufu/flask-couchdb -Entry file: flask-couchdb/example/guestbook.py -Scanned: 2016-10-18 16:11:29.994688 -No vulnerabilities found. - - -jharkins/restful-flask -https://github.com/jharkins/restful-flask -Entry file: restful-flask/rest_ideas.py -Scanned: 2016-10-18 16:11:31.595455 -No vulnerabilities found. - - -yeradis/flask-nanoblog -https://github.com/yeradis/flask-nanoblog -Entry file: flask-nanoblog/nanoblog/__init__.py -Scanned: 2016-10-18 16:11:33.413020 -No vulnerabilities found. - - -lubiana/flask-quotedb -https://github.com/lubiana/flask-quotedb -Entry file: flask-quotedb/app/__init__.py -Scanned: 2016-10-18 16:11:34.750635 -No vulnerabilities found. - - -mercul3s/flask_tutorial -https://github.com/mercul3s/flask_tutorial -Entry file: flask_tutorial/flaskr.py -Scanned: 2016-10-18 16:11:35.962412 -No vulnerabilities found. - - -SAFeSEA/pyEssayAnalyser -https://github.com/SAFeSEA/pyEssayAnalyser -Entry file: pyEssayAnalyser/src/pyEssayAnalyser.py -Scanned: 2016-10-18 16:11:36.970718 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-js-hostname-example -https://github.com/mitsuhiko/flask-js-hostname-example -Entry file: flask-js-hostname-example/testapp.py -Scanned: 2016-10-18 16:11:44.756960 -No vulnerabilities found. - - -proto/flask-simple-blog -https://github.com/proto/flask-simple-blog -Entry file: flask-simple-blog/app.py -Scanned: 2016-10-18 16:11:47.076150 -No vulnerabilities found. - - -colinkahn/flask-redis-browserid -https://github.com/colinkahn/flask-redis-browserid -Entry file: flask-redis-browserid/run.py -Scanned: 2016-10-18 16:11:48.403946 -No vulnerabilities found. - - -pleomax00/flask-mongo-skel -https://github.com/pleomax00/flask-mongo-skel -Entry file: flask-mongo-skel/src/thirdparty/flask/sessions.py -Scanned: 2016-10-18 16:11:51.917374 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iolab12/python_flask_demo -https://github.com/iolab12/python_flask_demo -Entry file: python_flask_demo/todo.py -Scanned: 2016-10-18 16:12:00.628825 -No vulnerabilities found. - - -eneldoserrata/flask-python-dominicana-apps -https://github.com/eneldoserrata/flask-python-dominicana-apps -Entry file: flask-python-dominicana-apps/app/__init__.py -Scanned: 2016-10-18 16:12:03.879295 -No vulnerabilities found. - - -shinderuman/python_flask_helloworld -https://github.com/shinderuman/python_flask_helloworld -Entry file: python_flask_helloworld/app.py -Scanned: 2016-10-18 16:12:05.443349 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python_flask_helloworld/lib/python2.7/genericpath.py - -ilyapuchka/PyObjC-FlaskAdmin -https://github.com/ilyapuchka/PyObjC-FlaskAdmin -Entry file: PyObjC-FlaskAdmin/myadmin/__init__.py -Scanned: 2016-10-18 16:12:08.978464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tnebel/minitwit -https://github.com/tnebel/minitwit -Entry file: minitwit/minitwit.py -Scanned: 2016-10-18 16:12:19.840926 -No vulnerabilities found. - - -renn999/PyBlogtle -https://github.com/renn999/PyBlogtle -Entry file: None -Scanned: 2016-10-18 16:12:20.334039 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/renn999/PyBlogtle. - -orangejulius/jlink -https://github.com/orangejulius/jlink -Entry file: jlink/jlink.py -Scanned: 2016-10-18 16:12:23.839526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sramana/meetup-photos -https://github.com/sramana/meetup-photos -Entry file: meetup-photos/main.py -Scanned: 2016-10-18 16:12:26.349048 -No vulnerabilities found. - - -bezfeng/skinmd-frontend -https://github.com/bezfeng/skinmd-frontend -Entry file: skinmd-frontend/script_server.py -Scanned: 2016-10-18 16:12:26.844829 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DartmouthHackerClub/dnd_search -https://github.com/DartmouthHackerClub/dnd_search -Entry file: dnd_search/app.py -Scanned: 2016-10-18 16:12:30.849026 -No vulnerabilities found. - - -bigsnarfdude/netflix_examples -https://github.com/bigsnarfdude/netflix_examples -Entry file: netflix_examples/flask_hello_world.py -Scanned: 2016-10-18 16:12:31.411531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ekaputra07/poredit -https://github.com/ekaputra07/poredit -Entry file: poredit/poredit/poredit.py -Scanned: 2016-10-18 16:12:34.036226 -No vulnerabilities found. - - -jualvarez/worktracker -https://github.com/jualvarez/worktracker -Entry file: worktracker/worktracker.py -Scanned: 2016-10-18 16:12:35.443665 -Vulnerability 1: -File: worktracker/worktracker.py - > User input at line 146, trigger word "get(": - project = g.db.query(Project).get(id) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 154: project = Project(request.form['name']) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 2: -File: worktracker/worktracker.py - > User input at line 154, trigger word "form[": - project = Project(request.form['name']) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 146: project = g.db.query(Project).get(id) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 3: -File: worktracker/worktracker.py - > User input at line 146, trigger word "get(": - project = g.db.query(Project).get(id) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 154: project = Project(request.form['name']) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - -Vulnerability 4: -File: worktracker/worktracker.py - > User input at line 154, trigger word "form[": - project = Project(request.form['name']) -Reassigned in: - File: worktracker/worktracker.py - > Line 142: project = None - File: worktracker/worktracker.py - > Line 146: project = g.db.query(Project).get(id) - File: worktracker/worktracker.py - > Line 159: ret_MAYBE_FUNCTION_NAME = render_template('project_show.html',project=project, projects=projects) -File: worktracker/worktracker.py - > reaches line 158, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect('%s%d' % (url_for('project_show'), project.id)) - - - -kierandarcy/qrimage -https://github.com/kierandarcy/qrimage -Entry file: qrimage/app.py -Scanned: 2016-10-18 16:12:36.786485 -No vulnerabilities found. - - -rochacon/simple-gapps-group-signup -https://github.com/rochacon/simple-gapps-group-signup -Entry file: simple-gapps-group-signup/app.py -Scanned: 2016-10-18 16:12:37.999828 -No vulnerabilities found. - - -Timothee/Passeplat -https://github.com/Timothee/Passeplat -Entry file: Passeplat/passeplat.py -Scanned: 2016-10-18 16:12:39.379104 -No vulnerabilities found. - - -blazarus/Link-Shortener -https://github.com/blazarus/Link-Shortener -Entry file: Link-Shortener/linkshort/__init__.py -Scanned: 2016-10-18 16:12:39.899653 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cenobites/flask-jsonrpc -https://github.com/cenobites/flask-jsonrpc -Entry file: flask-jsonrpc/run.py -Scanned: 2016-10-18 16:12:47.098459 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -insynchq/flask-googlelogin -https://github.com/insynchq/flask-googlelogin -Entry file: flask-googlelogin/example_offline.py -Scanned: 2016-10-18 16:12:50.102423 -No vulnerabilities found. - - -shea256/flask-app-generator -https://github.com/shea256/flask-app-generator -Entry file: flask-app-generator/resources/basic_app/app.py -Scanned: 2016-10-18 16:12:51.547245 -No vulnerabilities found. - - -albertogg/flask-bootstrap-skel -https://github.com/albertogg/flask-bootstrap-skel -Entry file: flask-bootstrap-skel/application/__init__.py -Scanned: 2016-10-18 16:12:53.112621 -No vulnerabilities found. - - -alecthomas/flask_injector -https://github.com/alecthomas/flask_injector -Entry file: flask_injector/flask_injector_tests.py -Scanned: 2016-10-18 16:12:56.602607 -No vulnerabilities found. - - -ema/flask-moresql -https://github.com/ema/flask-moresql -Entry file: flask-moresql/flask_moresql.py -Scanned: 2016-10-18 16:13:00.961224 -No vulnerabilities found. - - -gregorynicholas/flask-gae_blobstore -https://github.com/gregorynicholas/flask-gae_blobstore -Entry file: flask-gae_blobstore/flask_gae_blobstore_tests.py -Scanned: 2016-10-18 16:13:07.035315 -No vulnerabilities found. - - -icecreammatt/flask-empty -https://github.com/icecreammatt/flask-empty -Entry file: flask-empty/app/__init__.py -Scanned: 2016-10-18 16:13:12.113684 -No vulnerabilities found. - - -david-torres/flask-quickstart -https://github.com/david-torres/flask-quickstart -Entry file: flask-quickstart/application/__init__.py -Scanned: 2016-10-18 16:13:16.726491 -No vulnerabilities found. - - -rahulbot/GV-GetToKnow-flask -https://github.com/rahulbot/GV-GetToKnow-flask -Entry file: GV-GetToKnow-flask/gettoknow.py -Scanned: 2016-10-18 16:13:20.651453 -No vulnerabilities found. - - -oturing/flask-br -https://github.com/oturing/flask-br -Entry file: flask-br/examples/flaskr/flaskr.py -Scanned: 2016-10-18 16:13:22.337201 -No vulnerabilities found. - - -ismaild/flaskr-bdd -https://github.com/ismaild/flaskr-bdd -Entry file: flaskr-bdd/flaskr.py -Scanned: 2016-10-18 16:13:23.657899 -No vulnerabilities found. - - -regadas/flask-tornado-websocket -https://github.com/regadas/flask-tornado-websocket -Entry file: flask-tornado-websocket/app/__init__.py -Scanned: 2016-10-18 16:13:24.159602 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lomatus/flask2sae -https://github.com/lomatus/flask2sae -Entry file: flask2sae/1/app/__init__.py -Scanned: 2016-10-18 16:13:25.575572 -No vulnerabilities found. - - -yaniv-aknin/aknin-flask-skeleton -https://github.com/yaniv-aknin/aknin-flask-skeleton -Entry file: aknin-flask-skeleton/application/app.py -Scanned: 2016-10-18 16:13:32.409430 -No vulnerabilities found. - - -marksteve/flask-stathat -https://github.com/marksteve/flask-stathat -Entry file: flask-stathat/example.py -Scanned: 2016-10-18 16:13:33.997645 -No vulnerabilities found. - - -pengfei-xue/openshift-flask-mongdb -https://github.com/pengfei-xue/openshift-flask-mongdb -Entry file: openshift-flask-mongdb/blog/main.py -Scanned: 2016-10-18 16:13:35.700294 -Vulnerability 1: -File: openshift-flask-mongdb/blog/blueprints/apis/views.py - > User input at line 27, trigger word "get(": - term = request.args.get('term', None) -File: openshift-flask-mongdb/blog/blueprints/apis/views.py - > reaches line 33, trigger word "filter(": - result = list(filter(term.lower() in tag.lower(), set(result))) - - - -ncweinhold/flask-knockout-example -https://github.com/ncweinhold/flask-knockout-example -Entry file: flask-knockout-example/app.py -Scanned: 2016-10-18 16:13:36.945401 -No vulnerabilities found. - - -gkoberger/flask-heroku -https://github.com/gkoberger/flask-heroku -Entry file: flask-heroku/app.py -Scanned: 2016-10-18 16:13:38.532169 -No vulnerabilities found. - - -theho/flask-riak-skeleton -https://github.com/theho/flask-riak-skeleton -Entry file: None -Scanned: 2016-10-18 16:13:39.050850 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/theho/flask-riak-skeleton. - -davirtavares/flask-complexform -https://github.com/davirtavares/flask-complexform -Entry file: flask-complexform/testeflask.py -Scanned: 2016-10-18 16:13:44.589000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lmeunier/flasktodo -https://github.com/lmeunier/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 16:13:48.713633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brab/flaskr -https://github.com/brab/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:13:49.199990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqwinters/Flaskr -https://github.com/lqwinters/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:13:52.176015 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thermosilla/flaskapp -https://github.com/thermosilla/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:13:55.657697 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcus-darden/flask1 -https://github.com/marcus-darden/flask1 -Entry file: flask1/app.py -Scanned: 2016-10-18 16:14:04.387501 -No vulnerabilities found. - - -Alir3z4/flask-microblog-sqlalchemy -https://github.com/Alir3z4/flask-microblog-sqlalchemy -Entry file: flask-microblog-sqlalchemy/app/__init__.py -Scanned: 2016-10-18 16:14:07.846647 -No vulnerabilities found. - - -seansawyer/foh -https://github.com/seansawyer/foh -Entry file: foh/foh/__init__.py -Scanned: 2016-10-18 16:14:11.212221 -No vulnerabilities found. - - -feik/flask-blog -https://github.com/feik/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:14:16.251004 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -randallm/whatsthehomework_flask -https://github.com/randallm/whatsthehomework_flask -Entry file: whatsthehomework_flask/wth/__init__.py -Scanned: 2016-10-18 16:14:18.631160 -No vulnerabilities found. - - -robottaway/flask_websocket -https://github.com/robottaway/flask_websocket -Entry file: flask_websocket/app/__init__.py -Scanned: 2016-10-18 16:14:22.366753 -No vulnerabilities found. - - -vladke/flask-blog -https://github.com/vladke/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:14:22.877417 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -protunt/flask-blog -https://github.com/protunt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:14:24.872266 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -makotoworld/flask-example -https://github.com/makotoworld/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 16:14:26.379709 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikepea/flask_playing -https://github.com/mikepea/flask_playing -Entry file: None -Scanned: 2016-10-18 16:14:27.899572 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mikepea/flask_playing. - -feigner/flask-testbed -https://github.com/feigner/flask-testbed -Entry file: flask-testbed/test.py -Scanned: 2016-10-18 16:14:29.394935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smileyteresa/flask-blog -https://github.com/smileyteresa/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:14:30.949665 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -naot-said/test-flask -https://github.com/naot-said/test-flask -Entry file: test-flask/hello.py -Scanned: 2016-10-18 16:14:34.307819 -No vulnerabilities found. - - -shabda/learning_flask -https://github.com/shabda/learning_flask -Entry file: learning_flask/flaskr/flaskr.py -Scanned: 2016-10-18 16:14:35.522765 -No vulnerabilities found. - - -RainCT/flask-template-with-social -https://github.com/RainCT/flask-template-with-social -Entry file: flask-template-with-social/webapp/__init__.py -Scanned: 2016-10-18 16:14:40.037302 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdmurphy/flask-reservoir-jsonp-wrapper -https://github.com/rdmurphy/flask-reservoir-jsonp-wrapper -Entry file: flask-reservoir-jsonp-wrapper/grabber.py -Scanned: 2016-10-18 16:14:48.728493 -No vulnerabilities found. - - -gagansaini/example-python-flask -https://github.com/gagansaini/example-python-flask -Entry file: example-python-flask/app.py -Scanned: 2016-10-18 16:14:50.058772 -No vulnerabilities found. - - -ncweinhold/flask-code-sharing -https://github.com/ncweinhold/flask-code-sharing -Entry file: flask-code-sharing/pasteapp/__init__.py -Scanned: 2016-10-18 16:14:51.524674 -No vulnerabilities found. - - -iolab12/flask_demo_2 -https://github.com/iolab12/flask_demo_2 -Entry file: flask_demo_2/polls.py -Scanned: 2016-10-18 16:14:53.438066 -No vulnerabilities found. - - -plaes/wirexfers-flask-demo -https://github.com/plaes/wirexfers-flask-demo -Entry file: wirexfers-flask-demo/wirexfers_flask_demo/__init__.py -Scanned: 2016-10-18 16:14:55.988570 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -yeojz/skeleton-bottle-flask -https://github.com/yeojz/skeleton-bottle-flask -Entry file: skeleton-bottle-flask/thirdparty/flask/sessions.py -Scanned: 2016-10-18 16:15:00.517926 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drawcode/flask-template-basic -https://github.com/drawcode/flask-template-basic -Entry file: flask-template-basic/app/__init__.py -Scanned: 2016-10-18 16:15:04.771466 -Vulnerability 1: -File: flask-template-basic/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-template-basic/app/users/views.py - > Line 38: session['user_id'] = user.id -File: flask-template-basic/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -ardinor/yamazumi -https://github.com/ardinor/yamazumi -Entry file: yamazumi/yamazumi/__init__.py -Scanned: 2016-10-18 16:15:08.062712 -No vulnerabilities found. - - -nanorepublica/secret-santa -https://github.com/nanorepublica/secret-santa -Entry file: secret-santa/secret_santa.py -Scanned: 2016-10-18 16:15:10.604940 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seme0021/flaskr-reader -https://github.com/seme0021/flaskr-reader -Entry file: flaskr-reader/app.py -Scanned: 2016-10-18 16:15:12.194341 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vijaym123/FaceDetection-SimpleCVandFlask -https://github.com/vijaym123/FaceDetection-SimpleCVandFlask -Entry file: FaceDetection-SimpleCVandFlask/upload.py -Scanned: 2016-10-18 16:15:18.971395 -No vulnerabilities found. - - -ryanc/mmmpaste -https://github.com/ryanc/mmmpaste -Entry file: mmmpaste/mmmpaste/__init__.py -Scanned: 2016-10-18 16:15:20.478046 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rowandh/pytorrent -https://github.com/rowandh/pytorrent -Entry file: pytorrent/bt/Tracker.py -Scanned: 2016-10-18 16:15:24.208517 -No vulnerabilities found. - - -gatesphere/ptah -https://github.com/gatesphere/ptah -Entry file: ptah/sitebuilder.py -Scanned: 2016-10-18 16:15:26.035716 -No vulnerabilities found. - - -ericevenchick/site -https://github.com/ericevenchick/site -Entry file: site/site.py -Scanned: 2016-10-18 16:15:29.338951 -No vulnerabilities found. - - -wantsomechocolate/PythonWebsite -https://github.com/wantsomechocolate/PythonWebsite -Entry file: PythonWebsite/app.py -Scanned: 2016-10-18 16:15:29.851809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jineshpaloor/Mysite -https://github.com/jineshpaloor/Mysite -Entry file: Mysite/home.py -Scanned: 2016-10-18 16:15:32.870079 -No vulnerabilities found. - - -schinken/py-powerctrl -https://github.com/schinken/py-powerctrl -Entry file: py-powerctrl/main.py -Scanned: 2016-10-18 16:15:35.606210 -No vulnerabilities found. - - -rudolpho/kazapp -https://github.com/rudolpho/kazapp -Entry file: kazapp/kazapp.py -Scanned: 2016-10-18 16:15:37.941838 -No vulnerabilities found. - - -daleobrien/bootflask -https://github.com/daleobrien/bootflask -Entry file: bootflask/main.py -Scanned: 2016-10-18 16:15:39.497908 -No vulnerabilities found. - - -nerdguy/httpfirmata -https://github.com/nerdguy/httpfirmata -Entry file: httpfirmata/httpfirmata/server.py -Scanned: 2016-10-18 16:15:40.006031 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anusharanganathan/diskMonitor -https://github.com/anusharanganathan/diskMonitor -Entry file: diskMonitor/webui.py -Scanned: 2016-10-18 16:15:41.561343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leibatt/forms -https://github.com/leibatt/forms -Entry file: forms/form_serv.py -Scanned: 2016-10-18 16:15:42.071423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tjstum/isawyou-too -https://github.com/tjstum/isawyou-too -Entry file: isawyou-too/isy/__init__.py -Scanned: 2016-10-18 16:15:48.059661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Foxboron/FoxBlog -https://github.com/Foxboron/FoxBlog -Entry file: FoxBlog/app/__init__.py -Scanned: 2016-10-18 16:15:49.559788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jmhobbs/batsdboard -https://github.com/jmhobbs/batsdboard -Entry file: batsdboard/src/batsdboard_server.py -Scanned: 2016-10-18 16:15:51.799598 -No vulnerabilities found. - - -LarryEitel/pyfem -https://github.com/LarryEitel/pyfem -Entry file: pyfem/pyfem/app.py -Scanned: 2016-10-18 16:15:52.311964 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hciudad/webhook_listener -https://github.com/hciudad/webhook_listener -Entry file: webhook_listener/app.py -Scanned: 2016-10-18 16:15:52.825429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbit/uwsgicc -https://github.com/unbit/uwsgicc -Entry file: uwsgicc/uwsgicc.py -Scanned: 2016-10-18 16:15:57.378662 -No vulnerabilities found. - - -sagnew/secret_santa -https://github.com/sagnew/secret_santa -Entry file: secret_santa/app.py -Scanned: 2016-10-18 16:16:04.374101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vc4a/vc4a-python-example -https://github.com/vc4a/vc4a-python-example -Entry file: vc4a-python-example/app.py -Scanned: 2016-10-18 16:16:11.354004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-18 16:16:18.168933 -No vulnerabilities found. - - -miguelgrinberg/microblog -https://github.com/miguelgrinberg/microblog -Entry file: None -Scanned: 2016-10-18 16:16:18.704269 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-18 16:16:21.197337 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-18 16:16:22.702293 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-18 16:16:25.076816 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-18 16:16:25.582091 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trtg/flask_assets_tutorial -https://github.com/trtg/flask_assets_tutorial -Entry file: flask_assets_tutorial/example/__init__.py -Scanned: 2016-10-18 16:16:27.120574 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-18 16:16:28.662498 -No vulnerabilities found. - - -maxcnunes/flaskgaedemo -https://github.com/maxcnunes/flaskgaedemo -Entry file: flaskgaedemo/main.py -Scanned: 2016-10-18 16:16:35.172319 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -domenicosolazzo/flask_examples -https://github.com/domenicosolazzo/flask_examples -Entry file: flask_examples/logger_example.py -Scanned: 2016-10-18 16:16:38.490560 -No vulnerabilities found. - - -akostyuk/flask-dbmigrate -https://github.com/akostyuk/flask-dbmigrate -Entry file: flask-dbmigrate/tests.py -Scanned: 2016-10-18 16:16:40.460816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -50onRed/phillypug-flask -https://github.com/50onRed/phillypug-flask -Entry file: phillypug-flask/phillypug/app.py -Scanned: 2016-10-18 16:16:42.808134 -No vulnerabilities found. - - -booo/flask-gtfs -https://github.com/booo/flask-gtfs -Entry file: None -Scanned: 2016-10-18 16:16:45.817896 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/booo/flask-gtfs. - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-18 16:16:49.107126 -No vulnerabilities found. - - -sagarrakshe/flaskr -https://github.com/sagarrakshe/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:16:49.626747 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:16:51.164610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: None -Scanned: 2016-10-18 16:16:53.208001 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-18 16:16:56.727803 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eddawong/FlaskStudy -https://github.com/eddawong/FlaskStudy -Entry file: FlaskStudy/main.py -Scanned: 2016-10-18 16:17:01.992949 -No vulnerabilities found. - - -nerevu/prometheus -https://github.com/nerevu/prometheus -Entry file: prometheus/app/__init__.py -Scanned: 2016-10-18 16:17:04.494769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -floweb/liensdujour -https://github.com/floweb/liensdujour -Entry file: liensdujour/liensdujour/liensdujour.py -Scanned: 2016-10-18 16:17:07.983351 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-18 16:17:11.480645 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-18 16:17:14.016338 -No vulnerabilities found. - - -parryjacob/flask-boilerplate -https://github.com/parryjacob/flask-boilerplate -Entry file: flask-boilerplate/project/__init__.py -Scanned: 2016-10-18 16:17:18.414256 -No vulnerabilities found. - - -scottdnz/flask_skeleton -https://github.com/scottdnz/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-18 16:17:18.911960 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -protunt/flask-blog -https://github.com/protunt/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:17:21.429317 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -jpercent/flask-control -https://github.com/jpercent/flask-control -Entry file: flask-control/example.py -Scanned: 2016-10-18 16:17:22.943682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-18 16:17:24.474027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ceasar/pocket_flask -https://github.com/Ceasar/pocket_flask -Entry file: pocket_flask/app/__init__.py -Scanned: 2016-10-18 16:17:26.995735 -No vulnerabilities found. - - -rhyselsmore/flask-modus -https://github.com/rhyselsmore/flask-modus -Entry file: flask-modus/test_flask_modus.py -Scanned: 2016-10-18 16:17:28.319273 -No vulnerabilities found. - - -pavlenko-volodymyr/flask-study -https://github.com/pavlenko-volodymyr/flask-study -Entry file: flask-study/src/app/__init__.py -Scanned: 2016-10-18 16:17:29.557643 -No vulnerabilities found. - - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-18 16:17:30.158921 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slizadel/flask-gitrcv -https://github.com/slizadel/flask-gitrcv -Entry file: flask-gitrcv/flask-gitrcv/gitrcv.py -Scanned: 2016-10-18 16:17:32.098070 -No vulnerabilities found. - - -apjd/flask-heroku -https://github.com/apjd/flask-heroku -Entry file: flask-heroku/flasky.py -Scanned: 2016-10-18 16:17:33.485635 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-18 16:17:35.843681 -No vulnerabilities found. - - -CMGS/poll -https://github.com/CMGS/poll -Entry file: poll/app.py -Scanned: 2016-10-18 16:17:39.617916 -No vulnerabilities found. - - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-18 16:17:41.319841 -No vulnerabilities found. - - -alph486/SimpleFlaskAPI -https://github.com/alph486/SimpleFlaskAPI -Entry file: SimpleFlaskAPI/app.py -Scanned: 2016-10-18 16:17:41.842604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunilJacob/Paint-app-using-Flask -https://github.com/JunilJacob/Paint-app-using-Flask -Entry file: Paint-app-using-Flask/hello.py -Scanned: 2016-10-18 16:17:43.053696 -Vulnerability 1: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 18, trigger word "execute(": - c.execute('DELETE FROM Image WHERE file=?', iname) - -Vulnerability 2: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 3: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 4: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 36, trigger word "render_template(": - resp = Response('' + render_template('paint.html'),status=200, mimetype='html') - - - -dimfox/flask-mega-tutorial -https://github.com/dimfox/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-18 16:17:43.582619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuxuecheng/python_flask_guestbook -https://github.com/liuxuecheng/python_flask_guestbook -Entry file: python_flask_guestbook/main.py -Scanned: 2016-10-18 16:17:46.855391 -No vulnerabilities found. - - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-18 16:17:49.847244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-18 16:17:51.371502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshkurz/exi -https://github.com/joshkurz/exi -Entry file: exi/exi/tests/security/test_app/__init__.py -Scanned: 2016-10-18 16:17:54.062552 -No vulnerabilities found. - - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-18 16:17:57.112825 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-18 16:18:01.611390 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dogrdon/txtr -https://github.com/dogrdon/txtr -Entry file: txtr/txtr.py -Scanned: 2016-10-18 16:18:05.112849 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -booo/baedproject -https://github.com/booo/baedproject -Entry file: baedproject/app.py -Scanned: 2016-10-18 16:18:09.395135 -No vulnerabilities found. - - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-18 16:18:12.956431 -No vulnerabilities found. - - -thoughtnirvana/redux -https://github.com/thoughtnirvana/redux -Entry file: redux/main.py -Scanned: 2016-10-18 16:18:13.486816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skinofstars/monkey -https://github.com/skinofstars/monkey -Entry file: monkey/app.py -Scanned: 2016-10-18 16:18:18.762334 -No vulnerabilities found. - - -zhoutuo/dota2bbq -https://github.com/zhoutuo/dota2bbq -Entry file: dota2bbq/wsgi.py -Scanned: 2016-10-18 16:18:19.358972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-18 16:18:21.860933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kalimatas/herokuflask -https://github.com/kalimatas/herokuflask -Entry file: herokuflask/app.py -Scanned: 2016-10-18 16:18:24.105817 -No vulnerabilities found. - - -norbert/helloflask -https://github.com/norbert/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-18 16:18:24.614504 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-18 16:18:28.182368 -No vulnerabilities found. - - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-18 16:18:28.691035 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sburns/switchboard -https://github.com/sburns/switchboard -Entry file: switchboard/sample_app.py -Scanned: 2016-10-18 16:18:29.242948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pusungwi/lobotomizer -https://github.com/Pusungwi/lobotomizer -Entry file: None -Scanned: 2016-10-18 16:18:30.758208 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pusungwi/lobotomizer. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-18 16:18:31.339446 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -takosuke/pizzasuicideclub -https://github.com/takosuke/pizzasuicideclub -Entry file: pizzasuicideclub/psc_app/__init__.py -Scanned: 2016-10-18 16:18:33.048389 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-18 16:18:35.565681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bogdan-kulynych/cloudlectures -https://github.com/bogdan-kulynych/cloudlectures -Entry file: cloudlectures/flask/sessions.py -Scanned: 2016-10-18 16:18:37.112243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neilduncan/FlickrPlaceholders -https://github.com/neilduncan/FlickrPlaceholders -Entry file: FlickrPlaceholders/main.py -Scanned: 2016-10-18 16:18:41.965360 -No vulnerabilities found. - - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-18 16:18:43.913562 -No vulnerabilities found. - - -msergdeez/vwcontrol -https://github.com/msergdeez/vwcontrol -Entry file: vwcontrol/vwcontrol.py -Scanned: 2016-10-18 16:18:44.503004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanielleSucher/BookQueue -https://github.com/DanielleSucher/BookQueue -Entry file: BookQueue/app.py -Scanned: 2016-10-18 16:18:45.898213 -Vulnerability 1: -File: BookQueue/app.py - > User input at line 145, trigger word "form[": - from_email = request.form['sender'].lower() -File: BookQueue/app.py - > reaches line 146, trigger word "filter(": - query = User.query.filter(User.email == from_email) - - - -amaterasu-/placeholder -https://github.com/amaterasu-/placeholder -Entry file: placeholder/image.py -Scanned: 2016-10-18 16:18:47.110824 -No vulnerabilities found. - - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-18 16:18:51.672900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikeboers/Flask-Images -https://github.com/mikeboers/Flask-Images -Entry file: Flask-Images/tests/__init__.py -Scanned: 2016-10-18 16:18:54.391275 -No vulnerabilities found. - - -bkabrda/flask-whooshee -https://github.com/bkabrda/flask-whooshee -Entry file: flask-whooshee/test.py -Scanned: 2016-10-18 16:18:55.926937 -No vulnerabilities found. - - -koon-kai/kiblog -https://github.com/koon-kai/kiblog -Entry file: kiblog/app.py -Scanned: 2016-10-18 16:19:01.929685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deepgully/me -https://github.com/deepgully/me -Entry file: me/settings.py -Scanned: 2016-10-18 16:19:05.520993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -berlotto/flask-app-template -https://github.com/berlotto/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-18 16:19:09.023723 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/flask-jsonpify -https://github.com/corydolphin/flask-jsonpify -Entry file: flask-jsonpify/test.py -Scanned: 2016-10-18 16:19:13.417065 -No vulnerabilities found. - - -mickey06/Flask-principal-example -https://github.com/mickey06/Flask-principal-example -Entry file: Flask-principal-example/FPrincipals.py -Scanned: 2016-10-18 16:19:14.767079 -No vulnerabilities found. - - -crazygit/flask -https://github.com/crazygit/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:19:20.446700 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -joelrojo/flask -https://github.com/joelrojo/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:19:21.747331 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wingu/flask_filters -https://github.com/wingu/flask_filters -Entry file: flask_filters/test_flask_filters.py -Scanned: 2016-10-18 16:19:26.144836 -No vulnerabilities found. - - -seanrose/box-arcade -https://github.com/seanrose/box-arcade -Entry file: box-arcade/app/__init__.py -Scanned: 2016-10-18 16:19:26.651875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-18 16:19:29.880874 -No vulnerabilities found. - - -eadmundo/flask-static-blog -https://github.com/eadmundo/flask-static-blog -Entry file: flask-static-blog/app/__init__.py -Scanned: 2016-10-18 16:19:32.369309 -No vulnerabilities found. - - -BuongiornoMIP/Reding -https://github.com/BuongiornoMIP/Reding -Entry file: Reding/reding/app.py -Scanned: 2016-10-18 16:19:34.361361 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-18 16:19:36.246673 -No vulnerabilities found. - - -colwilson/flask-lazyapi -https://github.com/colwilson/flask-lazyapi -Entry file: flask-lazyapi/demo_server.py -Scanned: 2016-10-18 16:19:36.754794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asgoel/Merge-flask -https://github.com/asgoel/Merge-flask -Entry file: Merge-flask/app.py -Scanned: 2016-10-18 16:19:37.266357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-DataBrowser -https://github.com/xiechao06/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-18 16:19:40.798881 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-18 16:19:41.300718 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -gregimba/Vodka -https://github.com/gregimba/Vodka -Entry file: Vodka/app.py -Scanned: 2016-10-18 16:19:44.018506 -No vulnerabilities found. - - -corydolphin/flask-olinauth -https://github.com/corydolphin/flask-olinauth -Entry file: flask-olinauth/example.py -Scanned: 2016-10-18 16:19:46.864468 -No vulnerabilities found. - - -theho/flask-wsgi -https://github.com/theho/flask-wsgi -Entry file: flask-wsgi/wsgi.py -Scanned: 2016-10-18 16:19:48.107877 -No vulnerabilities found. - - -0atman/flask-basic -https://github.com/0atman/flask-basic -Entry file: flask-basic/flask-basic.py -Scanned: 2016-10-18 16:19:50.853916 -No vulnerabilities found. - - -adityaathalye/flaskr -https://github.com/adityaathalye/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:19:57.773940 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danielestevez/flasktutorial -https://github.com/danielestevez/flasktutorial -Entry file: None -Scanned: 2016-10-18 16:20:05.754106 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-18 16:20:09.247213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pityonline/flaskr -https://github.com/pityonline/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:20:12.756137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:20:14.263223 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clmns/flasktest -https://github.com/clmns/flasktest -Entry file: flasktest/nachh/app.py -Scanned: 2016-10-18 16:20:19.637466 -No vulnerabilities found. - - -zfdang/memcached-in-openshift -https://github.com/zfdang/memcached-in-openshift -Entry file: memcached-in-openshift/wsgi/main.py -Scanned: 2016-10-18 16:20:22.640972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Masagin/FlaskCelery -https://github.com/Masagin/FlaskCelery -Entry file: FlaskCelery/flask.py -Scanned: 2016-10-18 16:20:24.144084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ConceptPending/flaskTemplate -https://github.com/ConceptPending/flaskTemplate -Entry file: flaskTemplate/server.py -Scanned: 2016-10-18 16:20:27.629488 -No vulnerabilities found. - - -garethpaul/flask-sample -https://github.com/garethpaul/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-18 16:20:28.135740 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Studentapp-Flask -https://github.com/prabeesh/Studentapp-Flask -Entry file: Studentapp-Flask/test.py -Scanned: 2016-10-18 16:20:29.666027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexMost/Flask-starter -https://github.com/AlexMost/Flask-starter -Entry file: Flask-starter/app.py -Scanned: 2016-10-18 16:20:33.926150 -No vulnerabilities found. - - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-18 16:20:36.334986 -No vulnerabilities found. - - -EvilDmitri/flask-mikroblog -https://github.com/EvilDmitri/flask-mikroblog -Entry file: flask-mikroblog/app/__init__.py -Scanned: 2016-10-18 16:20:37.855028 -No vulnerabilities found. - - -ekfriis/flask-mbtiles -https://github.com/ekfriis/flask-mbtiles -Entry file: flask-mbtiles/mbtileserver.py -Scanned: 2016-10-18 16:20:39.095395 -No vulnerabilities found. - - -hyaticua/flask-blog -https://github.com/hyaticua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:20:41.621182 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -maxcnunes/flask_bravi -https://github.com/maxcnunes/flask_bravi -Entry file: flask_bravi/braviapp/__init__.py -Scanned: 2016-10-18 16:20:43.138048 -No vulnerabilities found. - - -naveenpremchand02/flask_url -https://github.com/naveenpremchand02/flask_url -Entry file: flask_url/url.py -Scanned: 2016-10-18 16:20:46.601808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhemao/flask_demo -https://github.com/zhemao/flask_demo -Entry file: flask_demo/application.py -Scanned: 2016-10-18 16:20:51.359881 -No vulnerabilities found. - - -dproni/flask_test -https://github.com/dproni/flask_test -Entry file: flask_test/flask_test.py -Scanned: 2016-10-18 16:20:52.579234 -No vulnerabilities found. - - -thearchduke/flask-boiler -https://github.com/thearchduke/flask-boiler -Entry file: None -Scanned: 2016-10-18 16:20:53.092852 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StefanKjartansson/bower-flask -https://github.com/StefanKjartansson/bower-flask -Entry file: bower-flask/server.py -Scanned: 2016-10-18 16:20:55.328285 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-18 16:20:56.640601 -No vulnerabilities found. - - -tanayseven/Voix -https://github.com/tanayseven/Voix -Entry file: None -Scanned: 2016-10-18 16:20:58.175215 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gatesphere/flaskr-flask-tutorial -https://github.com/gatesphere/flaskr-flask-tutorial -Entry file: flaskr-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-18 16:21:03.413798 -No vulnerabilities found. - - -cpdean/flask-oauth-tutorial -https://github.com/cpdean/flask-oauth-tutorial -Entry file: flask-oauth-tutorial/flaskr.py -Scanned: 2016-10-18 16:21:06.685233 -No vulnerabilities found. - - -xiechao06/Flask-NavBar -https://github.com/xiechao06/Flask-NavBar -Entry file: Flask-NavBar/flask_nav_bar.py -Scanned: 2016-10-18 16:21:10.222414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SalemHarrache-Archive/flask_chat_eventsource -https://github.com/SalemHarrache-Archive/flask_chat_eventsource -Entry file: flask_chat_eventsource/server.py -Scanned: 2016-10-18 16:21:13.729875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nsfyn55/flask-mega-tutorial -https://github.com/nsfyn55/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-18 16:21:15.261546 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-18 16:21:19.787562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kishorekdty/paint_using_flask -https://github.com/kishorekdty/paint_using_flask -Entry file: None -Scanned: 2016-10-18 16:21:21.307052 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kishorekdty/paint_using_flask. - -bazerk/baz-flask-base -https://github.com/bazerk/baz-flask-base -Entry file: baz-flask-base/app/app.py -Scanned: 2016-10-18 16:21:23.975325 -Vulnerability 1: -File: baz-flask-base/app/frontend/views.py - > User input at line 48, trigger word "get(": - form = LoginForm(login=request.args.get('login', None), next=request.args.get('next', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 52: user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id - File: baz-flask-base/app/frontend/views.py - > Line 65: ret_MAYBE_FUNCTION_NAME = render_template('frontend/login.html',form=form) -File: baz-flask-base/app/frontend/views.py - > reaches line 61, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('') - -Vulnerability 2: -File: baz-flask-base/app/frontend/views.py - > User input at line 52, trigger word ".data": - user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id -File: baz-flask-base/app/frontend/views.py - > reaches line 61, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('') - - - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-18 16:21:25.436122 -No vulnerabilities found. - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-18 16:21:25.965032 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-18 16:21:28.485031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Heroku-Paint-Using-Flask -https://github.com/rasheedh/Heroku-Paint-Using-Flask -Entry file: None -Scanned: 2016-10-18 16:21:30.025124 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Heroku-Paint-Using-Flask. - -Andrey-Khobnya/flask-sessions-mongo -https://github.com/Andrey-Khobnya/flask-sessions-mongo -Entry file: flask-sessions-mongo/flask-sessions-mongo/examples/loginsession.py -Scanned: 2016-10-18 16:21:32.881739 -No vulnerabilities found. - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-18 16:21:33.887102 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -texuf/myflaskproject -https://github.com/texuf/myflaskproject -Entry file: myflaskproject/hello.py -Scanned: 2016-10-18 16:21:37.141513 -No vulnerabilities found. - - -kshitizrimal/flaskr-modified -https://github.com/kshitizrimal/flaskr-modified -Entry file: flaskr-modified/flaskr.py -Scanned: 2016-10-18 16:21:37.711198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sreekanthkaralmanna/heroku-paint-app-using-flask -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask -Entry file: None -Scanned: 2016-10-18 16:21:42.220576 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask. - -prasanthkumara/Heroku-Paint-App-Using--Flask -https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask -Entry file: None -Scanned: 2016-10-18 16:21:43.725449 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask. - -pyxze/PyxzeCorpus -https://github.com/pyxze/PyxzeCorpus -Entry file: PyxzeCorpus/corpus.py -Scanned: 2016-10-18 16:21:46.077219 -No vulnerabilities found. - - -mikewallace1979/milk -https://github.com/mikewallace1979/milk -Entry file: milk/milk.py -Scanned: 2016-10-18 16:21:48.417179 -No vulnerabilities found. - - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-18 16:21:49.659960 -No vulnerabilities found. - - -goonpug/goonpug-stats -https://github.com/goonpug/goonpug-stats -Entry file: goonpug-stats/goonpug/__init__.py -Scanned: 2016-10-18 16:21:52.457329 -No vulnerabilities found. - - -csesoc/bark-core -https://github.com/csesoc/bark-core -Entry file: bark-core/bark/__init__.py -Scanned: 2016-10-18 16:21:52.954977 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crcsmnky/thehotspot -https://github.com/crcsmnky/thehotspot -Entry file: thehotspot/v2/app.py -Scanned: 2016-10-18 16:21:54.543313 -No vulnerabilities found. - - -etscrivner/sovereign-states -https://github.com/etscrivner/sovereign-states -Entry file: sovereign-states/sovereign_states/api.py -Scanned: 2016-10-18 16:21:55.908443 -No vulnerabilities found. - - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-18 16:21:57.253828 -No vulnerabilities found. - - -sreedathns/paint-app-using-heroku-and-flask -https://github.com/sreedathns/paint-app-using-heroku-and-flask -Entry file: None -Scanned: 2016-10-18 16:21:58.757540 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreedathns/paint-app-using-heroku-and-flask. - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-18 16:22:03.262043 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -igrishaev/youtube-python-api-sample -https://github.com/igrishaev/youtube-python-api-sample -Entry file: youtube-python-api-sample/app.py -Scanned: 2016-10-18 16:22:06.819574 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chadgh/chessy -https://github.com/chadgh/chessy -Entry file: None -Scanned: 2016-10-18 16:22:10.328845 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lee212/fg-ws -https://github.com/lee212/fg-ws -Entry file: fg-ws/fgws/ws/FGWSApps.py -Scanned: 2016-10-18 16:22:13.837056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simplyluke/dothis -https://github.com/simplyluke/dothis -Entry file: dothis/dothis.py -Scanned: 2016-10-18 16:22:20.714449 -No vulnerabilities found. - - -fusic-com/flask-todo -https://github.com/fusic-com/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-18 16:22:23.825412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kljensen/async-flask-sqlalchemy-example -https://github.com/kljensen/async-flask-sqlalchemy-example -Entry file: async-flask-sqlalchemy-example/server.py -Scanned: 2016-10-18 16:22:25.333376 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fusic-com/flask-webcache -https://github.com/fusic-com/flask-webcache -Entry file: flask-webcache/contrib/sleepycalc/app.py -Scanned: 2016-10-18 16:22:27.703977 -No vulnerabilities found. - - -rehandalal/flask-mobility -https://github.com/rehandalal/flask-mobility -Entry file: flask-mobility/flask_mobility/tests/test_decorators.py -Scanned: 2016-10-18 16:22:30.202871 -Vulnerability 1: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 48, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 2: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 51, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 3: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 69, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 4: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 72, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 5: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 36, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 6: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 40, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'off') - - - -kelp404/Flask-GAE -https://github.com/kelp404/Flask-GAE -Entry file: None -Scanned: 2016-10-18 16:22:30.723357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wbolster/flask-uuid -https://github.com/wbolster/flask-uuid -Entry file: flask-uuid/test_flask_uuid.py -Scanned: 2016-10-18 16:22:34.636804 -No vulnerabilities found. - - -pyr/url-shortener -https://github.com/pyr/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-18 16:22:36.643893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danielholmstrom/flask-alchemyview -https://github.com/danielholmstrom/flask-alchemyview -Entry file: flask-alchemyview/tests/test_with_flask_sqlalchemy.py -Scanned: 2016-10-18 16:22:39.629317 -No vulnerabilities found. - - -kommmy/Flask -https://github.com/kommmy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:22:40.162491 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DavidWittman/csrgenerator.com -https://github.com/DavidWittman/csrgenerator.com -Entry file: None -Scanned: 2016-10-18 16:22:42.683823 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vovantics/flask-bluebone -https://github.com/vovantics/flask-bluebone -Entry file: flask-bluebone/app/app.py -Scanned: 2016-10-18 16:22:43.234226 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -vmi356/filemanager -https://github.com/vmi356/filemanager -Entry file: filemanager/manager.py -Scanned: 2016-10-18 16:22:43.740932 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaysonsantos/jinja-assets-compressor -https://github.com/jaysonsantos/jinja-assets-compressor -Entry file: jinja-assets-compressor/jac/contrib/flask.py -Scanned: 2016-10-18 16:22:50.357403 -No vulnerabilities found. - - -1000ch/flask-handson -https://github.com/1000ch/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-18 16:22:51.900996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-18 16:22:53.399377 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -cratejoy/flask-experiment -https://github.com/cratejoy/flask-experiment -Entry file: flask-experiment/test/test.py -Scanned: 2016-10-18 16:22:56.875593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jishnujagajeeve/Flaskr -https://github.com/jishnujagajeeve/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:22:59.366994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbika/flaskm -https://github.com/rbika/flaskm -Entry file: flaskm/flaskm.py -Scanned: 2016-10-18 16:23:04.820936 -No vulnerabilities found. - - -openfree/flaskr -https://github.com/openfree/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:23:07.322990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -catfive/flaskr -https://github.com/catfive/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:23:10.818288 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Basher51/Flaskr -https://github.com/Basher51/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:23:14.320690 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nabetama/flaskr -https://github.com/nabetama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:23:15.825474 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikedll/flasksqlitedemo -https://github.com/mikedll/flasksqlitedemo -Entry file: flasksqlitedemo/app.py -Scanned: 2016-10-18 16:23:20.334907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-18 16:23:22.851592 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaste/FlaskDeferredHandler -https://github.com/kaste/FlaskDeferredHandler -Entry file: FlaskDeferredHandler/flask_handler_test.py -Scanned: 2016-10-18 16:23:25.100279 -No vulnerabilities found. - - -adityaathalye/flaskr2 -https://github.com/adityaathalye/flaskr2 -Entry file: flaskr2/app.py -Scanned: 2016-10-18 16:23:26.316286 -No vulnerabilities found. - - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-18 16:23:29.762374 -No vulnerabilities found. - - -abulte/flask-arduino-websocket-sqlite -https://github.com/abulte/flask-arduino-websocket-sqlite -Entry file: flask-arduino-websocket-sqlite/app.py -Scanned: 2016-10-18 16:23:32.172421 -No vulnerabilities found. - - -edouardswiac/linkstash-flask -https://github.com/edouardswiac/linkstash-flask -Entry file: linkstash-flask/app.py -Scanned: 2016-10-18 16:23:35.195479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: flask-microblog/app/__init__.py -Scanned: 2016-10-18 16:23:39.041349 -No vulnerabilities found. - - -GerardoGR/flask-boilerplate -https://github.com/GerardoGR/flask-boilerplate -Entry file: flask-boilerplate/appname/appname/__init__.py -Scanned: 2016-10-18 16:23:41.330761 -No vulnerabilities found. - - -futuregrid/flask_cm -https://github.com/futuregrid/flask_cm -Entry file: flask_cm/examples/forms/app.py -Scanned: 2016-10-18 16:23:44.856228 -No vulnerabilities found. - - -shunyata/flask-helloworld -https://github.com/shunyata/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-18 16:23:46.339245 -No vulnerabilities found. - - -stephen-allison/basic-flask -https://github.com/stephen-allison/basic-flask -Entry file: None -Scanned: 2016-10-18 16:23:46.909875 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stephen-allison/basic-flask. - -bollwyvl/flask-reloaded -https://github.com/bollwyvl/flask-reloaded -Entry file: None -Scanned: 2016-10-18 16:23:48.487434 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bollwyvl/flask-reloaded. - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-18 16:23:50.861117 -No vulnerabilities found. - - -mattolsen1/flask_tumblelog -https://github.com/mattolsen1/flask_tumblelog -Entry file: flask_tumblelog/tumblelog/__init__.py -Scanned: 2016-10-18 16:23:53.253534 -No vulnerabilities found. - - -jonomillin/learning-flask -https://github.com/jonomillin/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-18 16:23:53.869964 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kitanata/flask-demo -https://github.com/kitanata/flask-demo -Entry file: None -Scanned: 2016-10-18 16:23:54.432697 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kitanata/flask-demo. - -mozillazg/flask-demo -https://github.com/mozillazg/flask-demo -Entry file: None -Scanned: 2016-10-18 16:23:55.941539 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mozillazg/flask-demo. - -rahulthrissur/Flask_app -https://github.com/rahulthrissur/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-18 16:23:57.460173 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toastercup/flask-social -https://github.com/toastercup/flask-social -Entry file: flask-social/social/__init__.py -Scanned: 2016-10-18 16:24:00.994204 -No vulnerabilities found. - - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-18 16:24:08.781385 -No vulnerabilities found. - - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-18 16:24:12.468339 -No vulnerabilities found. - - -flyingsparx/MongoFlask -https://github.com/flyingsparx/MongoFlask -Entry file: MongoFlask/application.py -Scanned: 2016-10-18 16:24:15.726098 -No vulnerabilities found. - - -DanAlbert/flask-guestbook -https://github.com/DanAlbert/flask-guestbook -Entry file: flask-guestbook/guestbook.py -Scanned: 2016-10-18 16:24:16.948625 -No vulnerabilities found. - - -nthfloor/Flask_learn -https://github.com/nthfloor/Flask_learn -Entry file: Flask_learn/login_system/flskr.py -Scanned: 2016-10-18 16:24:25.709031 -No vulnerabilities found. - - -kirkeby/empty-flask -https://github.com/kirkeby/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-18 16:24:26.290078 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rehandalal/buchner -https://github.com/rehandalal/buchner -Entry file: buchner/buchner/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-18 16:24:29.350271 -No vulnerabilities found. - - -vitalk/flask-staticutils -https://github.com/vitalk/flask-staticutils -Entry file: flask-staticutils/tests/test_app/__init__.py -Scanned: 2016-10-18 16:24:30.903327 -No vulnerabilities found. - - -danillosouza/flask-boilerplate -https://github.com/danillosouza/flask-boilerplate -Entry file: flask-boilerplate/app/__init__.py -Scanned: 2016-10-18 16:24:32.972492 -Vulnerability 1: -File: flask-boilerplate/app/users/views.py - > User input at line 36, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-boilerplate/app/users/views.py - > Line 41: session['user_id'] = user.id -File: flask-boilerplate/app/users/views.py - > reaches line 42, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -dogrdon/flask-map -https://github.com/dogrdon/flask-map -Entry file: None -Scanned: 2016-10-18 16:24:33.518581 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chiwong/flask_quickstart -https://github.com/chiwong/flask_quickstart -Entry file: flask_quickstart/hello.py -Scanned: 2016-10-18 16:24:34.186934 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_quickstart/venv_hello/lib/python2.6/genericpath.py - -archieyang/flask_app -https://github.com/archieyang/flask_app -Entry file: None -Scanned: 2016-10-18 16:24:34.707122 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/archieyang/flask_app. - -sapid/Flask-Community -https://github.com/sapid/Flask-Community -Entry file: None -Scanned: 2016-10-18 16:24:35.230333 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sapid/Flask-Community. - -eudaimonious/HangmanWebsite -https://github.com/eudaimonious/HangmanWebsite -Entry file: HangmanWebsite/application_hangman.py -Scanned: 2016-10-18 16:24:38.448729 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grimkeke/miniblog -https://github.com/grimkeke/miniblog -Entry file: miniblog/app/__init__.py -Scanned: 2016-10-18 16:24:42.149368 -No vulnerabilities found. - - -bracken1983/flaskBlogDemo -https://github.com/bracken1983/flaskBlogDemo -Entry file: flaskBlogDemo/flask-sqlalchemy-test.py -Scanned: 2016-10-18 16:24:43.821765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmcgahan/flask-labs-bb -https://github.com/mmcgahan/flask-labs-bb -Entry file: flask-labs-bb/flask_labs/__init__.py -Scanned: 2016-10-18 16:24:44.418960 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-18 16:24:47.428337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daisuzu/flask-app-sample -https://github.com/daisuzu/flask-app-sample -Entry file: flask-app-sample/db.py -Scanned: 2016-10-18 16:24:49.688674 -No vulnerabilities found. - - -ipfans/openshift-flask-template -https://github.com/ipfans/openshift-flask-template -Entry file: openshift-flask-template/wsgi/mainapp.py -Scanned: 2016-10-18 16:24:50.954518 -No vulnerabilities found. - - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-18 16:24:53.273716 -No vulnerabilities found. - - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-18 16:24:55.267026 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -garbados/flask-the-gauntlet -https://github.com/garbados/flask-the-gauntlet -Entry file: flask-the-gauntlet/app.py -Scanned: 2016-10-18 16:24:57.607645 -No vulnerabilities found. - - -penpyt/flask-couchdb-auth -https://github.com/penpyt/flask-couchdb-auth -Entry file: flask-couchdb-auth/example/guestbook.py -Scanned: 2016-10-18 16:24:59.049410 -No vulnerabilities found. - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-18 16:25:00.544307 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-18 16:25:05.087251 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -pinchsoft/flask-newrelic-dotcloud -https://github.com/pinchsoft/flask-newrelic-dotcloud -Entry file: flask-newrelic-dotcloud/app.py -Scanned: 2016-10-18 16:25:09.350234 -No vulnerabilities found. - - -NoxDineen/microblog -https://github.com/NoxDineen/microblog -Entry file: None -Scanned: 2016-10-18 16:25:15.347397 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PurplePilot/zanzeeba -https://github.com/PurplePilot/zanzeeba -Entry file: zanzeeba/appstd.py -Scanned: 2016-10-18 16:25:16.905747 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pitxon/sivir -https://github.com/Pitxon/sivir -Entry file: sivir/app.py -Scanned: 2016-10-18 16:25:22.199426 -No vulnerabilities found. - - -philangist/url-shorten -https://github.com/philangist/url-shorten -Entry file: url-shorten/shorten.py -Scanned: 2016-10-18 16:25:23.717581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabionatali/DigiWebStats -https://github.com/fabionatali/DigiWebStats -Entry file: DigiWebStats/app.py -Scanned: 2016-10-18 16:25:28.200488 -No vulnerabilities found. - - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-18 16:25:29.426309 -No vulnerabilities found. - - -confessin/addressbook -https://github.com/confessin/addressbook -Entry file: addressbook/addressbook.py -Scanned: 2016-10-18 16:25:30.955102 -No vulnerabilities found. - - -nafur/flmpc -https://github.com/nafur/flmpc -Entry file: flmpc/main.py -Scanned: 2016-10-18 16:25:32.758082 -No vulnerabilities found. - - -hit9/flask-sign-in-with-github.py -https://github.com/hit9/flask-sign-in-with-github.py -Entry file: None -Scanned: 2016-10-18 16:25:34.283817 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kaibin/Condom_Data_Server -https://github.com/Kaibin/Condom_Data_Server -Entry file: Condom_Data_Server/app.py -Scanned: 2016-10-18 16:25:34.798060 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -honestappalachia/honest_site -https://github.com/honestappalachia/honest_site -Entry file: honest_site/run.py -Scanned: 2016-10-18 16:25:36.213740 -Vulnerability 1: -File: honest_site/run.py - > User input at line 36, trigger word "get(": - template = page.meta.get('template', 'default.html') -File: honest_site/run.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -daikeshi/one-dollar-metasearch-engine -https://github.com/daikeshi/one-dollar-metasearch-engine -Entry file: one-dollar-metasearch-engine/app/__init__.py -Scanned: 2016-10-18 16:25:36.727930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msalahi/art-party -https://github.com/msalahi/art-party -Entry file: art-party/app.py -Scanned: 2016-10-18 16:25:40.733160 -No vulnerabilities found. - - -mattupstate/flask-social -https://github.com/mattupstate/flask-social -Entry file: flask-social/tests/test_app/__init__.py -Scanned: 2016-10-18 16:25:45.323098 -No vulnerabilities found. - - -xiyoulaoyuanjia/flaskapp -https://github.com/xiyoulaoyuanjia/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:25:45.873914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-18 16:25:47.138069 -No vulnerabilities found. - - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-18 16:25:47.635901 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trustrachel/Flask-FeatureFlags -https://github.com/trustrachel/Flask-FeatureFlags -Entry file: Flask-FeatureFlags/tests/fixtures.py -Scanned: 2016-10-18 16:25:49.159706 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rahulkmr/flask-bigapp-template -https://github.com/rahulkmr/flask-bigapp-template -Entry file: flask-bigapp-template/main.py -Scanned: 2016-10-18 16:25:50.670145 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -whtsky/Flask-WeRoBot -https://github.com/whtsky/Flask-WeRoBot -Entry file: Flask-WeRoBot/flask_werobot.py -Scanned: 2016-10-18 16:25:54.118578 -No vulnerabilities found. - - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-18 16:25:54.666676 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/flask-tlsauth -https://github.com/stef/flask-tlsauth -Entry file: flask-tlsauth/demo/webapp.py -Scanned: 2016-10-18 16:25:56.981900 -No vulnerabilities found. - - -OpenTechSchool/python-flask-code -https://github.com/OpenTechSchool/python-flask-code -Entry file: python-flask-code/core/files-templates/catseverywhere.py -Scanned: 2016-10-18 16:25:58.246869 -No vulnerabilities found. - - -aahluwal/flask -https://github.com/aahluwal/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:26:01.612856 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-18 16:26:05.107362 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rollbar/rollbar-flask-example -https://github.com/rollbar/rollbar-flask-example -Entry file: rollbar-flask-example/hello.py -Scanned: 2016-10-18 16:26:08.600735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqez/flasky -https://github.com/lqez/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-18 16:26:12.108029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florapdx/My-Blog -https://github.com/florapdx/My-Blog -Entry file: My-Blog/sitebuilder.py -Scanned: 2016-10-18 16:26:20.259698 -No vulnerabilities found. - - -clef/sample-flask -https://github.com/clef/sample-flask -Entry file: sample-flask/app.py -Scanned: 2016-10-18 16:26:22.642680 -No vulnerabilities found. - - -Jd007/flask-rest -https://github.com/Jd007/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-18 16:26:27.644075 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-18 16:26:30.677715 -No vulnerabilities found. - - -zeuxisoo/python-flask-social-oauth-facebook -https://github.com/zeuxisoo/python-flask-social-oauth-facebook -Entry file: None -Scanned: 2016-10-18 16:26:31.211495 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeuxisoo/python-flask-social-oauth-facebook. - -lpolepeddi/sightings -https://github.com/lpolepeddi/sightings -Entry file: sightings/routes.py -Scanned: 2016-10-18 16:26:41.390932 -No vulnerabilities found. - - -sholsapp/flask-skeleton -https://github.com/sholsapp/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:26:42.380840 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sholsapp/flask-skeleton. - -adatlabor/soa-demo -https://github.com/adatlabor/soa-demo -Entry file: soa-demo/service.py -Scanned: 2016-10-18 16:26:43.362651 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-18 16:26:44.769712 -No vulnerabilities found. - - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-18 16:26:46.632811 -No vulnerabilities found. - - -kirang89/flask-boiler -https://github.com/kirang89/flask-boiler -Entry file: None -Scanned: 2016-10-18 16:26:49.531358 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jonascj/flaskr -https://github.com/jonascj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:26:50.528635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel/__init__.py -Scanned: 2016-10-18 16:26:51.889056 -No vulnerabilities found. - - -a2lin/flaskapp -https://github.com/a2lin/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:26:52.424687 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -topherjaynes/flasktut -https://github.com/topherjaynes/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-18 16:26:54.106335 -No vulnerabilities found. - - -aerialdomo/flaskblog -https://github.com/aerialdomo/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-18 16:26:54.630301 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -pinoytech/flaskapp -https://github.com/pinoytech/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-18 16:26:55.124355 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thinboy92/flasktuts -https://github.com/thinboy92/flasktuts -Entry file: flasktuts/app/__init__.py -Scanned: 2016-10-18 16:26:56.589566 -No vulnerabilities found. - - -aahluwal/flaskagain -https://github.com/aahluwal/flaskagain -Entry file: flaskagain/judgement.py -Scanned: 2016-10-18 16:26:57.166981 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskagain/renv/lib/python2.7/genericpath.py - -elboby/flask-config-override -https://github.com/elboby/flask-config-override -Entry file: flask-config-override/flask_config_override/test/test_cookie.py -Scanned: 2016-10-18 16:26:59.171250 -No vulnerabilities found. - - -MrFichter/flask1 -https://github.com/MrFichter/flask1 -Entry file: flask1/flask1.py -Scanned: 2016-10-18 16:27:00.397874 -No vulnerabilities found. - - -guilhermecomum/FlaskTutorial -https://github.com/guilhermecomum/FlaskTutorial -Entry file: FlaskTutorial/flaskr/flaskr.py -Scanned: 2016-10-18 16:27:02.993024 -No vulnerabilities found. - - -sherzberg/flask-native-package -https://github.com/sherzberg/flask-native-package -Entry file: flask-native-package/application.py -Scanned: 2016-10-18 16:27:09.725775 -No vulnerabilities found. - - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-18 16:27:13.186109 -No vulnerabilities found. - - -xrefor/flask_tut -https://github.com/xrefor/flask_tut -Entry file: flask_tut/flaskr.py -Scanned: 2016-10-18 16:27:16.426408 -No vulnerabilities found. - - -y2bishop2y/vagrant.flask -https://github.com/y2bishop2y/vagrant.flask -Entry file: None -Scanned: 2016-10-18 16:27:17.952708 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -markchadwick/flask-empty -https://github.com/markchadwick/flask-empty -Entry file: flask-empty/main.py -Scanned: 2016-10-18 16:27:23.214324 -No vulnerabilities found. - - -McrCoderDojo/Flask-Webapps -https://github.com/McrCoderDojo/Flask-Webapps -Entry file: Flask-Webapps/flask1.py -Scanned: 2016-10-18 16:27:28.264208 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -xjdrew/flask-demo -https://github.com/xjdrew/flask-demo -Entry file: None -Scanned: 2016-10-18 16:27:29.779667 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xjdrew/flask-demo. - -aerialdomo/flask_microblog -https://github.com/aerialdomo/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-18 16:27:33.805209 -No vulnerabilities found. - - -xrefor/flask_stuff -https://github.com/xrefor/flask_stuff -Entry file: flask_stuff/main.py -Scanned: 2016-10-18 16:27:43.560513 -No vulnerabilities found. - - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/app.py -Scanned: 2016-10-18 16:27:44.833751 -No vulnerabilities found. - - -jcerise/flask-photos -https://github.com/jcerise/flask-photos -Entry file: flask-photos/app.py -Scanned: 2016-10-18 16:27:46.082302 -No vulnerabilities found. - - -adesst/flask-blog -https://github.com/adesst/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:27:46.620361 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Hardtack/Flask-Router -https://github.com/Hardtack/Flask-Router -Entry file: Flask-Router/flask_router/tests.py -Scanned: 2016-10-18 16:27:48.317288 -No vulnerabilities found. - - -smdmustaffa/PythonFlask -https://github.com/smdmustaffa/PythonFlask -Entry file: PythonFlask/app/routes.py -Scanned: 2016-10-18 16:27:49.524781 -No vulnerabilities found. - - -jinzhangg/flask-helloworld -https://github.com/jinzhangg/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-18 16:27:51.906485 -No vulnerabilities found. - - -bogavante/mitsuhiko-flask -https://github.com/bogavante/mitsuhiko-flask -Entry file: mitsuhiko-flask/setup.py -Scanned: 2016-10-18 16:27:52.464417 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hardez/Flask-Skeleton -https://github.com/hardez/Flask-Skeleton -Entry file: Flask-Skeleton/app/__init__.py -Scanned: 2016-10-18 16:27:54.676848 -No vulnerabilities found. - - -stfy86/pruebitasFlask -https://github.com/stfy86/pruebitasFlask -Entry file: pruebitasFlask/practica4/src/app/__init__.py -Scanned: 2016-10-18 16:27:56.634794 -No vulnerabilities found. - - -kracekumar/test-flask -https://github.com/kracekumar/test-flask -Entry file: test-flask/app.py -Scanned: 2016-10-18 16:27:58.188575 -No vulnerabilities found. - - -charliecrissman/microblog -https://github.com/charliecrissman/microblog -Entry file: None -Scanned: 2016-10-18 16:27:59.229699 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gourneau/anode -https://github.com/gourneau/anode -Entry file: anode/app.py -Scanned: 2016-10-18 16:28:02.206628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmahnken/Flask_to_do_list -https://github.com/mmahnken/Flask_to_do_list -Entry file: Flask_to_do_list/tipsy.py -Scanned: 2016-10-18 16:28:09.187479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abulte/Flask-Bootstrap-Fanstatic -https://github.com/abulte/Flask-Bootstrap-Fanstatic -Entry file: Flask-Bootstrap-Fanstatic/application/__init__.py -Scanned: 2016-10-18 16:28:16.925342 -No vulnerabilities found. - - -jennyferpinto/Flask_Part_1 -https://github.com/jennyferpinto/Flask_Part_1 -Entry file: Flask_Part_1/tipsy.py -Scanned: 2016-10-18 16:28:18.444312 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephanienkram/Flask-Log-Tracker -https://github.com/stephanienkram/Flask-Log-Tracker -Entry file: Flask-Log-Tracker/main.py -Scanned: 2016-10-18 16:28:25.609847 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwmeyer/minimal-flask-socketserver -https://github.com/mwmeyer/minimal-flask-socketserver -Entry file: minimal-flask-socketserver/flash_socket.py -Scanned: 2016-10-18 16:28:29.144102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-18 16:28:30.645500 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -isms/flask-phonebank-dashboard -https://github.com/isms/flask-phonebank-dashboard -Entry file: flask-phonebank-dashboard/app.py -Scanned: 2016-10-18 16:28:32.242849 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-18 16:28:34.786496 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-18 16:28:44.102938 -No vulnerabilities found. - - -jpanganiban/flask-heroku-kickstart -https://github.com/jpanganiban/flask-heroku-kickstart -Entry file: None -Scanned: 2016-10-18 16:28:44.627382 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jpanganiban/flask-heroku-kickstart. - -justinxreese/ajax-calculator-flask -https://github.com/justinxreese/ajax-calculator-flask -Entry file: None -Scanned: 2016-10-18 16:28:46.142357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -prabeesh/Paintapp-Javascript-Canvas-Flask -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask -Entry file: Paintapp-Javascript-Canvas-Flask/test.py -Scanned: 2016-10-18 16:28:47.377751 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 19, trigger word "execute(": - cur.execute('SELECT * FROM Image WHERE imgname=?', imgname) - -Vulnerability 2: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - -Vulnerability 3: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 25: ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - - - -godber/flask-mobile-switch -https://github.com/godber/flask-mobile-switch -Entry file: flask-mobile-switch/missionops/missionops/__init__.py -Scanned: 2016-10-18 16:28:48.839688 -No vulnerabilities found. - - -naveenpremchand02/paintapp-using-Flask -https://github.com/naveenpremchand02/paintapp-using-Flask -Entry file: None -Scanned: 2016-10-18 16:28:49.356603 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/naveenpremchand02/paintapp-using-Flask. - -orkunozbek/deploy_test -https://github.com/orkunozbek/deploy_test -Entry file: deploy_test/app_pack/__init__.py -Scanned: 2016-10-18 16:28:50.576030 -No vulnerabilities found. - - -emi1337/movie_rater -https://github.com/emi1337/movie_rater -Entry file: movie_rater/judgement.py -Scanned: 2016-10-18 16:28:51.268316 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-18 16:28:52.790380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akshar-raaj/flaks -https://github.com/akshar-raaj/flaks -Entry file: flaks/hello.py -Scanned: 2016-10-18 16:28:54.055963 -No vulnerabilities found. - - -y2bishop2y/microengine -https://github.com/y2bishop2y/microengine -Entry file: microengine/lib/flask_sqlalchemy.py -Scanned: 2016-10-18 16:28:54.688981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-18 16:28:55.197635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soniacs/cabinet -https://github.com/soniacs/cabinet -Entry file: cabinet/app/__init__.py -Scanned: 2016-10-18 16:28:56.712336 -Vulnerability 1: -File: cabinet/app/views/clients.py - > User input at line 33, trigger word "form[": - client = Client(name=request.form['name'], company=request.form['company'], website=request.form['website'], twitter=request.form['twitter'], email=request.form['email'], telephone=request.form['telephone'], skype=request.form['skype'], street=request.form['street'], street_2=request.form['street_2'], city=request.form['city'], state=request.form['state'], postcode=request.form['postcode'], country=request.form['country'], notes=request.form['notes']) -File: cabinet/app/views/clients.py - > reaches line 50, trigger word "flash(": - flash('Client '%s' was added.' % client.name) - -Vulnerability 2: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 80: ret_MAYBE_FUNCTION_NAME = render_template('clients/edit.html',title='Edit %s' % client.name, client=client) - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 78, trigger word "flash(": - flash('Client '%s' has been updated.' % client.name) - -Vulnerability 3: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 95: ret_MAYBE_FUNCTION_NAME = render_template('clients/delete.html',title='Delete %s' % client.name, client=client) - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 93, trigger word "flash(": - flash('Client '%s' has been deleted.' % client.name) - -Vulnerability 4: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 5: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 6: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "get(": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 7: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "form[": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 8: -File: cabinet/app/views/invoices.py - > User input at line 33, trigger word "form[": - invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 9: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 80: ret_MAYBE_FUNCTION_NAME = render_template('invoices/edit.html',title='Edit Invoice %s' % invoice.name, invoice=invoice, clients=clients, projects=projects) - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 78, trigger word "flash(": - flash('Invoice '%s' has been updated.' % invoice.name) - -Vulnerability 10: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 97: ret_MAYBE_FUNCTION_NAME = render_template('invoices/delete.html',title='Delete Invoice %s' % invoice.name, invoice=invoice) - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 95, trigger word "flash(": - flash('Invoice '%s' has been deleted.' % invoice.name) - -Vulnerability 11: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 12: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 13: -File: cabinet/app/views/projects.py - > User input at line 31, trigger word "form[": - project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 14: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('projects/edit.html',title='Edit %s' % project.name, project=project, clients=clients) - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 69, trigger word "flash(": - flash('Project '%s' has been updated.' % project.name) - -Vulnerability 15: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('projects/delete.html',title='Delete %s' % project.name, project=project) - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 85, trigger word "flash(": - flash('Project '%s' has been deleted.' % project.name) - - - -MattStockton/manpage -https://github.com/MattStockton/manpage -Entry file: manpage/app.py -Scanned: 2016-10-18 16:28:57.258423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qzio/tododis -https://github.com/qzio/tododis -Entry file: tododis/app.py -Scanned: 2016-10-18 16:28:57.761252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-18 16:28:59.275316 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aromanovich/flask-webtest -https://github.com/aromanovich/flask-webtest -Entry file: flask-webtest/tests/core.py -Scanned: 2016-10-18 16:29:10.329495 -No vulnerabilities found. - - -ashcrow/flask-track-usage -https://github.com/ashcrow/flask-track-usage -Entry file: flask-track-usage/test/__init__.py -Scanned: 2016-10-18 16:29:12.830069 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lepture/flask-shorturl -https://github.com/lepture/flask-shorturl -Entry file: flask-shorturl/test_shorturl.py -Scanned: 2016-10-18 16:29:17.194162 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:29:18.732127 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-18 16:29:23.257897 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:29:32.174227 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wangzexin/flask -https://github.com/wangzexin/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:29:33.123476 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -samsolariusleo/Flask -https://github.com/samsolariusleo/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:29:35.644988 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tornado-utils/tornado-restless -https://github.com/tornado-utils/tornado-restless -Entry file: tornado-restless/tests/base.py -Scanned: 2016-10-18 16:29:45.382453 -No vulnerabilities found. - - -adamgreenhall/flask-haml-sass-coffee-template -https://github.com/adamgreenhall/flask-haml-sass-coffee-template -Entry file: flask-haml-sass-coffee-template/app.py -Scanned: 2016-10-18 16:29:47.069944 -No vulnerabilities found. - - -prakhar1989/flask-tuts -https://github.com/prakhar1989/flask-tuts -Entry file: flask-tuts/lesson-2/blogs/__init__.py -Scanned: 2016-10-18 16:29:50.379781 -No vulnerabilities found. - - -Treeki/bitBoard -https://github.com/Treeki/bitBoard -Entry file: bitBoard/bitBoard/__init__.py -Scanned: 2016-10-18 16:29:52.065990 -Vulnerability 1: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 757: ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 760: ret_MAYBE_FUNCTION_NAME = render_template('move_thread.html',form=form, forum=forum, thread=thread, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 710, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 2: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) - File: bitBoard/bitBoard/views/board.py - > Line 869: ret_MAYBE_FUNCTION_NAME = form.redirect(url=thread.url) - File: bitBoard/bitBoard/views/board.py - > Line 871: ret_MAYBE_FUNCTION_NAME = render_template('confirm.html',form=form, crumbs_type='thread', forum=forum, thread=thread, final_crumb='%s Thread' % cap_verb, message=message, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 802, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 3: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 4: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - - - -byu-osl/familytree-sample-app -https://github.com/byu-osl/familytree-sample-app -Entry file: familytree-sample-app/app.py -Scanned: 2016-10-18 16:29:52.567520 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmiasko/flask-barcode -https://github.com/kmiasko/flask-barcode -Entry file: flask-barcode/wsgi.py -Scanned: 2016-10-18 16:29:53.899217 -No vulnerabilities found. - - -jayzcode/helloflask -https://github.com/jayzcode/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-18 16:29:54.452551 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-18 16:29:55.969994 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -maxcountryman/flask-simpleoauth -https://github.com/maxcountryman/flask-simpleoauth -Entry file: flask-simpleoauth/flask_simpleoauth/app.py -Scanned: 2016-10-18 16:29:58.357453 -Vulnerability 1: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 30, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.index')) - -Vulnerability 2: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 42, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.login')) - -Vulnerability 4: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -bayazee/flask-mosession -https://github.com/bayazee/flask-mosession -Entry file: flask-mosession/example/example.py -Scanned: 2016-10-18 16:29:59.739074 -No vulnerabilities found. - - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-18 16:30:01.579815 -No vulnerabilities found. - - -krushton/flask-api-example -https://github.com/krushton/flask-api-example -Entry file: flask-api-example/app.py -Scanned: 2016-10-18 16:30:02.837922 -No vulnerabilities found. - - -bootandy/flask-sample -https://github.com/bootandy/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-18 16:30:03.342874 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jph98/flaskdmg -https://github.com/jph98/flaskdmg -Entry file: flaskdmg/flaskexample.py -Scanned: 2016-10-18 16:30:04.560464 -No vulnerabilities found. - - -roshow/flasktutorial -https://github.com/roshow/flasktutorial -Entry file: None -Scanned: 2016-10-18 16:30:06.103847 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -damour/flaskr -https://github.com/damour/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:30:09.646326 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:30:13.151235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akshar-raaj/flaskr -https://github.com/akshar-raaj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:30:16.638906 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:30:19.167502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codergirl/flaskbabar -https://github.com/codergirl/flaskbabar -Entry file: flaskbabar/hello.py -Scanned: 2016-10-18 16:30:24.457236 -Vulnerability 1: -File: flaskbabar/hello.py - > User input at line 44, trigger word "get(": - new_user = BabarUser(request.args.get('username'), request.args.get('email')) -Reassigned in: - File: flaskbabar/hello.py - > Line 47: json = new_user.id'username''email'new_user.namenew_user.email -File: flaskbabar/hello.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 2: -File: flaskbabar/hello.py - > User input at line 61, trigger word "get(": - the_user = db.session.query(BabarUser).filter_by(id=request.args.get('user_id')).first() -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 3: -File: flaskbabar/hello.py - > User input at line 62, trigger word "get(": - task_name = request.args.get('name') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 4: -File: flaskbabar/hello.py - > User input at line 63, trigger word "get(": - task_description = request.args.get('description') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 5: -File: flaskbabar/hello.py - > User input at line 64, trigger word "get(": - dismissable = request.args.get('dismissable') -Reassigned in: - File: flaskbabar/hello.py - > Line 66: dismissable = True - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 6: -File: flaskbabar/hello.py - > User input at line 67, trigger word "get(": - due_date = request.args.get('due_date') -Reassigned in: - File: flaskbabar/hello.py - > Line 69: due_date = datetime.datetime.fromtimestamp(float(due_date)) - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - - - -rajendrakrp/GAE-Flask-OpenID -https://github.com/rajendrakrp/GAE-Flask-OpenID -Entry file: GAE-Flask-OpenID/flask/sessions.py -Scanned: 2016-10-18 16:30:25.992363 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JLtheking/FlaskExample -https://github.com/JLtheking/FlaskExample -Entry file: FlaskExample/routes.py -Scanned: 2016-10-18 16:30:29.546578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aussiroth/FlaskPractical -https://github.com/Aussiroth/FlaskPractical -Entry file: FlaskPractical/flask/routes.py -Scanned: 2016-10-18 16:30:31.124384 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -dorajistyle/proposal_center_python_flask_sqlalchemy_jade -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade -Entry file: proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -Scanned: 2016-10-18 16:30:34.785277 -No vulnerabilities found. - - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-18 16:30:44.927305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haburibe/flask-myapps -https://github.com/haburibe/flask-myapps -Entry file: flask-myapps/todos/todos.py -Scanned: 2016-10-18 16:30:47.184695 -No vulnerabilities found. - - -mykolasmith/flask-leaderboard -https://github.com/mykolasmith/flask-leaderboard -Entry file: flask-leaderboard/leaderboard/__init__.py -Scanned: 2016-10-18 16:30:48.534311 -No vulnerabilities found. - - -betobaz/app_flask -https://github.com/betobaz/app_flask -Entry file: app_flask/app/routes.py -Scanned: 2016-10-18 16:30:49.868926 -No vulnerabilities found. - - -redfive/python-flask -https://github.com/redfive/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-18 16:30:50.400565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atbaker/flask-tutorial -https://github.com/atbaker/flask-tutorial -Entry file: flask-tutorial/app/__init__.py -Scanned: 2016-10-18 16:30:52.238575 -No vulnerabilities found. - - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-18 16:30:53.483041 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -gabrielengel/learn-flask -https://github.com/gabrielengel/learn-flask -Entry file: learn-flask/01-minimal/minimal.py -Scanned: 2016-10-18 16:30:54.716335 -No vulnerabilities found. - - -mutaku/alfred_flask -https://github.com/mutaku/alfred_flask -Entry file: alfred_flask/alfred.py -Scanned: 2016-10-18 16:30:55.721682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bradmerlin/porty_flask -https://github.com/bradmerlin/porty_flask -Entry file: porty_flask/app.py -Scanned: 2016-10-18 16:30:56.228522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcilioleite/flask-saude -https://github.com/marcilioleite/flask-saude -Entry file: flask-saude/app/__init__.py -Scanned: 2016-10-18 16:30:59.492735 -No vulnerabilities found. - - -elimgoodman/Personnel-Flask -https://github.com/elimgoodman/Personnel-Flask -Entry file: Personnel-Flask/app/__init__.py -Scanned: 2016-10-18 16:31:01.581960 -No vulnerabilities found. - - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-18 16:31:03.553265 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -asap/watchman.flask -https://github.com/asap/watchman.flask -Entry file: None -Scanned: 2016-10-18 16:31:04.067407 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marksteve/flask-nsq -https://github.com/marksteve/flask-nsq -Entry file: flask-nsq/test.py -Scanned: 2016-10-18 16:31:06.581191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Duelist/ianb-flask -https://github.com/Duelist/ianb-flask -Entry file: ianb-flask/ianb/__init__.py -Scanned: 2016-10-18 16:31:14.450431 -No vulnerabilities found. - - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-18 16:31:18.073924 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -lachezar/tada_backend -https://github.com/lachezar/tada_backend -Entry file: tada_backend/todo.py -Scanned: 2016-10-18 16:31:20.544138 -No vulnerabilities found. - - -luxuia/gene_designer -https://github.com/luxuia/gene_designer -Entry file: gene_designer/geneDesigne.py -Scanned: 2016-10-18 16:31:26.550036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rubinovitz/flask-gevent-boiler -https://github.com/rubinovitz/flask-gevent-boiler -Entry file: flask-gevent-boiler/app.py -Scanned: 2016-10-18 16:31:30.137204 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bradmerlin/mxit-spock_flask -https://github.com/bradmerlin/mxit-spock_flask -Entry file: mxit-spock_flask/app.py -Scanned: 2016-10-18 16:31:31.630186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonascj/flask_logger_test -https://github.com/jonascj/flask_logger_test -Entry file: flask_logger_test/flask_logger_test.py -Scanned: 2016-10-18 16:31:34.905959 -No vulnerabilities found. - - -rartavia/flask-babel-example -https://github.com/rartavia/flask-babel-example -Entry file: flask-babel-example/flask-babel-example.py -Scanned: 2016-10-18 16:31:37.471638 -No vulnerabilities found. - - -elidickinson/flask-proxy-demo -https://github.com/elidickinson/flask-proxy-demo -Entry file: flask-proxy-demo/hello.py -Scanned: 2016-10-18 16:31:45.711393 -No vulnerabilities found. - - -stephanienkram/Flask-Money-Tracker -https://github.com/stephanienkram/Flask-Money-Tracker -Entry file: Flask-Money-Tracker/main.py -Scanned: 2016-10-18 16:31:47.309305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cismet/sqlparse-flask-webservice -https://github.com/cismet/sqlparse-flask-webservice -Entry file: sqlparse-flask-webservice/sqlparse_webservice.py -Scanned: 2016-10-18 16:31:47.820357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luckypool/flask-blueprints-template -https://github.com/luckypool/flask-blueprints-template -Entry file: flask-blueprints-template/hello/__init__.py -Scanned: 2016-10-18 16:31:51.805003 -No vulnerabilities found. - - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-18 16:31:52.342482 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -krushton/flask-location-example -https://github.com/krushton/flask-location-example -Entry file: flask-location-example/app.py -Scanned: 2016-10-18 16:31:54.087282 -No vulnerabilities found. - - -adamjmarkham/flask-micro-blog -https://github.com/adamjmarkham/flask-micro-blog -Entry file: flask-micro-blog/micro_blog_flask.py -Scanned: 2016-10-18 16:31:55.456634 -No vulnerabilities found. - - -chrismeono1022/microblog_flask_tutorial -https://github.com/chrismeono1022/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/app/__init__.py -Scanned: 2016-10-18 16:31:56.691771 -No vulnerabilities found. - - -david-torres/flask-rest-quickstart -https://github.com/david-torres/flask-rest-quickstart -Entry file: flask-rest-quickstart/application/__init__.py -Scanned: 2016-10-18 16:31:58.596164 -No vulnerabilities found. - - -bradmerlin/mxit-blackjack_flask -https://github.com/bradmerlin/mxit-blackjack_flask -Entry file: mxit-blackjack_flask/app.py -Scanned: 2016-10-18 16:31:59.240422 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyhmltn/stripe-flask-test -https://github.com/andyhmltn/stripe-flask-test -Entry file: stripe-flask-test/main.py -Scanned: 2016-10-18 16:31:59.758961 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jsutterfield/flaskr-buildout -https://github.com/jsutterfield/flaskr-buildout -Entry file: flaskr-buildout/src/flaskr/flaskr.py -Scanned: 2016-10-18 16:32:05.215597 -No vulnerabilities found. - - -manuclementz/shrt -https://github.com/manuclementz/shrt -Entry file: shrt/app.py -Scanned: 2016-10-18 16:32:07.510596 -No vulnerabilities found. - - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-18 16:32:09.200332 -No vulnerabilities found. - - -wangxiaoxiao88/python-bookmanager -https://github.com/wangxiaoxiao88/python-bookmanager -Entry file: python-bookmanager/app.py -Scanned: 2016-10-18 16:32:11.453429 -No vulnerabilities found. - - -Syerram/maintenance-server -https://github.com/Syerram/maintenance-server -Entry file: maintenance-server/run.py -Scanned: 2016-10-18 16:32:11.961333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/boilerflask-facebook -https://github.com/corydolphin/boilerflask-facebook -Entry file: boilerflask-facebook/boilerflask/__init__.py -Scanned: 2016-10-18 16:32:12.460274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-18 16:32:13.968606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subdesign/temp_Flaskblog -https://github.com/subdesign/temp_Flaskblog -Entry file: temp_Flaskblog/app.py -Scanned: 2016-10-18 16:32:18.430258 -No vulnerabilities found. - - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-18 16:32:19.989857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liontree/lemonbook -https://github.com/liontree/lemonbook -Entry file: lemonbook/__init__.py -Scanned: 2016-10-18 16:32:26.227217 -Vulnerability 1: -File: lemonbook/common/flask_login.py - > User input at line 227, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 2: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 55: date = date.replace('/', '') - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - -Vulnerability 3: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 55: date = date.replace('/', '') - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - - - -abhiomkar/contacts-rest -https://github.com/abhiomkar/contacts-rest -Entry file: contacts-rest/contacts.py -Scanned: 2016-10-18 16:32:26.750269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Giorgix/thor -https://github.com/Giorgix/thor -Entry file: thor/thor.py -Scanned: 2016-10-18 16:32:31.896161 -No vulnerabilities found. - - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: nozomiServer/app.py -Scanned: 2016-10-18 16:32:34.347183 -No vulnerabilities found. - - -lepture/flask-oauthlib -https://github.com/lepture/flask-oauthlib -Entry file: flask-oauthlib/flask_oauthlib/provider/oauth1.py -Scanned: 2016-10-18 16:32:38.050710 -Vulnerability 1: -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > User input at line 87, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH1_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 90: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 86: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > reaches line 89, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 2: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 104, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH2_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 107: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 103: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 106, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 3: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 447, trigger word "get(": - redirect_uri = credentials.get('redirect_uri') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 464: ret_MAYBE_FUNCTION_NAME = redirect(add_params_to_uri(self.error_uri, 'error'str(e))) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 455: ret_MAYBE_FUNCTION_NAME = create_response(ret) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 458: ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(self.error_uri)) -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 461, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(redirect_uri or self.error_uri)) - - - -miguelgrinberg/Flask-HTTPAuth -https://github.com/miguelgrinberg/Flask-HTTPAuth -Entry file: Flask-HTTPAuth/examples/basic_auth.py -Scanned: 2016-10-18 16:32:46.594702 -No vulnerabilities found. - - -cburmeister/flask-bones -https://github.com/cburmeister/flask-bones -Entry file: flask-bones/app/__init__.py -Scanned: 2016-10-18 16:32:49.293878 -No vulnerabilities found. - - -sysr-q/flask-nsa -https://github.com/sysr-q/flask-nsa -Entry file: flask-nsa/example_app.py -Scanned: 2016-10-18 16:32:51.765635 -No vulnerabilities found. - - -lepture/flask-storage -https://github.com/lepture/flask-storage -Entry file: flask-storage/tests/__init__.py -Scanned: 2016-10-18 16:32:52.271522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plastboks/Flaskmarks -https://github.com/plastboks/Flaskmarks -Entry file: Flaskmarks/flaskmarks/__init__.py -Scanned: 2016-10-18 16:32:55.875466 -Vulnerability 1: -File: Flaskmarks/flaskmarks/views/auth.py - > User input at line 33, trigger word ".data": - u = User.by_uname_or_email(form.username.data) -File: Flaskmarks/flaskmarks/views/auth.py - > reaches line 38, trigger word "flash(": - flash('Welcome %s.' % u.username,category='success') - - - -martinp/jarvis2 -https://github.com/martinp/jarvis2 -Entry file: jarvis2/app/main.py -Scanned: 2016-10-18 16:32:58.071025 -No vulnerabilities found. - - -akhilchandran/flask -https://github.com/akhilchandran/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:32:59.022397 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -JamesHoover/Flask -https://github.com/JamesHoover/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:32:59.538990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhanababu-nyros/flask-sqlalchemy -https://github.com/dhanababu-nyros/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 16:33:00.053478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -klen/mixer -https://github.com/klen/mixer -Entry file: mixer/tests/test_flask.py -Scanned: 2016-10-18 16:33:02.141657 -No vulnerabilities found. - - -wrobstory/mcflyin -https://github.com/wrobstory/mcflyin -Entry file: mcflyin/mcflyin/application.py -Scanned: 2016-10-18 16:33:04.198447 -No vulnerabilities found. - - -Hardtack/Flask-Negotiation -https://github.com/Hardtack/Flask-Negotiation -Entry file: Flask-Negotiation/tests/test_negotiation.py -Scanned: 2016-10-18 16:33:05.645162 -No vulnerabilities found. - - -marksteve/flask-redisconfig -https://github.com/marksteve/flask-redisconfig -Entry file: flask-redisconfig/example.py -Scanned: 2016-10-18 16:33:08.158867 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benhosmer/flask-zurb -https://github.com/benhosmer/flask-zurb -Entry file: flask-zurb/app.py -Scanned: 2016-10-18 16:33:10.697271 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mies/getting-started-flask-redis -https://github.com/mies/getting-started-flask-redis -Entry file: getting-started-flask-redis/app.py -Scanned: 2016-10-18 16:33:12.946513 -No vulnerabilities found. - - -eriktaubeneck/flask-twitter-oembedder -https://github.com/eriktaubeneck/flask-twitter-oembedder -Entry file: flask-twitter-oembedder/tests/test_flask_twitter_oembedder.py -Scanned: 2016-10-18 16:33:15.802294 -No vulnerabilities found. - - -DasIch/Flask-MakeStatic -https://github.com/DasIch/Flask-MakeStatic -Entry file: Flask-MakeStatic/flask_makestatic/__init__.py -Scanned: 2016-10-18 16:33:19.352864 -No vulnerabilities found. - - -insynchq/flask-captain -https://github.com/insynchq/flask-captain -Entry file: flask-captain/example.py -Scanned: 2016-10-18 16:33:20.897938 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fedenusy/flaskr -https://github.com/fedenusy/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:33:25.417186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmiao/Flaskr -https://github.com/scottmiao/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:33:26.910989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rubensayshi/flaskbp -https://github.com/rubensayshi/flaskbp -Entry file: flaskbp/flaskbp/application.py -Scanned: 2016-10-18 16:33:30.476282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ovet/flaskboard -https://github.com/ovet/flaskboard -Entry file: flaskboard/flaskboard.py -Scanned: 2016-10-18 16:33:33.993515 -No vulnerabilities found. - - -iaserrat/flaskify -https://github.com/iaserrat/flaskify -Entry file: flaskify/flaskify.py -Scanned: 2016-10-18 16:33:35.535839 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EventMobi/thorium -https://github.com/EventMobi/thorium -Entry file: thorium/thorium/testsuite/test_thoriumflask.py -Scanned: 2016-10-18 16:33:41.006891 -No vulnerabilities found. - - -paraboul/FlaskPress -https://github.com/paraboul/FlaskPress -Entry file: None -Scanned: 2016-10-18 16:33:46.540429 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paraboul/FlaskPress. - -dl33/FlaskBlog -https://github.com/dl33/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-18 16:33:49.306284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/flask-ip-hostname-resolvers -https://github.com/flebel/flask-ip-hostname-resolvers -Entry file: flask-ip-hostname-resolvers/ip.py -Scanned: 2016-10-18 16:33:50.593494 -No vulnerabilities found. - - -newbiemasih/Flask-Course -https://github.com/newbiemasih/Flask-Course -Entry file: None -Scanned: 2016-10-18 16:33:53.137136 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -port-/flask-skeleton -https://github.com/port-/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:33:53.634235 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/port-/flask-skeleton. - -AlexeyMK/gglto_flask -https://github.com/AlexeyMK/gglto_flask -Entry file: gglto_flask/gglto.py -Scanned: 2016-10-18 16:33:55.341908 -No vulnerabilities found. - - -xor-xor/webapp_flask -https://github.com/xor-xor/webapp_flask -Entry file: webapp_flask/app.py -Scanned: 2016-10-18 16:33:57.600452 -No vulnerabilities found. - - -suneel0101/flask-buddy -https://github.com/suneel0101/flask-buddy -Entry file: flask-buddy/server.py -Scanned: 2016-10-18 16:33:59.821823 -No vulnerabilities found. - - -sanoju/GaeFlask -https://github.com/sanoju/GaeFlask -Entry file: GaeFlask/flask/sessions.py -Scanned: 2016-10-18 16:34:00.342179 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kfk/flask-blog -https://github.com/kfk/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:34:00.906062 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -irakasleibiltaria/flask-tutorial -https://github.com/irakasleibiltaria/flask-tutorial -Entry file: flask-tutorial/hello.py -Scanned: 2016-10-18 16:34:02.154246 -No vulnerabilities found. - - -wodim/flask-test -https://github.com/wodim/flask-test -Entry file: flask-test/hello.py -Scanned: 2016-10-18 16:34:03.408966 -No vulnerabilities found. - - -sammyrulez/flask-grolla -https://github.com/sammyrulez/flask-grolla -Entry file: flask-grolla/tests.py -Scanned: 2016-10-18 16:34:05.441090 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -maxbucknell/vanilla_flask -https://github.com/maxbucknell/vanilla_flask -Entry file: vanilla_flask/vanilla/__init__.py -Scanned: 2016-10-18 16:34:08.018407 -No vulnerabilities found. - - -DamnedFacts/flask-contact -https://github.com/DamnedFacts/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-18 16:34:08.536272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcilioleite/flask-websocket -https://github.com/marcilioleite/flask-websocket -Entry file: flask-websocket/server.py -Scanned: 2016-10-18 16:34:09.761750 -No vulnerabilities found. - - -duffy25/sample_flask -https://github.com/duffy25/sample_flask -Entry file: sample_flask/sample_flask.py -Scanned: 2016-10-18 16:34:12.832700 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elijahc/hello_flask -https://github.com/elijahc/hello_flask -Entry file: hello_flask/hello.py -Scanned: 2016-10-18 16:34:15.091203 -No vulnerabilities found. - - -tmadsen/flask-scaffold -https://github.com/tmadsen/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-18 16:34:19.160739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomashley/flask-template -https://github.com/tomashley/flask-template -Entry file: flask-template/app/urls.py -Scanned: 2016-10-18 16:34:22.429171 -No vulnerabilities found. - - -PromooD/flask-aselect -https://github.com/PromooD/flask-aselect -Entry file: flask-aselect/flask_aselect/core.py -Scanned: 2016-10-18 16:34:28.547511 -No vulnerabilities found. - - -danthemanvsqz/Flask-Demo -https://github.com/danthemanvsqz/Flask-Demo -Entry file: Flask-Demo/contacts.py -Scanned: 2016-10-18 16:34:29.902825 -No vulnerabilities found. - - -nisiotis/flask_app -https://github.com/nisiotis/flask_app -Entry file: None -Scanned: 2016-10-18 16:34:31.619541 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nisiotis/flask_app. - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-18 16:34:34.345704 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -brianly/flask-mega-tutorial -https://github.com/brianly/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-18 16:34:35.892630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivosevicmikica/testiranje -https://github.com/ivosevicmikica/testiranje -Entry file: testiranje/index.py -Scanned: 2016-10-18 16:34:38.207101 -No vulnerabilities found. - - -myevan/microblog -https://github.com/myevan/microblog -Entry file: None -Scanned: 2016-10-18 16:34:46.739737 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Eleonore9/StreetMap_ChallengePy -https://github.com/Eleonore9/StreetMap_ChallengePy -Entry file: StreetMap_ChallengePy/StreetMap.py -Scanned: 2016-10-18 16:34:50.134801 -No vulnerabilities found. - - -eriktaubeneck/flask-s3-assets-example -https://github.com/eriktaubeneck/flask-s3-assets-example -Entry file: flask-s3-assets-example/app/__init__.py -Scanned: 2016-10-18 16:34:54.161687 -No vulnerabilities found. - - -vasnake/mapfeatureserver -https://github.com/vasnake/mapfeatureserver -Entry file: None -Scanned: 2016-10-18 16:34:54.669596 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vasnake/mapfeatureserver. - -EvilDmitri/FlaskProject_FuncExe -https://github.com/EvilDmitri/FlaskProject_FuncExe -Entry file: None -Scanned: 2016-10-18 16:34:55.656995 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -epelz/flask-fb-demo -https://github.com/epelz/flask-fb-demo -Entry file: flask-fb-demo/main.py -Scanned: 2016-10-18 16:34:57.157340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonilxm/1stFlask -https://github.com/tonilxm/1stFlask -Entry file: 1stFlask/src/lib/flask/sessions.py -Scanned: 2016-10-18 16:34:59.686172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cldershem/WebFlask-CleanTemplate -https://github.com/cldershem/WebFlask-CleanTemplate -Entry file: None -Scanned: 2016-10-18 16:35:01.212910 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brooks/python-flask-sample -https://github.com/brooks/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-18 16:35:01.798249 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -palei/Just-Another-Flask-App -https://github.com/palei/Just-Another-Flask-App -Entry file: Just-Another-Flask-App/app/__init__.py -Scanned: 2016-10-18 16:35:02.330489 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noisufnoc/HowToFlask -https://github.com/noisufnoc/HowToFlask -Entry file: HowToFlask/app.py -Scanned: 2016-10-18 16:35:03.612500 -No vulnerabilities found. - - -FriendCode/python-flask-sample -https://github.com/FriendCode/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-18 16:35:05.620801 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -wavrin/flask-mongo-site -https://github.com/wavrin/flask-mongo-site -Entry file: flask-mongo-site/blog/__init__.py -Scanned: 2016-10-18 16:35:08.644171 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marulkan/nagios-status-flask -https://github.com/marulkan/nagios-status-flask -Entry file: nagios-status-flask/hello.py -Scanned: 2016-10-18 16:35:09.174310 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thrisp/flarf -https://github.com/thrisp/flarf -Entry file: flarf/examples/example.py -Scanned: 2016-10-18 16:35:12.667483 -No vulnerabilities found. - - -NSkelsey/trance_piano -https://github.com/NSkelsey/trance_piano -Entry file: trance_piano/app.py -Scanned: 2016-10-18 16:35:14.671020 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: nozomiServer/app.py -Scanned: 2016-10-18 16:35:17.965226 -No vulnerabilities found. - - -skrieder/microblog -https://github.com/skrieder/microblog -Entry file: None -Scanned: 2016-10-18 16:35:19.520881 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -carlosvin/cmsflask -https://github.com/carlosvin/cmsflask -Entry file: cmsflask/cmsflask/__init__.py -Scanned: 2016-10-18 16:35:22.912512 -No vulnerabilities found. - - -Sadhanandh/Fb-page-manager -https://github.com/Sadhanandh/Fb-page-manager -Entry file: Fb-page-manager/flask_app.py -Scanned: 2016-10-18 16:35:26.462679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomas-/pyshorturls -https://github.com/thomas-/pyshorturls -Entry file: pyshorturls/short.py -Scanned: 2016-10-18 16:35:29.968992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sangallimarco/arduino_raspberry_garden_ui -https://github.com/sangallimarco/arduino_raspberry_garden_ui -Entry file: arduino_raspberry_garden_ui/main.py -Scanned: 2016-10-18 16:35:31.519555 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sigilioso/long_polling_example -https://github.com/sigilioso/long_polling_example -Entry file: long_polling_example/server.py -Scanned: 2016-10-18 16:35:37.304540 -No vulnerabilities found. - - -zxt/quotl -https://github.com/zxt/quotl -Entry file: quotl/quotl/__init__.py -Scanned: 2016-10-18 16:35:38.690142 -No vulnerabilities found. - - -bdeeney/crudite -https://github.com/bdeeney/crudite -Entry file: crudite/examples/hello_flask.py -Scanned: 2016-10-18 16:35:47.193657 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luhn/address-book -https://github.com/luhn/address-book -Entry file: address-book/app.py -Scanned: 2016-10-18 16:35:50.493394 -No vulnerabilities found. - - -cameronbracken/pitchforksearch -https://github.com/cameronbracken/pitchforksearch -Entry file: pitchforksearch/pitchforksearch/__init__.py -Scanned: 2016-10-18 16:35:51.016662 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chromy/pithy -https://github.com/chromy/pithy -Entry file: None -Scanned: 2016-10-18 16:35:53.512081 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chromy/pithy. - -adedot/countries_project -https://github.com/adedot/countries_project -Entry file: countries_project/flaskr.py -Scanned: 2016-10-18 16:35:55.770474 -No vulnerabilities found. - - -titainium/PRPHOTO -https://github.com/titainium/PRPHOTO -Entry file: PRPHOTO/prphoto.py -Scanned: 2016-10-18 16:35:59.505810 -No vulnerabilities found. - - -keybits/stripe-experiments -https://github.com/keybits/stripe-experiments -Entry file: stripe-experiments/app.py -Scanned: 2016-10-18 16:36:02.451440 -No vulnerabilities found. - - -izaac/twitty -https://github.com/izaac/twitty -Entry file: twitty/twitty.py -Scanned: 2016-10-18 16:36:02.982622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fc-thrisp-hurrata-dlm-graveyard/flack -https://github.com/fc-thrisp-hurrata-dlm-graveyard/flack -Entry file: flack/tests/test_app/__init__.py -Scanned: 2016-10-18 16:36:04.423866 -No vulnerabilities found. - - -cenkalti/github-flask -https://github.com/cenkalti/github-flask -Entry file: github-flask/test_flask_github.py -Scanned: 2016-10-18 16:36:06.988188 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -davidism/basic_flask -https://github.com/davidism/basic_flask -Entry file: basic_flask/basic_app/__init__.py -Scanned: 2016-10-18 16:36:08.718349 -No vulnerabilities found. - - -quokkaproject/quokka -https://github.com/quokkaproject/quokka -Entry file: quokka/quokka/tests/flask_csrf_test_client.py -Scanned: 2016-10-18 16:36:12.226201 -No vulnerabilities found. - - -akprasad/flask-forum -https://github.com/akprasad/flask-forum -Entry file: flask-forum/application/__init__.py -Scanned: 2016-10-18 16:36:14.131976 -No vulnerabilities found. - - -miguelgrinberg/Flask-Runner -https://github.com/miguelgrinberg/Flask-Runner -Entry file: Flask-Runner/examples/runner.py -Scanned: 2016-10-18 16:36:15.505090 -No vulnerabilities found. - - -lepture/flask-turbolinks -https://github.com/lepture/flask-turbolinks -Entry file: flask-turbolinks/flask_turbolinks.py -Scanned: 2016-10-18 16:36:17.393247 -No vulnerabilities found. - - -mkomitee/flask-kerberos -https://github.com/mkomitee/flask-kerberos -Entry file: flask-kerberos/example/example.py -Scanned: 2016-10-18 16:36:18.750826 -No vulnerabilities found. - - -vkolev/flask-template -https://github.com/vkolev/flask-template -Entry file: flask-template/app/__init__.py -Scanned: 2016-10-18 16:36:20.427878 -No vulnerabilities found. - - -ricardorego/FlaskTaskr -https://github.com/ricardorego/FlaskTaskr -Entry file: FlaskTaskr/flasktaskr.py -Scanned: 2016-10-18 16:36:23.576551 -Vulnerability 1: -File: FlaskTaskr/flasktaskr.py - > User input at line 59, trigger word "form[": - name = request.form['name'] -File: FlaskTaskr/flasktaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 2: -File: FlaskTaskr/flasktaskr.py - > User input at line 60, trigger word "form[": - due_date = request.form['due_date'] -File: FlaskTaskr/flasktaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 3: -File: FlaskTaskr/flasktaskr.py - > User input at line 61, trigger word "form[": - priority = request.form['priority'] -File: FlaskTaskr/flasktaskr.py - > reaches line 69, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 4: -File: FlaskTaskr/flasktaskr.py - > User input at line 62, trigger word "form[": - task_id = request.form['task_idEdit'] -File: FlaskTaskr/flasktaskr.py - > reaches line 76, trigger word "execute(": - cur.execute('select count(*) from ftasks where task_id=' + str(task_id)) - -Vulnerability 5: -File: FlaskTaskr/flasktaskr.py - > User input at line 59, trigger word "form[": - name = request.form['name'] -File: FlaskTaskr/flasktaskr.py - > reaches line 79, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 6: -File: FlaskTaskr/flasktaskr.py - > User input at line 60, trigger word "form[": - due_date = request.form['due_date'] -File: FlaskTaskr/flasktaskr.py - > reaches line 79, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 7: -File: FlaskTaskr/flasktaskr.py - > User input at line 61, trigger word "form[": - priority = request.form['priority'] -File: FlaskTaskr/flasktaskr.py - > reaches line 79, trigger word "execute(": - g.db.execute('insert into ftasks (name, due_date, priority, status) values (?, ?, ?, 1)', [name, due_date, priority]) - -Vulnerability 8: -File: FlaskTaskr/flasktaskr.py - > User input at line 59, trigger word "form[": - name = request.form['name'] -File: FlaskTaskr/flasktaskr.py - > reaches line 85, trigger word "execute(": - g.db.execute('update ftasks set name=?, due_date=?, priority=? where task_id=' + str(task_id), [name, due_date, priority]) - -Vulnerability 9: -File: FlaskTaskr/flasktaskr.py - > User input at line 60, trigger word "form[": - due_date = request.form['due_date'] -File: FlaskTaskr/flasktaskr.py - > reaches line 85, trigger word "execute(": - g.db.execute('update ftasks set name=?, due_date=?, priority=? where task_id=' + str(task_id), [name, due_date, priority]) - -Vulnerability 10: -File: FlaskTaskr/flasktaskr.py - > User input at line 61, trigger word "form[": - priority = request.form['priority'] -File: FlaskTaskr/flasktaskr.py - > reaches line 85, trigger word "execute(": - g.db.execute('update ftasks set name=?, due_date=?, priority=? where task_id=' + str(task_id), [name, due_date, priority]) - -Vulnerability 11: -File: FlaskTaskr/flasktaskr.py - > User input at line 62, trigger word "form[": - task_id = request.form['task_idEdit'] -File: FlaskTaskr/flasktaskr.py - > reaches line 85, trigger word "execute(": - g.db.execute('update ftasks set name=?, due_date=?, priority=? where task_id=' + str(task_id), [name, due_date, priority]) - - - -shivamthapar/OpenTok-Flask-Demo -https://github.com/shivamthapar/OpenTok-Flask-Demo -Entry file: OpenTok-Flask-Demo/main.py -Scanned: 2016-10-18 16:36:27.847833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marksteve/flask-beanstalk -https://github.com/marksteve/flask-beanstalk -Entry file: flask-beanstalk/example.py -Scanned: 2016-10-18 16:36:31.803209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thisgirlangie/Flask -https://github.com/thisgirlangie/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:36:32.326732 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ziozzang/flask-as-http-proxy-server -https://github.com/ziozzang/flask-as-http-proxy-server -Entry file: flask-as-http-proxy-server/proxy.py -Scanned: 2016-10-18 16:36:38.091225 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Impactstory/flask-template -https://github.com/Impactstory/flask-template -Entry file: flask-template/impactstoryanalytics/__init__.py -Scanned: 2016-10-18 16:36:39.316094 -No vulnerabilities found. - - -ubergarm/flask-mongo-app -https://github.com/ubergarm/flask-mongo-app -Entry file: flask-mongo-app/app/app.py -Scanned: 2016-10-18 16:36:48.899314 -No vulnerabilities found. - - -akprasad/flask-starter -https://github.com/akprasad/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-18 16:36:50.416762 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wywin/Rubustat -https://github.com/wywin/Rubustat -Entry file: Rubustat/rubustat_web_interface.py -Scanned: 2016-10-18 16:36:53.058133 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sant0sh/Flask-Task-Website -https://github.com/sant0sh/Flask-Task-Website -Entry file: Flask-Task-Website/routes.py -Scanned: 2016-10-18 16:36:54.630679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kingink/bitly-oauth-flask -https://github.com/kingink/bitly-oauth-flask -Entry file: bitly-oauth-flask/bitly_oauth.py -Scanned: 2016-10-18 16:36:57.345920 -No vulnerabilities found. - - -b1r3k/flask-seed -https://github.com/b1r3k/flask-seed -Entry file: None -Scanned: 2016-10-18 16:37:01.685177 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/b1r3k/flask-seed. - -eriktaubeneck/hacky_risk_flask_ai -https://github.com/eriktaubeneck/hacky_risk_flask_ai -Entry file: hacky_risk_flask_ai/app.py -Scanned: 2016-10-18 16:37:04.553347 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robbles/humanapi-sample-app -https://github.com/robbles/humanapi-sample-app -Entry file: humanapi-sample-app/app.py -Scanned: 2016-10-18 16:37:08.745996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yjroot/flask-base-frame -https://github.com/yjroot/flask-base-frame -Entry file: flask-base-frame/application/__init__.py -Scanned: 2016-10-18 16:37:10.070189 -No vulnerabilities found. - - -KevinJones/flask-guestbook-example -https://github.com/KevinJones/flask-guestbook-example -Entry file: flask-guestbook-example/main.py -Scanned: 2016-10-18 16:37:11.789966 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jpanganiban/flask-gevent-streaming -https://github.com/jpanganiban/flask-gevent-streaming -Entry file: flask-gevent-streaming/server.py -Scanned: 2016-10-18 16:37:14.004881 -No vulnerabilities found. - - -nocoffe/flaskenv -https://github.com/nocoffe/flaskenv -Entry file: flaskenv/Lib/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-18 16:37:17.984650 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -agsdot/flaskr -https://github.com/agsdot/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:37:18.500825 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fisheuler/flaskdemo -https://github.com/fisheuler/flaskdemo -Entry file: flaskdemo/tumblelog/__init__.py -Scanned: 2016-10-18 16:37:19.875575 -No vulnerabilities found. - - -papaeye/pytest-flaskit -https://github.com/papaeye/pytest-flaskit -Entry file: pytest-flaskit/examples/myapp.py -Scanned: 2016-10-18 16:37:21.573313 -No vulnerabilities found. - - -benosment/flaskr -https://github.com/benosment/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:37:22.070863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bvnp/flaskr -https://github.com/bvnp/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:37:22.595572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pspeter3/flaskr -https://github.com/pspeter3/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:37:23.088835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aisondhs/flask-demo-peewee-mysql -https://github.com/aisondhs/flask-demo-peewee-mysql -Entry file: flask-demo-peewee-mysql/minitwit/minitwit.py -Scanned: 2016-10-18 16:37:28.475801 -No vulnerabilities found. - - -chenyukang/FlaskStudy -https://github.com/chenyukang/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-18 16:37:33.395992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luc-at-jr/janrain-flask-tutorial -https://github.com/luc-at-jr/janrain-flask-tutorial -Entry file: janrain-flask-tutorial/tutorial1/server.py -Scanned: 2016-10-18 16:37:38.151946 -No vulnerabilities found. - - -bfauble/flask-skeleton -https://github.com/bfauble/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:37:38.692659 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bfauble/flask-skeleton. - -mross462/flask_env -https://github.com/mross462/flask_env -Entry file: flask_env/myapp.py -Scanned: 2016-10-18 16:37:49.060622 -No vulnerabilities found. - - -k4y3ff/flask-lesson -https://github.com/k4y3ff/flask-lesson -Entry file: flask-lesson/webapp.py -Scanned: 2016-10-18 16:37:51.415999 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -astyfx/microblog_flask -https://github.com/astyfx/microblog_flask -Entry file: microblog_flask/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-18 16:37:58.802317 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chhantyal/flask_app -https://github.com/chhantyal/flask_app -Entry file: None -Scanned: 2016-10-18 16:37:59.343620 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chhantyal/flask_app. - -robotrab/outfit-flask -https://github.com/robotrab/outfit-flask -Entry file: outfit-flask/outfit/__init__.py -Scanned: 2016-10-18 16:38:01.038627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erfanian/flask-marklet -https://github.com/erfanian/flask-marklet -Entry file: flask-marklet/main.py -Scanned: 2016-10-18 16:38:04.868789 -No vulnerabilities found. - - -insynchq/flask-upstatic -https://github.com/insynchq/flask-upstatic -Entry file: flask-upstatic/example/example.py -Scanned: 2016-10-18 16:38:06.461549 -No vulnerabilities found. - - -Blender3D/flask-loader -https://github.com/Blender3D/flask-loader -Entry file: flask-loader/example/app.py -Scanned: 2016-10-18 16:38:07.695563 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masom/flask-trois -https://github.com/masom/flask-trois -Entry file: flask-trois/flask_trois/__init__.py -Scanned: 2016-10-18 16:38:09.049239 -No vulnerabilities found. - - -pace-noge/flask-base -https://github.com/pace-noge/flask-base -Entry file: flask-base/app/__init__.py -Scanned: 2016-10-18 16:38:10.408434 -No vulnerabilities found. - - -csutherl/flask-practice -https://github.com/csutherl/flask-practice -Entry file: None -Scanned: 2016-10-18 16:38:12.311462 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/csutherl/flask-practice. - -rafaelnovello/flask-dynamodb -https://github.com/rafaelnovello/flask-dynamodb -Entry file: flask-dynamodb/dynamodb.py -Scanned: 2016-10-18 16:38:13.556401 -No vulnerabilities found. - - -linkerlin/flask-blog -https://github.com/linkerlin/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:38:14.582244 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dtonys/flask_gallery -https://github.com/dtonys/flask_gallery -Entry file: flask_gallery/app.py -Scanned: 2016-10-18 16:38:17.474077 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apisgirl/flask-tutorial -https://github.com/apisgirl/flask-tutorial -Entry file: flask-tutorial/app/__init__.py -Scanned: 2016-10-18 16:38:19.838934 -No vulnerabilities found. - - -yannlambret/flstats -https://github.com/yannlambret/flstats -Entry file: flstats/flstats/flstats_tests.py -Scanned: 2016-10-18 16:38:21.166000 -No vulnerabilities found. - - -cos-labs/git-smart-http-flask -https://github.com/cos-labs/git-smart-http-flask -Entry file: git-smart-http-flask/main.py -Scanned: 2016-10-18 16:38:22.383434 -No vulnerabilities found. - - -mvo5/chpasswd-ldap-flask -https://github.com/mvo5/chpasswd-ldap-flask -Entry file: chpasswd-ldap-flask/chpasswd_flask.py -Scanned: 2016-10-18 16:38:23.707408 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ykrkn/above-the-flask -https://github.com/ykrkn/above-the-flask -Entry file: above-the-flask/main.py -Scanned: 2016-10-18 16:38:24.962866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CalumJEadie/basic-flask-heroku-app -https://github.com/CalumJEadie/basic-flask-heroku-app -Entry file: basic-flask-heroku-app/app.py -Scanned: 2016-10-18 16:38:26.178196 -No vulnerabilities found. - - -thezange/starter_flask_struct -https://github.com/thezange/starter_flask_struct -Entry file: starter_flask_struct/app/__init__.py -Scanned: 2016-10-18 16:38:33.882088 -No vulnerabilities found. - - -RealHacker/ly-flask-server -https://github.com/RealHacker/ly-flask-server -Entry file: ly-flask-server/tqtServer.py -Scanned: 2016-10-18 16:38:35.161528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregarious/lilypad-server-flask -https://github.com/gregarious/lilypad-server-flask -Entry file: lilypad-server-flask/serverapp/__init__.py -Scanned: 2016-10-18 16:38:36.436276 -No vulnerabilities found. - - -cessor/flask-mvc-skeleton -https://github.com/cessor/flask-mvc-skeleton -Entry file: flask-mvc-skeleton/app.py -Scanned: 2016-10-18 16:38:38.688664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tgross/flask-riak-sessions -https://github.com/tgross/flask-riak-sessions -Entry file: flask-riak-sessions/flask_riaksessions.py -Scanned: 2016-10-18 16:38:40.050335 -No vulnerabilities found. - - -saqib-nadeem/flask-app-halfmoon -https://github.com/saqib-nadeem/flask-app-halfmoon -Entry file: flask-app-halfmoon/halfmoon.py -Scanned: 2016-10-18 16:38:49.736745 -No vulnerabilities found. - - -beckastar/Web-SQL- -https://github.com/beckastar/Web-SQL- -Entry file: Web-SQL-/webapp.py -Scanned: 2016-10-18 16:38:52.099632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benosment/rPi-cookbook -https://github.com/benosment/rPi-cookbook -Entry file: rPi-cookbook/cookbook.py -Scanned: 2016-10-18 16:38:58.101397 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DrayChou/Nginx-uWSGI-Flask-twip -https://github.com/DrayChou/Nginx-uWSGI-Flask-twip -Entry file: Nginx-uWSGI-Flask-twip/twip.py -Scanned: 2016-10-18 16:39:00.377684 -No vulnerabilities found. - - -mikaylathompson/fishnet -https://github.com/mikaylathompson/fishnet -Entry file: fishnet/app/__init__.py -Scanned: 2016-10-18 16:39:03.588130 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bzyx/pi-dht22 -https://github.com/bzyx/pi-dht22 -Entry file: pi-dht22/py/flask_rest_dht/main.py -Scanned: 2016-10-18 16:39:05.063589 -No vulnerabilities found. - - -buntwo/scramble-solver-webapp -https://github.com/buntwo/scramble-solver-webapp -Entry file: scramble-solver-webapp/flask/sessions.py -Scanned: 2016-10-18 16:39:07.510882 -No vulnerabilities found. - - -bessiec/Hackbright-Gradebook-Exercise-7.10.13 -https://github.com/bessiec/Hackbright-Gradebook-Exercise-7.10.13 -Entry file: None -Scanned: 2016-10-18 16:39:12.926315 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bessiec/Hackbright-Gradebook-Exercise-7.10.13. - -nicholasareed/sql_webapp -https://github.com/nicholasareed/sql_webapp -Entry file: sql_webapp/webapp.py -Scanned: 2016-10-18 16:39:14.623980 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -col42dev/todoAPIServer -https://github.com/col42dev/todoAPIServer -Entry file: todoAPIServer/todo.py -Scanned: 2016-10-18 16:39:16.317014 -Vulnerability 1: -File: todoAPIServer/todo.py - > User input at line 35, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: todoAPIServer/todo.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - -Vulnerability 2: -File: todoAPIServer/rest-server.py - > User input at line 69, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: todoAPIServer/rest-server.py - > reaches line 76, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -a-r-d/ssms -https://github.com/a-r-d/ssms -Entry file: ssms/ssms/__init__.py -Scanned: 2016-10-18 16:39:34.721575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -octaflop/specktrum -https://github.com/octaflop/specktrum -Entry file: specktrum/specktrum/app.py -Scanned: 2016-10-18 16:39:36.809672 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neofyte/live_chart_demo -https://github.com/neofyte/live_chart_demo -Entry file: None -Scanned: 2016-10-18 16:39:39.528643 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/neofyte/live_chart_demo. - -Kondou-ger/mrtg.py -https://github.com/Kondou-ger/mrtg.py -Entry file: None -Scanned: 2016-10-18 16:39:41.259521 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Kondou-ger/mrtg.py. - -quelloquialism/tcstats -https://github.com/quelloquialism/tcstats -Entry file: tcstats/src/app_provider.py -Scanned: 2016-10-18 16:39:42.731732 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iandexter/ansible_get -https://github.com/iandexter/ansible_get -Entry file: ansible_get/ansible_get/__init__.py -Scanned: 2016-10-18 16:39:44.555975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shea256/angular-flask -https://github.com/shea256/angular-flask -Entry file: angular-flask/angular_flask/__init__.py -Scanned: 2016-10-18 16:39:47.859343 -No vulnerabilities found. - - -corydolphin/flask-cors -https://github.com/corydolphin/flask-cors -Entry file: flask-cors/tests/extension/test_app_extension.py -Scanned: 2016-10-18 16:39:49.702641 -No vulnerabilities found. - - -allisson/flask-example -https://github.com/allisson/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-18 16:39:50.746598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sloria/flask-ghpages-example -https://github.com/sloria/flask-ghpages-example -Entry file: flask-ghpages-example/project/app.py -Scanned: 2016-10-18 16:39:52.096286 -No vulnerabilities found. - - -mjhea0/flask-basic-registration -https://github.com/mjhea0/flask-basic-registration -Entry file: flask-basic-registration/project/__init__.py -Scanned: 2016-10-18 16:39:53.463629 -No vulnerabilities found. - - -lashex/flask-neo4j -https://github.com/lashex/flask-neo4j -Entry file: flask-neo4j/flask_neo4j.py -Scanned: 2016-10-18 16:39:55.034009 -No vulnerabilities found. - - -vkolev/flask-template -https://github.com/vkolev/flask-template -Entry file: flask-template/app/__init__.py -Scanned: 2016-10-18 16:39:56.763435 -No vulnerabilities found. - - -vollov/angular-flask-login -https://github.com/vollov/angular-flask-login -Entry file: angular-flask-login/src/server.py -Scanned: 2016-10-18 16:39:58.342096 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -muneeb-ali/stripe-flask -https://github.com/muneeb-ali/stripe-flask -Entry file: stripe-flask/stripe_flask.py -Scanned: 2016-10-18 16:39:59.931774 -No vulnerabilities found. - - -99co/flask-heroku -https://github.com/99co/flask-heroku -Entry file: flask-heroku/acme/__init__.py -Scanned: 2016-10-18 16:40:01.808134 -No vulnerabilities found. - - -buraktekin/Flask -https://github.com/buraktekin/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-18 16:40:02.794684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maigfrga/flask-user-api -https://github.com/maigfrga/flask-user-api -Entry file: flask-user-api/users/views.py -Scanned: 2016-10-18 16:40:04.118752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -baxter13/flask -https://github.com/baxter13/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 16:40:05.057895 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -catsky/rebang -https://github.com/catsky/rebang -Entry file: rebang/1/chartnet/__init__.py -Scanned: 2016-10-18 16:40:15.200381 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguelgrinberg/Flask-Intro -https://github.com/miguelgrinberg/Flask-Intro -Entry file: Flask-Intro/06-RedirectsAndSessions/hello.py -Scanned: 2016-10-18 16:40:16.488864 -No vulnerabilities found. - - -Eforcers/gae-flask-todo -https://github.com/Eforcers/gae-flask-todo -Entry file: gae-flask-todo/main.py -Scanned: 2016-10-18 16:40:20.215801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pegase745/sqlalchemy-datatables -https://github.com/Pegase745/sqlalchemy-datatables -Entry file: sqlalchemy-datatables/examples/flask_tut/flask_tut/__init__.py -Scanned: 2016-10-18 16:40:21.839294 -No vulnerabilities found. - - -mjhea0/flask-stripe -https://github.com/mjhea0/flask-stripe -Entry file: flask-stripe/app/__init__.py -Scanned: 2016-10-18 16:40:23.139887 -No vulnerabilities found. - - -nathancahill/flask-oauth-example -https://github.com/nathancahill/flask-oauth-example -Entry file: flask-oauth-example/app/__init__.py -Scanned: 2016-10-18 16:40:24.382480 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -miguelgrinberg/Flask-MarrowMailer -https://github.com/miguelgrinberg/Flask-MarrowMailer -Entry file: Flask-MarrowMailer/examples/gmail.py -Scanned: 2016-10-18 16:40:37.314191 -No vulnerabilities found. - - -eigenn/flaskengine -https://github.com/eigenn/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 16:40:41.173120 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marksteve/flask-otpauth -https://github.com/marksteve/flask-otpauth -Entry file: flask-otpauth/example/example.py -Scanned: 2016-10-18 16:40:44.377033 -No vulnerabilities found. - - -aybuke/Flask- -https://github.com/aybuke/Flask- -Entry file: Flask-/flaskr.py -Scanned: 2016-10-18 16:40:48.091673 -No vulnerabilities found. - - -kageurufu/flask-sandbox -https://github.com/kageurufu/flask-sandbox -Entry file: flask-sandbox/test_sandbox.py -Scanned: 2016-10-18 16:40:49.466795 -No vulnerabilities found. - - -Modulus/Flask-RestfulDemo -https://github.com/Modulus/Flask-RestfulDemo -Entry file: Flask-RestfulDemo/webapp.py -Scanned: 2016-10-18 16:40:52.220693 -No vulnerabilities found. - - -hominlinx/flaskr -https://github.com/hominlinx/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:40:53.706473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hansent/flaskr -https://github.com/hansent/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:40:54.201146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stvnwlsn/flaskr -https://github.com/stvnwlsn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:40:55.746693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrecachinas/Flaskr -https://github.com/mrecachinas/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-18 16:40:58.345440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erikmingo/flaskrr -https://github.com/erikmingo/flaskrr -Entry file: flaskrr/flaskr.py -Scanned: 2016-10-18 16:40:59.587086 -No vulnerabilities found. - - -olsososo/flaskr -https://github.com/olsososo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-18 16:41:01.090773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keyz182/flask-login-template -https://github.com/keyz182/flask-login-template -Entry file: flask-login-template/app/__init__.py -Scanned: 2016-10-18 16:41:03.752098 -No vulnerabilities found. - - -peterhudec/liveandletdie -https://github.com/peterhudec/liveandletdie -Entry file: liveandletdie/sample_apps/flask/main.py -Scanned: 2016-10-18 16:41:06.403220 -No vulnerabilities found. - - -Kaibin/FlaskDemo -https://github.com/Kaibin/FlaskDemo -Entry file: FlaskDemo/app.py -Scanned: 2016-10-18 16:41:07.779553 -No vulnerabilities found. - - -sandeep-sidhu/flask_demo -https://github.com/sandeep-sidhu/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-18 16:41:19.263540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pnelson/flask-passport -https://github.com/pnelson/flask-passport -Entry file: flask-passport/flask_passport.py -Scanned: 2016-10-18 16:41:21.630078 -Vulnerability 1: -File: flask-passport/flask_passport.py - > User input at line 209, trigger word "get(": - data = self.dumps([session[self.user_id_key], request.headers.get('User-Agent')]) -File: flask-passport/flask_passport.py - > reaches line 211, trigger word "set_cookie(": - rv.set_cookie(self.persistent_cookie_name, data,max_age=self.duration, path=self.path, domain=self.domain, secure=self.secure, httponly=self.httponly) - - - -skscharr/Flask-Tutorial -https://github.com/skscharr/Flask-Tutorial -Entry file: Flask-Tutorial/flask_test.py -Scanned: 2016-10-18 16:41:23.855353 -No vulnerabilities found. - - -spo587/set_flask -https://github.com/spo587/set_flask -Entry file: set_flask/set_app.py -Scanned: 2016-10-18 16:41:25.432556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mross462/flask_env -https://github.com/mross462/flask_env -Entry file: flask_env/myapp.py -Scanned: 2016-10-18 16:41:36.717040 -No vulnerabilities found. - - -sileht/flask-userbrowser -https://github.com/sileht/flask-userbrowser -Entry file: flask-userbrowser/userbrowser/__init__.py -Scanned: 2016-10-18 16:41:38.102768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samwwwblack/flask-wellknown -https://github.com/samwwwblack/flask-wellknown -Entry file: flask-wellknown/wellknown_demo.py -Scanned: 2016-10-18 16:41:39.497904 -No vulnerabilities found. - - -sacanix/Flask-Nytro -https://github.com/sacanix/Flask-Nytro -Entry file: Flask-Nytro/sample/sample_app/__init__.py -Scanned: 2016-10-18 16:41:41.865727 -No vulnerabilities found. - - -qifly/flask-blog -https://github.com/qifly/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:41:42.400471 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -tlingf/flask-site -https://github.com/tlingf/flask-site -Entry file: flask-site/routes.py -Scanned: 2016-10-18 16:41:43.750428 -No vulnerabilities found. - - -h3idan/flask-bbs -https://github.com/h3idan/flask-bbs -Entry file: flask-bbs/runserver.py -Scanned: 2016-10-18 16:41:45.242235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pnelson/flask-informal -https://github.com/pnelson/flask-informal -Entry file: flask-informal/tests.py -Scanned: 2016-10-18 16:41:47.559606 -No vulnerabilities found. - - -amerature/flask-blog -https://github.com/amerature/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-18 16:41:48.077724 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -abhinavn/helloworld-flask -https://github.com/abhinavn/helloworld-flask -Entry file: helloworld-flask/routes.py -Scanned: 2016-10-18 16:41:50.398896 -No vulnerabilities found. - - -recfab/learn-flask -https://github.com/recfab/learn-flask -Entry file: learn-flask/microblog/app/__init__.py -Scanned: 2016-10-18 16:41:52.849118 -No vulnerabilities found. - - -renansz/flask-bible -https://github.com/renansz/flask-bible -Entry file: flask-bible/bible.py -Scanned: 2016-10-18 16:41:56.102669 -No vulnerabilities found. - - -sampathweb/pyweb_flask -https://github.com/sampathweb/pyweb_flask -Entry file: pyweb_flask/microblog.py -Scanned: 2016-10-18 16:41:57.829221 -No vulnerabilities found. - - -SegFaultAX/sampleapp-flask -https://github.com/SegFaultAX/sampleapp-flask -Entry file: sampleapp-flask/app.py -Scanned: 2016-10-18 16:41:59.165356 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguelgrinberg/Flask-Bouncer -https://github.com/miguelgrinberg/Flask-Bouncer -Entry file: Flask-Bouncer/tests/test_local.py -Scanned: 2016-10-18 16:42:00.635510 -No vulnerabilities found. - - -wanghao524151/flask-magic -https://github.com/wanghao524151/flask-magic -Entry file: flask-magic/demo_erp/manage.py -Scanned: 2016-10-18 16:42:02.435067 -No vulnerabilities found. - - -turnkey-commerce/flask-notes -https://github.com/turnkey-commerce/flask-notes -Entry file: flask-notes/app.py -Scanned: 2016-10-18 16:42:04.090440 -Vulnerability 1: -File: flask-notes/views/accounts.py - > User input at line 20, trigger word ".data": - error_message = dbutil.create_user(db, form.email.data, form.first_name.data, form.last_name.data, form.password.data) -File: flask-notes/views/accounts.py - > reaches line 26, trigger word "flash(": - flash('Error registering: %s' % error_message, 'error-message') - -Vulnerability 2: -File: flask-notes/views/accounts.py - > User input at line 40, trigger word ".data": - user = dbutil.validate_password(db, form.email.data, form.password.data) -File: flask-notes/views/accounts.py - > reaches line 45, trigger word "flash(": - flash('Welcome %s!' % user.first_name) - -Vulnerability 3: -File: flask-notes/views/accounts.py - > User input at line 66, trigger word ".data": - error_message = dbutil.update_user(db, current_user.email, form.first_name.data, form.last_name.data,password=form.password.data) -File: flask-notes/views/accounts.py - > reaches line 71, trigger word "flash(": - flash('Error updating profile: %s' % error_message, 'error-message') - -Vulnerability 4: -File: flask-notes/views/projects.py - > User input at line 30, trigger word ".data": - error_message = dbutil.create_project(db, current_user, form.project_name.data) -File: flask-notes/views/projects.py - > reaches line 35, trigger word "flash(": - flash('Error creating project: %s' % error_message, 'error-message') - -Vulnerability 5: -File: flask-notes/views/projects.py - > User input at line 51, trigger word ".data": - error_message = dbutil.update_project(db, project_id, current_user, form.project_name.data) -File: flask-notes/views/projects.py - > reaches line 56, trigger word "flash(": - flash('Error editing project: %s' % error_message, 'error-message') - -Vulnerability 6: -File: flask-notes/views/projects.py - > User input at line 61, trigger word ".data": - project_id = form.project_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 51: edited = dbutil.update_project(db, project_id, current_user, form.project_name.data) - File: flask-notes/views/projects.py - > Line 51: error_message = dbutil.update_project(db, project_id, current_user, form.project_name.data) -File: flask-notes/views/projects.py - > reaches line 56, trigger word "flash(": - flash('Error editing project: %s' % error_message, 'error-message') - -Vulnerability 7: -File: flask-notes/views/projects.py - > User input at line 88, trigger word ".data": - project_id = form.project_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 78: edited = dbutil.delete_project(db, project_id, current_user) - File: flask-notes/views/projects.py - > Line 78: error_message = dbutil.delete_project(db, project_id, current_user) - File: flask-notes/views/projects.py - > Line 90: project = dbutil.get_project(db, project_id, current_user._id) - File: flask-notes/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('projects/delete_project.html',form=form, project_name=project.project_name) - File: flask-notes/views/projects.py - > Line 81: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects.projects_list')) -File: flask-notes/views/projects.py - > reaches line 83, trigger word "flash(": - flash('Error deleting project: %s' % error_message, 'error-message') - -Vulnerability 8: -File: flask-notes/views/projects.py - > User input at line 114, trigger word ".data": - error_message = dbutil.create_topic(db, current_user, project_id, form.topic_name.data) -File: flask-notes/views/projects.py - > reaches line 119, trigger word "flash(": - flash('Error creating topic: %s' % error_message, 'error-message') - -Vulnerability 9: -File: flask-notes/views/projects.py - > User input at line 154, trigger word ".data": - topic_id = form.topic_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 144: edited = dbutil.update_topic(db, topic_id, current_user, form) - File: flask-notes/views/projects.py - > Line 144: error_message = dbutil.update_topic(db, topic_id, current_user, form) -File: flask-notes/views/projects.py - > reaches line 149, trigger word "flash(": - flash('Error editing topic: %s' % error_message, 'error-message') - -Vulnerability 10: -File: flask-notes/views/projects.py - > User input at line 181, trigger word ".data": - topic_id = form.topic_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 171: edited = dbutil.add_topic_note(db, topic_id, current_user, form) - File: flask-notes/views/projects.py - > Line 171: error_message = dbutil.add_topic_note(db, topic_id, current_user, form) - File: flask-notes/views/projects.py - > Line 174: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects.topic_details',project_id=project_id, topic_id=topic_id)) - File: flask-notes/views/projects.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('projects/add_topic_note.html',form=form) -File: flask-notes/views/projects.py - > reaches line 176, trigger word "flash(": - flash('Error adding note: %s' % error_message, 'error-message') - -Vulnerability 11: -File: flask-notes/views/projects.py - > User input at line 208, trigger word ".data": - topic_id = form.topic_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 198: deleted = dbutil.delete_topic_note(db, topic_id, note_id, current_user) - File: flask-notes/views/projects.py - > Line 198: error_message = dbutil.delete_topic_note(db, topic_id, note_id, current_user) - File: flask-notes/views/projects.py - > Line 201: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects.topic_details',project_id=project_id, topic_id=topic_id)) - File: flask-notes/views/projects.py - > Line 213: topic = dbutil.get_topic(db, topic_id, current_user._id) - File: flask-notes/views/projects.py - > Line 218: ret_MAYBE_FUNCTION_NAME = render_template('projects/delete_note.html',form=form, note_title=note_title, project_id=project_id, topic_id=topic_id, note_id=note_id) -File: flask-notes/views/projects.py - > reaches line 203, trigger word "flash(": - flash('Error deleting note: %s' % error_message, 'error-message') - -Vulnerability 12: -File: flask-notes/views/projects.py - > User input at line 241, trigger word ".data": - topic_id = form.topic_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 231: edited = dbutil.edit_topic_note(db, topic_id, note_id, current_user, form) - File: flask-notes/views/projects.py - > Line 231: error_message = dbutil.edit_topic_note(db, topic_id, note_id, current_user, form) - File: flask-notes/views/projects.py - > Line 234: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects.topic_details',project_id=project_id, topic_id=topic_id)) - File: flask-notes/views/projects.py - > Line 266: ret_MAYBE_FUNCTION_NAME = render_template('projects/edit_topic_note.html',form=form) -File: flask-notes/views/projects.py - > reaches line 236, trigger word "flash(": - flash('Error editing note: %s' % error_message, 'error-message') - -Vulnerability 13: -File: flask-notes/views/projects.py - > User input at line 289, trigger word ".data": - topic_id = form.topic_id.data -Reassigned in: - File: flask-notes/views/projects.py - > Line 279: deleted = dbutil.delete_topic(db, topic_id, current_user) - File: flask-notes/views/projects.py - > Line 279: error_message = dbutil.delete_topic(db, topic_id, current_user) - File: flask-notes/views/projects.py - > Line 291: topic = dbutil.get_topic(db, topic_id, current_user._id) - File: flask-notes/views/projects.py - > Line 292: ret_MAYBE_FUNCTION_NAME = render_template('projects/delete_topic.html',form=form, topic_name=topic.topic_name, project_id=project_id, topic_id=topic_id) - File: flask-notes/views/projects.py - > Line 282: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects.topics_list',project_id=project_id)) -File: flask-notes/views/projects.py - > reaches line 284, trigger word "flash(": - flash('Error deleting topic: %s' % error_message, 'error-message') - -Vulnerability 14: -File: flask-notes/views/admin.py - > User input at line 40, trigger word ".data": - error_message = dbutil.update_user(db, form.email.data, form.first_name.data, form.last_name.data,active=form.active.data, password=form.password.data) -File: flask-notes/views/admin.py - > reaches line 45, trigger word "flash(": - flash('Error updating user: %s' % error_message, 'error-message') - - - -spble/flask-boilerplate -https://github.com/spble/flask-boilerplate -Entry file: flask-boilerplate/app/__init__.py -Scanned: 2016-10-18 16:42:05.664082 -No vulnerabilities found. - - -pnelson/flask-pymongo -https://github.com/pnelson/flask-pymongo -Entry file: flask-pymongo/flask_pymongo.py -Scanned: 2016-10-18 16:42:07.023803 -No vulnerabilities found. - - -JanxSpirit/flask_blog -https://github.com/JanxSpirit/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-18 16:42:08.059371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -obfusk/napp-hello-flask -https://github.com/obfusk/napp-hello-flask -Entry file: napp-hello-flask/app.py -Scanned: 2016-10-18 16:42:09.307742 -No vulnerabilities found. - - -NathanKleekamp/social-login -https://github.com/NathanKleekamp/social-login -Entry file: social-login/app/__init__.py -Scanned: 2016-10-18 16:42:17.681733 -Vulnerability 1: -File: social-login/app/views.py - > User input at line 52, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: social-login/app/views.py - > Line 71: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: social-login/app/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: social-login/app/views.py - > Line 65: ret_MAYBE_FUNCTION_NAME = 'Your account has been deactivated. Contact the admin for it to be reinstated.' -File: social-login/app/views.py - > reaches line 69, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -shekhargulati/flaskr-openshift-quickstart -https://github.com/shekhargulati/flaskr-openshift-quickstart -Entry file: flaskr-openshift-quickstart/wsgi/flaskr.py -Scanned: 2016-10-18 16:42:19.017025 -No vulnerabilities found. - - -duncanmurray/Python-Flask-Training -https://github.com/duncanmurray/Python-Flask-Training -Entry file: Python-Flask-Training/app1.py -Scanned: 2016-10-18 16:42:20.284774 -Vulnerability 1: -File: Python-Flask-Training/app1.py - > User input at line 40, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: Python-Flask-Training/app1.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -philangist/flask-restful-api -https://github.com/philangist/flask-restful-api -Entry file: flask-restful-api/restful_api.py -Scanned: 2016-10-18 16:42:23.997013 -No vulnerabilities found. - - -simplyvikram/official-flask-tutorial -https://github.com/simplyvikram/official-flask-tutorial -Entry file: official-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-18 16:42:25.324244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gwongz/flask_mega_tutorial -https://github.com/gwongz/flask_mega_tutorial -Entry file: flask_mega_tutorial/app/__init__.py -Scanned: 2016-10-18 16:42:37.709812 -No vulnerabilities found. - - -hunterowens/flask_api_demo -https://github.com/hunterowens/flask_api_demo -Entry file: flask_api_demo/app.py -Scanned: 2016-10-18 16:42:38.978058 -No vulnerabilities found. - - -Shaunwei/Python_Flask_blog -https://github.com/Shaunwei/Python_Flask_blog -Entry file: Python_Flask_blog/blog/blog.py -Scanned: 2016-10-18 16:42:40.223914 -No vulnerabilities found. - - -phriscage/sample_flask_app -https://github.com/phriscage/sample_flask_app -Entry file: sample_flask_app/app/__init__.py -Scanned: 2016-10-18 16:42:43.234603 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chriszf/flask_login_example -https://github.com/chriszf/flask_login_example -Entry file: flask_login_example/app.py -Scanned: 2016-10-18 16:42:44.458125 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laureli/mini-webl-flask -https://github.com/laureli/mini-webl-flask -Entry file: mini-webl-flask/webl.py -Scanned: 2016-10-18 16:42:45.687725 -No vulnerabilities found. - - -lowrey/simple_flask_proxy -https://github.com/lowrey/simple_flask_proxy -Entry file: simple_flask_proxy/simple_flask_proxy.py -Scanned: 2016-10-18 16:42:46.937488 -No vulnerabilities found. - - -andrewbeng89/mitb-python-flask -https://github.com/andrewbeng89/mitb-python-flask -Entry file: None -Scanned: 2016-10-18 16:42:48.207793 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andrewbeng89/mitb-python-flask. - -t00f/Flask-server-test -https://github.com/t00f/Flask-server-test -Entry file: Flask-server-test/__init__.py -Scanned: 2016-10-18 16:42:49.540914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NathanKleekamp/flask-principal-example -https://github.com/NathanKleekamp/flask-principal-example -Entry file: flask-principal-example/main.py -Scanned: 2016-10-18 16:42:50.047845 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Red82/Blog-by-Flask -https://github.com/Red82/Blog-by-Flask -Entry file: Blog-by-Flask/FlaskProjects/hello.py -Scanned: 2016-10-18 16:42:57.052091 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -avidas/DevsNearMe_Flask -https://github.com/avidas/DevsNearMe_Flask -Entry file: DevsNearMe_Flask/venues_server.py -Scanned: 2016-10-18 16:42:58.382199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yograterol/flask-bundle-system -https://github.com/yograterol/flask-bundle-system -Entry file: flask-bundle-system/tests/test1.py -Scanned: 2016-10-18 16:42:59.746740 -No vulnerabilities found. - - -raghulj/hack_flask_app -https://github.com/raghulj/hack_flask_app -Entry file: hack_flask_app/smart_ad.py -Scanned: 2016-10-18 16:43:01.787282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fspot/flask-peewee-example -https://github.com/fspot/flask-peewee-example -Entry file: flask-peewee-example/app.py -Scanned: 2016-10-18 16:43:03.635148 -No vulnerabilities found. - - -sh4r3m4n/flask-session-cracker -https://github.com/sh4r3m4n/flask-session-cracker -Entry file: flask-session-cracker/demo_app/main.py -Scanned: 2016-10-18 16:43:04.965817 -No vulnerabilities found. - - -miguelgrinberg/Flask-Migrate -https://github.com/miguelgrinberg/Flask-Migrate -Entry file: Flask-Migrate/tests/app.py -Scanned: 2016-10-18 16:43:08.523228 -No vulnerabilities found. - - -mjhea0/flask-tracking -https://github.com/mjhea0/flask-tracking -Entry file: flask-tracking/app/__init__.py -Scanned: 2016-10-18 16:43:10.088819 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -raddevon/flask-permissions -https://github.com/raddevon/flask-permissions -Entry file: flask-permissions/flask_permissions/tests.py -Scanned: 2016-10-18 16:43:11.808798 -No vulnerabilities found. - - -mjhea0/Flask-Landing -https://github.com/mjhea0/Flask-Landing -Entry file: None -Scanned: 2016-10-18 16:43:13.172072 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mjhea0/Flask-Landing. - -Widdershin/flask-desktop -https://github.com/Widdershin/flask-desktop -Entry file: flask-desktop/examples/test_app.py -Scanned: 2016-10-18 16:43:18.516534 -No vulnerabilities found. - - -matrixise/flask-openerp -https://github.com/matrixise/flask-openerp -Entry file: flask-openerp/examples/demo_wkf.py -Scanned: 2016-10-18 16:43:19.866436 -No vulnerabilities found. - - -jaapz/flask-boilerplate -https://github.com/jaapz/flask-boilerplate -Entry file: flask-boilerplate/app/__init__.py -Scanned: 2016-10-18 16:43:21.584314 -No vulnerabilities found. - - -Alesh/Flask-Fragment -https://github.com/Alesh/Flask-Fragment -Entry file: Flask-Fragment/demo/ssiblog.py -Scanned: 2016-10-18 16:43:24.976997 -No vulnerabilities found. - - -mikeywaites/flask-skeleton -https://github.com/mikeywaites/flask-skeleton -Entry file: None -Scanned: 2016-10-18 16:43:25.487257 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mikeywaites/flask-skeleton. - -shuhaowu/flask-appcache -https://github.com/shuhaowu/flask-appcache -Entry file: flask-appcache/appcache_test.py -Scanned: 2016-10-18 16:43:39.437776 -No vulnerabilities found. - - -marksteve/flaskinit -https://github.com/marksteve/flaskinit -Entry file: flaskinit/flaskinit/templates/app.py -Scanned: 2016-10-18 16:43:40.739346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shekhargulati/flask-login-example -https://github.com/shekhargulati/flask-login-example -Entry file: flask-login-example/flasklogin.py -Scanned: 2016-10-18 16:43:42.995265 -No vulnerabilities found. - - -lightningwolf/Flask-LwAdmin -https://github.com/lightningwolf/Flask-LwAdmin -Entry file: Flask-LwAdmin/SAMPLE_PROJECT/myapp2.py -Scanned: 2016-10-18 16:43:45.772757 -No vulnerabilities found. - - -diogeneshamilton/venmo-flask -https://github.com/diogeneshamilton/venmo-flask -Entry file: venmo-flask/main.py -Scanned: 2016-10-18 16:43:52.166867 -No vulnerabilities found. - - -pallets/flask -https://github.com/pallets/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 17:14:10.226872 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gigq/flasktodo -https://github.com/gigq/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-18 17:14:11.375870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flosch/simpleapi -https://github.com/flosch/simpleapi -Entry file: simpleapi/example_project/server/flask1/app.py -Scanned: 2016-10-18 17:14:13.084940 -No vulnerabilities found. - - -codebykat/robotkitten -https://github.com/codebykat/robotkitten -Entry file: None -Scanned: 2016-10-18 17:14:13.588600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codebykat/robotkitten. - -mitsuhiko/flask-oauth -https://github.com/mitsuhiko/flask-oauth -Entry file: flask-oauth/example/facebook.py -Scanned: 2016-10-18 17:14:14.645840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-openid -https://github.com/mitsuhiko/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-18 17:14:15.702920 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -artisonian/flaskengine -https://github.com/artisonian/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-18 17:14:18.117294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toomoresuch/template-gae-with-flask -https://github.com/toomoresuch/template-gae-with-flask -Entry file: template-gae-with-flask/application.py -Scanned: 2016-10-18 17:14:18.650231 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: template-gae-with-flask/flask.py - -aljoscha/shot-o-matic -https://github.com/aljoscha/shot-o-matic -Entry file: shot-o-matic/shotomatic.py -Scanned: 2016-10-18 17:14:19.666584 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-sqlalchemy -https://github.com/mitsuhiko/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-18 17:14:20.695017 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/flask-fungiform -https://github.com/mitsuhiko/flask-fungiform -Entry file: flask-fungiform/examples/example.py -Scanned: 2016-10-18 17:14:23.020165 -No vulnerabilities found. - - -fsouza/talks -https://github.com/fsouza/talks -Entry file: talks/flask/app.py -Scanned: 2016-10-18 17:14:24.021108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unbracketed/flapp -https://github.com/unbracketed/flapp -Entry file: flapp/flapp/project_template/application.py -Scanned: 2016-10-18 17:14:24.553549 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolish/flask-markdown -https://github.com/dcolish/flask-markdown -Entry file: flask-markdown/tests/test_markdown.py -Scanned: 2016-10-18 17:15:10.117412 -No vulnerabilities found. - - -blossom/flask-gae-skeleton -https://github.com/blossom/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-18 17:15:10.646213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kijun/flask-methodhack -https://github.com/kijun/flask-methodhack -Entry file: flask-methodhack/flaskext/methodhack.py -Scanned: 2016-10-18 17:15:12.895392 -No vulnerabilities found. - - -viniciusfs/pasted-flask -https://github.com/viniciusfs/pasted-flask -Entry file: pasted-flask/pasted.py -Scanned: 2016-10-18 17:15:14.160098 -Vulnerability 1: -File: pasted-flask/pasted.py - > User input at line 219, trigger word "form[": - hexdigest = calc_md5(request.form['code']) -Reassigned in: - File: pasted-flask/pasted.py - > Line 221: paste = query_db('select * from pasted where md5 = ?', [hexdigest],one=True) - File: pasted-flask/pasted.py - > Line 225: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 231: paste_id = cur.lastrowid - File: pasted-flask/pasted.py - > Line 232: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 234: ret_MAYBE_FUNCTION_NAME = render_template('view.html',paste=paste) - File: pasted-flask/pasted.py - > Line 203: paste = query_db('select * from pasted where id = ?', [paste_id],one=True) - File: pasted-flask/pasted.py - > Line 207: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 209: ret_MAYBE_FUNCTION_NAME = render_template('form.html',original=paste) - File: pasted-flask/pasted.py - > Line 213: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: pasted-flask/pasted.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: pasted-flask/pasted.py - > reaches line 229, trigger word "execute(": - cur = g.db.execute('insert into pasted (code, md5, viewed_at, parent) values (?, ?, ?, ?)', [request.form['code'], hexdigest, viewed_at, request.form['parent']]) - - - -Cornu/Brain -https://github.com/Cornu/Brain -Entry file: Brain/brain/__init__.py -Scanned: 2016-10-18 17:15:17.083182 -Vulnerability 1: -File: Brain/brain/controllers/text.py - > User input at line 43, trigger word "get(": - key = request.form.get('search') -File: Brain/brain/controllers/text.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/' + key) - - - -jbochi/scrum-you -https://github.com/jbochi/scrum-you -Entry file: scrum-you/application.py -Scanned: 2016-10-18 17:15:17.621655 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miracle2k/flask-assets -https://github.com/miracle2k/flask-assets -Entry file: flask-assets/tests/test_config.py -Scanned: 2016-10-18 17:15:19.869248 -No vulnerabilities found. - - -jgumbley/flask-payment -https://github.com/jgumbley/flask-payment -Entry file: flask-payment/tests.py -Scanned: 2016-10-18 17:15:21.418211 -No vulnerabilities found. - - -eugenkiss/Simblin -https://github.com/eugenkiss/Simblin -Entry file: Simblin/simblin/__init__.py -Scanned: 2016-10-18 17:15:21.981508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jugyo/flask-gae-template -https://github.com/jugyo/flask-gae-template -Entry file: flask-gae-template/app.py -Scanned: 2016-10-18 17:15:23.787490 -No vulnerabilities found. - - -swanson/flask-embedly -https://github.com/swanson/flask-embedly -Entry file: flask-embedly/example/app.py -Scanned: 2016-10-18 17:15:25.193796 -No vulnerabilities found. - - -LightStyle/Python-Board -https://github.com/LightStyle/Python-Board -Entry file: Python-Board/src/index.py -Scanned: 2016-10-18 17:15:26.637420 -No vulnerabilities found. - - -miku/flask-gae-stub -https://github.com/miku/flask-gae-stub -Entry file: flask-gae-stub/flask/app.py -Scanned: 2016-10-18 17:15:27.226981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -derwiki/wordisms_flask -https://github.com/derwiki/wordisms_flask -Entry file: wordisms_flask/www/main.py -Scanned: 2016-10-18 17:15:27.753541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flebel/cisco79xx_phone_directory -https://github.com/flebel/cisco79xx_phone_directory -Entry file: cisco79xx_phone_directory/cisco79xx_phone_directory.py -Scanned: 2016-10-18 17:15:29.049748 -No vulnerabilities found. - - -jkossen/imposter -https://github.com/jkossen/imposter -Entry file: None -Scanned: 2016-10-18 17:15:29.611204 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jkossen/imposter. - -sublee/subleekr -https://github.com/sublee/subleekr -Entry file: subleekr/subleekr/app.py -Scanned: 2016-10-18 17:15:32.908067 -No vulnerabilities found. - - -akhodakivskiy/flask -https://github.com/akhodakivskiy/flask -Entry file: flask/setup.py -Scanned: 2016-10-18 17:15:35.030767 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thadeusb/flask-cache -https://github.com/thadeusb/flask-cache -Entry file: flask-cache/examples/hello.py -Scanned: 2016-10-18 17:15:36.918712 -No vulnerabilities found. - - -kamalgill/flask-appengine-template -https://github.com/kamalgill/flask-appengine-template -Entry file: flask-appengine-template/src/lib/flask/sessions.py -Scanned: 2016-10-18 17:15:40.100880 -No vulnerabilities found. - - -miguelgrinberg/flask-celery-example -https://github.com/miguelgrinberg/flask-celery-example -Entry file: flask-celery-example/app.py -Scanned: 2016-10-19 08:39:10.518361 -No vulnerabilities found. - - -realpython/flask-registration -https://github.com/realpython/flask-registration -Entry file: flask-registration/project/__init__.py -Scanned: 2016-10-19 08:39:11.925940 -No vulnerabilities found. - - -sholsapp/flask-rrd -https://github.com/sholsapp/flask-rrd -Entry file: flask-rrd/flaskrrd/__init__.py -Scanned: 2016-10-19 08:39:13.988990 -No vulnerabilities found. - - -Zokormazo/flaskllery -https://github.com/Zokormazo/flaskllery -Entry file: flaskllery/app/__init__.py -Scanned: 2016-10-19 08:39:16.127113 -No vulnerabilities found. - - -msosvi/flask-pyco -https://github.com/msosvi/flask-pyco -Entry file: flask-pyco/examples/enlosdetalles-blog/blog.py -Scanned: 2016-10-19 08:39:17.719694 -No vulnerabilities found. - - -esthom/flasktaskr -https://github.com/esthom/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:39:21.524876 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hpincket/flaskr -https://github.com/hpincket/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:39:22.036748 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radiumweilei/flaskr -https://github.com/radiumweilei/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:39:22.540841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -technoto/flaskr -https://github.com/technoto/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:39:23.046348 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vbirds/flasker -https://github.com/vbirds/flasker -Entry file: flasker/flasker.py -Scanned: 2016-10-19 08:39:24.329555 -No vulnerabilities found. - - -LastOne817/calender -https://github.com/LastOne817/calender -Entry file: calender/scheduler.py -Scanned: 2016-10-19 08:39:25.716863 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ryannorton/Flask-Practice -https://github.com/ryannorton/Flask-Practice -Entry file: Flask-Practice/flaskr.py -Scanned: 2016-10-19 08:39:26.968071 -No vulnerabilities found. - - -esthom/flask-blog -https://github.com/esthom/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:39:28.023642 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -harmon25/flask_base -https://github.com/harmon25/flask_base -Entry file: flask_base/base_flask/__init__.py -Scanned: 2016-10-19 08:39:29.362855 -Vulnerability 1: -File: flask_base/base_flask/views.py - > User input at line 24, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask_base/base_flask/views.py - > Line 30: user = User(username=username) -File: flask_base/base_flask/views.py - > reaches line 34, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flask_base/base_flask/views.py - > User input at line 24, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask_base/base_flask/views.py - > Line 30: user = User(username=username) -File: flask_base/base_flask/views.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flask_base/base_flask/views.py - > User input at line 39, trigger word "get(": - user = User.query.get(id) -File: flask_base/base_flask/views.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -semyenov/flask-jquery -https://github.com/semyenov/flask-jquery -Entry file: flask-jquery/hello.py -Scanned: 2016-10-19 08:39:34.246445 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jafffy/flask-test -https://github.com/jafffy/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 08:39:37.080547 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -murdrae/flask-blog -https://github.com/murdrae/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:39:37.653444 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -chyka-dev/flask-skeleton -https://github.com/chyka-dev/flask-skeleton -Entry file: None -Scanned: 2016-10-19 08:39:38.198376 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chyka-dev/flask-skeleton. - -nmsbane/flask-application -https://github.com/nmsbane/flask-application -Entry file: flask-application/app/__init__.py -Scanned: 2016-10-19 08:39:39.704648 -No vulnerabilities found. - - -mfwarren/flask-practice -https://github.com/mfwarren/flask-practice -Entry file: None -Scanned: 2016-10-19 08:39:40.233081 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mfwarren/flask-practice. - -ljb-2000/flask-ops -https://github.com/ljb-2000/flask-ops -Entry file: None -Scanned: 2016-10-19 08:39:41.455353 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ljb-2000/flask-ops. - -emteajay/flask_test -https://github.com/emteajay/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 08:39:44.443996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -boring2/flask_code -https://github.com/boring2/flask_code -Entry file: flask_code/flaskr/flaskr.py -Scanned: 2016-10-19 08:39:45.698689 -No vulnerabilities found. - - -rainulf/flask-init -https://github.com/rainulf/flask-init -Entry file: flask-init/app/__init__.py -Scanned: 2016-10-19 08:39:47.045238 -Vulnerability 1: -File: flask-init/app/modules/auth/controllers.py - > User input at line 27, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-init/app/modules/auth/controllers.py - > Line 30: session['user_id'] = user.id -File: flask-init/app/modules/auth/controllers.py - > reaches line 31, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -stephane/freezer -https://github.com/stephane/freezer -Entry file: freezer/freezer/app.py -Scanned: 2016-10-19 08:39:48.683562 -No vulnerabilities found. - - -Laukess/FlaskTaskr_Part_2 -https://github.com/Laukess/FlaskTaskr_Part_2 -Entry file: FlaskTaskr_Part_2/app/views.py -Scanned: 2016-10-19 08:39:50.049814 -No vulnerabilities found. - - -Laukess/FlaskTaskr_Part_3 -https://github.com/Laukess/FlaskTaskr_Part_3 -Entry file: FlaskTaskr_Part_3/app/views.py -Scanned: 2016-10-19 08:39:51.413885 -No vulnerabilities found. - - -Laukess/FlaskTaskr_Part_1 -https://github.com/Laukess/FlaskTaskr_Part_1 -Entry file: FlaskTaskr_Part_1/app/views.py -Scanned: 2016-10-19 08:40:11.745864 -No vulnerabilities found. - - -GlieseRay/FlaskAppTemplate -https://github.com/GlieseRay/FlaskAppTemplate -Entry file: None -Scanned: 2016-10-19 08:40:13.093172 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/GlieseRay/FlaskAppTemplate. - -iceraj/flask_facebook_login -https://github.com/iceraj/flask_facebook_login -Entry file: flask_facebook_login/app.py -Scanned: 2016-10-19 08:40:14.347108 -No vulnerabilities found. - - -mithfindel/genevajug-contest-flask -https://github.com/mithfindel/genevajug-contest-flask -Entry file: genevajug-contest-flask/src/main.py -Scanned: 2016-10-19 08:40:15.585927 -No vulnerabilities found. - - -citizen-stig/my-flask-rest-sample -https://github.com/citizen-stig/my-flask-rest-sample -Entry file: my-flask-rest-sample/flaskrestsample.py -Scanned: 2016-10-19 08:40:16.878913 -No vulnerabilities found. - - -garfik/flask-api-app-skeleton -https://github.com/garfik/flask-api-app-skeleton -Entry file: None -Scanned: 2016-10-19 08:40:18.111715 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/garfik/flask-api-app-skeleton. - -thundercat1/Flask-Mega-Tutorial -https://github.com/thundercat1/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/app/__init__.py -Scanned: 2016-10-19 08:40:19.556361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Zapix/flask-jenkins-sample -https://github.com/Zapix/flask-jenkins-sample -Entry file: flask-jenkins-sample/src/app/__init__.py -Scanned: 2016-10-19 08:40:20.899742 -No vulnerabilities found. - - -mperham2/flask-hello-world -https://github.com/mperham2/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:40:21.490066 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -emmasteimann/flask-rest-service -https://github.com/emmasteimann/flask-rest-service -Entry file: flask-rest-service/app.py -Scanned: 2016-10-19 08:40:25.389158 -No vulnerabilities found. - - -bweave/flask-hello-world -https://github.com/bweave/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:40:25.992094 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Ottermad/Python-Flask-Site -https://github.com/Ottermad/Python-Flask-Site -Entry file: Python-Flask-Site/app.py -Scanned: 2016-10-19 08:40:27.527803 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -myevan/creating-in-flask-jsonnpc -https://github.com/myevan/creating-in-flask-jsonnpc -Entry file: creating-in-flask-jsonnpc/official_tutorial/06_builtin_auth/builtin_auth_main.py -Scanned: 2016-10-19 08:40:28.863736 -No vulnerabilities found. - - -nakulpathak3/complete-microblog-flask -https://github.com/nakulpathak3/complete-microblog-flask -Entry file: complete-microblog-flask/app/__init__.py -Scanned: 2016-10-19 08:40:30.435761 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Ottermad/Python-Flask-Odot -https://github.com/Ottermad/Python-Flask-Odot -Entry file: Python-Flask-Odot/app.py -Scanned: 2016-10-19 08:40:32.863141 -Vulnerability 1: -File: Python-Flask-Odot/app.py - > User input at line 79, trigger word "form[": - my_todo_list = 'id''title''description'idrequest.form['title'].rstrip()request.form['description'].rstrip() -Reassigned in: - File: Python-Flask-Odot/app.py - > Line 84: result = update_todo_list(my_todo_list) - File: Python-Flask-Odot/app.py - > Line 88: my_todo_list = get_todo_list(id) - File: Python-Flask-Odot/app.py - > Line 89: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',my_todo_list) - File: Python-Flask-Odot/app.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('show')) -File: Python-Flask-Odot/app.py - > reaches line 85, trigger word "flash(": - flash(result) - -Vulnerability 2: -File: Python-Flask-Odot/app.py - > User input at line 103, trigger word "form[": - result = create_todo_list(request.form['title'].rstrip(), request.form['description'].rstrip()) -File: Python-Flask-Odot/app.py - > reaches line 107, trigger word "flash(": - flash(result) - - - -rchampa/openshift-template-python-flask -https://github.com/rchampa/openshift-template-python-flask -Entry file: openshift-template-python-flask/flaskapp.py -Scanned: 2016-10-19 08:40:34.217661 -No vulnerabilities found. - - -myevan/creating-in-flask -https://github.com/myevan/creating-in-flask -Entry file: creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py -Scanned: 2016-10-19 08:40:35.665160 -Vulnerability 1: -File: creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py - > User input at line 57, trigger word "form[": - title = request.form['title'] -File: creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py - > reaches line 59, trigger word "execute(": - g.db.execute('INSERT INTO entries (title, text) values (?, ?)', [title, text]) - -Vulnerability 2: -File: creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py - > User input at line 58, trigger word "form[": - text = request.form['text'] -File: creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py - > reaches line 59, trigger word "execute(": - g.db.execute('INSERT INTO entries (title, text) values (?, ?)', [title, text]) - - - -gusibi/pager -https://github.com/gusibi/pager -Entry file: pager/example/app.py -Scanned: 2016-10-19 08:40:36.967381 -No vulnerabilities found. - - -mnickey/blog -https://github.com/mnickey/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 08:40:39.950394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wahhid/flask_rdm_web_service_ec -https://github.com/wahhid/flask_rdm_web_service_ec -Entry file: flask_rdm_web_service_ec/run.py -Scanned: 2016-10-19 08:40:41.324168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Devical/Python3-Flask-Min-Setup -https://github.com/Devical/Python3-Flask-Min-Setup -Entry file: Python3-Flask-Min-Setup/yourprojectname/app/__init__.py -Scanned: 2016-10-19 08:40:42.586049 -No vulnerabilities found. - - -jobiaj/Student-record-app-using-Flask -https://github.com/jobiaj/Student-record-app-using-Flask -Entry file: Student-record-app-using-Flask/app.py -Scanned: 2016-10-19 08:40:53.809092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rchampa/openshift-template-python-flask-mysql -https://github.com/rchampa/openshift-template-python-flask-mysql -Entry file: openshift-template-python-flask-mysql/flaskapp.py -Scanned: 2016-10-19 08:40:55.172624 -No vulnerabilities found. - - -HardBite/flibr -https://github.com/HardBite/flibr -Entry file: None -Scanned: 2016-10-19 08:40:56.879068 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HardBite/flibr. - -bdiegel/pysnitch -https://github.com/bdiegel/pysnitch -Entry file: pysnitch/snitch.py -Scanned: 2016-10-19 08:40:58.248431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChristianWitts/Restless-Skeleton -https://github.com/ChristianWitts/Restless-Skeleton -Entry file: Restless-Skeleton/RestlessSkeleton.py -Scanned: 2016-10-19 08:40:59.652565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -buzz1274/tasks -https://github.com/buzz1274/tasks -Entry file: tasks/tasks.py -Scanned: 2016-10-19 08:41:13.467062 -No vulnerabilities found. - - -mnickey/helloflask -https://github.com/mnickey/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 08:41:14.001416 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -OpenHumans/open-humans-oauth2-example -https://github.com/OpenHumans/open-humans-oauth2-example -Entry file: open-humans-oauth2-example/server.py -Scanned: 2016-10-19 08:41:16.220571 -No vulnerabilities found. - - -cwilkes/turbo-wookie -https://github.com/cwilkes/turbo-wookie -Entry file: turbo-wookie/api/app.py -Scanned: 2016-10-19 08:41:17.948352 -Vulnerability 1: -File: turbo-wookie/api/app.py - > User input at line 18, trigger word "form[": - user_name = request.form['name'] -File: turbo-wookie/api/app.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('yo'user_name) - - - -charlonyx/Music-Player -https://github.com/charlonyx/Music-Player -Entry file: Music-Player/music.py -Scanned: 2016-10-19 08:41:23.678672 -No vulnerabilities found. - - -jiamh2005/transdb -https://github.com/jiamh2005/transdb -Entry file: None -Scanned: 2016-10-19 08:41:25.286687 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -unite128/scorpius -https://github.com/unite128/scorpius -Entry file: scorpius/__init__.py -Scanned: 2016-10-19 08:41:26.693193 -Vulnerability 1: -File: scorpius/views/patient.py - > User input at line 17, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: scorpius/views/patient.py - > Line 11: ret_MAYBE_FUNCTION_NAME = error('action_requires_token') - File: scorpius/views/patient.py - > Line 13: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 15: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 21: ret_MAYBE_FUNCTION_NAME = error('user_not_found') - File: scorpius/views/patient.py - > Line 26: ret_MAYBE_FUNCTION_NAME = error('user_already_added') -File: scorpius/views/patient.py - > reaches line 33, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''user_added'Trueusername), 200) - -Vulnerability 2: -File: scorpius/views/patient.py - > User input at line 46, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: scorpius/views/patient.py - > Line 40: ret_MAYBE_FUNCTION_NAME = error('action_requires_token') - File: scorpius/views/patient.py - > Line 42: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 44: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 50: ret_MAYBE_FUNCTION_NAME = error('user_not_in_access_list') -File: scorpius/views/patient.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''user_removed'Trueusername), 200) - -Vulnerability 3: -File: scorpius/views/patient.py - > User input at line 75, trigger word "get(": - lat = float(request.json.get('lat')) -Reassigned in: - File: scorpius/views/patient.py - > Line 83: g.user.current_lat = lat - File: scorpius/views/patient.py - > Line 68: ret_MAYBE_FUNCTION_NAME = error('action_requires_token') - File: scorpius/views/patient.py - > Line 70: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 72: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 78: ret_MAYBE_FUNCTION_NAME = error('invalid_coordinates') - File: scorpius/views/patient.py - > Line 81: ret_MAYBE_FUNCTION_NAME = error('invalid_coordinates') -File: scorpius/views/patient.py - > reaches line 100, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''lat''long'Truelatlong), 200) - -Vulnerability 4: -File: scorpius/views/patient.py - > User input at line 76, trigger word "get(": - long = float(request.json.get('long')) -Reassigned in: - File: scorpius/views/patient.py - > Line 84: g.user.current_long = long - File: scorpius/views/patient.py - > Line 68: ret_MAYBE_FUNCTION_NAME = error('action_requires_token') - File: scorpius/views/patient.py - > Line 70: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 72: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/patient.py - > Line 78: ret_MAYBE_FUNCTION_NAME = error('invalid_coordinates') - File: scorpius/views/patient.py - > Line 81: ret_MAYBE_FUNCTION_NAME = error('invalid_coordinates') -File: scorpius/views/patient.py - > reaches line 100, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''lat''long'Truelatlong), 200) - -Vulnerability 5: -File: scorpius/views/debug.py - > User input at line 8, trigger word "get(": - secret = request.json.get('secret') -Reassigned in: - File: scorpius/views/debug.py - > Line 10: user.secret = secret -File: scorpius/views/debug.py - > reaches line 12, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('success''secret'Truesecret) - -Vulnerability 6: -File: scorpius/views/common.py - > User input at line 23, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: scorpius/views/common.py - > Line 37: user = User(username=username, email=email, user_type=user_type, registered=current_time(), last_seen=current_time(), last_ip=request.remote_addr, allowed_access_list='[]', position_history='[]') - File: scorpius/views/common.py - > Line 21: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/common.py - > Line 29: ret_MAYBE_FUNCTION_NAME = error('username_already_exist') - File: scorpius/views/common.py - > Line 31: ret_MAYBE_FUNCTION_NAME = error('invalid_email') - File: scorpius/views/common.py - > Line 33: ret_MAYBE_FUNCTION_NAME = error('email_in_use') - File: scorpius/views/common.py - > Line 35: ret_MAYBE_FUNCTION_NAME = error('invalid_request') -File: scorpius/views/common.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''username''email'Trueusernameemail), 200) - -Vulnerability 7: -File: scorpius/views/common.py - > User input at line 25, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: scorpius/views/common.py - > Line 37: user = User(username=username, email=email, user_type=user_type, registered=current_time(), last_seen=current_time(), last_ip=request.remote_addr, allowed_access_list='[]', position_history='[]') - File: scorpius/views/common.py - > Line 21: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/common.py - > Line 29: ret_MAYBE_FUNCTION_NAME = error('username_already_exist') - File: scorpius/views/common.py - > Line 31: ret_MAYBE_FUNCTION_NAME = error('invalid_email') - File: scorpius/views/common.py - > Line 33: ret_MAYBE_FUNCTION_NAME = error('email_in_use') - File: scorpius/views/common.py - > Line 35: ret_MAYBE_FUNCTION_NAME = error('invalid_request') -File: scorpius/views/common.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''username''email'Trueusernameemail), 200) - -Vulnerability 8: -File: scorpius/views/common.py - > User input at line 68, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: scorpius/views/common.py - > Line 66: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/common.py - > Line 75: ret_MAYBE_FUNCTION_NAME = error('user_not_found') - File: scorpius/views/common.py - > Line 77: ret_MAYBE_FUNCTION_NAME = error('invalid_request') - File: scorpius/views/common.py - > Line 79: ret_MAYBE_FUNCTION_NAME = error('invalid_secret') -File: scorpius/views/common.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('success''username''password_changed'TrueusernameTrue), 200) - - - -mengdilin/simple_html_form -https://github.com/mengdilin/simple_html_form -Entry file: None -Scanned: 2016-10-19 08:41:28.474849 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mengdilin/simple_html_form. - -tsaltas/posts-api -https://github.com/tsaltas/posts-api -Entry file: posts-api/posts/__init__.py -Scanned: 2016-10-19 08:41:29.996410 -Vulnerability 1: -File: posts-api/posts/api.py - > User input at line 25, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: posts-api/posts/api.py - > Line 33: posts = posts.filter(models.Post.body.contains(body_like)) - File: posts-api/posts/api.py - > Line 34: posts = posts.all() - File: posts-api/posts/api.py - > Line 37: data = json.dumps([post.as_dictionary() for post in posts]) - File: posts-api/posts/api.py - > Line 38: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: posts-api/posts/api.py - > Line 29: posts = session.query(models.Post) -File: posts-api/posts/api.py - > reaches line 31, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - -Vulnerability 2: -File: posts-api/posts/api.py - > User input at line 26, trigger word "get(": - body_like = request.args.get('body_like') -Reassigned in: - File: posts-api/posts/api.py - > Line 34: posts = posts.all() - File: posts-api/posts/api.py - > Line 37: data = json.dumps([post.as_dictionary() for post in posts]) - File: posts-api/posts/api.py - > Line 38: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: posts-api/posts/api.py - > Line 29: posts = session.query(models.Post) - File: posts-api/posts/api.py - > Line 31: posts = posts.filter(models.Post.title.contains(title_like)) -File: posts-api/posts/api.py - > reaches line 33, trigger word "filter(": - posts = posts.filter(models.Post.body.contains(body_like)) - - - -jolahde/monkey-app -https://github.com/jolahde/monkey-app -Entry file: monkey-app/app/__init__.py -Scanned: 2016-10-19 08:41:33.195376 -No vulnerabilities found. - - -buddha314/pathfinder-game-manager -https://github.com/buddha314/pathfinder-game-manager -Entry file: None -Scanned: 2016-10-19 08:41:34.658835 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/buddha314/pathfinder-game-manager. - -nicolewhite/neo4j-flask -https://github.com/nicolewhite/neo4j-flask -Entry file: neo4j-flask/blog/views.py -Scanned: 2016-10-19 08:41:37.440349 -No vulnerabilities found. - - -jay3dec/PythonFlaskMySQLApp---Part-1 -https://github.com/jay3dec/PythonFlaskMySQLApp---Part-1 -Entry file: PythonFlaskMySQLApp---Part-1/app.py -Scanned: 2016-10-19 08:41:38.974983 -No vulnerabilities found. - - -stewartpark/Flask-JSGlue -https://github.com/stewartpark/Flask-JSGlue -Entry file: Flask-JSGlue/test.py -Scanned: 2016-10-19 08:41:41.516310 -No vulnerabilities found. - - -polyfunc/flask-todolist -https://github.com/polyfunc/flask-todolist -Entry file: flask-todolist/app/__init__.py -Scanned: 2016-10-19 08:41:43.349547 -No vulnerabilities found. - - -AniaWujek/flask -https://github.com/AniaWujek/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:41:44.377863 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -fromzeroedu/flask-intro -https://github.com/fromzeroedu/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 08:41:44.884490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bear/python-indieweb -https://github.com/bear/python-indieweb -Entry file: python-indieweb/indieweb.py -Scanned: 2016-10-19 08:41:46.302362 -Vulnerability 1: -File: python-indieweb/indieweb.py - > User input at line 151, trigger word ".data": - url = ParseResult(authURL.scheme, authURL.netloc, authURL.path, authURL.params, urllib.urlencode('me''redirect_uri''client_id''scope''response_type'meform.redirect_uri.dataform.client_id.data'post''id'), authURL.fragment).geturl() -Reassigned in: - File: python-indieweb/indieweb.py - > Line 147: authURL = url - File: python-indieweb/indieweb.py - > Line 175: ret_MAYBE_FUNCTION_NAME = ('insert fancy no auth endpoint found error message here', 403) - File: python-indieweb/indieweb.py - > Line 179: ret_MAYBE_FUNCTION_NAME = render_template('login.jinja',templateData) - File: python-indieweb/indieweb.py - > Line 145: authURL = None -File: python-indieweb/indieweb.py - > reaches line 173, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 2: -File: python-indieweb/indieweb.py - > User input at line 184, trigger word "get(": - me = request.args.get('me') -Reassigned in: - File: python-indieweb/indieweb.py - > Line 190: key = 'login-%s' % me - File: python-indieweb/indieweb.py - > Line 191: data = db.hgetall(key) - File: python-indieweb/indieweb.py - > Line 193: r = ninka.indieauth.validateAuthCode(code=code, client_id=me, redirect_uri=data['redirect_uri']) - File: python-indieweb/indieweb.py - > Line 198: scope = r['response']['scope'] - File: python-indieweb/indieweb.py - > Line 199: from_uri = data['from_uri'] - File: python-indieweb/indieweb.py - > Line 209: session['indieauth_scope'] = scope - File: python-indieweb/indieweb.py - > Line 210: session['indieauth_id'] = me - File: python-indieweb/indieweb.py - > Line 221: ret_MAYBE_FUNCTION_NAME = redirect('/') - File: python-indieweb/indieweb.py - > Line 223: ret_MAYBE_FUNCTION_NAME = ('authentication failed', 403) - File: python-indieweb/indieweb.py - > Line 208: session['indieauth_token'] = token -File: python-indieweb/indieweb.py - > reaches line 219, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(from_uri) - -Vulnerability 3: -File: python-indieweb/indieweb.py - > User input at line 471, trigger word "get(": - target = request.form.get('target') -Reassigned in: - File: python-indieweb/indieweb.py - > Line 475: valid = validURL(target) - File: python-indieweb/indieweb.py - > Line 484: ret_MAYBE_FUNCTION_NAME = ('Vouch required for webmention', 449) - File: python-indieweb/indieweb.py - > Line 486: ret_MAYBE_FUNCTION_NAME = ('Webmention is invalid', 400) - File: python-indieweb/indieweb.py - > Line 488: ret_MAYBE_FUNCTION_NAME = ('invalid post', 404) - File: python-indieweb/indieweb.py - > Line 469: valid = False -File: python-indieweb/indieweb.py - > reaches line 481, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target) - - - -realpython/flask-download -https://github.com/realpython/flask-download -Entry file: None -Scanned: 2016-10-19 08:41:47.654591 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/realpython/flask-download. - -stefoo411/flask-boilerplate-master-git -https://github.com/stefoo411/flask-boilerplate-master-git -Entry file: flask-boilerplate-master-git/app.py -Scanned: 2016-10-19 08:42:00.488587 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EricSchles/flask_heroku_template -https://github.com/EricSchles/flask_heroku_template -Entry file: flask_heroku_template/app.py -Scanned: 2016-10-19 08:42:01.706533 -No vulnerabilities found. - - -vividvilla/olaf -https://github.com/vividvilla/olaf -Entry file: None -Scanned: 2016-10-19 08:42:03.619987 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vividvilla/olaf. - -xdbaqiao/flaskr -https://github.com/xdbaqiao/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:42:04.113127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hziling/flasky -https://github.com/hziling/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 08:42:14.656994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -itstriz/flaskr -https://github.com/itstriz/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:42:15.172105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gooopy/flaskflask -https://github.com/gooopy/flaskflask -Entry file: flaskflask/flaskr.py -Scanned: 2016-10-19 08:42:17.524824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mperham2/flasktaskr -https://github.com/mperham2/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:42:18.048603 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qmaximum/flaskr -https://github.com/qmaximum/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:42:18.541004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radiumweilei/flaskr -https://github.com/radiumweilei/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:42:20.034131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jayzeng/flaskapi -https://github.com/jayzeng/flaskapi -Entry file: flaskapi/app/__init__.py -Scanned: 2016-10-19 08:42:22.316373 -No vulnerabilities found. - - -LastOne817/calender -https://github.com/LastOne817/calender -Entry file: calender/scheduler.py -Scanned: 2016-10-19 08:42:25.849125 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wright8191/flask-echo-server -https://github.com/wright8191/flask-echo-server -Entry file: flask-echo-server/echo.py -Scanned: 2016-10-19 08:42:28.280377 -Vulnerability 1: -File: flask-echo-server/echo.py - > User input at line 58, trigger word "get(": - status_code = request.args.get('status') or 200 -Reassigned in: - File: flask-echo-server/echo.py - > Line 59: status_code = int(status_code) - File: flask-echo-server/echo.py - > Line 61: status_code = 200 - File: flask-echo-server/echo.py - > Line 63: data = 'success''status''time''path''script_root''url''base_url''url_root''method''headers''data''host''args''form''json''cookies'Truestatus_codetime.time()request.pathrequest.script_rootrequest.urlrequest.base_urlrequest.url_rootrequest.methodextract(request.headers)request.data.decode(encoding='UTF-8')request.hostextract(request.args)extract(request.form)request.jsonextract(request.cookies) - File: flask-echo-server/echo.py - > Line 86: response.status_code = status_code - File: flask-echo-server/echo.py - > Line 87: ret_MAYBE_FUNCTION_NAME = response -File: flask-echo-server/echo.py - > reaches line 85, trigger word "jsonify(": - response = jsonify(data) - -Vulnerability 2: -File: flask-echo-server/echo.py - > User input at line 63, trigger word ".data": - data = 'success''status''time''path''script_root''url''base_url''url_root''method''headers''data''host''args''form''json''cookies'Truestatus_codetime.time()request.pathrequest.script_rootrequest.urlrequest.base_urlrequest.url_rootrequest.methodextract(request.headers)request.data.decode(encoding='UTF-8')request.hostextract(request.args)extract(request.form)request.jsonextract(request.cookies) -Reassigned in: - File: flask-echo-server/echo.py - > Line 87: ret_MAYBE_FUNCTION_NAME = response -File: flask-echo-server/echo.py - > reaches line 85, trigger word "jsonify(": - response = jsonify(data) - - - -ElvisTheKing/flask_showtime -https://github.com/ElvisTheKing/flask_showtime -Entry file: flask_showtime/showtime/__init__.py -Scanned: 2016-10-19 08:42:29.800505 -No vulnerabilities found. - - -drakeeee/flask-microblog -https://github.com/drakeeee/flask-microblog -Entry file: None -Scanned: 2016-10-19 08:42:35.639296 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -antoviaque/flask-tutorial -https://github.com/antoviaque/flask-tutorial -Entry file: flask-tutorial/app/__init__.py -Scanned: 2016-10-19 08:42:36.904944 -No vulnerabilities found. - - -mczwier/flask_tests -https://github.com/mczwier/flask_tests -Entry file: flask_tests/src/test1.py -Scanned: 2016-10-19 08:42:38.113147 -No vulnerabilities found. - - -sportnak/hellworld-flask -https://github.com/sportnak/hellworld-flask -Entry file: hellworld-flask/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-19 08:42:44.599027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -commadelimited/flask-demo -https://github.com/commadelimited/flask-demo -Entry file: None -Scanned: 2016-10-19 08:42:45.120692 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/commadelimited/flask-demo. - -th4tirishguy/flask-default -https://github.com/th4tirishguy/flask-default -Entry file: flask-default/app/__init__.py -Scanned: 2016-10-19 08:42:46.351735 -No vulnerabilities found. - - -makao007/HelloFlask -https://github.com/makao007/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 08:42:48.088910 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -machbio/userauth_flask -https://github.com/machbio/userauth_flask -Entry file: userauth_flask/blueprint_api_example.py -Scanned: 2016-10-19 08:42:49.367612 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jbayer/flask-example -https://github.com/jbayer/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 08:42:49.871102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mperham2/flask-blog -https://github.com/mperham2/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:42:50.423919 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -emteajay/flask_testing -https://github.com/emteajay/flask_testing -Entry file: flask_testing/blog.py -Scanned: 2016-10-19 08:42:53.778028 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_testing/env/lib/python2.7/genericpath.py - -minghuam/flask-website -https://github.com/minghuam/flask-website -Entry file: flask-website/app/__init__.py -Scanned: 2016-10-19 08:42:55.543945 -No vulnerabilities found. - - -syntactical/gregslist-flask -https://github.com/syntactical/gregslist-flask -Entry file: gregslist-flask/app/__init__.py -Scanned: 2016-10-19 08:42:56.796915 -No vulnerabilities found. - - -jstacoder/flask-macros -https://github.com/jstacoder/flask-macros -Entry file: flask-macros/flask_macros/__init__.py -Scanned: 2016-10-19 08:42:58.028982 -No vulnerabilities found. - - -beatobongco/Flask-Materia -https://github.com/beatobongco/Flask-Materia -Entry file: Flask-Materia/web/app.py -Scanned: 2016-10-19 08:42:59.789832 -No vulnerabilities found. - - -kidd-tian/kiss-flask -https://github.com/kidd-tian/kiss-flask -Entry file: kiss-flask/app/__init__.py -Scanned: 2016-10-19 08:43:01.304473 -No vulnerabilities found. - - -tjabaut/LearnFlask -https://github.com/tjabaut/LearnFlask -Entry file: LearnFlask/testflask.py -Scanned: 2016-10-19 08:43:02.511743 -No vulnerabilities found. - - -jeffreyling/flask_test -https://github.com/jeffreyling/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 08:43:03.060685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aregsar/flask_samples -https://github.com/aregsar/flask_samples -Entry file: flask_samples/four/app.py -Scanned: 2016-10-19 08:43:06.168664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ljb-2000/flask-ops -https://github.com/ljb-2000/flask-ops -Entry file: None -Scanned: 2016-10-19 08:43:06.671856 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ljb-2000/flask-ops. - -jhuleatt/helloFlask -https://github.com/jhuleatt/helloFlask -Entry file: helloFlask/hello-template.py -Scanned: 2016-10-19 08:43:16.949597 -No vulnerabilities found. - - -boring2/flask_code -https://github.com/boring2/flask_code -Entry file: flask_code/flaskr/flaskr.py -Scanned: 2016-10-19 08:43:18.184559 -No vulnerabilities found. - - -teachMeCode/mysite-flask -https://github.com/teachMeCode/mysite-flask -Entry file: mysite-flask/app.py -Scanned: 2016-10-19 08:43:23.816068 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: mysite-flask/venv/lib/python3.4/struct.py - -sapardi2014/helloflask -https://github.com/sapardi2014/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 08:43:24.799534 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -stephane/freezer -https://github.com/stephane/freezer -Entry file: freezer/freezer/app.py -Scanned: 2016-10-19 08:43:26.340928 -No vulnerabilities found. - - -Laukess/FlaskTaskr_Part_3 -https://github.com/Laukess/FlaskTaskr_Part_3 -Entry file: FlaskTaskr_Part_3/app/views.py -Scanned: 2016-10-19 08:43:27.571930 -No vulnerabilities found. - - -scshepard/FlaskPlan7 -https://github.com/scshepard/FlaskPlan7 -Entry file: FlaskPlan7/app/__init__.py -Scanned: 2016-10-19 08:43:28.975349 -No vulnerabilities found. - - -scshepard/FlaskPlan8 -https://github.com/scshepard/FlaskPlan8 -Entry file: FlaskPlan8/app/__init__.py -Scanned: 2016-10-19 08:43:30.581812 -No vulnerabilities found. - - -Zapix/flask-jenkins-sample -https://github.com/Zapix/flask-jenkins-sample -Entry file: flask-jenkins-sample/src/app/__init__.py -Scanned: 2016-10-19 08:43:32.940137 -No vulnerabilities found. - - -marti1125/flask_simple_site -https://github.com/marti1125/flask_simple_site -Entry file: flask_simple_site/hello.py -Scanned: 2016-10-19 08:43:34.428852 -No vulnerabilities found. - - -nakulpathak3/flask-rest-api -https://github.com/nakulpathak3/flask-rest-api -Entry file: flask-rest-api/app.py -Scanned: 2016-10-19 08:43:38.694871 -Vulnerability 1: -File: flask-rest-api/app.py - > User input at line 52, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-rest-api/app.py - > reaches line 59, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -scshepard/MegaFlask9 -https://github.com/scshepard/MegaFlask9 -Entry file: MegaFlask9/app/__init__.py -Scanned: 2016-10-19 08:43:40.218333 -No vulnerabilities found. - - -skyjland/codrugFlaskExam -https://github.com/skyjland/codrugFlaskExam -Entry file: codrugFlaskExam/codrugFlaskExam.py -Scanned: 2016-10-19 08:43:41.453976 -No vulnerabilities found. - - -jobiaj/Url-shortner-using-Flask -https://github.com/jobiaj/Url-shortner-using-Flask -Entry file: None -Scanned: 2016-10-19 08:43:48.612907 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jobiaj/Url-shortner-using-Flask. - -shibinp/student_app_using_flask -https://github.com/shibinp/student_app_using_flask -Entry file: student_app_using_flask/app/__init__.py -Scanned: 2016-10-19 08:43:49.858209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andrej2704/flask_porfolio_azure -https://github.com/andrej2704/flask_porfolio_azure -Entry file: None -Scanned: 2016-10-19 08:43:52.569275 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -WolkoDav/flask-admin-utils -https://github.com/WolkoDav/flask-admin-utils -Entry file: flask-admin-utils/examples/sqla_utils/app.py -Scanned: 2016-10-19 08:43:53.948899 -No vulnerabilities found. - - -Ottermad/Python-Flask-Site -https://github.com/Ottermad/Python-Flask-Site -Entry file: Python-Flask-Site/app.py -Scanned: 2016-10-19 08:43:54.440997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -myevan/creating-in-flask-sqlalchemy -https://github.com/myevan/creating-in-flask-sqlalchemy -Entry file: creating-in-flask-sqlalchemy/official_tutorial/02_simple_relationships/simple_relationships_main.py -Scanned: 2016-10-19 08:43:55.777551 -No vulnerabilities found. - - -eyaylali/first-flask-app -https://github.com/eyaylali/first-flask-app -Entry file: None -Scanned: 2016-10-19 08:43:58.545426 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jobiaj/Blog-app-using-Flask -https://github.com/jobiaj/Blog-app-using-Flask -Entry file: Blog-app-using-Flask/app.py -Scanned: 2016-10-19 08:43:59.876288 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -levy5674/hello_world -https://github.com/levy5674/hello_world -Entry file: hello_world/hello.py -Scanned: 2016-10-19 08:44:01.113108 -No vulnerabilities found. - - -wahhid/flask_rdm_web_service_ec -https://github.com/wahhid/flask_rdm_web_service_ec -Entry file: flask_rdm_web_service_ec/run.py -Scanned: 2016-10-19 08:44:01.621177 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jobiaj/Student-record-app-using-Flask -https://github.com/jobiaj/Student-record-app-using-Flask -Entry file: Student-record-app-using-Flask/app.py -Scanned: 2016-10-19 08:44:02.110911 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -schybo/flackish -https://github.com/schybo/flackish -Entry file: flackish/hello.py -Scanned: 2016-10-19 08:44:06.329173 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nifemim/flaskr_coding_challenge -https://github.com/nifemim/flaskr_coding_challenge -Entry file: flaskr_coding_challenge/flaskr/flaskr.py -Scanned: 2016-10-19 08:44:08.190682 -No vulnerabilities found. - - -stensoootla/spotpix_api -https://github.com/stensoootla/spotpix_api -Entry file: spotpix_api/api/__init__.py -Scanned: 2016-10-19 08:44:09.575419 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ChristianWitts/Restless-Skeleton -https://github.com/ChristianWitts/Restless-Skeleton -Entry file: Restless-Skeleton/RestlessSkeleton.py -Scanned: 2016-10-19 08:44:18.101588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DChen7/TennisPredictor -https://github.com/DChen7/TennisPredictor -Entry file: TennisPredictor/tennis_classifier.py -Scanned: 2016-10-19 08:44:19.919468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sxtech/SX-CarRecgServer -https://github.com/sxtech/SX-CarRecgServer -Entry file: SX-CarRecgServer/car_recg/app.py -Scanned: 2016-10-19 08:44:21.487377 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -z3ugma/rethink-recipes -https://github.com/z3ugma/rethink-recipes -Entry file: rethink-recipes/colorpicker.py -Scanned: 2016-10-19 08:44:27.295244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -houxiaohou/juzi-blog -https://github.com/houxiaohou/juzi-blog -Entry file: juzi-blog/__init__.py -Scanned: 2016-10-19 08:44:28.542134 -No vulnerabilities found. - - -Depado/we-rate -https://github.com/Depado/we-rate -Entry file: we-rate/app/__init__.py -Scanned: 2016-10-19 08:44:30.502792 -No vulnerabilities found. - - -CorrosiveKid/raspberrypi-gpio-api -https://github.com/CorrosiveKid/raspberrypi-gpio-api -Entry file: raspberrypi-gpio-api/flask-api.py -Scanned: 2016-10-19 08:44:33.003646 -No vulnerabilities found. - - -micahh2/marvin -https://github.com/micahh2/marvin -Entry file: marvin/marvin.py -Scanned: 2016-10-19 08:44:34.507916 -No vulnerabilities found. - - -RichardJTorres/minecraft-manager -https://github.com/RichardJTorres/minecraft-manager -Entry file: minecraft-manager/app/__init__.py -Scanned: 2016-10-19 08:44:36.098184 -No vulnerabilities found. - - -jeuvreyl/Viewer -https://github.com/jeuvreyl/Viewer -Entry file: Viewer/__init__.py -Scanned: 2016-10-19 08:44:37.791761 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuyazi/microblog-learning -https://github.com/wuyazi/microblog-learning -Entry file: microblog-learning/app/__init__.py -Scanned: 2016-10-19 08:44:39.029994 -No vulnerabilities found. - - -AhnSeongHyun/logis -https://github.com/AhnSeongHyun/logis -Entry file: logis/example.py -Scanned: 2016-10-19 08:44:41.784457 -No vulnerabilities found. - - -karldreher/skim.py -https://github.com/karldreher/skim.py -Entry file: None -Scanned: 2016-10-19 08:44:43.095185 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/karldreher/skim.py. - -makeittotop/q_mon -https://github.com/makeittotop/q_mon -Entry file: q_mon/q_mon.py -Scanned: 2016-10-19 08:44:50.298604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akshshar/proxy_slave_graphite -https://github.com/akshshar/proxy_slave_graphite -Entry file: proxy_slave_graphite/__init__.py -Scanned: 2016-10-19 08:44:51.868328 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arunvelsriram/auwebportal -https://github.com/arunvelsriram/auwebportal -Entry file: auwebportal/auwebportal/__init__.py -Scanned: 2016-10-19 08:44:53.571578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amydshelton/API_tutorial -https://github.com/amydshelton/API_tutorial -Entry file: API_tutorial/app.py -Scanned: 2016-10-19 08:44:54.832335 -Vulnerability 1: -File: API_tutorial/app.py - > User input at line 56, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: API_tutorial/app.py - > reaches line 63, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -cfezequiel/fleedr -https://github.com/cfezequiel/fleedr -Entry file: fleedr/fleedr.py -Scanned: 2016-10-19 08:44:56.100527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -markebbole/partyspot -https://github.com/markebbole/partyspot -Entry file: partyspot/webserver.py -Scanned: 2016-10-19 08:44:57.579085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hojas/flask -https://github.com/hojas/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:44:59.789761 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -uclaacm/teach_reddit_clone_flask -https://github.com/uclaacm/teach_reddit_clone_flask -Entry file: teach_reddit_clone_flask/app/__init__.py -Scanned: 2016-10-19 08:45:01.153632 -No vulnerabilities found. - - -jimjshields/flask_app -https://github.com/jimjshields/flask_app -Entry file: None -Scanned: 2016-10-19 08:45:01.653085 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jimjshields/flask_app. - -melvin0008/FlaskBoilerplate -https://github.com/melvin0008/FlaskBoilerplate -Entry file: None -Scanned: 2016-10-19 08:45:04.006446 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/melvin0008/FlaskBoilerplate. - -stefoo411/flask-boilerplate-master-git -https://github.com/stefoo411/flask-boilerplate-master-git -Entry file: flask-boilerplate-master-git/app.py -Scanned: 2016-10-19 08:45:04.584553 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -felixmulder/flaskcards -https://github.com/felixmulder/flaskcards -Entry file: flaskcards/app.py -Scanned: 2016-10-19 08:45:05.984479 -No vulnerabilities found. - - -jasonshiffler/flasktaskr -https://github.com/jasonshiffler/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:45:08.513076 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -truep/flaskapp -https://github.com/truep/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 08:45:09.032493 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Atuuh/FlaskPi -https://github.com/Atuuh/FlaskPi -Entry file: FlaskPi/app/__init__.py -Scanned: 2016-10-19 08:45:11.270920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SRITANU/FlaskApp -https://github.com/SRITANU/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 08:45:22.978148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -s3nk4s/flaskTutorials -https://github.com/s3nk4s/flaskTutorials -Entry file: flaskTutorials/FlaskApp/FlaskApp/__init__.py -Scanned: 2016-10-19 08:45:26.761775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Obiwancodi/hello_flask -https://github.com/Obiwancodi/hello_flask -Entry file: hello_flask/hello_world.py -Scanned: 2016-10-19 08:45:28.043801 -No vulnerabilities found. - - -elysium31/flask_tutorial -https://github.com/elysium31/flask_tutorial -Entry file: flask_tutorial/app/__init__.py -Scanned: 2016-10-19 08:45:29.543801 -No vulnerabilities found. - - -victormocioiu/flask_tasky -https://github.com/victormocioiu/flask_tasky -Entry file: flask_tasky/views.py -Scanned: 2016-10-19 08:45:31.333920 -No vulnerabilities found. - - -allofthefasts/flask-mega -https://github.com/allofthefasts/flask-mega -Entry file: flask-mega/app/__init__.py -Scanned: 2016-10-19 08:45:32.977634 -No vulnerabilities found. - - -Marleg/flask-blog -https://github.com/Marleg/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:45:33.548705 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -commadelimited/flask-demo -https://github.com/commadelimited/flask-demo -Entry file: None -Scanned: 2016-10-19 08:45:35.050029 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/commadelimited/flask-demo. - -jeromefiot/FLASK_base -https://github.com/jeromefiot/FLASK_base -Entry file: FLASK_base/app/__init__.py -Scanned: 2016-10-19 08:45:37.768534 -No vulnerabilities found. - - -gergob/flask_web -https://github.com/gergob/flask_web -Entry file: flask_web/app.py -Scanned: 2016-10-19 08:45:39.381659 -Vulnerability 1: -File: flask_web/app.py - > User input at line 34, trigger word "form[": - user_name = request.form['username'] -Reassigned in: - File: flask_web/app.py - > Line 38: error_message = 'User {} successfuly logged in.'.format(user_name) - File: flask_web/app.py - > Line 47: error_message = 'Invalid request method:{}'.format(request.method) -File: flask_web/app.py - > reaches line 39, trigger word "flash(": - flash(error_message) - -Vulnerability 2: -File: flask_web/app.py - > User input at line 34, trigger word "form[": - user_name = request.form['username'] -Reassigned in: - File: flask_web/app.py - > Line 38: error_message = 'User {} successfuly logged in.'.format(user_name) - File: flask_web/app.py - > Line 47: error_message = 'Invalid request method:{}'.format(request.method) -File: flask_web/app.py - > reaches line 49, trigger word "flash(": - flash(error_message) - - - -ravindersahni/hello-flask -https://github.com/ravindersahni/hello-flask -Entry file: hello-flask/hello_flask.py -Scanned: 2016-10-19 08:45:40.631187 -No vulnerabilities found. - - -juzten/QuickFlask -https://github.com/juzten/QuickFlask -Entry file: QuickFlask/ChadevPython/app.py -Scanned: 2016-10-19 08:45:42.918998 -No vulnerabilities found. - - -JaehyunAhn/testFlask -https://github.com/JaehyunAhn/testFlask -Entry file: testFlask/testFlask.py -Scanned: 2016-10-19 08:45:44.139264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HyperStandard/py-flask -https://github.com/HyperStandard/py-flask -Entry file: py-flask/flaskapp.py -Scanned: 2016-10-19 08:45:45.623349 -No vulnerabilities found. - - -libhide/todo-flask -https://github.com/libhide/todo-flask -Entry file: todo-flask/app/__init__.py -Scanned: 2016-10-19 08:45:51.113706 -No vulnerabilities found. - - -th4tirishguy/flask-skeleton -https://github.com/th4tirishguy/flask-skeleton -Entry file: None -Scanned: 2016-10-19 08:45:52.634984 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/th4tirishguy/flask-skeleton. - -vocky/flask-test -https://github.com/vocky/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 08:45:54.203032 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -hw810/flask_microblog -https://github.com/hw810/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 08:45:56.820274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Rand01ph/flask-blog -https://github.com/Rand01ph/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:45:57.349621 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nehaavishwa/GameFlask -https://github.com/nehaavishwa/GameFlask -Entry file: GameFlask/app.py -Scanned: 2016-10-19 08:46:01.076581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -billmccord/im-real-time-flask -https://github.com/billmccord/im-real-time-flask -Entry file: im-real-time-flask/website/website.py -Scanned: 2016-10-19 08:46:02.736539 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bwilks27/flask-hello-world -https://github.com/bwilks27/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:46:03.288082 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -sportnak/flask-emojiTweet -https://github.com/sportnak/flask-emojiTweet -Entry file: flask-emojiTweet/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-19 08:46:13.899517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sb2gh/flask_login_1 -https://github.com/sb2gh/flask_login_1 -Entry file: flask_login_1/app/__init__.py -Scanned: 2016-10-19 08:46:15.308615 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harshk360/python-flask-test -https://github.com/harshk360/python-flask-test -Entry file: python-flask-test/app.py -Scanned: 2016-10-19 08:46:16.510570 -No vulnerabilities found. - - -liupeng330/PythonFlaskTest -https://github.com/liupeng330/PythonFlaskTest -Entry file: PythonFlaskTest/FlaskTest/src/app.py -Scanned: 2016-10-19 08:46:17.720533 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shihpeng/flask-site-template -https://github.com/shihpeng/flask-site-template -Entry file: None -Scanned: 2016-10-19 08:46:19.322897 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shihpeng/flask-site-template. - -macdart/flask-hello-world -https://github.com/macdart/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:46:19.897278 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -PMcCarth/flask-hellow-world -https://github.com/PMcCarth/flask-hellow-world -Entry file: flask-hellow-world/app.py -Scanned: 2016-10-19 08:46:21.127344 -No vulnerabilities found. - - -mattupstate/pytest-flask-error -https://github.com/mattupstate/pytest-flask-error -Entry file: pytest-flask-error/myapp.py -Scanned: 2016-10-19 08:46:22.346522 -No vulnerabilities found. - - -aslamup/Student-Record-using-flask- -https://github.com/aslamup/Student-Record-using-flask- -Entry file: Student-Record-using-flask-/student.py -Scanned: 2016-10-19 08:46:23.967439 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bonfy/dianji-data-flask -https://github.com/bonfy/dianji-data-flask -Entry file: dianji-data-flask/project/__init__.py -Scanned: 2016-10-19 08:46:26.349396 -No vulnerabilities found. - - -davemenninger/flask-blockio-faucet -https://github.com/davemenninger/flask-blockio-faucet -Entry file: flask-blockio-faucet/faucet.py -Scanned: 2016-10-19 08:46:29.880161 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Call' object has no attribute 'value' - -bwainstock/ba-flask-rest_api -https://github.com/bwainstock/ba-flask-rest_api -Entry file: ba-flask-rest_api/routes.py -Scanned: 2016-10-19 08:46:33.803990 -No vulnerabilities found. - - -ElizHarbinger/Simple-Flask-Application -https://github.com/ElizHarbinger/Simple-Flask-Application -Entry file: Simple-Flask-Application/app.py -Scanned: 2016-10-19 08:46:35.060911 -No vulnerabilities found. - - -ZhaoYun17/flask-hello-world -https://github.com/ZhaoYun17/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:46:35.613398 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ddingman/CommitSwimmingFlask -https://github.com/ddingman/CommitSwimmingFlask -Entry file: CommitSwimmingFlask/app/__init__.py -Scanned: 2016-10-19 08:46:37.903281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aslamup/Blog-app-using-flask -https://github.com/aslamup/Blog-app-using-flask -Entry file: Blog-app-using-flask/flaskr.py -Scanned: 2016-10-19 08:46:39.162048 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erm/twisted-flask-irc -https://github.com/erm/twisted-flask-irc -Entry file: twisted-flask-irc/app.py -Scanned: 2016-10-19 08:46:40.445750 -No vulnerabilities found. - - -agsgs2007/learn-flasky -https://github.com/agsgs2007/learn-flasky -Entry file: learn-flasky/hello.py -Scanned: 2016-10-19 08:46:41.843870 -No vulnerabilities found. - - -deanvlue/pBitsket -https://github.com/deanvlue/pBitsket -Entry file: None -Scanned: 2016-10-19 08:46:43.086822 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/deanvlue/pBitsket. - -peggykh/JungleMonks -https://github.com/peggykh/JungleMonks -Entry file: JungleMonks/app/__init__.py -Scanned: 2016-10-19 08:46:47.995279 -No vulnerabilities found. - - -Nonse/monkeys -https://github.com/Nonse/monkeys -Entry file: monkeys/monkeygod/__init__.py -Scanned: 2016-10-19 08:46:49.567774 -No vulnerabilities found. - - -bobcolner/material-girl -https://github.com/bobcolner/material-girl -Entry file: material-girl/app/__init__.py -Scanned: 2016-10-19 08:46:52.765472 -Vulnerability 1: -File: material-girl/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: material-girl/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: material-girl/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: material-girl/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: material-girl/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: material-girl/app/api_1_0/users.py - > Line 20: prev = None - File: material-girl/app/api_1_0/users.py - > Line 23: next = None -File: material-girl/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: material-girl/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: material-girl/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: material-girl/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: material-girl/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: material-girl/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: material-girl/app/api_1_0/users.py - > Line 42: prev = None - File: material-girl/app/api_1_0/users.py - > Line 45: next = None -File: material-girl/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: material-girl/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: material-girl/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: material-girl/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: material-girl/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: material-girl/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: material-girl/app/api_1_0/posts.py - > Line 16: prev = None - File: material-girl/app/api_1_0/posts.py - > Line 19: next = None -File: material-girl/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: material-girl/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: material-girl/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: material-girl/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: material-girl/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: material-girl/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: material-girl/app/api_1_0/comments.py - > Line 15: prev = None - File: material-girl/app/api_1_0/comments.py - > Line 18: next = None -File: material-girl/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: material-girl/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: material-girl/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: material-girl/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: material-girl/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: material-girl/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: material-girl/app/api_1_0/comments.py - > Line 43: prev = None - File: material-girl/app/api_1_0/comments.py - > Line 46: next = None -File: material-girl/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -levy5674/hello_world -https://github.com/levy5674/hello_world -Entry file: hello_world/hello.py -Scanned: 2016-10-19 08:46:54.067144 -No vulnerabilities found. - - -pokeyjoey/microblog -https://github.com/pokeyjoey/microblog -Entry file: None -Scanned: 2016-10-19 08:46:54.587634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Eddolan/TwilioControlViaSMS -https://github.com/Eddolan/TwilioControlViaSMS -Entry file: TwilioControlViaSMS/flaskApp.py -Scanned: 2016-10-19 08:46:56.963581 -No vulnerabilities found. - - -gabrielfalcao/tumbler -https://github.com/gabrielfalcao/tumbler -Entry file: None -Scanned: 2016-10-19 08:46:58.430431 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gabrielfalcao/tumbler. - -sivajipr/student_details_app_in_flask -https://github.com/sivajipr/student_details_app_in_flask -Entry file: None -Scanned: 2016-10-19 08:46:59.792225 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sivajipr/student_details_app_in_flask. - -reneighbor/pwitter -https://github.com/reneighbor/pwitter -Entry file: pwitter/create_user.py -Scanned: 2016-10-19 08:47:01.371976 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aachik/pyheart -https://github.com/aachik/pyheart -Entry file: pyheart/pyheart.py -Scanned: 2016-10-19 08:47:03.969403 -No vulnerabilities found. - - -stensoootla/spotpix_api -https://github.com/stensoootla/spotpix_api -Entry file: spotpix_api/api/__init__.py -Scanned: 2016-10-19 08:47:04.496004 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aquarion/retort -https://github.com/aquarion/retort -Entry file: retort/webapp.py -Scanned: 2016-10-19 08:47:06.188978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haharazer/short-url -https://github.com/haharazer/short-url -Entry file: short-url/app/__init__.py -Scanned: 2016-10-19 08:47:18.069772 -No vulnerabilities found. - - -stdgy/foosball_backend -https://github.com/stdgy/foosball_backend -Entry file: foosball_backend/debug.py -Scanned: 2016-10-19 08:47:19.645676 -No vulnerabilities found. - - -den-is/rp2-ch9-flasktaskr -https://github.com/den-is/rp2-ch9-flasktaskr -Entry file: rp2-ch9-flasktaskr/app/views.py -Scanned: 2016-10-19 08:47:21.273668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cr5315/paste -https://github.com/cr5315/paste -Entry file: paste/app/__init__.py -Scanned: 2016-10-19 08:47:22.667239 -No vulnerabilities found. - - -Raghavan-Lab/BioDashboard -https://github.com/Raghavan-Lab/BioDashboard -Entry file: BioDashboard/app/__init__.py -Scanned: 2016-10-19 08:47:24.047472 -No vulnerabilities found. - - -houxiaohou/juzi-blog -https://github.com/houxiaohou/juzi-blog -Entry file: juzi-blog/__init__.py -Scanned: 2016-10-19 08:47:25.294926 -No vulnerabilities found. - - -oyld/microblog -https://github.com/oyld/microblog -Entry file: None -Scanned: 2016-10-19 08:47:25.803653 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tcxurun/sheep -https://github.com/tcxurun/sheep -Entry file: sheep/app/__init__.py -Scanned: 2016-10-19 08:47:28.780175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -droptak/droptak-backend -https://github.com/droptak/droptak-backend -Entry file: None -Scanned: 2016-10-19 08:47:43.929445 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yeaske/layer_7_check -https://github.com/yeaske/layer_7_check -Entry file: layer_7_check/checker.py -Scanned: 2016-10-19 08:47:45.289050 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuyazi/microblog-learning -https://github.com/wuyazi/microblog-learning -Entry file: microblog-learning/app/__init__.py -Scanned: 2016-10-19 08:47:46.515179 -No vulnerabilities found. - - -bigfang/blog -https://github.com/bigfang/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 08:47:47.011516 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masnun/api.howtocode.com.bd -https://github.com/masnun/api.howtocode.com.bd -Entry file: None -Scanned: 2016-10-19 08:47:49.151389 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/masnun/api.howtocode.com.bd. - -guilhermebruzzi/matchesjson -https://github.com/guilhermebruzzi/matchesjson -Entry file: None -Scanned: 2016-10-19 08:47:50.484876 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/guilhermebruzzi/matchesjson. - -bhoopeshkumaar/Meal_Customize -https://github.com/bhoopeshkumaar/Meal_Customize -Entry file: Meal_Customize/mealSystem.py -Scanned: 2016-10-19 08:48:00.267651 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kdjomeda/iwallet-konohashop-python -https://github.com/kdjomeda/iwallet-konohashop-python -Entry file: iwallet-konohashop-python/iwallet-konohashop-python.py -Scanned: 2016-10-19 08:48:01.492654 -No vulnerabilities found. - - -thefinn93/Seattle-911-to-RSS -https://github.com/thefinn93/Seattle-911-to-RSS -Entry file: Seattle-911-to-RSS/app.py -Scanned: 2016-10-19 08:48:02.867780 -No vulnerabilities found. - - -saposki/saposki7 -https://github.com/saposki/saposki7 -Entry file: saposki7/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 08:48:07.558501 -No vulnerabilities found. - - -realpython/flask-skeleton -https://github.com/realpython/flask-skeleton -Entry file: None -Scanned: 2016-10-19 08:48:09.267242 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/realpython/flask-skeleton. - -nicolaiarocci/flask-sentinel -https://github.com/nicolaiarocci/flask-sentinel -Entry file: flask-sentinel/flask_sentinel/tests/base.py -Scanned: 2016-10-19 08:48:11.029000 -No vulnerabilities found. - - -pyexcel/Flask-Excel -https://github.com/pyexcel/Flask-Excel -Entry file: Flask-Excel/examples/tiny_example.py -Scanned: 2016-10-19 08:48:12.594074 -No vulnerabilities found. - - -fromzeroedu/flask_blog -https://github.com/fromzeroedu/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 08:48:13.091623 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jwhelland/flask-socketio-celery-example -https://github.com/jwhelland/flask-socketio-celery-example -Entry file: flask-socketio-celery-example/app.py -Scanned: 2016-10-19 08:48:14.404121 -No vulnerabilities found. - - -NoGameNoLife00/mybolg -https://github.com/NoGameNoLife00/mybolg -Entry file: mybolg/blogapp.py -Scanned: 2016-10-19 08:48:19.212527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Abubakarmani/flask -https://github.com/Abubakarmani/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:48:20.501655 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -surfermac14/flask -https://github.com/surfermac14/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:48:21.488965 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kylewm/flask-micropub -https://github.com/kylewm/flask-micropub -Entry file: flask-micropub/example.py -Scanned: 2016-10-19 08:48:23.924753 -No vulnerabilities found. - - -uclaacm/teach_reddit_clone_flask -https://github.com/uclaacm/teach_reddit_clone_flask -Entry file: teach_reddit_clone_flask/app/__init__.py -Scanned: 2016-10-19 08:48:25.279458 -No vulnerabilities found. - - -jay3dec/PythonFlaskMySQLApp_Part2 -https://github.com/jay3dec/PythonFlaskMySQLApp_Part2 -Entry file: PythonFlaskMySQLApp_Part2/app.py -Scanned: 2016-10-19 08:48:26.863524 -No vulnerabilities found. - - -heynemann/generator-flask-app -https://github.com/heynemann/generator-flask-app -Entry file: generator-flask-app/app/templates/_app.py -Scanned: 2016-10-19 08:48:28.325295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benoittgt/flask_omdb_api -https://github.com/benoittgt/flask_omdb_api -Entry file: flask_omdb_api/flask_demo.py -Scanned: 2016-10-19 08:48:29.692236 -No vulnerabilities found. - - -qddegtya/Weixin-Flask -https://github.com/qddegtya/Weixin-Flask -Entry file: Weixin-Flask/WeixinFlask.py -Scanned: 2016-10-19 08:48:32.034714 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sejoharp/flasktimetracker -https://github.com/sejoharp/flasktimetracker -Entry file: flasktimetracker/flasktimetracker.py -Scanned: 2016-10-19 08:48:34.408683 -No vulnerabilities found. - - -xkjcf/flaskrexample -https://github.com/xkjcf/flaskrexample -Entry file: flaskrexample/flaskr.py -Scanned: 2016-10-19 08:48:35.677185 -No vulnerabilities found. - - -BenHagan/flasktaskr -https://github.com/BenHagan/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:48:36.198832 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ivantikhonov/flasktest -https://github.com/ivantikhonov/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 08:48:46.828435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FenceAtMHacks/flaskbackend -https://github.com/FenceAtMHacks/flaskbackend -Entry file: flaskbackend/fence-api/flask/backend.py -Scanned: 2016-10-19 08:48:49.774349 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbackend/fence-api/flask/lib/python2.7/genericpath.py - -greedo/flask-oauth2-devices -https://github.com/greedo/flask-oauth2-devices -Entry file: flask-oauth2-devices/myservice.py -Scanned: 2016-10-19 08:48:51.327235 -Vulnerability 1: -File: flask-oauth2-devices/myservice.py - > User input at line 59, trigger word "get(": - user_code = load_auth_code(request.values.get('user_code')) -Reassigned in: - File: flask-oauth2-devices/myservice.py - > Line 69: ret_MAYBE_FUNCTION_NAME = resp - File: flask-oauth2-devices/myservice.py - > Line 62: ret_MAYBE_FUNCTION_NAME = render_template('app_auth_error.html') -File: flask-oauth2-devices/myservice.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/oauth/authorization/accept?user_code= ' + str(user_code.code)) - -Vulnerability 2: -File: flask-oauth2-devices/devices/provider/devices.py - > User input at line 100, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH2_DEVICES_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauth2-devices/devices/provider/devices.py - > Line 104: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauth2-devices/devices/provider/devices.py - > Line 99: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauth2-devices/devices/provider/devices.py - > reaches line 103, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 3: -File: flask-oauth2-devices/example/myservice.py - > User input at line 59, trigger word "get(": - user_code = load_auth_code(request.values.get('user_code')) -Reassigned in: - File: flask-oauth2-devices/example/myservice.py - > Line 69: ret_MAYBE_FUNCTION_NAME = resp - File: flask-oauth2-devices/example/myservice.py - > Line 62: ret_MAYBE_FUNCTION_NAME = render_template('app_auth_error.html') -File: flask-oauth2-devices/example/myservice.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/oauth/authorization/accept?user_code= ' + str(user_code.code)) - - - -sfmailand/flaskTutorial -https://github.com/sfmailand/flaskTutorial -Entry file: flaskTutorial/flaskr.py -Scanned: 2016-10-19 08:48:54.746553 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskTutorial/venv/lib/python2.7/genericpath.py - -robintw/FlaskTemperature -https://github.com/robintw/FlaskTemperature -Entry file: FlaskTemperature/app.py -Scanned: 2016-10-19 08:48:56.026670 -No vulnerabilities found. - - -Wannuc/flaskExample -https://github.com/Wannuc/flaskExample -Entry file: flaskExample/app.py -Scanned: 2016-10-19 08:48:57.287624 -No vulnerabilities found. - - -SRITANU/FlaskApp -https://github.com/SRITANU/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 08:49:02.367556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PyClass/FlaskBasic -https://github.com/PyClass/FlaskBasic -Entry file: FlaskBasic/main.py -Scanned: 2016-10-19 08:49:04.661374 -No vulnerabilities found. - - -pvarsh/flask_tutorial -https://github.com/pvarsh/flask_tutorial -Entry file: flask_tutorial/hello_app/__init__.py -Scanned: 2016-10-19 08:49:06.031088 -No vulnerabilities found. - - -guowei1003/Flask-blog -https://github.com/guowei1003/Flask-blog -Entry file: Flask-blog/Flask-blog.py -Scanned: 2016-10-19 08:49:10.314497 -No vulnerabilities found. - - -padraic-padraic/AnxietyFlask -https://github.com/padraic-padraic/AnxietyFlask -Entry file: AnxietyFlask/AnxietyFlask/__init__.py -Scanned: 2016-10-19 08:49:13.376510 -No vulnerabilities found. - - -adsabs/flask-discoverer -https://github.com/adsabs/flask-discoverer -Entry file: None -Scanned: 2016-10-19 08:49:14.759605 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adsabs/flask-discoverer. - -hunt3ri/flask-scaffold -https://github.com/hunt3ri/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-19 08:49:16.728504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sorlovsky/Flask-Site -https://github.com/sorlovsky/Flask-Site -Entry file: Flask-Site/app.py -Scanned: 2016-10-19 08:49:23.725438 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Site/venv/lib/python2.7/genericpath.py - -rhlobo/flask-bigtempo -https://github.com/rhlobo/flask-bigtempo -Entry file: flask-bigtempo/example_store.py -Scanned: 2016-10-19 08:49:25.169918 -No vulnerabilities found. - - -Nalian79/flask_hello -https://github.com/Nalian79/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 08:49:26.468378 -No vulnerabilities found. - - -BOBTommy/flask_blog -https://github.com/BOBTommy/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 08:49:27.475816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pjwarner/flask-template -https://github.com/pjwarner/flask-template -Entry file: flask-template/yourapp/__init__.py -Scanned: 2016-10-19 08:49:29.108512 -No vulnerabilities found. - - -BenHagan/flask-blog -https://github.com/BenHagan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:49:29.684694 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bolenton/flask_test -https://github.com/bolenton/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 08:49:30.242646 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dblackdblack/flask_test -https://github.com/dblackdblack/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 08:49:30.787674 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ZhaoYun17/flask-blog -https://github.com/ZhaoYun17/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:49:31.351683 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nicolewhite/flask-celery -https://github.com/nicolewhite/flask-celery -Entry file: flask-celery/webapp/__init__.py -Scanned: 2016-10-19 08:49:34.596512 -No vulnerabilities found. - - -benasse/canal-flask -https://github.com/benasse/canal-flask -Entry file: canal-flask/canal-flask.py -Scanned: 2016-10-19 08:49:36.990968 -No vulnerabilities found. - - -zhangshy/hello -https://github.com/zhangshy/hello -Entry file: hello/blog/__init__.py -Scanned: 2016-10-19 08:49:38.351097 -No vulnerabilities found. - - -lmcdonough/SR-FlaskApi -https://github.com/lmcdonough/SR-FlaskApi -Entry file: SR-FlaskApi/app.py -Scanned: 2016-10-19 08:49:47.882529 -No vulnerabilities found. - - -tom-price/flaskQuickStart -https://github.com/tom-price/flaskQuickStart -Entry file: flaskQuickStart/app.py -Scanned: 2016-10-19 08:49:49.295933 -No vulnerabilities found. - - -liupeng330/PythonFlaskTest -https://github.com/liupeng330/PythonFlaskTest -Entry file: PythonFlaskTest/FlaskTest/src/app.py -Scanned: 2016-10-19 08:49:53.307564 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harshk360/python-flask-test -https://github.com/harshk360/python-flask-test -Entry file: python-flask-test/app.py -Scanned: 2016-10-19 08:49:57.591748 -No vulnerabilities found. - - -cikenerd/flask_login_demo -https://github.com/cikenerd/flask_login_demo -Entry file: flask_login_demo/flask_login_demo/app.py -Scanned: 2016-10-19 08:49:59.192878 -No vulnerabilities found. - - -jimjshields/flask_mega_tutorial -https://github.com/jimjshields/flask_mega_tutorial -Entry file: flask_mega_tutorial/app/__init__.py -Scanned: 2016-10-19 08:50:00.723419 -No vulnerabilities found. - - -aaabhilash97/url-shortner-in-flask -https://github.com/aaabhilash97/url-shortner-in-flask -Entry file: url-shortner-in-flask/app/__init__.py -Scanned: 2016-10-19 08:50:04.988619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akhripko/flask_python_examples -https://github.com/akhripko/flask_python_examples -Entry file: flask_python_examples/web/__init__.py -Scanned: 2016-10-19 08:50:06.281648 -No vulnerabilities found. - - -phrase/flask-demo-application -https://github.com/phrase/flask-demo-application -Entry file: flask-demo-application/flaskr.py -Scanned: 2016-10-19 08:50:07.654549 -No vulnerabilities found. - - -bearzk/radio-in-flask -https://github.com/bearzk/radio-in-flask -Entry file: radio-in-flask/radio.py -Scanned: 2016-10-19 08:50:12.309766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DiegoPires/test-flask-py3 -https://github.com/DiegoPires/test-flask-py3 -Entry file: test-flask-py3/app/__init__.py -Scanned: 2016-10-19 08:50:13.843282 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -prashannth/openid-login-flask -https://github.com/prashannth/openid-login-flask -Entry file: openid-login-flask/app/__init__.py -Scanned: 2016-10-19 08:50:16.151488 -No vulnerabilities found. - - -hordecore/RandomTestingFlask -https://github.com/hordecore/RandomTestingFlask -Entry file: RandomTestingFlask/main.py -Scanned: 2016-10-19 08:50:17.387729 -No vulnerabilities found. - - -shibinp/blog_using_flask -https://github.com/shibinp/blog_using_flask -Entry file: None -Scanned: 2016-10-19 08:50:18.756408 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shibinp/blog_using_flask. - -PMcCarth/flask-hellow-world -https://github.com/PMcCarth/flask-hellow-world -Entry file: flask-hellow-world/app.py -Scanned: 2016-10-19 08:50:20.000953 -No vulnerabilities found. - - -BenHagan/flask-hello-world -https://github.com/BenHagan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:50:20.567883 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -fxa90id/up-flask-forum -https://github.com/fxa90id/up-flask-forum -Entry file: up-flask-forum/app.py -Scanned: 2016-10-19 08:50:23.980000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TatianaTylosky/first_flask_app -https://github.com/TatianaTylosky/first_flask_app -Entry file: first_flask_app/hello_world.py -Scanned: 2016-10-19 08:50:26.238553 -No vulnerabilities found. - - -deanvlue/pBitsket -https://github.com/deanvlue/pBitsket -Entry file: None -Scanned: 2016-10-19 08:50:26.743242 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/deanvlue/pBitsket. - -SRITANU/flblog -https://github.com/SRITANU/flblog -Entry file: flblog/blog.py -Scanned: 2016-10-19 08:50:29.055795 -No vulnerabilities found. - - -shibinp/Url_shortner_app_using_flask -https://github.com/shibinp/Url_shortner_app_using_flask -Entry file: Url_shortner_app_using_flask/app.py -Scanned: 2016-10-19 08:50:30.572393 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aklaussen/tumblelog -https://github.com/aklaussen/tumblelog -Entry file: tumblelog/flask-tumblelog-master/tumblelog/__init__.py -Scanned: 2016-10-19 08:50:35.338074 -No vulnerabilities found. - - -mperham2/flasktaskr_project_old -https://github.com/mperham2/flasktaskr_project_old -Entry file: None -Scanned: 2016-10-19 08:50:40.356152 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aaabhilash97/Flipkart-Product-Details-Extraction-Flask-Python -https://github.com/aaabhilash97/Flipkart-Product-Details-Extraction-Flask-Python -Entry file: Flipkart-Product-Details-Extraction-Flask-Python/app/__init__.py -Scanned: 2016-10-19 08:50:41.734064 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cgeoffroy/foobar-skeleton-site -https://github.com/cgeoffroy/foobar-skeleton-site -Entry file: None -Scanned: 2016-10-19 08:50:43.111427 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cgeoffroy/foobar-skeleton-site. - -harrismendell/zoteroapp -https://github.com/harrismendell/zoteroapp -Entry file: None -Scanned: 2016-10-19 08:50:46.711962 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -abouzek/lq_api -https://github.com/abouzek/lq_api -Entry file: lq_api/love_quest/app.py -Scanned: 2016-10-19 08:50:48.127696 -No vulnerabilities found. - - -salilpa/knowlarity-hack -https://github.com/salilpa/knowlarity-hack -Entry file: knowlarity-hack/main.py -Scanned: 2016-10-19 08:50:49.738089 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chriswood/kiteeatingtree -https://github.com/chriswood/kiteeatingtree -Entry file: None -Scanned: 2016-10-19 08:50:52.153850 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chriswood/kiteeatingtree. - -svenXY/hostdb -https://github.com/svenXY/hostdb -Entry file: hostdb/app/__init__.py -Scanned: 2016-10-19 08:50:53.704648 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -rye761/fDict -https://github.com/rye761/fDict -Entry file: fDict/fdict.py -Scanned: 2016-10-19 08:50:55.049516 -No vulnerabilities found. - - -vbalien/CutUrl -https://github.com/vbalien/CutUrl -Entry file: CutUrl/cuturl/__init__.py -Scanned: 2016-10-19 08:50:56.629730 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -cr5315/paste -https://github.com/cr5315/paste -Entry file: paste/app/__init__.py -Scanned: 2016-10-19 08:50:57.947995 -No vulnerabilities found. - - -Raghavan-Lab/BioDashboard -https://github.com/Raghavan-Lab/BioDashboard -Entry file: BioDashboard/app/__init__.py -Scanned: 2016-10-19 08:50:59.279957 -No vulnerabilities found. - - -betezed/TweetApi -https://github.com/betezed/TweetApi -Entry file: TweetApi/microTweet.py -Scanned: 2016-10-19 08:51:00.684690 -No vulnerabilities found. - - -lukasheinrich/projects.lukasheinrich.com -https://github.com/lukasheinrich/projects.lukasheinrich.com -Entry file: None -Scanned: 2016-10-19 08:51:01.917513 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lukasheinrich/projects.lukasheinrich.com. - -kmorrell27/viewcounter -https://github.com/kmorrell27/viewcounter -Entry file: viewcounter/app.py -Scanned: 2016-10-19 08:51:06.123798 -No vulnerabilities found. - - -Duke-GCB/WebDiskUsage -https://github.com/Duke-GCB/WebDiskUsage -Entry file: WebDiskUsage/usage.py -Scanned: 2016-10-19 08:51:07.407517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurogama/raspyxbee -https://github.com/laurogama/raspyxbee -Entry file: raspyxbee/rest.py -Scanned: 2016-10-19 08:51:08.748539 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charlieRode/web_blog -https://github.com/charlieRode/web_blog -Entry file: web_blog/web_blog.py -Scanned: 2016-10-19 08:51:13.070848 -No vulnerabilities found. - - -redbridge/rb-apps-admin -https://github.com/redbridge/rb-apps-admin -Entry file: rb-apps-admin/rb_apps_admin/__init__.py -Scanned: 2016-10-19 08:51:18.777507 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -angelospanag/gaia-alert-backend-python -https://github.com/angelospanag/gaia-alert-backend-python -Entry file: gaia-alert-backend-python/hello.py -Scanned: 2016-10-19 08:51:20.127004 -No vulnerabilities found. - - -mfwarren/NagServer -https://github.com/mfwarren/NagServer -Entry file: NagServer/app/__init__.py -Scanned: 2016-10-19 08:51:21.713284 -No vulnerabilities found. - - -kkauffman/CourseWatcher -https://github.com/kkauffman/CourseWatcher -Entry file: CourseWatcher/app/__init__.py -Scanned: 2016-10-19 08:51:23.414171 -No vulnerabilities found. - - -iv597/battery-test-api -https://github.com/iv597/battery-test-api -Entry file: battery-test-api/main.py -Scanned: 2016-10-19 08:51:24.717927 -No vulnerabilities found. - - -bearcott/pennapps -https://github.com/bearcott/pennapps -Entry file: pennapps/app/__init__.py -Scanned: 2016-10-19 08:51:26.403072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nicolaiarocci/flask-sentinel -https://github.com/nicolaiarocci/flask-sentinel -Entry file: flask-sentinel/flask_sentinel/tests/base.py -Scanned: 2016-10-19 08:51:29.575941 -No vulnerabilities found. - - -miguelgrinberg/flask-live-coding-webcast -https://github.com/miguelgrinberg/flask-live-coding-webcast -Entry file: flask-live-coding-webcast/shopping.py -Scanned: 2016-10-19 08:51:32.840610 -No vulnerabilities found. - - -pedrovanzella/Flask-DODDNS -https://github.com/pedrovanzella/Flask-DODDNS -Entry file: Flask-DODDNS/doddns.py -Scanned: 2016-10-19 08:51:38.747409 -No vulnerabilities found. - - -barrachri/flask_docker -https://github.com/barrachri/flask_docker -Entry file: flask_docker/app.py -Scanned: 2016-10-19 08:51:43.373372 -No vulnerabilities found. - - -jay3dec/PythonFlaskMySQLApp_Part3 -https://github.com/jay3dec/PythonFlaskMySQLApp_Part3 -Entry file: PythonFlaskMySQLApp_Part3/app.py -Scanned: 2016-10-19 08:51:44.921196 -No vulnerabilities found. - - -Flask-Framework-Cookbook/Chapter-1 -https://github.com/Flask-Framework-Cookbook/Chapter-1 -Entry file: Chapter-1/my_app/__init__.py -Scanned: 2016-10-19 08:51:46.175461 -No vulnerabilities found. - - -ynakayama/flask-hello -https://github.com/ynakayama/flask-hello -Entry file: flask-hello/app.py -Scanned: 2016-10-19 08:51:49.864043 -No vulnerabilities found. - - -itgsodbojo/flask_rest_db -https://github.com/itgsodbojo/flask_rest_db -Entry file: flask_rest_db/IFK/__init__.py -Scanned: 2016-10-19 08:51:51.254212 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -heynemann/generator-flask-app -https://github.com/heynemann/generator-flask-app -Entry file: generator-flask-app/app/templates/_app.py -Scanned: 2016-10-19 08:51:51.751192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benoittgt/flask_omdb_api -https://github.com/benoittgt/flask_omdb_api -Entry file: flask_omdb_api/flask_demo.py -Scanned: 2016-10-19 08:51:54.999556 -No vulnerabilities found. - - -mattgathu/flask-celery -https://github.com/mattgathu/flask-celery -Entry file: flask-celery/flascelery/__init__.py -Scanned: 2016-10-19 08:51:56.232225 -Vulnerability 1: -File: flask-celery/flascelery/views.py - > User input at line 24, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 25: session['email'] = email -File: flask-celery/flascelery/views.py - > reaches line 34, trigger word "flash(": - flash('Sending email to {}'.format(email)) - -Vulnerability 2: -File: flask-celery/flascelery/views.py - > User input at line 24, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 25: session['email'] = email -File: flask-celery/flascelery/views.py - > reaches line 38, trigger word "flash(": - flash('An email will be sent to {} in one minute'.format(email)) - -Vulnerability 3: -File: flask-celery/flascelery/views.py - > User input at line 68, trigger word "get(": - response = 'state''current''total''status'task.statetask.info.get('current', 0)task.info.get('total', 1)task.info.get('status', '') -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 61: response = 'state''current''total''status'task.state01'Pending..' - File: flask-celery/flascelery/views.py - > Line 78: response = 'state''current''total''status'task.state11str(task.info) -File: flask-celery/flascelery/views.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -phodal-archive/project-x -https://github.com/phodal-archive/project-x -Entry file: None -Scanned: 2016-10-19 08:51:57.933226 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/phodal-archive/project-x. - -elferherrera/flasky -https://github.com/elferherrera/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 08:51:58.448943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pee-dee/flasktaskr -https://github.com/pee-dee/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:51:59.956887 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -herambh129/flaskapp -https://github.com/herambh129/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 08:52:01.463874 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcreekp/flasktaskr -https://github.com/dcreekp/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:52:02.965433 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kwikiel/flasker -https://github.com/kwikiel/flasker -Entry file: flasker/app/__init__.py -Scanned: 2016-10-19 08:52:07.319654 -No vulnerabilities found. - - -keyan/flaskcounter -https://github.com/keyan/flaskcounter -Entry file: flaskcounter/app.py -Scanned: 2016-10-19 08:52:17.865841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ZhaoYun17/flasktaskr -https://github.com/ZhaoYun17/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:52:18.856580 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Charlotteis/flasky -https://github.com/Charlotteis/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 08:52:19.354334 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VenDream/flaskr -https://github.com/VenDream/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:52:19.847504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kingname/unknown_way -https://github.com/kingname/unknown_way -Entry file: unknown_way/simpleReader.py -Scanned: 2016-10-19 08:52:21.682873 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -giblets2570/FlaskApp -https://github.com/giblets2570/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 08:52:22.256455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wannuc/flaskExample -https://github.com/Wannuc/flaskExample -Entry file: flaskExample/app.py -Scanned: 2016-10-19 08:52:24.531952 -No vulnerabilities found. - - -robintw/FlaskTemperature -https://github.com/robintw/FlaskTemperature -Entry file: FlaskTemperature/app.py -Scanned: 2016-10-19 08:52:25.776778 -No vulnerabilities found. - - -PyClass/FlaskBasic -https://github.com/PyClass/FlaskBasic -Entry file: FlaskBasic/main.py -Scanned: 2016-10-19 08:52:27.037280 -No vulnerabilities found. - - -ejdigby/FlaskTest -https://github.com/ejdigby/FlaskTest -Entry file: None -Scanned: 2016-10-19 08:52:29.315779 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ejdigby/FlaskTest. - -Joe312341/FlaskTest -https://github.com/Joe312341/FlaskTest -Entry file: None -Scanned: 2016-10-19 08:52:29.819224 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Joe312341/FlaskTest. - -Flask-Framework-Cookbook/Chapter-3 -https://github.com/Flask-Framework-Cookbook/Chapter-3 -Entry file: Chapter-3/my_app/__init__.py -Scanned: 2016-10-19 08:52:32.580347 -No vulnerabilities found. - - -at4260/Flask-Madlibs -https://github.com/at4260/Flask-Madlibs -Entry file: Flask-Madlibs/madlibs.py -Scanned: 2016-10-19 08:52:34.087942 -No vulnerabilities found. - - -dcreekp/flask-blog -https://github.com/dcreekp/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:52:34.640062 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Charlotteis/guestbook_flask -https://github.com/Charlotteis/guestbook_flask -Entry file: guestbook_flask/app.py -Scanned: 2016-10-19 08:52:40.077996 -No vulnerabilities found. - - -guowei1003/Flask-blog -https://github.com/guowei1003/Flask-blog -Entry file: Flask-blog/Flask-blog.py -Scanned: 2016-10-19 08:52:44.394084 -No vulnerabilities found. - - -byarges/flask-api -https://github.com/byarges/flask-api -Entry file: flask-api/App.py -Scanned: 2016-10-19 08:52:45.675855 -No vulnerabilities found. - - -pvarsh/flask_tutorial -https://github.com/pvarsh/flask_tutorial -Entry file: flask_tutorial/hello_app/__init__.py -Scanned: 2016-10-19 08:52:47.929507 -No vulnerabilities found. - - -id774/flask-bootstrap -https://github.com/id774/flask-bootstrap -Entry file: flask-bootstrap/app.py -Scanned: 2016-10-19 08:52:51.670939 -No vulnerabilities found. - - -dcotelessa/alpha_flask -https://github.com/dcotelessa/alpha_flask -Entry file: alpha_flask/app.py -Scanned: 2016-10-19 08:52:57.515571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevmo/flask-patterns -https://github.com/kevmo/flask-patterns -Entry file: None -Scanned: 2016-10-19 08:52:58.825810 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kevmo/flask-patterns. - -sorlovsky/Flask-Site -https://github.com/sorlovsky/Flask-Site -Entry file: Flask-Site/app.py -Scanned: 2016-10-19 08:52:59.399908 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Site/venv/lib/python2.7/genericpath.py - -scottdunstan/flask-play -https://github.com/scottdunstan/flask-play -Entry file: flask-play/playtime.py -Scanned: 2016-10-19 08:53:01.171999 -No vulnerabilities found. - - -GUC-SE-2015/redditFlask -https://github.com/GUC-SE-2015/redditFlask -Entry file: redditFlask/application/__init__.py -Scanned: 2016-10-19 08:53:02.625419 -No vulnerabilities found. - - -Nalian79/flask_hello -https://github.com/Nalian79/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 08:53:05.341337 -No vulnerabilities found. - - -pee-dee/flask-blog -https://github.com/pee-dee/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:53:07.916201 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -marvin0815/flask-test -https://github.com/marvin0815/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 08:53:19.937876 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -bradomski/flask_exercises -https://github.com/bradomski/flask_exercises -Entry file: flask_exercises/hello.py -Scanned: 2016-10-19 08:53:23.164976 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_exercises/venv/lib/python2.7/genericpath.py - -keyan/flask-sandbox -https://github.com/keyan/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 08:53:25.973582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -candywow/learn_flask -https://github.com/candywow/learn_flask -Entry file: learn_flask/flasky/hello.py -Scanned: 2016-10-19 08:53:28.274996 -No vulnerabilities found. - - -btigercl/Hackbright_Flask -https://github.com/btigercl/Hackbright_Flask -Entry file: Hackbright_Flask/madlibs.py -Scanned: 2016-10-19 08:53:29.715257 -No vulnerabilities found. - - -a-tsioh/Taigi-IM-flask -https://github.com/a-tsioh/Taigi-IM-flask -Entry file: Taigi-IM-flask/server.py -Scanned: 2016-10-19 08:53:32.373661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prashannth/digi-mart-flask -https://github.com/prashannth/digi-mart-flask -Entry file: digi-mart-flask/app/__init__.py -Scanned: 2016-10-19 08:53:34.296756 -No vulnerabilities found. - - -blakedallen/flask-api-starter -https://github.com/blakedallen/flask-api-starter -Entry file: flask-api-starter/app.py -Scanned: 2016-10-19 08:53:35.583070 -No vulnerabilities found. - - -florije1988/flask_restful_custom_type -https://github.com/florije1988/flask_restful_custom_type -Entry file: flask_restful_custom_type/flask_restful_custom_type.py -Scanned: 2016-10-19 08:53:36.899960 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcolussi/flask-hello-world -https://github.com/dcolussi/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:53:37.462997 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -fincham/flask-minecraft-auth -https://github.com/fincham/flask-minecraft-auth -Entry file: flask-minecraft-auth/hotplate_minecraft.py -Scanned: 2016-10-19 08:53:39.766892 -No vulnerabilities found. - - -nsnitesh7/Rest-Api-Flask -https://github.com/nsnitesh7/Rest-Api-Flask -Entry file: Rest-Api-Flask/app.py -Scanned: 2016-10-19 08:53:41.113028 -Vulnerability 1: -File: Rest-Api-Flask/app.py - > User input at line 56, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: Rest-Api-Flask/app.py - > reaches line 63, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -bearzk/radio-in-flask -https://github.com/bearzk/radio-in-flask -Entry file: radio-in-flask/radio.py -Scanned: 2016-10-19 08:53:44.622153 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LiQing8839/flask-mysql-exemplo -https://github.com/LiQing8839/flask-mysql-exemplo -Entry file: flask-mysql-exemplo/app.py -Scanned: 2016-10-19 08:53:46.912698 -Vulnerability 1: -File: flask-mysql-exemplo/app.py - > User input at line 18, trigger word "form[": - nome = request.form['nome'] -File: flask-mysql-exemplo/app.py - > reaches line 23, trigger word "execute(": - cur.execute('INSERT INTO presidentes(nome, cpf, nascimento) VALUES('%s', '%s', '%s');' % (nome, cpf, nascimento)) - -Vulnerability 2: -File: flask-mysql-exemplo/app.py - > User input at line 19, trigger word "form[": - cpf = request.form['cpf'] -File: flask-mysql-exemplo/app.py - > reaches line 23, trigger word "execute(": - cur.execute('INSERT INTO presidentes(nome, cpf, nascimento) VALUES('%s', '%s', '%s');' % (nome, cpf, nascimento)) - -Vulnerability 3: -File: flask-mysql-exemplo/app.py - > User input at line 20, trigger word "form[": - nascimento = request.form['nascimento'] -File: flask-mysql-exemplo/app.py - > reaches line 23, trigger word "execute(": - cur.execute('INSERT INTO presidentes(nome, cpf, nascimento) VALUES('%s', '%s', '%s');' % (nome, cpf, nascimento)) - - - -gabygandrade/HB_Madlibs-Flask -https://github.com/gabygandrade/HB_Madlibs-Flask -Entry file: HB_Madlibs-Flask/madlibs.py -Scanned: 2016-10-19 08:53:49.334173 -No vulnerabilities found. - - -kyle8285/flask_hello_world -https://github.com/kyle8285/flask_hello_world -Entry file: flask_hello_world/run.py -Scanned: 2016-10-19 08:53:52.668574 -No vulnerabilities found. - - -amolborcar/flask-web-development -https://github.com/amolborcar/flask-web-development -Entry file: flask-web-development/chapter-3/hello.py -Scanned: 2016-10-19 08:53:57.073003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prashannth/openid-login-flask -https://github.com/prashannth/openid-login-flask -Entry file: openid-login-flask/app/__init__.py -Scanned: 2016-10-19 08:53:58.458418 -No vulnerabilities found. - - -jhorwit2/docker_flask_example -https://github.com/jhorwit2/docker_flask_example -Entry file: docker_flask_example/app.py -Scanned: 2016-10-19 08:54:00.809051 -No vulnerabilities found. - - -dkdewitt/flask_angular_skeleton -https://github.com/dkdewitt/flask_angular_skeleton -Entry file: flask_angular_skeleton/app/__init__.py -Scanned: 2016-10-19 08:54:02.541079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hansmaryil/Radialpoint-Hackathon-Flask-App -https://github.com/hansmaryil/Radialpoint-Hackathon-Flask-App -Entry file: Radialpoint-Hackathon-Flask-App/app.py -Scanned: 2016-10-19 08:54:03.964727 -No vulnerabilities found. - - -gorlovn/flask-hello-world -https://github.com/gorlovn/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:54:04.531048 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -harrisonfeng/flask-restful-api -https://github.com/harrisonfeng/flask-restful-api -Entry file: flask-restful-api/restful/api.py -Scanned: 2016-10-19 08:54:05.844002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tesb/Flask-MicroBlog -https://github.com/tesb/Flask-MicroBlog -Entry file: Flask-MicroBlog/flask/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 08:54:11.483198 -No vulnerabilities found. - - -stanleyhlng/flask_shopping_list -https://github.com/stanleyhlng/flask_shopping_list -Entry file: flask_shopping_list/shopping.py -Scanned: 2016-10-19 08:54:14.853370 -No vulnerabilities found. - - -dternyak/flask-real-python -https://github.com/dternyak/flask-real-python -Entry file: flask-real-python/blog.py -Scanned: 2016-10-19 08:54:17.799834 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-real-python/venv/lib/python2.7/genericpath.py - -dpmehta02/demo_flask_api -https://github.com/dpmehta02/demo_flask_api -Entry file: demo_flask_api/app/utils/__init__.py -Scanned: 2016-10-19 08:54:19.215500 -No vulnerabilities found. - - -dimaosa/Flask_QA_app -https://github.com/dimaosa/Flask_QA_app -Entry file: Flask_QA_app/project/__init__.py -Scanned: 2016-10-19 08:54:24.798320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YanareKu/Flask_MadLibs -https://github.com/YanareKu/Flask_MadLibs -Entry file: Flask_MadLibs/madlibs.py -Scanned: 2016-10-19 08:54:26.334317 -No vulnerabilities found. - - -dtarasiuk/flask-docker-seed -https://github.com/dtarasiuk/flask-docker-seed -Entry file: flask-docker-seed/app.py -Scanned: 2016-10-19 08:54:27.670274 -No vulnerabilities found. - - -ArunRamachandran/Student_App_using-Flask -https://github.com/ArunRamachandran/Student_App_using-Flask -Entry file: Student_App_using-Flask/app/__init__.py -Scanned: 2016-10-19 08:54:29.574269 -Vulnerability 1: -File: Student_App_using-Flask/app/views.py - > User input at line 82, trigger word "form[": - sname = request.form['sname'] -File: Student_App_using-Flask/app/views.py - > reaches line 94, trigger word "execute(": - cur.execute('insert into student(sname, mark) values(?,?)', [sname, mark]) - -Vulnerability 2: -File: Student_App_using-Flask/app/views.py - > User input at line 83, trigger word "form[": - mark = request.form['mark'] -File: Student_App_using-Flask/app/views.py - > reaches line 94, trigger word "execute(": - cur.execute('insert into student(sname, mark) values(?,?)', [sname, mark]) - - - -imnikkiz/Madlibs -https://github.com/imnikkiz/Madlibs -Entry file: Madlibs/madlibs.py -Scanned: 2016-10-19 08:54:31.760313 -No vulnerabilities found. - - -itstriz/microblog -https://github.com/itstriz/microblog -Entry file: None -Scanned: 2016-10-19 08:54:32.303090 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Flask-Framework-Cookbook/Chapter-6 -https://github.com/Flask-Framework-Cookbook/Chapter-6 -Entry file: Chapter-6/my_app/__init__.py -Scanned: 2016-10-19 08:54:33.844697 -Vulnerability 1: -File: Chapter-6/my_app/auth/views.py - > User input at line 141, trigger word "get(": - me = facebook.get('/me') -Reassigned in: - File: Chapter-6/my_app/auth/views.py - > Line 145: user = User(me.data['email'], '') - File: Chapter-6/my_app/auth/views.py - > Line 143: user = User.query.filter_by(username=me.data['email']).first() -File: Chapter-6/my_app/auth/views.py - > reaches line 150, trigger word "flash(": - flash('Logged in as id=%s name=%s' % (me.data['id'], me.data['name']), 'success') - -Vulnerability 2: -File: Chapter-6/my_app/auth/views.py - > User input at line 177, trigger word "get(": - userinfo = requests.get(GOOGLE_OAUTH2_USERINFO_URL,params=dict(access_token=resp['access_token'])).json() -Reassigned in: - File: Chapter-6/my_app/auth/views.py - > Line 183: user = User(userinfo['email'], '') - File: Chapter-6/my_app/auth/views.py - > Line 181: user = User.query.filter_by(username=userinfo['email']).first() -File: Chapter-6/my_app/auth/views.py - > reaches line 188, trigger word "flash(": - flash('Logged in as id=%s name=%s' % (userinfo['id'], userinfo['name']), 'success') - - - -hacksu/hackernews-clone -https://github.com/hacksu/hackernews-clone -Entry file: hackernews-clone/app/__init__.py -Scanned: 2016-10-19 08:54:35.257524 -No vulnerabilities found. - - -Zmeylol/lib -https://github.com/Zmeylol/lib -Entry file: lib/init.py -Scanned: 2016-10-19 08:54:37.016624 -No vulnerabilities found. - - -Shumakriss/thermostat_web -https://github.com/Shumakriss/thermostat_web -Entry file: thermostat_web/thermostat_web/__init__.py -Scanned: 2016-10-19 08:54:38.447940 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -lekanovic/pecunia -https://github.com/lekanovic/pecunia -Entry file: pecunia/app/__init__.py -Scanned: 2016-10-19 08:54:41.062001 -No vulnerabilities found. - - -Flask-Framework-Cookbook/Chapter-8 -https://github.com/Flask-Framework-Cookbook/Chapter-8 -Entry file: Chapter-8/my_app/__init__.py -Scanned: 2016-10-19 08:54:42.642394 -No vulnerabilities found. - - -induhub/mod_wsgi-flask-apache-centos7- -https://github.com/induhub/mod_wsgi-flask-apache-centos7- -Entry file: mod_wsgi-flask-apache-centos7-/flask_dev/hello.py -Scanned: 2016-10-19 08:54:43.951310 -No vulnerabilities found. - - -aaabhilash97/Flipkart-Product-Details-Extraction-Flask-Python -https://github.com/aaabhilash97/Flipkart-Product-Details-Extraction-Flask-Python -Entry file: Flipkart-Product-Details-Extraction-Flask-Python/app/__init__.py -Scanned: 2016-10-19 08:54:44.453779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rajatguptarg/calc -https://github.com/rajatguptarg/calc -Entry file: calc/calc.py -Scanned: 2016-10-19 08:54:45.844282 -No vulnerabilities found. - - -wsankey/wsankey -https://github.com/wsankey/wsankey -Entry file: wsankey/sitebuilder.py -Scanned: 2016-10-19 08:54:51.140408 -No vulnerabilities found. - - -bolenton/flog -https://github.com/bolenton/flog -Entry file: flog/blog.py -Scanned: 2016-10-19 08:54:52.456519 -No vulnerabilities found. - - -CognitionGuidedSurgery/storage -https://github.com/CognitionGuidedSurgery/storage -Entry file: storage/storage/provider.py -Scanned: 2016-10-19 08:54:53.869063 -No vulnerabilities found. - - -leocelis/simpletornadoflask -https://github.com/leocelis/simpletornadoflask -Entry file: simpletornadoflask/simple.py -Scanned: 2016-10-19 08:54:55.166643 -No vulnerabilities found. - - -kimshangyup/brandnew -https://github.com/kimshangyup/brandnew -Entry file: None -Scanned: 2016-10-19 08:54:56.446479 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kimshangyup/brandnew. - -oss-practice/flask -https://github.com/oss-practice/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:55:02.056713 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -vertical-knowledge/flask-ripozo -https://github.com/vertical-knowledge/flask-ripozo -Entry file: flask-ripozo/examples/flask_example.py -Scanned: 2016-10-19 08:55:06.581190 -No vulnerabilities found. - - -lobeck/flask-bower -https://github.com/lobeck/flask-bower -Entry file: flask-bower/tests/test_build_url.py -Scanned: 2016-10-19 08:55:08.209858 -No vulnerabilities found. - - -csuzhangxc/Flask-QiniuStorage -https://github.com/csuzhangxc/Flask-QiniuStorage -Entry file: Flask-QiniuStorage/tests.py -Scanned: 2016-10-19 08:55:17.605272 -No vulnerabilities found. - - -tonyseek/flask-docker -https://github.com/tonyseek/flask-docker -Entry file: flask-docker/tests/test_simple.py -Scanned: 2016-10-19 08:55:21.159730 -No vulnerabilities found. - - -AminHuang/flask -https://github.com/AminHuang/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:55:24.114874 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Yellow-Rice/Flask -https://github.com/Yellow-Rice/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 08:55:26.680697 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jgoney/flask-messenger -https://github.com/jgoney/flask-messenger -Entry file: flask-messenger/messenger.py -Scanned: 2016-10-19 08:55:29.119723 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rsj217/flask--scaffold -https://github.com/rsj217/flask--scaffold -Entry file: flask--scaffold/redis-queue/main.py -Scanned: 2016-10-19 08:55:30.962779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shalabhaggarwal/Flask-LDAP-Auth-Demo -https://github.com/shalabhaggarwal/Flask-LDAP-Auth-Demo -Entry file: Flask-LDAP-Auth-Demo/my_app/__init__.py -Scanned: 2016-10-19 08:55:32.836358 -No vulnerabilities found. - - -csuzhangxc/Flask-BCS -https://github.com/csuzhangxc/Flask-BCS -Entry file: Flask-BCS/tests.py -Scanned: 2016-10-19 08:55:34.750056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -urvineet/flask-ang -https://github.com/urvineet/flask-ang -Entry file: flask-ang/angular-flask-sqlalchemy/server.py -Scanned: 2016-10-19 08:55:40.124231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -netplusdesign/home-performance-flask-api -https://github.com/netplusdesign/home-performance-flask-api -Entry file: home-performance-flask-api/chartingperformance/__init__.py -Scanned: 2016-10-19 08:55:41.741584 -No vulnerabilities found. - - -mattgathu/flask-celery -https://github.com/mattgathu/flask-celery -Entry file: flask-celery/flascelery/__init__.py -Scanned: 2016-10-19 08:55:44.188946 -Vulnerability 1: -File: flask-celery/flascelery/views.py - > User input at line 24, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 25: session['email'] = email -File: flask-celery/flascelery/views.py - > reaches line 34, trigger word "flash(": - flash('Sending email to {}'.format(email)) - -Vulnerability 2: -File: flask-celery/flascelery/views.py - > User input at line 24, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 25: session['email'] = email -File: flask-celery/flascelery/views.py - > reaches line 38, trigger word "flash(": - flash('An email will be sent to {} in one minute'.format(email)) - -Vulnerability 3: -File: flask-celery/flascelery/views.py - > User input at line 68, trigger word "get(": - response = 'state''current''total''status'task.statetask.info.get('current', 0)task.info.get('total', 1)task.info.get('status', '') -Reassigned in: - File: flask-celery/flascelery/views.py - > Line 61: response = 'state''current''total''status'task.state01'Pending..' - File: flask-celery/flascelery/views.py - > Line 78: response = 'state''current''total''status'task.state11str(task.info) -File: flask-celery/flascelery/views.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -herambh129/flaskapp -https://github.com/herambh129/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 08:55:44.700485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanchen1991/flaskr -https://github.com/seanchen1991/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:55:46.210986 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zackszhu/Flaskr -https://github.com/zackszhu/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 08:55:46.734746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bhamhawker/flasktaskr -https://github.com/bhamhawker/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:55:52.755485 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ForrestSutton/flasky -https://github.com/ForrestSutton/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 08:55:54.259661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -info3180/contrived_calculator -https://github.com/info3180/contrived_calculator -Entry file: contrived_calculator/app.py -Scanned: 2016-10-19 08:55:56.794795 -No vulnerabilities found. - - -sjs7007/flaskRandom -https://github.com/sjs7007/flaskRandom -Entry file: flaskRandom/megaTut/app/__init__.py -Scanned: 2016-10-19 08:55:58.215601 -No vulnerabilities found. - - -mandrive/FlaskTest -https://github.com/mandrive/FlaskTest -Entry file: None -Scanned: 2016-10-19 08:56:00.739921 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mandrive/FlaskTest. - -Andygmb/flask_blog -https://github.com/Andygmb/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 08:56:02.272996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyejayvee/flask_jinja -https://github.com/eyejayvee/flask_jinja -Entry file: flask_jinja/run.py -Scanned: 2016-10-19 08:56:07.553694 -No vulnerabilities found. - - -bhamhawker/flask-blog -https://github.com/bhamhawker/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:56:09.116855 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -at4260/Flask-Madlibs -https://github.com/at4260/Flask-Madlibs -Entry file: Flask-Madlibs/madlibs.py -Scanned: 2016-10-19 08:56:11.647972 -No vulnerabilities found. - - -heyimdan/slack_flask -https://github.com/heyimdan/slack_flask -Entry file: slack_flask/app.py -Scanned: 2016-10-19 08:56:19.540315 -No vulnerabilities found. - - -joshcoen/flask-example -https://github.com/joshcoen/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 08:56:28.079270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bnlong/flask-docker -https://github.com/bnlong/flask-docker -Entry file: flask-docker/app/app.py -Scanned: 2016-10-19 08:56:30.511594 -No vulnerabilities found. - - -anthonysea/flask-blog -https://github.com/anthonysea/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:56:31.093684 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ch4in/flask_code -https://github.com/ch4in/flask_code -Entry file: flask_code/flaskr/flaskr.py -Scanned: 2016-10-19 08:56:33.416140 -No vulnerabilities found. - - -sasaki-d/test_flask -https://github.com/sasaki-d/test_flask -Entry file: test_flask/app/__init__.py -Scanned: 2016-10-19 08:56:36.345552 -No vulnerabilities found. - - -runningwendybird/flask_madlibs -https://github.com/runningwendybird/flask_madlibs -Entry file: flask_madlibs/madlibs.py -Scanned: 2016-10-19 08:56:38.874031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taygrave/hb_flask -https://github.com/taygrave/hb_flask -Entry file: hb_flask/madlibs.py -Scanned: 2016-10-19 08:56:40.389919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dstroppa/flask-blog -https://github.com/dstroppa/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:56:40.943451 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Isendir/flask_app -https://github.com/Isendir/flask_app -Entry file: None -Scanned: 2016-10-19 08:56:42.504551 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Isendir/flask_app. - -btigercl/Hackbright_Flask -https://github.com/btigercl/Hackbright_Flask -Entry file: Hackbright_Flask/madlibs.py -Scanned: 2016-10-19 08:56:45.960176 -No vulnerabilities found. - - -larissaleite/flask_todo -https://github.com/larissaleite/flask_todo -Entry file: None -Scanned: 2016-10-19 08:56:48.448301 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -herambh129/flask-bio -https://github.com/herambh129/flask-bio -Entry file: flask-bio/bio.py -Scanned: 2016-10-19 08:56:49.747072 -No vulnerabilities found. - - -zplizzi/flask-play -https://github.com/zplizzi/flask-play -Entry file: flask-play/flask/app/__init__.py -Scanned: 2016-10-19 08:56:52.076096 -No vulnerabilities found. - - -holdenweb/flask_wf -https://github.com/holdenweb/flask_wf -Entry file: flask_wf/htdocs/main/__init__.py -Scanned: 2016-10-19 08:56:54.695357 -No vulnerabilities found. - - -Railag/firrael-backend -https://github.com/Railag/firrael-backend -Entry file: firrael-backend/first.py -Scanned: 2016-10-19 08:56:55.996346 -No vulnerabilities found. - - -jasondarcy01/MFIYZC_FlaskApp -https://github.com/jasondarcy01/MFIYZC_FlaskApp -Entry file: MFIYZC_FlaskApp/app.py -Scanned: 2016-10-19 08:56:57.935973 -No vulnerabilities found. - - -zackszhu/FlaskMegaTut -https://github.com/zackszhu/FlaskMegaTut -Entry file: FlaskMegaTut/app/__init__.py -Scanned: 2016-10-19 08:57:02.875174 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DJO3/flask3_intro -https://github.com/DJO3/flask3_intro -Entry file: flask3_intro/shopping.py -Scanned: 2016-10-19 08:57:04.174075 -No vulnerabilities found. - - -Laukess/FlaskTaskr_Part_4 -https://github.com/Laukess/FlaskTaskr_Part_4 -Entry file: FlaskTaskr_Part_4/app/view.py -Scanned: 2016-10-19 08:57:06.591876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joalisson/flask-bcrypt-2 -https://github.com/joalisson/flask-bcrypt-2 -Entry file: flask-bcrypt-2/bcrypt-final/app.py -Scanned: 2016-10-19 08:57:07.872333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -a-tsioh/Taigi-IM-flask -https://github.com/a-tsioh/Taigi-IM-flask -Entry file: Taigi-IM-flask/server.py -Scanned: 2016-10-19 08:57:08.377757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ArunRamachandran/Blog_App_Using-Flask -https://github.com/ArunRamachandran/Blog_App_Using-Flask -Entry file: None -Scanned: 2016-10-19 08:57:15.986634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gabygandrade/HB_Madlibs-Flask -https://github.com/gabygandrade/HB_Madlibs-Flask -Entry file: HB_Madlibs-Flask/madlibs.py -Scanned: 2016-10-19 08:57:17.480579 -No vulnerabilities found. - - -kb0rg/hb_flask_madlibs -https://github.com/kb0rg/hb_flask_madlibs -Entry file: hb_flask_madlibs/madlibs.py -Scanned: 2016-10-19 08:57:18.997963 -No vulnerabilities found. - - -czotti/yCombinatorFlaskApi -https://github.com/czotti/yCombinatorFlaskApi -Entry file: yCombinatorFlaskApi/yCombRest.py -Scanned: 2016-10-19 08:57:21.334980 -No vulnerabilities found. - - -mrbenji/thinkful-flask-jinja-example -https://github.com/mrbenji/thinkful-flask-jinja-example -Entry file: thinkful-flask-jinja-example/run.py -Scanned: 2016-10-19 08:57:24.638923 -No vulnerabilities found. - - -nathan-lapinski/Flask-REST-API -https://github.com/nathan-lapinski/Flask-REST-API -Entry file: None -Scanned: 2016-10-19 08:57:27.938355 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nathan-lapinski/Flask-REST-API. - -txhuin/SQLPythonFlask-Webapp -https://github.com/txhuin/SQLPythonFlask-Webapp -Entry file: SQLPythonFlask-Webapp/webapp.py -Scanned: 2016-10-19 08:57:30.530369 -No vulnerabilities found. - - -PuZheng/generator-flask-skeleton -https://github.com/PuZheng/generator-flask-skeleton -Entry file: None -Scanned: 2016-10-19 08:57:32.594066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/PuZheng/generator-flask-skeleton. - -kandito/flask-starter-project -https://github.com/kandito/flask-starter-project -Entry file: flask-starter-project/app.py -Scanned: 2016-10-19 08:57:33.919130 -No vulnerabilities found. - - -garfunkel/flask-babel-example -https://github.com/garfunkel/flask-babel-example -Entry file: flask-babel-example/app/__init__.py -Scanned: 2016-10-19 08:57:35.380869 -No vulnerabilities found. - - -gnyoung19/flask_mortgage_calculator -https://github.com/gnyoung19/flask_mortgage_calculator -Entry file: None -Scanned: 2016-10-19 08:57:40.219876 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bhamhawker/flask-hello-world -https://github.com/bhamhawker/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 08:57:40.793880 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -hansmaryil/Radialpoint-Hackathon-Flask-App -https://github.com/hansmaryil/Radialpoint-Hackathon-Flask-App -Entry file: Radialpoint-Hackathon-Flask-App/app.py -Scanned: 2016-10-19 08:57:42.222877 -No vulnerabilities found. - - -mattboston/flask-security-test -https://github.com/mattboston/flask-security-test -Entry file: flask-security-test/dashboard/__init__.py -Scanned: 2016-10-19 08:57:43.557588 -No vulnerabilities found. - - -geekpradd/PyDictionary-Flask-API -https://github.com/geekpradd/PyDictionary-Flask-API -Entry file: None -Scanned: 2016-10-19 08:57:44.947552 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/geekpradd/PyDictionary-Flask-API. - -Dotnaught/flask_hello_world -https://github.com/Dotnaught/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-19 08:57:46.275445 -No vulnerabilities found. - - -zatosource/zato-flask-integration -https://github.com/zatosource/zato-flask-integration -Entry file: zato-flask-integration/sampleapp/customer.py -Scanned: 2016-10-19 08:57:47.558237 -No vulnerabilities found. - - -matt-gaspar/Flask-MegaTutorial -https://github.com/matt-gaspar/Flask-MegaTutorial -Entry file: Flask-MegaTutorial/app/__init__.py -Scanned: 2016-10-19 08:57:48.987718 -No vulnerabilities found. - - -dimaosa/Flask_QA_app -https://github.com/dimaosa/Flask_QA_app -Entry file: Flask_QA_app/project/__init__.py -Scanned: 2016-10-19 08:57:50.510957 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YanareKu/Flask_MadLibs -https://github.com/YanareKu/Flask_MadLibs -Entry file: Flask_MadLibs/madlibs.py -Scanned: 2016-10-19 08:57:53.038701 -No vulnerabilities found. - - -sambbaron/flask_hello_world -https://github.com/sambbaron/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-19 08:57:55.438087 -No vulnerabilities found. - - -007rahulraman/flask_fb_app -https://github.com/007rahulraman/flask_fb_app -Entry file: flask_fb_app/frankly.py -Scanned: 2016-10-19 08:57:59.442147 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WanHaoGroup/MicroBlog-Flask -https://github.com/WanHaoGroup/MicroBlog-Flask -Entry file: None -Scanned: 2016-10-19 08:58:03.741860 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ArunRamachandran/Student_App_using-Flask -https://github.com/ArunRamachandran/Student_App_using-Flask -Entry file: Student_App_using-Flask/app/__init__.py -Scanned: 2016-10-19 08:58:06.145699 -Vulnerability 1: -File: Student_App_using-Flask/app/views.py - > User input at line 82, trigger word "form[": - sname = request.form['sname'] -File: Student_App_using-Flask/app/views.py - > reaches line 94, trigger word "execute(": - cur.execute('insert into student(sname, mark) values(?,?)', [sname, mark]) - -Vulnerability 2: -File: Student_App_using-Flask/app/views.py - > User input at line 83, trigger word "form[": - mark = request.form['mark'] -File: Student_App_using-Flask/app/views.py - > reaches line 94, trigger word "execute(": - cur.execute('insert into student(sname, mark) values(?,?)', [sname, mark]) - - - -eyejayvee/flask_hello_world -https://github.com/eyejayvee/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-19 08:58:07.384023 -No vulnerabilities found. - - -rohanil/Sample-Flask-App -https://github.com/rohanil/Sample-Flask-App -Entry file: Sample-Flask-App/highchart/app.py -Scanned: 2016-10-19 08:58:09.278350 -No vulnerabilities found. - - -Spanarchie/NeoLink -https://github.com/Spanarchie/NeoLink -Entry file: NeoLink/NeoLink.py -Scanned: 2016-10-19 08:58:10.577445 -No vulnerabilities found. - - -lr-discovery/bgxml -https://github.com/lr-discovery/bgxml -Entry file: bgxml/app/SampleApp.py -Scanned: 2016-10-19 08:58:12.003246 -No vulnerabilities found. - - -psilikon/leadloader -https://github.com/psilikon/leadloader -Entry file: leadloader/leadloader.py -Scanned: 2016-10-19 08:58:23.416738 -No vulnerabilities found. - - -imnikkiz/Madlibs -https://github.com/imnikkiz/Madlibs -Entry file: Madlibs/madlibs.py -Scanned: 2016-10-19 08:58:24.925542 -No vulnerabilities found. - - -QueenJolene/hackbright_madlibs -https://github.com/QueenJolene/hackbright_madlibs -Entry file: hackbright_madlibs/madlibs.py -Scanned: 2016-10-19 08:58:26.351590 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -llucasmendes/blog -https://github.com/llucasmendes/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 08:58:26.854487 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -grepme/CMPUT410Lab04 -https://github.com/grepme/CMPUT410Lab04 -Entry file: CMPUT410Lab04/server.py -Scanned: 2016-10-19 08:58:28.244243 -No vulnerabilities found. - - -hziling/Blog -https://github.com/hziling/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-19 08:58:31.898243 -No vulnerabilities found. - - -oss-practice/flask -https://github.com/oss-practice/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 08:58:35.064631 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -miguelgrinberg/two-factor-auth-flask -https://github.com/miguelgrinberg/two-factor-auth-flask -Entry file: two-factor-auth-flask/app.py -Scanned: 2016-10-19 08:58:36.393166 -No vulnerabilities found. - - -vertical-knowledge/flask-ripozo -https://github.com/vertical-knowledge/flask-ripozo -Entry file: flask-ripozo/examples/flask_example.py -Scanned: 2016-10-19 08:58:38.042367 -No vulnerabilities found. - - -dinp/dinp-demo-python-flask -https://github.com/dinp/dinp-demo-python-flask -Entry file: dinp-demo-python-flask/wsgi.py -Scanned: 2016-10-19 08:58:43.597820 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aws-troutman/magic8ball-flask -https://github.com/aws-troutman/magic8ball-flask -Entry file: magic8ball-flask/magic8ball/magic8ball/__init__.py -Scanned: 2016-10-19 08:58:46.858934 -No vulnerabilities found. - - -Parkayun/initpy -https://github.com/Parkayun/initpy -Entry file: initpy/initpy/templates/flask.py -Scanned: 2016-10-19 08:58:48.460200 -No vulnerabilities found. - - -jidn/flask-resteasy -https://github.com/jidn/flask-resteasy -Entry file: flask-resteasy/flask_resteasy.py -Scanned: 2016-10-19 08:58:50.053078 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -SPRIME01/Flask-Boilerplate -https://github.com/SPRIME01/Flask-Boilerplate -Entry file: Flask-Boilerplate/Application/__init__.py -Scanned: 2016-10-19 08:58:52.926071 -Vulnerability 1: -File: Flask-Boilerplate/Application/views/UploadsView.py - > User input at line 26, trigger word ".data": - filename = main_uploads.save(form.file_upload.data) -File: Flask-Boilerplate/Application/views/UploadsView.py - > reaches line 27, trigger word "flash(": - flash('Uploaded %s' % filename, 'success') - - - -shalabhaggarwal/Flask-LDAP-Auth-Demo -https://github.com/shalabhaggarwal/Flask-LDAP-Auth-Demo -Entry file: Flask-LDAP-Auth-Demo/my_app/__init__.py -Scanned: 2016-10-19 08:58:54.348386 -No vulnerabilities found. - - -BrunoCodeman/flaskafolding -https://github.com/BrunoCodeman/flaskafolding -Entry file: None -Scanned: 2016-10-19 08:58:55.630424 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/BrunoCodeman/flaskafolding. - -csuzhangxc/Flask-BCS -https://github.com/csuzhangxc/Flask-BCS -Entry file: Flask-BCS/tests.py -Scanned: 2016-10-19 08:58:56.172440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cloudwalkio/coreos-confd-nginx-flask -https://github.com/cloudwalkio/coreos-confd-nginx-flask -Entry file: coreos-confd-nginx-flask/app/app.py -Scanned: 2016-10-19 08:58:57.584021 -No vulnerabilities found. - - -jonparrott/App-Engine-Flask-Restful-Example -https://github.com/jonparrott/App-Engine-Flask-Restful-Example -Entry file: App-Engine-Flask-Restful-Example/main.py -Scanned: 2016-10-19 08:58:59.012837 -No vulnerabilities found. - - -mardix/Propel -https://github.com/mardix/Propel -Entry file: Propel/example/app.py -Scanned: 2016-10-19 08:59:02.727003 -No vulnerabilities found. - - -nikhil2kulkarni/Flask-Flasky -https://github.com/nikhil2kulkarni/Flask-Flasky -Entry file: Flask-Flasky/tumblelog/__init__.py -Scanned: 2016-10-19 08:59:13.845994 -No vulnerabilities found. - - -NorfairHistorys/Flaskkit -https://github.com/NorfairHistorys/Flaskkit -Entry file: Flaskkit/flaskkit.py -Scanned: 2016-10-19 08:59:16.313511 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cxplanet/flaskapp -https://github.com/cxplanet/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 08:59:16.816156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanchen1991/flaskr -https://github.com/seanchen1991/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:59:17.311905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k-q-11/flasktaskr -https://github.com/k-q-11/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:59:17.836993 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -limake/flaskr -https://github.com/limake/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:59:18.384253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chiller/flaskdemo -https://github.com/chiller/flaskdemo -Entry file: flaskdemo/userflask.py -Scanned: 2016-10-19 08:59:26.736376 -No vulnerabilities found. - - -n3wtn9/flaskr -https://github.com/n3wtn9/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 08:59:27.262591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -villacelt/flaskapp -https://github.com/villacelt/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 08:59:28.806416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bhamhawker/flasktaskr -https://github.com/bhamhawker/flasktaskr -Entry file: None -Scanned: 2016-10-19 08:59:29.334601 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mattmakai/taskrouter-multi-channel-support-desk -https://github.com/mattmakai/taskrouter-multi-channel-support-desk -Entry file: taskrouter-multi-channel-support-desk/app.py -Scanned: 2016-10-19 08:59:31.178440 -No vulnerabilities found. - - -GCatChris/FlaskTutorial -https://github.com/GCatChris/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 08:59:38.819184 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jcaine04/flasky2 -https://github.com/jcaine04/flasky2 -Entry file: flasky2/hello.py -Scanned: 2016-10-19 08:59:40.285137 -No vulnerabilities found. - - -mandrive/FlaskTest -https://github.com/mandrive/FlaskTest -Entry file: None -Scanned: 2016-10-19 08:59:40.794736 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mandrive/FlaskTest. - -mmahnken/flask_g_example -https://github.com/mmahnken/flask_g_example -Entry file: flask_g_example/g_example.py -Scanned: 2016-10-19 08:59:42.095112 -No vulnerabilities found. - - -geekpradd/Sublime-Flask-Starter -https://github.com/geekpradd/Sublime-Flask-Starter -Entry file: Sublime-Flask-Starter/flask-starter.py -Scanned: 2016-10-19 08:59:43.442963 -No vulnerabilities found. - - -flaskalobet/flask_learn -https://github.com/flaskalobet/flask_learn -Entry file: flask_learn/app/__init__.py -Scanned: 2016-10-19 08:59:44.768251 -No vulnerabilities found. - - -last-ent/flask-rest -https://github.com/last-ent/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-19 08:59:45.286886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -heyimdan/slack_flask -https://github.com/heyimdan/slack_flask -Entry file: slack_flask/app.py -Scanned: 2016-10-19 08:59:50.224808 -No vulnerabilities found. - - -bhamhawker/flask-blog -https://github.com/bhamhawker/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:59:50.784115 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -edwilliams/flask-blog -https://github.com/edwilliams/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:59:52.350468 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rayray1/flask-blog -https://github.com/rayray1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 08:59:58.392659 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Bovril-IT/allianceauth-flask -https://github.com/Bovril-IT/allianceauth-flask -Entry file: allianceauth-flask/app/__init__.py -Scanned: 2016-10-19 09:00:01.456783 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manoelbo/flask_todos -https://github.com/manoelbo/flask_todos -Entry file: flask_todos/run.py -Scanned: 2016-10-19 09:00:05.998820 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_todos/lib/python2.7/genericpath.py - -mjp2220/flask-skeleton -https://github.com/mjp2220/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:00:07.523133 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mjp2220/flask-skeleton. - -pwgraham91/flask_playground -https://github.com/pwgraham91/flask_playground -Entry file: flask_playground/hello_world.py -Scanned: 2016-10-19 09:00:18.082665 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rtuita23/Flask-Jedi -https://github.com/rtuita23/Flask-Jedi -Entry file: Flask-Jedi/hello_world.py -Scanned: 2016-10-19 09:00:19.376994 -No vulnerabilities found. - - -frediana/www-flask -https://github.com/frediana/www-flask -Entry file: www-flask/main.py -Scanned: 2016-10-19 09:00:22.373658 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: www-flask/venv/lib/python2.7/genericpath.py - -aaabhilash97/Flask-Blog -https://github.com/aaabhilash97/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-19 09:00:22.881471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brendanmckenzie/flask-imageserver -https://github.com/brendanmckenzie/flask-imageserver -Entry file: flask-imageserver/main.py -Scanned: 2016-10-19 09:00:24.217458 -No vulnerabilities found. - - -george-silva/speed-flask -https://github.com/george-silva/speed-flask -Entry file: speed-flask/src/flaskr/flaskr.py -Scanned: 2016-10-19 09:00:25.532688 -Vulnerability 1: -File: speed-flask/src/flaskr/flaskr.py - > User input at line 13, trigger word "form(": - QUERY = 'select - osm_id, - access, - "addr:housename", - "addr:housenumber", - admin_level, - highway, - maxspeed, - name, - oneway - from planet_osm_line where ST_DWithin(way, ST_Transform(ST_GeomFromText('POINT(%(x)s %(y)s)', 4326), 900913), %(dist)s) ORDER BY st_distance(way, ST_Transform(ST_GeomFromText('POINT(%(x)s %(y)s)', 4326), 900913));' -File: speed-flask/src/flaskr/flaskr.py - > reaches line 36, trigger word "execute(": - cursor.execute(QUERY, 'x''y''dist'xydist) - - - -droustchev/flask-wordcount -https://github.com/droustchev/flask-wordcount -Entry file: flask-wordcount/app.py -Scanned: 2016-10-19 09:00:27.829326 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdeland/flask-test -https://github.com/mdeland/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:00:28.367356 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -Minras/flask-microblog -https://github.com/Minras/flask-microblog -Entry file: None -Scanned: 2016-10-19 09:00:29.975763 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -belerris/redditFlask -https://github.com/belerris/redditFlask -Entry file: redditFlask/app.py -Scanned: 2016-10-19 09:00:32.116639 -No vulnerabilities found. - - -khanduri/flaskPycharmTest -https://github.com/khanduri/flaskPycharmTest -Entry file: flaskPycharmTest/app/__init__.py -Scanned: 2016-10-19 09:00:41.424427 -No vulnerabilities found. - - -Rscho314/mallampati-rest-flask -https://github.com/Rscho314/mallampati-rest-flask -Entry file: None -Scanned: 2016-10-19 09:00:42.727214 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Rscho314/mallampati-rest-flask. - -joalisson/flask-bcrypt-2 -https://github.com/joalisson/flask-bcrypt-2 -Entry file: flask-bcrypt-2/bcrypt-final/app.py -Scanned: 2016-10-19 09:00:43.280261 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Alkaselzer22/flask-hello-world -https://github.com/Alkaselzer22/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:00:43.855367 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -nezaj/flask-api-skeleton -https://github.com/nezaj/flask-api-skeleton -Entry file: flask-api-skeleton/src/app.py -Scanned: 2016-10-19 09:00:47.760374 -No vulnerabilities found. - - -jimjshields/flask_by_example -https://github.com/jimjshields/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-19 09:00:49.071401 -No vulnerabilities found. - - -datamade/flask_app_template -https://github.com/datamade/flask_app_template -Entry file: flask_app_template/template/__init__.py -Scanned: 2016-10-19 09:00:51.661261 -No vulnerabilities found. - - -ncub8/flask-hello-world -https://github.com/ncub8/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:00:52.223771 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -tcotav/subdir_flask_wsgi -https://github.com/tcotav/subdir_flask_wsgi -Entry file: subdir_flask_wsgi/var_www_dash/dash/__init__.py -Scanned: 2016-10-19 09:00:54.534648 -No vulnerabilities found. - - -rayray1/flask-hello-world -https://github.com/rayray1/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:00:56.144361 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -mdmullendore/Python-Flask-Framework -https://github.com/mdmullendore/Python-Flask-Framework -Entry file: Python-Flask-Framework/routes.py -Scanned: 2016-10-19 09:00:59.938674 -No vulnerabilities found. - - -gnyoung19/flask_mortgage_calculator -https://github.com/gnyoung19/flask_mortgage_calculator -Entry file: None -Scanned: 2016-10-19 09:01:00.453176 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kkzxak47/flask-mega-tutorial -https://github.com/kkzxak47/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 09:01:00.967285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mlfryman/pytn-flask-demo -https://github.com/mlfryman/pytn-flask-demo -Entry file: None -Scanned: 2016-10-19 09:01:05.262513 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mlfryman/pytn-flask-demo. - -blortfish/rasberrypi_gpio-flask -https://github.com/blortfish/rasberrypi_gpio-flask -Entry file: None -Scanned: 2016-10-19 09:01:18.112712 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/blortfish/rasberrypi_gpio-flask. - -rohanil/Sample-Flask-App -https://github.com/rohanil/Sample-Flask-App -Entry file: Sample-Flask-App/highchart/app.py -Scanned: 2016-10-19 09:01:21.008199 -No vulnerabilities found. - - -kks8142/flask_hello_world -https://github.com/kks8142/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-19 09:01:24.802959 -No vulnerabilities found. - - -mperham2/flaskr-bdd -https://github.com/mperham2/flaskr-bdd -Entry file: flaskr-bdd/flaskr.py -Scanned: 2016-10-19 09:01:28.360315 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskr-bdd/env/lib/python2.7/genericpath.py - -lr-discovery/bgxml -https://github.com/lr-discovery/bgxml -Entry file: bgxml/app/SampleApp.py -Scanned: 2016-10-19 09:01:29.758646 -No vulnerabilities found. - - -llucasmendes/blog -https://github.com/llucasmendes/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:01:30.306491 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abinashmeher999/microblog -https://github.com/abinashmeher999/microblog -Entry file: None -Scanned: 2016-10-19 09:01:30.816146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -checor/El-flasker -https://github.com/checor/El-flasker -Entry file: El-flasker/flaskr.py -Scanned: 2016-10-19 09:01:32.924357 -No vulnerabilities found. - - -DeaconDesperado/cookiecutter-flaskext -https://github.com/DeaconDesperado/cookiecutter-flaskext -Entry file: cookiecutter-flaskext/{{cookiecutter.repo_name}}/example/app.py -Scanned: 2016-10-19 09:01:34.585840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cruor99/nettverkkrs -https://github.com/cruor99/nettverkkrs -Entry file: nettverkkrs/appname/__init__.py -Scanned: 2016-10-19 09:01:39.252051 -No vulnerabilities found. - - -DeaconDesperado/cookiecutter-flaskapp -https://github.com/DeaconDesperado/cookiecutter-flaskapp -Entry file: cookiecutter-flaskapp/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/app.py -Scanned: 2016-10-19 09:01:40.911401 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurenceputra/smu-paypal-demo-python-flask -https://github.com/laurenceputra/smu-paypal-demo-python-flask -Entry file: smu-paypal-demo-python-flask/web.py -Scanned: 2016-10-19 09:01:43.331639 -No vulnerabilities found. - - -bergey/irc-query -https://github.com/bergey/irc-query -Entry file: None -Scanned: 2016-10-19 09:03:51.625218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ArunRamachandran/Url_Shortner -https://github.com/ArunRamachandran/Url_Shortner -Entry file: Url_Shortner/app/__init__.py -Scanned: 2016-10-19 09:03:53.019837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -razz0/traffic_disruption_heroku -https://github.com/razz0/traffic_disruption_heroku -Entry file: traffic_disruption_heroku/prediction.py -Scanned: 2016-10-19 09:03:54.404410 -No vulnerabilities found. - - -Dit81/links-saver -https://github.com/Dit81/links-saver -Entry file: links-saver/links_app.py -Scanned: 2016-10-19 09:03:55.738050 -Vulnerability 1: -File: links-saver/links_app.py - > User input at line 71, trigger word "form[": - link = request.form['link'] -File: links-saver/links_app.py - > reaches line 84, trigger word "execute(": - c.execute('INSERT INTO links(link, label, description) VALUES (?, ?, ?)', (link, label, description)) - -Vulnerability 2: -File: links-saver/links_app.py - > User input at line 79, trigger word "form[": - label = request.form['label'] -File: links-saver/links_app.py - > reaches line 84, trigger word "execute(": - c.execute('INSERT INTO links(link, label, description) VALUES (?, ?, ?)', (link, label, description)) - -Vulnerability 3: -File: links-saver/links_app.py - > User input at line 80, trigger word "form[": - description = request.form['description'] -File: links-saver/links_app.py - > reaches line 84, trigger word "execute(": - c.execute('INSERT INTO links(link, label, description) VALUES (?, ?, ?)', (link, label, description)) - -Vulnerability 4: -File: links-saver/links_app.py - > User input at line 118, trigger word "form[": - link = request.form['link'] -File: links-saver/links_app.py - > reaches line 124, trigger word "execute(": - c.execute('UPDATE links SET link = ?, label = ?, description = ? WHERE id = ?', (link, label, description, id)) - -Vulnerability 5: -File: links-saver/links_app.py - > User input at line 119, trigger word "form[": - label = request.form['label'] -File: links-saver/links_app.py - > reaches line 124, trigger word "execute(": - c.execute('UPDATE links SET link = ?, label = ?, description = ? WHERE id = ?', (link, label, description, id)) - -Vulnerability 6: -File: links-saver/links_app.py - > User input at line 120, trigger word "form[": - description = request.form['description'] -File: links-saver/links_app.py - > reaches line 124, trigger word "execute(": - c.execute('UPDATE links SET link = ?, label = ?, description = ? WHERE id = ?', (link, label, description, id)) - - - -gabygandrade/HB_MovieRatingsApp -https://github.com/gabygandrade/HB_MovieRatingsApp -Entry file: HB_MovieRatingsApp/judgement.py -Scanned: 2016-10-19 09:03:58.809877 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aaabhilash97/StudentApp -https://github.com/aaabhilash97/StudentApp -Entry file: None -Scanned: 2016-10-19 09:04:00.170126 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aaabhilash97/StudentApp. - -JuliaDi/GitHub-Search -https://github.com/JuliaDi/GitHub-Search -Entry file: GitHub-Search/app.py -Scanned: 2016-10-19 09:04:01.738268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vicdor/microblog -https://github.com/vicdor/microblog -Entry file: None -Scanned: 2016-10-19 09:04:02.261118 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -admiralobvious/flask-mysqldb -https://github.com/admiralobvious/flask-mysqldb -Entry file: flask-mysqldb/examples/app.py -Scanned: 2016-10-19 09:04:04.926123 -No vulnerabilities found. - - -geogas/scrapy-flask-imdb-python -https://github.com/geogas/scrapy-flask-imdb-python -Entry file: scrapy-flask-imdb-python/flask_imdb/__init__.py -Scanned: 2016-10-19 09:04:06.443381 -No vulnerabilities found. - - -dubu/flask -https://github.com/dubu/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:04:07.849404 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kalyanavasanth/flask -https://github.com/kalyanavasanth/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:04:08.816967 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -dtheodor/flask-sqlalchemy-session -https://github.com/dtheodor/flask-sqlalchemy-session -Entry file: flask-sqlalchemy-session/tests/test_flask_sqlalchemy_session.py -Scanned: 2016-10-19 09:04:10.191572 -No vulnerabilities found. - - -jay3dec/PythonFlaskMySQLApp_Part4 -https://github.com/jay3dec/PythonFlaskMySQLApp_Part4 -Entry file: PythonFlaskMySQLApp_Part4/app.py -Scanned: 2016-10-19 09:04:12.260339 -No vulnerabilities found. - - -cloudwalkio/coreos-confd-nginx-flask -https://github.com/cloudwalkio/coreos-confd-nginx-flask -Entry file: coreos-confd-nginx-flask/app/app.py -Scanned: 2016-10-19 09:04:13.604847 -No vulnerabilities found. - - -yangsiy/flask_base -https://github.com/yangsiy/flask_base -Entry file: flask_base/app/__init__.py -Scanned: 2016-10-19 09:04:14.852408 -No vulnerabilities found. - - -cfpb/flask-eventics -https://github.com/cfpb/flask-eventics -Entry file: flask-eventics/run.py -Scanned: 2016-10-19 09:04:16.526630 -No vulnerabilities found. - - -mivade/flask-sse-demo -https://github.com/mivade/flask-sse-demo -Entry file: flask-sse-demo/sse.py -Scanned: 2016-10-19 09:04:18.201429 -No vulnerabilities found. - - -yinrongping/flaskblog -https://github.com/yinrongping/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:04:18.725957 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -moonorongo/flaskdemo -https://github.com/moonorongo/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:04:19.918868 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pwgraham91/flaskr -https://github.com/pwgraham91/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:04:20.880577 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nbob/flask-multi-session -https://github.com/nbob/flask-multi-session -Entry file: flask-multi-session/example.py -Scanned: 2016-10-19 09:04:22.218176 -No vulnerabilities found. - - -admiralobvious/flask-minitwit-mongodb -https://github.com/admiralobvious/flask-minitwit-mongodb -Entry file: flask-minitwit-mongodb/minitwit.py -Scanned: 2016-10-19 09:04:24.262107 -No vulnerabilities found. - - -Alkaselzer22/flask-blog -https://github.com/Alkaselzer22/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:04:24.789730 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dimitriwalters/flask-app -https://github.com/dimitriwalters/flask-app -Entry file: flask-app/flask_app.py -Scanned: 2016-10-19 09:04:26.006615 -No vulnerabilities found. - - -szabgab/flask-poll -https://github.com/szabgab/flask-poll -Entry file: flask-poll/poll.py -Scanned: 2016-10-19 09:04:27.199429 -No vulnerabilities found. - - -joegillon/allocat_flask -https://github.com/joegillon/allocat_flask -Entry file: allocat_flask/app/__init__.py -Scanned: 2016-10-19 09:04:54.700586 -No vulnerabilities found. - - -lukeaanderso/Flask-Restful -https://github.com/lukeaanderso/Flask-Restful -Entry file: Flask-Restful/server/app.py -Scanned: 2016-10-19 09:04:57.391225 -No vulnerabilities found. - - -hakimu/flask_exception -https://github.com/hakimu/flask_exception -Entry file: flask_exception/test.py -Scanned: 2016-10-19 09:04:58.701651 -No vulnerabilities found. - - -heyericnelson/flask_projects -https://github.com/heyericnelson/flask_projects -Entry file: flask_projects/flask_hello_world/app.py -Scanned: 2016-10-19 09:05:01.903515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SliceOLife/flask_skeleton -https://github.com/SliceOLife/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 09:05:03.883715 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -vasalx/flask-learn -https://github.com/vasalx/flask-learn -Entry file: flask-learn/myhello.py -Scanned: 2016-10-19 09:05:06.717920 -No vulnerabilities found. - - -rayray1/flask-blog -https://github.com/rayray1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:05:07.267199 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -litmisty/flask-skeleton -https://github.com/litmisty/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:05:08.755304 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/litmisty/flask-skeleton. - -lennart96/bluemix-flask -https://github.com/lennart96/bluemix-flask -Entry file: bluemix-flask/server.py -Scanned: 2016-10-19 09:05:09.981391 -No vulnerabilities found. - - -kosamari/flask_heroku -https://github.com/kosamari/flask_heroku -Entry file: flask_heroku/app.py -Scanned: 2016-10-19 09:05:11.175922 -No vulnerabilities found. - - -mhockenbury/todo-flask -https://github.com/mhockenbury/todo-flask -Entry file: None -Scanned: 2016-10-19 09:05:12.586838 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mhockenbury/todo-flask. - -superpig2046/flask-Test -https://github.com/superpig2046/flask-Test -Entry file: flask-Test/flaskr.py -Scanned: 2016-10-19 09:05:13.780151 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eyejayvee/flask_blogful -https://github.com/eyejayvee/flask_blogful -Entry file: flask_blogful/blog/__init__.py -Scanned: 2016-10-19 09:05:14.957001 -No vulnerabilities found. - - -kylebillings/flask-test -https://github.com/kylebillings/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:05:15.485599 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -chilas/flask-learn -https://github.com/chilas/flask-learn -Entry file: flask-learn/intro_to_flask/__init__.py -Scanned: 2016-10-19 09:05:16.818545 -No vulnerabilities found. - - -ahakkal/Backend-flask -https://github.com/ahakkal/Backend-flask -Entry file: None -Scanned: 2016-10-19 09:05:21.829333 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rayray1/flask-tasker -https://github.com/rayray1/flask-tasker -Entry file: flask-tasker/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:05:27.166537 -No vulnerabilities found. - - -jahoy/flask-project- -https://github.com/jahoy/flask-project- -Entry file: None -Scanned: 2016-10-19 09:05:31.006074 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jahoy/flask-project-. - -AlwxSin/flask_newbie -https://github.com/AlwxSin/flask_newbie -Entry file: flask_newbie/app/__init__.py -Scanned: 2016-10-19 09:05:32.768958 -No vulnerabilities found. - - -belerris/redditFlask -https://github.com/belerris/redditFlask -Entry file: redditFlask/app.py -Scanned: 2016-10-19 09:05:34.538112 -No vulnerabilities found. - - -sumnous/backendTest -https://github.com/sumnous/backendTest -Entry file: backendTest/app.py -Scanned: 2016-10-19 09:05:35.748009 -No vulnerabilities found. - - -itestedthis1/FlaskBasicAPI -https://github.com/itestedthis1/FlaskBasicAPI -Entry file: None -Scanned: 2016-10-19 09:05:37.201470 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/itestedthis1/FlaskBasicAPI. - -praetore/FlaskBlogEngine -https://github.com/praetore/FlaskBlogEngine -Entry file: FlaskBlogEngine/app/__init__.py -Scanned: 2016-10-19 09:05:38.670080 -No vulnerabilities found. - - -rayray1/Flask-tasker-03 -https://github.com/rayray1/Flask-tasker-03 -Entry file: Flask-tasker-03/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:05:43.718385 -No vulnerabilities found. - - -inkmonk/mailchimp-oauth-flask -https://github.com/inkmonk/mailchimp-oauth-flask -Entry file: mailchimp-oauth-flask/mchimp.py -Scanned: 2016-10-19 09:05:45.009961 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ClarkMitchell/flask-hello-world -https://github.com/ClarkMitchell/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:05:45.531620 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -jjgalvez/tcga_ticker_flask -https://github.com/jjgalvez/tcga_ticker_flask -Entry file: tcga_ticker_flask/tcga.py -Scanned: 2016-10-19 09:05:55.908440 -No vulnerabilities found. - - -tamland/kodi-flask-demo -https://github.com/tamland/kodi-flask-demo -Entry file: kodi-flask-demo/app.py -Scanned: 2016-10-19 09:06:00.757334 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -nezaj/flask-api-skeleton -https://github.com/nezaj/flask-api-skeleton -Entry file: flask-api-skeleton/src/app.py -Scanned: 2016-10-19 09:06:02.063379 -No vulnerabilities found. - - -rayray1/Flask-tasker-02 -https://github.com/rayray1/Flask-tasker-02 -Entry file: Flask-tasker-02/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:06:06.505835 -No vulnerabilities found. - - -kaiocesar/flask-with-redis -https://github.com/kaiocesar/flask-with-redis -Entry file: flask-with-redis/app.py -Scanned: 2016-10-19 09:06:07.786696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sergelab/flask-buildout-empty -https://github.com/sergelab/flask-buildout-empty -Entry file: flask-buildout-empty/src/sergelab/init.py -Scanned: 2016-10-19 09:06:09.798976 -No vulnerabilities found. - - -whitfiea/bluemix-python-flask-sample -https://github.com/whitfiea/bluemix-python-flask-sample -Entry file: bluemix-python-flask-sample/welcome.py -Scanned: 2016-10-19 09:06:11.016304 -No vulnerabilities found. - - -rayray1/flask-hello-world -https://github.com/rayray1/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:06:11.542523 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -mbuotte/flask_hello_world -https://github.com/mbuotte/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:06:12.733917 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mbuotte/flask_hello_world. - -eyejayvee/flask_blogful_local -https://github.com/eyejayvee/flask_blogful_local -Entry file: flask_blogful_local/blog/__init__.py -Scanned: 2016-10-19 09:06:14.527444 -No vulnerabilities found. - - -equancy/flask-tag-collector -https://github.com/equancy/flask-tag-collector -Entry file: flask-tag-collector/equancy-tag.py -Scanned: 2016-10-19 09:06:15.739079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sb2gh/flask_hello_1 -https://github.com/sb2gh/flask_hello_1 -Entry file: flask_hello_1/fhello.py -Scanned: 2016-10-19 09:06:16.942603 -No vulnerabilities found. - - -blortfish/rasberrypi_gpio-flask -https://github.com/blortfish/rasberrypi_gpio-flask -Entry file: None -Scanned: 2016-10-19 09:06:17.431844 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/blortfish/rasberrypi_gpio-flask. - -galinapok/web_chat_flask -https://github.com/galinapok/web_chat_flask -Entry file: web_chat_flask/flask_app.py -Scanned: 2016-10-19 09:06:19.711545 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mik3cap/private-flask-security -https://github.com/mik3cap/private-flask-security -Entry file: private-flask-security/tests/conftest.py -Scanned: 2016-10-19 09:06:21.704133 -No vulnerabilities found. - - -bastianh/flask_signal_test -https://github.com/bastianh/flask_signal_test -Entry file: flask_signal_test/webapp/app.py -Scanned: 2016-10-19 09:06:24.913582 -No vulnerabilities found. - - -kks8142/flask_hello_world -https://github.com/kks8142/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:06:29.432975 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kks8142/flask_hello_world. - -justinwp/croplands -https://github.com/justinwp/croplands -Entry file: croplands/croplands_api/__init__.py -Scanned: 2016-10-19 09:06:37.728220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -primal100/flask-admin-web_configuration_tool -https://github.com/primal100/flask-admin-web_configuration_tool -Entry file: flask-admin-web_configuration_tool/sampleapp.py -Scanned: 2016-10-19 09:06:39.046800 -No vulnerabilities found. - - -colmoneill/microblog -https://github.com/colmoneill/microblog -Entry file: None -Scanned: 2016-10-19 09:06:40.524227 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Ketouem/collabo-markdown -https://github.com/Ketouem/collabo-markdown -Entry file: collabo-markdown/collabo/__init__.py -Scanned: 2016-10-19 09:06:41.827387 -No vulnerabilities found. - - -mattgaff/urlchopin -https://github.com/mattgaff/urlchopin -Entry file: urlchopin/app/views.py -Scanned: 2016-10-19 09:06:43.130108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Chr12t0pher/FastPoll -https://github.com/Chr12t0pher/FastPoll -Entry file: FastPoll/app/__init__.py -Scanned: 2016-10-19 09:06:46.715576 -No vulnerabilities found. - - -tomhogans/deploytest -https://github.com/tomhogans/deploytest -Entry file: deploytest/app.py -Scanned: 2016-10-19 09:06:47.923368 -No vulnerabilities found. - - -vicdor/microblog -https://github.com/vicdor/microblog -Entry file: None -Scanned: 2016-10-19 09:06:56.491478 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -spurll/crosspost -https://github.com/spurll/crosspost -Entry file: crosspost/crosspost/__init__.py -Scanned: 2016-10-19 09:06:59.032224 -No vulnerabilities found. - - -thedrew82/microblog -https://github.com/thedrew82/microblog -Entry file: None -Scanned: 2016-10-19 09:06:59.561086 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fogonwater/tinyapi -https://github.com/fogonwater/tinyapi -Entry file: tinyapi/app.py -Scanned: 2016-10-19 09:07:05.346333 -No vulnerabilities found. - - -jimjshields/thank_the_academy -https://github.com/jimjshields/thank_the_academy -Entry file: thank_the_academy/app.py -Scanned: 2016-10-19 09:07:10.176083 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harmon25/metaflask -https://github.com/harmon25/metaflask -Entry file: metaflask/metaflask/__init__.py -Scanned: 2016-10-19 09:07:13.595372 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbyta/socially -https://github.com/mbyta/socially -Entry file: socially/app/__init__.py -Scanned: 2016-10-19 09:07:15.292461 -Vulnerability 1: -File: socially/app/main/views.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: socially/app/main/views.py - > Line 33: posts = pagination.items - File: socially/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('main/index.html',form=form, posts=posts, LIKE=PostLike.LIKE, UNLIKE=PostLike.UNLIKE) - File: socially/app/main/views.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: socially/app/main/views.py - > reaches line 26, trigger word "filter(": - pagination = Post.query.join(Follow, Follow.followed_id == Post.author_id).filter(Follow.follower_id == current_user.id).order_by(Post.created_at.desc()).paginate(page,per_page=current_app.config['SOCIALLY_POSTS_PER_PAGE'], error_out=False) - - - -smelnicki/smelnicki.com -https://github.com/smelnicki/smelnicki.com -Entry file: None -Scanned: 2016-10-19 09:07:17.199264 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/smelnicki/smelnicki.com. - -Sadin/ritoPLS -https://github.com/Sadin/ritoPLS -Entry file: None -Scanned: 2016-10-19 09:07:30.455078 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Sadin/ritoPLS. - -aaabhilash97/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python -https://github.com/aaabhilash97/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python -Entry file: None -Scanned: 2016-10-19 09:07:32.765712 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aaabhilash97/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python. - -Retorz/microblog -https://github.com/Retorz/microblog -Entry file: None -Scanned: 2016-10-19 09:07:33.286422 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -patrickbeeson/has-it-ever-been -https://github.com/patrickbeeson/has-it-ever-been -Entry file: has-it-ever-been/tests.py -Scanned: 2016-10-19 09:07:35.151589 -Vulnerability 1: -File: has-it-ever-been/app/views.py - > User input at line 75, trigger word ".data": - location = geocode_location(form.location.data) -Reassigned in: - File: has-it-ever-been/app/views.py - > Line 76: lat = location.latitude - File: has-it-ever-been/app/views.py - > Line 77: lon = location.longitude - File: has-it-ever-been/app/views.py - > Line 79: current_temp = get_current_temp(lat, lon) - File: has-it-ever-been/app/views.py - > Line 80: almanac_data = get_almanac_data(lat, lon) - File: has-it-ever-been/app/views.py - > Line 81: record_high = int(almanac_data['record_high']) - File: has-it-ever-been/app/views.py - > Line 82: record_low = int(almanac_data['record_low']) - File: has-it-ever-been/app/views.py - > Line 83: record_high_year = int(almanac_data['record_high_year']) - File: has-it-ever-been/app/views.py - > Line 84: record_low_year = int(almanac_data['record_low_year']) - File: has-it-ever-been/app/views.py - > Line 85: temp_diff_high_above = current_temp - record_high - File: has-it-ever-been/app/views.py - > Line 86: temp_diff_high_below = record_high - current_temp - File: has-it-ever-been/app/views.py - > Line 87: temp_diff_low_above = current_temp - record_low - File: has-it-ever-been/app/views.py - > Line 88: temp_diff_low_below = record_low - current_temp - File: has-it-ever-been/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, current_temp=current_temp, record_high=record_high, record_low=record_low) - File: has-it-ever-been/app/views.py - > Line 139: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) -File: has-it-ever-been/app/views.py - > reaches line 92, trigger word "flash(": - flash('It's never been this hot! - Currently, it's {} degrees, which is {} degrees above the - record of {}, set in {}.'.format(current_temp, temp_diff_high_above, record_high, record_high_year)) - -Vulnerability 2: -File: has-it-ever-been/app/views.py - > User input at line 75, trigger word ".data": - location = geocode_location(form.location.data) -Reassigned in: - File: has-it-ever-been/app/views.py - > Line 76: lat = location.latitude - File: has-it-ever-been/app/views.py - > Line 77: lon = location.longitude - File: has-it-ever-been/app/views.py - > Line 79: current_temp = get_current_temp(lat, lon) - File: has-it-ever-been/app/views.py - > Line 80: almanac_data = get_almanac_data(lat, lon) - File: has-it-ever-been/app/views.py - > Line 81: record_high = int(almanac_data['record_high']) - File: has-it-ever-been/app/views.py - > Line 82: record_low = int(almanac_data['record_low']) - File: has-it-ever-been/app/views.py - > Line 83: record_high_year = int(almanac_data['record_high_year']) - File: has-it-ever-been/app/views.py - > Line 84: record_low_year = int(almanac_data['record_low_year']) - File: has-it-ever-been/app/views.py - > Line 85: temp_diff_high_above = current_temp - record_high - File: has-it-ever-been/app/views.py - > Line 86: temp_diff_high_below = record_high - current_temp - File: has-it-ever-been/app/views.py - > Line 87: temp_diff_low_above = current_temp - record_low - File: has-it-ever-been/app/views.py - > Line 88: temp_diff_low_below = record_low - current_temp - File: has-it-ever-been/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, current_temp=current_temp, record_high=record_high, record_low=record_low) - File: has-it-ever-been/app/views.py - > Line 139: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) -File: has-it-ever-been/app/views.py - > reaches line 102, trigger word "flash(": - flash('It's been this hot before. - Currently, it's {} degrees, which is {} degrees below the - record of {}, set in {}.'.format(current_temp, temp_diff_high_below, record_high, record_high_year)) - -Vulnerability 3: -File: has-it-ever-been/app/views.py - > User input at line 75, trigger word ".data": - location = geocode_location(form.location.data) -Reassigned in: - File: has-it-ever-been/app/views.py - > Line 76: lat = location.latitude - File: has-it-ever-been/app/views.py - > Line 77: lon = location.longitude - File: has-it-ever-been/app/views.py - > Line 79: current_temp = get_current_temp(lat, lon) - File: has-it-ever-been/app/views.py - > Line 80: almanac_data = get_almanac_data(lat, lon) - File: has-it-ever-been/app/views.py - > Line 81: record_high = int(almanac_data['record_high']) - File: has-it-ever-been/app/views.py - > Line 82: record_low = int(almanac_data['record_low']) - File: has-it-ever-been/app/views.py - > Line 83: record_high_year = int(almanac_data['record_high_year']) - File: has-it-ever-been/app/views.py - > Line 84: record_low_year = int(almanac_data['record_low_year']) - File: has-it-ever-been/app/views.py - > Line 85: temp_diff_high_above = current_temp - record_high - File: has-it-ever-been/app/views.py - > Line 86: temp_diff_high_below = record_high - current_temp - File: has-it-ever-been/app/views.py - > Line 87: temp_diff_low_above = current_temp - record_low - File: has-it-ever-been/app/views.py - > Line 88: temp_diff_low_below = record_low - current_temp - File: has-it-ever-been/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, current_temp=current_temp, record_high=record_high, record_low=record_low) - File: has-it-ever-been/app/views.py - > Line 139: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) -File: has-it-ever-been/app/views.py - > reaches line 113, trigger word "flash(": - flash('It's never been this cold before. - Currently, it's {} degrees, which is {} degrees below the - record of {}, set in {}.'.format(current_temp, temp_diff_low_below, record_low, record_low_year)) - -Vulnerability 4: -File: has-it-ever-been/app/views.py - > User input at line 75, trigger word ".data": - location = geocode_location(form.location.data) -Reassigned in: - File: has-it-ever-been/app/views.py - > Line 76: lat = location.latitude - File: has-it-ever-been/app/views.py - > Line 77: lon = location.longitude - File: has-it-ever-been/app/views.py - > Line 79: current_temp = get_current_temp(lat, lon) - File: has-it-ever-been/app/views.py - > Line 80: almanac_data = get_almanac_data(lat, lon) - File: has-it-ever-been/app/views.py - > Line 81: record_high = int(almanac_data['record_high']) - File: has-it-ever-been/app/views.py - > Line 82: record_low = int(almanac_data['record_low']) - File: has-it-ever-been/app/views.py - > Line 83: record_high_year = int(almanac_data['record_high_year']) - File: has-it-ever-been/app/views.py - > Line 84: record_low_year = int(almanac_data['record_low_year']) - File: has-it-ever-been/app/views.py - > Line 85: temp_diff_high_above = current_temp - record_high - File: has-it-ever-been/app/views.py - > Line 86: temp_diff_high_below = record_high - current_temp - File: has-it-ever-been/app/views.py - > Line 87: temp_diff_low_above = current_temp - record_low - File: has-it-ever-been/app/views.py - > Line 88: temp_diff_low_below = record_low - current_temp - File: has-it-ever-been/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, current_temp=current_temp, record_high=record_high, record_low=record_low) - File: has-it-ever-been/app/views.py - > Line 139: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) -File: has-it-ever-been/app/views.py - > reaches line 123, trigger word "flash(": - flash('It's been this cold before. - Currently, it's {} degrees, which is {} degrees above the - record of {}, set in {}.'.format(current_temp, temp_diff_low_above, record_low, record_low_year)) - - - -rxdt/GitViz -https://github.com/rxdt/GitViz -Entry file: GitViz/app/gitviz_app/routes.py -Scanned: 2016-10-19 09:07:36.954194 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -micahwalter/little-collection-api -https://github.com/micahwalter/little-collection-api -Entry file: little-collection-api/little-api.py -Scanned: 2016-10-19 09:07:38.262885 -No vulnerabilities found. - - -Temzasse/junglebook -https://github.com/Temzasse/junglebook -Entry file: junglebook/app/__init__.py -Scanned: 2016-10-19 09:07:40.710054 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jorgeastorga/microblog -https://github.com/jorgeastorga/microblog -Entry file: None -Scanned: 2016-10-19 09:07:41.195942 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TwilioDevEd/authy2fa-flask -https://github.com/TwilioDevEd/authy2fa-flask -Entry file: authy2fa-flask/twofa/__init__.py -Scanned: 2016-10-19 09:07:45.000779 -No vulnerabilities found. - - -Sapphire64/FlaskReactTodoExample -https://github.com/Sapphire64/FlaskReactTodoExample -Entry file: None -Scanned: 2016-10-19 09:07:46.345180 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Sapphire64/FlaskReactTodoExample. - -Putas/flask -https://github.com/Putas/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:07:47.207721 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -baltazor5000/flask -https://github.com/baltazor5000/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:07:48.580377 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -MaraKovalcik/Flask -https://github.com/MaraKovalcik/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:07:49.159951 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sh4nks/flask-emoji -https://github.com/sh4nks/flask-emoji -Entry file: flask-emoji/tests/__init__.py -Scanned: 2016-10-19 09:07:53.161401 -No vulnerabilities found. - - -cfpb/flask-eventics -https://github.com/cfpb/flask-eventics -Entry file: flask-eventics/run.py -Scanned: 2016-10-19 09:07:55.326115 -No vulnerabilities found. - - -Nesta-CZ/flask-skeleton-db-2 -https://github.com/Nesta-CZ/flask-skeleton-db-2 -Entry file: flask-skeleton-db-2/flask-skeleton-db/src/app.py -Scanned: 2016-10-19 09:07:58.841575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nesta-CZ/flask-skeleton-db -https://github.com/Nesta-CZ/flask-skeleton-db -Entry file: flask-skeleton-db/src/app.py -Scanned: 2016-10-19 09:08:00.330818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harshays/prioritize -https://github.com/harshays/prioritize -Entry file: prioritize/app/__init__.py -Scanned: 2016-10-19 09:08:05.785093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitsuhiko/pyladies-flask -https://github.com/mitsuhiko/pyladies-flask -Entry file: pyladies-flask/pastebin.py -Scanned: 2016-10-19 09:08:07.000153 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -marklandman/flasktutorial -https://github.com/marklandman/flasktutorial -Entry file: None -Scanned: 2016-10-19 09:08:10.497616 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -moonorongo/flaskdemo -https://github.com/moonorongo/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:08:11.986811 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -KKConrad/flaskr -https://github.com/KKConrad/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:08:15.492579 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bmelton/flasktest -https://github.com/bmelton/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 09:08:19.477264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nbob/flask-multi-session -https://github.com/nbob/flask-multi-session -Entry file: flask-multi-session/example.py -Scanned: 2016-10-19 09:08:33.678384 -No vulnerabilities found. - - -kartikluke/cron -https://github.com/kartikluke/cron -Entry file: cron/main.py -Scanned: 2016-10-19 09:08:40.473000 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -BenDoan/fhb -https://github.com/BenDoan/fhb -Entry file: fhb/server.py -Scanned: 2016-10-19 09:08:42.175440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -socialpanic/FlaskAuth -https://github.com/socialpanic/FlaskAuth -Entry file: FlaskAuth/testapp/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 09:08:48.927545 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shafi-codez/FlaskDemo -https://github.com/shafi-codez/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 09:08:50.261332 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abdonrd/appengine-flask-template -https://github.com/abdonrd/appengine-flask-template -Entry file: appengine-flask-template/main.py -Scanned: 2016-10-19 09:08:52.426713 -No vulnerabilities found. - - -colmoneill/flask-tumblelog -https://github.com/colmoneill/flask-tumblelog -Entry file: flask-tumblelog/blog/__init__.py -Scanned: 2016-10-19 09:08:53.756429 -No vulnerabilities found. - - -joegillon/allocat_flask -https://github.com/joegillon/allocat_flask -Entry file: allocat_flask/app/__init__.py -Scanned: 2016-10-19 09:08:55.548496 -No vulnerabilities found. - - -JannyK/flask-dockerized -https://github.com/JannyK/flask-dockerized -Entry file: flask-dockerized/app/app.py -Scanned: 2016-10-19 09:08:56.770405 -No vulnerabilities found. - - -vanceb/flask-weather -https://github.com/vanceb/flask-weather -Entry file: flask-weather/app.py -Scanned: 2016-10-19 09:08:58.173747 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EnkeyMC/Flask-test -https://github.com/EnkeyMC/Flask-test -Entry file: Flask-test/Flask-test.py -Scanned: 2016-10-19 09:08:59.412943 -No vulnerabilities found. - - -ryanallen82/flask-angular -https://github.com/ryanallen82/flask-angular -Entry file: flask-angular/app.py -Scanned: 2016-10-19 09:09:01.084456 -No vulnerabilities found. - - -Shashwat986/Flask-Test -https://github.com/Shashwat986/Flask-Test -Entry file: Flask-Test/app.py -Scanned: 2016-10-19 09:09:02.281481 -No vulnerabilities found. - - -vasalx/flask-learn -https://github.com/vasalx/flask-learn -Entry file: flask-learn/myhello.py -Scanned: 2016-10-19 09:09:03.677506 -No vulnerabilities found. - - -sssingh/flask-blog -https://github.com/sssingh/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:09:04.235053 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bigbi/flask-skeleton -https://github.com/bigbi/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:09:04.734582 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bigbi/flask-skeleton. - -Domca17/flask-skeleton -https://github.com/Domca17/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:09:05.282698 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Domca17/flask-skeleton. - -xyos/words-flask -https://github.com/xyos/words-flask -Entry file: words-flask/app/__init__.py -Scanned: 2016-10-19 09:09:06.525578 -No vulnerabilities found. - - -jgoodacre71/flask_hello -https://github.com/jgoodacre71/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 09:09:07.818600 -No vulnerabilities found. - - -doosik71/helloFlask -https://github.com/doosik71/helloFlask -Entry file: helloFlask/src/chapter2.py -Scanned: 2016-10-19 09:09:09.053757 -No vulnerabilities found. - - -petrgru/flask-skeleton -https://github.com/petrgru/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:09:09.557837 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/petrgru/flask-skeleton. - -internetmosquito/flask-scheduler -https://github.com/internetmosquito/flask-scheduler -Entry file: flask-scheduler/project/__init__.py -Scanned: 2016-10-19 09:09:11.163592 -No vulnerabilities found. - - -flaskalobet/flask_simple -https://github.com/flaskalobet/flask_simple -Entry file: flask_simple/app/__init__.py -Scanned: 2016-10-19 09:09:12.489327 -No vulnerabilities found. - - -Kubko1/flask-skeleton -https://github.com/Kubko1/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:09:13.038300 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Kubko1/flask-skeleton. - -leebird/alchemy-flask -https://github.com/leebird/alchemy-flask -Entry file: None -Scanned: 2016-10-19 09:09:17.428302 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leebird/alchemy-flask. - -internetmosquito/flask-blog -https://github.com/internetmosquito/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:09:18.973723 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -danggrianto/flask-by-example -https://github.com/danggrianto/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:09:22.266526 -No vulnerabilities found. - - -sbarb/PiGPIO-FlaskServer -https://github.com/sbarb/PiGPIO-FlaskServer -Entry file: PiGPIO-FlaskServer/pyserv.py -Scanned: 2016-10-19 09:09:34.697115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -itestedthis1/FlaskBasicAPI -https://github.com/itestedthis1/FlaskBasicAPI -Entry file: None -Scanned: 2016-10-19 09:09:36.181283 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/itestedthis1/FlaskBasicAPI. - -abhiii5459/todo-api-flask -https://github.com/abhiii5459/todo-api-flask -Entry file: None -Scanned: 2016-10-19 09:09:46.019801 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JohnnyJukes/flask_skeleton_databaze -https://github.com/JohnnyJukes/flask_skeleton_databaze -Entry file: flask_skeleton_databaze/src/app.py -Scanned: 2016-10-19 09:09:47.594712 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ErhoSen/TutsPlus_Foundational_Flask -https://github.com/ErhoSen/TutsPlus_Foundational_Flask -Entry file: TutsPlus_Foundational_Flask/generator.py -Scanned: 2016-10-19 09:09:51.908508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rileynat/BlankFlaskApp -https://github.com/rileynat/BlankFlaskApp -Entry file: None -Scanned: 2016-10-19 09:09:54.269278 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jjgalvez/tcga_ticker_flask -https://github.com/jjgalvez/tcga_ticker_flask -Entry file: tcga_ticker_flask/tcga.py -Scanned: 2016-10-19 09:09:55.618739 -No vulnerabilities found. - - -chanshik/Flask-Kazoo-Test -https://github.com/chanshik/Flask-Kazoo-Test -Entry file: Flask-Kazoo-Test/flask_kazoo_test.py -Scanned: 2016-10-19 09:09:57.330896 -No vulnerabilities found. - - -tjmehta/flask-hello-world -https://github.com/tjmehta/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:09:57.864997 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -tamland/kodi-flask-demo -https://github.com/tamland/kodi-flask-demo -Entry file: kodi-flask-demo/app.py -Scanned: 2016-10-19 09:10:00.830545 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -rayray1/Flask-tasker-04 -https://github.com/rayray1/Flask-tasker-04 -Entry file: Flask-tasker-04/flasktaskr_project/project/__init__.py -Scanned: 2016-10-19 09:10:05.921158 -No vulnerabilities found. - - -AshidoKano/flask-skeleton_db -https://github.com/AshidoKano/flask-skeleton_db -Entry file: flask-skeleton_db/src/app.py -Scanned: 2016-10-19 09:10:07.485259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cavens/flask_hello_world -https://github.com/cavens/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:10:07.992460 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cavens/flask_hello_world. - -equancy/flask-tag-collector -https://github.com/equancy/flask-tag-collector -Entry file: flask-tag-collector/equancy-tag.py -Scanned: 2016-10-19 09:10:08.484051 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cavens/flask_hello_world_bis -https://github.com/cavens/flask_hello_world_bis -Entry file: flask_hello_world_bis/hello_world.py -Scanned: 2016-10-19 09:10:12.327555 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_hello_world_bis/env/lib/python2.7/genericpath.py - -aachik/blog_flask_practica -https://github.com/aachik/blog_flask_practica -Entry file: blog_flask_practica/blog.py -Scanned: 2016-10-19 09:10:13.558116 -Vulnerability 1: -File: blog_flask_practica/blog.py - > User input at line 64, trigger word "form[": - titulo = request.form['title'] -File: blog_flask_practica/blog.py - > reaches line 71, trigger word "execute(": - g.db.execute('insert into posts (title, post) values(?,?)', [titulo, post]) - -Vulnerability 2: -File: blog_flask_practica/blog.py - > User input at line 65, trigger word "form[": - post = request.form['post'] -File: blog_flask_practica/blog.py - > reaches line 71, trigger word "execute(": - g.db.execute('insert into posts (title, post) values(?,?)', [titulo, post]) - - - -MichelAquino/LearningFlaskPython -https://github.com/MichelAquino/LearningFlaskPython -Entry file: LearningFlaskPython/app/__init__.py -Scanned: 2016-10-19 09:10:15.577490 -No vulnerabilities found. - - -w8s/flask_api_sample -https://github.com/w8s/flask_api_sample -Entry file: flask_api_sample/flask_api.py -Scanned: 2016-10-19 09:10:16.913270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -moranned/flask_api_example -https://github.com/moranned/flask_api_example -Entry file: flask_api_example/app.py -Scanned: 2016-10-19 09:10:18.129208 -Vulnerability 1: -File: flask_api_example/app.py - > User input at line 42, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask_api_example/app.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -moranned/flask_hello_world -https://github.com/moranned/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:10:19.090423 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/moranned/flask_hello_world. - -Orel741/Flask-Skeleton-Projekt -https://github.com/Orel741/Flask-Skeleton-Projekt -Entry file: Flask-Skeleton-Projekt/flask-skeleton/src/app.py -Scanned: 2016-10-19 09:10:20.999679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bitstein/flask-login-demo -https://github.com/bitstein/flask-login-demo -Entry file: flask-login-demo/app/__init__.py -Scanned: 2016-10-19 09:10:22.209207 -No vulnerabilities found. - - -kleinjoshuaa/microblog -https://github.com/kleinjoshuaa/microblog -Entry file: None -Scanned: 2016-10-19 09:10:23.174601 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rtuita23/blog -https://github.com/rtuita23/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:10:35.688979 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Fajkowsky/LiveChat -https://github.com/Fajkowsky/LiveChat -Entry file: LiveChat/app.py -Scanned: 2016-10-19 09:10:39.489817 -No vulnerabilities found. - - -grant/capture-opencv -https://github.com/grant/capture-opencv -Entry file: capture-opencv/index.py -Scanned: 2016-10-19 09:10:49.784172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arneunruh/VisualStockDivergence -https://github.com/arneunruh/VisualStockDivergence -Entry file: None -Scanned: 2016-10-19 09:10:53.496338 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arneunruh/VisualStockDivergence. - -karthikbox/pork_chop -https://github.com/karthikbox/pork_chop -Entry file: None -Scanned: 2016-10-19 09:11:01.062284 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -GohNicho/microblog -https://github.com/GohNicho/microblog -Entry file: None -Scanned: 2016-10-19 09:11:01.587135 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -patallen/snip.space -https://github.com/patallen/snip.space -Entry file: None -Scanned: 2016-10-19 09:11:03.202792 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/patallen/snip.space. - -colmoneill/json_feeds-flask-website-proof_of_concept -https://github.com/colmoneill/json_feeds-flask-website-proof_of_concept -Entry file: json_feeds-flask-website-proof_of_concept/website/__init__.py -Scanned: 2016-10-19 09:11:04.539775 -No vulnerabilities found. - - -marchon/Debug-Dokku.alt-Mongodb-Flask-Python -https://github.com/marchon/Debug-Dokku.alt-Mongodb-Flask-Python -Entry file: None -Scanned: 2016-10-19 09:11:05.969196 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marchon/Debug-Dokku.alt-Mongodb-Flask-Python. - -ET-CS/Python-Flask-large-app-structure-boilerplate -https://github.com/ET-CS/Python-Flask-large-app-structure-boilerplate -Entry file: None -Scanned: 2016-10-19 09:11:07.273406 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ET-CS/Python-Flask-large-app-structure-boilerplate. - -mrghen/groupfit -https://github.com/mrghen/groupfit -Entry file: groupfit/__init__.py -Scanned: 2016-10-19 09:11:10.227758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jslvtr/FriendFinderBackend -https://github.com/jslvtr/FriendFinderBackend -Entry file: None -Scanned: 2016-10-19 09:11:11.559023 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jslvtr/FriendFinderBackend. - -rghose/lol3 -https://github.com/rghose/lol3 -Entry file: lol3/app.py -Scanned: 2016-10-19 09:11:13.593983 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattgaff/urlchopin -https://github.com/mattgaff/urlchopin -Entry file: urlchopin/app/views.py -Scanned: 2016-10-19 09:11:14.086801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Chr12t0pher/FastPoll -https://github.com/Chr12t0pher/FastPoll -Entry file: FastPoll/app/__init__.py -Scanned: 2016-10-19 09:11:15.683828 -No vulnerabilities found. - - -shivamprakash/Port-Knocking -https://github.com/shivamprakash/Port-Knocking -Entry file: Port-Knocking/app/views.py -Scanned: 2016-10-19 09:11:20.637401 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -parryjacob/sitemap -https://github.com/parryjacob/sitemap -Entry file: sitemap/app.py -Scanned: 2016-10-19 09:11:22.473615 -No vulnerabilities found. - - -gangverk/flask-swagger -https://github.com/gangverk/flask-swagger -Entry file: flask-swagger/examples/example.py -Scanned: 2016-10-19 09:11:25.168674 -No vulnerabilities found. - - -no13bus/redispapa -https://github.com/no13bus/redispapa -Entry file: redispapa/run.py -Scanned: 2016-10-19 09:11:27.155656 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shekhargulati/python-flask-docker-hello-world -https://github.com/shekhargulati/python-flask-docker-hello-world -Entry file: python-flask-docker-hello-world/app.py -Scanned: 2016-10-19 09:11:28.409493 -No vulnerabilities found. - - -iXtreme/flask -https://github.com/iXtreme/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:11:29.942000 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -quokkaproject/flask-htmlbuilder -https://github.com/quokkaproject/flask-htmlbuilder -Entry file: flask-htmlbuilder/tests/test_flask-htmlbuilder.py -Scanned: 2016-10-19 09:11:31.999683 -No vulnerabilities found. - - -lavr/flask-emails -https://github.com/lavr/flask-emails -Entry file: flask-emails/tests/tests.py -Scanned: 2016-10-19 09:11:33.487628 -No vulnerabilities found. - - -jsbueno/fotolog_com_flask -https://github.com/jsbueno/fotolog_com_flask -Entry file: fotolog_com_flask/photolog.py -Scanned: 2016-10-19 09:11:34.849946 -No vulnerabilities found. - - -Nesta-CZ/flask-skeleton-db-2 -https://github.com/Nesta-CZ/flask-skeleton-db-2 -Entry file: flask-skeleton-db-2/flask-skeleton-db/src/app.py -Scanned: 2016-10-19 09:11:35.345315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spk/flask-recipes -https://github.com/spk/flask-recipes -Entry file: flask-recipes/app/factory.py -Scanned: 2016-10-19 09:11:36.711635 -No vulnerabilities found. - - -sudssm/Flask-Talk -https://github.com/sudssm/Flask-Talk -Entry file: Flask-Talk/website/app.py -Scanned: 2016-10-19 09:11:38.143551 -No vulnerabilities found. - - -enric612/flaskquickstart -https://github.com/enric612/flaskquickstart -Entry file: flaskquickstart/hellodynamic.py -Scanned: 2016-10-19 09:11:40.423358 -No vulnerabilities found. - - -sedevc/flaskr -https://github.com/sedevc/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:11:45.921738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sjbitcode/flaskr -https://github.com/sjbitcode/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:11:50.421745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sadaf2605/facedetection-flaskwebapp-rabbitmq -https://github.com/sadaf2605/facedetection-flaskwebapp-rabbitmq -Entry file: facedetection-flaskwebapp-rabbitmq/server.py -Scanned: 2016-10-19 09:11:56.347973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eric6356/flaskblog -https://github.com/eric6356/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:12:03.334463 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -underdogio/flask-json-multidict -https://github.com/underdogio/flask-json-multidict -Entry file: flask-json-multidict/docs/getting_started.py -Scanned: 2016-10-19 09:12:04.545070 -No vulnerabilities found. - - -aminrazer/FlaskVideo -https://github.com/aminrazer/FlaskVideo -Entry file: FlaskVideo/app/__init__.py -Scanned: 2016-10-19 09:12:05.843367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MEhlinger/flaskrApp -https://github.com/MEhlinger/flaskrApp -Entry file: flaskrApp/flaskr.py -Scanned: 2016-10-19 09:12:07.155301 -No vulnerabilities found. - - -stekrtomas/FlaskGraf -https://github.com/stekrtomas/FlaskGraf -Entry file: FlaskGraf/app.py -Scanned: 2016-10-19 09:12:10.014134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shafi-codez/FlaskDemo -https://github.com/shafi-codez/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 09:12:10.505674 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eternalthinker/flask-server-rq-example -https://github.com/eternalthinker/flask-server-rq-example -Entry file: flask-server-rq-example/app.py -Scanned: 2016-10-19 09:12:14.204663 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrcoe/learning-flask -https://github.com/chrcoe/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 09:12:15.225309 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Suyash458/Flask_Microblog -https://github.com/Suyash458/Flask_Microblog -Entry file: Flask_Microblog/app/__init__.py -Scanned: 2016-10-19 09:12:16.861033 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -goncharovms/flask_library -https://github.com/goncharovms/flask_library -Entry file: flask_library/app/__init__.py -Scanned: 2016-10-19 09:12:18.407411 -Vulnerability 1: -File: flask_library/app/users/views.py - > User input at line 42, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -File: flask_library/app/users/views.py - > reaches line 48, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -abhi1991/Flask_LP -https://github.com/abhi1991/Flask_LP -Entry file: None -Scanned: 2016-10-19 09:12:23.625898 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/abhi1991/Flask_LP. - -heyericnelson/flask_blog -https://github.com/heyericnelson/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:12:24.114818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -matthewst/flask-skeleton -https://github.com/matthewst/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:12:24.657481 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/matthewst/flask-skeleton. - -averyonghub/Flask-Skeleton -https://github.com/averyonghub/Flask-Skeleton -Entry file: Flask-Skeleton/www/__init__.py -Scanned: 2016-10-19 09:12:26.881731 -No vulnerabilities found. - - -AshidoKano/flask-skeleton -https://github.com/AshidoKano/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:12:27.380941 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AshidoKano/flask-skeleton. - -coderxiao/flask_test -https://github.com/coderxiao/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 09:12:28.959554 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cafe4it/flask-microblog -https://github.com/cafe4it/flask-microblog -Entry file: None -Scanned: 2016-10-19 09:12:30.467892 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -youqingkui/learn_flask -https://github.com/youqingkui/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 09:12:32.457372 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jgoodacre71/flask_hello -https://github.com/jgoodacre71/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 09:12:33.674658 -No vulnerabilities found. - - -Sidon/rpython_flask -https://github.com/Sidon/rpython_flask -Entry file: rpython_flask/app.py -Scanned: 2016-10-19 09:12:34.874546 -No vulnerabilities found. - - -nMustaki/flask-usul -https://github.com/nMustaki/flask-usul -Entry file: flask-usul/app/__init__.py -Scanned: 2016-10-19 09:12:36.547135 -No vulnerabilities found. - - -aromanovich/flask-tuktuk -https://github.com/aromanovich/flask-tuktuk -Entry file: flask-tuktuk/tests/testapp/app/__init__.py -Scanned: 2016-10-19 09:12:37.884221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flaskalobet/flask_freeswitch -https://github.com/flaskalobet/flask_freeswitch -Entry file: flask_freeswitch/app/__init__.py -Scanned: 2016-10-19 09:12:39.469632 -No vulnerabilities found. - - -froi/flask-microblog -https://github.com/froi/flask-microblog -Entry file: None -Scanned: 2016-10-19 09:12:39.983249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Solinari/Flask-Intro -https://github.com/Solinari/Flask-Intro -Entry file: Flask-Intro/Hello.py -Scanned: 2016-10-19 09:12:42.193608 -No vulnerabilities found. - - -leebird/alchemy-flask -https://github.com/leebird/alchemy-flask -Entry file: None -Scanned: 2016-10-19 09:12:47.682324 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leebird/alchemy-flask. - -catalyst/flask-wol -https://github.com/catalyst/flask-wol -Entry file: flask-wol/flask-wol.py -Scanned: 2016-10-19 09:12:53.030759 -No vulnerabilities found. - - -AminHuang/blog-flask -https://github.com/AminHuang/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-19 09:13:02.990477 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sc0rp1us/flask-calc -https://github.com/sc0rp1us/flask-calc -Entry file: flask-calc/flask_calc/__init__.py -Scanned: 2016-10-19 09:13:04.254400 -No vulnerabilities found. - - -kubnymarek/flask-kubny -https://github.com/kubnymarek/flask-kubny -Entry file: None -Scanned: 2016-10-19 09:13:08.102102 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -klokoSSPU/flask-skeleton -https://github.com/klokoSSPU/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:13:08.595104 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/klokoSSPU/flask-skeleton. - -kushal124/learn-flask -https://github.com/kushal124/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 09:13:14.994855 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kessokujp/ta25-FlaskAngJinja -https://github.com/kessokujp/ta25-FlaskAngJinja -Entry file: ta25-FlaskAngJinja/main.py -Scanned: 2016-10-19 09:13:19.511058 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Laukess/FlaskTaskr_Part_5 -https://github.com/Laukess/FlaskTaskr_Part_5 -Entry file: FlaskTaskr_Part_5/flasktaskr_project/project/__init__.py -Scanned: 2016-10-19 09:13:20.852173 -No vulnerabilities found. - - -skver/FlaskTestTask -https://github.com/skver/FlaskTestTask -Entry file: FlaskTestTask/app/__init__.py -Scanned: 2016-10-19 09:13:22.522885 -No vulnerabilities found. - - -Outfl3sh/flask-skeleton-hw -https://github.com/Outfl3sh/flask-skeleton-hw -Entry file: flask-skeleton-hw/3.2.2015/src/app.py -Scanned: 2016-10-19 09:13:26.052345 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -loomchild/flask_babel_test -https://github.com/loomchild/flask_babel_test -Entry file: flask_babel_test/flask_babel_test.py -Scanned: 2016-10-19 09:13:27.263075 -No vulnerabilities found. - - -antorof/restful-flask-simple -https://github.com/antorof/restful-flask-simple -Entry file: restful-flask-simple/simpleserver.py -Scanned: 2016-10-19 09:13:30.027734 -No vulnerabilities found. - - -petrgru/flask-karty-old -https://github.com/petrgru/flask-karty-old -Entry file: flask-karty-old/src/app.py -Scanned: 2016-10-19 09:13:34.169617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johnwook/flask-mega-tutorial -https://github.com/johnwook/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 09:13:34.676228 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexIskander/myFirstTaskFlask -https://github.com/AlexIskander/myFirstTaskFlask -Entry file: myFirstTaskFlask/app/__init__.py -Scanned: 2016-10-19 09:13:35.995361 -No vulnerabilities found. - - -zouzias/docker-compose-flask-example -https://github.com/zouzias/docker-compose-flask-example -Entry file: docker-compose-flask-example/app.py -Scanned: 2016-10-19 09:13:37.189284 -No vulnerabilities found. - - -padpach/flask-hello-world -https://github.com/padpach/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:13:38.168156 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -tetsuharu/flask_demo_app -https://github.com/tetsuharu/flask_demo_app -Entry file: flask_demo_app/hello.py -Scanned: 2016-10-19 09:13:40.361999 -No vulnerabilities found. - - -jpollar4/FirstFlaskSite -https://github.com/jpollar4/FirstFlaskSite -Entry file: FirstFlaskSite/hello.py -Scanned: 2016-10-19 09:13:42.576400 -No vulnerabilities found. - - -moranned/flask_api_example -https://github.com/moranned/flask_api_example -Entry file: flask_api_example/app.py -Scanned: 2016-10-19 09:13:43.763971 -Vulnerability 1: -File: flask_api_example/app.py - > User input at line 42, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask_api_example/app.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -asldevi/flask-redis-socketio -https://github.com/asldevi/flask-redis-socketio -Entry file: flask-redis-socketio/webapp.py -Scanned: 2016-10-19 09:13:50.365510 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Domca17/flask-skeleton-karty -https://github.com/Domca17/flask-skeleton-karty -Entry file: flask-skeleton-karty/src/app.py -Scanned: 2016-10-19 09:13:56.869886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pythonizame/flask-mongo-blog -https://github.com/pythonizame/flask-mongo-blog -Entry file: flask-mongo-blog/blog/__init__.py -Scanned: 2016-10-19 09:13:58.093201 -No vulnerabilities found. - - -SimoCi/flasktaskr-project -https://github.com/SimoCi/flasktaskr-project -Entry file: flasktaskr-project/project/__init__.py -Scanned: 2016-10-19 09:14:05.489366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ctyneg/flaskapp_sxsw -https://github.com/ctyneg/flaskapp_sxsw -Entry file: None -Scanned: 2016-10-19 09:14:09.552077 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -efegirek/DynoCel -https://github.com/efegirek/DynoCel -Entry file: DynoCel/config/factory.py -Scanned: 2016-10-19 09:14:10.934267 -No vulnerabilities found. - - -DavidGSola/Basic-RESTful-Service-with-FLASK -https://github.com/DavidGSola/Basic-RESTful-Service-with-FLASK -Entry file: Basic-RESTful-Service-with-FLASK/practica1.py -Scanned: 2016-10-19 09:14:17.750106 -No vulnerabilities found. - - -dj80hd/konsole -https://github.com/dj80hd/konsole -Entry file: konsole/app/__init__.py -Scanned: 2016-10-19 09:14:19.328625 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GohNicho/microblog -https://github.com/GohNicho/microblog -Entry file: None -Scanned: 2016-10-19 09:14:21.858306 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marchon/Debug-Dokku.alt-Mongodb-Flask-Python -https://github.com/marchon/Debug-Dokku.alt-Mongodb-Flask-Python -Entry file: None -Scanned: 2016-10-19 09:14:22.370297 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Akelio-zhang/sxk-microblog -https://github.com/Akelio-zhang/sxk-microblog -Entry file: None -Scanned: 2016-10-19 09:14:25.996033 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AnOctopus/imageboard -https://github.com/AnOctopus/imageboard -Entry file: imageboard/manage.py -Scanned: 2016-10-19 09:14:27.365323 -No vulnerabilities found. - - -thisissoon/FM-API -https://github.com/thisissoon/FM-API -Entry file: FM-API/fm/app.py -Scanned: 2016-10-19 09:14:30.697159 -No vulnerabilities found. - - -Saykar/Duty-Scheduler -https://github.com/Saykar/Duty-Scheduler -Entry file: Duty-Scheduler/duty_app/__init__.py -Scanned: 2016-10-19 09:14:32.708056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sean-smith/api_workshop -https://github.com/sean-smith/api_workshop -Entry file: api_workshop/api.py -Scanned: 2016-10-19 09:14:33.979270 -No vulnerabilities found. - - -bnjmnjhnsn/pyServe -https://github.com/bnjmnjhnsn/pyServe -Entry file: pyServe/server.py -Scanned: 2016-10-19 09:14:35.310937 -No vulnerabilities found. - - -ddworken/proxyVerificationService -https://github.com/ddworken/proxyVerificationService -Entry file: proxyVerificationService/proxyVerifyAPI.py -Scanned: 2016-10-19 09:14:37.087823 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rohitkrai03/py-mdserver -https://github.com/rohitkrai03/py-mdserver -Entry file: py-mdserver/mdserve/mdserve.py -Scanned: 2016-10-19 09:14:38.919907 -No vulnerabilities found. - - -no13bus/redispapa -https://github.com/no13bus/redispapa -Entry file: redispapa/run.py -Scanned: 2016-10-19 09:14:41.298609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gwongz/flask-apiblueprint -https://github.com/gwongz/flask-apiblueprint -Entry file: flask-apiblueprint/test_apiblueprint.py -Scanned: 2016-10-19 09:14:42.659210 -No vulnerabilities found. - - -nickw444/flask-ldap3-login -https://github.com/nickw444/flask-ldap3-login -Entry file: flask-ldap3-login/ldap_app.py -Scanned: 2016-10-19 09:14:44.642829 -No vulnerabilities found. - - -shekhargulati/python-flask-docker-hello-world -https://github.com/shekhargulati/python-flask-docker-hello-world -Entry file: python-flask-docker-hello-world/app.py -Scanned: 2016-10-19 09:14:45.885247 -No vulnerabilities found. - - -DevGone/flask -https://github.com/DevGone/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:14:46.786185 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -albingeorge/flask -https://github.com/albingeorge/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:14:47.669593 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jetou/flask -https://github.com/jetou/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:14:48.574806 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ironyee/djangoish_flask -https://github.com/ironyee/djangoish_flask -Entry file: djangoish_flask/djangoish_flask/__init__.py -Scanned: 2016-10-19 09:14:59.869441 -No vulnerabilities found. - - -bitstein/Flask-GPGAuth -https://github.com/bitstein/Flask-GPGAuth -Entry file: Flask-GPGAuth/app/__init__.py -Scanned: 2016-10-19 09:15:07.262768 -No vulnerabilities found. - - -achiku/sample-flask-sqlalchemy -https://github.com/achiku/sample-flask-sqlalchemy -Entry file: None -Scanned: 2016-10-19 09:15:08.582617 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/achiku/sample-flask-sqlalchemy. - -kevin386/flaskr -https://github.com/kevin386/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:15:11.088371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sjbitcode/flaskr -https://github.com/sjbitcode/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:15:12.570799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shidenggui/flaskexample -https://github.com/shidenggui/flaskexample -Entry file: flaskexample/flask/flaskr.py -Scanned: 2016-10-19 09:15:18.852767 -No vulnerabilities found. - - -sheoranjs24/flaskblog -https://github.com/sheoranjs24/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:15:19.360293 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -flaviobarros/flaskr -https://github.com/flaviobarros/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:15:22.849247 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -boyebn/flaskepost -https://github.com/boyebn/flaskepost -Entry file: flaskepost/server.py -Scanned: 2016-10-19 09:15:25.221714 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atkailash/flaskbook -https://github.com/atkailash/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-19 09:15:30.480489 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -npineda/flaskproject -https://github.com/npineda/flaskproject -Entry file: None -Scanned: 2016-10-19 09:15:38.607600 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jaijuneja/summarizer-flask-app -https://github.com/jaijuneja/summarizer-flask-app -Entry file: summarizer-flask-app/tldrapp/__init__.py -Scanned: 2016-10-19 09:15:40.549888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coursemdetw/flask_project -https://github.com/coursemdetw/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 09:15:43.481990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -goncharovms/flask_library -https://github.com/goncharovms/flask_library -Entry file: flask_library/app/__init__.py -Scanned: 2016-10-19 09:15:45.066318 -Vulnerability 1: -File: flask_library/app/users/views.py - > User input at line 42, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -File: flask_library/app/users/views.py - > reaches line 48, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -stekrtomas/Flask-Karty -https://github.com/stekrtomas/Flask-Karty -Entry file: Flask-Karty/src/app.py -Scanned: 2016-10-19 09:15:48.763590 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krisalpha/flask-programs -https://github.com/krisalpha/flask-programs -Entry file: flask-programs/hello.py -Scanned: 2016-10-19 09:15:50.051269 -No vulnerabilities found. - - -michaelreid/helloworld_flask -https://github.com/michaelreid/helloworld_flask -Entry file: helloworld_flask/hello_world.py -Scanned: 2016-10-19 09:15:51.269039 -No vulnerabilities found. - - -MaraKovalcik/flask-karty -https://github.com/MaraKovalcik/flask-karty -Entry file: flask-karty/src/app.py -Scanned: 2016-10-19 09:15:52.729200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -castleodinland/simple-flask -https://github.com/castleodinland/simple-flask -Entry file: simple-flask/flaskapp.py -Scanned: 2016-10-19 09:15:53.966955 -No vulnerabilities found. - - -mr-bigbang/flask-frame -https://github.com/mr-bigbang/flask-frame -Entry file: flask-frame/src/website/__init__.py -Scanned: 2016-10-19 09:15:55.217784 -No vulnerabilities found. - - -neuralmancer/flask-basico -https://github.com/neuralmancer/flask-basico -Entry file: flask-basico/app/__init__.py -Scanned: 2016-10-19 09:15:56.560227 -No vulnerabilities found. - - -peggykh/Flask-Jungle -https://github.com/peggykh/Flask-Jungle -Entry file: None -Scanned: 2016-10-19 09:16:00.122239 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tabee/lifx_flask -https://github.com/tabee/lifx_flask -Entry file: lifx_flask/lifx_flask.py -Scanned: 2016-10-19 09:16:01.484987 -No vulnerabilities found. - - -Sidon/rpython_flask -https://github.com/Sidon/rpython_flask -Entry file: rpython_flask/app.py -Scanned: 2016-10-19 09:16:02.682847 -No vulnerabilities found. - - -klokoSSPU/flask-tutorial -https://github.com/klokoSSPU/flask-tutorial -Entry file: None -Scanned: 2016-10-19 09:16:07.634036 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scottik4/Flask-Database -https://github.com/scottik4/Flask-Database -Entry file: Flask-Database/src/app.py -Scanned: 2016-10-19 09:16:13.342583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -2blesd2bstresd/flask-taskr -https://github.com/2blesd2bstresd/flask-taskr -Entry file: flask-taskr/views.py -Scanned: 2016-10-19 09:16:18.524056 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-taskr/env/lib/python2.7/genericpath.py - -srtucker22/flask-cryptogram -https://github.com/srtucker22/flask-cryptogram -Entry file: flask-cryptogram/server.py -Scanned: 2016-10-19 09:16:20.211919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alsimoes/learning-flask -https://github.com/alsimoes/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 09:16:20.749748 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leejaedus/flask-boilerplate -https://github.com/leejaedus/flask-boilerplate -Entry file: flask-boilerplate/app/__init__.py -Scanned: 2016-10-19 09:16:21.942677 -No vulnerabilities found. - - -jcofta/flask-pyladies -https://github.com/jcofta/flask-pyladies -Entry file: flask-pyladies/a2/a2.py -Scanned: 2016-10-19 09:16:23.289907 -No vulnerabilities found. - - -honzinec/flask-skeleton -https://github.com/honzinec/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:16:23.831699 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/honzinec/flask-skeleton. - -sc0rp1us/flask-calc -https://github.com/sc0rp1us/flask-calc -Entry file: flask-calc/flask_calc/__init__.py -Scanned: 2016-10-19 09:16:25.026963 -No vulnerabilities found. - - -padpach/flask-blog -https://github.com/padpach/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:16:25.543729 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -archerydwd/flask_blog -https://github.com/archerydwd/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:16:26.037533 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -archerydwd/flask_sakila -https://github.com/archerydwd/flask_sakila -Entry file: flask_sakila/main.py -Scanned: 2016-10-19 09:16:27.964785 -No vulnerabilities found. - - -AndreasDL/mobike-flask -https://github.com/AndreasDL/mobike-flask -Entry file: mobike-flask/api.py -Scanned: 2016-10-19 09:16:29.543974 -No vulnerabilities found. - - -muya/learn-flask -https://github.com/muya/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 09:16:30.630632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akashbhunchal/AWSAutoScalingWithF5 -https://github.com/akashbhunchal/AWSAutoScalingWithF5 -Entry file: AWSAutoScalingWithF5/app.py -Scanned: 2016-10-19 09:16:32.575378 -No vulnerabilities found. - - -Pythonideus/FlaskPackageGenerator -https://github.com/Pythonideus/FlaskPackageGenerator -Entry file: FlaskPackageGenerator/Flask_Package_Template/app/packagename/__init__.py -Scanned: 2016-10-19 09:16:33.809295 -No vulnerabilities found. - - -oilnam/flask-micro-boilerplate -https://github.com/oilnam/flask-micro-boilerplate -Entry file: flask-micro-boilerplate/app/__init__.py -Scanned: 2016-10-19 09:16:41.036702 -No vulnerabilities found. - - -dejv997/flask-skeleton-karty-master -https://github.com/dejv997/flask-skeleton-karty-master -Entry file: flask-skeleton-karty-master/src/app.py -Scanned: 2016-10-19 09:16:49.239324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -klokoSSPU/flask-skeleton-du -https://github.com/klokoSSPU/flask-skeleton-du -Entry file: flask-skeleton-du/src/app.py -Scanned: 2016-10-19 09:16:53.104592 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YellowSharkMT/Flask-Endpoint-Example -https://github.com/YellowSharkMT/Flask-Endpoint-Example -Entry file: Flask-Endpoint-Example/app.py -Scanned: 2016-10-19 09:16:54.326082 -No vulnerabilities found. - - -majapklm/url_shortner_using_flask -https://github.com/majapklm/url_shortner_using_flask -Entry file: url_shortner_using_flask/app/__init__.py -Scanned: 2016-10-19 09:16:55.541841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -primary157/siteprimary157flask -https://github.com/primary157/siteprimary157flask -Entry file: siteprimary157flask/app/__init__.py -Scanned: 2016-10-19 09:16:57.338895 -No vulnerabilities found. - - -johnwook/flask-restful-todo -https://github.com/johnwook/flask-restful-todo -Entry file: flask-restful-todo/app.py -Scanned: 2016-10-19 09:16:58.594955 -Vulnerability 1: -File: flask-restful-todo/api.py - > User input at line 64, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-restful-todo/api.py - > Line 70: user = User(username=username) -File: flask-restful-todo/api.py - > reaches line 74, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flask-restful-todo/api.py - > User input at line 64, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-restful-todo/api.py - > Line 70: user = User(username=username) -File: flask-restful-todo/api.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flask-restful-todo/api.py - > User input at line 80, trigger word "get(": - user = User.query.get(id) -File: flask-restful-todo/api.py - > reaches line 83, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -chang007/flask-skeleton-karty -https://github.com/chang007/flask-skeleton-karty -Entry file: flask-skeleton-karty/src/app.py -Scanned: 2016-10-19 09:16:59.145895 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Alben26/flask-skeleton-master -https://github.com/Alben26/flask-skeleton-master -Entry file: flask-skeleton-master/src/app.py -Scanned: 2016-10-19 09:17:03.616681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nesta-CZ/flask-skeleton-karty -https://github.com/Nesta-CZ/flask-skeleton-karty -Entry file: flask-skeleton-karty/src/app.py -Scanned: 2016-10-19 09:17:04.114862 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonaseck2/xyz-python-3-flask -https://github.com/jonaseck2/xyz-python-3-flask -Entry file: xyz-python-3-flask/hello_world.py -Scanned: 2016-10-19 09:17:05.322174 -No vulnerabilities found. - - -cocodrips/GAE-flask-application -https://github.com/cocodrips/GAE-flask-application -Entry file: GAE-flask-application/main.py -Scanned: 2016-10-19 09:17:09.243206 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -vikas86/python_flask_vikas -https://github.com/vikas86/python_flask_vikas -Entry file: python_flask_vikas/vikas.py -Scanned: 2016-10-19 09:17:10.582817 -No vulnerabilities found. - - -rmotr/example-flask-app -https://github.com/rmotr/example-flask-app -Entry file: example-flask-app/rmotr/app.py -Scanned: 2016-10-19 09:17:15.789021 -Vulnerability 1: -File: example-flask-app/rmotr/app.py - > User input at line 44, trigger word "form[": - name = request.form['name'] -File: example-flask-app/rmotr/app.py - > reaches line 50, trigger word "execute(": - g.db.execute('insert into courses (name, instructor, description) values (?, ?, ?)', [name, instructor, description]) - -Vulnerability 2: -File: example-flask-app/rmotr/app.py - > User input at line 45, trigger word "form[": - instructor = request.form['instructor'] -File: example-flask-app/rmotr/app.py - > reaches line 50, trigger word "execute(": - g.db.execute('insert into courses (name, instructor, description) values (?, ?, ?)', [name, instructor, description]) - -Vulnerability 3: -File: example-flask-app/rmotr/app.py - > User input at line 46, trigger word "form[": - description = request.form['description'] -File: example-flask-app/rmotr/app.py - > reaches line 50, trigger word "execute(": - g.db.execute('insert into courses (name, instructor, description) values (?, ?, ?)', [name, instructor, description]) - - - -matthewst/flask-skeleton-karty -https://github.com/matthewst/flask-skeleton-karty -Entry file: flask-skeleton-karty/src/app.py -Scanned: 2016-10-19 09:17:20.410878 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -muhammadalie/Student-App-using-flask -https://github.com/muhammadalie/Student-App-using-flask -Entry file: None -Scanned: 2016-10-19 09:17:22.666686 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/muhammadalie/Student-App-using-flask. - -wklken/flask-qrcode-demo -https://github.com/wklken/flask-qrcode-demo -Entry file: flask-qrcode-demo/run.py -Scanned: 2016-10-19 09:17:23.861497 -No vulnerabilities found. - - -AlexIskander/myFirstTaskFlask -https://github.com/AlexIskander/myFirstTaskFlask -Entry file: myFirstTaskFlask/app/__init__.py -Scanned: 2016-10-19 09:17:25.191372 -No vulnerabilities found. - - -itsyash/Microblog-Using-Flask -https://github.com/itsyash/Microblog-Using-Flask -Entry file: Microblog-Using-Flask/flaskr/flaskr.py -Scanned: 2016-10-19 09:17:26.442761 -No vulnerabilities found. - - -aguerra/flask-restful-example -https://github.com/aguerra/flask-restful-example -Entry file: flask-restful-example/app/__init__.py -Scanned: 2016-10-19 09:17:27.633388 -No vulnerabilities found. - - -ondrejsika/flask-kniha-code-examples -https://github.com/ondrejsika/flask-kniha-code-examples -Entry file: flask-kniha-code-examples/post/app.py -Scanned: 2016-10-19 09:17:28.859175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bigbi/flask-skeleton-id -https://github.com/bigbi/flask-skeleton-id -Entry file: flask-skeleton-id/src/app.py -Scanned: 2016-10-19 09:17:33.205993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonaseck2/xyz-python-2-flask -https://github.com/jonaseck2/xyz-python-2-flask -Entry file: xyz-python-2-flask/hello_world.py -Scanned: 2016-10-19 09:17:34.939952 -No vulnerabilities found. - - -SHDream/flask_sample_demo -https://github.com/SHDream/flask_sample_demo -Entry file: flask_sample_demo/Blog/Blog.py -Scanned: 2016-10-19 09:17:36.176695 -No vulnerabilities found. - - -go2starr/py-flask-video-stream -https://github.com/go2starr/py-flask-video-stream -Entry file: py-flask-video-stream/server.py -Scanned: 2016-10-19 09:17:37.392709 -No vulnerabilities found. - - -muhammadalie/Url-Shortner-Using-Flask -https://github.com/muhammadalie/Url-Shortner-Using-Flask -Entry file: None -Scanned: 2016-10-19 09:17:38.718658 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/muhammadalie/Url-Shortner-Using-Flask. - -majapklm/Flask-Blog-master -https://github.com/majapklm/Flask-Blog-master -Entry file: None -Scanned: 2016-10-19 09:17:40.247266 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/majapklm/Flask-Blog-master. - -raielin/flaskr_tutorial -https://github.com/raielin/flaskr_tutorial -Entry file: flaskr_tutorial/flaskr.py -Scanned: 2016-10-19 09:17:42.609427 -No vulnerabilities found. - - -yonglin/microblog -https://github.com/yonglin/microblog -Entry file: None -Scanned: 2016-10-19 09:17:44.160043 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -evanscottgray/slackwow -https://github.com/evanscottgray/slackwow -Entry file: slackwow/app.py -Scanned: 2016-10-19 09:17:47.397053 -No vulnerabilities found. - - -pegahkh/MonksJungle -https://github.com/pegahkh/MonksJungle -Entry file: None -Scanned: 2016-10-19 09:17:54.899709 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mennanov/todilo -https://github.com/mennanov/todilo -Entry file: todilo/app.py -Scanned: 2016-10-19 09:17:56.383932 -No vulnerabilities found. - - -christophervalles/backend-skeleton -https://github.com/christophervalles/backend-skeleton -Entry file: None -Scanned: 2016-10-19 09:17:57.710592 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/christophervalles/backend-skeleton. - -joeknows718/718Digital -https://github.com/joeknows718/718Digital -Entry file: 718Digital/app/__init__.py -Scanned: 2016-10-19 09:17:59.456650 -No vulnerabilities found. - - -tdanford/ga4gh-flask-api -https://github.com/tdanford/ga4gh-flask-api -Entry file: ga4gh-flask-api/ga4gh_service.py -Scanned: 2016-10-19 09:18:00.677818 -No vulnerabilities found. - - -muhammadalie/Twitter-Tweets-Extractor-Using-Flask -https://github.com/muhammadalie/Twitter-Tweets-Extractor-Using-Flask -Entry file: None -Scanned: 2016-10-19 09:18:01.986688 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/muhammadalie/Twitter-Tweets-Extractor-Using-Flask. - -przemyslawjanpietrzak/pyLadiesWorkshops3Flask -https://github.com/przemyslawjanpietrzak/pyLadiesWorkshops3Flask -Entry file: pyLadiesWorkshops3Flask/app.py -Scanned: 2016-10-19 09:18:03.312722 -No vulnerabilities found. - - -muhammadalie/Github-Repo-Extractor-using-Flask- -https://github.com/muhammadalie/Github-Repo-Extractor-using-Flask- -Entry file: None -Scanned: 2016-10-19 09:18:04.648589 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/muhammadalie/Github-Repo-Extractor-using-Flask-. - -tuvokki/data-api -https://github.com/tuvokki/data-api -Entry file: data-api/app.py -Scanned: 2016-10-19 09:18:07.586317 -No vulnerabilities found. - - -Winterflower/microblog -https://github.com/Winterflower/microblog -Entry file: None -Scanned: 2016-10-19 09:18:08.084939 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -htimstyler/GarageDoors -https://github.com/htimstyler/GarageDoors -Entry file: GarageDoors/GarageDoors.py -Scanned: 2016-10-19 09:18:09.320447 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TomBaxter/sandbox -https://github.com/TomBaxter/sandbox -Entry file: sandbox/sched/app.py -Scanned: 2016-10-19 09:18:11.586323 -No vulnerabilities found. - - -htimstyler/GarageControl -https://github.com/htimstyler/GarageControl -Entry file: GarageControl/GarageControl_02.py -Scanned: 2016-10-19 09:18:16.834077 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cshg/HNY_flaskr_eg -https://github.com/cshg/HNY_flaskr_eg -Entry file: HNY_flaskr_eg/flaskr.py -Scanned: 2016-10-19 09:18:22.051897 -No vulnerabilities found. - - -muhammadalie/Github-Repo-Extractor-using-Flask-Using-API -https://github.com/muhammadalie/Github-Repo-Extractor-using-Flask-Using-API -Entry file: None -Scanned: 2016-10-19 09:18:24.380592 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/muhammadalie/Github-Repo-Extractor-using-Flask-Using-API. - -LEWASatVT/leapi -https://github.com/LEWASatVT/leapi -Entry file: leapi/leapi/__init__.py -Scanned: 2016-10-19 09:18:25.939855 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguelgrinberg/flask-pycon2015 -https://github.com/miguelgrinberg/flask-pycon2015 -Entry file: flask-pycon2015/app.py -Scanned: 2016-10-19 09:18:28.703558 -No vulnerabilities found. - - -IBM-Bluemix/python-hello-world-flask -https://github.com/IBM-Bluemix/python-hello-world-flask -Entry file: python-hello-world-flask/hello.py -Scanned: 2016-10-19 09:18:30.084638 -No vulnerabilities found. - - -JackStouffer/cookiecutter-Flask-Foundation -https://github.com/JackStouffer/cookiecutter-Flask-Foundation -Entry file: cookiecutter-Flask-Foundation/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/__init__.py -Scanned: 2016-10-19 09:18:32.780896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjoseph246/flask -https://github.com/cjoseph246/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:18:33.695320 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -lrolaz/flask -https://github.com/lrolaz/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:18:35.566794 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -madhav06/Flask -https://github.com/madhav06/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:18:36.171709 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jmccormack200/Flask -https://github.com/jmccormack200/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:18:36.741768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gkw/seotool -https://github.com/gkw/seotool -Entry file: seotool/webapp/__init__.py -Scanned: 2016-10-19 09:18:40.487664 -No vulnerabilities found. - - -soundslike/soundslike-server -https://github.com/soundslike/soundslike-server -Entry file: soundslike-server/app/__init__.py -Scanned: 2016-10-19 09:18:41.851725 -No vulnerabilities found. - - -rmed/flask_template -https://github.com/rmed/flask_template -Entry file: None -Scanned: 2016-10-19 09:18:46.558716 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rmed/flask_template. - -wangxunxun/flasktest -https://github.com/wangxunxun/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 09:18:48.073040 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -annanymouse/flaskproject -https://github.com/annanymouse/flaskproject -Entry file: None -Scanned: 2016-10-19 09:18:52.569989 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bot11/flasksample -https://github.com/bot11/flasksample -Entry file: flasksample/app/__init__.py -Scanned: 2016-10-19 09:18:57.817896 -No vulnerabilities found. - - -wangxunxun/flaskweb -https://github.com/wangxunxun/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-19 09:19:01.817844 -No vulnerabilities found. - - -huangnauh/flaskblog -https://github.com/huangnauh/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:19:02.340237 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -raywong702/flaskr -https://github.com/raywong702/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:19:02.831428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feeneyp/flaskhelloworld -https://github.com/feeneyp/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-19 09:19:04.099038 -No vulnerabilities found. - - -boyebn/flaskepost -https://github.com/boyebn/flaskepost -Entry file: flaskepost/server.py -Scanned: 2016-10-19 09:19:04.592319 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atkailash/flaskbook -https://github.com/atkailash/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-19 09:19:06.622932 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -cristobalrosa/flaskapps -https://github.com/cristobalrosa/flaskapps -Entry file: flaskapps/testgoogleauth/app/__init__.py -Scanned: 2016-10-19 09:19:09.937541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gangeshwark/Travel -https://github.com/gangeshwark/Travel -Entry file: Travel/main.py -Scanned: 2016-10-19 09:19:24.422707 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bprinty/flask-starter -https://github.com/bprinty/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 09:19:24.911850 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bradyz/flask-stuff -https://github.com/bradyz/flask-stuff -Entry file: flask-stuff/app.py -Scanned: 2016-10-19 09:19:26.134262 -No vulnerabilities found. - - -jessicastewart-adroll/flask-experiments -https://github.com/jessicastewart-adroll/flask-experiments -Entry file: flask-experiments/8_1_heroku/hello.py -Scanned: 2016-10-19 09:19:27.516641 -No vulnerabilities found. - - -Allenliu0703/flask-UI- -https://github.com/Allenliu0703/flask-UI- -Entry file: flask-UI-/webserver.py -Scanned: 2016-10-19 09:19:30.669542 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -r0b0ticus/flask-kickstart -https://github.com/r0b0ticus/flask-kickstart -Entry file: flask-kickstart/kickstart.py -Scanned: 2016-10-19 09:19:32.586730 -No vulnerabilities found. - - -torrange/Flask-Polymer -https://github.com/torrange/Flask-Polymer -Entry file: Flask-Polymer/app.py -Scanned: 2016-10-19 09:19:36.410085 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Polymer/venv/lib/python2.7/genericpath.py - -neuralmancer/flask-basico -https://github.com/neuralmancer/flask-basico -Entry file: flask-basico/app/__init__.py -Scanned: 2016-10-19 09:19:37.759216 -No vulnerabilities found. - - -jyt109/flask_upload -https://github.com/jyt109/flask_upload -Entry file: flask_upload/app.py -Scanned: 2016-10-19 09:19:38.978977 -No vulnerabilities found. - - -jcsaaddupuy/cookiecutter-flask -https://github.com/jcsaaddupuy/cookiecutter-flask -Entry file: None -Scanned: 2016-10-19 09:19:40.336129 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jcsaaddupuy/cookiecutter-flask. - -ibivibiv/flask_rpi -https://github.com/ibivibiv/flask_rpi -Entry file: flask_rpi/rpi_server/app.py -Scanned: 2016-10-19 09:19:41.544144 -No vulnerabilities found. - - -stefanlegg/flask-social -https://github.com/stefanlegg/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-19 09:19:42.750344 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bwainstock/leaflet-flask -https://github.com/bwainstock/leaflet-flask -Entry file: leaflet-flask/app/__init__.py -Scanned: 2016-10-19 09:19:44.421945 -No vulnerabilities found. - - -plantin/microblog-flask -https://github.com/plantin/microblog-flask -Entry file: microblog-flask/app/__init__.py -Scanned: 2016-10-19 09:19:45.746350 -No vulnerabilities found. - - -Bfat-boy/learn-flask -https://github.com/Bfat-boy/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 09:19:46.358888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcofta/flask-pyladies -https://github.com/jcofta/flask-pyladies -Entry file: flask-pyladies/a2/a2.py -Scanned: 2016-10-19 09:19:47.675540 -No vulnerabilities found. - - -luismoramedina/hello-flask -https://github.com/luismoramedina/hello-flask -Entry file: hello-flask/helloflask.py -Scanned: 2016-10-19 09:19:48.917175 -No vulnerabilities found. - - -tntC4stl3/Learn-Flask -https://github.com/tntC4stl3/Learn-Flask -Entry file: Learn-Flask/microblog/app/__init__.py -Scanned: 2016-10-19 09:19:51.168216 -No vulnerabilities found. - - -curiosityandlearn/blog -https://github.com/curiosityandlearn/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:19:51.661021 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AndrewTse/WordGame -https://github.com/AndrewTse/WordGame -Entry file: WordGame/readingInFromFile.py -Scanned: 2016-10-19 09:19:58.393032 -No vulnerabilities found. - - -russomi/slask-app -https://github.com/russomi/slask-app -Entry file: slask-app/main.py -Scanned: 2016-10-19 09:20:00.001173 -No vulnerabilities found. - - -jhishan/link-extractor -https://github.com/jhishan/link-extractor -Entry file: link-extractor/handlers.py -Scanned: 2016-10-19 09:20:01.671467 -No vulnerabilities found. - - -SmartMammal/Flask_hello_world -https://github.com/SmartMammal/Flask_hello_world -Entry file: Flask_hello_world/run.py -Scanned: 2016-10-19 09:20:07.359758 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_hello_world/env/lib/python2.7/genericpath.py - -anyTV/python-flask-project-structure -https://github.com/anyTV/python-flask-project-structure -Entry file: None -Scanned: 2016-10-19 09:20:08.694390 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/anyTV/python-flask-project-structure. - -ibrahim12/flask-s3-bower -https://github.com/ibrahim12/flask-s3-bower -Entry file: flask-s3-bower/tests/test_flask_static.py -Scanned: 2016-10-19 09:20:10.146529 -No vulnerabilities found. - - -themouli/Flask-S3-Uploader -https://github.com/themouli/Flask-S3-Uploader -Entry file: Flask-S3-Uploader/app.py -Scanned: 2016-10-19 09:20:11.476068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shinson/flask_aid_calculator -https://github.com/shinson/flask_aid_calculator -Entry file: flask_aid_calculator/flask_app.py -Scanned: 2016-10-19 09:20:12.854200 -No vulnerabilities found. - - -vitalk/flask-styleguide-example -https://github.com/vitalk/flask-styleguide-example -Entry file: flask-styleguide-example/app/app.py -Scanned: 2016-10-19 09:20:14.789257 -No vulnerabilities found. - - -richardasaurus/flask-view-cache -https://github.com/richardasaurus/flask-view-cache -Entry file: flask-view-cache/src/tests/test_decorator.py -Scanned: 2016-10-19 09:20:16.005992 -No vulnerabilities found. - - -vikas86/python_flask_vikas -https://github.com/vikas86/python_flask_vikas -Entry file: python_flask_vikas/vikas.py -Scanned: 2016-10-19 09:20:27.247875 -No vulnerabilities found. - - -CTTV/docker-flask-uwsgi -https://github.com/CTTV/docker-flask-uwsgi -Entry file: docker-flask-uwsgi/src/manage.py -Scanned: 2016-10-19 09:20:28.499417 -No vulnerabilities found. - - -ZCT/flask-whoosh-jieba -https://github.com/ZCT/flask-whoosh-jieba -Entry file: flask-whoosh-jieba/searchPage.py -Scanned: 2016-10-19 09:20:30.327438 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DamienCasoni/flask-hello-world -https://github.com/DamienCasoni/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:20:30.873808 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -PerryBhandal/LearnFlaskAdmin -https://github.com/PerryBhandal/LearnFlaskAdmin -Entry file: LearnFlaskAdmin/app/__init__.py -Scanned: 2016-10-19 09:20:33.203922 -No vulnerabilities found. - - -tryer3000/flask-hands-on -https://github.com/tryer3000/flask-hands-on -Entry file: flask-hands-on/app/__init__.py -Scanned: 2016-10-19 09:20:35.577037 -No vulnerabilities found. - - -mahbubme/Flask-Web-Development -https://github.com/mahbubme/Flask-Web-Development -Entry file: Flask-Web-Development/2.5example/hello.py -Scanned: 2016-10-19 09:20:40.579249 -No vulnerabilities found. - - -plopp/simple-flask-auth -https://github.com/plopp/simple-flask-auth -Entry file: simple-flask-auth/main.py -Scanned: 2016-10-19 09:20:41.930465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arvinls/learn_flask-web -https://github.com/arvinls/learn_flask-web -Entry file: learn_flask-web/app/__init__.py -Scanned: 2016-10-19 09:20:47.550669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thomasleveil/docker-flask-sockets -https://github.com/thomasleveil/docker-flask-sockets -Entry file: docker-flask-sockets/server.py -Scanned: 2016-10-19 09:20:48.762442 -No vulnerabilities found. - - -syn-ful/flask-hello-world -https://github.com/syn-ful/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:20:49.288474 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -willcraft/flask_sample01 -https://github.com/willcraft/flask_sample01 -Entry file: flask_sample01/app.py -Scanned: 2016-10-19 09:20:50.527545 -No vulnerabilities found. - - -x89/naycms -https://github.com/x89/naycms -Entry file: naycms/test.py -Scanned: 2016-10-19 09:20:51.761164 -No vulnerabilities found. - - -burness/burnessweibo -https://github.com/burness/burnessweibo -Entry file: burnessweibo/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-19 09:20:56.873519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Huangtuzhi/GoLink -https://github.com/Huangtuzhi/GoLink -Entry file: GoLink/www/index.py -Scanned: 2016-10-19 09:20:58.696248 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -george-s/joke_assistant_web -https://github.com/george-s/joke_assistant_web -Entry file: None -Scanned: 2016-10-19 09:21:20.146828 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/george-s/joke_assistant_web. - -yubang/cms -https://github.com/yubang/cms -Entry file: None -Scanned: 2016-10-19 09:21:21.625744 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yubang/cms. - -TomBaxter/sandbox -https://github.com/TomBaxter/sandbox -Entry file: sandbox/sched/app.py -Scanned: 2016-10-19 09:21:23.823425 -No vulnerabilities found. - - -mbasanta/QR5Server -https://github.com/mbasanta/QR5Server -Entry file: QR5Server/qr5server/__init__.py -Scanned: 2016-10-19 09:21:25.301185 -Vulnerability 1: -File: QR5Server/qr5server/apiroutes.py - > User input at line 25, trigger word "get(": - datapage = QR5Record.query.paginate(page, app.config.get('RECORDS_PER_PAGE'), True) -Reassigned in: - File: QR5Server/qr5server/apiroutes.py - > Line 29: next_page = datapage.has_nextdatapage.next_num-1 - File: QR5Server/qr5server/apiroutes.py - > Line 30: prev_page = datapage.has_prevdatapage.prev_num-1 -File: QR5Server/qr5server/apiroutes.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('records''next_num''prev_num''items''pages'[item.to_dict for item in datapage.items]next_pageprev_pagedatapage.totaldatapage.pages) - - - -donalcarpenter/lolcatfancier -https://github.com/donalcarpenter/lolcatfancier -Entry file: lolcatfancier/app.py -Scanned: 2016-10-19 09:21:26.814876 -Vulnerability 1: -File: lolcatfancier/views.py - > User input at line 135, trigger word ".data": - cat.title = form.title.data -File: lolcatfancier/views.py - > reaches line 150, trigger word "flash(": - flash(flash_message.format(cat.title), 'success') - - - -coursemdetw/flaskr_on_openshift -https://github.com/coursemdetw/flaskr_on_openshift -Entry file: flaskr_on_openshift/wsgi/flaskr.py -Scanned: 2016-10-19 09:21:28.132052 -No vulnerabilities found. - - -Kaiyuanliu/simple-message-board -https://github.com/Kaiyuanliu/simple-message-board -Entry file: simple-message-board/app/__init__.py -Scanned: 2016-10-19 09:21:29.988874 -No vulnerabilities found. - - -stevesark/microblog -https://github.com/stevesark/microblog -Entry file: None -Scanned: 2016-10-19 09:21:30.491218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -d9w/webite -https://github.com/d9w/webite -Entry file: webite/app/app.py -Scanned: 2016-10-19 09:21:32.254931 -No vulnerabilities found. - - -michaelreid/blogful -https://github.com/michaelreid/blogful -Entry file: blogful/blog/__init__.py -Scanned: 2016-10-19 09:21:33.614240 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jizhang/recommend-api-mock -https://github.com/jizhang/recommend-api-mock -Entry file: recommend-api-mock/recommend_api_mock/__init__.py -Scanned: 2016-10-19 09:21:34.937842 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JKhublal/RideCloud -https://github.com/JKhublal/RideCloud -Entry file: RideCloud/ridecloud.py -Scanned: 2016-10-19 09:21:36.924174 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jsafrit/microblog -https://github.com/jsafrit/microblog -Entry file: None -Scanned: 2016-10-19 09:21:37.424771 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mtamer/Secure-Authentication -https://github.com/mtamer/Secure-Authentication -Entry file: Secure-Authentication/login/lab01/__init__.py -Scanned: 2016-10-19 09:21:41.722799 -No vulnerabilities found. - - -gbrennon/pycangaco -https://github.com/gbrennon/pycangaco -Entry file: pycangaco/rest/api/__init__.py -Scanned: 2016-10-19 09:21:45.359794 -No vulnerabilities found. - - -harry528tt/Menu_Management_System -https://github.com/harry528tt/Menu_Management_System -Entry file: Menu_Management_System/restaurant_menu_system.py -Scanned: 2016-10-19 09:21:46.691713 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -part1zano/paste -https://github.com/part1zano/paste -Entry file: paste/app.py -Scanned: 2016-10-19 09:21:48.238444 -No vulnerabilities found. - - -rahulkhengare/letschat -https://github.com/rahulkhengare/letschat -Entry file: letschat/app/__init__.py -Scanned: 2016-10-19 09:21:52.474726 -No vulnerabilities found. - - -theworkingcomputer/twc_web -https://github.com/theworkingcomputer/twc_web -Entry file: twc_web/src/lib/flask/sessions.py -Scanned: 2016-10-19 09:21:54.856052 -No vulnerabilities found. - - -mikehking/anniversary_endurance -https://github.com/mikehking/anniversary_endurance -Entry file: anniversary_endurance/app.py -Scanned: 2016-10-19 09:21:58.439945 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: anniversary_endurance/venv/lib/python2.7/genericpath.py - -prohorse/papmg -https://github.com/prohorse/papmg -Entry file: papmg/app/__init__.py -Scanned: 2016-10-19 09:21:59.805150 -No vulnerabilities found. - - -zd123/plot-app -https://github.com/zd123/plot-app -Entry file: plot-app/myapp.py -Scanned: 2016-10-19 09:22:01.487981 -No vulnerabilities found. - - -garettmd/microblog -https://github.com/garettmd/microblog -Entry file: None -Scanned: 2016-10-19 09:22:01.995842 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wkcn/ApplyClassRoom -https://github.com/wkcn/ApplyClassRoom -Entry file: None -Scanned: 2016-10-19 09:22:03.522496 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -davidcrosby/microblog -https://github.com/davidcrosby/microblog -Entry file: None -Scanned: 2016-10-19 09:22:04.006835 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -miguelgrinberg/flask-pycon2015 -https://github.com/miguelgrinberg/flask-pycon2015 -Entry file: flask-pycon2015/app.py -Scanned: 2016-10-19 09:22:06.463259 -No vulnerabilities found. - - -IBM-Bluemix/python-hello-world-flask -https://github.com/IBM-Bluemix/python-hello-world-flask -Entry file: python-hello-world-flask/hello.py -Scanned: 2016-10-19 09:22:22.864483 -No vulnerabilities found. - - -JackStouffer/cookiecutter-Flask-Foundation -https://github.com/JackStouffer/cookiecutter-Flask-Foundation -Entry file: cookiecutter-Flask-Foundation/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/__init__.py -Scanned: 2016-10-19 09:22:23.354794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjoseph246/flask -https://github.com/cjoseph246/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:22:26.688484 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -lrolaz/flask -https://github.com/lrolaz/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:22:27.609822 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jonparrott/flask-ferris-example -https://github.com/jonparrott/flask-ferris-example -Entry file: flask-ferris-example/main.py -Scanned: 2016-10-19 09:22:29.444237 -No vulnerabilities found. - - -getting-started-md/python-flask -https://github.com/getting-started-md/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 09:22:30.004926 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dukepure/flaskdemo -https://github.com/dukepure/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:22:30.551894 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cristobalrosa/flaskapps -https://github.com/cristobalrosa/flaskapps -Entry file: flaskapps/testgoogleauth/app/__init__.py -Scanned: 2016-10-19 09:22:32.078394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JoshuaAcosta/flasktaskr -https://github.com/JoshuaAcosta/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:22:32.577409 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JoshAddington/flaskplay -https://github.com/JoshAddington/flaskplay -Entry file: flaskplay/app.py -Scanned: 2016-10-19 09:22:35.549686 -No vulnerabilities found. - - -razage/flaskbooru -https://github.com/razage/flaskbooru -Entry file: flaskbooru/app/__init__.py -Scanned: 2016-10-19 09:22:36.934657 -No vulnerabilities found. - - -sgray10/flask-restful-auth-microservice -https://github.com/sgray10/flask-restful-auth-microservice -Entry file: flask-restful-auth-microservice/app/__init__.py -Scanned: 2016-10-19 09:22:38.154171 -No vulnerabilities found. - - -Munk801/FlaskTasks -https://github.com/Munk801/FlaskTasks -Entry file: FlaskTasks/views.py -Scanned: 2016-10-19 09:22:39.385736 -No vulnerabilities found. - - -NearTan/FlaskTutorial -https://github.com/NearTan/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 09:22:39.894412 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ThrowsException/FlaskHmac -https://github.com/ThrowsException/FlaskHmac -Entry file: FlaskHmac/app.py -Scanned: 2016-10-19 09:22:44.143807 -No vulnerabilities found. - - -vishwanath79/FlaskBlogger -https://github.com/vishwanath79/FlaskBlogger -Entry file: None -Scanned: 2016-10-19 09:22:48.694614 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -roblayton/flask-restful -https://github.com/roblayton/flask-restful -Entry file: flask-restful/flask_restful/__init__.py -Scanned: 2016-10-19 09:22:49.747261 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -callumStudent/learning-flask -https://github.com/callumStudent/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 09:22:50.280739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rncry/flask_service -https://github.com/rncry/flask_service -Entry file: flask_service/flask_service.py -Scanned: 2016-10-19 09:22:55.522910 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seyriz/flask-naver -https://github.com/seyriz/flask-naver -Entry file: flask-naver/test.py -Scanned: 2016-10-19 09:22:57.894817 -No vulnerabilities found. - - -Nevyn2345/flask_tutorial -https://github.com/Nevyn2345/flask_tutorial -Entry file: None -Scanned: 2016-10-19 09:23:04.740929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MissiaL/Flask-Monitoring -https://github.com/MissiaL/Flask-Monitoring -Entry file: Flask-Monitoring/server.py -Scanned: 2016-10-19 09:23:06.261531 -No vulnerabilities found. - - -jessicastewart-adroll/flask-experiments -https://github.com/jessicastewart-adroll/flask-experiments -Entry file: flask-experiments/8_1_heroku/hello.py -Scanned: 2016-10-19 09:23:07.639319 -No vulnerabilities found. - - -r0b0ticus/flask-kickstart -https://github.com/r0b0ticus/flask-kickstart -Entry file: flask-kickstart/kickstart.py -Scanned: 2016-10-19 09:23:08.859093 -No vulnerabilities found. - - -yowenter/flask-test -https://github.com/yowenter/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:23:09.861344 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -mjhea0/flask-blog -https://github.com/mjhea0/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:23:10.392351 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -QianPeili/flask_learning -https://github.com/QianPeili/flask_learning -Entry file: flask_learning/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-19 09:23:28.070847 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shrayasr/teaching-flask -https://github.com/shrayasr/teaching-flask -Entry file: teaching-flask/app.py -Scanned: 2016-10-19 09:23:29.312478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cponeill/DataFlask -https://github.com/cponeill/DataFlask -Entry file: DataFlask/app.py -Scanned: 2016-10-19 09:23:32.376652 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: DataFlask/env/lib/python2.7/genericpath.py - -Munk801/HelloFlask -https://github.com/Munk801/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 09:23:33.431989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iancarv/base-flask -https://github.com/iancarv/base-flask -Entry file: base-flask/app/__init__.py -Scanned: 2016-10-19 09:23:34.681922 -No vulnerabilities found. - - -lgaticaq/flask-tbk -https://github.com/lgaticaq/flask-tbk -Entry file: flask-tbk/index.py -Scanned: 2016-10-19 09:23:35.919053 -No vulnerabilities found. - - -bbertka/mitrend-flask -https://github.com/bbertka/mitrend-flask -Entry file: None -Scanned: 2016-10-19 09:23:37.171926 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bbertka/mitrend-flask. - -reniwiner/Register_flask -https://github.com/reniwiner/Register_flask -Entry file: Register_flask/Register.py -Scanned: 2016-10-19 09:23:38.427620 -No vulnerabilities found. - - -corbincavolt/flask-starter -https://github.com/corbincavolt/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 09:23:38.925617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aankit/flask_boilerplate -https://github.com/aankit/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-19 09:23:40.717302 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davidmb91/tuto-flask -https://github.com/davidmb91/tuto-flask -Entry file: tuto-flask/helloworld.py -Scanned: 2016-10-19 09:23:43.597228 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: tuto-flask/flask/lib/python2.7/genericpath.py - -ekiscrim/appimgurl -https://github.com/ekiscrim/appimgurl -Entry file: None -Scanned: 2016-10-19 09:23:48.038521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SmartMammal/Flask_hello_world -https://github.com/SmartMammal/Flask_hello_world -Entry file: Flask_hello_world/run.py -Scanned: 2016-10-19 09:23:49.060220 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_hello_world/env/lib/python2.7/genericpath.py - -mahbubme/Flask-Blog-Application -https://github.com/mahbubme/Flask-Blog-Application -Entry file: Flask-Blog-Application/app/__init__.py -Scanned: 2016-10-19 09:23:50.588543 -No vulnerabilities found. - - -kmorrison/flask-gae-cookiecutter -https://github.com/kmorrison/flask-gae-cookiecutter -Entry file: flask-gae-cookiecutter/{{cookiecutter.repo_name}}/main.py -Scanned: 2016-10-19 09:23:51.943336 -No vulnerabilities found. - - -abhaykoduru/flask-hello-world -https://github.com/abhaykoduru/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:23:52.471537 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -AnryYang/flask_easy_blog -https://github.com/AnryYang/flask_easy_blog -Entry file: flask_easy_blog/views.py -Scanned: 2016-10-19 09:23:54.285030 -No vulnerabilities found. - - -LoganRickert/Python-Flask-Example1 -https://github.com/LoganRickert/Python-Flask-Example1 -Entry file: Python-Flask-Example1/simple_app.py -Scanned: 2016-10-19 09:23:59.101719 -No vulnerabilities found. - - -TangentSolutions/Flask-Service-Base -https://github.com/TangentSolutions/Flask-Service-Base -Entry file: Flask-Service-Base/service.py -Scanned: 2016-10-19 09:24:02.472020 -No vulnerabilities found. - - -richardasaurus/flask-view-cache -https://github.com/richardasaurus/flask-view-cache -Entry file: flask-view-cache/src/tests/test_decorator.py -Scanned: 2016-10-19 09:24:07.684818 -No vulnerabilities found. - - -tathagatnawadia/Flask-Time-Travel -https://github.com/tathagatnawadia/Flask-Time-Travel -Entry file: Flask-Time-Travel/main.py -Scanned: 2016-10-19 09:24:14.358176 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sim13/Flask-Server-Practice -https://github.com/sim13/Flask-Server-Practice -Entry file: Flask-Server-Practice/hello.py -Scanned: 2016-10-19 09:24:29.951822 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Slickness/NewFlaskRandy -https://github.com/Slickness/NewFlaskRandy -Entry file: NewFlaskRandy/hello.py -Scanned: 2016-10-19 09:24:31.943721 -No vulnerabilities found. - - -tiagoamemiya/python-flask-app -https://github.com/tiagoamemiya/python-flask-app -Entry file: python-flask-app/app.py -Scanned: 2016-10-19 09:24:36.500546 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-app/venv/lib/python2.7/genericpath.py - -sebgoa/hostname -https://github.com/sebgoa/hostname -Entry file: hostname/hello.py -Scanned: 2016-10-19 09:24:38.188550 -No vulnerabilities found. - - -mcruger/MicroBlog -https://github.com/mcruger/MicroBlog -Entry file: None -Scanned: 2016-10-19 09:24:44.164877 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nkthakur48/helloflask -https://github.com/nkthakur48/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 09:24:44.676413 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -philmui/simpleflask -https://github.com/philmui/simpleflask -Entry file: simpleflask/flask-example.py -Scanned: 2016-10-19 09:24:45.894767 -No vulnerabilities found. - - -qianka/qianka-flaskext -https://github.com/qianka/qianka-flaskext -Entry file: qianka-flaskext/qianka/flaskext/sqlalchemy.py -Scanned: 2016-10-19 09:24:47.236873 -No vulnerabilities found. - - -rgisiger/HES-SO_smarthepia-flask-zwave -https://github.com/rgisiger/HES-SO_smarthepia-flask-zwave -Entry file: HES-SO_smarthepia-flask-zwave/flask-main.py -Scanned: 2016-10-19 09:24:49.092861 -No vulnerabilities found. - - -ekiscrim/blog -https://github.com/ekiscrim/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:24:49.609277 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lonefreak/simple-python-hello -https://github.com/lonefreak/simple-python-hello -Entry file: simple-python-hello/hello.py -Scanned: 2016-10-19 09:24:50.812693 -No vulnerabilities found. - - -MichaMucha/math_ws -https://github.com/MichaMucha/math_ws -Entry file: math_ws/math_ws.py -Scanned: 2016-10-19 09:24:52.024023 -No vulnerabilities found. - - -jwestgard/elk -https://github.com/jwestgard/elk -Entry file: elk/elk.py -Scanned: 2016-10-19 09:24:53.243414 -No vulnerabilities found. - - -lzha5646/info9117_flaskr-master -https://github.com/lzha5646/info9117_flaskr-master -Entry file: info9117_flaskr-master/flaskr.py -Scanned: 2016-10-19 09:24:54.588433 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dawedawe/feedpflaster -https://github.com/dawedawe/feedpflaster -Entry file: feedpflaster/app/__init__.py -Scanned: 2016-10-19 09:24:55.821152 -No vulnerabilities found. - - -sergeio/docker_multiflask_server -https://github.com/sergeio/docker_multiflask_server -Entry file: None -Scanned: 2016-10-19 09:24:57.351247 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sergeio/docker_multiflask_server. - -acannon828/CrowdCapellaBackend -https://github.com/acannon828/CrowdCapellaBackend -Entry file: None -Scanned: 2016-10-19 09:25:03.109768 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/acannon828/CrowdCapellaBackend. - -jinpark/imageresizer -https://github.com/jinpark/imageresizer -Entry file: imageresizer/app.py -Scanned: 2016-10-19 09:25:04.460817 -Vulnerability 1: -File: imageresizer/app.py - > User input at line 71, trigger word "get(": - img = resize(img, query_string.get('rwidth'), query_string.get('rheight')) -Reassigned in: - File: imageresizer/app.py - > Line 73: img = crop(img, query_string.get('cwidth'), query_string.get('cheight'), query_string.get('gravity')) - File: imageresizer/app.py - > Line 75: temp_file = NamedTemporaryFile(mode='w+b', suffix=img.format) - File: imageresizer/app.py - > Line 79: ret_MAYBE_FUNCTION_NAME = response -File: imageresizer/app.py - > reaches line 78, trigger word "send_file(": - response = send_file(temp_file,mimetype=img.mimetype) - -Vulnerability 2: -File: imageresizer/app.py - > User input at line 73, trigger word "get(": - img = crop(img, query_string.get('cwidth'), query_string.get('cheight'), query_string.get('gravity')) -Reassigned in: - File: imageresizer/app.py - > Line 71: img = resize(img, query_string.get('rwidth'), query_string.get('rheight')) - File: imageresizer/app.py - > Line 75: temp_file = NamedTemporaryFile(mode='w+b', suffix=img.format) - File: imageresizer/app.py - > Line 79: ret_MAYBE_FUNCTION_NAME = response -File: imageresizer/app.py - > reaches line 78, trigger word "send_file(": - response = send_file(temp_file,mimetype=img.mimetype) - - - -Jackshenonly/PartyBranch -https://github.com/Jackshenonly/PartyBranch -Entry file: PartyBranch/PartyBranch_sqlite.py -Scanned: 2016-10-19 09:25:05.778380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KajiMaster/mega-tut -https://github.com/KajiMaster/mega-tut -Entry file: mega-tut/app/__init__.py -Scanned: 2016-10-19 09:25:07.076343 -No vulnerabilities found. - - -JoeAcanfora/CrowdSite -https://github.com/JoeAcanfora/CrowdSite -Entry file: CrowdSite/flask_app.py -Scanned: 2016-10-19 09:25:08.469572 -Vulnerability 1: -File: CrowdSite/flask_app.py - > User input at line 805, trigger word ".data": - videoLength = int(str(form.videolength.data).split(':')[0]) * 60 + int(str(form.videolength.data).split(':')[1]) -Reassigned in: - File: CrowdSite/flask_app.py - > Line 798: videoLength = None - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 2: -File: CrowdSite/flask_app.py - > User input at line 812, trigger word ".data": - videoquality = form.videoquality.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: videoquality = None - File: CrowdSite/flask_app.py - > Line 810: videoquality = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 3: -File: CrowdSite/flask_app.py - > User input at line 818, trigger word ".data": - soldlevel = form.videoquality.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: soldlevel = None - File: CrowdSite/flask_app.py - > Line 816: soldlevel = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 4: -File: CrowdSite/flask_app.py - > User input at line 824, trigger word ".data": - othcompreference = form.othcompreference.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: othcompreference = None - File: CrowdSite/flask_app.py - > Line 822: othcompreference = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 5: -File: CrowdSite/flask_app.py - > User input at line 830, trigger word ".data": - othcompname = form.othcompname.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: othcompname = None - File: CrowdSite/flask_app.py - > Line 828: othcompname = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 6: -File: CrowdSite/flask_app.py - > User input at line 836, trigger word ".data": - founderschool = form.founderschool.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: founderschool = None - File: CrowdSite/flask_app.py - > Line 834: founderschool = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 7: -File: CrowdSite/flask_app.py - > User input at line 842, trigger word ".data": - founderschoolname = form.founderschoolname.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: founderschoolname = None - File: CrowdSite/flask_app.py - > Line 840: founderschoolname = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 8: -File: CrowdSite/flask_app.py - > User input at line 848, trigger word ".data": - founderstartup = form.founderstartup.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 806: founderstartup = None - File: CrowdSite/flask_app.py - > Line 846: founderstartup = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 9: -File: CrowdSite/flask_app.py - > User input at line 854, trigger word ".data": - founderstartupname = form.founderstartupname.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 852: founderstartupname = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 10: -File: CrowdSite/flask_app.py - > User input at line 860, trigger word ".data": - prototype = form.prototype.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 858: prototype = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 11: -File: CrowdSite/flask_app.py - > User input at line 866, trigger word ".data": - endorsement = form.endorsement.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 864: endorsement = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 12: -File: CrowdSite/flask_app.py - > User input at line 872, trigger word ".data": - endorsementname = form.endorsementname.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 870: endorsementname = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 13: -File: CrowdSite/flask_app.py - > User input at line 878, trigger word ".data": - music = form.music.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 876: music = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 14: -File: CrowdSite/flask_app.py - > User input at line 884, trigger word ".data": - animations = form.animations.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 882: animations = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 888: animations = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 890: animations = form.animations.data - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 15: -File: CrowdSite/flask_app.py - > User input at line 890, trigger word ".data": - animations = form.animations.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 882: animations = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 884: animations = form.animations.data - File: CrowdSite/flask_app.py - > Line 888: animations = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 16: -File: CrowdSite/flask_app.py - > User input at line 896, trigger word ".data": - patent = form.patent.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 894: patent = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 900: patent = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 902: patent = form.patent.data - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 17: -File: CrowdSite/flask_app.py - > User input at line 902, trigger word ".data": - patent = form.patent.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 894: patent = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 896: patent = form.patent.data - File: CrowdSite/flask_app.py - > Line 900: patent = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 18: -File: CrowdSite/flask_app.py - > User input at line 908, trigger word ".data": - rewardsmentioned = form.rewardsmentioned.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 906: rewardsmentioned = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 19: -File: CrowdSite/flask_app.py - > User input at line 914, trigger word ".data": - pitchfocusfounder = form.pitchfocusfounder.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 912: pitchfocusfounder = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 20: -File: CrowdSite/flask_app.py - > User input at line 920, trigger word ".data": - pitchfocustechnology = form.pitchfocustechnology.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 918: pitchfocustechnology = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 21: -File: CrowdSite/flask_app.py - > User input at line 926, trigger word ".data": - pitchfocuscustomer = form.pitchfocuscustomer.data -Reassigned in: - File: CrowdSite/flask_app.py - > Line 924: pitchfocuscustomer = c.fetchall()[0][0] - File: CrowdSite/flask_app.py - > Line 927: args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - -Vulnerability 22: -File: CrowdSite/flask_app.py - > User input at line 927, trigger word ".data": - args = (project_id, series_num, graded, str(form.graderPID.data) + regrade, videoquality, soldlevel, othcompreference, othcompname, founderschool, founderschoolname, founderstartup, founderstartupname, prototype, endorsement, endorsementname, music, animations, patent, rewardsmentioned, pitchfocusfounder, pitchfocustechnology, pitchfocuscustomer, videoLength) -File: CrowdSite/flask_app.py - > reaches line 952, trigger word "execute(": - c.execute('INSERT INTO video_grades_table (project_id, series_number, graded, graderPID, - videoquality, soldlevel, - othcompreference, othcompname, founderschool, founderschoolname, - founderstartup, founderstartupname, prototypes, endorsements, - endorsementname, music, animations, patent, - rewardsMentioned, pitchFounder, pitchTechnology, pitchCustomer, - videoLength) - VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, - %s, %s,%s,%s,%s,%s,%s,%s,%s,%s, - %s,%s,%s)', args) - - - -pzatrick/mini-weblog -https://github.com/pzatrick/mini-weblog -Entry file: mini-weblog/app/__init__.py -Scanned: 2016-10-19 09:25:20.509275 -No vulnerabilities found. - - -RobertoECruz/microblog -https://github.com/RobertoECruz/microblog -Entry file: None -Scanned: 2016-10-19 09:25:21.473445 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -peetonn/ndncon-www -https://github.com/peetonn/ndncon-www -Entry file: ndncon-www/app/main.py -Scanned: 2016-10-19 09:25:22.881432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aergener/nap_example -https://github.com/aergener/nap_example -Entry file: nap_example/app/__init__.py -Scanned: 2016-10-19 09:25:24.104942 -No vulnerabilities found. - - -nikiladonya/linter -https://github.com/nikiladonya/linter -Entry file: linter/app.py -Scanned: 2016-10-19 09:25:28.400687 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -green-latte/settle -https://github.com/green-latte/settle -Entry file: settle/config/application.py -Scanned: 2016-10-19 09:25:33.176620 -No vulnerabilities found. - - -a17levine/mint_server -https://github.com/a17levine/mint_server -Entry file: mint_server/mint_server.py -Scanned: 2016-10-19 09:25:34.443959 -No vulnerabilities found. - - -apulverizer/TweetMapping -https://github.com/apulverizer/TweetMapping -Entry file: TweetMapping/main.py -Scanned: 2016-10-19 09:25:39.135337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -girishramnani/pox-load-finder -https://github.com/girishramnani/pox-load-finder -Entry file: pox-load-finder/loadFinder.py -Scanned: 2016-10-19 09:25:40.480255 -No vulnerabilities found. - - -indico/flask-multipass -https://github.com/indico/flask-multipass -Entry file: flask-multipass/example/example.py -Scanned: 2016-10-19 09:25:49.312964 -No vulnerabilities found. - - -gsbmac/Flask -https://github.com/gsbmac/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:25:50.292094 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seppaleinen/flask -https://github.com/seppaleinen/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:25:51.179560 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -garylawler/flask -https://github.com/garylawler/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:25:52.041574 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -calthoff/flask-orientdb -https://github.com/calthoff/flask-orientdb -Entry file: flask-orientdb/test_flask_orientdb.py -Scanned: 2016-10-19 09:25:56.448041 -No vulnerabilities found. - - -pferreir/flask-spoilerplate -https://github.com/pferreir/flask-spoilerplate -Entry file: None -Scanned: 2016-10-19 09:25:58.238550 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pferreir/flask-spoilerplate. - -perseghini/Flask_Templates -https://github.com/perseghini/Flask_Templates -Entry file: Flask_Templates/flask_templates/__init__.py -Scanned: 2016-10-19 09:26:00.568138 -No vulnerabilities found. - - -syndbg/flask-robohash -https://github.com/syndbg/flask-robohash -Entry file: flask-robohash/tests/__init__.py -Scanned: 2016-10-19 09:26:05.930644 -No vulnerabilities found. - - -carsongee/flask-htpasswd -https://github.com/carsongee/flask-htpasswd -Entry file: flask-htpasswd/tests/test_htpasswd.py -Scanned: 2016-10-19 09:26:07.298564 -No vulnerabilities found. - - -douglasstarnes/mempy-flask-heroku -https://github.com/douglasstarnes/mempy-flask-heroku -Entry file: mempy-flask-heroku/main.py -Scanned: 2016-10-19 09:26:09.384219 -No vulnerabilities found. - - -xavierornelas/flaskr -https://github.com/xavierornelas/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:26:10.361568 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andrej2704/flaskplayground -https://github.com/andrej2704/flaskplayground -Entry file: flaskplayground/flaskAuth.py -Scanned: 2016-10-19 09:26:23.601034 -Vulnerability 1: -File: flaskplayground/flaskAuth.py - > User input at line 23, trigger word "form[": - POST_USERNAME = str(request.form['username']) -File: flaskplayground/flaskAuth.py - > reaches line 28, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - -Vulnerability 2: -File: flaskplayground/flaskAuth.py - > User input at line 24, trigger word "form[": - POST_PASSWORD = str(request.form['password']) -File: flaskplayground/flaskAuth.py - > reaches line 28, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - - - -havid0707/flasky -https://github.com/havid0707/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:26:24.099113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nnguyen012/flasktest -https://github.com/nnguyen012/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 09:26:24.609161 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jessyanjos/flaskr -https://github.com/jessyanjos/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:26:25.100605 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -superyaooo/flaskr -https://github.com/superyaooo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:26:26.591114 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -malini-kamalambal/flasksite -https://github.com/malini-kamalambal/flasksite -Entry file: flasksite/hello.py -Scanned: 2016-10-19 09:26:31.705588 -No vulnerabilities found. - - -ardian/flaskblog -https://github.com/ardian/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:26:34.206831 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -luna825/flasky -https://github.com/luna825/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:26:34.709693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -philmui/flasktemplate -https://github.com/philmui/flasktemplate -Entry file: flasktemplate/app/hello.py -Scanned: 2016-10-19 09:26:38.533750 -No vulnerabilities found. - - -JoshAddington/flaskplay -https://github.com/JoshAddington/flaskplay -Entry file: flaskplay/app.py -Scanned: 2016-10-19 09:26:41.540679 -No vulnerabilities found. - - -razage/flaskbooru -https://github.com/razage/flaskbooru -Entry file: flaskbooru/app/__init__.py -Scanned: 2016-10-19 09:26:42.906134 -No vulnerabilities found. - - -ronmcg/FlaskerNews -https://github.com/ronmcg/FlaskerNews -Entry file: FlaskerNews/FlaskerNews/FlaskerNews/__init__.py -Scanned: 2016-10-19 09:26:44.253141 -No vulnerabilities found. - - -BurningPixel/FlaskBin -https://github.com/BurningPixel/FlaskBin -Entry file: FlaskBin/flaskbin.py -Scanned: 2016-10-19 09:26:48.592115 -No vulnerabilities found. - - -michaelsaul/FlaskTutorial -https://github.com/michaelsaul/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 09:26:49.097995 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JishnuM/flask-angular -https://github.com/JishnuM/flask-angular -Entry file: flask-angular/app.py -Scanned: 2016-10-19 09:26:50.446000 -No vulnerabilities found. - - -sephioh/flask-learning -https://github.com/sephioh/flask-learning -Entry file: flask-learning/app.py -Scanned: 2016-10-19 09:26:51.656919 -No vulnerabilities found. - - -seyriz/flask-naver -https://github.com/seyriz/flask-naver -Entry file: flask-naver/test.py -Scanned: 2016-10-19 09:26:52.960589 -No vulnerabilities found. - - -yowenter/flask-test -https://github.com/yowenter/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:26:53.957246 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -mjhea0/flask-blog -https://github.com/mjhea0/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:26:54.473668 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -gbrennon/rest_flask -https://github.com/gbrennon/rest_flask -Entry file: rest_flask/api/__init__.py -Scanned: 2016-10-19 09:26:56.750209 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -alexgamas/flask-scaffolding -https://github.com/alexgamas/flask-scaffolding -Entry file: flask-scaffolding/app/__init__.py -Scanned: 2016-10-19 09:26:58.750785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -airondumael/python_flask -https://github.com/airondumael/python_flask -Entry file: None -Scanned: 2016-10-19 09:27:02.602628 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/airondumael/python_flask. - -cyb3rD/LearnFlask -https://github.com/cyb3rD/LearnFlask -Entry file: LearnFlask/app/__init__.py -Scanned: 2016-10-19 09:27:03.895852 -No vulnerabilities found. - - -ffosilva/flask-auth -https://github.com/ffosilva/flask-auth -Entry file: flask-auth/example.py -Scanned: 2016-10-19 09:27:05.218079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pkafei/flask-admin -https://github.com/pkafei/flask-admin -Entry file: flask-admin/app2.py -Scanned: 2016-10-19 09:27:07.442233 -No vulnerabilities found. - - -Chris-James/flask-springboard -https://github.com/Chris-James/flask-springboard -Entry file: flask-springboard/project/__init__.py -Scanned: 2016-10-19 09:27:08.798519 -No vulnerabilities found. - - -DeonHeyns/flask-generate -https://github.com/DeonHeyns/flask-generate -Entry file: flask-generate/scaffold/templates.py -Scanned: 2016-10-19 09:27:10.041014 -No vulnerabilities found. - - -mgushee/flask-catalog -https://github.com/mgushee/flask-catalog -Entry file: flask-catalog/app/flask_catalog.py -Scanned: 2016-10-19 09:27:12.378004 -No vulnerabilities found. - - -katembu/flask_tutorial -https://github.com/katembu/flask_tutorial -Entry file: None -Scanned: 2016-10-19 09:27:12.875818 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lhyfree/flask-admin -https://github.com/lhyfree/flask-admin -Entry file: flask-admin/index.py -Scanned: 2016-10-19 09:27:25.229235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -e9wikner/flask-mediashare -https://github.com/e9wikner/flask-mediashare -Entry file: flask-mediashare/mediashare/__init__.py -Scanned: 2016-10-19 09:27:27.402748 -No vulnerabilities found. - - -kchen1025/flask_test -https://github.com/kchen1025/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 09:27:28.433385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ekiscrim/appimgurl -https://github.com/ekiscrim/appimgurl -Entry file: None -Scanned: 2016-10-19 09:27:31.946798 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -skebix/flask-api-tutorial -https://github.com/skebix/flask-api-tutorial -Entry file: flask-api-tutorial/flask-api-tutorial.py -Scanned: 2016-10-19 09:27:36.306373 -No vulnerabilities found. - - -AnryYang/flask_easy_blog -https://github.com/AnryYang/flask_easy_blog -Entry file: flask_easy_blog/views.py -Scanned: 2016-10-19 09:27:39.031641 -No vulnerabilities found. - - -baolocdo/flask-proj-1 -https://github.com/baolocdo/flask-proj-1 -Entry file: flask-proj-1/app-folder/app.py -Scanned: 2016-10-19 09:27:42.287710 -No vulnerabilities found. - - -girishpandit88/python-flask-app -https://github.com/girishpandit88/python-flask-app -Entry file: python-flask-app/app.py -Scanned: 2016-10-19 09:27:43.827494 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-app/venv/lib/python2.7/genericpath.py - -omerkhan/flask-hello-world -https://github.com/omerkhan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:27:45.367467 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -yggi49/flask-wtf-polyglot -https://github.com/yggi49/flask-wtf-polyglot -Entry file: flask-wtf-polyglot/tests/test_html5.py -Scanned: 2016-10-19 09:27:52.492306 -No vulnerabilities found. - - -decodigoyalgomas/Flask-Tutorial-RPG-Manager -https://github.com/decodigoyalgomas/Flask-Tutorial-RPG-Manager -Entry file: Flask-Tutorial-RPG-Manager/app/__init__.py -Scanned: 2016-10-19 09:27:53.851111 -Vulnerability 1: -File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > User input at line 20, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > Line 25: existing_username = User.get(username=username) - File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > Line 31: user = User(username=username, name=name, email=email, password=password) -File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > reaches line 27, trigger word "flash(": - flash('Username {} already existst in the database'.format(username), 'error') - - - -kevcoxe/Simple-Flask-App -https://github.com/kevcoxe/Simple-Flask-App -Entry file: Simple-Flask-App/app.py -Scanned: 2016-10-19 09:27:57.766316 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Simple-Flask-App/venv/lib/python2.7/genericpath.py - -mattmakai/plapi-prototype-flask -https://github.com/mattmakai/plapi-prototype-flask -Entry file: plapi-prototype-flask/plapi/__init__.py -Scanned: 2016-10-19 09:27:59.167995 -No vulnerabilities found. - - -syndbg/flask-url-shortener -https://github.com/syndbg/flask-url-shortener -Entry file: flask-url-shortener/url_shortener/app.py -Scanned: 2016-10-19 09:28:00.407389 -Vulnerability 1: -File: flask-url-shortener/url_shortener/app.py - > User input at line 35, trigger word "get(": - page = data.get('page', DEFAULT_PAGE) -Reassigned in: - File: flask-url-shortener/url_shortener/app.py - > Line 38: db_result = db.Url.objects.paginate(page=page, per_page=per_page) - File: flask-url-shortener/url_shortener/app.py - > Line 39: output = [apify(r) for r in db_result] - File: flask-url-shortener/url_shortener/app.py - > Line 43: db_result = db.Url(data) - File: flask-url-shortener/url_shortener/app.py - > Line 45: output = apify(db_result) -File: flask-url-shortener/url_shortener/app.py - > reaches line 47, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(output), status_code) - -Vulnerability 2: -File: flask-url-shortener/url_shortener/app.py - > User input at line 36, trigger word "get(": - per_page = data.get('per_page', DEFAULT_PER_PAGE) -Reassigned in: - File: flask-url-shortener/url_shortener/app.py - > Line 38: db_result = db.Url.objects.paginate(page=page, per_page=per_page) - File: flask-url-shortener/url_shortener/app.py - > Line 39: output = [apify(r) for r in db_result] - File: flask-url-shortener/url_shortener/app.py - > Line 43: db_result = db.Url(data) - File: flask-url-shortener/url_shortener/app.py - > Line 45: output = apify(db_result) -File: flask-url-shortener/url_shortener/app.py - > reaches line 47, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(output), status_code) - - - -Matawhite/Hello-with-Flask -https://github.com/Matawhite/Hello-with-Flask -Entry file: Hello-with-Flask/app.py -Scanned: 2016-10-19 09:28:01.641629 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Andygmb/Generic-Flask-app -https://github.com/Andygmb/Generic-Flask-app -Entry file: Generic-Flask-app/application/__init__.py -Scanned: 2016-10-19 09:28:03.347694 -No vulnerabilities found. - - -EricSchles/high_school_flask -https://github.com/EricSchles/high_school_flask -Entry file: high_school_flask/basics/app.py -Scanned: 2016-10-19 09:28:04.685378 -No vulnerabilities found. - - -andreashuebner/flask_hello_world -https://github.com/andreashuebner/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:28:05.185937 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andreashuebner/flask_hello_world. - -baolocdo/flask-proj-1-staging -https://github.com/baolocdo/flask-proj-1-staging -Entry file: flask-proj-1-staging/app-folder/app.py -Scanned: 2016-10-19 09:28:06.403838 -No vulnerabilities found. - - -sebgoa/hostname -https://github.com/sebgoa/hostname -Entry file: hostname/hello.py -Scanned: 2016-10-19 09:28:09.138166 -No vulnerabilities found. - - -openlabs/python-cloudfront-streaming -https://github.com/openlabs/python-cloudfront-streaming -Entry file: python-cloudfront-streaming/app.py -Scanned: 2016-10-19 09:28:10.364190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -philmui/simpleflask -https://github.com/philmui/simpleflask -Entry file: simpleflask/flask-example.py -Scanned: 2016-10-19 09:28:11.596344 -No vulnerabilities found. - - -qianka/qianka-flaskext -https://github.com/qianka/qianka-flaskext -Entry file: qianka-flaskext/qianka/flaskext/sqlalchemy.py -Scanned: 2016-10-19 09:28:16.128987 -No vulnerabilities found. - - -DavidGrey/remindify -https://github.com/DavidGrey/remindify -Entry file: remindify/main.py -Scanned: 2016-10-19 09:28:18.159703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EricSchles/message_passing -https://github.com/EricSchles/message_passing -Entry file: message_passing/receive_app/app.py -Scanned: 2016-10-19 09:28:26.425096 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andreashuebner/blog -https://github.com/andreashuebner/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:28:26.908943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scheung38/myPinClone -https://github.com/scheung38/myPinClone -Entry file: None -Scanned: 2016-10-19 09:28:28.691283 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/scheung38/myPinClone. - -dawedawe/feedpflaster -https://github.com/dawedawe/feedpflaster -Entry file: feedpflaster/app/__init__.py -Scanned: 2016-10-19 09:28:29.978912 -No vulnerabilities found. - - -salmansaleemkma/LogisticsAPI -https://github.com/salmansaleemkma/LogisticsAPI -Entry file: LogisticsAPI/web.py -Scanned: 2016-10-19 09:28:36.010359 -No vulnerabilities found. - - -RobertoECruz/microblog -https://github.com/RobertoECruz/microblog -Entry file: None -Scanned: 2016-10-19 09:28:36.583803 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rafaschein/manager -https://github.com/rafaschein/manager -Entry file: manager/app.py -Scanned: 2016-10-19 09:28:39.710931 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: manager/wtf_env/lib/python2.7/genericpath.py - -puhrez/PollSystem -https://github.com/puhrez/PollSystem -Entry file: PollSystem/app/__init__.py -Scanned: 2016-10-19 09:28:41.188225 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brunns/passgen -https://github.com/brunns/passgen -Entry file: passgen/index.py -Scanned: 2016-10-19 09:28:42.568848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bonemind/QuickRest -https://github.com/Bonemind/QuickRest -Entry file: QuickRest/test/__main__.py -Scanned: 2016-10-19 09:28:43.815873 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -peveloper/twizoo-internship-test -https://github.com/peveloper/twizoo-internship-test -Entry file: twizoo-internship-test/app/__init__.py -Scanned: 2016-10-19 09:28:46.179117 -No vulnerabilities found. - - -GinSmile/RobotSAE -https://github.com/GinSmile/RobotSAE -Entry file: RobotSAE/1/myApp.py -Scanned: 2016-10-19 09:28:47.659146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -majapklm/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python -https://github.com/majapklm/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python -Entry file: None -Scanned: 2016-10-19 09:28:50.185440 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/majapklm/Github-repo-and-Twitter-Tweets-extractor-using-ajax-and-flask-python. - -colembolos/Proyecto_ATI -https://github.com/colembolos/Proyecto_ATI -Entry file: Proyecto_ATI/Proyecto_ATI/__init__.py -Scanned: 2016-10-19 09:28:58.972625 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bestvibes/neo4j-social-network -https://github.com/bestvibes/neo4j-social-network -Entry file: neo4j-social-network/env/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:29:06.410627 -No vulnerabilities found. - - -Slottet/slottet-members -https://github.com/Slottet/slottet-members -Entry file: slottet-members/app.py -Scanned: 2016-10-19 09:29:08.009883 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -0victor0/api_demo -https://github.com/0victor0/api_demo -Entry file: api_demo/application.py -Scanned: 2016-10-19 09:29:09.393948 -No vulnerabilities found. - - -barm4ley/mfj -https://github.com/barm4ley/mfj -Entry file: mfj/app/__init__.py -Scanned: 2016-10-19 09:29:10.832917 -No vulnerabilities found. - - -bcalmeida/voten -https://github.com/bcalmeida/voten -Entry file: voten/app.py -Scanned: 2016-10-19 09:29:12.780897 -No vulnerabilities found. - - -apulverizer/TweetMapping -https://github.com/apulverizer/TweetMapping -Entry file: TweetMapping/main.py -Scanned: 2016-10-19 09:29:13.288340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marco-hoyer/python-quickstart-example-api -https://github.com/marco-hoyer/python-quickstart-example-api -Entry file: python-quickstart-example-api/src/main/python/instance_inventory/api.py -Scanned: 2016-10-19 09:29:14.616113 -No vulnerabilities found. - - -eeWill/learnSomeWords -https://github.com/eeWill/learnSomeWords -Entry file: learnSomeWords/__init__.py -Scanned: 2016-10-19 09:29:15.855424 -No vulnerabilities found. - - -vodoman123/mytv -https://github.com/vodoman123/mytv -Entry file: mytv/app/__init__.py -Scanned: 2016-10-19 09:29:23.959145 -No vulnerabilities found. - - -Hardtack/Flask-aiohttp -https://github.com/Hardtack/Flask-aiohttp -Entry file: Flask-aiohttp/examples/app.py -Scanned: 2016-10-19 09:29:26.559367 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -danriti/nginx-gunicorn-flask -https://github.com/danriti/nginx-gunicorn-flask -Entry file: nginx-gunicorn-flask/app/hello.py -Scanned: 2016-10-19 09:29:27.825892 -No vulnerabilities found. - - -larrycai/codingwithme-flask -https://github.com/larrycai/codingwithme-flask -Entry file: codingwithme-flask/exer5/app.py -Scanned: 2016-10-19 09:29:29.180130 -No vulnerabilities found. - - -cimomo/hello-flask -https://github.com/cimomo/hello-flask -Entry file: hello-flask/hello-flask/app.py -Scanned: 2016-10-19 09:29:30.623215 -No vulnerabilities found. - - -vineetchawla/Flask -https://github.com/vineetchawla/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:29:31.133903 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shahbaziiita/Flask -https://github.com/shahbaziiita/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:29:31.673156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danriti/gunicorn-flask -https://github.com/danriti/gunicorn-flask -Entry file: gunicorn-flask/app/hello.py -Scanned: 2016-10-19 09:29:33.606859 -No vulnerabilities found. - - -atbaker/docker-flask -https://github.com/atbaker/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-19 09:29:34.873591 -No vulnerabilities found. - - -jpf/okta-pysaml2-example -https://github.com/jpf/okta-pysaml2-example -Entry file: okta-pysaml2-example/app.py -Scanned: 2016-10-19 09:29:36.449906 -Vulnerability 1: -File: okta-pysaml2-example/app.py - > User input at line 180, trigger word "form[": - url = request.form['RelayState'] -Reassigned in: - File: okta-pysaml2-example/app.py - > Line 175: url = url_for('user') -File: okta-pysaml2-example/app.py - > reaches line 181, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -carsongee/flask-htpasswd -https://github.com/carsongee/flask-htpasswd -Entry file: flask-htpasswd/tests/test_htpasswd.py -Scanned: 2016-10-19 09:29:39.309656 -No vulnerabilities found. - - -psykzz/flask-rollbar -https://github.com/psykzz/flask-rollbar -Entry file: flask-rollbar/tests/main_test.py -Scanned: 2016-10-19 09:29:42.681998 -No vulnerabilities found. - - -polaris340/flask-skeleton -https://github.com/polaris340/flask-skeleton -Entry file: None -Scanned: 2016-10-19 09:29:43.185866 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/polaris340/flask-skeleton. - -nnguyen012/flasktest -https://github.com/nnguyen012/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 09:29:47.164421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmseba/flaskr -https://github.com/vmseba/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:29:48.675270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jykntr/flaskapp -https://github.com/jykntr/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 09:29:51.175974 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -binarycanary/flaskysockets -https://github.com/binarycanary/flaskysockets -Entry file: flaskysockets/server.py -Scanned: 2016-10-19 09:29:54.634672 -No vulnerabilities found. - - -danfromisrael/TodoApp-Flask-Angular -https://github.com/danfromisrael/TodoApp-Flask-Angular -Entry file: TodoApp-Flask-Angular/Server/Infrastructure/Framework/AppStarter.py -Scanned: 2016-10-19 09:30:02.596622 -No vulnerabilities found. - - -Petermck8806/FlaskTutorial -https://github.com/Petermck8806/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 09:30:08.137337 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kanr/FlaskTutorial -https://github.com/Kanr/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 09:30:09.633690 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jjk425/FlaskFun -https://github.com/jjk425/FlaskFun -Entry file: FlaskFun/app.py -Scanned: 2016-10-19 09:30:11.870038 -Vulnerability 1: -File: FlaskFun/app.py - > User input at line 20, trigger word "form[": - POST_USERNAME = str(request.form['username']) -Reassigned in: - File: FlaskFun/app.py - > Line 30: session['username'] = POST_USERNAME - File: FlaskFun/app.py - > Line 29: session['logged_in'] = True -File: FlaskFun/app.py - > reaches line 25, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - -Vulnerability 2: -File: FlaskFun/app.py - > User input at line 21, trigger word "form[": - POST_PASSWORD = str(request.form['password']) -File: FlaskFun/app.py - > reaches line 25, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - - - -michaelsaul/FlaskTutorial -https://github.com/michaelsaul/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 09:30:12.357749 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -coneycode/flask-mongo -https://github.com/coneycode/flask-mongo -Entry file: flask-mongo/__init__.py -Scanned: 2016-10-19 09:30:16.251865 -No vulnerabilities found. - - -okbm/flask_json -https://github.com/okbm/flask_json -Entry file: flask_json/flask_json/__init__.py -Scanned: 2016-10-19 09:30:17.579014 -No vulnerabilities found. - - -petrgru/flask-karty -https://github.com/petrgru/flask-karty -Entry file: flask-karty/src/app.py -Scanned: 2016-10-19 09:30:18.081799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kristoh/flask-intro -https://github.com/kristoh/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:30:18.575846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jali/flask-urlshortener -https://github.com/jali/flask-urlshortener -Entry file: flask-urlshortener/coreapp/__init__.py -Scanned: 2016-10-19 09:30:20.622801 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Ecoste/MouseFlask -https://github.com/Ecoste/MouseFlask -Entry file: MouseFlask/server.py -Scanned: 2016-10-19 09:30:27.067910 -No vulnerabilities found. - - -Chitrank-Dixit/Chitrank-flask -https://github.com/Chitrank-Dixit/Chitrank-flask -Entry file: None -Scanned: 2016-10-19 09:30:30.174725 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -iamvery/flask-tutorial -https://github.com/iamvery/flask-tutorial -Entry file: None -Scanned: 2016-10-19 09:30:30.729557 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adilmoujahid/flask-poll -https://github.com/adilmoujahid/flask-poll -Entry file: None -Scanned: 2016-10-19 09:30:32.647558 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adilmoujahid/flask-poll. - -kelsdutton/herokuapp-flask -https://github.com/kelsdutton/herokuapp-flask -Entry file: herokuapp-flask/microblog-version-0.6/app/__init__.py -Scanned: 2016-10-19 09:30:33.992578 -No vulnerabilities found. - - -msadig/flask-picedit -https://github.com/msadig/flask-picedit -Entry file: flask-picedit/app.py -Scanned: 2016-10-19 09:30:35.885648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caWhite/yum-flask -https://github.com/caWhite/yum-flask -Entry file: yum-flask/app/__init__.py -Scanned: 2016-10-19 09:30:37.145499 -No vulnerabilities found. - - -emilecaron/flask-errors -https://github.com/emilecaron/flask-errors -Entry file: flask-errors/app.py -Scanned: 2016-10-19 09:30:38.828238 -No vulnerabilities found. - - -henrykh/flask_treehouse -https://github.com/henrykh/flask_treehouse -Entry file: flask_treehouse/social_app/app.py -Scanned: 2016-10-19 09:30:40.203494 -No vulnerabilities found. - - -AislingBai/flask-quickstart -https://github.com/AislingBai/flask-quickstart -Entry file: flask-quickstart/flask-quickstart/cli.py -Scanned: 2016-10-19 09:30:41.540391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyb3rD/LearnFlask -https://github.com/cyb3rD/LearnFlask -Entry file: LearnFlask/app/__init__.py -Scanned: 2016-10-19 09:30:42.743271 -No vulnerabilities found. - - -Chris-James/flask-springboard -https://github.com/Chris-James/flask-springboard -Entry file: flask-springboard/project/__init__.py -Scanned: 2016-10-19 09:30:44.064847 -No vulnerabilities found. - - -dyerrington/Flask-Spotify -https://github.com/dyerrington/Flask-Spotify -Entry file: Flask-Spotify/serve.py -Scanned: 2016-10-19 09:30:47.975342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robinrob/flask-hello -https://github.com/robinrob/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 09:30:57.440922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fedcuit/awesome-flask -https://github.com/fedcuit/awesome-flask -Entry file: awesome-flask/app/__init__.py -Scanned: 2016-10-19 09:30:58.780319 -No vulnerabilities found. - - -DevendraDesale/flask-intro -https://github.com/DevendraDesale/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:30:59.285405 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulinux/python-flask -https://github.com/rahulinux/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 09:30:59.800526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaredvann/flask-base -https://github.com/jaredvann/flask-base -Entry file: None -Scanned: 2016-10-19 09:31:01.519535 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jaredvann/flask-base. - -ProfessionalIT/estudos_flask -https://github.com/ProfessionalIT/estudos_flask -Entry file: estudos_flask/tutorial_oficial/hello.py -Scanned: 2016-10-19 09:31:03.058906 -No vulnerabilities found. - - -jean-petitclerc/Flask_tut -https://github.com/jean-petitclerc/Flask_tut -Entry file: Flask_tut/photos.py -Scanned: 2016-10-19 09:31:04.441681 -No vulnerabilities found. - - -kchen1025/flask_test -https://github.com/kchen1025/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 09:31:10.005036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -promisejohn/todo.flask -https://github.com/promisejohn/todo.flask -Entry file: None -Scanned: 2016-10-19 09:31:12.315836 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/promisejohn/todo.flask. - -fidiego/flask-boilerplate -https://github.com/fidiego/flask-boilerplate -Entry file: flask-boilerplate/application.py -Scanned: 2016-10-19 09:31:13.534910 -No vulnerabilities found. - - -AllisonQ/Micro-blog -https://github.com/AllisonQ/Micro-blog -Entry file: Micro-blog/app/__init__.py -Scanned: 2016-10-19 09:31:14.847268 -No vulnerabilities found. - - -lrmrthomas/Flask_Microblog_MT -https://github.com/lrmrthomas/Flask_Microblog_MT -Entry file: None -Scanned: 2016-10-19 09:31:20.633877 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Enapiuz/MyWebScrapingLearning -https://github.com/Enapiuz/MyWebScrapingLearning -Entry file: MyWebScrapingLearning/scrapingLearn03/scrapingLearn03.py -Scanned: 2016-10-19 09:31:22.082653 -No vulnerabilities found. - - -Gufgit/flask-hello-world -https://github.com/Gufgit/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:31:23.111289 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -skebix/flask-api-tutorial -https://github.com/skebix/flask-api-tutorial -Entry file: flask-api-tutorial/flask-api-tutorial.py -Scanned: 2016-10-19 09:31:28.951492 -No vulnerabilities found. - - -cmoscardi/flask_ci_test -https://github.com/cmoscardi/flask_ci_test -Entry file: flask_ci_test/app.py -Scanned: 2016-10-19 09:31:30.360973 -No vulnerabilities found. - - -Ottermad/Flask-Mega-Tutorial -https://github.com/Ottermad/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/app/__init__.py -Scanned: 2016-10-19 09:31:30.864360 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -omerkhan/flask-hello-world -https://github.com/omerkhan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:31:32.392546 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -leejaedus/Flask-SocialAPI -https://github.com/leejaedus/Flask-SocialAPI -Entry file: Flask-SocialAPI/test/facebook.py -Scanned: 2016-10-19 09:31:33.731790 -No vulnerabilities found. - - -decodigoyalgomas/Flask-Tutorial-RPG-Manager -https://github.com/decodigoyalgomas/Flask-Tutorial-RPG-Manager -Entry file: Flask-Tutorial-RPG-Manager/app/__init__.py -Scanned: 2016-10-19 09:31:35.061480 -Vulnerability 1: -File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > User input at line 20, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > Line 25: existing_username = User.get(username=username) - File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > Line 31: user = User(username=username, name=name, email=email, password=password) -File: Flask-Tutorial-RPG-Manager/app/entry/views.py - > reaches line 27, trigger word "flash(": - flash('Username {} already existst in the database'.format(username), 'error') - - - -johanneshhl/johanness-flask-boilerplate -https://github.com/johanneshhl/johanness-flask-boilerplate -Entry file: johanness-flask-boilerplate/application/__init__.py -Scanned: 2016-10-19 09:31:37.138764 -Vulnerability 1: -File: johanness-flask-boilerplate/application/views/user.py - > User input at line 61, trigger word "form[": - loggedIn = tryLogin(request.form['username'], request.form['password'], request.form['KeepMeLoggedIn'], request.form['authenticity_token']) -File: johanness-flask-boilerplate/application/views/user.py - > reaches line 64, trigger word "flash(": - flash(loggedIn[1], loggedIn[2]) - -Vulnerability 2: -File: johanness-flask-boilerplate/application/views/user.py - > User input at line 61, trigger word "form[": - loggedIn = tryLogin(request.form['username'], request.form['password'], request.form['KeepMeLoggedIn'], request.form['authenticity_token']) -File: johanness-flask-boilerplate/application/views/user.py - > reaches line 66, trigger word "flash(": - flash(loggedIn[1]) - -Vulnerability 3: -File: johanness-flask-boilerplate/application/views/user.py - > User input at line 130, trigger word "form[": - theUser = tryCreateUser(request.form['username'], request.form['userPassword'], request.form['KeepMeLoggedIn'], request.form['authenticity_token']) -File: johanness-flask-boilerplate/application/views/user.py - > reaches line 133, trigger word "flash(": - flash(theUser[1], theUser[2]) - -Vulnerability 4: -File: johanness-flask-boilerplate/application/views/user.py - > User input at line 130, trigger word "form[": - theUser = tryCreateUser(request.form['username'], request.form['userPassword'], request.form['KeepMeLoggedIn'], request.form['authenticity_token']) -File: johanness-flask-boilerplate/application/views/user.py - > reaches line 135, trigger word "flash(": - flash(theUser[1]) - - - -AmI-2015/Flask-ex1 -https://github.com/AmI-2015/Flask-ex1 -Entry file: Flask-ex1/FlaskEx1/src/ex1_v3.py -Scanned: 2016-10-19 09:31:38.520828 -No vulnerabilities found. - - -davidnieder/flask-blueprint-skeleton -https://github.com/davidnieder/flask-blueprint-skeleton -Entry file: flask-blueprint-skeleton/app/__init__.py -Scanned: 2016-10-19 09:31:39.764907 -No vulnerabilities found. - - -superyaooo/Flask_intro_learn -https://github.com/superyaooo/Flask_intro_learn -Entry file: Flask_intro_learn/app.py -Scanned: 2016-10-19 09:31:43.713328 -No vulnerabilities found. - - -garyherd/flask-hello-world -https://github.com/garyherd/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:31:44.230647 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Hellemos/app-flask-test -https://github.com/Hellemos/app-flask-test -Entry file: app-flask-test/app.py -Scanned: 2016-10-19 09:31:49.249986 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: app-flask-test/flask-env/lib/python2.7/genericpath.py - -ashiver/flask_hello_world -https://github.com/ashiver/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:31:50.105397 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ashiver/flask_hello_world. - -lpil/teaching-with-flask -https://github.com/lpil/teaching-with-flask -Entry file: teaching-with-flask/001.py -Scanned: 2016-10-19 09:31:51.429026 -No vulnerabilities found. - - -randallprince/com.randallprince.flask -https://github.com/randallprince/com.randallprince.flask -Entry file: None -Scanned: 2016-10-19 09:32:00.784233 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/randallprince/com.randallprince.flask. - -samho/flasky_study -https://github.com/samho/flasky_study -Entry file: flasky_study/app/__init__.py -Scanned: 2016-10-19 09:32:02.204206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevlab/flasktaskr_project -https://github.com/kevlab/flasktaskr_project -Entry file: flasktaskr_project/project/__init__.py -Scanned: 2016-10-19 09:32:03.563206 -No vulnerabilities found. - - -matthew-shaw/microblog -https://github.com/matthew-shaw/microblog -Entry file: None -Scanned: 2016-10-19 09:32:04.069437 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -khachikyan/PenPoint -https://github.com/khachikyan/PenPoint -Entry file: PenPoint/app.py -Scanned: 2016-10-19 09:32:08.852149 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -porterjamesj/echo -https://github.com/porterjamesj/echo -Entry file: echo/echo.py -Scanned: 2016-10-19 09:32:12.062213 -No vulnerabilities found. - - -LlamaComedian/microblog -https://github.com/LlamaComedian/microblog -Entry file: None -Scanned: 2016-10-19 09:32:12.560280 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dstarner15/alumiboti -https://github.com/dstarner15/alumiboti -Entry file: alumiboti/flask/lib/python2.7/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 09:32:18.915700 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ericwang110/flasky-eric -https://github.com/ericwang110/flasky-eric -Entry file: flasky-eric/app/__init__.py -Scanned: 2016-10-19 09:32:23.372241 -No vulnerabilities found. - - -thatarchguy/FFA-CTF-Scoring-Engine-Flask -https://github.com/thatarchguy/FFA-CTF-Scoring-Engine-Flask -Entry file: FFA-CTF-Scoring-Engine-Flask/ctfscore/__init__.py -Scanned: 2016-10-19 09:32:24.717915 -Vulnerability 1: -File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > User input at line 16, trigger word ".data": - flag = models.Flags.query.filter_by(flag=InputFlagForm.flag.data).first() -Reassigned in: - File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > Line 29: submission = models.Completed(user=user, flag_id=flag.id) -File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > reaches line 32, trigger word "flash(": - flash('Flag ' + flag.flag + ' Submitted for User ' + user) - -Vulnerability 2: -File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > User input at line 23, trigger word ".data": - user = InputFlagForm.user.data -Reassigned in: - File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > Line 29: submission = models.Completed(user=user, flag_id=flag.id) -File: FFA-CTF-Scoring-Engine-Flask/ctfscore/views.py - > reaches line 32, trigger word "flash(": - flash('Flag ' + flag.flag + ' Submitted for User ' + user) - - - -andreashuebner/blog -https://github.com/andreashuebner/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 09:32:25.229846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scheung38/myPinClone -https://github.com/scheung38/myPinClone -Entry file: None -Scanned: 2016-10-19 09:32:25.723681 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/scheung38/myPinClone. - -krypticmind/km-static-minimal -https://github.com/krypticmind/km-static-minimal -Entry file: km-static-minimal/generator.py -Scanned: 2016-10-19 09:32:26.970032 -No vulnerabilities found. - - -astrodsg/coffee_clicker -https://github.com/astrodsg/coffee_clicker -Entry file: coffee_clicker/coffee_clicker/__init__.py -Scanned: 2016-10-19 09:32:28.279131 -No vulnerabilities found. - - -alvgustavoe/pot_flaskrestful-ndb -https://github.com/alvgustavoe/pot_flaskrestful-ndb -Entry file: pot_flaskrestful-ndb/api/main.py -Scanned: 2016-10-19 09:32:31.101851 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eashan/TweetMin -https://github.com/eashan/TweetMin -Entry file: TweetMin/app.py -Scanned: 2016-10-19 09:32:33.075647 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alecalve/py-fake-cas -https://github.com/alecalve/py-fake-cas -Entry file: py-fake-cas/app.py -Scanned: 2016-10-19 09:32:34.366741 -No vulnerabilities found. - - -JanellePearl/cs3130_Assignment7 -https://github.com/JanellePearl/cs3130_Assignment7 -Entry file: cs3130_Assignment7/db_flask.py -Scanned: 2016-10-19 09:32:35.730196 -No vulnerabilities found. - - -mehtapgundogan/Tellal -https://github.com/mehtapgundogan/Tellal -Entry file: None -Scanned: 2016-10-19 09:32:40.214998 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Necior/cukrowy-server -https://github.com/Necior/cukrowy-server -Entry file: cukrowy-server/server.py -Scanned: 2016-10-19 09:32:41.529046 -No vulnerabilities found. - - -leosquared/leo_geocoder -https://github.com/leosquared/leo_geocoder -Entry file: leo_geocoder/geocoder_app.py -Scanned: 2016-10-19 09:32:42.908503 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AndreasDL/mediacenter-backend -https://github.com/AndreasDL/mediacenter-backend -Entry file: mediacenter-backend/api.py -Scanned: 2016-10-19 09:32:44.292884 -No vulnerabilities found. - - -lfarah/Python-Rest -https://github.com/lfarah/Python-Rest -Entry file: Python-Rest/server.py -Scanned: 2016-10-19 09:32:45.718114 -No vulnerabilities found. - - -FuretBicephale/CAR_FuretEE -https://github.com/FuretBicephale/CAR_FuretEE -Entry file: CAR_FuretEE/app/__init__.py -Scanned: 2016-10-19 09:32:47.918953 -No vulnerabilities found. - - -skozlovf/flask-json -https://github.com/skozlovf/flask-json -Entry file: flask-json/examples/example4.py -Scanned: 2016-10-19 09:32:50.815424 -No vulnerabilities found. - - -larrycai/codingwithme-flask -https://github.com/larrycai/codingwithme-flask -Entry file: codingwithme-flask/exer5/app.py -Scanned: 2016-10-19 09:32:52.175151 -No vulnerabilities found. - - -cimomo/hello-flask -https://github.com/cimomo/hello-flask -Entry file: hello-flask/hello-flask/app.py -Scanned: 2016-10-19 09:32:53.444426 -No vulnerabilities found. - - -plotly/dash -https://github.com/plotly/dash -Entry file: None -Scanned: 2016-10-19 09:33:02.947652 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/plotly/dash. - -attekarhunen/flask -https://github.com/attekarhunen/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:33:03.836988 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -vineetchawla/Flask -https://github.com/vineetchawla/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:33:04.333088 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -XuYuanzhen/mysql_flask -https://github.com/XuYuanzhen/mysql_flask -Entry file: mysql_flask/app-mysql.py -Scanned: 2016-10-19 09:33:10.377056 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: mysql_flask/venv/lib/python2.6/genericpath.py - -XuYuanzhen/redis_flask -https://github.com/XuYuanzhen/redis_flask -Entry file: redis_flask/app-redis.py -Scanned: 2016-10-19 09:33:14.311997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jefurry/flask-sessions -https://github.com/jefurry/flask-sessions -Entry file: flask-sessions/web.py -Scanned: 2016-10-19 09:33:14.822525 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jaza/flask-s3-save-example -https://github.com/Jaza/flask-s3-save-example -Entry file: None -Scanned: 2016-10-19 09:33:16.238130 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jaza/flask-s3-save-example. - -psykzz/flask-rollbar -https://github.com/psykzz/flask-rollbar -Entry file: flask-rollbar/tests/main_test.py -Scanned: 2016-10-19 09:33:18.095027 -No vulnerabilities found. - - -anbaoyong/flask_add_dns -https://github.com/anbaoyong/flask_add_dns -Entry file: flask_add_dns/login.py -Scanned: 2016-10-19 09:33:21.379317 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -falfaro/flask-example -https://github.com/falfaro/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 09:33:25.901765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcsrainbow/flaskdemo -https://github.com/mcsrainbow/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:33:26.423456 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kba977/flasky -https://github.com/kba977/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:33:26.912057 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmseba/flaskr -https://github.com/vmseba/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:33:28.878038 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garyherd/flasktaskr -https://github.com/garyherd/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:33:31.406109 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhao-ji/flaskord -https://github.com/zhao-ji/flaskord -Entry file: flaskord/app.py -Scanned: 2016-10-19 09:33:33.964789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deja2011/flaskr -https://github.com/deja2011/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:33:35.482987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danfromisrael/TodoApp-Flask-Angular -https://github.com/danfromisrael/TodoApp-Flask-Angular -Entry file: TodoApp-Flask-Angular/Server/Infrastructure/Framework/AppStarter.py -Scanned: 2016-10-19 09:33:38.181095 -No vulnerabilities found. - - -Mcphylus12/FlaskDBsite -https://github.com/Mcphylus12/FlaskDBsite -Entry file: FlaskDBsite/routes.py -Scanned: 2016-10-19 09:33:39.465469 -No vulnerabilities found. - - -eguy/FlaskApp -https://github.com/eguy/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 09:33:42.077456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -okbm/flask_json -https://github.com/okbm/flask_json -Entry file: flask_json/flask_json/__init__.py -Scanned: 2016-10-19 09:33:44.463186 -No vulnerabilities found. - - -briennakh/flask-practice -https://github.com/briennakh/flask-practice -Entry file: None -Scanned: 2016-10-19 09:33:44.965789 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/briennakh/flask-practice. - -rwigo/flask-restmedia -https://github.com/rwigo/flask-restmedia -Entry file: flask-restmedia/examples/redis_storage.py -Scanned: 2016-10-19 09:33:47.365172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WritingPanda/flask-angular -https://github.com/WritingPanda/flask-angular -Entry file: flask-angular/app.py -Scanned: 2016-10-19 09:33:53.085709 -No vulnerabilities found. - - -pptonio/flask_template -https://github.com/pptonio/flask_template -Entry file: None -Scanned: 2016-10-19 09:33:54.092750 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pptonio/flask_template. - -wove/flask_blog -https://github.com/wove/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:33:54.606193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangda89/flask-blog -https://github.com/zhangda89/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:33:55.182479 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -caWhite/yum-flask -https://github.com/caWhite/yum-flask -Entry file: yum-flask/app/__init__.py -Scanned: 2016-10-19 09:33:56.549485 -No vulnerabilities found. - - -mnickey/flask_restaurants -https://github.com/mnickey/flask_restaurants -Entry file: flask_restaurants/finalproject.py -Scanned: 2016-10-19 09:34:03.055953 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -odubno/flask-intro -https://github.com/odubno/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:34:04.555723 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rg3915/despesas_flask -https://github.com/rg3915/despesas_flask -Entry file: despesas_flask/despesas.py -Scanned: 2016-10-19 09:34:06.939443 -No vulnerabilities found. - - -Mcyummylol/flask-blog -https://github.com/Mcyummylol/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:34:07.490524 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -inkmonk/flask-boilerplate -https://github.com/inkmonk/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 09:34:12.874711 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/inkmonk/flask-boilerplate. - -siko/flask-empty -https://github.com/siko/flask-empty -Entry file: flask-empty/fproject/app/__init__.py -Scanned: 2016-10-19 09:34:17.273889 -No vulnerabilities found. - - -dhutty/flask_ex -https://github.com/dhutty/flask_ex -Entry file: flask_ex/wsgi.py -Scanned: 2016-10-19 09:34:18.505171 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pmuellr/flask-sample -https://github.com/pmuellr/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 09:34:19.008604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jreiher2003/flask-tutorial -https://github.com/jreiher2003/flask-tutorial -Entry file: None -Scanned: 2016-10-19 09:34:19.568397 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -firebender/thinkful-flask -https://github.com/firebender/thinkful-flask -Entry file: thinkful-flask/blog/__init__.py -Scanned: 2016-10-19 09:34:22.941404 -Vulnerability 1: -File: thinkful-flask/blog/views.py - > User input at line 51, trigger word "form[": - title = request.form['title'] -Reassigned in: - File: thinkful-flask/blog/views.py - > Line 60: post = Post(title=title, content=mistune.markdown(content), author=current_user) - File: thinkful-flask/blog/views.py - > Line 68: message = 'Successfully added new post: {}'.format(title) -File: thinkful-flask/blog/views.py - > reaches line 69, trigger word "flash(": - flash(message, 'success') - - - -anksharm/flask_learn -https://github.com/anksharm/flask_learn -Entry file: flask_learn/hello.py -Scanned: 2016-10-19 09:34:28.203093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lyncir/flask-template -https://github.com/lyncir/flask-template -Entry file: None -Scanned: 2016-10-19 09:34:29.447000 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lyncir/flask-template. - -Mcyummylol/flask-hello -https://github.com/Mcyummylol/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 09:34:29.980807 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rizafahmi/rethink-flask -https://github.com/rizafahmi/rethink-flask -Entry file: rethink-flask/app/__init__.py -Scanned: 2016-10-19 09:34:31.970258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpilsworth/docker-flask -https://github.com/cpilsworth/docker-flask -Entry file: docker-flask/main.py -Scanned: 2016-10-19 09:34:33.287623 -No vulnerabilities found. - - -DevendraDesale/flask-intro -https://github.com/DevendraDesale/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:34:33.784622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jean-petitclerc/Flask_tut -https://github.com/jean-petitclerc/Flask_tut -Entry file: Flask_tut/photos.py -Scanned: 2016-10-19 09:34:35.141409 -No vulnerabilities found. - - -muktadiur/flask-intro -https://github.com/muktadiur/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:34:36.682515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rcelha/flask-desk -https://github.com/rcelha/flask-desk -Entry file: flask-desk/flask_desk/app.py -Scanned: 2016-10-19 09:34:38.071061 -No vulnerabilities found. - - -drbothen/Flasky_tut -https://github.com/drbothen/Flasky_tut -Entry file: Flasky_tut/app/__init__.py -Scanned: 2016-10-19 09:34:41.481618 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mainglis/fang -https://github.com/mainglis/fang -Entry file: fang/app.py -Scanned: 2016-10-19 09:34:50.778380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -errickbensonpeart/flask-hello-world -https://github.com/errickbensonpeart/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:34:51.311565 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -hipol/Discussion-Forum-Api -https://github.com/hipol/Discussion-Forum-Api -Entry file: Discussion-Forum-Api/app/__init__.py -Scanned: 2016-10-19 09:34:53.205980 -Vulnerability 1: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 44, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 54: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 58, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 2: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 46, trigger word "get(": - first_name = request.json.get('first_name') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 54: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 58, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 3: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 47, trigger word "get(": - last_name = request.json.get('last_name') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 54: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 58, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 4: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 48, trigger word "get(": - postal_code = request.json.get('postal_code') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 54: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 58, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 5: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 62, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 72: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 6: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 64, trigger word "get(": - first_name = request.json.get('first_name') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 72: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 7: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 65, trigger word "get(": - last_name = request.json.get('last_name') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 72: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - -Vulnerability 8: -File: Discussion-Forum-Api/app/user_auth/controllers.py - > User input at line 66, trigger word "get(": - postal_code = request.json.get('postal_code') -Reassigned in: - File: Discussion-Forum-Api/app/user_auth/controllers.py - > Line 72: user = User(first_name, last_name, email, postal_code) -File: Discussion-Forum-Api/app/user_auth/controllers.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201) - - - -ichris56/login-form -https://github.com/ichris56/login-form -Entry file: login-form/index.py -Scanned: 2016-10-19 09:34:54.495952 -Vulnerability 1: -File: login-form/index.py - > User input at line 140, trigger word "form[": - newUsername = request.form['username'] -File: login-form/index.py - > reaches line 147, trigger word "execute(": - data = c.execute(checkUsers, (newUsername)) - -Vulnerability 2: -File: login-form/index.py - > User input at line 140, trigger word "form[": - newUsername = request.form['username'] -File: login-form/index.py - > reaches line 156, trigger word "execute(": - c.execute(addUser, (newUsername, newPassword, None)) - -Vulnerability 3: -File: login-form/index.py - > User input at line 141, trigger word "form[": - newPassword = request.form['password'] -File: login-form/index.py - > reaches line 156, trigger word "execute(": - c.execute(addUser, (newUsername, newPassword, None)) - - - -Enapiuz/MyWebScrapingLearning -https://github.com/Enapiuz/MyWebScrapingLearning -Entry file: MyWebScrapingLearning/scrapingLearn03/scrapingLearn03.py -Scanned: 2016-10-19 09:34:55.993817 -No vulnerabilities found. - - -sujith7c/flask-sample-code -https://github.com/sujith7c/flask-sample-code -Entry file: flask-sample-code/helloworld.py -Scanned: 2016-10-19 09:34:57.699268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samramez/first_flask_app -https://github.com/samramez/first_flask_app -Entry file: first_flask_app/project.py -Scanned: 2016-10-19 09:34:59.071289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glcook/flask_hello_world -https://github.com/glcook/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:34:59.562485 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/glcook/flask_hello_world. - -Chaynoods/flask-grouped-users -https://github.com/Chaynoods/flask-grouped-users -Entry file: flask-grouped-users/grouped_users/app/__init__.py -Scanned: 2016-10-19 09:35:00.905757 -No vulnerabilities found. - - -jpshelley/bmi-flask-app -https://github.com/jpshelley/bmi-flask-app -Entry file: bmi-flask-app/app.py -Scanned: 2016-10-19 09:35:09.767594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hold-entrance/flask-hello-world -https://github.com/hold-entrance/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:35:13.356762 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -LandRegistry/govuk-flask-skeleton -https://github.com/LandRegistry/govuk-flask-skeleton -Entry file: govuk-flask-skeleton/app/__init__.py -Scanned: 2016-10-19 09:35:18.742671 -No vulnerabilities found. - - -danakock/flask-hello-world -https://github.com/danakock/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:35:19.273719 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -bboalimoe/pyrecsys_test_flask -https://github.com/bboalimoe/pyrecsys_test_flask -Entry file: pyrecsys_test_flask/pyrecsys_test_flask.py -Scanned: 2016-10-19 09:35:24.455105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gherero/flask_lesson_habr -https://github.com/Gherero/flask_lesson_habr -Entry file: flask_lesson_habr/app/__init__.py -Scanned: 2016-10-19 09:35:25.856207 -No vulnerabilities found. - - -jjdenis/flask-crud-minimal-demo -https://github.com/jjdenis/flask-crud-minimal-demo -Entry file: None -Scanned: 2016-10-19 09:35:27.222335 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jjdenis/flask-crud-minimal-demo. - -oakie/oauth-flask-template -https://github.com/oakie/oauth-flask-template -Entry file: oauth-flask-template/auth.py -Scanned: 2016-10-19 09:35:29.472108 -Vulnerability 1: -File: oauth-flask-template/auth.py - > User input at line 40, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: oauth-flask-template/auth.py - > Line 41: state = base64.urlsafe_b64encode(str(uuid4()) + ';' + next) - File: oauth-flask-template/auth.py - > Line 44: params = 'client_id''response_type''state''redirect_uri''scope'CLIENT_ID'code'stateREDIRECT_URI'openid email' -File: oauth-flask-template/auth.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = html.format(next, url_for('secret'), AUTH_URL + '?' + urllib.urlencode(params)) - - - -tianhuil/flask_ci_test -https://github.com/tianhuil/flask_ci_test -Entry file: flask_ci_test/app.py -Scanned: 2016-10-19 09:35:31.344632 -No vulnerabilities found. - - -daveglo/flask_practice_app -https://github.com/daveglo/flask_practice_app -Entry file: None -Scanned: 2016-10-19 09:35:32.886389 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/daveglo/flask_practice_app. - -Hellemos/app-flask-test -https://github.com/Hellemos/app-flask-test -Entry file: app-flask-test/app.py -Scanned: 2016-10-19 09:35:33.465660 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: app-flask-test/flask-env/lib/python2.7/genericpath.py - -liruosong/simple-flask-app -https://github.com/liruosong/simple-flask-app -Entry file: simple-flask-app/flaskr.py -Scanned: 2016-10-19 09:35:34.709917 -No vulnerabilities found. - - -war-room-game/war_room-flask -https://github.com/war-room-game/war_room-flask -Entry file: war_room-flask/src/server.py -Scanned: 2016-10-19 09:35:36.665573 -Vulnerability 1: -File: war_room-flask/src/server.py - > User input at line 43, trigger word "form[": - user = request.form['user'] -File: war_room-flask/src/server.py - > reaches line 48, trigger word "execute(": - cur = g.db.execute('select * from moves where player_id=? and round=?', [getPlayerId(user), round_num]) - - - -bsmith64/Flaskr-Microblog -https://github.com/bsmith64/Flaskr-Microblog -Entry file: Flaskr-Microblog/flaskr.py -Scanned: 2016-10-19 09:35:37.957129 -No vulnerabilities found. - - -joeknows718/718dotDigital -https://github.com/joeknows718/718dotDigital -Entry file: 718dotDigital/app/__init__.py -Scanned: 2016-10-19 09:35:39.993336 -No vulnerabilities found. - - -seyar/adminka -https://github.com/seyar/adminka -Entry file: adminka/__blog/__init__.py -Scanned: 2016-10-19 09:35:43.410077 -No vulnerabilities found. - - -cyberjoac/django-flasktaskr -https://github.com/cyberjoac/django-flasktaskr -Entry file: django-flasktaskr/project/__init__.py -Scanned: 2016-10-19 09:35:53.420486 -No vulnerabilities found. - - -ityuhui/abcbookmarks -https://github.com/ityuhui/abcbookmarks -Entry file: abcbookmarks/abcbookmarks.py -Scanned: 2016-10-19 09:35:56.127672 -No vulnerabilities found. - - -l2t3r/ESapi -https://github.com/l2t3r/ESapi -Entry file: ESapi/esapi.py -Scanned: 2016-10-19 09:35:57.465017 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hold-entrance/blog-3 -https://github.com/hold-entrance/blog-3 -Entry file: blog-3/blog.py -Scanned: 2016-10-19 09:36:01.485457 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog-3/env/lib/python2.7/genericpath.py - -tnishank/Blog -https://github.com/tnishank/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-19 09:36:05.524250 -No vulnerabilities found. - - -rohit-jamuar/QnA -https://github.com/rohit-jamuar/QnA -Entry file: None -Scanned: 2016-10-19 09:36:07.046149 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rohit-jamuar/QnA. - -nevzheng/microblog -https://github.com/nevzheng/microblog -Entry file: None -Scanned: 2016-10-19 09:36:07.568843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hold-entrance/blog-2 -https://github.com/hold-entrance/blog-2 -Entry file: blog-2/blog.py -Scanned: 2016-10-19 09:36:11.471596 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog-2/env/lib/python2.7/genericpath.py - -stewartwatts/flan -https://github.com/stewartwatts/flan -Entry file: flan/flan.py -Scanned: 2016-10-19 09:36:12.913321 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alecalve/py-fake-cas -https://github.com/alecalve/py-fake-cas -Entry file: py-fake-cas/app.py -Scanned: 2016-10-19 09:36:14.159242 -No vulnerabilities found. - - -wasamasa/guestbook -https://github.com/wasamasa/guestbook -Entry file: guestbook/app.py -Scanned: 2016-10-19 09:36:15.454506 -No vulnerabilities found. - - -sfalkoff/address-adder -https://github.com/sfalkoff/address-adder -Entry file: address-adder/controller.py -Scanned: 2016-10-19 09:36:16.847980 -No vulnerabilities found. - - -JanellePearl/cs3130_Assignment7 -https://github.com/JanellePearl/cs3130_Assignment7 -Entry file: cs3130_Assignment7/db_flask.py -Scanned: 2016-10-19 09:36:18.107815 -No vulnerabilities found. - - -nyabut/jeopardy_backend -https://github.com/nyabut/jeopardy_backend -Entry file: jeopardy_backend/app/__init__.py -Scanned: 2016-10-19 09:36:20.359225 -No vulnerabilities found. - - -rohan07/Blog -https://github.com/rohan07/Blog -Entry file: Blog/flaskr.py -Scanned: 2016-10-19 09:36:21.624268 -No vulnerabilities found. - - -mrjoes/flask-admin -https://github.com/mrjoes/flask-admin -Entry file: flask-admin/index.py -Scanned: 2016-10-19 09:36:26.588278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -damyanbogoev/flask-bookshelf -https://github.com/damyanbogoev/flask-bookshelf -Entry file: flask-bookshelf/check.py -Scanned: 2016-10-19 09:36:29.297355 -No vulnerabilities found. - - -cravler/flask-twisted -https://github.com/cravler/flask-twisted -Entry file: flask-twisted/examples/hello/app.py -Scanned: 2016-10-19 09:36:31.146968 -No vulnerabilities found. - - -changx9/flask -https://github.com/changx9/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:36:32.073439 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -bb071988/flask -https://github.com/bb071988/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:36:34.016991 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Vertabelo/vertabelo-flask -https://github.com/Vertabelo/vertabelo-flask -Entry file: vertabelo-flask/vertabelo_flask_sqlalchemy.py -Scanned: 2016-10-19 09:36:35.448450 -No vulnerabilities found. - - -sentinelleader/bootstrapper -https://github.com/sentinelleader/bootstrapper -Entry file: bootstrapper/bootstrap.py -Scanned: 2016-10-19 09:36:36.835104 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -XuYuanzhen/mysql_flask -https://github.com/XuYuanzhen/mysql_flask -Entry file: mysql_flask/app-mysql.py -Scanned: 2016-10-19 09:36:37.432635 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: mysql_flask/venv/lib/python2.6/genericpath.py - -XuYuanzhen/redis_flask -https://github.com/XuYuanzhen/redis_flask -Entry file: redis_flask/app-redis.py -Scanned: 2016-10-19 09:36:40.474758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jaza/flask-s3-save-example -https://github.com/Jaza/flask-s3-save-example -Entry file: None -Scanned: 2016-10-19 09:36:40.978293 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jaza/flask-s3-save-example. - -cravler/flask-sockjs -https://github.com/cravler/flask-sockjs -Entry file: flask-sockjs/examples/auth/app.py -Scanned: 2016-10-19 09:36:46.915172 -No vulnerabilities found. - - -choleraehyq/WebChat -https://github.com/choleraehyq/WebChat -Entry file: WebChat/application/__init__.py -Scanned: 2016-10-19 09:36:55.344293 -No vulnerabilities found. - - -wove/flasktaskr -https://github.com/wove/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:36:55.868852 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mcsrainbow/flaskdemo -https://github.com/mcsrainbow/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:36:57.420178 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cyb3rD/flaskr -https://github.com/cyb3rD/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:36:57.988799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -peter14f/flasky -https://github.com/peter14f/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:36:59.491725 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhao-ji/flaskord -https://github.com/zhao-ji/flaskord -Entry file: flaskord/app.py -Scanned: 2016-10-19 09:37:03.027710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chetstar/flaskbuild -https://github.com/chetstar/flaskbuild -Entry file: flaskbuild/app/__init__.py -Scanned: 2016-10-19 09:37:08.788292 -No vulnerabilities found. - - -eguy/FlaskApp -https://github.com/eguy/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 09:37:09.360665 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryota-ka/flask-yo-slack-adapter -https://github.com/ryota-ka/flask-yo-slack-adapter -Entry file: flask-yo-slack-adapter/app.py -Scanned: 2016-10-19 09:37:10.582172 -No vulnerabilities found. - - -congocongo/flask-hipchat-addon -https://github.com/congocongo/flask-hipchat-addon -Entry file: flask-hipchat-addon/test_addon.py -Scanned: 2016-10-19 09:37:13.941178 -No vulnerabilities found. - - -WritingPanda/flask-angular -https://github.com/WritingPanda/flask-angular -Entry file: flask-angular/app.py -Scanned: 2016-10-19 09:37:19.033710 -No vulnerabilities found. - - -AthelasPeru/flask_tutorial -https://github.com/AthelasPeru/flask_tutorial -Entry file: None -Scanned: 2016-10-19 09:37:19.551487 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nrinn/flask-intro -https://github.com/nrinn/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:20.044460 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sadiew/flask-intro -https://github.com/sadiew/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:20.534278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nuvipannu/flask-intro -https://github.com/nuvipannu/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:21.032352 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Julzerator/flask-intro -https://github.com/Julzerator/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:22.533132 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshaman1101/flask-template -https://github.com/sshaman1101/flask-template -Entry file: None -Scanned: 2016-10-19 09:37:24.025401 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sshaman1101/flask-template. - -pptonio/flask_template -https://github.com/pptonio/flask_template -Entry file: None -Scanned: 2016-10-19 09:37:30.021515 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pptonio/flask_template. - -mirzap/docker-flask -https://github.com/mirzap/docker-flask -Entry file: docker-flask/web/app.py -Scanned: 2016-10-19 09:37:33.804004 -No vulnerabilities found. - - -danakock/flask-blog -https://github.com/danakock/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:37:35.386169 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -janmilosh/flask_tutorial -https://github.com/janmilosh/flask_tutorial -Entry file: None -Scanned: 2016-10-19 09:37:35.878730 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wove/flask_blog -https://github.com/wove/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:37:37.372388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cl4rke/flask-test -https://github.com/cl4rke/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:37:38.892980 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -gusutabopb/flask_server -https://github.com/gusutabopb/flask_server -Entry file: flask_server/testapp.py -Scanned: 2016-10-19 09:37:41.118393 -No vulnerabilities found. - - -Matawhite/Flask_blog -https://github.com/Matawhite/Flask_blog -Entry file: Flask_blog/blog.py -Scanned: 2016-10-19 09:37:44.636023 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_blog/ENV/lib/python2.7/genericpath.py - -twaldear/flask-csp -https://github.com/twaldear/flask-csp -Entry file: flask-csp/flask_csp/test_csp.py -Scanned: 2016-10-19 09:37:46.213663 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ciprianc/hello_flask -https://github.com/ciprianc/hello_flask -Entry file: hello_flask/hello_flask/hello_flask_web.py -Scanned: 2016-10-19 09:37:47.586282 -No vulnerabilities found. - - -michelelee/flask-intro -https://github.com/michelelee/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:48.086015 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lindsaygrizzard/ex-flask -https://github.com/lindsaygrizzard/ex-flask -Entry file: ex-flask/nice.py -Scanned: 2016-10-19 09:37:56.369428 -No vulnerabilities found. - - -danafallon/flask-intro -https://github.com/danafallon/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:56.872936 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -judychau/flask_exercise -https://github.com/judychau/flask_exercise -Entry file: flask_exercise/nice.py -Scanned: 2016-10-19 09:37:59.109320 -No vulnerabilities found. - - -theresa-clare/flask-intro -https://github.com/theresa-clare/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:37:59.626671 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sigihuber/flask_basics -https://github.com/sigihuber/flask_basics -Entry file: flask_basics/get_post.py -Scanned: 2016-10-19 09:38:01.877093 -No vulnerabilities found. - - -marcelomd/flask-template -https://github.com/marcelomd/flask-template -Entry file: None -Scanned: 2016-10-19 09:38:04.378721 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcelomd/flask-template. - -lesguillemets/flask-playard -https://github.com/lesguillemets/flask-playard -Entry file: None -Scanned: 2016-10-19 09:38:09.707738 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rachelledunn/flask-intro -https://github.com/rachelledunn/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:38:11.195143 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -levi006/Flask-Intro -https://github.com/levi006/Flask-Intro -Entry file: Flask-Intro/nice.py -Scanned: 2016-10-19 09:38:12.403715 -No vulnerabilities found. - - -alenajk/flask-intro -https://github.com/alenajk/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:38:14.893437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amrocha/flask-guide -https://github.com/amrocha/flask-guide -Entry file: flask-guide/app/__init__.py -Scanned: 2016-10-19 09:38:17.133455 -No vulnerabilities found. - - -andyhui/my_flask -https://github.com/andyhui/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-19 09:38:24.408857 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -zrq495/flask-ckfinder -https://github.com/zrq495/flask-ckfinder -Entry file: flask-ckfinder/app.py -Scanned: 2016-10-19 09:38:26.983226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -McMenemy/flask-microblog -https://github.com/McMenemy/flask-microblog -Entry file: None -Scanned: 2016-10-19 09:38:27.479694 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -baotingfang/flask-demo -https://github.com/baotingfang/flask-demo -Entry file: None -Scanned: 2016-10-19 09:38:28.102975 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/baotingfang/flask-demo. - -kcart/Flask-Intro- -https://github.com/kcart/Flask-Intro- -Entry file: Flask-Intro-/nice.py -Scanned: 2016-10-19 09:38:29.319646 -No vulnerabilities found. - - -mainglis/fang -https://github.com/mainglis/fang -Entry file: fang/app.py -Scanned: 2016-10-19 09:38:30.070942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BurningPixel/FlaskLoginExample -https://github.com/BurningPixel/FlaskLoginExample -Entry file: FlaskLoginExample/app.py -Scanned: 2016-10-19 09:38:32.549423 -Vulnerability 1: -File: FlaskLoginExample/app.py - > User input at line 15, trigger word "form[": - user_name = request.form['username'] -File: FlaskLoginExample/app.py - > reaches line 41, trigger word "execute(": - cursor.execute(' - INSERT INTO users(id, username, password) - VALUES(NULL, ?, ?) - ', (user_name, password)) - -Vulnerability 2: -File: FlaskLoginExample/app.py - > User input at line 16, trigger word "form[": - password = request.form['password'] -File: FlaskLoginExample/app.py - > reaches line 41, trigger word "execute(": - cursor.execute(' - INSERT INTO users(id, username, password) - VALUES(NULL, ?, ?) - ', (user_name, password)) - - - -stueken/FSND-P3_Music-Catalog-Web-App -https://github.com/stueken/FSND-P3_Music-Catalog-Web-App -Entry file: FSND-P3_Music-Catalog-Web-App/application.py -Scanned: 2016-10-19 09:38:34.629794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apromessi/flask-intro-complimenter -https://github.com/apromessi/flask-intro-complimenter -Entry file: flask-intro-complimenter/nice.py -Scanned: 2016-10-19 09:38:38.446921 -No vulnerabilities found. - - -jon-engelbert/flask-oauth-restaurant -https://github.com/jon-engelbert/flask-oauth-restaurant -Entry file: flask-oauth-restaurant/pkg/__init__.py -Scanned: 2016-10-19 09:38:40.045188 -Vulnerability 1: -File: flask-oauth-restaurant/pkg/mod_restaurant/controllers.py - > User input at line 58, trigger word "form[": - newRestaurant = Restaurant(name=request.form['name'], user_id=login_session['user_id']) -File: flask-oauth-restaurant/pkg/mod_restaurant/controllers.py - > reaches line 61, trigger word "flash(": - flash('New Restaurant %s Successfully Created' % newRestaurant.name) - -Vulnerability 2: -File: flask-oauth-restaurant/pkg/mod_menuitem/controllers.py - > User input at line 34, trigger word "form[": - newItem = MenuItem(name=request.form['name'], description=request.form['description'], price=request.form['price'], course=request.form['course'], restaurant_id=restaurant_id, user_id=restaurant.user_id) -File: flask-oauth-restaurant/pkg/mod_menuitem/controllers.py - > reaches line 37, trigger word "flash(": - flash('New Menu %s Item Successfully Created' % newItem.name) - - - -tranc99/flask-python-taskr -https://github.com/tranc99/flask-python-taskr -Entry file: flask-python-taskr/flaskr.py -Scanned: 2016-10-19 09:38:44.310581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabhjot008/flask-calculator-api -https://github.com/prabhjot008/flask-calculator-api -Entry file: flask-calculator-api/app/__init__.py -Scanned: 2016-10-19 09:39:03.039776 -No vulnerabilities found. - - -ColeKettler/learning-flask-web-development -https://github.com/ColeKettler/learning-flask-web-development -Entry file: learning-flask-web-development/app/__init__.py -Scanned: 2016-10-19 09:39:37.240493 -No vulnerabilities found. - - -Tiffany8/Introduction-to-Flask-Exercise -https://github.com/Tiffany8/Introduction-to-Flask-Exercise -Entry file: Introduction-to-Flask-Exercise/nice.py -Scanned: 2016-10-19 09:39:38.441290 -No vulnerabilities found. - - -realpython/flask-scaffold -https://github.com/realpython/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-19 09:39:51.568464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -python-cn/flask-slackbot -https://github.com/python-cn/flask-slackbot -Entry file: flask-slackbot/examples/myapp.py -Scanned: 2016-10-19 09:39:59.997279 -No vulnerabilities found. - - -wilfilho/flask-facebook-example -https://github.com/wilfilho/flask-facebook-example -Entry file: flask-facebook-example/app.py -Scanned: 2016-10-19 09:40:01.216571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ashwini0529/flask -https://github.com/ashwini0529/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:40:02.096428 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -brandnetworks/base-flask-api -https://github.com/brandnetworks/base-flask-api -Entry file: base-flask-api/api/__init__.py -Scanned: 2016-10-19 09:40:03.452719 -No vulnerabilities found. - - -ssundarraj/flask-gcm-server -https://github.com/ssundarraj/flask-gcm-server -Entry file: flask-gcm-server/app/__init__.py -Scanned: 2016-10-19 09:40:08.311944 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dflorent/flaskdem -https://github.com/dflorent/flaskdem -Entry file: flaskdem/flaskdem/__init__.py -Scanned: 2016-10-19 09:40:12.533214 -No vulnerabilities found. - - -kcart/FLASKHW -https://github.com/kcart/FLASKHW -Entry file: FLASKHW/directory.py -Scanned: 2016-10-19 09:40:14.760137 -Vulnerability 1: -File: FLASKHW/directory.py - > User input at line 21, trigger word "get(": - name = request.args.get('employee_name') -File: FLASKHW/directory.py - > reaches line 30, trigger word "flash(": - flash('%s not found.' % name) - - - -jreiher2003/flaskgae -https://github.com/jreiher2003/flaskgae -Entry file: None -Scanned: 2016-10-19 09:40:17.445580 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jasonherngwang/flasktaskr -https://github.com/jasonherngwang/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:40:17.946596 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -charlesjavelona/flasktaskr -https://github.com/charlesjavelona/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:40:19.456116 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shipperizer/flasking -https://github.com/shipperizer/flasking -Entry file: flasking/flaskr.py -Scanned: 2016-10-19 09:40:23.990186 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasking/venv/lib/python2.7/genericpath.py - -liammccartney/flaskr -https://github.com/liammccartney/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:40:27.485844 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelrc13/flasktutorial -https://github.com/rafaelrc13/flasktutorial -Entry file: None -Scanned: 2016-10-19 09:40:31.029268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mnzr/flaskr -https://github.com/mnzr/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:40:31.521258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kamkard/Flasktest -https://github.com/kamkard/Flasktest -Entry file: Flasktest/flaskr/flaskr.py -Scanned: 2016-10-19 09:40:33.181859 -No vulnerabilities found. - - -phenomeno/flaskpractice -https://github.com/phenomeno/flaskpractice -Entry file: None -Scanned: 2016-10-19 09:40:35.474733 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Popo-lth/FlaskTest -https://github.com/Popo-lth/FlaskTest -Entry file: None -Scanned: 2016-10-19 09:40:35.981666 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Popo-lth/FlaskTest. - -byaka/flaskJSONRPCServer -https://github.com/byaka/flaskJSONRPCServer -Entry file: None -Scanned: 2016-10-19 09:40:37.710230 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/byaka/flaskJSONRPCServer. - -nrinn/flask-intro -https://github.com/nrinn/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:40:39.678070 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sadiew/flask-intro -https://github.com/sadiew/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:40:40.194743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nuvipannu/flask-intro -https://github.com/nuvipannu/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:40:40.690942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Julzerator/flask-intro -https://github.com/Julzerator/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:40:42.179185 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshaman1101/flask-template -https://github.com/sshaman1101/flask-template -Entry file: None -Scanned: 2016-10-19 09:40:43.666276 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sshaman1101/flask-template. - -cl4rke/flask-test -https://github.com/cl4rke/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:40:46.654304 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -Matawhite/Flask_blog -https://github.com/Matawhite/Flask_blog -Entry file: Flask_blog/blog.py -Scanned: 2016-10-19 09:40:51.711082 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_blog/ENV/lib/python2.7/genericpath.py - -g4b1nagy/flask-boilerplate -https://github.com/g4b1nagy/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 09:40:53.207536 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/g4b1nagy/flask-boilerplate. - -ciprianc/hello_flask -https://github.com/ciprianc/hello_flask -Entry file: hello_flask/hello_flask/hello_flask_web.py -Scanned: 2016-10-19 09:41:01.543157 -No vulnerabilities found. - - -michelelee/flask-intro -https://github.com/michelelee/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:02.027924 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lindsaygrizzard/ex-flask -https://github.com/lindsaygrizzard/ex-flask -Entry file: ex-flask/nice.py -Scanned: 2016-10-19 09:41:04.254149 -No vulnerabilities found. - - -danafallon/flask-intro -https://github.com/danafallon/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:04.743860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -judychau/flask_exercise -https://github.com/judychau/flask_exercise -Entry file: flask_exercise/nice.py -Scanned: 2016-10-19 09:41:05.972098 -No vulnerabilities found. - - -theresa-clare/flask-intro -https://github.com/theresa-clare/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:08.468544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ykhadilkar-rei/flask-demo -https://github.com/ykhadilkar-rei/flask-demo -Entry file: None -Scanned: 2016-10-19 09:41:12.993812 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ykhadilkar-rei/flask-demo. - -kmorinaka/flask-intro -https://github.com/kmorinaka/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:15.490541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anniejw6/art_flask -https://github.com/anniejw6/art_flask -Entry file: art_flask/app/__init__.py -Scanned: 2016-10-19 09:41:18.427752 -No vulnerabilities found. - - -huangjunque/flask_web -https://github.com/huangjunque/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-19 09:41:22.922105 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -jas0ndyq/flask-me -https://github.com/jas0ndyq/flask-me -Entry file: flask-me/app/__init__.py -Scanned: 2016-10-19 09:41:27.848849 -No vulnerabilities found. - - -ysdhaixin/learn-flask -https://github.com/ysdhaixin/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 09:41:28.588222 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tassin-/Flask_Blog -https://github.com/Tassin-/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-19 09:41:31.924250 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jacky168/flask_test -https://github.com/jacky168/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 09:41:32.528833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rachelledunn/flask-intro -https://github.com/rachelledunn/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:33.498211 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -levi006/Flask-Intro -https://github.com/levi006/Flask-Intro -Entry file: Flask-Intro/nice.py -Scanned: 2016-10-19 09:41:35.725969 -No vulnerabilities found. - - -alenajk/flask-intro -https://github.com/alenajk/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:37.217596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kcart/Flask-Intro- -https://github.com/kcart/Flask-Intro- -Entry file: Flask-Intro-/nice.py -Scanned: 2016-10-19 09:41:38.455056 -No vulnerabilities found. - - -kevinpie/flask-blog -https://github.com/kevinpie/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:41:39.980441 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -pelucky/Flask-test -https://github.com/pelucky/Flask-test -Entry file: Flask-test/app/__init__.py -Scanned: 2016-10-19 09:41:43.337874 -No vulnerabilities found. - - -pford68/flask-example -https://github.com/pford68/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 09:41:43.841484 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -takukawasaki/flask_blog -https://github.com/takukawasaki/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:41:44.332285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chevrondev/python_flask -https://github.com/chevrondev/python_flask -Entry file: None -Scanned: 2016-10-19 09:41:44.837838 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chevrondev/python_flask. - -blumonk/Flask-Micro -https://github.com/blumonk/Flask-Micro -Entry file: None -Scanned: 2016-10-19 09:41:51.874670 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sulsaho/hello-flask -https://github.com/sulsaho/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 09:41:56.075883 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -lindsaygrizzard/flask-app -https://github.com/lindsaygrizzard/flask-app -Entry file: flask-app/hackbright-web.py -Scanned: 2016-10-19 09:41:57.410027 -No vulnerabilities found. - - -IvannaBesarab/flask-intro -https://github.com/IvannaBesarab/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:41:57.939643 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BurningPixel/FlaskLoginExample -https://github.com/BurningPixel/FlaskLoginExample -Entry file: FlaskLoginExample/app.py -Scanned: 2016-10-19 09:41:59.156498 -Vulnerability 1: -File: FlaskLoginExample/app.py - > User input at line 15, trigger word "form[": - user_name = request.form['username'] -File: FlaskLoginExample/app.py - > reaches line 41, trigger word "execute(": - cursor.execute(' - INSERT INTO users(id, username, password) - VALUES(NULL, ?, ?) - ', (user_name, password)) - -Vulnerability 2: -File: FlaskLoginExample/app.py - > User input at line 16, trigger word "form[": - password = request.form['password'] -File: FlaskLoginExample/app.py - > reaches line 41, trigger word "execute(": - cursor.execute(' - INSERT INTO users(id, username, password) - VALUES(NULL, ?, ?) - ', (user_name, password)) - - - -Raizan/FlaskGrayscaleWebservice -https://github.com/Raizan/FlaskGrayscaleWebservice -Entry file: FlaskGrayscaleWebservice/app.py -Scanned: 2016-10-19 09:42:00.379478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TomNeyland/eve-sso -https://github.com/TomNeyland/eve-sso -Entry file: None -Scanned: 2016-10-19 09:42:02.714404 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TomNeyland/eve-sso. - -alayek/fullstack-intro -https://github.com/alayek/fullstack-intro -Entry file: fullstack-intro/server.py -Scanned: 2016-10-19 09:42:04.141536 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apromessi/flask-intro-complimenter -https://github.com/apromessi/flask-intro-complimenter -Entry file: flask-intro-complimenter/nice.py -Scanned: 2016-10-19 09:42:05.355772 -No vulnerabilities found. - - -jon-engelbert/flask-oauth-restaurant -https://github.com/jon-engelbert/flask-oauth-restaurant -Entry file: flask-oauth-restaurant/pkg/__init__.py -Scanned: 2016-10-19 09:42:06.855316 -Vulnerability 1: -File: flask-oauth-restaurant/pkg/mod_restaurant/controllers.py - > User input at line 58, trigger word "form[": - newRestaurant = Restaurant(name=request.form['name'], user_id=login_session['user_id']) -File: flask-oauth-restaurant/pkg/mod_restaurant/controllers.py - > reaches line 61, trigger word "flash(": - flash('New Restaurant %s Successfully Created' % newRestaurant.name) - -Vulnerability 2: -File: flask-oauth-restaurant/pkg/mod_menuitem/controllers.py - > User input at line 34, trigger word "form[": - newItem = MenuItem(name=request.form['name'], description=request.form['description'], price=request.form['price'], course=request.form['course'], restaurant_id=restaurant_id, user_id=restaurant.user_id) -File: flask-oauth-restaurant/pkg/mod_menuitem/controllers.py - > reaches line 37, trigger word "flash(": - flash('New Menu %s Item Successfully Created' % newItem.name) - - - -Julzerator/project-tracker-flask -https://github.com/Julzerator/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:10.636477 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmorinaka/project-tracker-flask -https://github.com/kmorinaka/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:14.122168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NotTheEconomist/some_flask_project -https://github.com/NotTheEconomist/some_flask_project -Entry file: some_flask_project/flaskr/__init__.py -Scanned: 2016-10-19 09:42:19.635583 -No vulnerabilities found. - - -aachik/flask-blog-abdulmx -https://github.com/aachik/flask-blog-abdulmx -Entry file: flask-blog-abdulmx/web.py -Scanned: 2016-10-19 09:42:23.219202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kennysong/Flask-on-EC2 -https://github.com/kennysong/Flask-on-EC2 -Entry file: Flask-on-EC2/demoapp/server.py -Scanned: 2016-10-19 09:42:25.918796 -No vulnerabilities found. - - -apromessi/madlibs_flask_jinja -https://github.com/apromessi/madlibs_flask_jinja -Entry file: madlibs_flask_jinja/madlibs.py -Scanned: 2016-10-19 09:42:30.339324 -No vulnerabilities found. - - -Tiffany8/Introduction-to-Flask-Exercise -https://github.com/Tiffany8/Introduction-to-Flask-Exercise -Entry file: Introduction-to-Flask-Exercise/nice.py -Scanned: 2016-10-19 09:42:32.091423 -No vulnerabilities found. - - -michelelee/project-tracker-flask -https://github.com/michelelee/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:33.622060 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pamelot/project-tracker-flask -https://github.com/pamelot/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:34.111493 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sarahfo/Flask-ProjectTracker -https://github.com/sarahfo/Flask-ProjectTracker -Entry file: Flask-ProjectTracker/hackbright-web.py -Scanned: 2016-10-19 09:42:35.337246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dheerajgopi/StudentDetails-Flask -https://github.com/dheerajgopi/StudentDetails-Flask -Entry file: None -Scanned: 2016-10-19 09:42:39.708822 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pombredanne/scale-with-flask -https://github.com/pombredanne/scale-with-flask -Entry file: scale-with-flask/example/app/__init__.py -Scanned: 2016-10-19 09:42:41.737868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -phonedeveloper/flask_auth_securedb -https://github.com/phonedeveloper/flask_auth_securedb -Entry file: flask_auth_securedb/flask_securedb.py -Scanned: 2016-10-19 09:42:43.312832 -No vulnerabilities found. - - -sadiew/project-tracker-flask -https://github.com/sadiew/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:43.856755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shabemdadi/SQL-Flask-Python-Project -https://github.com/shabemdadi/SQL-Flask-Python-Project -Entry file: SQL-Flask-Python-Project/hackbright-web.py -Scanned: 2016-10-19 09:42:45.112860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -relekang/flask-docker-status -https://github.com/relekang/flask-docker-status -Entry file: flask-docker-status/server.py -Scanned: 2016-10-19 09:42:46.345215 -No vulnerabilities found. - - -taliegarcia/project-tracker-flask -https://github.com/taliegarcia/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:46.840497 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leskat47/project-tracker-flask-exercise -https://github.com/leskat47/project-tracker-flask-exercise -Entry file: project-tracker-flask-exercise/hackbright-web.py -Scanned: 2016-10-19 09:42:48.152089 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nrinn/project-tracker-flask -https://github.com/nrinn/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:48.677709 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johannakate/project-tracker-flask -https://github.com/johannakate/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:54.226988 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -levi006/project-tracker-flask -https://github.com/levi006/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:57.726190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BostonREB/flask_hello_world -https://github.com/BostonREB/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:42:59.255726 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/BostonREB/flask_hello_world. - -nuvipannu/project-tracker-flask -https://github.com/nuvipannu/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:42:59.741500 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VerSprite/flask-json-pickle -https://github.com/VerSprite/flask-json-pickle -Entry file: flask-json-pickle/flask-json-pickle.py -Scanned: 2016-10-19 09:43:04.472667 -No vulnerabilities found. - - -SamLin95/Flask_email_recover -https://github.com/SamLin95/Flask_email_recover -Entry file: Flask_email_recover/app.py -Scanned: 2016-10-19 09:43:05.724502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -acastanieto/flask-intro-HB-exercise -https://github.com/acastanieto/flask-intro-HB-exercise -Entry file: flask-intro-HB-exercise/nice.py -Scanned: 2016-10-19 09:43:06.941136 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danafallon/project-tracker-flask -https://github.com/danafallon/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:43:07.434570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonrovira/flask-by-example -https://github.com/jonrovira/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:43:12.988589 -No vulnerabilities found. - - -johannakate/flask-intro-exercise -https://github.com/johannakate/flask-intro-exercise -Entry file: flask-intro-exercise/nice.py -Scanned: 2016-10-19 09:43:14.217641 -No vulnerabilities found. - - -bpownow/flask-intro-exercise -https://github.com/bpownow/flask-intro-exercise -Entry file: flask-intro-exercise/nice.py -Scanned: 2016-10-19 09:43:16.418379 -No vulnerabilities found. - - -codecaptain76/flask-intro-exercise -https://github.com/codecaptain76/flask-intro-exercise -Entry file: flask-intro-exercise/nice.py -Scanned: 2016-10-19 09:43:18.639767 -No vulnerabilities found. - - -dinosk/flask_project -https://github.com/dinosk/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 09:43:25.617665 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VladKh/Flask -https://github.com/VladKh/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:43:27.123691 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Rowzson/Flask -https://github.com/Rowzson/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:43:30.650808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -St-B/flask -https://github.com/St-B/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:43:32.571393 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -eleweek/histsync -https://github.com/eleweek/histsync -Entry file: histsync/app.py -Scanned: 2016-10-19 09:43:36.202467 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -salmanwahed/flask-restful-mongodb-api -https://github.com/salmanwahed/flask-restful-mongodb-api -Entry file: flask-restful-mongodb-api/api.py -Scanned: 2016-10-19 09:43:37.559344 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nagpurtechies/flaskblog -https://github.com/nagpurtechies/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:43:38.085548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ivoreali/Python-Flask-MongoDB -https://github.com/ivoreali/Python-Flask-MongoDB -Entry file: Python-Flask-MongoDB/app/app.py -Scanned: 2016-10-19 09:43:39.311568 -No vulnerabilities found. - - -kracekumar/flask_vs_django_bench -https://github.com/kracekumar/flask_vs_django_bench -Entry file: flask_vs_django_bench/flask_app.py -Scanned: 2016-10-19 09:43:42.531172 -No vulnerabilities found. - - -cmabastar/flask-rest-boilerplate -https://github.com/cmabastar/flask-rest-boilerplate -Entry file: flask-rest-boilerplate/app/__init__.py -Scanned: 2016-10-19 09:43:44.953680 -No vulnerabilities found. - - -enzoliao/flaskr -https://github.com/enzoliao/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:43:45.451729 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cstuy-ai/flasksite -https://github.com/cstuy-ai/flasksite -Entry file: flasksite/app.py -Scanned: 2016-10-19 09:43:46.775292 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -renanvicente/flaskdocket -https://github.com/renanvicente/flaskdocket -Entry file: flaskdocket/hello.py -Scanned: 2016-10-19 09:43:47.969986 -No vulnerabilities found. - - -kevinpie/flasktaskr -https://github.com/kevinpie/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:43:48.955916 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Anwesh43/flaskdemo -https://github.com/Anwesh43/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:43:50.464966 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ferdirn/flaskr -https://github.com/ferdirn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:43:55.983460 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Matawhite/FlaskTaskr -https://github.com/Matawhite/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-19 09:44:02.219402 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -colrodia/flaskTest -https://github.com/colrodia/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-19 09:44:03.464138 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tony/cookiecutter-flask-pythonic -https://github.com/tony/cookiecutter-flask-pythonic -Entry file: cookiecutter-flask-pythonic/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}/{{cookiecutter.repo_name}}.py -Scanned: 2016-10-19 09:44:05.883401 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CharlesZhong/Blog -https://github.com/CharlesZhong/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-19 09:44:11.396614 -No vulnerabilities found. - - -duc1701/flask_experiments -https://github.com/duc1701/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-19 09:44:12.622419 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rcelha/flask-history -https://github.com/rcelha/flask-history -Entry file: flask-history/flask_history/app.py -Scanned: 2016-10-19 09:44:13.862343 -No vulnerabilities found. - - -joedanz/flask-weather -https://github.com/joedanz/flask-weather -Entry file: flask-weather/app.py -Scanned: 2016-10-19 09:44:15.382499 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cgautamkrish/flask_whoosh -https://github.com/cgautamkrish/flask_whoosh -Entry file: flask_whoosh/server.py -Scanned: 2016-10-19 09:44:17.720016 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dj80hd/SimpleFlask -https://github.com/dj80hd/SimpleFlask -Entry file: None -Scanned: 2016-10-19 09:44:20.037538 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dj80hd/SimpleFlask. - -joedanz/flask-bpm -https://github.com/joedanz/flask-bpm -Entry file: flask-bpm/app/__init__.py -Scanned: 2016-10-19 09:44:29.322586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -00000111/flask_rma -https://github.com/00000111/flask_rma -Entry file: flask_rma/app/__init__.py -Scanned: 2016-10-19 09:44:34.682628 -Vulnerability 1: -File: flask_rma/app/views.py - > User input at line 82, trigger word "get(": - case = models.Case.query.get(int(case_no)) -Reassigned in: - File: flask_rma/app/views.py - > Line 96: ret_MAYBE_FUNCTION_NAME = render_template('details.html',case=case, form=form) - File: flask_rma/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask_rma/app/views.py - > reaches line 87, trigger word "flash(": - flash('Кейс %d был подтвержден' % case.id) - -Vulnerability 2: -File: flask_rma/app/views.py - > User input at line 103, trigger word ".data": - company = models.Company(name=form.name.data) -File: flask_rma/app/views.py - > reaches line 106, trigger word "flash(": - flash('Компания %s успешно добавлена' % company.name) - - - -ryankanno/cookiecutter-flask -https://github.com/ryankanno/cookiecutter-flask -Entry file: None -Scanned: 2016-10-19 09:44:35.209213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ryankanno/cookiecutter-flask. - -armeo/docker-flask -https://github.com/armeo/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-19 09:44:36.448064 -No vulnerabilities found. - - -gilsondev/flask_wordcounts -https://github.com/gilsondev/flask_wordcounts -Entry file: flask_wordcounts/app.py -Scanned: 2016-10-19 09:44:37.710642 -No vulnerabilities found. - - -gilsondev/flask_talks -https://github.com/gilsondev/flask_talks -Entry file: flask_talks/app/__init__.py -Scanned: 2016-10-19 09:44:39.096966 -No vulnerabilities found. - - -pattisdr/flask_microblog -https://github.com/pattisdr/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 09:44:39.626888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshua7v/flask-demo -https://github.com/joshua7v/flask-demo -Entry file: None -Scanned: 2016-10-19 09:44:40.126509 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joshua7v/flask-demo. - -rahvar/flask-reg -https://github.com/rahvar/flask-reg -Entry file: flask-reg/app/__init__.py -Scanned: 2016-10-19 09:44:47.282774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -debuggerboy/flask_blog -https://github.com/debuggerboy/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:44:47.771668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -moloch/flask_blog -https://github.com/moloch/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 09:44:48.259478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zyrys/Flask_No1 -https://github.com/zyrys/Flask_No1 -Entry file: Flask_No1/app/__init__.py -Scanned: 2016-10-19 09:44:49.492062 -No vulnerabilities found. - - -tecoholic/Zimbalaka -https://github.com/tecoholic/Zimbalaka -Entry file: Zimbalaka/zimbalaka/__init__.py -Scanned: 2016-10-19 09:44:51.215207 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tassin-/FlaskTaskR -https://github.com/Tassin-/FlaskTaskR -Entry file: FlaskTaskR/task/views.py -Scanned: 2016-10-19 09:44:56.025738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kennysong/Flask-on-EC2 -https://github.com/kennysong/Flask-on-EC2 -Entry file: Flask-on-EC2/demoapp/server.py -Scanned: 2016-10-19 09:44:57.734771 -No vulnerabilities found. - - -haukurk/api-client-proxy-flask -https://github.com/haukurk/api-client-proxy-flask -Entry file: None -Scanned: 2016-10-19 09:44:58.977195 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/haukurk/api-client-proxy-flask. - -mdevey/Demo-Flask-GUnicorn -https://github.com/mdevey/Demo-Flask-GUnicorn -Entry file: Demo-Flask-GUnicorn/app.py -Scanned: 2016-10-19 09:45:02.199229 -No vulnerabilities found. - - -CortYuming/docker-hello-flask -https://github.com/CortYuming/docker-hello-flask -Entry file: docker-hello-flask/hello.py -Scanned: 2016-10-19 09:45:05.444328 -No vulnerabilities found. - - -chadduffey/SimpleBlog-Flask -https://github.com/chadduffey/SimpleBlog-Flask -Entry file: SimpleBlog-Flask/app/__init__.py -Scanned: 2016-10-19 09:45:09.347466 -No vulnerabilities found. - - -florije1988/flask_celery_redis -https://github.com/florije1988/flask_celery_redis -Entry file: flask_celery_redis/redis_demo.py -Scanned: 2016-10-19 09:45:10.783239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jasonsbrooks/HackYale-Flask-Course -https://github.com/jasonsbrooks/HackYale-Flask-Course -Entry file: HackYale-Flask-Course/app/__init__.py -Scanned: 2016-10-19 09:45:12.007957 -No vulnerabilities found. - - -ni8mr/Flask-hello-world -https://github.com/ni8mr/Flask-hello-world -Entry file: Flask-hello-world/app.py -Scanned: 2016-10-19 09:45:13.703517 -No vulnerabilities found. - - -relekang/flask-docker-status -https://github.com/relekang/flask-docker-status -Entry file: flask-docker-status/server.py -Scanned: 2016-10-19 09:45:14.909949 -No vulnerabilities found. - - -roman0316/flask-by-example -https://github.com/roman0316/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:45:17.599780 -No vulnerabilities found. - - -Keuha/ios-pics-flask-server -https://github.com/Keuha/ios-pics-flask-server -Entry file: ios-pics-flask-server/Python/new_app.py -Scanned: 2016-10-19 09:45:20.237425 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: ios-pics-flask-server/Python/flask/lib/python2.7/genericpath.py - -saromanov/twitter-flask-app -https://github.com/saromanov/twitter-flask-app -Entry file: twitter-flask-app/app.py -Scanned: 2016-10-19 09:45:21.456127 -No vulnerabilities found. - - -MengmengZHANG/flask-babel-zh -https://github.com/MengmengZHANG/flask-babel-zh -Entry file: flask-babel-zh/app.py -Scanned: 2016-10-19 09:45:32.287124 -No vulnerabilities found. - - -michaelreid/flask-api-posts -https://github.com/michaelreid/flask-api-posts -Entry file: flask-api-posts/posts/__init__.py -Scanned: 2016-10-19 09:45:37.694182 -Vulnerability 1: -File: flask-api-posts/posts/api.py - > User input at line 36, trigger word "get(": - body_like = request.args.get('body_like') -Reassigned in: - File: flask-api-posts/posts/api.py - > Line 46: posts = posts.filter(models.Post.title.contains(title_like)) - File: flask-api-posts/posts/api.py - > Line 52: posts = posts.all() - File: flask-api-posts/posts/api.py - > Line 55: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask-api-posts/posts/api.py - > Line 56: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask-api-posts/posts/api.py - > Line 40: posts = session.query(models.Post) -File: flask-api-posts/posts/api.py - > reaches line 42, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)).filter(models.Post.body.contains(body_like)) - -Vulnerability 2: -File: flask-api-posts/posts/api.py - > User input at line 33, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: flask-api-posts/posts/api.py - > Line 49: posts = posts.filter(models.Post.body.contains(body_like)) - File: flask-api-posts/posts/api.py - > Line 52: posts = posts.all() - File: flask-api-posts/posts/api.py - > Line 55: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask-api-posts/posts/api.py - > Line 56: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask-api-posts/posts/api.py - > Line 40: posts = session.query(models.Post) - File: flask-api-posts/posts/api.py - > Line 42: posts = posts.filter(models.Post.title.contains(title_like)).filter(models.Post.body.contains(body_like)) -File: flask-api-posts/posts/api.py - > reaches line 46, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - -Vulnerability 3: -File: flask-api-posts/posts/api.py - > User input at line 36, trigger word "get(": - body_like = request.args.get('body_like') -Reassigned in: - File: flask-api-posts/posts/api.py - > Line 46: posts = posts.filter(models.Post.title.contains(title_like)) - File: flask-api-posts/posts/api.py - > Line 52: posts = posts.all() - File: flask-api-posts/posts/api.py - > Line 55: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask-api-posts/posts/api.py - > Line 56: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask-api-posts/posts/api.py - > Line 40: posts = session.query(models.Post) -File: flask-api-posts/posts/api.py - > reaches line 49, trigger word "filter(": - posts = posts.filter(models.Post.body.contains(body_like)) - - - -lukehammer/flask-by-example -https://github.com/lukehammer/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:45:38.928702 -No vulnerabilities found. - - -maverickneo/bluemix-python-flask-sample -https://github.com/maverickneo/bluemix-python-flask-sample -Entry file: bluemix-python-flask-sample/welcome.py -Scanned: 2016-10-19 09:45:40.243512 -No vulnerabilities found. - - -judychau/project_tracker_flask -https://github.com/judychau/project_tracker_flask -Entry file: project_tracker_flask/hackbright-web.py -Scanned: 2016-10-19 09:45:41.463509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jlybianto/flask_hello_world -https://github.com/jlybianto/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:45:41.967701 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jlybianto/flask_hello_world. - -ni8mr/A-blog-with-Flask -https://github.com/ni8mr/A-blog-with-Flask -Entry file: A-blog-with-Flask/blog.py -Scanned: 2016-10-19 09:45:43.206560 -No vulnerabilities found. - - -lindsaygrizzard/project-tracker-flask -https://github.com/lindsaygrizzard/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 09:45:44.696277 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kwikiel/realflask -https://github.com/kwikiel/realflask -Entry file: realflask/app.py -Scanned: 2016-10-19 09:45:50.925135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kjplunkett/python-api -https://github.com/kjplunkett/python-api -Entry file: python-api/app.py -Scanned: 2016-10-19 09:45:52.166276 -No vulnerabilities found. - - -rubenwardy/minetest_web_panel -https://github.com/rubenwardy/minetest_web_panel -Entry file: minetest_web_panel/web_panel/__init__.py -Scanned: 2016-10-19 09:45:54.691675 -Vulnerability 1: -File: minetest_web_panel/web_panel/views.py - > User input at line 37, trigger word "get(": - r = request.args.get('r') -Reassigned in: - File: minetest_web_panel/web_panel/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login',r=r)) - File: minetest_web_panel/web_panel/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login',r=r)) - File: minetest_web_panel/web_panel/views.py - > Line 56: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: minetest_web_panel/web_panel/views.py - > Line 58: ret_MAYBE_FUNCTION_NAME = render_template('login.html',redirect=r) - File: minetest_web_panel/web_panel/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: minetest_web_panel/web_panel/views.py - > reaches line 54, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(r) - - - -peteshadbolt/nhs -https://github.com/peteshadbolt/nhs -Entry file: nhs/nhs.py -Scanned: 2016-10-19 09:45:58.953822 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nithintech/student-Record-app -https://github.com/nithintech/student-Record-app -Entry file: None -Scanned: 2016-10-19 09:46:00.505145 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nithintech/student-Record-app. - -jlybianto/blogful -https://github.com/jlybianto/blogful -Entry file: blogful/blog/__init__.py -Scanned: 2016-10-19 09:46:01.007755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dpollot/petsy-server -https://github.com/dpollot/petsy-server -Entry file: petsy-server/index.py -Scanned: 2016-10-19 09:46:03.243082 -No vulnerabilities found. - - -DerekDuchesne/tweetsneak -https://github.com/DerekDuchesne/tweetsneak -Entry file: tweetsneak/tweetsneak_python/main.py -Scanned: 2016-10-19 09:46:09.655034 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -chrsbats/hmac_signer -https://github.com/chrsbats/hmac_signer -Entry file: hmac_signer/hmac_signer/tests/test_server.py -Scanned: 2016-10-19 09:46:13.963972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -margrami/menuapp -https://github.com/margrami/menuapp -Entry file: menuapp/Lesson-4/Final-Project/finalproject.py -Scanned: 2016-10-19 09:46:15.500090 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -boshika/Python -https://github.com/boshika/Python -Entry file: Python/Flask_test.py -Scanned: 2016-10-19 09:46:33.370531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaschneidr/safetytips -https://github.com/jaschneidr/safetytips -Entry file: safetytips/safetytips.py -Scanned: 2016-10-19 09:46:34.614031 -No vulnerabilities found. - - -chrisrink10/cjblog -https://github.com/chrisrink10/cjblog -Entry file: None -Scanned: 2016-10-19 09:46:36.093094 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chrisrink10/cjblog. - -cmutti/deadpoll -https://github.com/cmutti/deadpoll -Entry file: deadpoll/app.py -Scanned: 2016-10-19 09:46:37.765551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kimrob/microblog -https://github.com/kimrob/microblog -Entry file: None -Scanned: 2016-10-19 09:46:38.267731 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BurningPixel/FoldrsCMS -https://github.com/BurningPixel/FoldrsCMS -Entry file: FoldrsCMS/app.py -Scanned: 2016-10-19 09:46:39.505798 -No vulnerabilities found. - - -Tiffany8/Ratings -https://github.com/Tiffany8/Ratings -Entry file: Ratings/server.py -Scanned: 2016-10-19 09:46:42.574917 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -peterlin741/YoutubeComments -https://github.com/peterlin741/YoutubeComments -Entry file: YoutubeComments/youtube.py -Scanned: 2016-10-19 09:46:44.383585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GerardoGR/chained_task -https://github.com/GerardoGR/chained_task -Entry file: chained_task/api/app.py -Scanned: 2016-10-19 09:46:45.608923 -No vulnerabilities found. - - -imidya/WebCalculator -https://github.com/imidya/WebCalculator -Entry file: WebCalculator/run.py -Scanned: 2016-10-19 09:46:47.282206 -Vulnerability 1: -File: WebCalculator/run.py - > User input at line 17, trigger word "get(": - formula = request.form.get('formula') -Reassigned in: - File: WebCalculator/run.py - > Line 20: result = c.cal(formula) - File: WebCalculator/run.py - > Line 23: ret_MAYBE_FUNCTION_NAME = jsonify('msg''formula is none.') - File: WebCalculator/run.py - > Line 24: ret_MAYBE_FUNCTION_NAME = jsonify('msg''error') -File: WebCalculator/run.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('result''msg'result'ok') - - - -melevittfl/message2email -https://github.com/melevittfl/message2email -Entry file: message2email/message2email.py -Scanned: 2016-10-19 09:46:48.615916 -No vulnerabilities found. - - -nuvipannu/judgemental-eye -https://github.com/nuvipannu/judgemental-eye -Entry file: judgemental-eye/server.py -Scanned: 2016-10-19 09:46:53.269247 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jon-engelbert/catalog -https://github.com/jon-engelbert/catalog -Entry file: catalog/finalproject.py -Scanned: 2016-10-19 09:46:55.314817 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tiffany8/Shopping-Site-Exercise -https://github.com/Tiffany8/Shopping-Site-Exercise -Entry file: Shopping-Site-Exercise/shoppingsite.py -Scanned: 2016-10-19 09:46:56.900695 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shabemdadi/Ratings-Site -https://github.com/shabemdadi/Ratings-Site -Entry file: Ratings-Site/server.py -Scanned: 2016-10-19 09:46:59.759385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Leo-G/Flask-Scaffold -https://github.com/Leo-G/Flask-Scaffold -Entry file: None -Scanned: 2016-10-19 09:47:07.177058 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Leo-G/Flask-Scaffold. - -viniciuschiele/flask-apscheduler -https://github.com/viniciuschiele/flask-apscheduler -Entry file: flask-apscheduler/examples/allowed_host.py -Scanned: 2016-10-19 09:47:08.671061 -No vulnerabilities found. - - -miguelgrinberg/flasky-with-celery -https://github.com/miguelgrinberg/flasky-with-celery -Entry file: flasky-with-celery/app/__init__.py -Scanned: 2016-10-19 09:47:10.206289 -Vulnerability 1: -File: flasky-with-celery/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky-with-celery/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 20: prev = None - File: flasky-with-celery/app/api_1_0/users.py - > Line 23: next = None -File: flasky-with-celery/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky-with-celery/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky-with-celery/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 42: prev = None - File: flasky-with-celery/app/api_1_0/users.py - > Line 45: next = None -File: flasky-with-celery/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky-with-celery/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky-with-celery/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky-with-celery/app/api_1_0/posts.py - > Line 19: next = None -File: flasky-with-celery/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky-with-celery/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky-with-celery/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky-with-celery/app/api_1_0/comments.py - > Line 18: next = None -File: flasky-with-celery/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky-with-celery/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky-with-celery/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky-with-celery/app/api_1_0/comments.py - > Line 46: next = None -File: flasky-with-celery/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -hoangminhitvn/flask -https://github.com/hoangminhitvn/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:47:11.148733 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -alvingeek/flask -https://github.com/alvingeek/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:47:12.014436 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -St-B/flask -https://github.com/St-B/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:47:12.880493 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -IndicoDataSolutions/indi-flask -https://github.com/IndicoDataSolutions/indi-flask -Entry file: indi-flask/app.py -Scanned: 2016-10-19 09:47:14.326174 -No vulnerabilities found. - - -mattmakai/video-service-flask -https://github.com/mattmakai/video-service-flask -Entry file: None -Scanned: 2016-10-19 09:47:15.992690 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattmakai/video-service-flask. - -twaldear/flask-secure-headers -https://github.com/twaldear/flask-secure-headers -Entry file: flask-secure-headers/flask_secure_headers/tests/core_test.py -Scanned: 2016-10-19 09:47:17.472132 -No vulnerabilities found. - - -russomi/appengine-python-flask-travis-ci -https://github.com/russomi/appengine-python-flask-travis-ci -Entry file: appengine-python-flask-travis-ci/main.py -Scanned: 2016-10-19 09:47:18.909139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -realpython/flask-matplotlib -https://github.com/realpython/flask-matplotlib -Entry file: flask-matplotlib/app.py -Scanned: 2016-10-19 09:47:20.122746 -No vulnerabilities found. - - -russomi/flasky-appengine -https://github.com/russomi/flasky-appengine -Entry file: flasky-appengine/app/__init__.py -Scanned: 2016-10-19 09:47:21.756887 -Vulnerability 1: -File: flasky-appengine/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky-appengine/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 20: prev = None - File: flasky-appengine/app/api_1_0/users.py - > Line 23: next = None -File: flasky-appengine/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky-appengine/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky-appengine/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 42: prev = None - File: flasky-appengine/app/api_1_0/users.py - > Line 45: next = None -File: flasky-appengine/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky-appengine/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky-appengine/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky-appengine/app/api_1_0/posts.py - > Line 19: next = None -File: flasky-appengine/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky-appengine/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky-appengine/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky-appengine/app/api_1_0/comments.py - > Line 18: next = None -File: flasky-appengine/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky-appengine/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky-appengine/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky-appengine/app/api_1_0/comments.py - > Line 46: next = None -File: flasky-appengine/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -vagarsak/Chip-n-Dale -https://github.com/vagarsak/Chip-n-Dale -Entry file: Chip-n-Dale/flaskr.py -Scanned: 2016-10-19 09:47:23.217695 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FireDrunk/ZFSmond -https://github.com/FireDrunk/ZFSmond -Entry file: None -Scanned: 2016-10-19 09:47:38.057347 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/FireDrunk/ZFSmond. - -yesdoc/api -https://github.com/yesdoc/api -Entry file: api/app/__init__.py -Scanned: 2016-10-19 09:47:39.785854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -viile/flask_test -https://github.com/viile/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 09:47:40.399412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Running-Snail/flask-backend -https://github.com/Running-Snail/flask-backend -Entry file: flask-backend/main.py -Scanned: 2016-10-19 09:47:41.626169 -No vulnerabilities found. - - -z20/flaskmicroblog -https://github.com/z20/flaskmicroblog -Entry file: None -Scanned: 2016-10-19 09:47:47.483456 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ericso/flaskr -https://github.com/ericso/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:47:47.972962 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bdeangelis/flasker -https://github.com/bdeangelis/flasker -Entry file: flasker/flask-hello-world/app.py -Scanned: 2016-10-19 09:47:49.211056 -No vulnerabilities found. - - -dmanier/flasktaskr -https://github.com/dmanier/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:47:49.713262 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brainsqueeze/FlaskExamples -https://github.com/brainsqueeze/FlaskExamples -Entry file: FlaskExamples/app.py -Scanned: 2016-10-19 09:47:50.930676 -No vulnerabilities found. - - -mqchau/flask2 -https://github.com/mqchau/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-19 09:47:52.167687 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -terrybu/flaskPractice -https://github.com/terrybu/flaskPractice -Entry file: flaskPractice/app/__init__.py -Scanned: 2016-10-19 09:47:53.473937 -No vulnerabilities found. - - -patallen/FlaskAPI -https://github.com/patallen/FlaskAPI -Entry file: FlaskAPI/app.py -Scanned: 2016-10-19 09:47:54.847775 -No vulnerabilities found. - - -dmi-try/flask-sandbox -https://github.com/dmi-try/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 09:47:55.368073 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Cyrus-Xi/Microblog-Flask -https://github.com/Cyrus-Xi/Microblog-Flask -Entry file: Microblog-Flask/app/__init__.py -Scanned: 2016-10-19 09:47:56.705551 -No vulnerabilities found. - - -jstnstwrt/heroku-flask -https://github.com/jstnstwrt/heroku-flask -Entry file: heroku-flask/app.py -Scanned: 2016-10-19 09:47:59.604571 -No vulnerabilities found. - - -mjheller/thundrFlask -https://github.com/mjheller/thundrFlask -Entry file: thundrFlask/Src/routes.py -Scanned: 2016-10-19 09:48:05.322720 -No vulnerabilities found. - - -tinta/flask-jags -https://github.com/tinta/flask-jags -Entry file: flask-jags/server/app/routes.py -Scanned: 2016-10-19 09:48:06.817025 -No vulnerabilities found. - - -armeo/docker-flask -https://github.com/armeo/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-19 09:48:10.061051 -No vulnerabilities found. - - -gilsondev/flask_wordcounts -https://github.com/gilsondev/flask_wordcounts -Entry file: flask_wordcounts/app.py -Scanned: 2016-10-19 09:48:11.341504 -No vulnerabilities found. - - -gilsondev/flask_talks -https://github.com/gilsondev/flask_talks -Entry file: flask_talks/app/__init__.py -Scanned: 2016-10-19 09:48:12.703162 -No vulnerabilities found. - - -pattisdr/flask_microblog -https://github.com/pattisdr/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 09:48:13.236389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -inaki/flask-stripe -https://github.com/inaki/flask-stripe -Entry file: flask-stripe/app/__init__.py -Scanned: 2016-10-19 09:48:18.333630 -No vulnerabilities found. - - -c1f3r/flask_tutor -https://github.com/c1f3r/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-19 09:48:19.638871 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cryptosan/flask-board -https://github.com/cryptosan/flask-board -Entry file: flask-board/app/__init__.py -Scanned: 2016-10-19 09:48:21.053046 -No vulnerabilities found. - - -ericso/microblog-flask -https://github.com/ericso/microblog-flask -Entry file: microblog-flask/app/__init__.py -Scanned: 2016-10-19 09:48:22.822604 -No vulnerabilities found. - - -VovaT/Flask_start -https://github.com/VovaT/Flask_start -Entry file: Flask_start/app/__init__.py -Scanned: 2016-10-19 09:48:24.567306 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ydawant/twitter_flask -https://github.com/ydawant/twitter_flask -Entry file: twitter_flask/api.py -Scanned: 2016-10-19 09:48:26.114172 -No vulnerabilities found. - - -ovidiucs/flask-blog -https://github.com/ovidiucs/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:48:26.662496 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -jjclark1982/flask-example -https://github.com/jjclark1982/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 09:48:27.156566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dannguyen/flask-firerain -https://github.com/dannguyen/flask-firerain -Entry file: flask-firerain/app.py -Scanned: 2016-10-19 09:48:38.859955 -Vulnerability 1: -File: flask-firerain/app.py - > User input at line 24, trigger word "get(": - address = request.form.get('address') -Reassigned in: - File: flask-firerain/app.py - > Line 26: fixed_path = quote_plus(address) -File: flask-firerain/app.py - > reaches line 27, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/address/%s' % fixed_path) - - - -dmanier/flask-blog -https://github.com/dmanier/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:48:40.438543 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -manjithd2/flask-webpoll -https://github.com/manjithd2/flask-webpoll -Entry file: flask-webpoll/app.py -Scanned: 2016-10-19 09:48:45.092791 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-webpoll/env/lib/python2.7/genericpath.py - -Leo-G/Flask-Search -https://github.com/Leo-G/Flask-Search -Entry file: Flask-Search/app/__init__.py -Scanned: 2016-10-19 09:48:49.819927 -Vulnerability 1: -File: Flask-Search/app/users/views.py - > User input at line 28, trigger word ".data": - tags = schema.dump(query,many=True).data -File: Flask-Search/app/users/views.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('tags'tags) - - - -gekkey/Flask-Auth -https://github.com/gekkey/Flask-Auth -Entry file: None -Scanned: 2016-10-19 09:48:51.080914 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gekkey/Flask-Auth. - -pazzo83/microblog -https://github.com/pazzo83/microblog -Entry file: None -Scanned: 2016-10-19 09:48:51.602259 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TimIainMarsh/microblog -https://github.com/TimIainMarsh/microblog -Entry file: None -Scanned: 2016-10-19 09:48:52.117451 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -motomizuki/FlaskApplicationTemplate -https://github.com/motomizuki/FlaskApplicationTemplate -Entry file: FlaskApplicationTemplate/app/__init__.py -Scanned: 2016-10-19 09:48:53.343801 -No vulnerabilities found. - - -18F/cg-quotas-db -https://github.com/18F/cg-quotas-db -Entry file: None -Scanned: 2016-10-19 09:48:54.895039 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/18F/cg-quotas-db. - -EricSchles/sample_flask_ember -https://github.com/EricSchles/sample_flask_ember -Entry file: sample_flask_ember/app.py -Scanned: 2016-10-19 09:48:56.105472 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kongling893/Personal_Website_Python_Flask -https://github.com/kongling893/Personal_Website_Python_Flask -Entry file: Personal_Website_Python_Flask/website.py -Scanned: 2016-10-19 09:49:00.791160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MentorWebServiceTeam/flask-config-override -https://github.com/MentorWebServiceTeam/flask-config-override -Entry file: flask-config-override/tests/basic_flask_test.py -Scanned: 2016-10-19 09:49:02.025177 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mitulshah44/flask_crud_app -https://github.com/mitulshah44/flask_crud_app -Entry file: flask_crud_app/config.py -Scanned: 2016-10-19 09:49:05.444579 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdevey/Demo-Flask-GUnicorn -https://github.com/mdevey/Demo-Flask-GUnicorn -Entry file: Demo-Flask-GUnicorn/app.py -Scanned: 2016-10-19 09:49:06.649912 -No vulnerabilities found. - - -florije1988/flask_celery_redis -https://github.com/florije1988/flask_celery_redis -Entry file: flask_celery_redis/redis_demo.py -Scanned: 2016-10-19 09:49:07.152437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasalt/flask_hello_world -https://github.com/rasalt/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:49:07.640921 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasalt/flask_hello_world. - -jstnstwrt/lightweight_flask_app -https://github.com/jstnstwrt/lightweight_flask_app -Entry file: lightweight_flask_app/app.py -Scanned: 2016-10-19 09:49:08.852645 -No vulnerabilities found. - - -heyitzaustin/DraftStocked-Flask -https://github.com/heyitzaustin/DraftStocked-Flask -Entry file: DraftStocked-Flask/FlaskApp/__init__.py -Scanned: 2016-10-19 09:49:11.928176 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: DraftStocked-Flask/FlaskApp/venv/lib/python3.4/struct.py - -infoliebich123/Web-Application-with-Flask -https://github.com/infoliebich123/Web-Application-with-Flask -Entry file: Web-Application-with-Flask/app/__init__.py -Scanned: 2016-10-19 09:49:15.621176 -Vulnerability 1: -File: Web-Application-with-Flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 20: prev = None - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 23: next = None -File: Web-Application-with-Flask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: Web-Application-with-Flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 42: prev = None - File: Web-Application-with-Flask/app/api_1_0/users.py - > Line 45: next = None -File: Web-Application-with-Flask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: Web-Application-with-Flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 16: prev = None - File: Web-Application-with-Flask/app/api_1_0/posts.py - > Line 19: next = None -File: Web-Application-with-Flask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: Web-Application-with-Flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 15: prev = None - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 18: next = None -File: Web-Application-with-Flask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: Web-Application-with-Flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 43: prev = None - File: Web-Application-with-Flask/app/api_1_0/comments.py - > Line 46: next = None -File: Web-Application-with-Flask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -saromanov/twitter-flask-app -https://github.com/saromanov/twitter-flask-app -Entry file: twitter-flask-app/app.py -Scanned: 2016-10-19 09:49:17.313432 -No vulnerabilities found. - - -rlazoryshchak/flask-mongo-login -https://github.com/rlazoryshchak/flask-mongo-login -Entry file: flask-mongo-login/app.py -Scanned: 2016-10-19 09:49:18.878269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maqwqa/flask-mongodb-tumblelog -https://github.com/maqwqa/flask-mongodb-tumblelog -Entry file: flask-mongodb-tumblelog/tumblelog/__init__.py -Scanned: 2016-10-19 09:49:22.593079 -No vulnerabilities found. - - -balloon-studios/cf-example-flask -https://github.com/balloon-studios/cf-example-flask -Entry file: cf-example-flask/app.py -Scanned: 2016-10-19 09:49:23.867833 -No vulnerabilities found. - - -jamesfowkes/Flask-By-Example -https://github.com/jamesfowkes/Flask-By-Example -Entry file: Flask-By-Example/app.py -Scanned: 2016-10-19 09:49:25.102688 -No vulnerabilities found. - - -nithintech/blog-app-using-flask -https://github.com/nithintech/blog-app-using-flask -Entry file: None -Scanned: 2016-10-19 09:49:27.664278 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nithintech/blog-app-using-flask. - -allanlewis/stb-inventory-flask-mongo -https://github.com/allanlewis/stb-inventory-flask-mongo -Entry file: stb-inventory-flask-mongo/stb_inventory/__init__.py -Scanned: 2016-10-19 09:49:29.384587 -No vulnerabilities found. - - -lukehammer/flask-by-example -https://github.com/lukehammer/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:49:39.638555 -No vulnerabilities found. - - -SiliconValleyInsight/flask-api-template -https://github.com/SiliconValleyInsight/flask-api-template -Entry file: flask-api-template/app/__init__.py -Scanned: 2016-10-19 09:49:42.976491 -No vulnerabilities found. - - -erroneousboat/docker-flask-elasticseach -https://github.com/erroneousboat/docker-flask-elasticseach -Entry file: docker-flask-elasticseach/code/app/__init__.py -Scanned: 2016-10-19 09:49:44.308310 -No vulnerabilities found. - - -inaki/flask-leaflet-draw -https://github.com/inaki/flask-leaflet-draw -Entry file: flask-leaflet-draw/app/__init__.py -Scanned: 2016-10-19 09:49:49.656243 -No vulnerabilities found. - - -rayray1/Tasker---4 -https://github.com/rayray1/Tasker---4 -Entry file: Tasker---4/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:49:57.606881 -No vulnerabilities found. - - -johnwook/trevari-api -https://github.com/johnwook/trevari-api -Entry file: trevari-api/manage.py -Scanned: 2016-10-19 09:49:59.015102 -No vulnerabilities found. - - -skiermw/WTF -https://github.com/skiermw/WTF -Entry file: None -Scanned: 2016-10-19 09:50:04.610081 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KolevDarko/flasky-extended -https://github.com/KolevDarko/flasky-extended -Entry file: flasky-extended/app/__init__.py -Scanned: 2016-10-19 09:50:06.274181 -Vulnerability 1: -File: flasky-extended/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-extended/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-extended/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky-extended/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-extended/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-extended/app/api_1_0/users.py - > Line 20: prev = None - File: flasky-extended/app/api_1_0/users.py - > Line 23: next = None -File: flasky-extended/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky-extended/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-extended/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-extended/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky-extended/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-extended/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-extended/app/api_1_0/users.py - > Line 42: prev = None - File: flasky-extended/app/api_1_0/users.py - > Line 45: next = None -File: flasky-extended/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky-extended/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-extended/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-extended/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky-extended/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-extended/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-extended/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky-extended/app/api_1_0/posts.py - > Line 19: next = None -File: flasky-extended/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky-extended/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-extended/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-extended/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky-extended/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-extended/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-extended/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky-extended/app/api_1_0/comments.py - > Line 18: next = None -File: flasky-extended/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky-extended/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-extended/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-extended/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky-extended/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-extended/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-extended/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky-extended/app/api_1_0/comments.py - > Line 46: next = None -File: flasky-extended/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -hello-albee/my_flasky -https://github.com/hello-albee/my_flasky -Entry file: None -Scanned: 2016-10-19 09:50:07.615107 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hello-albee/my_flasky. - -paradox41/tuber -https://github.com/paradox41/tuber -Entry file: None -Scanned: 2016-10-19 09:50:09.058754 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paradox41/tuber. - -rayray1/Tasker---3 -https://github.com/rayray1/Tasker---3 -Entry file: Tasker---3/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:50:12.470626 -No vulnerabilities found. - - -rogerhoward/iiify -https://github.com/rogerhoward/iiify -Entry file: iiify/iiify.py -Scanned: 2016-10-19 09:50:18.925689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -malltshik/flmanage -https://github.com/malltshik/flmanage -Entry file: flmanage/flmanage/data/app.py -Scanned: 2016-10-19 09:50:21.199620 -No vulnerabilities found. - - -peteshadbolt/nhs -https://github.com/peteshadbolt/nhs -Entry file: nhs/nhs.py -Scanned: 2016-10-19 09:50:21.698018 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -varunrisbud/StarBucks -https://github.com/varunrisbud/StarBucks -Entry file: StarBucks/OrderQueue.py -Scanned: 2016-10-19 09:50:23.064769 -Vulnerability 1: -File: StarBucks/OrderQueue.py - > User input at line 72, trigger word "get(": - order = orderQueue.get(block=False) -Reassigned in: - File: StarBucks/OrderQueue.py - > Line 75: responsedata = 'custId''customerName''itemName'order.customeridorder.customernameorder.itemname - File: StarBucks/OrderQueue.py - > Line 84: ret_MAYBE_FUNCTION_NAME = jsondata - File: StarBucks/OrderQueue.py - > Line 64: responsedata = 'status''No order' -File: StarBucks/OrderQueue.py - > reaches line 68, trigger word "jsonify(": - jsondata = jsonify(responsedata) - -Vulnerability 2: -File: StarBucks/OrderQueue.py - > User input at line 72, trigger word "get(": - order = orderQueue.get(block=False) -Reassigned in: - File: StarBucks/OrderQueue.py - > Line 75: responsedata = 'custId''customerName''itemName'order.customeridorder.customernameorder.itemname - File: StarBucks/OrderQueue.py - > Line 84: ret_MAYBE_FUNCTION_NAME = jsondata - File: StarBucks/OrderQueue.py - > Line 64: responsedata = 'status''No order' -File: StarBucks/OrderQueue.py - > reaches line 81, trigger word "jsonify(": - jsondata = jsonify(responsedata) - -Vulnerability 3: -File: StarBucks/CashierQueue.py - > User input at line 31, trigger word "get(": - custId = q.custQueue.get(block=False) -Reassigned in: - File: StarBucks/CashierQueue.py - > Line 29: ret_MAYBE_FUNCTION_NAME = (jsonify('status''No Customer in queue'), 204) -File: StarBucks/CashierQueue.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('status''id''customer deleted successfully'custId), 200) - - - -nmutalik/groupme-analytics -https://github.com/nmutalik/groupme-analytics -Entry file: groupme-analytics/hello.py -Scanned: 2016-10-19 09:50:24.899527 -No vulnerabilities found. - - -truep/truep_blog -https://github.com/truep/truep_blog -Entry file: truep_blog/app.py -Scanned: 2016-10-19 09:50:26.217312 -No vulnerabilities found. - - -patallen/patallen.me -https://github.com/patallen/patallen.me -Entry file: None -Scanned: 2016-10-19 09:50:27.788223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/patallen/patallen.me. - -shinjs0728/chatapp -https://github.com/shinjs0728/chatapp -Entry file: None -Scanned: 2016-10-19 09:50:30.550390 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jeffsp/ratex -https://github.com/jeffsp/ratex -Entry file: ratex/test_runkeeper.py -Scanned: 2016-10-19 09:50:33.012342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mad01/hermit -https://github.com/mad01/hermit -Entry file: hermit/src/app.py -Scanned: 2016-10-19 09:50:34.699346 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -nchronas/webServerPython -https://github.com/nchronas/webServerPython -Entry file: webServerPython/server.py -Scanned: 2016-10-19 09:50:35.926606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -steny138/TwssApi -https://github.com/steny138/TwssApi -Entry file: TwssApi/app.py -Scanned: 2016-10-19 09:50:37.159157 -No vulnerabilities found. - - -boshika/Python -https://github.com/boshika/Python -Entry file: Python/Flask_test.py -Scanned: 2016-10-19 09:50:38.282766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cfmeyers/acme-wines -https://github.com/cfmeyers/acme-wines -Entry file: acme-wines/app.py -Scanned: 2016-10-19 09:50:39.609118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mardix/flask-cloudy -https://github.com/mardix/flask-cloudy -Entry file: flask-cloudy/example/app.py -Scanned: 2016-10-19 09:50:42.349559 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miguelgrinberg/flasky-with-celery -https://github.com/miguelgrinberg/flasky-with-celery -Entry file: flasky-with-celery/app/__init__.py -Scanned: 2016-10-19 09:50:43.880298 -Vulnerability 1: -File: flasky-with-celery/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky-with-celery/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 20: prev = None - File: flasky-with-celery/app/api_1_0/users.py - > Line 23: next = None -File: flasky-with-celery/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky-with-celery/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky-with-celery/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/users.py - > Line 42: prev = None - File: flasky-with-celery/app/api_1_0/users.py - > Line 45: next = None -File: flasky-with-celery/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky-with-celery/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky-with-celery/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky-with-celery/app/api_1_0/posts.py - > Line 19: next = None -File: flasky-with-celery/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky-with-celery/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky-with-celery/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky-with-celery/app/api_1_0/comments.py - > Line 18: next = None -File: flasky-with-celery/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky-with-celery/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-with-celery/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky-with-celery/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-with-celery/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky-with-celery/app/api_1_0/comments.py - > Line 46: next = None -File: flasky-with-celery/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -chanyying/Flask -https://github.com/chanyying/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:50:44.415689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoangminhitvn/flask -https://github.com/hoangminhitvn/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:50:45.304769 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -IndicoDataSolutions/indi-flask -https://github.com/IndicoDataSolutions/indi-flask -Entry file: indi-flask/app.py -Scanned: 2016-10-19 09:50:49.218762 -No vulnerabilities found. - - -kpurdon/docker-flask-todo -https://github.com/kpurdon/docker-flask-todo -Entry file: docker-flask-todo/app.py -Scanned: 2016-10-19 09:50:54.463253 -No vulnerabilities found. - - -russomi/flasky-appengine -https://github.com/russomi/flasky-appengine -Entry file: flasky-appengine/app/__init__.py -Scanned: 2016-10-19 09:51:02.576513 -Vulnerability 1: -File: flasky-appengine/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky-appengine/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 20: prev = None - File: flasky-appengine/app/api_1_0/users.py - > Line 23: next = None -File: flasky-appengine/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky-appengine/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky-appengine/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/users.py - > Line 42: prev = None - File: flasky-appengine/app/api_1_0/users.py - > Line 45: next = None -File: flasky-appengine/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky-appengine/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky-appengine/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky-appengine/app/api_1_0/posts.py - > Line 19: next = None -File: flasky-appengine/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky-appengine/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky-appengine/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky-appengine/app/api_1_0/comments.py - > Line 18: next = None -File: flasky-appengine/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky-appengine/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky-appengine/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky-appengine/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky-appengine/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky-appengine/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky-appengine/app/api_1_0/comments.py - > Line 46: next = None -File: flasky-appengine/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -mattharley/flask-geoip2 -https://github.com/mattharley/flask-geoip2 -Entry file: flask-geoip2/app.py -Scanned: 2016-10-19 09:51:07.954231 -No vulnerabilities found. - - -trendsetter37/Flaskdev -https://github.com/trendsetter37/Flaskdev -Entry file: Flaskdev/hello.py -Scanned: 2016-10-19 09:51:09.325771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yooner/flasker -https://github.com/yooner/flasker -Entry file: flasker/flasker.py -Scanned: 2016-10-19 09:51:10.584210 -No vulnerabilities found. - - -zedzew/flaskblog -https://github.com/zedzew/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:51:11.099784 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -princeli/flaskr -https://github.com/princeli/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:51:14.624198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ni8mr/Flasktaskr -https://github.com/ni8mr/Flasktaskr -Entry file: Flasktaskr/flask_api.py -Scanned: 2016-10-19 09:51:24.516789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NearTan/FlaskBase -https://github.com/NearTan/FlaskBase -Entry file: FlaskBase/app_name/app.py -Scanned: 2016-10-19 09:51:25.860741 -No vulnerabilities found. - - -iamchenxin/flask1 -https://github.com/iamchenxin/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 09:51:30.374144 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -sdingex/FlaskDemo -https://github.com/sdingex/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 09:51:30.890830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tusharbabbar/FlaskScaffoldings -https://github.com/tusharbabbar/FlaskScaffoldings -Entry file: FlaskScaffoldings/core/app/__init__.py -Scanned: 2016-10-19 09:51:32.733708 -No vulnerabilities found. - - -samskeller/flask_demo -https://github.com/samskeller/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 09:51:33.240021 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -henrynguyen7/tapease-flask -https://github.com/henrynguyen7/tapease-flask -Entry file: tapease-flask/model.py -Scanned: 2016-10-19 09:51:34.586597 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tylerlim/flask_python -https://github.com/tylerlim/flask_python -Entry file: flask_python/app.py -Scanned: 2016-10-19 09:51:37.445123 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_python/venv/lib/python2.7/genericpath.py - -MasterGip/microblog_flask -https://github.com/MasterGip/microblog_flask -Entry file: microblog_flask/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 09:51:38.124962 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ethan-jiang-1/flask_sample -https://github.com/ethan-jiang-1/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 09:51:39.369992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -myang321/myFlask -https://github.com/myang321/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-19 09:51:40.666887 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -okmyomar/flask-implementation -https://github.com/okmyomar/flask-implementation -Entry file: None -Scanned: 2016-10-19 09:51:41.901926 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/okmyomar/flask-implementation. - -bbirec/flask-template -https://github.com/bbirec/flask-template -Entry file: None -Scanned: 2016-10-19 09:51:42.415367 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bbirec/flask-template. - -thanhson1085/flask-webhdfs -https://github.com/thanhson1085/flask-webhdfs -Entry file: flask-webhdfs/app/__init__.py -Scanned: 2016-10-19 09:51:44.414710 -No vulnerabilities found. - - -macjustice/garage-flask -https://github.com/macjustice/garage-flask -Entry file: garage-flask/run.py -Scanned: 2016-10-19 09:51:45.704803 -No vulnerabilities found. - - -lisbitid/less_flask -https://github.com/lisbitid/less_flask -Entry file: less_flask/test/flask_admin_examples/quickstart/app.py -Scanned: 2016-10-19 09:52:23.340207 -No vulnerabilities found. - - -qdzzyb2014/flask-test -https://github.com/qdzzyb2014/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:52:24.691938 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -raghavendra990/Flask-website -https://github.com/raghavendra990/Flask-website -Entry file: Flask-website/app.py -Scanned: 2016-10-19 09:52:29.998141 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jesscxu/Flask_Attempt -https://github.com/jesscxu/Flask_Attempt -Entry file: None -Scanned: 2016-10-19 09:52:33.837684 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fuhrer196/HelloFlask -https://github.com/fuhrer196/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 09:52:34.350101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -extraordinarius/flask_microblog -https://github.com/extraordinarius/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 09:52:34.859875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Leo-G/Flask-Search -https://github.com/Leo-G/Flask-Search -Entry file: Flask-Search/app/__init__.py -Scanned: 2016-10-19 09:52:38.853995 -Vulnerability 1: -File: Flask-Search/app/users/views.py - > User input at line 28, trigger word ".data": - tags = schema.dump(query,many=True).data -File: Flask-Search/app/users/views.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('tags'tags) - - - -bloomark/f13x -https://github.com/bloomark/f13x -Entry file: f13x/app/__init__.py -Scanned: 2016-10-19 09:52:40.635346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miscbits/flaskTestApp -https://github.com/miscbits/flaskTestApp -Entry file: flaskTestApp/hello.py -Scanned: 2016-10-19 09:52:43.492114 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskTestApp/venv/lib/python3.4/struct.py - -giantswarm/python-flask-helloworld -https://github.com/giantswarm/python-flask-helloworld -Entry file: python-flask-helloworld/server.py -Scanned: 2016-10-19 09:52:44.714972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igsm/Flask-SocialApp -https://github.com/igsm/Flask-SocialApp -Entry file: Flask-SocialApp/app.py -Scanned: 2016-10-19 09:52:46.056661 -No vulnerabilities found. - - -zeugmato/awesome-flask-todo -https://github.com/zeugmato/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 09:52:47.281897 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeugmato/awesome-flask-todo. - -nankej/flask-by-example -https://github.com/nankej/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 09:52:48.526084 -No vulnerabilities found. - - -OmieP/flask-hello-world -https://github.com/OmieP/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:52:49.071067 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -2blesd2bstresd/flask_web_app -https://github.com/2blesd2bstresd/flask_web_app -Entry file: flask_web_app/project/__init__.py -Scanned: 2016-10-19 09:52:50.419137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jstnstwrt/flask-restaurant-app -https://github.com/jstnstwrt/flask-restaurant-app -Entry file: flask-restaurant-app/app.py -Scanned: 2016-10-19 09:52:52.245313 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -annanymouse/flask_hello_world -https://github.com/annanymouse/flask_hello_world -Entry file: None -Scanned: 2016-10-19 09:52:52.760712 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/annanymouse/flask_hello_world. - -ryankanno/cookiecutter-flask-api -https://github.com/ryankanno/cookiecutter-flask-api -Entry file: None -Scanned: 2016-10-19 09:52:54.082272 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ryankanno/cookiecutter-flask-api. - -Hellemos/flask-intro-posts -https://github.com/Hellemos/flask-intro-posts -Entry file: flask-intro-posts/app.py -Scanned: 2016-10-19 09:52:57.226237 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-intro-posts/venv/lib/python2.7/genericpath.py - -mausch/python-flask-gunicorn-docker -https://github.com/mausch/python-flask-gunicorn-docker -Entry file: python-flask-gunicorn-docker/server.py -Scanned: 2016-10-19 09:52:58.446003 -No vulnerabilities found. - - -fainle/flask_restful_angularjs_blog -https://github.com/fainle/flask_restful_angularjs_blog -Entry file: flask_restful_angularjs_blog/site-packages/flask/sessions.py -Scanned: 2016-10-19 09:53:01.159370 -No vulnerabilities found. - - -saulgray/nemio-flask-old -https://github.com/saulgray/nemio-flask-old -Entry file: None -Scanned: 2016-10-19 09:53:06.878202 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -allingeek/dockerized-hello-flask -https://github.com/allingeek/dockerized-hello-flask -Entry file: dockerized-hello-flask/hihi.py -Scanned: 2016-10-19 09:53:08.114384 -No vulnerabilities found. - - -agleister/flaskr_tutorial -https://github.com/agleister/flaskr_tutorial -Entry file: flaskr_tutorial/flaskr/flaskr.py -Scanned: 2016-10-19 09:53:09.794495 -No vulnerabilities found. - - -purejade/myflask -https://github.com/purejade/myflask -Entry file: myflask/app/__init__.py -Scanned: 2016-10-19 09:53:12.572371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Erachter/logsys -https://github.com/Erachter/logsys -Entry file: logsys/app.py -Scanned: 2016-10-19 09:53:14.650048 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jpashok/customer -https://github.com/jpashok/customer -Entry file: customer/flask/webapp/app.py -Scanned: 2016-10-19 09:53:27.036057 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyb3rD/Game -https://github.com/cyb3rD/Game -Entry file: Game/app/__init__.py -Scanned: 2016-10-19 09:53:30.490728 -No vulnerabilities found. - - -skiermw/WTF -https://github.com/skiermw/WTF -Entry file: None -Scanned: 2016-10-19 09:53:32.129148 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -knitori/thumbnail-app -https://github.com/knitori/thumbnail-app -Entry file: None -Scanned: 2016-10-19 09:53:36.476902 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/knitori/thumbnail-app. - -scraperwiki/newsreader-api -https://github.com/scraperwiki/newsreader-api -Entry file: newsreader-api/app/__init__.py -Scanned: 2016-10-19 09:53:38.168373 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ttlttl/microblog -https://github.com/ttlttl/microblog -Entry file: None -Scanned: 2016-10-19 09:53:38.662322 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bboalimoe/senz.template.docker.multi.instan.flask -https://github.com/bboalimoe/senz.template.docker.multi.instan.flask -Entry file: None -Scanned: 2016-10-19 09:53:41.892532 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bboalimoe/senz.template.docker.multi.instan.flask. - -b-buehler/Blogful -https://github.com/b-buehler/Blogful -Entry file: Blogful/blog/__init__.py -Scanned: 2016-10-19 09:53:47.197916 -No vulnerabilities found. - - -aantonw/notesapi -https://github.com/aantonw/notesapi -Entry file: notesapi/notesapi.py -Scanned: 2016-10-19 09:53:48.440631 -Vulnerability 1: -File: notesapi/notesapi.py - > User input at line 106, trigger word "get(": - db = db_get() -Reassigned in: - File: notesapi/notesapi.py - > Line 107: dbnote = note_byid(db, note_id) - File: notesapi/notesapi.py - > Line 109: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 110, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes'dbnote) - -Vulnerability 2: -File: notesapi/notesapi.py - > User input at line 117, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -File: notesapi/notesapi.py - > reaches line 122, trigger word "execute(": - db.execute('INSERT INTO notes (title, content) VALUES (?, ?)', [note['title'], note['content']]) - -Vulnerability 3: -File: notesapi/notesapi.py - > User input at line 117, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -File: notesapi/notesapi.py - > reaches line 125, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('notes'note), 201) - -Vulnerability 4: -File: notesapi/notesapi.py - > User input at line 139, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -Reassigned in: - File: notesapi/notesapi.py - > Line 133: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 143, trigger word "execute(": - db.execute('UPDATE notes SET title=?, content=? WHERE id=?', [note['title'], note['content'], note_id]) - -Vulnerability 5: -File: notesapi/notesapi.py - > User input at line 139, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -Reassigned in: - File: notesapi/notesapi.py - > Line 133: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 146, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes'note) - - - -Namdeus/pirateapp -https://github.com/Namdeus/pirateapp -Entry file: pirateapp/app.py -Scanned: 2016-10-19 09:53:51.130775 -No vulnerabilities found. - - -Naoto-Ida/PiStats-Server -https://github.com/Naoto-Ida/PiStats-Server -Entry file: PiStats-Server/application/__init__.py -Scanned: 2016-10-19 09:53:52.828396 -No vulnerabilities found. - - -ThaWeatherman/text_command -https://github.com/ThaWeatherman/text_command -Entry file: text_command/run.py -Scanned: 2016-10-19 09:53:54.653875 -No vulnerabilities found. - - -MrNiebieski/RaspberryPiStreamming -https://github.com/MrNiebieski/RaspberryPiStreamming -Entry file: RaspberryPiStreamming/stream.py -Scanned: 2016-10-19 09:53:56.312723 -No vulnerabilities found. - - -anuradhavakil/FinalBusSimulator -https://github.com/anuradhavakil/FinalBusSimulator -Entry file: FinalBusSimulator/Bus.py -Scanned: 2016-10-19 09:53:57.629732 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Turistforeningen/sherpa-response -https://github.com/Turistforeningen/sherpa-response -Entry file: sherpa-response/flaskr/flaskr.py -Scanned: 2016-10-19 09:53:59.957223 -No vulnerabilities found. - - -LChristakis/chalice-hunter -https://github.com/LChristakis/chalice-hunter -Entry file: chalice-hunter/chalice-hunter.py -Scanned: 2016-10-19 09:54:04.542603 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: chalice-hunter/lib/python3.4/struct.py - -g12mcgov/Macon-Command-Center-API -https://github.com/g12mcgov/Macon-Command-Center-API -Entry file: Macon-Command-Center-API/app.py -Scanned: 2016-10-19 09:54:05.878745 -No vulnerabilities found. - - -jazzblue/mgorest -https://github.com/jazzblue/mgorest -Entry file: mgorest/mgorest/__init__.py -Scanned: 2016-10-19 09:54:07.226912 -No vulnerabilities found. - - -gouthambs/Flask-Blogging -https://github.com/gouthambs/Flask-Blogging -Entry file: Flask-Blogging/test/__init__.py -Scanned: 2016-10-19 09:54:10.440923 -No vulnerabilities found. - - -mardix/flask-cloudy -https://github.com/mardix/flask-cloudy -Entry file: flask-cloudy/example/app.py -Scanned: 2016-10-19 09:54:10.935428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -convox-archive/flask -https://github.com/convox-archive/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:54:11.961879 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -onlytiancai/ansible-celery-flask-demo -https://github.com/onlytiancai/ansible-celery-flask-demo -Entry file: ansible-celery-flask-demo/app.py -Scanned: 2016-10-19 09:54:13.188000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chanyying/Flask -https://github.com/chanyying/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:54:14.691896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rituraj0/Flask -https://github.com/rituraj0/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:54:15.179632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nylas/ansible-flask-example -https://github.com/nylas/ansible-flask-example -Entry file: ansible-flask-example/roles/app/files/flask_app.py -Scanned: 2016-10-19 09:54:29.996689 -No vulnerabilities found. - - -matteotiziano/secret-harbor -https://github.com/matteotiziano/secret-harbor -Entry file: secret-harbor/app.py -Scanned: 2016-10-19 09:54:34.252063 -Vulnerability 1: -File: secret-harbor/app.py - > User input at line 46, trigger word "get(": - hocr = request.form.get('hocr') or '' -Reassigned in: - File: secret-harbor/app.py - > Line 47: ext = hocr'.hocr''.txt' - File: secret-harbor/app.py - > Line 55: command = ['tesseract', input_file, output_file, '-l', request.form['lang'], hocr] - File: secret-harbor/app.py - > Line 56: proc = subprocess.Popen(command,stderr=subprocess.PIPE) - File: secret-harbor/app.py - > Line 59: output_file += ext - File: secret-harbor/app.py - > Line 62: f = open(output_file) - File: secret-harbor/app.py - > Line 52: output_file = os.path.join(folder, app.config['OCR_OUTPUT_FILE']) -File: secret-harbor/app.py - > reaches line 63, trigger word "jsonify(": - resp = jsonify('status''ocr'200{k : v.decode('utf-8') for (k, v) in enumerate(f.read().splitlines())}) - - - -sasubillis/flask_experiments -https://github.com/sasubillis/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-19 09:54:38.245449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thanhson1085/flask-celery-rabbitmq-generate-thumbnail -https://github.com/thanhson1085/flask-celery-rabbitmq-generate-thumbnail -Entry file: flask-celery-rabbitmq-generate-thumbnail/server.py -Scanned: 2016-10-19 09:54:40.574034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -letfly/flask-examples -https://github.com/letfly/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-19 09:54:43.125677 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -andrewheekin/flasky -https://github.com/andrewheekin/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:54:47.104320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AbuzzT/flasktaskr -https://github.com/AbuzzT/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:54:47.593369 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kuba777/flasktaskr -https://github.com/kuba777/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:54:49.106955 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dbourdeveloper/flaskrdb -https://github.com/dbourdeveloper/flaskrdb -Entry file: flaskrdb/webapp.py -Scanned: 2016-10-19 09:54:53.869861 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskrdb/venv/lib/python2.7/genericpath.py - -byoungdale/flasktaskr -https://github.com/byoungdale/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:54:54.374182 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -akicqi/flaskr -https://github.com/akicqi/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:54:54.877548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taishi06/flaskr -https://github.com/taishi06/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:54:55.362922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zedzew/flaskblog -https://github.com/zedzew/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 09:54:55.878987 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -nathanhilbert/flaskboiler -https://github.com/nathanhilbert/flaskboiler -Entry file: flaskboiler/flaskboiler/core.py -Scanned: 2016-10-19 09:54:57.333220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Augustles/flaskdemo -https://github.com/Augustles/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 09:54:57.857636 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -abunsen/FlaskProxy -https://github.com/abunsen/FlaskProxy -Entry file: FlaskProxy/proxy.py -Scanned: 2016-10-19 09:55:01.677577 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sarangbaheti/flaskpython1 -https://github.com/sarangbaheti/flaskpython1 -Entry file: flaskpython1/flask1.py -Scanned: 2016-10-19 09:55:03.020163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iGaskin/FlaskExample -https://github.com/iGaskin/FlaskExample -Entry file: FlaskExample/routes.py -Scanned: 2016-10-19 09:55:06.524570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PiJoules/FlaskApache -https://github.com/PiJoules/FlaskApache -Entry file: FlaskApache/__init__.py -Scanned: 2016-10-19 09:55:08.864353 -No vulnerabilities found. - - -IcedNecro/FlaskTask -https://github.com/IcedNecro/FlaskTask -Entry file: FlaskTask/modules/controller.py -Scanned: 2016-10-19 09:55:10.104835 -No vulnerabilities found. - - -myang321/myFlask -https://github.com/myang321/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-19 09:55:10.589872 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -okmyomar/flask-implementation -https://github.com/okmyomar/flask-implementation -Entry file: None -Scanned: 2016-10-19 09:55:12.103335 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/okmyomar/flask-implementation. - -Condla/flask-exp -https://github.com/Condla/flask-exp -Entry file: flask-exp/app.py -Scanned: 2016-10-19 09:55:13.331498 -No vulnerabilities found. - - -smoll/flask-container -https://github.com/smoll/flask-container -Entry file: flask-container/web/app.py -Scanned: 2016-10-19 09:55:14.560322 -No vulnerabilities found. - - -parvez210/flask-setup -https://github.com/parvez210/flask-setup -Entry file: None -Scanned: 2016-10-19 09:55:18.444456 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -joelviel/flask-jtable -https://github.com/joelviel/flask-jtable -Entry file: flask-jtable/main.py -Scanned: 2016-10-19 09:55:22.041763 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -pkulev/flask-study -https://github.com/pkulev/flask-study -Entry file: flask-study/hello_flask.py -Scanned: 2016-10-19 09:55:32.464657 -No vulnerabilities found. - - -pbernat/flask-start -https://github.com/pbernat/flask-start -Entry file: flask-start/main.py -Scanned: 2016-10-19 09:55:37.133319 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -paradox41/flask-boilerplate -https://github.com/paradox41/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 09:55:38.642437 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paradox41/flask-boilerplate. - -mgenkin/flask-app -https://github.com/mgenkin/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 09:55:41.324154 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -viniciuschiele/flask-password -https://github.com/viniciuschiele/flask-password -Entry file: flask-password/examples/bcrypt_example.py -Scanned: 2016-10-19 09:55:45.177822 -No vulnerabilities found. - - -christopher-hartley/flask-blog -https://github.com/christopher-hartley/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:55:45.749686 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -lisbitid/less_flask -https://github.com/lisbitid/less_flask -Entry file: less_flask/test/flask_admin_examples/quickstart/app.py -Scanned: 2016-10-19 09:56:24.170875 -No vulnerabilities found. - - -PurplePilot/flask-intro -https://github.com/PurplePilot/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:56:25.526946 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rob-nn/flask_examples -https://github.com/rob-nn/flask_examples -Entry file: flask_examples/hello.py -Scanned: 2016-10-19 09:56:26.886486 -No vulnerabilities found. - - -guikingma/flask_studies -https://github.com/guikingma/flask_studies -Entry file: flask_studies/app.py -Scanned: 2016-10-19 09:56:28.562929 -No vulnerabilities found. - - -AbuzzT/flask-blog -https://github.com/AbuzzT/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:56:29.143069 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rysev-a/flask-start -https://github.com/rysev-a/flask-start -Entry file: flask-start/main.py -Scanned: 2016-10-19 09:56:30.347498 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -iamsteveholmes/flask-test -https://github.com/iamsteveholmes/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 09:56:30.860080 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -takuti-sandbox/hello-flask -https://github.com/takuti-sandbox/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 09:56:31.488285 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -miscbits/flaskTestApp -https://github.com/miscbits/flaskTestApp -Entry file: flaskTestApp/hello.py -Scanned: 2016-10-19 09:56:32.076634 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskTestApp/venv/lib/python3.4/struct.py - -chihhaolin/FlaskWebDevelopment -https://github.com/chihhaolin/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/Full_Stack_Foundations/finalproject.py -Scanned: 2016-10-19 09:56:33.762702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikeywaites/kim-flask-example -https://github.com/mikeywaites/kim-flask-example -Entry file: kim-flask-example/fooder/app.py -Scanned: 2016-10-19 09:56:35.148180 -No vulnerabilities found. - - -prakhar-agarwal/Flask-integration-with-Celery -https://github.com/prakhar-agarwal/Flask-integration-with-Celery -Entry file: Flask-integration-with-Celery/app.py -Scanned: 2016-10-19 09:56:36.372420 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igsm/Flask-SocialApp -https://github.com/igsm/Flask-SocialApp -Entry file: Flask-SocialApp/app.py -Scanned: 2016-10-19 09:56:37.742580 -No vulnerabilities found. - - -zeugmato/awesome-flask-todo -https://github.com/zeugmato/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 09:56:38.249206 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeugmato/awesome-flask-todo. - -roblayton/flask-pyserver2 -https://github.com/roblayton/flask-pyserver2 -Entry file: flask-pyserver2/app.py -Scanned: 2016-10-19 09:56:40.596334 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-pyserver2/venv/lib/python2.7/genericpath.py - -gregorynicholas/appengine-flask-restplus -https://github.com/gregorynicholas/appengine-flask-restplus -Entry file: appengine-flask-restplus/main.py -Scanned: 2016-10-19 09:56:41.952417 -No vulnerabilities found. - - -emilyhorsman/flask-login-authomatic -https://github.com/emilyhorsman/flask-login-authomatic -Entry file: flask-login-authomatic/app.py -Scanned: 2016-10-19 09:56:43.175630 -No vulnerabilities found. - - -yakudzam/flask-gae-blog -https://github.com/yakudzam/flask-gae-blog -Entry file: flask-gae-blog/src/lib/flask/sessions.py -Scanned: 2016-10-19 09:56:48.686893 -No vulnerabilities found. - - -Prequell/Flask-Boilerplate-Extended -https://github.com/Prequell/Flask-Boilerplate-Extended -Entry file: Flask-Boilerplate-Extended/app/__init__.py -Scanned: 2016-10-19 09:56:49.964147 -No vulnerabilities found. - - -Hellemos/flask-intro-posts -https://github.com/Hellemos/flask-intro-posts -Entry file: flask-intro-posts/app.py -Scanned: 2016-10-19 09:56:50.530628 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-intro-posts/venv/lib/python2.7/genericpath.py - -idimmmko/Flask-FilesExchange -https://github.com/idimmmko/Flask-FilesExchange -Entry file: Flask-FilesExchange/application.py -Scanned: 2016-10-19 09:56:51.743812 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jbuchstaller/flask-hello-world -https://github.com/jbuchstaller/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:56:52.275047 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -oleksdovz/docker-flask-orchestrator -https://github.com/oleksdovz/docker-flask-orchestrator -Entry file: docker-flask-orchestrator/docker-flask-orchestrator.py -Scanned: 2016-10-19 09:56:53.491239 -No vulnerabilities found. - - -christopher-hartley/flask-hello-world -https://github.com/christopher-hartley/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:56:54.033520 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -melignus/flask-ldap-base -https://github.com/melignus/flask-ldap-base -Entry file: flask-ldap-base/app/__init__.py -Scanned: 2016-10-19 09:56:55.246110 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AbuzzT/flask-hello-world -https://github.com/AbuzzT/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:56:56.235605 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -jlybianto/flask_api_posts -https://github.com/jlybianto/flask_api_posts -Entry file: flask_api_posts/posts/__init__.py -Scanned: 2016-10-19 09:56:57.603165 -Vulnerability 1: -File: flask_api_posts/posts/api.py - > User input at line 28, trigger word "get(": - body_like = request.args.get('body_like') -Reassigned in: - File: flask_api_posts/posts/api.py - > Line 40: posts = posts.filter(models.Post.title.contains(title_like)) - File: flask_api_posts/posts/api.py - > Line 46: posts = posts.all() - File: flask_api_posts/posts/api.py - > Line 49: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask_api_posts/posts/api.py - > Line 50: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask_api_posts/posts/api.py - > Line 31: posts = session.query(models.Post) -File: flask_api_posts/posts/api.py - > reaches line 35, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)).filter(models.Post.body.contains(body_like)) - -Vulnerability 2: -File: flask_api_posts/posts/api.py - > User input at line 25, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: flask_api_posts/posts/api.py - > Line 44: posts = posts.filter(models.Post.body.contains(body_like)) - File: flask_api_posts/posts/api.py - > Line 46: posts = posts.all() - File: flask_api_posts/posts/api.py - > Line 49: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask_api_posts/posts/api.py - > Line 50: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask_api_posts/posts/api.py - > Line 31: posts = session.query(models.Post) - File: flask_api_posts/posts/api.py - > Line 35: posts = posts.filter(models.Post.title.contains(title_like)).filter(models.Post.body.contains(body_like)) -File: flask_api_posts/posts/api.py - > reaches line 40, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - -Vulnerability 3: -File: flask_api_posts/posts/api.py - > User input at line 28, trigger word "get(": - body_like = request.args.get('body_like') -Reassigned in: - File: flask_api_posts/posts/api.py - > Line 40: posts = posts.filter(models.Post.title.contains(title_like)) - File: flask_api_posts/posts/api.py - > Line 46: posts = posts.all() - File: flask_api_posts/posts/api.py - > Line 49: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask_api_posts/posts/api.py - > Line 50: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask_api_posts/posts/api.py - > Line 31: posts = session.query(models.Post) -File: flask_api_posts/posts/api.py - > reaches line 44, trigger word "filter(": - posts = posts.filter(models.Post.body.contains(body_like)) - - - -bourdibay/MinimalistPythonFlaskServer -https://github.com/bourdibay/MinimalistPythonFlaskServer -Entry file: MinimalistPythonFlaskServer/server.py -Scanned: 2016-10-19 09:56:58.980250 -No vulnerabilities found. - - -jreiher2003/Web-Development-with-Flask -https://github.com/jreiher2003/Web-Development-with-Flask -Entry file: Web-Development-with-Flask/lesson 4 -User Accounts and Security/cookie.py -Scanned: 2016-10-19 09:57:02.084469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johnwfisherii/flask-pdf-generator -https://github.com/johnwfisherii/flask-pdf-generator -Entry file: flask-pdf-generator/flaskpdf/main.py -Scanned: 2016-10-19 09:57:03.413322 -No vulnerabilities found. - - -flask-admin/flask-admin-profiler -https://github.com/flask-admin/flask-admin-profiler -Entry file: None -Scanned: 2016-10-19 09:57:27.689900 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/flask-admin/flask-admin-profiler. - -sdia/Antoine_App -https://github.com/sdia/Antoine_App -Entry file: Antoine_App/app.py -Scanned: 2016-10-19 09:57:29.863852 -No vulnerabilities found. - - -dannguyen/babynames-flaskapp -https://github.com/dannguyen/babynames-flaskapp -Entry file: babynames-flaskapp/app.py -Scanned: 2016-10-19 09:57:31.922769 -No vulnerabilities found. - - -Maurius-03/helloapp -https://github.com/Maurius-03/helloapp -Entry file: helloapp/hello.py -Scanned: 2016-10-19 09:57:33.152849 -No vulnerabilities found. - - -kevin2007/mm -https://github.com/kevin2007/mm -Entry file: None -Scanned: 2016-10-19 09:57:34.740611 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kevin2007/mm. - -jegsmith/textlocationapp -https://github.com/jegsmith/textlocationapp -Entry file: None -Scanned: 2016-10-19 09:57:36.847530 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jegsmith/textlocationapp. - -pathunstrom/giveaway -https://github.com/pathunstrom/giveaway -Entry file: giveaway/app/routes.py -Scanned: 2016-10-19 09:57:38.179762 -No vulnerabilities found. - - -toumorokoshi/pitcher -https://github.com/toumorokoshi/pitcher -Entry file: pitcher/pitcher/pitcher/app.py -Scanned: 2016-10-19 09:57:39.441407 -No vulnerabilities found. - - -travelton/pork -https://github.com/travelton/pork -Entry file: pork/pork/pork.py -Scanned: 2016-10-19 09:57:40.805651 -Vulnerability 1: -File: pork/pork/pork.py - > User input at line 29, trigger word "get(": - mime = request.json.get('mime', None) -Reassigned in: - File: pork/pork/pork.py - > Line 47: raw_scan_result = client.request(app.config['SPAMD_SERVER'], app.config['SPAMD_PORT'], spamassassin_command, mime) - File: pork/pork/pork.py - > Line 55: parsed_scan_result = client.parse(spamassassin_command, raw_scan_result) - File: pork/pork/pork.py - > Line 66: ret_MAYBE_FUNCTION_NAME = response - File: pork/pork/pork.py - > Line 42: response = jsonify('result''MIME required!') - File: pork/pork/pork.py - > Line 44: ret_MAYBE_FUNCTION_NAME = response -File: pork/pork/pork.py - > reaches line 57, trigger word "jsonify(": - response = jsonify('spamassassin'parsed_scan_result) - -Vulnerability 2: -File: pork/pork/pork.py - > User input at line 36, trigger word "get(": - spamassassin_command = spamassassin_config.get('command') -Reassigned in: - File: pork/pork/pork.py - > Line 38: spamassassin_command = 'REPORT' - File: pork/pork/pork.py - > Line 47: raw_scan_result = client.request(app.config['SPAMD_SERVER'], app.config['SPAMD_PORT'], spamassassin_command, mime) - File: pork/pork/pork.py - > Line 55: parsed_scan_result = client.parse(spamassassin_command, raw_scan_result) - File: pork/pork/pork.py - > Line 66: ret_MAYBE_FUNCTION_NAME = response - File: pork/pork/pork.py - > Line 42: response = jsonify('result''MIME required!') - File: pork/pork/pork.py - > Line 44: ret_MAYBE_FUNCTION_NAME = response -File: pork/pork/pork.py - > reaches line 57, trigger word "jsonify(": - response = jsonify('spamassassin'parsed_scan_result) - -Vulnerability 3: -File: pork/pork/pork.py - > User input at line 29, trigger word "get(": - mime = request.json.get('mime', None) -Reassigned in: - File: pork/pork/pork.py - > Line 47: raw_scan_result = client.request(app.config['SPAMD_SERVER'], app.config['SPAMD_PORT'], spamassassin_command, mime) - File: pork/pork/pork.py - > Line 55: parsed_scan_result = client.parse(spamassassin_command, raw_scan_result) - File: pork/pork/pork.py - > Line 66: ret_MAYBE_FUNCTION_NAME = response - File: pork/pork/pork.py - > Line 42: response = jsonify('result''MIME required!') - File: pork/pork/pork.py - > Line 44: ret_MAYBE_FUNCTION_NAME = response -File: pork/pork/pork.py - > reaches line 60, trigger word "jsonify(": - response = jsonify('spamassassin''raw'raw_scan_result) - -Vulnerability 4: -File: pork/pork/pork.py - > User input at line 36, trigger word "get(": - spamassassin_command = spamassassin_config.get('command') -Reassigned in: - File: pork/pork/pork.py - > Line 38: spamassassin_command = 'REPORT' - File: pork/pork/pork.py - > Line 47: raw_scan_result = client.request(app.config['SPAMD_SERVER'], app.config['SPAMD_PORT'], spamassassin_command, mime) - File: pork/pork/pork.py - > Line 55: parsed_scan_result = client.parse(spamassassin_command, raw_scan_result) - File: pork/pork/pork.py - > Line 66: ret_MAYBE_FUNCTION_NAME = response - File: pork/pork/pork.py - > Line 42: response = jsonify('result''MIME required!') - File: pork/pork/pork.py - > Line 44: ret_MAYBE_FUNCTION_NAME = response -File: pork/pork/pork.py - > reaches line 60, trigger word "jsonify(": - response = jsonify('spamassassin''raw'raw_scan_result) - - - -aantonw/notesapi -https://github.com/aantonw/notesapi -Entry file: notesapi/notesapi.py -Scanned: 2016-10-19 09:57:42.047247 -Vulnerability 1: -File: notesapi/notesapi.py - > User input at line 106, trigger word "get(": - db = db_get() -Reassigned in: - File: notesapi/notesapi.py - > Line 107: dbnote = note_byid(db, note_id) - File: notesapi/notesapi.py - > Line 109: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 110, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes'dbnote) - -Vulnerability 2: -File: notesapi/notesapi.py - > User input at line 117, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -File: notesapi/notesapi.py - > reaches line 122, trigger word "execute(": - db.execute('INSERT INTO notes (title, content) VALUES (?, ?)', [note['title'], note['content']]) - -Vulnerability 3: -File: notesapi/notesapi.py - > User input at line 117, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -File: notesapi/notesapi.py - > reaches line 125, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('notes'note), 201) - -Vulnerability 4: -File: notesapi/notesapi.py - > User input at line 139, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -Reassigned in: - File: notesapi/notesapi.py - > Line 133: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 143, trigger word "execute(": - db.execute('UPDATE notes SET title=?, content=? WHERE id=?', [note['title'], note['content'], note_id]) - -Vulnerability 5: -File: notesapi/notesapi.py - > User input at line 139, trigger word "get(": - note = 'title''content'request.json['title']request.json.get('content', '') -Reassigned in: - File: notesapi/notesapi.py - > Line 133: ret_MAYBE_FUNCTION_NAME = abort(404) -File: notesapi/notesapi.py - > reaches line 146, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes'note) - - - -ahmedsalman/Social-crawler -https://github.com/ahmedsalman/Social-crawler -Entry file: Social-crawler/index.py -Scanned: 2016-10-19 09:57:43.393773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adedot/adelabs-dashboard-project -https://github.com/adedot/adelabs-dashboard-project -Entry file: adelabs-dashboard-project/lwazi_web_service.py -Scanned: 2016-10-19 09:57:44.628042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ZhangBohan/smshub -https://github.com/ZhangBohan/smshub -Entry file: smshub/smshub.py -Scanned: 2016-10-19 09:57:45.970584 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabasoad/py_restservice -https://github.com/fabasoad/py_restservice -Entry file: py_restservice/RestService/__init__.py -Scanned: 2016-10-19 09:57:47.321983 -No vulnerabilities found. - - -CosineGaming/cosine-gaming -https://github.com/CosineGaming/cosine-gaming -Entry file: cosine-gaming/main.py -Scanned: 2016-10-19 09:57:56.455135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AllenLH0/Microblog -https://github.com/AllenLH0/Microblog -Entry file: Microblog/flask/lib/python3.4/site-packages/flask_openid.py -Scanned: 2016-10-19 09:58:03.274541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kagyi/kagyi.io -https://github.com/Kagyi/kagyi.io -Entry file: None -Scanned: 2016-10-19 09:58:05.603647 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Kagyi/kagyi.io. - -nemonanja/spawncamping-wight -https://github.com/nemonanja/spawncamping-wight -Entry file: spawncamping-wight/db_api/resources.py -Scanned: 2016-10-19 09:58:07.421948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -whotemp/movie-site -https://github.com/whotemp/movie-site -Entry file: movie-site/app/__init__.py -Scanned: 2016-10-19 09:58:09.071113 -No vulnerabilities found. - - -recio862/RestTickets -https://github.com/recio862/RestTickets -Entry file: None -Scanned: 2016-10-19 09:58:13.491230 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LChristakis/chalice-hunter -https://github.com/LChristakis/chalice-hunter -Entry file: chalice-hunter/chalice-hunter.py -Scanned: 2016-10-19 09:58:14.073527 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: chalice-hunter/lib/python3.4/struct.py - -walkerdb/galactic_odometer -https://github.com/walkerdb/galactic_odometer -Entry file: galactic_odometer/gped.py -Scanned: 2016-10-19 09:58:15.777852 -No vulnerabilities found. - - -b-cube/pipeline-demo -https://github.com/b-cube/pipeline-demo -Entry file: pipeline-demo/demo/demo.py -Scanned: 2016-10-19 09:58:17.347470 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -felzix/game-of-life -https://github.com/felzix/game-of-life -Entry file: game-of-life/web_server/game_of_life_web_server/__init__.py -Scanned: 2016-10-19 09:58:18.692176 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nickjj/flask-webpack -https://github.com/nickjj/flask-webpack -Entry file: flask-webpack/flask_webpack/tests/test_app/app.py -Scanned: 2016-10-19 09:58:21.593790 -No vulnerabilities found. - - -manishbalyan/flask -https://github.com/manishbalyan/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:58:22.978551 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -carolinetychen/flask -https://github.com/carolinetychen/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 09:58:23.859274 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -blha303/question -https://github.com/blha303/question -Entry file: question/question.py -Scanned: 2016-10-19 09:58:29.147481 -No vulnerabilities found. - - -kunalashu/Flask -https://github.com/kunalashu/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 09:58:29.707381 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nylas/ansible-flask-example -https://github.com/nylas/ansible-flask-example -Entry file: ansible-flask-example/roles/app/files/flask_app.py -Scanned: 2016-10-19 09:58:32.131861 -No vulnerabilities found. - - -jennielees/flask-sqlalchemy-example -https://github.com/jennielees/flask-sqlalchemy-example -Entry file: flask-sqlalchemy-example/app.py -Scanned: 2016-10-19 09:58:34.733835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -toumorokoshi/flask-transmute -https://github.com/toumorokoshi/flask-transmute -Entry file: flask-transmute/examples/deck.py -Scanned: 2016-10-19 09:58:36.437886 -No vulnerabilities found. - - -josephrosenberg/flask_template -https://github.com/josephrosenberg/flask_template -Entry file: None -Scanned: 2016-10-19 09:58:36.947132 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/josephrosenberg/flask_template. - -Leo-G/Flask-Users -https://github.com/Leo-G/Flask-Users -Entry file: Flask-Users/app/__init__.py -Scanned: 2016-10-19 09:58:45.869907 -No vulnerabilities found. - - -ethan-jiang-1/flaskr -https://github.com/ethan-jiang-1/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:58:46.416861 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andrewheekin/flasky -https://github.com/andrewheekin/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 09:58:46.909095 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -christopher-hartley/flasktaskr -https://github.com/christopher-hartley/flasktaskr -Entry file: None -Scanned: 2016-10-19 09:58:47.455996 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -procha1/flaskproj -https://github.com/procha1/flaskproj -Entry file: flaskproj/hello.py -Scanned: 2016-10-19 09:58:48.751417 -No vulnerabilities found. - - -vehrka/flaskscaffold -https://github.com/vehrka/flaskscaffold -Entry file: flaskscaffold/app/__init__.py -Scanned: 2016-10-19 09:58:50.176073 -No vulnerabilities found. - - -riida/flaskr -https://github.com/riida/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:58:50.682259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fogonthedowns/flaskapp -https://github.com/fogonthedowns/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 09:58:51.177104 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lucumt/flaskr -https://github.com/lucumt/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 09:58:58.684715 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmalloc/flask-simple-api -https://github.com/vmalloc/flask-simple-api -Entry file: flask-simple-api/tests/conftest.py -Scanned: 2016-10-19 09:59:06.139576 -No vulnerabilities found. - - -KristoferEng/FlaskApp -https://github.com/KristoferEng/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 09:59:07.733810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rituraj0/flaskT -https://github.com/rituraj0/flaskT -Entry file: flaskT/flaskT.py -Scanned: 2016-10-19 09:59:10.009269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MortalCatalyst/CharmFlask -https://github.com/MortalCatalyst/CharmFlask -Entry file: CharmFlask/CharmFlask.py -Scanned: 2016-10-19 09:59:15.764416 -No vulnerabilities found. - - -parvez210/flask-setup -https://github.com/parvez210/flask-setup -Entry file: None -Scanned: 2016-10-19 09:59:16.285515 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JungHun/flask-api -https://github.com/JungHun/flask-api -Entry file: flask-api/api/controllers.py -Scanned: 2016-10-19 09:59:21.750907 -No vulnerabilities found. - - -pastelblush/Flask-Python -https://github.com/pastelblush/Flask-Python -Entry file: Flask-Python/app.py -Scanned: 2016-10-19 09:59:23.049039 -No vulnerabilities found. - - -viniciuschiele/flask-password -https://github.com/viniciuschiele/flask-password -Entry file: flask-password/examples/bcrypt_example.py -Scanned: 2016-10-19 09:59:24.421311 -No vulnerabilities found. - - -uruddarraju/CeleryFlask -https://github.com/uruddarraju/CeleryFlask -Entry file: None -Scanned: 2016-10-19 09:59:25.685075 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/uruddarraju/CeleryFlask. - -sunze/py_flask -https://github.com/sunze/py_flask -Entry file: py_flask/app/__init__.py -Scanned: 2016-10-19 09:59:31.818261 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -christopher-hartley/flask-blog -https://github.com/christopher-hartley/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:59:32.393982 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -chengzhoukun/flask-blog -https://github.com/chengzhoukun/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:59:32.914240 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -joymove/flask-blog -https://github.com/joymove/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 09:59:33.917736 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sure15/flask-intro -https://github.com/sure15/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 09:59:34.416824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slipvyne/hans-flask -https://github.com/slipvyne/hans-flask -Entry file: hans-flask/app/__init__.py -Scanned: 2016-10-19 09:59:37.392632 -No vulnerabilities found. - - -rob-nn/flask_examples -https://github.com/rob-nn/flask_examples -Entry file: flask_examples/hello.py -Scanned: 2016-10-19 09:59:39.635517 -No vulnerabilities found. - - -BartGo/flask-drafts -https://github.com/BartGo/flask-drafts -Entry file: flask-drafts/app/__init__.py -Scanned: 2016-10-19 09:59:40.984976 -No vulnerabilities found. - - -ghostrong/flask-template -https://github.com/ghostrong/flask-template -Entry file: None -Scanned: 2016-10-19 09:59:41.505738 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ghostrong/flask-template. - -KunstencentrumVooruit/flask_swagger -https://github.com/KunstencentrumVooruit/flask_swagger -Entry file: flask_swagger/template.py -Scanned: 2016-10-19 09:59:42.739032 -No vulnerabilities found. - - -takuti-sandbox/hello-flask -https://github.com/takuti-sandbox/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 09:59:48.306923 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -hectorbenitez/flask-heroku -https://github.com/hectorbenitez/flask-heroku -Entry file: flask-heroku/hello.py -Scanned: 2016-10-19 09:59:49.806893 -No vulnerabilities found. - - -benregn/flask-python-social-auth -https://github.com/benregn/flask-python-social-auth -Entry file: flask-python-social-auth/flask_social_auth/app.py -Scanned: 2016-10-19 09:59:51.188176 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -dipanjanS/flask-api-tutorials -https://github.com/dipanjanS/flask-api-tutorials -Entry file: flask-api-tutorials/flask-animals-apps/modularized-app/socapp/__init__.py -Scanned: 2016-10-19 09:59:52.479865 -No vulnerabilities found. - - -csbailey5t/flask_sample_app -https://github.com/csbailey5t/flask_sample_app -Entry file: flask_sample_app/flaskr/flaskr.py -Scanned: 2016-10-19 09:59:53.784379 -No vulnerabilities found. - - -martin-appcito/demo-flask-app -https://github.com/martin-appcito/demo-flask-app -Entry file: demo-flask-app/app.py -Scanned: 2016-10-19 09:59:55.120488 -No vulnerabilities found. - - -wadfordj/flask-hello-world -https://github.com/wadfordj/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 09:59:55.657684 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -cassiel/heroku-flask-mongodb -https://github.com/cassiel/heroku-flask-mongodb -Entry file: heroku-flask-mongodb/flask-db-example.py -Scanned: 2016-10-19 10:00:00.951067 -No vulnerabilities found. - - -markmuetz/flask-1000earths -https://github.com/markmuetz/flask-1000earths -Entry file: flask-1000earths/app.py -Scanned: 2016-10-19 10:00:07.979453 -Vulnerability 1: -File: flask-1000earths/app.py - > User input at line 148, trigger word "form[": - new_path = request.form['path'] -Reassigned in: - File: flask-1000earths/app.py - > Line 151: page.path = new_path -File: flask-1000earths/app.py - > reaches line 181, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(page.path) - - - -ecarrara/cookiecutter-flask-project -https://github.com/ecarrara/cookiecutter-flask-project -Entry file: cookiecutter-flask-project/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/__init__.py -Scanned: 2016-10-19 10:00:10.384631 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pasharik95/lab1-flask- -https://github.com/pasharik95/lab1-flask- -Entry file: lab1-flask-/Register.py -Scanned: 2016-10-19 10:00:11.743616 -No vulnerabilities found. - - -mattaudesse/flask-orgchart-api -https://github.com/mattaudesse/flask-orgchart-api -Entry file: None -Scanned: 2016-10-19 10:00:14.128755 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mattaudesse/flask-orgchart-api. - -nthock/flask_simple_app -https://github.com/nthock/flask_simple_app -Entry file: flask_simple_app/simple_app.py -Scanned: 2016-10-19 10:00:17.373803 -No vulnerabilities found. - - -nicovogelaar/time-tracker-flask -https://github.com/nicovogelaar/time-tracker-flask -Entry file: time-tracker-flask/app/__init__.py -Scanned: 2016-10-19 10:00:18.789606 -Vulnerability 1: -File: time-tracker-flask/app/views/media.py - > User input at line 37, trigger word "get(": - result = self.api.get('/api/v1/media/' + str(media_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/media.py - > Line 34: result = -File: time-tracker-flask/app/views/media.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 2: -File: time-tracker-flask/app/views/media.py - > User input at line 46, trigger word "files[": - file = request.files['media'] -Reassigned in: - File: time-tracker-flask/app/views/media.py - > Line 49: uploaded_file = save_uploaded_file(file) - File: time-tracker-flask/app/views/media.py - > Line 54: files = [('media', (secure_filename(file.filename), open(uploaded_file, 'rb'), file.content_type))] - File: time-tracker-flask/app/views/media.py - > Line 56: result = self.api.post('/api/v1/media.json', , 'files'files) - File: time-tracker-flask/app/views/media.py - > Line 43: result = -File: time-tracker-flask/app/views/media.py - > reaches line 58, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 3: -File: time-tracker-flask/app/views/api.py - > User input at line 29, trigger word "get(": - result = self.api.get('/api/v1/activities.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 31: result = self.api.get('/api/v1/activities/' + str(activity_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 33, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 4: -File: time-tracker-flask/app/views/api.py - > User input at line 31, trigger word "get(": - result = self.api.get('/api/v1/activities/' + str(activity_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 29: result = self.api.get('/api/v1/activities.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 33, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 5: -File: time-tracker-flask/app/views/api.py - > User input at line 37, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 39: result = self.api.post('/api/v1/activities.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 41, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 6: -File: time-tracker-flask/app/views/api.py - > User input at line 51, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 53: result = self.api.put('/api/v1/activities/' + str(activity_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 55, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 7: -File: time-tracker-flask/app/views/api.py - > User input at line 65, trigger word "get(": - result = self.api.get('/api/v1/addresses.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 67: result = self.api.get('/api/v1/addresses/' + str(address_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 69, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 8: -File: time-tracker-flask/app/views/api.py - > User input at line 67, trigger word "get(": - result = self.api.get('/api/v1/addresses/' + str(address_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 65: result = self.api.get('/api/v1/addresses.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 69, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 9: -File: time-tracker-flask/app/views/api.py - > User input at line 79, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 81: result = self.api.put('/api/v1/addresses/' + str(address_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 83, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 10: -File: time-tracker-flask/app/views/api.py - > User input at line 93, trigger word "get(": - result = self.api.get('/api/v1/companies.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 95: result = self.api.get('/api/v1/companies/' + str(company_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 97, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 11: -File: time-tracker-flask/app/views/api.py - > User input at line 95, trigger word "get(": - result = self.api.get('/api/v1/companies/' + str(company_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 93: result = self.api.get('/api/v1/companies.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 97, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 12: -File: time-tracker-flask/app/views/api.py - > User input at line 101, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 103: result = self.api.post('/api/v1/companies.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 105, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 13: -File: time-tracker-flask/app/views/api.py - > User input at line 115, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 117: result = self.api.put('/api/v1/companies/' + str(company_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 119, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 14: -File: time-tracker-flask/app/views/api.py - > User input at line 129, trigger word "get(": - result = self.api.get('/api/v1/contact-persons.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 131: result = self.api.get('/api/v1/contact-persons/' + str(contact_person_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 133, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 15: -File: time-tracker-flask/app/views/api.py - > User input at line 131, trigger word "get(": - result = self.api.get('/api/v1/contact-persons/' + str(contact_person_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 129: result = self.api.get('/api/v1/contact-persons.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 133, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 16: -File: time-tracker-flask/app/views/api.py - > User input at line 143, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 145: result = self.api.put('/api/v1/contact-persons/' + str(contact_person_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 147, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 17: -File: time-tracker-flask/app/views/api.py - > User input at line 157, trigger word "get(": - result = self.api.get('/api/v1/invoices.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 159: result = self.api.get('/api/v1/invoices/' + str(invoice_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 161, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 18: -File: time-tracker-flask/app/views/api.py - > User input at line 159, trigger word "get(": - result = self.api.get('/api/v1/invoices/' + str(invoice_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 157: result = self.api.get('/api/v1/invoices.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 161, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 19: -File: time-tracker-flask/app/views/api.py - > User input at line 165, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 167: result = self.api.post('/api/v1/invoices.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 169, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 20: -File: time-tracker-flask/app/views/api.py - > User input at line 179, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 181: result = self.api.put('/api/v1/invoices/' + str(invoice_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 183, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 21: -File: time-tracker-flask/app/views/api.py - > User input at line 204, trigger word "get(": - result = self.api.get('/api/v1/countries.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 206: result = self.api.get('/api/v1/countries/' + str(country_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 208, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 22: -File: time-tracker-flask/app/views/api.py - > User input at line 206, trigger word "get(": - result = self.api.get('/api/v1/countries/' + str(country_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 204: result = self.api.get('/api/v1/countries.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 208, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 23: -File: time-tracker-flask/app/views/api.py - > User input at line 218, trigger word "get(": - result = self.api.get('/api/v1/currencies.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 220: result = self.api.get('/api/v1/currencies/' + str(country_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 222, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 24: -File: time-tracker-flask/app/views/api.py - > User input at line 220, trigger word "get(": - result = self.api.get('/api/v1/currencies/' + str(country_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 218: result = self.api.get('/api/v1/currencies.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 222, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 25: -File: time-tracker-flask/app/views/api.py - > User input at line 232, trigger word "get(": - result = self.api.get('/api/v1/timesheets.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 234: result = self.api.get('/api/v1/timesheets/' + str(timesheet_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 236, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 26: -File: time-tracker-flask/app/views/api.py - > User input at line 234, trigger word "get(": - result = self.api.get('/api/v1/timesheets/' + str(timesheet_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 232: result = self.api.get('/api/v1/timesheets.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 236, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 27: -File: time-tracker-flask/app/views/api.py - > User input at line 240, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 242: result = self.api.post('/api/v1/timesheets.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 244, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 28: -File: time-tracker-flask/app/views/api.py - > User input at line 254, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 256: result = self.api.put('/api/v1/timesheets/' + str(timesheet_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 258, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 29: -File: time-tracker-flask/app/views/api.py - > User input at line 279, trigger word "get(": - result = self.api.get('/api/v1/users.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 281: result = self.api.get('/api/v1/users/' + str(user_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 283, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 30: -File: time-tracker-flask/app/views/api.py - > User input at line 281, trigger word "get(": - result = self.api.get('/api/v1/users/' + str(user_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 279: result = self.api.get('/api/v1/users.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 283, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 31: -File: time-tracker-flask/app/views/api.py - > User input at line 287, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 289: result = self.api.post('/api/v1/users.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 291, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 32: -File: time-tracker-flask/app/views/api.py - > User input at line 301, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 303: result = self.api.put('/api/v1/users/' + str(user_id) + '.json', data) -File: time-tracker-flask/app/views/api.py - > reaches line 305, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 33: -File: time-tracker-flask/app/views/api.py - > User input at line 315, trigger word "get(": - result = self.api.get('/api/v1/vats.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 317: result = self.api.get('/api/v1/vats/' + str(vat_id) + '.json') -File: time-tracker-flask/app/views/api.py - > reaches line 319, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 34: -File: time-tracker-flask/app/views/api.py - > User input at line 317, trigger word "get(": - result = self.api.get('/api/v1/vats/' + str(vat_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/api.py - > Line 315: result = self.api.get('/api/v1/vats.json', request.args.to_dict()) -File: time-tracker-flask/app/views/api.py - > reaches line 319, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 35: -File: time-tracker-flask/app/views/client.py - > User input at line 16, trigger word "get(": - result = self.api.get('/api/v1/clients.json', request.args.to_dict()) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 18: result = self.api.get('/api/v1/clients/' + str(client_id) + '.json') -File: time-tracker-flask/app/views/client.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 36: -File: time-tracker-flask/app/views/client.py - > User input at line 18, trigger word "get(": - result = self.api.get('/api/v1/clients/' + str(client_id) + '.json') -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 16: result = self.api.get('/api/v1/clients.json', request.args.to_dict()) -File: time-tracker-flask/app/views/client.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 37: -File: time-tracker-flask/app/views/client.py - > User input at line 24, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 26: result = self.api.post('/api/v1/clients.json', data) -File: time-tracker-flask/app/views/client.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 38: -File: time-tracker-flask/app/views/client.py - > User input at line 38, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 40: result = self.api.put('/api/v1/clients/' + str(client_id) + '.json', data) -File: time-tracker-flask/app/views/client.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 39: -File: time-tracker-flask/app/views/client.py - > User input at line 51, trigger word "get(": - result = self.api.get('/api/v1/clients/%d/addresses.json' % client_id, request.args.to_dict()) -File: time-tracker-flask/app/views/client.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 40: -File: time-tracker-flask/app/views/client.py - > User input at line 57, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 59: result = self.api.post('/api/v1/clients/%d/addresses.json' % client_id, data) -File: time-tracker-flask/app/views/client.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 41: -File: time-tracker-flask/app/views/client.py - > User input at line 70, trigger word "get(": - result = self.api.get('/api/v1/clients/%d/contact-persons.json' % client_id, request.args.to_dict()) -File: time-tracker-flask/app/views/client.py - > reaches line 72, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 42: -File: time-tracker-flask/app/views/client.py - > User input at line 76, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 78: result = self.api.post('/api/v1/clients/%d/contact-persons.json' % client_id, data) -File: time-tracker-flask/app/views/client.py - > reaches line 80, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 43: -File: time-tracker-flask/app/views/client.py - > User input at line 89, trigger word "get(": - result = self.api.get('/api/v1/clients/%d/projects.json' % client_id, request.args.to_dict()) -File: time-tracker-flask/app/views/client.py - > reaches line 91, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 44: -File: time-tracker-flask/app/views/client.py - > User input at line 95, trigger word ".data": - data = load_json(request.data) -Reassigned in: - File: time-tracker-flask/app/views/client.py - > Line 97: result = self.api.post('/api/v1/clients/%d/projects.json' % client_id, data) -File: time-tracker-flask/app/views/client.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - - - -koverda/Flask-Survey-API -https://github.com/koverda/Flask-Survey-API -Entry file: Flask-Survey-API/app/__init__.py -Scanned: 2016-10-19 10:00:20.228629 -No vulnerabilities found. - - -toumorokoshi/flask-transmute-swagger -https://github.com/toumorokoshi/flask-transmute-swagger -Entry file: flask-transmute-swagger/examples/deck.py -Scanned: 2016-10-19 10:00:24.599188 -No vulnerabilities found. - - -vatsal13/flask_heroku_seed -https://github.com/vatsal13/flask_heroku_seed -Entry file: flask_heroku_seed/app.py -Scanned: 2016-10-19 10:00:25.872314 -No vulnerabilities found. - - -xiaochenzhuo03/Flask-API-Basic -https://github.com/xiaochenzhuo03/Flask-API-Basic -Entry file: Flask-API-Basic/app_Xiaochen_Zhuo.py -Scanned: 2016-10-19 10:00:28.584479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nmaltais/python_flask_project -https://github.com/nmaltais/python_flask_project -Entry file: python_flask_project/hello.py -Scanned: 2016-10-19 10:00:29.900090 -Vulnerability 1: -File: python_flask_project/hello.py - > User input at line 101, trigger word "get(": - name = request.form.get('name', '') -File: python_flask_project/hello.py - > reaches line 104, trigger word "set_cookie(": - resp.set_cookie('name', name) - - - -trendsetter37/flask-by-example -https://github.com/trendsetter37/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:00:50.851870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -m-andara/TheFlaskProject -https://github.com/m-andara/TheFlaskProject -Entry file: TheFlaskProject/hello.py -Scanned: 2016-10-19 10:00:52.164639 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hwong/heroku_flask_boilerplate -https://github.com/hwong/heroku_flask_boilerplate -Entry file: heroku_flask_boilerplate/server.py -Scanned: 2016-10-19 10:00:53.517948 -No vulnerabilities found. - - -OstrichProjects/Simple-Flask-User-DB -https://github.com/OstrichProjects/Simple-Flask-User-DB -Entry file: Simple-Flask-User-DB/app.py -Scanned: 2016-10-19 10:00:54.791751 -No vulnerabilities found. - - -jstacoder/sa-flask-restful-resource -https://github.com/jstacoder/sa-flask-restful-resource -Entry file: sa-flask-restful-resource/demo/todo.py -Scanned: 2016-10-19 10:00:56.033540 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jon-xavier/flask_hello_world -https://github.com/jon-xavier/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:00:56.563429 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jon-xavier/flask_hello_world. - -api-samples/countries-python-flask -https://github.com/api-samples/countries-python-flask -Entry file: countries-python-flask/countries.py -Scanned: 2016-10-19 10:00:58.041399 -No vulnerabilities found. - - -bharbron/flask_hello_world -https://github.com/bharbron/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:00:58.529238 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bharbron/flask_hello_world. - -Azzssss/awesome-flask-todo -https://github.com/Azzssss/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 10:00:59.067335 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Azzssss/awesome-flask-todo. - -flask-admin/flask-admin-profiler -https://github.com/flask-admin/flask-admin-profiler -Entry file: None -Scanned: 2016-10-19 10:00:59.577436 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/flask-admin/flask-admin-profiler. - -SCDevy/flask-api-sandbox -https://github.com/SCDevy/flask-api-sandbox -Entry file: flask-api-sandbox/app/__init__.py -Scanned: 2016-10-19 10:01:07.112894 -No vulnerabilities found. - - -playgoods/tutoril_flask_migul -https://github.com/playgoods/tutoril_flask_migul -Entry file: tutoril_flask_migul/hello.py -Scanned: 2016-10-19 10:01:09.045367 -No vulnerabilities found. - - -achiku/sample-flask-docker-eb -https://github.com/achiku/sample-flask-docker-eb -Entry file: sample-flask-docker-eb/apps.py -Scanned: 2016-10-19 10:01:10.299212 -No vulnerabilities found. - - -kanishkt/ChatClient-Flask -https://github.com/kanishkt/ChatClient-Flask -Entry file: ChatClient-Flask/setup.py -Scanned: 2016-10-19 10:01:29.323993 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -alex-marmot/awesome-flask-todo -https://github.com/alex-marmot/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 10:01:29.878961 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alex-marmot/awesome-flask-todo. - -llambiel/flask-pgsql-demo -https://github.com/llambiel/flask-pgsql-demo -Entry file: flask-pgsql-demo/app.py -Scanned: 2016-10-19 10:01:31.595780 -No vulnerabilities found. - - -gosequential/flask-boilerplate-with-login -https://github.com/gosequential/flask-boilerplate-with-login -Entry file: flask-boilerplate-with-login/app/__init__.py -Scanned: 2016-10-19 10:01:33.932082 -No vulnerabilities found. - - -nrm176/flask-cpi-service -https://github.com/nrm176/flask-cpi-service -Entry file: flask-cpi-service/init3.py -Scanned: 2016-10-19 10:01:35.417409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrlevitas/Flask-Restaurant-App -https://github.com/mrlevitas/Flask-Restaurant-App -Entry file: Flask-Restaurant-App/restaurant_app.py -Scanned: 2016-10-19 10:01:36.829972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FlaskUniverse/UnFlasked -https://github.com/FlaskUniverse/UnFlasked -Entry file: UnFlasked/index.py -Scanned: 2016-10-19 10:01:38.111888 -No vulnerabilities found. - - -JerryLeooo/codebase -https://github.com/JerryLeooo/codebase -Entry file: codebase/main/app.py -Scanned: 2016-10-19 10:01:39.379647 -No vulnerabilities found. - - -marthaberner/my-first-python-app -https://github.com/marthaberner/my-first-python-app -Entry file: my-first-python-app/models.py -Scanned: 2016-10-19 10:01:40.643622 -No vulnerabilities found. - - -marcusbusby/python_blog -https://github.com/marcusbusby/python_blog -Entry file: None -Scanned: 2016-10-19 10:01:44.748200 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -puras/moofa -https://github.com/puras/moofa -Entry file: None -Scanned: 2016-10-19 10:01:46.136885 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/puras/moofa. - -ShermanMorrison/taskapp -https://github.com/ShermanMorrison/taskapp -Entry file: taskapp/project/__init__.py -Scanned: 2016-10-19 10:01:47.677467 -Vulnerability 1: -File: taskapp/project/users/views.py - > User input at line 56, trigger word ".data": - user = db.session.query(User).filter_by(name=form.name.data).first() -Reassigned in: - File: taskapp/project/users/views.py - > Line 61: session['user_id'] = user.id - File: taskapp/project/users/views.py - > Line 60: session['logged_in'] = True -File: taskapp/project/users/views.py - > reaches line 62, trigger word "flash(": - flash('Welcome ' + user.name + '!') - - - -trevor-snow/microblog -https://github.com/trevor-snow/microblog -Entry file: None -Scanned: 2016-10-19 10:01:48.183822 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pkulev/mblog -https://github.com/pkulev/mblog -Entry file: mblog/mblog/__init__.py -Scanned: 2016-10-19 10:01:50.100290 -Vulnerability 1: -File: mblog/mblog/views.py - > User input at line 20, trigger word ".data": - login = form.login.data -Reassigned in: - File: mblog/mblog/views.py - > Line 22: user = User(db).validate_login(login, password) -File: mblog/mblog/views.py - > reaches line 23, trigger word "flash(": - flash(str(user)) - -Vulnerability 2: -File: mblog/mblog/views.py - > User input at line 21, trigger word ".data": - password = form.password.data -Reassigned in: - File: mblog/mblog/views.py - > Line 22: user = User(db).validate_login(login, password) -File: mblog/mblog/views.py - > reaches line 23, trigger word "flash(": - flash(str(user)) - - - -iancmason/microblog -https://github.com/iancmason/microblog -Entry file: None -Scanned: 2016-10-19 10:01:50.628606 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -IE-NITK/ComicsAPI -https://github.com/IE-NITK/ComicsAPI -Entry file: ComicsAPI/app.py -Scanned: 2016-10-19 10:01:54.839300 -No vulnerabilities found. - - -AhnSeongHyun/Arale -https://github.com/AhnSeongHyun/Arale -Entry file: None -Scanned: 2016-10-19 10:01:58.312689 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AhnSeongHyun/Arale. - -faylau/microblog -https://github.com/faylau/microblog -Entry file: None -Scanned: 2016-10-19 10:01:58.807438 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jogn/shitty-booter-rce-protection -https://github.com/Jogn/shitty-booter-rce-protection -Entry file: shitty-booter-rce-protection/pybooter-webint.py -Scanned: 2016-10-19 10:02:00.176077 -No vulnerabilities found. - - -VicarEscaped/xlsgen_service -https://github.com/VicarEscaped/xlsgen_service -Entry file: xlsgen_service/app/__init__.py -Scanned: 2016-10-19 10:02:01.670869 -Vulnerability 1: -File: xlsgen_service/app/__init__.py - > User input at line 48, trigger word ".data": - d = 'data''name''logo''filename'form.data.dataform.name.dataform.logo.dataform.filename.data -Reassigned in: - File: xlsgen_service/app/__init__.py - > Line 52: xls = convert_to_xls(d) - File: xlsgen_service/app/__init__.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('xls_conv.html',form=form) -File: xlsgen_service/app/__init__.py - > reaches line 62, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(xls,as_attachment=True, attachment_filename=ff + '.xlsx') - - - -dheerajgopi/paint-app -https://github.com/dheerajgopi/paint-app -Entry file: paint-app/paint_app.py -Scanned: 2016-10-19 10:02:05.087590 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: paint-app/flask/lib/python2.7/genericpath.py - -shubhamgupta2021/linux-user -https://github.com/shubhamgupta2021/linux-user -Entry file: linux-user/src/app.py -Scanned: 2016-10-19 10:02:06.345518 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manishbalyan/flask -https://github.com/manishbalyan/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:02:08.608145 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Lemon23/Flask -https://github.com/Lemon23/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:02:09.105998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagestar/Flask -https://github.com/sagestar/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:02:09.610644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lp1995/flask -https://github.com/lp1995/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:02:11.501676 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -cfschlierman/Flask -https://github.com/cfschlierman/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:02:12.003045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thegeorgeous/flask-cqlalchemy -https://github.com/thegeorgeous/flask-cqlalchemy -Entry file: flask-cqlalchemy/examples/example_app_udt.py -Scanned: 2016-10-19 10:02:33.296974 -No vulnerabilities found. - - -viniciuschiele/flask-io -https://github.com/viniciuschiele/flask-io -Entry file: flask-io/tests/test_response.py -Scanned: 2016-10-19 10:02:34.998867 -No vulnerabilities found. - - -prashannth/flask-cassandra -https://github.com/prashannth/flask-cassandra -Entry file: flask-cassandra/app/__init__.py -Scanned: 2016-10-19 10:02:36.894779 -Vulnerability 1: -File: flask-cassandra/app/api/user.py - > User input at line 28, trigger word ".data": - data = json.loads(request.data) -Reassigned in: - File: flask-cassandra/app/api/user.py - > Line 31: handle = str(data['handle']) - File: flask-cassandra/app/api/user.py - > Line 32: password = hash_password(str(data['password'])) - File: flask-cassandra/app/api/user.py - > Line 34: email = ''.join((str(e) for e in data['email'])) - File: flask-cassandra/app/api/user.py - > Line 39: phone = int(data['phone']) - File: flask-cassandra/app/api/user.py - > Line 44: ret_MAYBE_FUNCTION_NAME = make_response(jsonify('success''result'False'Incomplete parameters'), 400) -File: flask-cassandra/app/api/user.py - > reaches line 36, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = make_response(jsonify('success''result'True'Signup Successful for {}'.format(handle)), 201) - -Vulnerability 2: -File: flask-cassandra/app/api/user.py - > User input at line 28, trigger word ".data": - data = json.loads(request.data) -Reassigned in: - File: flask-cassandra/app/api/user.py - > Line 31: handle = str(data['handle']) - File: flask-cassandra/app/api/user.py - > Line 32: password = hash_password(str(data['password'])) - File: flask-cassandra/app/api/user.py - > Line 34: email = ''.join((str(e) for e in data['email'])) - File: flask-cassandra/app/api/user.py - > Line 39: phone = int(data['phone']) - File: flask-cassandra/app/api/user.py - > Line 44: ret_MAYBE_FUNCTION_NAME = make_response(jsonify('success''result'False'Incomplete parameters'), 400) -File: flask-cassandra/app/api/user.py - > reaches line 41, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = make_response(jsonify('success''result'True'Signup Successful for {}'.format(handle)), 201) - - - -nickyzheng/flasky -https://github.com/nickyzheng/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:02:37.399921 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joymove/flasktaskr -https://github.com/joymove/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:02:38.911469 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scofield1991/flaskproj -https://github.com/scofield1991/flaskproj -Entry file: None -Scanned: 2016-10-19 10:02:41.449880 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/scofield1991/flaskproj. - -thaifdotme/flaskbyexample -https://github.com/thaifdotme/flaskbyexample -Entry file: flaskbyexample/app.py -Scanned: 2016-10-19 10:02:42.746092 -No vulnerabilities found. - - -yuetingqian/flaskr -https://github.com/yuetingqian/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:02:43.247379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ohmuraken/flaskr -https://github.com/ohmuraken/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:02:46.752042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuhuixiong/flasky -https://github.com/wuhuixiong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:02:48.255816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aabdulwahed/Flask-Redis-Docker-Compose -https://github.com/aabdulwahed/Flask-Redis-Docker-Compose -Entry file: Flask-Redis-Docker-Compose/app.py -Scanned: 2016-10-19 10:02:50.495348 -No vulnerabilities found. - - -bawey/FlaskStart -https://github.com/bawey/FlaskStart -Entry file: FlaskStart/app/__init__.py -Scanned: 2016-10-19 10:02:54.231315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gmccaw/FlaskSocial -https://github.com/gmccaw/FlaskSocial -Entry file: FlaskSocial/app.py -Scanned: 2016-10-19 10:02:55.598341 -No vulnerabilities found. - - -wihoho/FlaskDownload -https://github.com/wihoho/FlaskDownload -Entry file: FlaskDownload/FlaskDownload.py -Scanned: 2016-10-19 10:02:56.890549 -No vulnerabilities found. - - -eon01/flask_restful_sample -https://github.com/eon01/flask_restful_sample -Entry file: flask_restful_sample/apirest.py -Scanned: 2016-10-19 10:03:00.819819 -Vulnerability 1: -File: flask_restful_sample/apirest.py - > User input at line 53, trigger word "get(": - genre = 'id''name''bands'genres[-1]['id'] + 1request.json['name']request.json.get('bands', '') -File: flask_restful_sample/apirest.py - > reaches line 59, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('genre'genre), 201) - - - -yan-egorov/flask_bro -https://github.com/yan-egorov/flask_bro -Entry file: flask_bro/Flask/Lib/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:03:07.321937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -00willo/flask-intro -https://github.com/00willo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:03:07.822191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevlab/discover_flask -https://github.com/kevlab/discover_flask -Entry file: discover_flask/project/__init__.py -Scanned: 2016-10-19 10:03:09.344547 -No vulnerabilities found. - - -haydarmiftahul/flask-microblogging -https://github.com/haydarmiftahul/flask-microblogging -Entry file: flask-microblogging/app.py -Scanned: 2016-10-19 10:03:10.930631 -Vulnerability 1: -File: flask-microblogging/app.py - > User input at line 94, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-microblogging/app.py - > Line 100: user = User(username=username) -File: flask-microblogging/app.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('taken'username), 400) - -Vulnerability 2: -File: flask-microblogging/app.py - > User input at line 94, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-microblogging/app.py - > Line 100: user = User(username=username) -File: flask-microblogging/app.py - > reaches line 104, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - -Vulnerability 3: -File: flask-microblogging/app.py - > User input at line 119, trigger word "get(": - user = User.query.get(id) -File: flask-microblogging/app.py - > reaches line 122, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - -Vulnerability 4: -File: flask-microblogging/app.py - > User input at line 153, trigger word "get(": - tweet = Tweet.query.get(id) -Reassigned in: - File: flask-microblogging/app.py - > Line 156: tweet = tweet.serialize() -File: flask-microblogging/app.py - > reaches line 157, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('tweet'tweet) - -Vulnerability 5: -File: flask-microblogging/app.py - > User input at line 162, trigger word "get(": - tweet = request.json.get('tweet') -Reassigned in: - File: flask-microblogging/app.py - > Line 166: tw = Tweet(user_id=g.user.id, tweet=tweet, time=time) - File: flask-microblogging/app.py - > Line 169: tw = tw.serialize() -File: flask-microblogging/app.py - > reaches line 170, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('tweet'tw), 201) - - - -ipeacocks/discover-flask -https://github.com/ipeacocks/discover-flask -Entry file: discover-flask/project/__init__.py -Scanned: 2016-10-19 10:03:12.433517 -No vulnerabilities found. - - -fereidoon/flask-blog -https://github.com/fereidoon/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:03:12.988792 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -cjemison/flask_example -https://github.com/cjemison/flask_example -Entry file: flask_example/flask_example.py -Scanned: 2016-10-19 10:03:14.259555 -No vulnerabilities found. - - -mnickey/Flask_Taskr -https://github.com/mnickey/Flask_Taskr -Entry file: Flask_Taskr/project/__init__.py -Scanned: 2016-10-19 10:03:15.756506 -No vulnerabilities found. - - -KunstencentrumVooruit/flask-deploy -https://github.com/KunstencentrumVooruit/flask-deploy -Entry file: flask-deploy/template.py -Scanned: 2016-10-19 10:03:17.031167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JungHun/flask-api -https://github.com/JungHun/flask-api -Entry file: flask-api/api/controllers.py -Scanned: 2016-10-19 10:03:20.802293 -No vulnerabilities found. - - -laideolams/flask-blog -https://github.com/laideolams/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:03:21.399761 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -oyilmaz/flask-tut -https://github.com/oyilmaz/flask-tut -Entry file: flask-tut/app.py -Scanned: 2016-10-19 10:03:22.667588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aboutaaron/flask-newsadmin -https://github.com/aboutaaron/flask-newsadmin -Entry file: flask-newsadmin/app.py -Scanned: 2016-10-19 10:03:25.830453 -No vulnerabilities found. - - -tssutha/microblog-flask -https://github.com/tssutha/microblog-flask -Entry file: None -Scanned: 2016-10-19 10:03:37.685423 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -catskul/flask_api -https://github.com/catskul/flask_api -Entry file: flask_api/api.py -Scanned: 2016-10-19 10:03:38.990428 -No vulnerabilities found. - - -antoinemiquel/tuto_flask -https://github.com/antoinemiquel/tuto_flask -Entry file: tuto_flask/flaskr/flaskr.py -Scanned: 2016-10-19 10:03:40.646884 -No vulnerabilities found. - - -joywolves/flask-wechat -https://github.com/joywolves/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-19 10:03:42.216757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -astromitts/flask-skeleton -https://github.com/astromitts/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:03:42.775411 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/astromitts/flask-skeleton. - -manishbalyan/flask_taskmgmtapp -https://github.com/manishbalyan/flask_taskmgmtapp -Entry file: None -Scanned: 2016-10-19 10:03:47.088573 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dhamaniasad/flask-elasticsearch -https://github.com/dhamaniasad/flask-elasticsearch -Entry file: flask-elasticsearch/app.py -Scanned: 2016-10-19 10:03:48.361479 -No vulnerabilities found. - - -joymove/flask-blog -https://github.com/joymove/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:03:48.890935 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sure15/flask-intro -https://github.com/sure15/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:03:49.390725 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bevensteven/flask_microblog -https://github.com/bevensteven/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 10:03:49.895544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ziegl3r/flask-stuff -https://github.com/ziegl3r/flask-stuff -Entry file: flask-stuff/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:03:53.897173 -No vulnerabilities found. - - -zachcalvert/backstage_flask -https://github.com/zachcalvert/backstage_flask -Entry file: backstage_flask/app.py -Scanned: 2016-10-19 10:03:55.316834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bitmotive/flask-template -https://github.com/bitmotive/flask-template -Entry file: None -Scanned: 2016-10-19 10:03:55.832198 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bitmotive/flask-template. - -521xueweihan/LearnFlask -https://github.com/521xueweihan/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-19 10:03:57.361818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -icasdri/tuhi-flask -https://github.com/icasdri/tuhi-flask -Entry file: tuhi-flask/tuhi_flask/app.py -Scanned: 2016-10-19 10:03:58.886513 -No vulnerabilities found. - - -joker946/dip_flask -https://github.com/joker946/dip_flask -Entry file: dip_flask/flask_my.py -Scanned: 2016-10-19 10:04:00.137407 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -patriciachunk/python_flask -https://github.com/patriciachunk/python_flask -Entry file: None -Scanned: 2016-10-19 10:04:02.653654 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/patriciachunk/python_flask. - -ericso/flask-angular -https://github.com/ericso/flask-angular -Entry file: flask-angular/server/app/server.py -Scanned: 2016-10-19 10:04:10.128580 -No vulnerabilities found. - - -doomzhou/gae-flask -https://github.com/doomzhou/gae-flask -Entry file: gae-flask/main.py -Scanned: 2016-10-19 10:04:12.272607 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -chadduffey/social_Flask -https://github.com/chadduffey/social_Flask -Entry file: social_Flask/app.py -Scanned: 2016-10-19 10:04:15.252758 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: social_Flask/venv/lib/python2.7/genericpath.py - -josh-mcq/flask-api -https://github.com/josh-mcq/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 10:04:16.651689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jdunnaway/flask_ws -https://github.com/jdunnaway/flask_ws -Entry file: flask_ws/app.py -Scanned: 2016-10-19 10:04:33.038856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benallen18/flask-hello-world -https://github.com/benallen18/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:04:33.618497 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -remijouannet/trojandroid_server -https://github.com/remijouannet/trojandroid_server -Entry file: trojandroid_server/app/app.py -Scanned: 2016-10-19 10:04:35.080414 -No vulnerabilities found. - - -dmerson/FlaskToDo -https://github.com/dmerson/FlaskToDo -Entry file: FlaskToDo/FlaskToDo.py -Scanned: 2016-10-19 10:04:36.388889 -No vulnerabilities found. - - -kryptn/FlaskBareAuth -https://github.com/kryptn/FlaskBareAuth -Entry file: FlaskBareAuth/app.py -Scanned: 2016-10-19 10:04:37.785260 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbarkerappen/test_FlaskVersioned -https://github.com/rbarkerappen/test_FlaskVersioned -Entry file: test_FlaskVersioned/app.py -Scanned: 2016-10-19 10:04:39.107330 -No vulnerabilities found. - - -tecstack/opback -https://github.com/tecstack/opback -Entry file: None -Scanned: 2016-10-19 10:04:49.493347 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tecstack/opback. - -eriktaubeneck/flask-ext-test -https://github.com/eriktaubeneck/flask-ext-test -Entry file: flask-ext-test/app.py -Scanned: 2016-10-19 10:04:51.758140 -No vulnerabilities found. - - -martin-appcito/demo-flask-app -https://github.com/martin-appcito/demo-flask-app -Entry file: demo-flask-app/app.py -Scanned: 2016-10-19 10:04:53.074868 -No vulnerabilities found. - - -laideolams/flask-hello-world -https://github.com/laideolams/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:04:53.656076 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -teitei-tk/Flask-REST-Controller -https://github.com/teitei-tk/Flask-REST-Controller -Entry file: Flask-REST-Controller/setup.py -Scanned: 2016-10-19 10:04:55.103529 -No vulnerabilities found. - - -nubianMONK/suitor_python_flask -https://github.com/nubianMONK/suitor_python_flask -Entry file: suitor_python_flask/suitor_flask.py -Scanned: 2016-10-19 10:04:56.461093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ananda-chintalapati/weather-report-python-flask -https://github.com/ananda-chintalapati/weather-report-python-flask -Entry file: weather-report-python-flask/report/reportResource.py -Scanned: 2016-10-19 10:04:57.715755 -No vulnerabilities found. - - -Turbo87/flask-oauth2-test -https://github.com/Turbo87/flask-oauth2-test -Entry file: flask-oauth2-test/server.py -Scanned: 2016-10-19 10:04:59.196628 -Vulnerability 1: -File: flask-oauth2-test/server.py - > User input at line 41, trigger word "get(": - refresh_token = request.form.get('refresh_token') -Reassigned in: - File: flask-oauth2-test/server.py - > Line 37: refresh_token = binascii.hexlify(os.urandom(16)) - File: flask-oauth2-test/server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = (jsonify('error''invalid_request'), 400) - File: flask-oauth2-test/server.py - > Line 35: ret_MAYBE_FUNCTION_NAME = (jsonify('error''invalid_grant'), 400) - File: flask-oauth2-test/server.py - > Line 43: ret_MAYBE_FUNCTION_NAME = (jsonify('error''invalid_request'), 400) - File: flask-oauth2-test/server.py - > Line 46: ret_MAYBE_FUNCTION_NAME = (jsonify('error''invalid_grant'), 401) - File: flask-oauth2-test/server.py - > Line 49: ret_MAYBE_FUNCTION_NAME = (jsonify('error''unsupported_grant_type'), 400) -File: flask-oauth2-test/server.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('access_token''expires_in''token_type''refresh_token'jwt.encode('user''exp'USER_IDtime.time() + EXPIRE, SECRET,algorithm='HS256')EXPIRE'bearer'refresh_token) - - - -kaushikraj/flask-login-sample -https://github.com/kaushikraj/flask-login-sample -Entry file: flask-login-sample/app/__init__.py -Scanned: 2016-10-19 10:05:00.479975 -No vulnerabilities found. - - -dhamaniasad/flask-whooshalchemy-example -https://github.com/dhamaniasad/flask-whooshalchemy-example -Entry file: flask-whooshalchemy-example/app.py -Scanned: 2016-10-19 10:05:01.760342 -No vulnerabilities found. - - -anglinb/flask-docker-setup -https://github.com/anglinb/flask-docker-setup -Entry file: flask-docker-setup/app.py -Scanned: 2016-10-19 10:05:03.037275 -No vulnerabilities found. - - -OstrichProjects/Simple-Flask-User-DB -https://github.com/OstrichProjects/Simple-Flask-User-DB -Entry file: Simple-Flask-User-DB/app.py -Scanned: 2016-10-19 10:05:04.330419 -No vulnerabilities found. - - -hwong/heroku_flask_boilerplate -https://github.com/hwong/heroku_flask_boilerplate -Entry file: heroku_flask_boilerplate/server.py -Scanned: 2016-10-19 10:05:06.103106 -No vulnerabilities found. - - -llambiel/flask-pgsql-demo -https://github.com/llambiel/flask-pgsql-demo -Entry file: flask-pgsql-demo/app.py -Scanned: 2016-10-19 10:05:07.409335 -No vulnerabilities found. - - -nthock/socialNetworkFlask -https://github.com/nthock/socialNetworkFlask -Entry file: socialNetworkFlask/app.py -Scanned: 2016-10-19 10:05:08.839948 -No vulnerabilities found. - - -pechatny/basic-flask-app -https://github.com/pechatny/basic-flask-app -Entry file: basic-flask-app/src/app.py -Scanned: 2016-10-19 10:05:11.963729 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -srahul07/flask-by-example -https://github.com/srahul07/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:05:12.700988 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SleipRecx/Flask-Python-Website -https://github.com/SleipRecx/Flask-Python-Website -Entry file: Flask-Python-Website/app.py -Scanned: 2016-10-19 10:05:14.414360 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tanderegg/flask-test-app -https://github.com/tanderegg/flask-test-app -Entry file: flask-test-app/app/__init__.py -Scanned: 2016-10-19 10:05:15.669663 -No vulnerabilities found. - - -marcusbusby/python_blog -https://github.com/marcusbusby/python_blog -Entry file: None -Scanned: 2016-10-19 10:05:16.186439 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vestrobaa/flaskr-gogo -https://github.com/vestrobaa/flaskr-gogo -Entry file: flaskr-gogo/flaskr.py -Scanned: 2016-10-19 10:05:18.496824 -No vulnerabilities found. - - -pkulev/mblog -https://github.com/pkulev/mblog -Entry file: mblog/mblog/__init__.py -Scanned: 2016-10-19 10:05:19.896268 -Vulnerability 1: -File: mblog/mblog/views.py - > User input at line 20, trigger word ".data": - login = form.login.data -Reassigned in: - File: mblog/mblog/views.py - > Line 22: user = User(db).validate_login(login, password) -File: mblog/mblog/views.py - > reaches line 23, trigger word "flash(": - flash(str(user)) - -Vulnerability 2: -File: mblog/mblog/views.py - > User input at line 21, trigger word ".data": - password = form.password.data -Reassigned in: - File: mblog/mblog/views.py - > Line 22: user = User(db).validate_login(login, password) -File: mblog/mblog/views.py - > reaches line 23, trigger word "flash(": - flash(str(user)) - - - -nathanbreitsch/sports -https://github.com/nathanbreitsch/sports -Entry file: sports/sports.py -Scanned: 2016-10-19 10:05:39.162303 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -IE-NITK/ComicsAPI -https://github.com/IE-NITK/ComicsAPI -Entry file: ComicsAPI/app.py -Scanned: 2016-10-19 10:05:45.009894 -No vulnerabilities found. - - -khrogos/fatracker -https://github.com/khrogos/fatracker -Entry file: fatracker/fatracker.py -Scanned: 2016-10-19 10:05:46.348154 -No vulnerabilities found. - - -zhaozengguang/payment_manager -https://github.com/zhaozengguang/payment_manager -Entry file: payment_manager/models.py -Scanned: 2016-10-19 10:05:48.152910 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jankowskip/AudioPydub-methods-with-FlaskServer -https://github.com/jankowskip/AudioPydub-methods-with-FlaskServer -Entry file: AudioPydub-methods-with-FlaskServer/MusicServer.py -Scanned: 2016-10-19 10:06:05.048637 -No vulnerabilities found. - - -manhtai/vietbus -https://github.com/manhtai/vietbus -Entry file: vietbus/app/__init__.py -Scanned: 2016-10-19 10:06:06.914361 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ei-grad/geocoder -https://github.com/ei-grad/geocoder -Entry file: geocoder/api.py -Scanned: 2016-10-19 10:06:08.153574 -No vulnerabilities found. - - -smithellis/scratch -https://github.com/smithellis/scratch -Entry file: scratch/pm.py -Scanned: 2016-10-19 10:06:09.392452 -No vulnerabilities found. - - -AhnSeongHyun/Arale -https://github.com/AhnSeongHyun/Arale -Entry file: None -Scanned: 2016-10-19 10:06:09.967181 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AhnSeongHyun/Arale. - -nickyfoto/restaurtant -https://github.com/nickyfoto/restaurtant -Entry file: restaurtant/project.py -Scanned: 2016-10-19 10:06:11.417266 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -titov-max/microblog -https://github.com/titov-max/microblog -Entry file: None -Scanned: 2016-10-19 10:06:12.400239 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Burning-Chai/Flask -https://github.com/Burning-Chai/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:06:14.188134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -justanr/Flask-Transfer -https://github.com/justanr/Flask-Transfer -Entry file: Flask-Transfer/examples/JPEGr/JPEGr/app.py -Scanned: 2016-10-19 10:06:15.666234 -No vulnerabilities found. - - -weyj4/flask -https://github.com/weyj4/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:06:16.591027 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jasmin19/Flask -https://github.com/jasmin19/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:06:17.078698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Lemon23/Flask -https://github.com/Lemon23/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:06:17.560181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pawel22729/flask -https://github.com/Pawel22729/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:06:18.440896 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Norli/flask -https://github.com/Norli/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:06:22.688519 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -thegeorgeous/flask-cqlalchemy -https://github.com/thegeorgeous/flask-cqlalchemy -Entry file: flask-cqlalchemy/examples/example_app_udt.py -Scanned: 2016-10-19 10:06:24.260654 -No vulnerabilities found. - - -viniciuschiele/flask-apidoc -https://github.com/viniciuschiele/flask-apidoc -Entry file: flask-apidoc/example/views.py -Scanned: 2016-10-19 10:06:25.616492 -No vulnerabilities found. - - -calderonroberto/flask-redis-microservice -https://github.com/calderonroberto/flask-redis-microservice -Entry file: flask-redis-microservice/app.py -Scanned: 2016-10-19 10:06:26.880637 -No vulnerabilities found. - - -ZarinPal-Lab/SampleCode-Python-Flask -https://github.com/ZarinPal-Lab/SampleCode-Python-Flask -Entry file: SampleCode-Python-Flask/zarinpal.py -Scanned: 2016-10-19 10:06:28.231571 -No vulnerabilities found. - - -b00000001/flaskr -https://github.com/b00000001/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:06:28.742800 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Zegoverno/flaskr -https://github.com/Zegoverno/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:06:29.289358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevlab/flasky -https://github.com/kevlab/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:06:29.792745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laideolams/flasktaskr -https://github.com/laideolams/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:06:30.346914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bidhan-a/flasknotes -https://github.com/bidhan-a/flasknotes -Entry file: flasknotes/api.py -Scanned: 2016-10-19 10:06:32.399463 -Vulnerability 1: -File: flasknotes/api.py - > User input at line 27, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flasknotes/api.py - > Line 30: page = int(request.args.get('page')) - File: flasknotes/api.py - > Line 34: page = 1 - File: flasknotes/api.py - > Line 35: notes = models.Note.newest().paginate(page, 10, True) - File: flasknotes/api.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('result''Invalid parameter') -File: flasknotes/api.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes''next'json_notesnotes.has_next) - -Vulnerability 2: -File: flasknotes/api.py - > User input at line 30, trigger word "get(": - page = int(request.args.get('page')) -Reassigned in: - File: flasknotes/api.py - > Line 27: page = request.args.get('page') - File: flasknotes/api.py - > Line 34: page = 1 - File: flasknotes/api.py - > Line 35: notes = models.Note.newest().paginate(page, 10, True) - File: flasknotes/api.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('result''Invalid parameter') -File: flasknotes/api.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes''next'json_notesnotes.has_next) - - - -wuhuixiong/flasky -https://github.com/wuhuixiong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:06:36.901569 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jpmaldonado/flasktaskr -https://github.com/jpmaldonado/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:06:37.475103 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -grogs84/flasktaskr -https://github.com/grogs84/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:06:40.984710 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xingzhipeng/flaskr -https://github.com/xingzhipeng/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:06:47.542105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ltoshea/flaskr -https://github.com/ltoshea/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:06:48.042415 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caitpower/flaskStarter -https://github.com/caitpower/flaskStarter -Entry file: flaskStarter/app.py -Scanned: 2016-10-19 10:06:51.322306 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nthock/microblogFlask -https://github.com/nthock/microblogFlask -Entry file: microblogFlask/app/__init__.py -Scanned: 2016-10-19 10:07:07.855243 -No vulnerabilities found. - - -chrhsmt/flask_sample -https://github.com/chrhsmt/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 10:07:09.368582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aouyang1/Cassandra-Flask -https://github.com/aouyang1/Cassandra-Flask -Entry file: Cassandra-Flask/app.py -Scanned: 2016-10-19 10:07:10.766064 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Norli/FirstFlask -https://github.com/Norli/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-19 10:07:13.404489 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -woz24416/flask_project -https://github.com/woz24416/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 10:07:14.180900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EvilDmitri/flask-megatut -https://github.com/EvilDmitri/flask-megatut -Entry file: flask-megatut/app/__init__.py -Scanned: 2016-10-19 10:07:15.422133 -No vulnerabilities found. - - -Lepozepo/flask-python -https://github.com/Lepozepo/flask-python -Entry file: flask-python/init.py -Scanned: 2016-10-19 10:07:18.307638 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-python/venv/lib/python2.7/genericpath.py - -1016601657/flask-blog -https://github.com/1016601657/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:07:18.834787 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -KunstencentrumVooruit/flask-deploy -https://github.com/KunstencentrumVooruit/flask-deploy -Entry file: flask-deploy/template.py -Scanned: 2016-10-19 10:07:19.347490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shenaishiren/flask-example -https://github.com/shenaishiren/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 10:07:19.852778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laideolams/flask-blog -https://github.com/laideolams/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:07:20.374179 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -BlaiseGratton/which_flask -https://github.com/BlaiseGratton/which_flask -Entry file: which_flask/app.py -Scanned: 2016-10-19 10:07:21.743971 -Vulnerability 1: -File: which_flask/app.py - > User input at line 58, trigger word "get(": - user = models.User.verify_auth_token(request.headers.get('x-session-token')) -Reassigned in: - File: which_flask/app.py - > Line 61: ret_MAYBE_FUNCTION_NAME = (jsonify('message''Missing or incorrect token'), 400) -File: which_flask/app.py - > reaches line 59, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - -Vulnerability 2: -File: which_flask/app.py - > User input at line 72, trigger word "get(": - photo = request.json.get('image') -Reassigned in: - File: which_flask/app.py - > Line 79: ret_MAYBE_FUNCTION_NAME = (jsonify('message''Saving photo failed'), 400) - File: which_flask/app.py - > Line 83: ret_MAYBE_FUNCTION_NAME = jsonify(photos=[photo.serialize for photo in photos]) - File: which_flask/app.py - > Line 85: ret_MAYBE_FUNCTION_NAME = (jsonify('message''No photos to return'), 400) -File: which_flask/app.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('base64_photo'photo), 200) - - - -jreiher2003/Flask_mega -https://github.com/jreiher2003/Flask_mega -Entry file: Flask_mega/Lib/site-packages/flask_openid.py -Scanned: 2016-10-19 10:07:25.189588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -weienwong/flask-app -https://github.com/weienwong/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 10:07:25.685058 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fmoezinia/flask_files -https://github.com/fmoezinia/flask_files -Entry file: flask_files/call.py -Scanned: 2016-10-19 10:07:27.066196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luckyharryji/Order-Flask -https://github.com/luckyharryji/Order-Flask -Entry file: Order-Flask/run.py -Scanned: 2016-10-19 10:07:28.317675 -No vulnerabilities found. - - -seanclark84/flask-gameweb -https://github.com/seanclark84/flask-gameweb -Entry file: flask-gameweb/gameweb/__init__.py -Scanned: 2016-10-19 10:07:30.173075 -No vulnerabilities found. - - -murphyky/flask-app -https://github.com/murphyky/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 10:07:30.678597 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masterp4dev/flask-crawler -https://github.com/masterp4dev/flask-crawler -Entry file: flask-crawler/app/__init__.py -Scanned: 2016-10-19 10:07:32.645434 -No vulnerabilities found. - - -mjhea0/flask_flow -https://github.com/mjhea0/flask_flow -Entry file: flask_flow/flask_flow_project/__init__.py -Scanned: 2016-10-19 10:07:33.901956 -No vulnerabilities found. - - -nishworks/Flask-starter -https://github.com/nishworks/Flask-starter -Entry file: Flask-starter/flask_app/__init__.py -Scanned: 2016-10-19 10:07:35.528948 -No vulnerabilities found. - - -wangzhe330/flask_test -https://github.com/wangzhe330/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 10:07:36.134477 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cfschlierman/Flask.py -https://github.com/cfschlierman/Flask.py -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:07:36.626926 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -doubledherin/flask_tutorial -https://github.com/doubledherin/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:07:38.125705 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josh-mcq/flask-api -https://github.com/josh-mcq/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 10:07:38.614550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jdunnaway/flask_ws -https://github.com/jdunnaway/flask_ws -Entry file: flask_ws/app.py -Scanned: 2016-10-19 10:07:42.309619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -raphaelncampos/flask-microblog -https://github.com/raphaelncampos/flask-microblog -Entry file: None -Scanned: 2016-10-19 10:07:48.804570 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Twotiger/flask-weather -https://github.com/Twotiger/flask-weather -Entry file: flask-weather/app.py -Scanned: 2016-10-19 10:07:49.307313 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thinkocapo/flask-HelloWorld -https://github.com/thinkocapo/flask-HelloWorld -Entry file: flask-HelloWorld/hello_world_jinja.py -Scanned: 2016-10-19 10:08:10.103465 -No vulnerabilities found. - - -vasanthsarathy/flatfreeze -https://github.com/vasanthsarathy/flatfreeze -Entry file: flatfreeze/app.py -Scanned: 2016-10-19 10:08:11.564702 -No vulnerabilities found. - - -tecstack/opback -https://github.com/tecstack/opback -Entry file: None -Scanned: 2016-10-19 10:08:12.125259 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tecstack/opback. - -wyj2046/awesome-flask-todo -https://github.com/wyj2046/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 10:08:12.640357 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wyj2046/awesome-flask-todo. - -SsureyMoon/Simple-Python-Flask -https://github.com/SsureyMoon/Simple-Python-Flask -Entry file: Simple-Python-Flask/catalog_app/__init__.py -Scanned: 2016-10-19 10:08:16.023305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomburrows/flask-by-example -https://github.com/tomburrows/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:08:16.663726 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jennielees/flask-api-mashup -https://github.com/jennielees/flask-api-mashup -Entry file: flask-api-mashup/app.py -Scanned: 2016-10-19 10:08:21.386043 -No vulnerabilities found. - - -swifthorseman/flask-peewee-heroku-setup -https://github.com/swifthorseman/flask-peewee-heroku-setup -Entry file: flask-peewee-heroku-setup/server.py -Scanned: 2016-10-19 10:08:22.652223 -No vulnerabilities found. - - -AboorvaDevarajan/Machine-Learning-Services-Flask -https://github.com/AboorvaDevarajan/Machine-Learning-Services-Flask -Entry file: None -Scanned: 2016-10-19 10:08:29.175354 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -grogs84/flask-hello-world -https://github.com/grogs84/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:08:29.703973 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -BetsyRTR/flask_hello_world -https://github.com/BetsyRTR/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:08:30.340421 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/BetsyRTR/flask_hello_world. - -hakimu/flask_uwsgi_tech_support -https://github.com/hakimu/flask_uwsgi_tech_support -Entry file: flask_uwsgi_tech_support/app.py -Scanned: 2016-10-19 10:08:32.911668 -No vulnerabilities found. - - -arosenberg01/python-flask-server -https://github.com/arosenberg01/python-flask-server -Entry file: python-flask-server/app.py -Scanned: 2016-10-19 10:08:34.824888 -No vulnerabilities found. - - -Yanze/restau_management_flask -https://github.com/Yanze/restau_management_flask -Entry file: restau_management_flask/restau_management_flask/__init__.py -Scanned: 2016-10-19 10:08:42.649907 -Vulnerability 1: -File: restau_management_flask/restau_management_flask/views.py - > User input at line 34, trigger word ".data": - customer_nb = form.customer_nb.data -Reassigned in: - File: restau_management_flask/restau_management_flask/views.py - > Line 35: table_nb = r.new_customer_group(customer_nb) -File: restau_management_flask/restau_management_flask/views.py - > reaches line 39, trigger word "flash(": - flash('Table {} are available for this customer group.'.format(', '.join(map(str, table_nb)))) - -Vulnerability 2: -File: restau_management_flask/restau_management_flask/views.py - > User input at line 48, trigger word ".data": - customer_id = form2.customer_id.data -File: restau_management_flask/restau_management_flask/views.py - > reaches line 58, trigger word "flash(": - flash('Group {} removed.'.format(customer_id)) - - - -anglinb/flask-docker-setup -https://github.com/anglinb/flask-docker-setup -Entry file: flask-docker-setup/app.py -Scanned: 2016-10-19 10:08:43.958518 -No vulnerabilities found. - - -fangcode/annotated_flask_source -https://github.com/fangcode/annotated_flask_source -Entry file: annotated_flask_source/setup.py -Scanned: 2016-10-19 10:08:45.927877 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pampipampupampa/Flask-Taskr6 -https://github.com/Pampipampupampa/Flask-Taskr6 -Entry file: Flask-Taskr6/project/__init__.py -Scanned: 2016-10-19 10:08:49.622012 -No vulnerabilities found. - - -intuinno/flask-by-example -https://github.com/intuinno/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:08:50.719720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WillMayger/python-flask-helloworld -https://github.com/WillMayger/python-flask-helloworld -Entry file: python-flask-helloworld/server.py -Scanned: 2016-10-19 10:08:51.248987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brenttaylor/flask-microblog-tutorial -https://github.com/brenttaylor/flask-microblog-tutorial -Entry file: flask-microblog-tutorial/microblog/__init__.py -Scanned: 2016-10-19 10:08:52.503565 -No vulnerabilities found. - - -shrey-rajvanshi/practo -https://github.com/shrey-rajvanshi/practo -Entry file: practo/hello.py -Scanned: 2016-10-19 10:08:54.206853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcom04/whose-is-this-box-flask -https://github.com/marcom04/whose-is-this-box-flask -Entry file: None -Scanned: 2016-10-19 10:08:56.259754 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcom04/whose-is-this-box-flask. - -johnthachil/NoteNote -https://github.com/johnthachil/NoteNote -Entry file: NoteNote/app/__init__.py -Scanned: 2016-10-19 10:08:59.069259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smellycats/SX-UploadSystem -https://github.com/smellycats/SX-UploadSystem -Entry file: SX-UploadSystem/upload/app.py -Scanned: 2016-10-19 10:09:00.528754 -No vulnerabilities found. - - -nickyfoto/restaurtant -https://github.com/nickyfoto/restaurtant -Entry file: restaurtant/project.py -Scanned: 2016-10-19 10:09:01.012282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tclain/wikimedia-texts -https://github.com/tclain/wikimedia-texts -Entry file: wikimedia-texts/web/index.py -Scanned: 2016-10-19 10:09:04.096396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -parthppanchal/blogger -https://github.com/parthppanchal/blogger -Entry file: blogger/generator.py -Scanned: 2016-10-19 10:09:10.470742 -No vulnerabilities found. - - -michaelbae/simipleSocialNetwork -https://github.com/michaelbae/simipleSocialNetwork -Entry file: simipleSocialNetwork/app.py -Scanned: 2016-10-19 10:09:15.356084 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: simipleSocialNetwork/venv/lib/python2.7/genericpath.py - -rblack42/GithubEd -https://github.com/rblack42/GithubEd -Entry file: GithubEd/app.py -Scanned: 2016-10-19 10:09:16.629037 -No vulnerabilities found. - - -sebpearce/money -https://github.com/sebpearce/money -Entry file: money/views.py -Scanned: 2016-10-19 10:09:18.891413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BetsyRTR/Betsy-Blog -https://github.com/BetsyRTR/Betsy-Blog -Entry file: Betsy-Blog/blog/__init__.py -Scanned: 2016-10-19 10:09:20.254194 -No vulnerabilities found. - - -neodd70/Python-Server- -https://github.com/neodd70/Python-Server- -Entry file: Python-Server-/mcp.py -Scanned: 2016-10-19 10:09:21.485607 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dragonfi/noticeboard -https://github.com/dragonfi/noticeboard -Entry file: noticeboard/noticeboard/noticeboard.py -Scanned: 2016-10-19 10:09:23.303911 -No vulnerabilities found. - - -knowsuchagency/tbdemo -https://github.com/knowsuchagency/tbdemo -Entry file: tbdemo/flaskapp.py -Scanned: 2016-10-19 10:09:24.664213 -No vulnerabilities found. - - -OpenPixel/blocky -https://github.com/OpenPixel/blocky -Entry file: blocky/tests/blocky_flask.py -Scanned: 2016-10-19 10:09:26.019042 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sambev/starterflask -https://github.com/sambev/starterflask -Entry file: starterflask/app/__init__.py -Scanned: 2016-10-19 10:09:33.120399 -No vulnerabilities found. - - -undeadops/overhear -https://github.com/undeadops/overhear -Entry file: overhear/api/api.py -Scanned: 2016-10-19 10:09:34.468068 -No vulnerabilities found. - - -ivanalejandro0/reload-on-change -https://github.com/ivanalejandro0/reload-on-change -Entry file: reload-on-change/server/server.py -Scanned: 2016-10-19 10:09:35.822668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kumaya/PinCodeDirectory -https://github.com/kumaya/PinCodeDirectory -Entry file: PinCodeDirectory/app/__init__.py -Scanned: 2016-10-19 10:09:38.037950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stitchfix/pyxley -https://github.com/stitchfix/pyxley -Entry file: pyxley/examples/metricsgraphics/project/app.py -Scanned: 2016-10-19 10:09:49.478956 -No vulnerabilities found. - - -Burning-Chai/Flask -https://github.com/Burning-Chai/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:09:49.966983 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fgken/flask -https://github.com/fgken/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:09:51.872242 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -zpalaskas/Flask -https://github.com/zpalaskas/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:09:52.365767 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leah/hello-flask-heroku -https://github.com/leah/hello-flask-heroku -Entry file: hello-flask-heroku/hello.py -Scanned: 2016-10-19 10:09:53.592309 -No vulnerabilities found. - - -gratimax/almost_flask -https://github.com/gratimax/almost_flask -Entry file: almost_flask/example.py -Scanned: 2016-10-19 10:09:54.827374 -No vulnerabilities found. - - -ryanss/flask-tornado -https://github.com/ryanss/flask-tornado -Entry file: flask-tornado/examples/sockjs.py -Scanned: 2016-10-19 10:09:57.142146 -No vulnerabilities found. - - -myang321/kandedan-flask -https://github.com/myang321/kandedan-flask -Entry file: kandedan-flask/main.py -Scanned: 2016-10-19 10:10:00.689968 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EricQAQ/Flask-RedisSession -https://github.com/EricQAQ/Flask-RedisSession -Entry file: Flask-RedisSession/test.py -Scanned: 2016-10-19 10:10:01.942638 -No vulnerabilities found. - - -JoshYuJump/flasky -https://github.com/JoshYuJump/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:10:02.439122 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sirfilip/flaskhemy -https://github.com/sirfilip/flaskhemy -Entry file: flaskhemy/app.py -Scanned: 2016-10-19 10:10:03.672900 -No vulnerabilities found. - - -TarCode/flaskr -https://github.com/TarCode/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:04.174848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adamdaum/flaskr -https://github.com/adamdaum/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:10.677089 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bennovack/flaskr -https://github.com/bennovack/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:13.170966 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laideolams/flasktaskr -https://github.com/laideolams/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:10:17.717426 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kafey/flaskr -https://github.com/kafey/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:18.213320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanbehan/flaskblog -https://github.com/seanbehan/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 10:10:20.739694 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -kurohai/flasky -https://github.com/kurohai/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:10:22.247462 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bidhan-a/flasknotes -https://github.com/bidhan-a/flasknotes -Entry file: flasknotes/api.py -Scanned: 2016-10-19 10:10:24.515600 -Vulnerability 1: -File: flasknotes/api.py - > User input at line 27, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flasknotes/api.py - > Line 30: page = int(request.args.get('page')) - File: flasknotes/api.py - > Line 34: page = 1 - File: flasknotes/api.py - > Line 35: notes = models.Note.newest().paginate(page, 10, True) - File: flasknotes/api.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('result''Invalid parameter') -File: flasknotes/api.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes''next'json_notesnotes.has_next) - -Vulnerability 2: -File: flasknotes/api.py - > User input at line 30, trigger word "get(": - page = int(request.args.get('page')) -Reassigned in: - File: flasknotes/api.py - > Line 27: page = request.args.get('page') - File: flasknotes/api.py - > Line 34: page = 1 - File: flasknotes/api.py - > Line 35: notes = models.Note.newest().paginate(page, 10, True) - File: flasknotes/api.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('result''Invalid parameter') -File: flasknotes/api.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('notes''next'json_notesnotes.has_next) - - - -GonzaloLeyton/flaskin -https://github.com/GonzaloLeyton/flaskin -Entry file: flaskin/start.py -Scanned: 2016-10-19 10:10:25.828449 -No vulnerabilities found. - - -hubinary/flasky -https://github.com/hubinary/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:10:26.338600 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nahrinrs/flaskr -https://github.com/nahrinrs/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:26.830037 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nthock/flasky -https://github.com/nthock/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:10:33.378880 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pkennedy89/flasktaskr -https://github.com/pkennedy89/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:10:34.904810 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ashutoshsaboo/flaskr -https://github.com/ashutoshsaboo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:36.430620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cymoo/flasky -https://github.com/cymoo/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:10:37.929966 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ltoshea/flaskr -https://github.com/ltoshea/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:10:40.437679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bh45k4r/flask -https://github.com/bh45k4r/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:11:39.646177 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -llh335/flask -https://github.com/llh335/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:11:40.644499 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -gd452/flask -https://github.com/gd452/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:11:41.623916 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -paulmin55/flask -https://github.com/paulmin55/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:11:42.635503 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -CarlEkerot/flask-orm -https://github.com/CarlEkerot/flask-orm -Entry file: flask-orm/webapp/__init__.py -Scanned: 2016-10-19 10:11:44.164516 -No vulnerabilities found. - - -ibininja/upload_file_python -https://github.com/ibininja/upload_file_python -Entry file: upload_file_python/src/app.py -Scanned: 2016-10-19 10:11:45.420422 -No vulnerabilities found. - - -fraoustin/flaskserver -https://github.com/fraoustin/flaskserver -Entry file: None -Scanned: 2016-10-19 10:11:46.797530 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fraoustin/flaskserver. - -ecerami/hello_flask -https://github.com/ecerami/hello_flask -Entry file: hello_flask/app.py -Scanned: 2016-10-19 10:11:48.059514 -No vulnerabilities found. - - -milinbhakta/flaskmaterialdesign -https://github.com/milinbhakta/flaskmaterialdesign -Entry file: flaskmaterialdesign/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:11:52.681018 -No vulnerabilities found. - - -Hellemos/flaskapp -https://github.com/Hellemos/flaskapp -Entry file: flaskapp/flaskapp/application.py -Scanned: 2016-10-19 10:11:54.233290 -No vulnerabilities found. - - -ssssergey/flaskengine -https://github.com/ssssergey/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-19 10:11:54.754258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kai1/flasktest -https://github.com/kai1/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 10:11:55.266188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StuartChristie/Flasky -https://github.com/StuartChristie/Flasky -Entry file: Flasky/untitled.py -Scanned: 2016-10-19 10:11:56.506110 -No vulnerabilities found. - - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:11:57.029718 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saucecode/flaskcat -https://github.com/saucecode/flaskcat -Entry file: flaskcat/flaskcat.py -Scanned: 2016-10-19 10:11:58.269119 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:11:58.788579 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -milinbhakta/flaskjinja -https://github.com/milinbhakta/flaskjinja -Entry file: flaskjinja/hello.py -Scanned: 2016-10-19 10:12:05.416441 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ashishkx/Flaskr -https://github.com/ashishkx/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 10:12:05.941396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jward1/flasktaskr -https://github.com/jward1/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:12:06.435370 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -schoolofcode-me/web_blog -https://github.com/schoolofcode-me/web_blog -Entry file: web_blog/src/app.py -Scanned: 2016-10-19 10:12:07.732445 -No vulnerabilities found. - - -iKalin/flask1 -https://github.com/iKalin/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 10:12:08.468733 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -iamrajhans/FlaskPYDemo -https://github.com/iamrajhans/FlaskPYDemo -Entry file: None -Scanned: 2016-10-19 10:12:09.710468 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/iamrajhans/FlaskPYDemo. - -arpm/FlaskTaskr -https://github.com/arpm/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-19 10:12:10.349975 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -MortalCatalyst/flaskTR -https://github.com/MortalCatalyst/flaskTR -Entry file: flaskTR/flasktaskr/views.py -Scanned: 2016-10-19 10:12:11.576434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QuadPiece/Quad-Devices-Two -https://github.com/QuadPiece/Quad-Devices-Two -Entry file: Quad-Devices-Two/run.py -Scanned: 2016-10-19 10:12:12.817395 -No vulnerabilities found. - - -arvelt/hello-flask -https://github.com/arvelt/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 10:12:13.406477 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -dbunker/Flask-Tread -https://github.com/dbunker/Flask-Tread -Entry file: Flask-Tread/examples/blog/app/mainapp/__init__.py -Scanned: 2016-10-19 10:12:14.720327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -martincalvert/GAE-Flask -https://github.com/martincalvert/GAE-Flask -Entry file: GAE-Flask/routes.py -Scanned: 2016-10-19 10:12:41.751992 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fergyfresh/flask-staysafe -https://github.com/fergyfresh/flask-staysafe -Entry file: None -Scanned: 2016-10-19 10:12:46.525263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -andrewheekin/flask-metatag -https://github.com/andrewheekin/flask-metatag -Entry file: flask-metatag/app.py -Scanned: 2016-10-19 10:12:47.809925 -No vulnerabilities found. - - -Seneckiy/workwithFlask -https://github.com/Seneckiy/workwithFlask -Entry file: workwithFlask/hello.py -Scanned: 2016-10-19 10:12:49.996682 -No vulnerabilities found. - - -xuefeng-huang/flask_task -https://github.com/xuefeng-huang/flask_task -Entry file: flask_task/__init__.py -Scanned: 2016-10-19 10:12:51.231423 -No vulnerabilities found. - - -ichy-wayland/flask-temp -https://github.com/ichy-wayland/flask-temp -Entry file: flask-temp/main.py -Scanned: 2016-10-19 10:12:52.436517 -No vulnerabilities found. - - -RodrigoVillatoro/flask_blog -https://github.com/RodrigoVillatoro/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:12:52.943445 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -patrickyoung/simple-flask -https://github.com/patrickyoung/simple-flask -Entry file: simple-flask/hello.py -Scanned: 2016-10-19 10:12:54.132844 -No vulnerabilities found. - - -sancarbar/flask-auth -https://github.com/sancarbar/flask-auth -Entry file: flask-auth/example.py -Scanned: 2016-10-19 10:12:54.638070 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lifayi2008/my_flask -https://github.com/lifayi2008/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-19 10:12:55.241366 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -staticor/learnFlask -https://github.com/staticor/learnFlask -Entry file: None -Scanned: 2016-10-19 10:12:56.439211 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/staticor/learnFlask. - -arpm/flask-blog -https://github.com/arpm/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:12:57.006768 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -raejoon/lype-flask -https://github.com/raejoon/lype-flask -Entry file: lype-flask/lyre.py -Scanned: 2016-10-19 10:12:58.323261 -No vulnerabilities found. - - -ayusharma/flask-mysql -https://github.com/ayusharma/flask-mysql -Entry file: flask-mysql/app.py -Scanned: 2016-10-19 10:13:01.088234 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-mysql/venv/lib/python2.7/genericpath.py - -zonzpoo/blog-flask -https://github.com/zonzpoo/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-19 10:13:01.764131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mehmettaskiner/flask-skeleton -https://github.com/mehmettaskiner/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:13:02.281868 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mehmettaskiner/flask-skeleton. - -zolaneta/hello_flask -https://github.com/zolaneta/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-19 10:13:03.490437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robin-lee/flask-tutorial -https://github.com/robin-lee/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:13:03.990652 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-19 10:13:07.500218 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -zhaojf85/docker-flask -https://github.com/zhaojf85/docker-flask -Entry file: docker-flask/hello-flask/app.py -Scanned: 2016-10-19 10:13:08.747218 -No vulnerabilities found. - - -higoreduardo/flask-blog -https://github.com/higoreduardo/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:13:09.312817 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sholsapp/flask-science -https://github.com/sholsapp/flask-science -Entry file: flask-science/flaskscience/__init__.py -Scanned: 2016-10-19 10:13:10.665648 -No vulnerabilities found. - - -luoluohang/flask_blog -https://github.com/luoluohang/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:13:11.170522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mnzr/MegaFlask -https://github.com/mnzr/MegaFlask -Entry file: MegaFlask/app/__init__.py -Scanned: 2016-10-19 10:13:12.472162 -No vulnerabilities found. - - -damstrom/flask-hello-world -https://github.com/damstrom/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:13:13.020113 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -rchibana/MicroBlog -https://github.com/rchibana/MicroBlog -Entry file: None -Scanned: 2016-10-19 10:13:13.510859 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -atf1999/Flask-Mega-Tutorial -https://github.com/atf1999/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/app/__init__.py -Scanned: 2016-10-19 10:13:15.021382 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-19 10:13:16.225885 -No vulnerabilities found. - - -apeete/flaskHelloWorld -https://github.com/apeete/flaskHelloWorld -Entry file: flaskHelloWorld/app.py -Scanned: 2016-10-19 10:13:43.724777 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lucidfrontier45/FlaskRethinkDBProject -https://github.com/lucidfrontier45/FlaskRethinkDBProject -Entry file: FlaskRethinkDBProject/webapp/factory.py -Scanned: 2016-10-19 10:13:45.031039 -No vulnerabilities found. - - -jwnwilson/flask_gae_example -https://github.com/jwnwilson/flask_gae_example -Entry file: flask_gae_example/hello_world.py -Scanned: 2016-10-19 10:13:51.880018 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Hyvjan/flask-hello-world -https://github.com/Hyvjan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:13:52.408461 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -BugisDev/AppSurvey-Flask -https://github.com/BugisDev/AppSurvey-Flask -Entry file: AppSurvey-Flask/app.py -Scanned: 2016-10-19 10:13:53.723290 -No vulnerabilities found. - - -auslander70/flask_hello_world -https://github.com/auslander70/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:13:54.232503 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/auslander70/flask_hello_world. - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-19 10:13:55.617131 -No vulnerabilities found. - - -purpleP/flask_alchemy_rest -https://github.com/purpleP/flask_alchemy_rest -Entry file: flask_alchemy_rest/tests/test_endpoints.py -Scanned: 2016-10-19 10:13:57.189217 -No vulnerabilities found. - - -yueyehm/flask_hello_world -https://github.com/yueyehm/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:13:57.684907 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yueyehm/flask_hello_world. - -lhr0916/flask_redis_task_q -https://github.com/lhr0916/flask_redis_task_q -Entry file: flask_redis_task_q/web/app.py -Scanned: 2016-10-19 10:13:58.905640 -No vulnerabilities found. - - -PrettyPrinted/flask-request-decorators -https://github.com/PrettyPrinted/flask-request-decorators -Entry file: flask-request-decorators/request_decorators.py -Scanned: 2016-10-19 10:14:00.095481 -No vulnerabilities found. - - -ics/Flask-GnuPG -https://github.com/ics/Flask-GnuPG -Entry file: Flask-GnuPG/test_flask_gnupg.py -Scanned: 2016-10-19 10:14:01.294492 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-19 10:14:02.493937 -No vulnerabilities found. - - -leitu/netscaler-flask-api -https://github.com/leitu/netscaler-flask-api -Entry file: netscaler-flask-api/netscaler_api/__init__.py -Scanned: 2016-10-19 10:14:03.815306 -No vulnerabilities found. - - -shilpasanthosh/flask-user-login-app -https://github.com/shilpasanthosh/flask-user-login-app -Entry file: flask-user-login-app/loginapp/__init__.py -Scanned: 2016-10-19 10:14:07.090924 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasselpratomo/simple_flask_restful -https://github.com/rasselpratomo/simple_flask_restful -Entry file: simple_flask_restful/app/__init__.py -Scanned: 2016-10-19 10:14:08.335483 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joe8767/flask-restful-example -https://github.com/joe8767/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-19 10:14:09.531050 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PrettyPrinted/flask-uploads-intro -https://github.com/PrettyPrinted/flask-uploads-intro -Entry file: flask-uploads-intro/upload.py -Scanned: 2016-10-19 10:14:10.890012 -No vulnerabilities found. - - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:14:11.405299 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -kojoidrissa/flask_intro_video -https://github.com/kojoidrissa/flask_intro_video -Entry file: flask_intro_video/8c/app/__init__.py -Scanned: 2016-10-19 10:14:12.846673 -No vulnerabilities found. - - -jmsalcido/python-flask-microblog -https://github.com/jmsalcido/python-flask-microblog -Entry file: python-flask-microblog/microblog/app/__init__.py -Scanned: 2016-10-19 10:14:14.347849 -No vulnerabilities found. - - -ettanany/flask-angular-contact-manager -https://github.com/ettanany/flask-angular-contact-manager -Entry file: flask-angular-contact-manager/server/app/__init__.py -Scanned: 2016-10-19 10:14:16.042518 -No vulnerabilities found. - - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-19 10:14:17.284569 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -marcfilba/videoStreamingFlask -https://github.com/marcfilba/videoStreamingFlask -Entry file: videoStreamingFlask/main.py -Scanned: 2016-10-19 10:14:18.554298 -No vulnerabilities found. - - -Jacob234/Flask-hello-world -https://github.com/Jacob234/Flask-hello-world -Entry file: Flask-hello-world/hello_world.py -Scanned: 2016-10-19 10:14:19.790680 -No vulnerabilities found. - - -PrettyPrinted/flask-restless-post -https://github.com/PrettyPrinted/flask-restless-post -Entry file: flask-restless-post/restless.py -Scanned: 2016-10-19 10:14:21.078971 -No vulnerabilities found. - - -austindavid/flasktaskr-cont -https://github.com/austindavid/flasktaskr-cont -Entry file: flasktaskr-cont/project/__init__.py -Scanned: 2016-10-19 10:14:22.499329 -No vulnerabilities found. - - -RicoChou/MyFlasky -https://github.com/RicoChou/MyFlasky -Entry file: MyFlasky/app/__init__.py -Scanned: 2016-10-19 10:14:24.074288 -Vulnerability 1: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: MyFlasky/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: MyFlasky/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: MyFlasky/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: MyFlasky/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: MyFlasky/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-19 10:14:24.578582 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tdvtoan/scorecard-recognition -https://github.com/tdvtoan/scorecard-recognition -Entry file: scorecard-recognition/project/__init__.py -Scanned: 2016-10-19 10:14:46.331527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -quiqua/docker-flask-celery-redis-example -https://github.com/quiqua/docker-flask-celery-redis-example -Entry file: docker-flask-celery-redis-example/src/myapp/app.py -Scanned: 2016-10-19 10:14:47.601473 -No vulnerabilities found. - - -saichandra286/Complete-Angularjs-Flask-Todo-App -https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App -Entry file: None -Scanned: 2016-10-19 10:14:50.941196 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App. - -MakeSchool-17/trip-planner-flask-backend-thetopplayer -https://github.com/MakeSchool-17/trip-planner-flask-backend-thetopplayer -Entry file: trip-planner-flask-backend-thetopplayer/server.py -Scanned: 2016-10-19 10:14:54.766835 -No vulnerabilities found. - - -MacHu-GWU/flask-restless-api-client-project -https://github.com/MacHu-GWU/flask-restless-api-client-project -Entry file: flask-restless-api-client-project/tests/CustomizeSerialization/run_server.py -Scanned: 2016-10-19 10:14:56.114861 -No vulnerabilities found. - - -whiskeyromeo/bucketlist -https://github.com/whiskeyromeo/bucketlist -Entry file: None -Scanned: 2016-10-19 10:14:58.824689 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CHHLeo/foruV1home_flask_pycharm_practice -https://github.com/CHHLeo/foruV1home_flask_pycharm_practice -Entry file: foruV1home_flask_pycharm_practice/flask_pycharm_practice.py -Scanned: 2016-10-19 10:15:17.460890 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -heamon7/learn-restful -https://github.com/heamon7/learn-restful -Entry file: learn-restful/app.py -Scanned: 2016-10-19 10:15:19.162976 -Vulnerability 1: -File: learn-restful/app.py - > User input at line 82, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: learn-restful/app.py - > reaches line 89, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -goodyvn/flask -https://github.com/goodyvn/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:15:22.719386 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -stevebannon/flask -https://github.com/stevebannon/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:15:23.748179 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sebkouba/dynamic-flask-form -https://github.com/sebkouba/dynamic-flask-form -Entry file: dynamic-flask-form/multimodel.py -Scanned: 2016-10-19 10:15:25.093187 -No vulnerabilities found. - - -solutionspecialist/flaskr -https://github.com/solutionspecialist/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:15:25.593580 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -XingxinLi/flaskr -https://github.com/XingxinLi/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:15:26.099730 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:15:26.599656 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:15:27.101843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mg6/flaskr -https://github.com/mg6/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:15:27.601432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourHobbes/flaskdemo -https://github.com/sourHobbes/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 10:15:28.121633 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:15:28.616110 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:15:29.140221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -metakermit/resin-home-automator -https://github.com/metakermit/resin-home-automator -Entry file: resin-home-automator/src/main.py -Scanned: 2016-10-19 10:15:31.180341 -No vulnerabilities found. - - -zerodaemon/flask1 -https://github.com/zerodaemon/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 10:15:31.872871 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -guiti1/FlaskAp -https://github.com/guiti1/FlaskAp -Entry file: FlaskAp/FlaskApp/__init__.py -Scanned: 2016-10-19 10:15:35.635075 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskAp/FlaskApp/venv/lib/python2.7/genericpath.py - -Bayaz/FlaskBlog -https://github.com/Bayaz/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:15:36.280648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JoshLandry/FlaskBlog -https://github.com/JoshLandry/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:15:36.874664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -colindjk/flaskTest -https://github.com/colindjk/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-19 10:15:37.395143 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Arsh23/random-crossword-generater -https://github.com/Arsh23/random-crossword-generater -Entry file: random-crossword-generater/app.py -Scanned: 2016-10-19 10:15:39.877745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pkrolikowski/flask_api -https://github.com/pkrolikowski/flask_api -Entry file: flask_api/api.py -Scanned: 2016-10-19 10:15:48.721038 -No vulnerabilities found. - - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 10:15:51.257212 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-19 10:15:55.988883 -No vulnerabilities found. - - -petrgru/flask-remenarna -https://github.com/petrgru/flask-remenarna -Entry file: flask-remenarna/app/__init__.py -Scanned: 2016-10-19 10:15:58.426519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spark0128/flask-intro -https://github.com/spark0128/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:15:58.941680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bcb/flask-uploads -https://github.com/bcb/flask-uploads -Entry file: flask-uploads/tests/test-uploads.py -Scanned: 2016-10-19 10:16:00.304776 -No vulnerabilities found. - - -kumaraswins/flask-angular -https://github.com/kumaraswins/flask-angular -Entry file: flask-angular/flask/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:16:05.399251 -No vulnerabilities found. - - -rookiebulls/flask-learn -https://github.com/rookiebulls/flask-learn -Entry file: flask-learn/app/__init__.py -Scanned: 2016-10-19 10:16:24.815042 -No vulnerabilities found. - - -climberwb/flask-blog -https://github.com/climberwb/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:16:25.429121 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Hyvjan/flask-blog -https://github.com/Hyvjan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:16:25.972715 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -xingyz/flask_thebutton -https://github.com/xingyz/flask_thebutton -Entry file: flask_thebutton/app/__init__.py -Scanned: 2016-10-19 10:16:27.542053 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brittanymcgarr/learningFlask -https://github.com/brittanymcgarr/learningFlask -Entry file: learningFlask/FlaskPractice/app/app.py -Scanned: 2016-10-19 10:16:29.456780 -Vulnerability 1: -File: learningFlask/FlaskPractice/app/entries/blueprint.py - > User input at line 65, trigger word "files[": - image_file = request.files['file'] -Reassigned in: - File: learningFlask/FlaskPractice/app/entries/blueprint.py - > Line 66: filename = os.path.join(app.config['IMAGES_DIR'], secure_filename(image_file.filename)) -File: learningFlask/FlaskPractice/app/entries/blueprint.py - > reaches line 69, trigger word "flash(": - flash('Saved %s' % os.path.basename(filename), 'success') - - - -PrettyPrinted/flask-sessions -https://github.com/PrettyPrinted/flask-sessions -Entry file: flask-sessions/web.py -Scanned: 2016-10-19 10:16:30.128989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-19 10:16:32.372596 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: None -Scanned: 2016-10-19 10:16:35.823157 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-19 10:16:37.056974 -No vulnerabilities found. - - -Kajvdh/nao-flask -https://github.com/Kajvdh/nao-flask -Entry file: nao-flask/app.py -Scanned: 2016-10-19 10:16:38.305313 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evansa/flask-sqlalchemy -https://github.com/evansa/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-19 10:16:38.811937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 10:16:39.333358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vrokida/demo-flask -https://github.com/vrokida/demo-flask -Entry file: demo-flask/demo-flask.py -Scanned: 2016-10-19 10:16:40.690299 -No vulnerabilities found. - - -androidzhibinw/Flask-reg -https://github.com/androidzhibinw/Flask-reg -Entry file: Flask-reg/app.py -Scanned: 2016-10-19 10:16:42.388465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-19 10:16:42.887455 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -Clarity-89/server_flask -https://github.com/Clarity-89/server_flask -Entry file: server_flask/Flask Test.py -Scanned: 2016-10-19 10:16:44.628603 -No vulnerabilities found. - - -jcmflenso/flask-udemy -https://github.com/jcmflenso/flask-udemy -Entry file: flask-udemy/hello.py -Scanned: 2016-10-19 10:16:45.843314 -No vulnerabilities found. - - -schakalakka/flask-project -https://github.com/schakalakka/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-19 10:17:01.143251 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -simongareste/flask-dummy -https://github.com/simongareste/flask-dummy -Entry file: flask-dummy/flask_dummy/__init__.py -Scanned: 2016-10-19 10:17:02.570780 -No vulnerabilities found. - - -liu1020269358/learn-flask -https://github.com/liu1020269358/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 10:17:03.344366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -foobaar/flask-expt -https://github.com/foobaar/flask-expt -Entry file: flask-expt/flask-experiment.py -Scanned: 2016-10-19 10:17:04.611337 -No vulnerabilities found. - - -lucafaggianelli/flask-skeleton -https://github.com/lucafaggianelli/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:17:05.122419 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lucafaggianelli/flask-skeleton. - -econne01/flask_blog -https://github.com/econne01/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:17:05.624258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdeamon/flask_app -https://github.com/mdeamon/flask_app -Entry file: None -Scanned: 2016-10-19 10:17:06.133124 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mdeamon/flask_app. - -dlrice/hello-flask -https://github.com/dlrice/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 10:17:06.714894 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:17:07.224975 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -devyash/Intelligent-Public-Grievance-System -https://github.com/devyash/Intelligent-Public-Grievance-System -Entry file: Intelligent-Public-Grievance-System/app.py -Scanned: 2016-10-19 10:17:13.006408 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/__init__.py -Scanned: 2016-10-19 10:17:14.408142 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -afaki077/minitweet -https://github.com/afaki077/minitweet -Entry file: None -Scanned: 2016-10-19 10:17:16.284709 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/afaki077/minitweet. - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-19 10:17:22.564906 -No vulnerabilities found. - - -sbm367/flaskTest2 -https://github.com/sbm367/flaskTest2 -Entry file: flaskTest2/flaskTest.py -Scanned: 2016-10-19 10:17:27.849761 -No vulnerabilities found. - - -emil-k/climate-compare_FlaskApp -https://github.com/emil-k/climate-compare_FlaskApp -Entry file: climate-compare_FlaskApp/__init__.py -Scanned: 2016-10-19 10:17:30.632933 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: climate-compare_FlaskApp/venv/lib/python2.7/genericpath.py - -daytonight/Flask-Web-Development-code -https://github.com/daytonight/Flask-Web-Development-code -Entry file: Flask-Web-Development-code/venv/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:17:36.128459 -No vulnerabilities found. - - -lkpanganiban/flask-mega-tutorial -https://github.com/lkpanganiban/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 10:17:36.704989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-19 10:17:39.749246 -No vulnerabilities found. - - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-19 10:17:41.224931 -No vulnerabilities found. - - -afborodin/simple-mysql-flask-app -https://github.com/afborodin/simple-mysql-flask-app -Entry file: simple-mysql-flask-app/app/__init__.py -Scanned: 2016-10-19 10:18:22.858406 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dternyak/my-react-flask-blog -https://github.com/dternyak/my-react-flask-blog -Entry file: my-react-flask-blog/index.py -Scanned: 2016-10-19 10:18:33.399215 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -skriems/flask-cherrypy-dockerized -https://github.com/skriems/flask-cherrypy-dockerized -Entry file: flask-cherrypy-dockerized/app.py -Scanned: 2016-10-19 10:18:34.808806 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-19 10:18:36.132560 -No vulnerabilities found. - - -broak/flask-hello-world -https://github.com/broak/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:18:36.689389 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ABaldwinHunter/flask-clone-classic -https://github.com/ABaldwinHunter/flask-clone-classic -Entry file: flask-clone-classic/setup.py -Scanned: 2016-10-19 10:18:41.759334 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ldrunner100/flask_hello_world -https://github.com/ldrunner100/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:18:42.274919 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ldrunner100/flask_hello_world. - -FinleySmile/flask_blog_demo -https://github.com/FinleySmile/flask_blog_demo -Entry file: flask_blog_demo/flask_blog_demo.py -Scanned: 2016-10-19 10:18:44.018059 -No vulnerabilities found. - - -quandrei/godzilla-foxfire-flask -https://github.com/quandrei/godzilla-foxfire-flask -Entry file: godzilla-foxfire-flask/app/__init__.py -Scanned: 2016-10-19 10:18:45.828768 -No vulnerabilities found. - - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-19 10:18:49.434767 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/genericpath.py - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-19 10:18:53.823677 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RodrigoVillatoro/flask_social_network -https://github.com/RodrigoVillatoro/flask_social_network -Entry file: flask_social_network/app/__init__.py -Scanned: 2016-10-19 10:18:56.080434 -Vulnerability 1: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 24: prev_page = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_social_network/app/api_1_0/users.py - > Line 27: next_page = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 2: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 48: prev_page = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_social_network/app/api_1_0/users.py - > Line 51: next_page = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 3: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 20: prev_page = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_social_network/app/api_1_0/posts.py - > Line 23: next_page = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 4: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 19: prev_page = url_for('api.get_comments',page=page - 1, _external=True) - File: flask_social_network/app/api_1_0/comments.py - > Line 22: next_page = url_for('api.get_comments',page=page + 1, _external=True) - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - -Vulnerability 5: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 47: prev_page = url_for('api.get_comments',page=page - 1, _external=True) - File: flask_social_network/app/api_1_0/comments.py - > Line 50: next_page = url_for('api.get_comments',page=page + 1, _external=True) - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - - - -p00gz/flask-imdbratings-app-backend -https://github.com/p00gz/flask-imdbratings-app-backend -Entry file: flask-imdbratings-app-backend/imdbRatings/__init__.py -Scanned: 2016-10-19 10:18:59.147795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -moonlitesolutions/flask_rest_template -https://github.com/moonlitesolutions/flask_rest_template -Entry file: flask_rest_template/flask_rest/api/api.py -Scanned: 2016-10-19 10:19:01.305640 -No vulnerabilities found. - - -alexwilkerson/flask-hello-world -https://github.com/alexwilkerson/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:19:01.840982 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -artisanofcode/flask-generic-views -https://github.com/artisanofcode/flask-generic-views -Entry file: flask-generic-views/tests/__init__.py -Scanned: 2016-10-19 10:19:02.345444 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -wasw100/flask-sqlalchemy-demo2 -https://github.com/wasw100/flask-sqlalchemy-demo2 -Entry file: flask-sqlalchemy-demo2/hello.py -Scanned: 2016-10-19 10:19:03.582882 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mekanix/flask-bootstrap-sql-rest -https://github.com/mekanix/flask-bootstrap-sql-rest -Entry file: flask-bootstrap-sql-rest/manage.py -Scanned: 2016-10-19 10:19:05.681129 -No vulnerabilities found. - - -ayesandarmoe/microblog_flask_tutorial -https://github.com/ayesandarmoe/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 10:19:15.022383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:19:15.589322 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-19 10:19:16.855368 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -yaoelvon/flask-uwsgi-demo -https://github.com/yaoelvon/flask-uwsgi-demo -Entry file: flask-uwsgi-demo/DeployingFlask/myflaskapp.py -Scanned: 2016-10-19 10:19:18.072846 -No vulnerabilities found. - - -Owen-Gillespie/FeatureLabsFlaskDemo -https://github.com/Owen-Gillespie/FeatureLabsFlaskDemo -Entry file: FeatureLabsFlaskDemo/main.py -Scanned: 2016-10-19 10:19:21.941011 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sheldonsmickley/flaskemail_app -https://github.com/sheldonsmickley/flaskemail_app -Entry file: flaskemail_app/emails.py -Scanned: 2016-10-19 10:19:23.309405 -Vulnerability 1: -File: flaskemail_app/emails.py - > User input at line 57, trigger word "form[": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) -Reassigned in: - File: flaskemail_app/emails.py - > Line 58: url = url.fetchall()[0][0] -File: flaskemail_app/emails.py - > reaches line 59, trigger word "execute(": - c.execute('INSERT into emails (company_name, email, url) values (?, ?, ?)', (request.form['existing_company'], request.form['email'], url)) - - - -tianxie/my_flasky -https://github.com/tianxie/my_flasky -Entry file: None -Scanned: 2016-10-19 10:19:23.818218 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tianxie/my_flasky. - -shas15/Betting-Chips -https://github.com/shas15/Betting-Chips -Entry file: Betting-Chips/test.py -Scanned: 2016-10-19 10:19:25.216520 -Vulnerability 1: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 2: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 3: -File: Betting-Chips/Models/User.py - > User input at line 45, trigger word "form[": - signup_name = request.form['name'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 49: user.name = signup_name -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 4: -File: Betting-Chips/Models/User.py - > User input at line 46, trigger word "form[": - signup_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 50: user.id = signup_id -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 5: -File: Betting-Chips/Models/User.py - > User input at line 47, trigger word "form[": - signup_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 51: user.password = signup_password -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - - - -malong5219/SampleBlog -https://github.com/malong5219/SampleBlog -Entry file: SampleBlog/app/__init__.py -Scanned: 2016-10-19 10:19:32.020586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-19 10:19:32.512583 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -richardsop/REST-API -https://github.com/richardsop/REST-API -Entry file: REST-API/app.py -Scanned: 2016-10-19 10:19:47.242243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tusharpawar/Agrostar_Flaskr -https://github.com/tusharpawar/Agrostar_Flaskr -Entry file: None -Scanned: 2016-10-19 10:19:52.245368 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -eunseo9808/fakeArtist -https://github.com/eunseo9808/fakeArtist -Entry file: fakeArtist/test.py -Scanned: 2016-10-19 10:19:53.656880 -No vulnerabilities found. - - -semonalbertyeah/quickflask -https://github.com/semonalbertyeah/quickflask -Entry file: quickflask/app.py -Scanned: 2016-10-19 10:19:55.061683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jyang22/Flasky_blog -https://github.com/jyang22/Flasky_blog -Entry file: Flasky_blog/app/__init__.py -Scanned: 2016-10-19 10:19:59.501458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aceokay/microblog -https://github.com/aceokay/microblog -Entry file: None -Scanned: 2016-10-19 10:20:00.022044 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -buntyke/Flask -https://github.com/buntyke/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:20:02.382002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nowaja/flask -https://github.com/nowaja/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:20:03.409941 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -suzf/Flask -https://github.com/suzf/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:20:03.910065 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -b-e/flask -https://github.com/b-e/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:20:05.918467 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -psuong/FlaskWorkshop -https://github.com/psuong/FlaskWorkshop -Entry file: FlaskWorkshop/jinja-templating/app.py -Scanned: 2016-10-19 10:20:07.650996 -No vulnerabilities found. - - -BLKStone/flask_image_search -https://github.com/BLKStone/flask_image_search -Entry file: flask_image_search/app/app.py -Scanned: 2016-10-19 10:20:10.948372 -No vulnerabilities found. - - -yj0914/flask- -https://github.com/yj0914/flask- -Entry file: flask-/num1.py -Scanned: 2016-10-19 10:20:12.191975 -No vulnerabilities found. - - -Bleezworld/flask_skeleton -https://github.com/Bleezworld/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 10:20:12.688468 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -TwilioDevEd/lead-alerts-flask -https://github.com/TwilioDevEd/lead-alerts-flask -Entry file: None -Scanned: 2016-10-19 10:20:14.728304 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TwilioDevEd/lead-alerts-flask. - -soasme/flask-perm -https://github.com/soasme/flask-perm -Entry file: flask-perm/example.py -Scanned: 2016-10-19 10:20:16.833585 -No vulnerabilities found. - - -rishipuri/flasktodo -https://github.com/rishipuri/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-19 10:20:17.532409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Hyvjan/flasktaskr -https://github.com/Hyvjan/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:20:18.058566 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zachary-russell/Flaskr -https://github.com/zachary-russell/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 10:20:18.731585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -storress/Flaskserver -https://github.com/storress/Flaskserver -Entry file: Flaskserver/main.py -Scanned: 2016-10-19 10:20:19.978076 -No vulnerabilities found. - - -dadasoz-cuelogic/flaskapp -https://github.com/dadasoz-cuelogic/flaskapp -Entry file: None -Scanned: 2016-10-19 10:20:21.327999 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dadasoz-cuelogic/flaskapp. - -expersso/flaskr -https://github.com/expersso/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:20:23.833692 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 10:20:26.204234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:20:26.714034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nickaustinlee/flasktaskr -https://github.com/nickaustinlee/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:20:27.345497 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:20:33.842617 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xavinso/flasktaskr -https://github.com/xavinso/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:20:34.348579 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CharlieWinters/flaskapi -https://github.com/CharlieWinters/flaskapi -Entry file: flaskapi/aydaapi3.py -Scanned: 2016-10-19 10:20:55.094213 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapi/flaskenv/lib/python2.7/genericpath.py - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:20:55.608668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/flaskr.py -Scanned: 2016-10-19 10:20:56.855032 -No vulnerabilities found. - - -apeete/flaskBlog -https://github.com/apeete/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-19 10:21:00.855085 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-19 10:21:05.862755 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/genericpath.py - -cyan-blue/my_flask -https://github.com/cyan-blue/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-19 10:21:06.518774 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -zachary-russell/Flask-Microblog -https://github.com/zachary-russell/Flask-Microblog -Entry file: Flask-Microblog/microblog/app/__init__.py -Scanned: 2016-10-19 10:21:07.766883 -No vulnerabilities found. - - -samwuu/flask_demo -https://github.com/samwuu/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 10:21:08.281503 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hnb2/flask-customers -https://github.com/hnb2/flask-customers -Entry file: flask-customers/customers/__init__.py -Scanned: 2016-10-19 10:21:09.649275 -No vulnerabilities found. - - -LeonNie52/Learn_Flask -https://github.com/LeonNie52/Learn_Flask -Entry file: Learn_Flask/hello.py -Scanned: 2016-10-19 10:21:11.447045 -No vulnerabilities found. - - -penguin-penpen/learnFlask -https://github.com/penguin-penpen/learnFlask -Entry file: None -Scanned: 2016-10-19 10:21:11.973810 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/penguin-penpen/learnFlask. - -raindrop4steven/tornadoFlask -https://github.com/raindrop4steven/tornadoFlask -Entry file: tornadoFlask/hello.py -Scanned: 2016-10-19 10:21:13.198528 -No vulnerabilities found. - - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-19 10:21:14.956263 -No vulnerabilities found. - - -cjmochrie/Flask-Demo -https://github.com/cjmochrie/Flask-Demo -Entry file: None -Scanned: 2016-10-19 10:21:16.357114 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cjmochrie/Flask-Demo. - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 10:21:16.885835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pkrolikowski/flask_api -https://github.com/pkrolikowski/flask_api -Entry file: flask_api/api.py -Scanned: 2016-10-19 10:21:18.224780 -No vulnerabilities found. - - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-19 10:21:19.599144 -No vulnerabilities found. - - -olive42/moz-flask -https://github.com/olive42/moz-flask -Entry file: moz-flask/hello.py -Scanned: 2016-10-19 10:21:20.840975 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: None -Scanned: 2016-10-19 10:21:21.348185 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-19 10:21:22.695375 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-19 10:21:26.271981 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jaramago/flask-basic -https://github.com/jaramago/flask-basic -Entry file: flask-basic/app/__init__.py -Scanned: 2016-10-19 10:21:27.691088 -No vulnerabilities found. - - -valdemarpereira/flask_tutorial -https://github.com/valdemarpereira/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:21:28.670748 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jit-1/flask-microblog -https://github.com/jit-1/flask-microblog -Entry file: None -Scanned: 2016-10-19 10:21:29.156596 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nof4444/Flask-mongodb -https://github.com/nof4444/Flask-mongodb -Entry file: Flask-mongodb/app.py -Scanned: 2016-10-19 10:21:32.065949 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-mongodb/env/lib/python2.7/genericpath.py - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 10:21:32.617595 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VictorDMor/flask-app -https://github.com/VictorDMor/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 10:21:33.118954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunway1988/MyFlask -https://github.com/sunway1988/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-19 10:21:36.378168 -No vulnerabilities found. - - -setiaji/learn_flask -https://github.com/setiaji/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 10:21:36.890572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -catcoderphp/flask-test -https://github.com/catcoderphp/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:21:50.419575 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -ottoman91/flask_tutorial -https://github.com/ottoman91/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:21:57.402160 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HiagoMayk/projetoFlask -https://github.com/HiagoMayk/projetoFlask -Entry file: projetoFlask/routes.py -Scanned: 2016-10-19 10:21:59.647714 -No vulnerabilities found. - - -nimeshkverma/Versioned_Flask -https://github.com/nimeshkverma/Versioned_Flask -Entry file: Versioned_Flask/app/__init__.py -Scanned: 2016-10-19 10:22:08.394516 -No vulnerabilities found. - - -huyquyet/flask-demo -https://github.com/huyquyet/flask-demo -Entry file: None -Scanned: 2016-10-19 10:22:09.374521 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/huyquyet/flask-demo. - -seonhyeshin/flask-mysql -https://github.com/seonhyeshin/flask-mysql -Entry file: flask-mysql/app.py -Scanned: 2016-10-19 10:22:11.514729 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-mysql/venv/lib/python2.7/genericpath.py - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:22:13.004434 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PhilipGough/flask_api -https://github.com/PhilipGough/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 10:22:14.866952 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-19 10:22:21.359195 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-19 10:22:22.630172 -No vulnerabilities found. - - -mburke05/flask_tutorial -https://github.com/mburke05/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:22:23.128002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/__init__.py -Scanned: 2016-10-19 10:22:23.634168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjuppa/microblog -https://github.com/rjuppa/microblog -Entry file: None -Scanned: 2016-10-19 10:22:24.134683 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -depaoli/FlaskAppSample -https://github.com/depaoli/FlaskAppSample -Entry file: FlaskAppSample/flask_app_sample/__init__.py -Scanned: 2016-10-19 10:22:25.365691 -No vulnerabilities found. - - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-19 10:22:28.381292 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AlexProv/flaskRestApiSkeleton -https://github.com/AlexProv/flaskRestApiSkeleton -Entry file: flaskRestApiSkeleton/flaskServer.py -Scanned: 2016-10-19 10:22:30.235704 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xavinso/flask_hello_world -https://github.com/xavinso/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:22:30.750521 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xavinso/flask_hello_world. - -aetherwu/Flask-Docker-Template -https://github.com/aetherwu/Flask-Docker-Template -Entry file: Flask-Docker-Template/flask/web/__init__.py -Scanned: 2016-10-19 10:22:40.227262 -Vulnerability 1: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 549, trigger word "get(": - user_email = request.cookies.get('user_email') -File: Flask-Docker-Template/flask/web/views.py - > reaches line 554, trigger word "set_cookie(": - response.set_cookie('user_email', str(user.email),expires=time.time() + 6000 * 60) - - - -tommyblue/flask-react-blog -https://github.com/tommyblue/flask-react-blog -Entry file: flask-react-blog/initializer.py -Scanned: 2016-10-19 10:22:41.665314 -No vulnerabilities found. - - -MikeHannon/python_flask_teams -https://github.com/MikeHannon/python_flask_teams -Entry file: python_flask_teams/server.py -Scanned: 2016-10-19 10:22:42.901660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomquirk/js-flavoured-flask -https://github.com/tomquirk/js-flavoured-flask -Entry file: js-flavoured-flask/app/__init__.py -Scanned: 2016-10-19 10:22:44.520353 -No vulnerabilities found. - - -gtlambert/first_flask_app -https://github.com/gtlambert/first_flask_app -Entry file: first_flask_app/project.py -Scanned: 2016-10-19 10:22:45.055776 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-19 10:22:46.420219 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-19 10:22:49.210043 -No vulnerabilities found. - - -Ryanglambert/playing_with_flask -https://github.com/Ryanglambert/playing_with_flask -Entry file: playing_with_flask/hello.py -Scanned: 2016-10-19 10:22:50.484044 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-19 10:22:52.082327 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/genericpath.py - -orjanv/ESVtoLeetFlaskApp -https://github.com/orjanv/ESVtoLeetFlaskApp -Entry file: ESVtoLeetFlaskApp/app.py -Scanned: 2016-10-19 10:22:59.457939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ptmccarthy/flask-microblog-tutorial -https://github.com/ptmccarthy/flask-microblog-tutorial -Entry file: flask-microblog-tutorial/app/__init__.py -Scanned: 2016-10-19 10:23:00.827848 -No vulnerabilities found. - - -bronka/flask-hello-world -https://github.com/bronka/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:23:01.384151 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -sidthakur/docker-single-nginx-flask -https://github.com/sidthakur/docker-single-nginx-flask -Entry file: docker-single-nginx-flask/app/app.py -Scanned: 2016-10-19 10:23:05.765559 -No vulnerabilities found. - - -mbreisch/flask-hello-world -https://github.com/mbreisch/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:23:09.359898 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -zxqwerxz/test_flask_deploy -https://github.com/zxqwerxz/test_flask_deploy -Entry file: test_flask_deploy/hello.py -Scanned: 2016-10-19 10:23:11.610551 -No vulnerabilities found. - - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-19 10:23:12.134149 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lwjones/flask-hello-world -https://github.com/lwjones/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:23:12.660412 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Pensu/flask-ppc64le -https://github.com/Pensu/flask-ppc64le -Entry file: flask-ppc64le/app.py -Scanned: 2016-10-19 10:23:14.041254 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leonidas/flask-spa-routing-example -https://github.com/leonidas/flask-spa-routing-example -Entry file: None -Scanned: 2016-10-19 10:23:15.305168 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leonidas/flask-spa-routing-example. - -renmmotp/Ren_Learns_Flask -https://github.com/renmmotp/Ren_Learns_Flask -Entry file: Ren_Learns_Flask/flaskr/flaskr.py -Scanned: 2016-10-19 10:23:16.698452 -No vulnerabilities found. - - -posenberg/Flask-Kickstarter-Clone -https://github.com/posenberg/Flask-Kickstarter-Clone -Entry file: Flask-Kickstarter-Clone/punchstarter/__init__.py -Scanned: 2016-10-19 10:23:24.726871 -No vulnerabilities found. - - -pythonvietnam/meetup01-flask -https://github.com/pythonvietnam/meetup01-flask -Entry file: meetup01-flask/hello_world.py -Scanned: 2016-10-19 10:23:26.209922 -No vulnerabilities found. - - -palden/flask-hello-world -https://github.com/palden/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:23:26.733151 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -poxstone/flask -https://github.com/poxstone/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:23:30.328892 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -FlaskTutorial/Flask -https://github.com/FlaskTutorial/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:23:30.880334 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charanjp/flask -https://github.com/charanjp/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:23:31.916498 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -yasskh/flask -https://github.com/yasskh/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:23:32.977296 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -OnlySHI/flask -https://github.com/OnlySHI/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:23:35.052346 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jvuori/flask-uwsgi-nginx-haproxy-docker -https://github.com/jvuori/flask-uwsgi-nginx-haproxy-docker -Entry file: flask-uwsgi-nginx-haproxy-docker/web/app.py -Scanned: 2016-10-19 10:23:36.328235 -No vulnerabilities found. - - -akupara/flask_inspector -https://github.com/akupara/flask_inspector -Entry file: flask_inspector/example/app.py -Scanned: 2016-10-19 10:23:43.007137 -No vulnerabilities found. - - -soasme/flask-personal-access-token -https://github.com/soasme/flask-personal-access-token -Entry file: flask-personal-access-token/example.py -Scanned: 2016-10-19 10:23:45.390845 -No vulnerabilities found. - - -shinycoo/flaskmvcsample -https://github.com/shinycoo/flaskmvcsample -Entry file: flaskmvcsample/app.py -Scanned: 2016-10-19 10:23:46.673744 -No vulnerabilities found. - - -alexwilkerson/flasktaskr -https://github.com/alexwilkerson/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:23:47.178910 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 10:23:47.663494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:23:48.147380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apeete/flasktaskr -https://github.com/apeete/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:23:51.666258 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -slippers/flasksec -https://github.com/slippers/flasksec -Entry file: flasksec/main/__init__.py -Scanned: 2016-10-19 10:23:53.954502 -No vulnerabilities found. - - -rui7157/Flask-NvRay-Blog -https://github.com/rui7157/Flask-NvRay-Blog -Entry file: Flask-NvRay-Blog/vendor/flask/sessions.py -Scanned: 2016-10-19 10:24:04.195609 -No vulnerabilities found. - - -Ineeza/FlaskAppBuilder -https://github.com/Ineeza/FlaskAppBuilder -Entry file: FlaskAppBuilder/src/classes/__init__.py -Scanned: 2016-10-19 10:24:05.672689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-19 10:24:10.137601 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DamithaPerera/FlaskApp -https://github.com/DamithaPerera/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 10:24:10.725299 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dreammis/Flask02 -https://github.com/dreammis/Flask02 -Entry file: Flask02/app/__init__.py -Scanned: 2016-10-19 10:24:11.996221 -No vulnerabilities found. - - -YoungGer/FlaskApps -https://github.com/YoungGer/FlaskApps -Entry file: FlaskApps/pdClassifier/app.py -Scanned: 2016-10-19 10:24:13.597159 -No vulnerabilities found. - - -junniepat/FlaskApp -https://github.com/junniepat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 10:24:14.163785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-19 10:24:14.726945 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -deyoppe/FlaskFire -https://github.com/deyoppe/FlaskFire -Entry file: FlaskFire/core/system/app.py -Scanned: 2016-10-19 10:24:15.961196 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-19 10:24:17.361416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-19 10:24:17.954280 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/genericpath.py - -ztomazin/flask_exp -https://github.com/ztomazin/flask_exp -Entry file: None -Scanned: 2016-10-19 10:24:24.760490 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hunt3ri/temp-flask -https://github.com/hunt3ri/temp-flask -Entry file: temp-flask/app/__init__.py -Scanned: 2016-10-19 10:24:26.138868 -No vulnerabilities found. - - -arkenidar/flask-example -https://github.com/arkenidar/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 10:24:26.679183 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:24:28.245077 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -allianRoman/flask-intro -https://github.com/allianRoman/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:24:28.753664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amybethx/flask-intro -https://github.com/amybethx/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:24:30.355199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -terriwong/flask-intro -https://github.com/terriwong/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:24:31.864469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -szhjia/flask-blog -https://github.com/szhjia/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:24:33.395633 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Jiezhi/HelloFlask -https://github.com/Jiezhi/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 10:24:33.906930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ltaziri/Flask-Intro -https://github.com/ltaziri/Flask-Intro -Entry file: Flask-Intro/nice.py -Scanned: 2016-10-19 10:24:36.212970 -No vulnerabilities found. - - -alitsiya/flask-intro -https://github.com/alitsiya/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:24:36.718702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-19 10:24:44.164145 -No vulnerabilities found. - - -sandiego206/flask_microblog -https://github.com/sandiego206/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 10:24:44.696073 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Odava/flask-jwt -https://github.com/Odava/flask-jwt -Entry file: flask-jwt/tests/conftest.py -Scanned: 2016-10-19 10:24:48.243093 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-19 10:24:48.776989 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ajoshdee/flask-test -https://github.com/ajoshdee/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:24:53.258096 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -palden/flask-blog -https://github.com/palden/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:24:54.781113 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -humaneu/flask_app -https://github.com/humaneu/flask_app -Entry file: None -Scanned: 2016-10-19 10:25:02.318872 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/humaneu/flask_app. - -cclittle13/flask-intro -https://github.com/cclittle13/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:06.825369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -emlam/flask-intro -https://github.com/emlam/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:07.317080 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spyapali/Flask-intro -https://github.com/spyapali/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-19 10:25:12.596940 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -celiawaggoner/flask-intro -https://github.com/celiawaggoner/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:13.113659 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cachar/flask-intro -https://github.com/cachar/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:13.623913 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KTAtkinson/flask-intro -https://github.com/KTAtkinson/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:15.116299 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pasysxa/flask-mall -https://github.com/pasysxa/flask-mall -Entry file: flask-mall/myapp/__init__.py -Scanned: 2016-10-19 10:25:17.371608 -No vulnerabilities found. - - -fendouai/venv_flask -https://github.com/fendouai/venv_flask -Entry file: venv_flask/cookie.py -Scanned: 2016-10-19 10:25:20.831557 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: venv_flask/venv/lib/python2.7/genericpath.py - -leiyue/learning_flask -https://github.com/leiyue/learning_flask -Entry file: learning_flask/miniblog/miniblog.py -Scanned: 2016-10-19 10:25:22.087895 -No vulnerabilities found. - - -florenceloi/flask-intro -https://github.com/florenceloi/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:22.586565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoriRunyon/flask-intro -https://github.com/DoriRunyon/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:23.087153 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qistchan/WebhookFlask -https://github.com/qistchan/WebhookFlask -Entry file: WebhookFlask/WebHook_Listener.py -Scanned: 2016-10-19 10:25:27.362791 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: Flask_intro/flask_app/__init__.py -Scanned: 2016-10-19 10:25:32.466457 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kooder18/flask_Ecommerce -https://github.com/kooder18/flask_Ecommerce -Entry file: flask_Ecommerce/project.py -Scanned: 2016-10-19 10:25:33.843338 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alenakruchkova/flask-intro -https://github.com/alenakruchkova/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:34.363090 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bekkam/flask-intro -https://github.com/bekkam/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:34.854073 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anniehe/flask-intro -https://github.com/anniehe/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:35.382265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vianey81/flask-intro -https://github.com/Vianey81/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:35.870618 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcbishop/flask-intro -https://github.com/mcbishop/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:25:36.364829 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bandurin/Test-flask -https://github.com/Bandurin/Test-flask -Entry file: Test-flask/db_app.py -Scanned: 2016-10-19 10:25:45.714077 -No vulnerabilities found. - - -0phelia/flask-app -https://github.com/0phelia/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 10:25:46.227041 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-19 10:26:00.867946 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-19 10:26:02.137431 -No vulnerabilities found. - - -ssam123/flask-tutorial -https://github.com/ssam123/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:26:02.637817 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ziyoung/learningFlask -https://github.com/ziyoung/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-19 10:26:08.097542 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -karayount/flask-intro -https://github.com/karayount/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:26:08.594161 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -go-bears/flask-intro -https://github.com/go-bears/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:26:09.080797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mlpeters12/flask-intro -https://github.com/mlpeters12/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:26:09.584309 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arbonap/flask-intro -https://github.com/arbonap/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:26:10.078692 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nimeshkverma/SolrFlask -https://github.com/nimeshkverma/SolrFlask -Entry file: SolrFlask/app/app_config.py -Scanned: 2016-10-19 10:26:14.436252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gaozhidf/flask_websocket -https://github.com/gaozhidf/flask_websocket -Entry file: flask_websocket/websocket_py3/manage.py -Scanned: 2016-10-19 10:26:22.243480 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hilyas/flask-blog -https://github.com/hilyas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:26:22.823469 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dimy407/NBC_Flask -https://github.com/dimy407/NBC_Flask -Entry file: NBC_Flask/flask_app.py -Scanned: 2016-10-19 10:26:25.141973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ltaziri/Flask-Shopping -https://github.com/ltaziri/Flask-Shopping -Entry file: Flask-Shopping/shoppingsite.py -Scanned: 2016-10-19 10:26:26.714097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jefersondaniel/notebook-api -https://github.com/jefersondaniel/notebook-api -Entry file: notebook-api/app/__init__.py -Scanned: 2016-10-19 10:26:28.168659 -No vulnerabilities found. - - -ddrsmile/flask-hello-world -https://github.com/ddrsmile/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:26:28.728942 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -saviour123/flaskStudentData -https://github.com/saviour123/flaskStudentData -Entry file: flaskStudentData/app.py -Scanned: 2016-10-19 10:26:29.991212 -Vulnerability 1: -File: flaskStudentData/app.py - > User input at line 29, trigger word "form[": - name = request.form['nm'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 2: -File: flaskStudentData/app.py - > User input at line 30, trigger word "form[": - addr = request.form['add'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 3: -File: flaskStudentData/app.py - > User input at line 31, trigger word "form[": - city = request.form['city'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 4: -File: flaskStudentData/app.py - > User input at line 32, trigger word "form[": - pin = request.form['pin'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - - - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-19 10:26:30.528149 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -QLGu/flask-zhihu-demo -https://github.com/QLGu/flask-zhihu-demo -Entry file: flask-zhihu-demo/www/__init__.py -Scanned: 2016-10-19 10:26:33.617048 -No vulnerabilities found. - - -yalove/flask-nginx-gunicorn -https://github.com/yalove/flask-nginx-gunicorn -Entry file: flask-nginx-gunicorn/app/hello.py -Scanned: 2016-10-19 10:26:34.945640 -No vulnerabilities found. - - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-19 10:26:36.319409 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -AndyMcLEOD/PythonFlaskApp -https://github.com/AndyMcLEOD/PythonFlaskApp -Entry file: PythonFlaskApp/app.py -Scanned: 2016-10-19 10:26:40.502691 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tjhakseth/Nice-Flask-Intro -https://github.com/tjhakseth/Nice-Flask-Intro -Entry file: Nice-Flask-Intro/nice.py -Scanned: 2016-10-19 10:26:41.765536 -No vulnerabilities found. - - -mlsh2387/Ex_20160119_Flask-Intro -https://github.com/mlsh2387/Ex_20160119_Flask-Intro -Entry file: Ex_20160119_Flask-Intro/nice.py -Scanned: 2016-10-19 10:26:43.020322 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adamphillips/pi-flask-video-streaming -https://github.com/adamphillips/pi-flask-video-streaming -Entry file: pi-flask-video-streaming/app/main.py -Scanned: 2016-10-19 10:26:44.422559 -No vulnerabilities found. - - -Michotastico/NetworkInformationFlaskServer -https://github.com/Michotastico/NetworkInformationFlaskServer -Entry file: NetworkInformationFlaskServer/main.py -Scanned: 2016-10-19 10:26:45.669191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jkravanja/paypal_flask_payment -https://github.com/jkravanja/paypal_flask_payment -Entry file: paypal_flask_payment/payment.py -Scanned: 2016-10-19 10:26:46.908632 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -tolmun/flask-ng-sample -https://github.com/tolmun/flask-ng-sample -Entry file: flask-ng-sample/project/__init__.py -Scanned: 2016-10-19 10:26:48.478506 -Vulnerability 1: -File: flask-ng-sample/project/api/views.py - > User input at line 132, trigger word ".data": - users = schema.dump(results,many=True).data -File: flask-ng-sample/project/api/views.py - > reaches line 133, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'users) - -Vulnerability 2: -File: flask-ng-sample/project/api/views.py - > User input at line 154, trigger word ".data": - user = schema.dump(results).data -File: flask-ng-sample/project/api/views.py - > reaches line 155, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('user'user) - - - -SeventhResolve/Flask-Intro-Nice-File -https://github.com/SeventhResolve/Flask-Intro-Nice-File -Entry file: Flask-Intro-Nice-File/nice.py -Scanned: 2016-10-19 10:26:49.731878 -No vulnerabilities found. - - -torykit/docker-flask-console -https://github.com/torykit/docker-flask-console -Entry file: docker-flask-console/start.py -Scanned: 2016-10-19 10:26:51.100733 -No vulnerabilities found. - - -koulanurag/Simple-Flask-Application -https://github.com/koulanurag/Simple-Flask-Application -Entry file: Simple-Flask-Application/app.py -Scanned: 2016-10-19 10:26:52.364768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -graphql-python/flask-graphql -https://github.com/graphql-python/flask-graphql -Entry file: flask-graphql/tests/app.py -Scanned: 2016-10-19 10:27:07.022281 -No vulnerabilities found. - - -hhstore/flask-annotated -https://github.com/hhstore/flask-annotated -Entry file: flask-annotated/flask-0.5/flask/app.py -Scanned: 2016-10-19 10:27:08.830264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prakxys/flask -https://github.com/prakxys/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:27:10.896515 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:27:11.997091 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -zhiliang729/flask -https://github.com/zhiliang729/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:27:13.007110 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -iFe1er/flask -https://github.com/iFe1er/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:27:14.035650 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -jarogers095/flask-hello-world -https://github.com/jarogers095/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:27:15.576415 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -alex-paterson/Barebones-Flask-and-Caffe-Classifier -https://github.com/alex-paterson/Barebones-Flask-and-Caffe-Classifier -Entry file: Barebones-Flask-and-Caffe-Classifier/app.py -Scanned: 2016-10-19 10:27:18.652699 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-19 10:27:24.939747 -No vulnerabilities found. - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-19 10:27:26.387137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fengyc/flasky -https://github.com/fengyc/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:27:26.885586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshimp/flasktaskr -https://github.com/sshimp/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:27:28.395175 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sharma-abhi/flaskr -https://github.com/sharma-abhi/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:27:29.936593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kwikiel/flaskr -https://github.com/kwikiel/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:27:30.444188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tehasdf/flaskexample -https://github.com/tehasdf/flaskexample -Entry file: flaskexample/flaskexample/app.py -Scanned: 2016-10-19 10:27:33.313690 -No vulnerabilities found. - - -sanghyunjooPurdue/flaskr -https://github.com/sanghyunjooPurdue/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:27:33.847371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becsully/flasktest -https://github.com/becsully/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 10:27:35.363614 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SFurnace/flaskr -https://github.com/SFurnace/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:27:36.860204 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:27:38.382336 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AxoSal/GAE-Flask-React-skeleton -https://github.com/AxoSal/GAE-Flask-React-skeleton -Entry file: GAE-Flask-React-skeleton/main.py -Scanned: 2016-10-19 10:27:46.719248 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-19 10:27:47.331079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-19 10:27:47.984052 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -AnshuOnGit/FlaskServices -https://github.com/AnshuOnGit/FlaskServices -Entry file: FlaskServices/read_file.py -Scanned: 2016-10-19 10:27:51.277015 -No vulnerabilities found. - - -ftanevski4/FlaskPycharm -https://github.com/ftanevski4/FlaskPycharm -Entry file: FlaskPycharm/FlaskPycharm.py -Scanned: 2016-10-19 10:27:52.550782 -No vulnerabilities found. - - -yukoga/flasksample1 -https://github.com/yukoga/flasksample1 -Entry file: flasksample1/hello.py -Scanned: 2016-10-19 10:27:53.803689 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-19 10:27:54.316001 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:27:54.840471 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ddrsmile/flask-blog -https://github.com/ddrsmile/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:27:55.410146 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dasdachs/flask-blog -https://github.com/dasdachs/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:28:03.976375 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yuz989/uwsgi-flask -https://github.com/yuz989/uwsgi-flask -Entry file: uwsgi-flask/main.py -Scanned: 2016-10-19 10:28:06.308591 -No vulnerabilities found. - - -hugoren/flask_login -https://github.com/hugoren/flask_login -Entry file: None -Scanned: 2016-10-19 10:28:07.544504 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hugoren/flask_login. - -jlents/discover-flask -https://github.com/jlents/discover-flask -Entry file: discover-flask/project/__init__.py -Scanned: 2016-10-19 10:28:10.007387 -No vulnerabilities found. - - -jaleskinen/PythonFlask -https://github.com/jaleskinen/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:28:25.921063 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -mhgit1/PythonFlask -https://github.com/mhgit1/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:28:35.967054 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -maukka76/PythonFlask -https://github.com/maukka76/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:28:44.636073 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Namelessi/PythonFlask -https://github.com/Namelessi/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:28:55.922446 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -nimeshkverma/BootstrapFlask -https://github.com/nimeshkverma/BootstrapFlask -Entry file: BootstrapFlask/chehra/test_server/driver.py -Scanned: 2016-10-19 10:28:58.597049 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feeman1989/backstage_flask -https://github.com/feeman1989/backstage_flask -Entry file: backstage_flask/app.py -Scanned: 2016-10-19 10:28:59.218924 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charanjp/flask_blog -https://github.com/charanjp/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:28:59.747424 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-19 10:29:01.155490 -No vulnerabilities found. - - -ddrsmile/flask-taskr -https://github.com/ddrsmile/flask-taskr -Entry file: flask-taskr/views.py -Scanned: 2016-10-19 10:29:01.951424 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-taskr/env/lib/python2.7/genericpath.py - -Roconda/flask-bootstrap -https://github.com/Roconda/flask-bootstrap -Entry file: flask-bootstrap/src/api/__init__.py -Scanned: 2016-10-19 10:29:04.209285 -No vulnerabilities found. - - -maxcell/flask-workshop -https://github.com/maxcell/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-19 10:29:05.983935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshimp/flask-blog -https://github.com/sshimp/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:29:06.565216 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -PavelMPD/flask_auth -https://github.com/PavelMPD/flask_auth -Entry file: flask_auth/web/server.py -Scanned: 2016-10-19 10:29:08.253500 -No vulnerabilities found. - - -seanwbarry/thinkful_flask -https://github.com/seanwbarry/thinkful_flask -Entry file: thinkful_flask/hello_world_original.py -Scanned: 2016-10-19 10:29:11.038509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OrionsSuspenders/flask-blog -https://github.com/OrionsSuspenders/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:29:11.591229 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -DaTimsta/flask-test -https://github.com/DaTimsta/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:29:12.116327 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -sstriatlon/PyFlask -https://github.com/sstriatlon/PyFlask -Entry file: PyFlask/app.py -Scanned: 2016-10-19 10:29:15.135847 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: PyFlask/venv/lib/python2.7/genericpath.py - -Vianey81/Flask-sql -https://github.com/Vianey81/Flask-sql -Entry file: Flask-sql/hackbright.py -Scanned: 2016-10-19 10:29:16.883931 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timoparv65/PythonFlask -https://github.com/timoparv65/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:29:25.105226 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -JRaisala/PythonFlask -https://github.com/JRaisala/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:29:34.982527 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jraappan/PythonFlask -https://github.com/jraappan/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:29:45.142020 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -hannu78/PythonFlask -https://github.com/hannu78/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:29:54.744198 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -marcosf63/flask_app -https://github.com/marcosf63/flask_app -Entry file: None -Scanned: 2016-10-19 10:29:55.242505 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcosf63/flask_app. - -maratkanov-a/flask_project -https://github.com/maratkanov-a/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 10:29:58.614092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bellcliff/practice-flask -https://github.com/bellcliff/practice-flask -Entry file: practice-flask/hello.py -Scanned: 2016-10-19 10:30:00.426810 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: Flask_intro/flask_app/__init__.py -Scanned: 2016-10-19 10:30:00.941325 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -changddcn/dd-flask -https://github.com/changddcn/dd-flask -Entry file: None -Scanned: 2016-10-19 10:30:02.652265 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/changddcn/dd-flask. - -Decus12/PythonFlask -https://github.com/Decus12/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:30:12.307582 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -thiltunen78/PythonFlask -https://github.com/thiltunen78/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:30:20.821618 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -tere15/PythonFlask -https://github.com/tere15/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:30:30.947176 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ttakkula/flask_example -https://github.com/ttakkula/flask_example -Entry file: None -Scanned: 2016-10-19 10:30:38.410922 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -satyadevi-nyros/werckers_flask -https://github.com/satyadevi-nyros/werckers_flask -Entry file: werckers_flask/app.py -Scanned: 2016-10-19 10:30:39.708302 -No vulnerabilities found. - - -ltaziri/SQL-Flask -https://github.com/ltaziri/SQL-Flask -Entry file: SQL-Flask/hackbright.py -Scanned: 2016-10-19 10:30:40.971201 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -psavela/PythonFlask -https://github.com/psavela/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:30:50.731258 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -KariR61/PythonFlask -https://github.com/KariR61/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:31:00.680776 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -dhruvsrivastava/flask-intro -https://github.com/dhruvsrivastava/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:31:01.240503 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjohns38/flask-intro -https://github.com/cjohns38/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:31:01.753892 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -notaweelos/openshift_flask -https://github.com/notaweelos/openshift_flask -Entry file: openshift_flask/helloflask.py -Scanned: 2016-10-19 10:31:03.072552 -No vulnerabilities found. - - -jkeung/flask_microblog -https://github.com/jkeung/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 10:31:03.594183 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shank7485/Flask-APIs -https://github.com/shank7485/Flask-APIs -Entry file: Flask-APIs/APIs/__init__.py -Scanned: 2016-10-19 10:31:04.989781 -No vulnerabilities found. - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-19 10:31:06.415003 -No vulnerabilities found. - - -nntndfrk/untitled -https://github.com/nntndfrk/untitled -Entry file: untitled/untitled.py -Scanned: 2016-10-19 10:31:07.671156 -No vulnerabilities found. - - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-19 10:31:08.928996 -No vulnerabilities found. - - -jgabrielfreitas/FlaskAndParse -https://github.com/jgabrielfreitas/FlaskAndParse -Entry file: FlaskAndParse/hello_flask.py -Scanned: 2016-10-19 10:31:10.204633 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Buuntu/TicTacToe-Flask -https://github.com/Buuntu/TicTacToe-Flask -Entry file: TicTacToe-Flask/tictactoe.py -Scanned: 2016-10-19 10:31:11.575161 -No vulnerabilities found. - - -emlam/project-tracker-flask -https://github.com/emlam/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 10:31:12.092211 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-19 10:31:13.339961 -No vulnerabilities found. - - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-19 10:31:14.648453 -No vulnerabilities found. - - -julyano/MiniCursoFlaskPETCC -https://github.com/julyano/MiniCursoFlaskPETCC -Entry file: MiniCursoFlaskPETCC/routes.py -Scanned: 2016-10-19 10:31:15.934692 -No vulnerabilities found. - - -go-bears/sql-with-flask -https://github.com/go-bears/sql-with-flask -Entry file: sql-with-flask/hackbright.py -Scanned: 2016-10-19 10:31:17.182375 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anniehe/project-tracker-flask -https://github.com/anniehe/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 10:31:17.684115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neonbadger/project-tracker-flask -https://github.com/neonbadger/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 10:31:18.185162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoriRunyon/Project-tracker-flask -https://github.com/DoriRunyon/Project-tracker-flask -Entry file: Project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 10:31:19.420560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EdilvoLima/CursoPythonFlask -https://github.com/EdilvoLima/CursoPythonFlask -Entry file: CursoPythonFlask/routes.py -Scanned: 2016-10-19 10:31:20.672173 -No vulnerabilities found. - - -dternyak/Flask-Postgres-Docker -https://github.com/dternyak/Flask-Postgres-Docker -Entry file: Flask-Postgres-Docker/web/index.py -Scanned: 2016-10-19 10:31:22.461836 -No vulnerabilities found. - - -info3180/python-flask-example -https://github.com/info3180/python-flask-example -Entry file: python-flask-example/hello.py -Scanned: 2016-10-19 10:31:23.694784 -No vulnerabilities found. - - -janeygak/Hackbright--SQL-with-Flask -https://github.com/janeygak/Hackbright--SQL-with-Flask -Entry file: Hackbright--SQL-with-Flask/hackbright-web.py -Scanned: 2016-10-19 10:31:25.040642 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SeventhResolve/Project-Tracker-Flask -https://github.com/SeventhResolve/Project-Tracker-Flask -Entry file: Project-Tracker-Flask/hackbright-web.py -Scanned: 2016-10-19 10:31:26.293087 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alitsiya/project-tracker-flask -https://github.com/alitsiya/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 10:31:26.793376 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ThomasMarcel/gae-tomalcala-flask -https://github.com/ThomasMarcel/gae-tomalcala-flask -Entry file: gae-tomalcala-flask/main.py -Scanned: 2016-10-19 10:31:28.228539 -No vulnerabilities found. - - -ContinuumIO/flask-kerberos-login -https://github.com/ContinuumIO/flask-kerberos-login -Entry file: flask-kerberos-login/examples/simple.py -Scanned: 2016-10-19 10:31:33.857160 -No vulnerabilities found. - - -badspelr/flask-hello-world -https://github.com/badspelr/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:31:40.468577 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -yoophi/flask-appointment-peewee -https://github.com/yoophi/flask-appointment-peewee -Entry file: flask-appointment-peewee/sched/app.py -Scanned: 2016-10-19 10:31:42.849700 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -c1rno/Flask_auth_example -https://github.com/c1rno/Flask_auth_example -Entry file: Flask_auth_example/app/__init__.py -Scanned: 2016-10-19 10:31:53.766447 -No vulnerabilities found. - - -prakxys/flask -https://github.com/prakxys/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:32:04.784734 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:32:05.969995 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:32:06.484377 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -https://github.com/OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -Entry file: Office365-SharePoint-Python-Flask-Sample/src/Python.Office365.AppAuthentication/app.py -Scanned: 2016-10-19 10:32:08.126611 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:32:08.640474 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -imperio-wxm/flask-learn -https://github.com/imperio-wxm/flask-learn -Entry file: flask-learn/app/myapp/__init__.py -Scanned: 2016-10-19 10:32:11.170998 -No vulnerabilities found. - - -ptrierweiler/myblog -https://github.com/ptrierweiler/myblog -Entry file: None -Scanned: 2016-10-19 10:32:15.186175 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-19 10:32:16.600668 -No vulnerabilities found. - - -msopentechcn/aad-graphapi-flask-demo -https://github.com/msopentechcn/aad-graphapi-flask-demo -Entry file: aad-graphapi-flask-demo/app.py -Scanned: 2016-10-19 10:32:17.879166 -No vulnerabilities found. - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-19 10:32:18.363411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -menglong81/flaskr -https://github.com/menglong81/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:18.867991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:32:19.369002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kmosho/flaskr -https://github.com/kmosho/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:19.865432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SticksInHand/flaskr -https://github.com/SticksInHand/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:20.375619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jayShepard/Flasky -https://github.com/jayShepard/Flasky -Entry file: Flasky/Vagrant/hello.py -Scanned: 2016-10-19 10:32:21.650942 -No vulnerabilities found. - - -vineethtw/flaskexamples -https://github.com/vineethtw/flaskexamples -Entry file: flaskexamples/api/simulation.py -Scanned: 2016-10-19 10:32:22.909485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Duncodes/flasky -https://github.com/Duncodes/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:32:23.404531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -diegogslomp/flaskr -https://github.com/diegogslomp/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:24.398436 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:32:25.890043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playgrdstar/flasktaskr -https://github.com/playgrdstar/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:32:27.425206 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -toricor/flaskr -https://github.com/toricor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:27.926071 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Lazyppl/Flaskblog -https://github.com/Lazyppl/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-19 10:32:29.190943 -No vulnerabilities found. - - -zeratullich/flaskr -https://github.com/zeratullich/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:32:34.704558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:32:42.217353 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arose13/HerokuCondaScipyFlaskApp -https://github.com/arose13/HerokuCondaScipyFlaskApp -Entry file: HerokuCondaScipyFlaskApp/Web/app.py -Scanned: 2016-10-19 10:32:44.621184 -No vulnerabilities found. - - -awind/FlaskRestful -https://github.com/awind/FlaskRestful -Entry file: FlaskRestful/app/__init__.py -Scanned: 2016-10-19 10:32:46.003141 -Vulnerability 1: -File: FlaskRestful/app/apis.py - > User input at line 48, trigger word "get(": - user = User.query.get(userid) -File: FlaskRestful/app/apis.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = user_schema.jsonify(user) - - - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-19 10:32:54.645383 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-19 10:33:04.970525 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-19 10:33:05.837301 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aetherwu/FlaskDocker -https://github.com/aetherwu/FlaskDocker -Entry file: FlaskDocker/app/app.py -Scanned: 2016-10-19 10:33:07.096562 -No vulnerabilities found. - - -anniee/flask-intro -https://github.com/anniee/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:33:07.602199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -angeloski/flask-sandbox -https://github.com/angeloski/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 10:33:08.116096 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonnybazookatone/flask-watchman -https://github.com/jonnybazookatone/flask-watchman -Entry file: None -Scanned: 2016-10-19 10:33:09.401896 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jonnybazookatone/flask-watchman. - -dritux/flask-spark -https://github.com/dritux/flask-spark -Entry file: flask-spark/spark/__init__.py -Scanned: 2016-10-19 10:33:10.672387 -No vulnerabilities found. - - -arvind-iyer/flask-101 -https://github.com/arvind-iyer/flask-101 -Entry file: flask-101/app/__init__.py -Scanned: 2016-10-19 10:33:11.993022 -No vulnerabilities found. - - -vbalien/flask-skeleton -https://github.com/vbalien/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:33:13.512126 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vbalien/flask-skeleton. - -robbintt/flask-template -https://github.com/robbintt/flask-template -Entry file: None -Scanned: 2016-10-19 10:33:17.023403 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/robbintt/flask-template. - -Lucky0604/flask-blog -https://github.com/Lucky0604/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:33:18.562868 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -felipemfp/flask-microblog -https://github.com/felipemfp/flask-microblog -Entry file: None -Scanned: 2016-10-19 10:33:20.060390 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bronka/flask-blog -https://github.com/bronka/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:33:20.596072 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -genagain/learning-flask -https://github.com/genagain/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 10:33:22.139811 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -acknowledge/flask-api -https://github.com/acknowledge/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 10:33:24.167192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunQian-Andy/flask_mail -https://github.com/JunQian-Andy/flask_mail -Entry file: flask_mail/app/__init__.py -Scanned: 2016-10-19 10:33:25.475188 -No vulnerabilities found. - - -fabricekwizera/flask_intro -https://github.com/fabricekwizera/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-19 10:33:26.821652 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -relman/flask-srv -https://github.com/relman/flask-srv -Entry file: flask-srv/service.py -Scanned: 2016-10-19 10:33:28.316151 -No vulnerabilities found. - - -volgoweb/flask_api -https://github.com/volgoweb/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 10:33:28.841944 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leiyue/tutorial_flask -https://github.com/leiyue/tutorial_flask -Entry file: tutorial_flask/base/app.py -Scanned: 2016-10-19 10:33:30.410835 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-19 10:33:33.331105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samgclarke/flask-starter -https://github.com/samgclarke/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 10:33:35.850814 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hbldh/flask-pybankid -https://github.com/hbldh/flask-pybankid -Entry file: flask-pybankid/flask_pybankid.py -Scanned: 2016-10-19 10:33:44.357520 -No vulnerabilities found. - - -krlex/flask-resume -https://github.com/krlex/flask-resume -Entry file: flask-resume/manage.py -Scanned: 2016-10-19 10:33:45.766042 -No vulnerabilities found. - - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-19 10:33:47.106882 -No vulnerabilities found. - - -dfitzgerald3/sg_flask -https://github.com/dfitzgerald3/sg_flask -Entry file: sg_flask/__init__.py -Scanned: 2016-10-19 10:34:08.356772 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: sg_flask/venv/lib/python2.7/genericpath.py - -Tmingh/learn_flask -https://github.com/Tmingh/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 10:34:08.860192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qiuhaoling/my_flask -https://github.com/qiuhaoling/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-19 10:34:09.510300 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -ahsanwtc/flask-project -https://github.com/ahsanwtc/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-19 10:34:22.387505 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -chadelder/flask-blog -https://github.com/chadelder/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:34:22.954863 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rdrsh/flask-hello -https://github.com/rdrsh/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 10:34:23.473469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Forumouth/flask-simple -https://github.com/Forumouth/flask-simple -Entry file: flask-simple/tests/data/testapp.py -Scanned: 2016-10-19 10:34:24.901681 -No vulnerabilities found. - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-19 10:34:26.289224 -No vulnerabilities found. - - -playgrdstar/flask-blog -https://github.com/playgrdstar/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:34:26.864462 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rx3bp/flask-freeze -https://github.com/rx3bp/flask-freeze -Entry file: flask-freeze/app.py -Scanned: 2016-10-19 10:34:28.730233 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-19 10:34:31.007569 -No vulnerabilities found. - - -NaoYamaguchi/flask_login -https://github.com/NaoYamaguchi/flask_login -Entry file: None -Scanned: 2016-10-19 10:34:31.533023 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NaoYamaguchi/flask_login. - -njnr/onece -https://github.com/njnr/onece -Entry file: onece/app/__init__.py -Scanned: 2016-10-19 10:34:33.508644 -No vulnerabilities found. - - -rmaheshkumarblr/FlaskTestingApp -https://github.com/rmaheshkumarblr/FlaskTestingApp -Entry file: FlaskTestingApp/testingFlaskScript.py -Scanned: 2016-10-19 10:34:38.814447 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-19 10:34:40.102548 -No vulnerabilities found. - - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-19 10:34:43.224209 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/genericpath.py - -joyzhaoyang/FlaskDirectUploader -https://github.com/joyzhaoyang/FlaskDirectUploader -Entry file: FlaskDirectUploader/application.py -Scanned: 2016-10-19 10:34:44.820734 -No vulnerabilities found. - - -astianseb/flask-simple-distributed-applicaiton -https://github.com/astianseb/flask-simple-distributed-applicaiton -Entry file: flask-simple-distributed-applicaiton/Flasktest/__init__.py -Scanned: 2016-10-19 10:34:46.083652 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-19 10:34:47.307240 -No vulnerabilities found. - - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-19 10:34:48.634548 -No vulnerabilities found. - - -mhgit1/PythonFlask_oma -https://github.com/mhgit1/PythonFlask_oma -Entry file: PythonFlask_oma/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 10:34:59.851560 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -IvanBodnar/fromzero_flask_blog -https://github.com/IvanBodnar/fromzero_flask_blog -Entry file: fromzero_flask_blog/__init__.py -Scanned: 2016-10-19 10:35:01.343767 -Vulnerability 1: -File: fromzero_flask_blog/author/views.py - > User input at line 27, trigger word "get(": - next = session.get('next') -Reassigned in: - File: fromzero_flask_blog/author/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: fromzero_flask_blog/author/views.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: fromzero_flask_blog/author/views.py - > reaches line 29, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -alexarnautu/simple-flask-blog -https://github.com/alexarnautu/simple-flask-blog -Entry file: simple-flask-blog/blog.py -Scanned: 2016-10-19 10:35:02.964297 -No vulnerabilities found. - - -apiarian/RPi-GPIO-flask -https://github.com/apiarian/RPi-GPIO-flask -Entry file: RPi-GPIO-flask/server.py -Scanned: 2016-10-19 10:35:04.263543 -No vulnerabilities found. - - -tomov/flask-heroku-backend -https://github.com/tomov/flask-heroku-backend -Entry file: flask-heroku-backend/app/__init__.py -Scanned: 2016-10-19 10:35:05.498132 -No vulnerabilities found. - - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-19 10:35:06.892232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akaak/flask-mega-tutorial -https://github.com/akaak/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 10:35:07.408649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thechad12/Flask-Item-Catalog -https://github.com/thechad12/Flask-Item-Catalog -Entry file: Flask-Item-Catalog/application.py -Scanned: 2016-10-19 10:35:09.225765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -javicacheiro/rest_api_flask -https://github.com/javicacheiro/rest_api_flask -Entry file: rest_api_flask/rest/app/__init__.py -Scanned: 2016-10-19 10:35:10.955168 -No vulnerabilities found. - - -florenceloi/flask-intro-redo -https://github.com/florenceloi/flask-intro-redo -Entry file: flask-intro-redo/nice.py -Scanned: 2016-10-19 10:35:12.664083 -No vulnerabilities found. - - -eric-boone/python-flask-round1 -https://github.com/eric-boone/python-flask-round1 -Entry file: python-flask-round1/app/__init__.py -Scanned: 2016-10-19 10:35:13.915308 -No vulnerabilities found. - - -playgrdstar/flask-hello-world -https://github.com/playgrdstar/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:35:24.955629 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -iceskel/flask-restful-api -https://github.com/iceskel/flask-restful-api -Entry file: flask-restful-api/restful/api.py -Scanned: 2016-10-19 10:35:25.464550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apiaas/gae-flask-base -https://github.com/apiaas/gae-flask-base -Entry file: gae-flask-base/src/main.py -Scanned: 2016-10-19 10:35:29.323491 -No vulnerabilities found. - - -ddrsmile/flask-taskr-with-blueprint -https://github.com/ddrsmile/flask-taskr-with-blueprint -Entry file: flask-taskr-with-blueprint/project/__init__.py -Scanned: 2016-10-19 10:35:31.226101 -No vulnerabilities found. - - -austinbrovick/flask-book_review_website -https://github.com/austinbrovick/flask-book_review_website -Entry file: flask-book_review_website/app/models/User.py -Scanned: 2016-10-19 10:35:33.066268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarvazquez/flask_mysql_migrations -https://github.com/oscarvazquez/flask_mysql_migrations -Entry file: None -Scanned: 2016-10-19 10:35:37.727233 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bethesdamd/python_flask_pharma -https://github.com/bethesdamd/python_flask_pharma -Entry file: python_flask_pharma/app.py -Scanned: 2016-10-19 10:35:39.599625 -No vulnerabilities found. - - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:35:41.897706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:35:45.180806 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ccapudev/flask -https://github.com/ccapudev/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:35:46.245435 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -hezx/flask -https://github.com/hezx/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:35:47.325882 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -its-dirg/Flask-pyoidc -https://github.com/its-dirg/Flask-pyoidc -Entry file: Flask-pyoidc/tests/test_flask_pyoidc.py -Scanned: 2016-10-19 10:35:48.723559 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:35:49.241852 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -karanj112294/flasktutorial -https://github.com/karanj112294/flasktutorial -Entry file: None -Scanned: 2016-10-19 10:35:50.745232 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:36:02.255675 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jocelynaladin/flaskworkspace -https://github.com/jocelynaladin/flaskworkspace -Entry file: flaskworkspace/__init__.py -Scanned: 2016-10-19 10:36:06.817384 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KDmytro/flasktaskr -https://github.com/KDmytro/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:36:07.336624 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dreamtiger2016/flaskr -https://github.com/dreamtiger2016/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:36:07.829060 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davetromp/flasksqlapi -https://github.com/davetromp/flasksqlapi -Entry file: flasksqlapi/runapi.py -Scanned: 2016-10-19 10:36:09.305214 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:36:09.801625 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:36:10.290980 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -psykos/flaskloginskeleton -https://github.com/psykos/flaskloginskeleton -Entry file: flaskloginskeleton/app/__init__.py -Scanned: 2016-10-19 10:36:11.544225 -No vulnerabilities found. - - -AndrewGoldstein/flaskapp -https://github.com/AndrewGoldstein/flaskapp -Entry file: None -Scanned: 2016-10-19 10:36:12.062752 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewGoldstein/flaskapp. - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-19 10:36:14.908944 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nescode/punchstarter -https://github.com/nescode/punchstarter -Entry file: punchstarter/punchstarter/__init__.py -Scanned: 2016-10-19 10:36:16.297120 -No vulnerabilities found. - - -edwardszczepanski/FlaskApplication -https://github.com/edwardszczepanski/FlaskApplication -Entry file: FlaskApplication/app.py -Scanned: 2016-10-19 10:36:19.412445 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskApplication/venv/lib/python2.7/genericpath.py - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-19 10:36:26.983642 -Vulnerability 1: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-19 10:36:28.218955 -No vulnerabilities found. - - -chrismontone/flasktaskr2 -https://github.com/chrismontone/flasktaskr2 -Entry file: flasktaskr2/project/__init__.py -Scanned: 2016-10-19 10:36:29.913851 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-19 10:36:30.658551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -musicalfish/FlaskApp -https://github.com/musicalfish/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 10:36:31.254573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarmeanwell/FlaskMusic -https://github.com/oscarmeanwell/FlaskMusic -Entry file: FlaskMusic/app/routesun.py -Scanned: 2016-10-19 10:36:34.435965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TwilioDevEd/eta-notifications-flask -https://github.com/TwilioDevEd/eta-notifications-flask -Entry file: eta-notifications-flask/eta_notifications_flask/__init__.py -Scanned: 2016-10-19 10:36:38.843810 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-19 10:36:40.201330 -No vulnerabilities found. - - -pedrocarvalhodev/flask-intro -https://github.com/pedrocarvalhodev/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:36:40.714118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lawrencexia/flask_notecards -https://github.com/lawrencexia/flask_notecards -Entry file: flask_notecards/app/__init__.py -Scanned: 2016-10-19 10:36:41.962259 -No vulnerabilities found. - - -drmalex07/flask-helloworld -https://github.com/drmalex07/flask-helloworld -Entry file: flask-helloworld/helloworld/app.py -Scanned: 2016-10-19 10:36:43.469869 -No vulnerabilities found. - - -ameya0909/Flask-Blog -https://github.com/ameya0909/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-19 10:36:43.991280 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Oracleli/flask-try -https://github.com/Oracleli/flask-try -Entry file: None -Scanned: 2016-10-19 10:36:46.803837 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Oracleli/flask-try. - -QsBBQ/flask_test -https://github.com/QsBBQ/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 10:36:47.421854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ziggear/wechat-flask -https://github.com/ziggear/wechat-flask -Entry file: wechat-flask/src/myapp.py -Scanned: 2016-10-19 10:36:48.765054 -No vulnerabilities found. - - -chrismontone/flask-blog -https://github.com/chrismontone/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:36:49.313664 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-19 10:36:51.688977 -No vulnerabilities found. - - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/test_tokenauth.py -Scanned: 2016-10-19 10:36:52.992963 -No vulnerabilities found. - - -marcosomma/first_flask -https://github.com/marcosomma/first_flask -Entry file: first_flask/app/__init__.py -Scanned: 2016-10-19 10:37:09.374897 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-19 10:37:10.047580 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -meyersj/bootstrap-flask -https://github.com/meyersj/bootstrap-flask -Entry file: bootstrap-flask/app/__init__.py -Scanned: 2016-10-19 10:37:11.279276 -No vulnerabilities found. - - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-19 10:37:12.255256 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jarogers095/flask-blog -https://github.com/jarogers095/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:37:12.778686 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Jelly-Yu/learningFlask -https://github.com/Jelly-Yu/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-19 10:37:13.424105 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -ratherbsurfing/flask-cms -https://github.com/ratherbsurfing/flask-cms -Entry file: flask-cms/flaskCMS/flaskCMS/__init__.py -Scanned: 2016-10-19 10:37:18.310738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -philtrep/Flask-Skeleton -https://github.com/philtrep/Flask-Skeleton -Entry file: None -Scanned: 2016-10-19 10:37:20.053398 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/philtrep/Flask-Skeleton. - -cynrick/kickstarter-flask -https://github.com/cynrick/kickstarter-flask -Entry file: kickstarter-flask/kickstarter/__init__.py -Scanned: 2016-10-19 10:37:21.464389 -No vulnerabilities found. - - -kessiacastro/flask-blog -https://github.com/kessiacastro/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:37:27.000632 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-19 10:37:29.297738 -No vulnerabilities found. - - -rjturek/flask-etf -https://github.com/rjturek/flask-etf -Entry file: flask-etf/flask_etf_main.py -Scanned: 2016-10-19 10:37:31.317560 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-19 10:37:33.159750 -No vulnerabilities found. - - -axontrust/alexa-flask -https://github.com/axontrust/alexa-flask -Entry file: alexa-flask/app/__init__.py -Scanned: 2016-10-19 10:37:34.574388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asjedh/flask_tutorial -https://github.com/asjedh/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:37:35.099237 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -robb216/MyFlask -https://github.com/robb216/MyFlask -Entry file: MyFlask/MyFlask.py -Scanned: 2016-10-19 10:37:37.504318 -No vulnerabilities found. - - -rogerpence/flask-blueprint -https://github.com/rogerpence/flask-blueprint -Entry file: flask-blueprint/application/__init__.py -Scanned: 2016-10-19 10:37:41.884221 -No vulnerabilities found. - - -androidzhibinw/flask-bootstrap -https://github.com/androidzhibinw/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-19 10:37:43.496444 -No vulnerabilities found. - - -ytanno/PlotFlask -https://github.com/ytanno/PlotFlask -Entry file: PlotFlask/FlaskTest1/FlaskTest1/__init__.py -Scanned: 2016-10-19 10:37:47.491401 -No vulnerabilities found. - - -psykos/psilex-flask -https://github.com/psykos/psilex-flask -Entry file: psilex-flask/app/__init__.py -Scanned: 2016-10-19 10:37:48.976105 -No vulnerabilities found. - - -Hank02/flask_example -https://github.com/Hank02/flask_example -Entry file: None -Scanned: 2016-10-19 10:37:49.503360 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -VerdigrisReader/flask-workshop -https://github.com/VerdigrisReader/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-19 10:37:50.012662 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:37:50.523334 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rogerpence/flask-skeleton. - -rodcox89/FlaskDynamoStarterKit -https://github.com/rodcox89/FlaskDynamoStarterKit -Entry file: FlaskDynamoStarterKit/main.py -Scanned: 2016-10-19 10:37:54.780630 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskDynamoStarterKit/venv/lib/python2.7/genericpath.py - -pulysak/FlaskServer-Tests -https://github.com/pulysak/FlaskServer-Tests -Entry file: FlaskServer-Tests/server.py -Scanned: 2016-10-19 10:37:59.017357 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskServer-Tests/flask_env/lib/python2.7/genericpath.py - -rbtoner/FlaskWebApp -https://github.com/rbtoner/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-19 10:38:01.233324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-19 10:38:05.337851 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/genericpath.py - -MGago/flaskBasicApp1 -https://github.com/MGago/flaskBasicApp1 -Entry file: None -Scanned: 2016-10-19 10:38:11.358242 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-19 10:38:11.858761 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skpdvidby0/Flask-Python-App -https://github.com/skpdvidby0/Flask-Python-App -Entry file: Flask-Python-App/flaskapp.py -Scanned: 2016-10-19 10:38:14.827656 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Python-App/virtenv/lib/python2.7/genericpath.py - -mbreisch/real-python-flask-bdd -https://github.com/mbreisch/real-python-flask-bdd -Entry file: real-python-flask-bdd/flaskr.py -Scanned: 2016-10-19 10:38:16.093248 -No vulnerabilities found. - - -sindhus/flask-mega-tutorial -https://github.com/sindhus/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 10:38:17.580695 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PiyushGoyal443/studentLogin_API_Flask -https://github.com/PiyushGoyal443/studentLogin_API_Flask -Entry file: studentLogin_API_Flask/server.py -Scanned: 2016-10-19 10:38:19.083281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GertjanvanhetHof/helloworld_with_flask -https://github.com/GertjanvanhetHof/helloworld_with_flask -Entry file: helloworld_with_flask/mypython.py -Scanned: 2016-10-19 10:38:20.351604 -No vulnerabilities found. - - -taromurao/flask-python-logger-experiment -https://github.com/taromurao/flask-python-logger-experiment -Entry file: flask-python-logger-experiment/app.py -Scanned: 2016-10-19 10:38:21.589279 -No vulnerabilities found. - - -mikicaivosevic/flask-simple-todo -https://github.com/mikicaivosevic/flask-simple-todo -Entry file: flask-simple-todo/app.py -Scanned: 2016-10-19 10:38:22.843379 -No vulnerabilities found. - - -KDmytro/flask-hello-world -https://github.com/KDmytro/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:38:28.421803 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -bepetersn/flask-permissions-ex -https://github.com/bepetersn/flask-permissions-ex -Entry file: flask-permissions-ex/ex/__init__.py -Scanned: 2016-10-19 10:38:33.138552 -No vulnerabilities found. - - -EricSchles/db_migrations_flask -https://github.com/EricSchles/db_migrations_flask -Entry file: db_migrations_flask/app/__init__.py -Scanned: 2016-10-19 10:38:35.906191 -No vulnerabilities found. - - -yyssjj33/flask-menu-application -https://github.com/yyssjj33/flask-menu-application -Entry file: flask-menu-application/project.py -Scanned: 2016-10-19 10:38:37.306616 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kessiacastro/flask-hello-world -https://github.com/kessiacastro/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:38:37.844826 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -androidzhibinw/flask-app-builder-example -https://github.com/androidzhibinw/flask-app-builder-example -Entry file: flask-app-builder-example/myapp/app/__init__.py -Scanned: 2016-10-19 10:38:43.106805 -No vulnerabilities found. - - -tim1978/flask-hello-world -https://github.com/tim1978/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:38:43.657999 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -jmcevoy1984/Flask-Restful-Tutorial -https://github.com/jmcevoy1984/Flask-Restful-Tutorial -Entry file: Flask-Restful-Tutorial/app.py -Scanned: 2016-10-19 10:38:45.918736 -No vulnerabilities found. - - -jigen7/python_flask_tutorial -https://github.com/jigen7/python_flask_tutorial -Entry file: python_flask_tutorial/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-19 10:39:04.411893 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -danieltl/python_flask_final -https://github.com/danieltl/python_flask_final -Entry file: python_flask_final/application.py -Scanned: 2016-10-19 10:39:06.216699 -No vulnerabilities found. - - -devizier/flask-hello-world -https://github.com/devizier/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:39:06.822200 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -tomov/flask-location-survey-psych -https://github.com/tomov/flask-location-survey-psych -Entry file: flask-location-survey-psych/app/__init__.py -Scanned: 2016-10-19 10:39:08.250813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rakou1986/flask-mvt-min -https://github.com/rakou1986/flask-mvt-min -Entry file: flask-mvt-min/webapp/app.py -Scanned: 2016-10-19 10:39:09.536731 -No vulnerabilities found. - - -mbreisch/real-python-reverse-flask -https://github.com/mbreisch/real-python-reverse-flask -Entry file: None -Scanned: 2016-10-19 10:39:10.806591 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mbreisch/real-python-reverse-flask. - -jeet4320/PythonFlask-IBMBluemix -https://github.com/jeet4320/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-19 10:39:15.230365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -junniepat/Python-flask-app -https://github.com/junniepat/Python-flask-app -Entry file: Python-flask-app/app.py -Scanned: 2016-10-19 10:39:16.476913 -No vulnerabilities found. - - -Kwpolska/flask-demo-app -https://github.com/Kwpolska/flask-demo-app -Entry file: flask-demo-app/flaskapp.py -Scanned: 2016-10-19 10:39:17.828586 -No vulnerabilities found. - - -tiangolo/uwsgi-nginx-flask-docker -https://github.com/tiangolo/uwsgi-nginx-flask-docker -Entry file: uwsgi-nginx-flask-docker/example-flask-python3.5-upload/app/main.py -Scanned: 2016-10-19 10:39:20.894716 -No vulnerabilities found. - - -bobdorff/flask -https://github.com/bobdorff/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:39:22.296807 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -chrisvasey/flask -https://github.com/chrisvasey/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:39:25.368778 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -wildjan/Flask -https://github.com/wildjan/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:39:25.992032 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smltc/Flask -https://github.com/smltc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:39:26.490709 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:39:27.529798 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -mikelkl/flasky -https://github.com/mikelkl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:39:28.029052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -besimaltnok/Flask-Examples -https://github.com/besimaltnok/Flask-Examples -Entry file: Flask-Examples/helloworld.py -Scanned: 2016-10-19 10:39:31.593644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luo-jialin/flask- -https://github.com/luo-jialin/flask- -Entry file: flask-/flaskr.py -Scanned: 2016-10-19 10:39:33.334022 -No vulnerabilities found. - - -ubbochum/hb2_flask -https://github.com/ubbochum/hb2_flask -Entry file: hb2_flask/hb2_flask.py -Scanned: 2016-10-19 10:39:37.075337 -Vulnerability 1: -File: hb2_flask/hb2_flask.py - > User input at line 742, trigger word "get(": - bio = requests.get('https://pub.orcid.org/%s/orcid-bio/' % orcid_id,headers='Accept''application/json').json() -File: hb2_flask/hb2_flask.py - > reaches line 744, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''%s, %s' % (bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('family-name').get('value'), bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('given-names').get('value'))) - -Vulnerability 2: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1141: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), action='create', pubtype=pubtype) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1160: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), pubtype=pubtype, action='create', record_id=form.id.data) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1110, trigger word "replace(": - solr_data.setdefault('recordCreationDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 3: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1141: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), action='create', pubtype=pubtype) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1160: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), pubtype=pubtype, action='create', record_id=form.id.data) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1112, trigger word "replace(": - solr_data.setdefault('recordChangeDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 4: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1310: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1321: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 5: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1310: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1321: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 6: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1310: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1321: ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 7: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1493: target = url_for(endpoint,values) -File: hb2_flask/hb2_flask.py - > reaches line 1494, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target) - -Vulnerability 8: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 9: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 10: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 11: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 12: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 13: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 14: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 15: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1573: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 16: -File: hb2_flask/hb2_flask.py - > User input at line 1652, trigger word "get(": - thedata = json.loads(import_solr.results[0].get('dump')[0]) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1656: thedata = json.loads(form.file.data.stream.read()) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 17: -File: hb2_flask/hb2_flask.py - > User input at line 1656, trigger word ".data": - thedata = json.loads(form.file.data.stream.read()) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1652: thedata = json.loads(import_solr.results[0].get('dump')[0]) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - - - -Vertabelo/flask-oauth-demo-app -https://github.com/Vertabelo/flask-oauth-demo-app -Entry file: flask-oauth-demo-app/models.py -Scanned: 2016-10-19 10:39:39.131767 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -waharnum/inlibraries.com -https://github.com/waharnum/inlibraries.com -Entry file: None -Scanned: 2016-10-19 10:39:41.352526 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/waharnum/inlibraries.com. - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-19 10:39:42.619773 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-19 10:39:46.405922 -No vulnerabilities found. - - -hammygoonan/Flaskify -https://github.com/hammygoonan/Flaskify -Entry file: Flaskify/project/__init__.py -Scanned: 2016-10-19 10:39:47.902973 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anujspatel/flaskr -https://github.com/anujspatel/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:39:51.445933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -williamcaban/flaskrcloud -https://github.com/williamcaban/flaskrcloud -Entry file: flaskrcloud/flaskr.py -Scanned: 2016-10-19 10:40:06.835205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crazyqipython/flaskdemo -https://github.com/crazyqipython/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 10:40:07.338518 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pythondude325/flaskr -https://github.com/pythondude325/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:40:07.853475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fenske/flasky -https://github.com/fenske/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:40:08.345906 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fakegit/flasky -https://github.com/fakegit/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:40:09.849293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Anddor/flaskr -https://github.com/Anddor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:40:17.326426 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jarogers095/flasktaskr -https://github.com/jarogers095/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:40:18.846992 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:40:19.337033 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johnpwillman/flasktest -https://github.com/johnpwillman/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 10:40:21.863685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: Flasky/Projects/Flasky/app/__init__.py -Scanned: 2016-10-19 10:40:24.252049 -No vulnerabilities found. - - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-19 10:40:24.753383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-19 10:40:25.986699 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-19 10:40:28.502113 -Vulnerability 1: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jmcerv/FlaskTutorial -https://github.com/jmcerv/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 10:40:29.030763 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LaRueGT/FlaskBlog -https://github.com/LaRueGT/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:40:29.672818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhou18520786640/FlaskWeb -https://github.com/zhou18520786640/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-19 10:40:35.174430 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -ethanphunter/FlaskExperiment -https://github.com/ethanphunter/FlaskExperiment -Entry file: FlaskExperiment/main.py -Scanned: 2016-10-19 10:40:36.763424 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -asimonia/FlaskJeopardy -https://github.com/asimonia/FlaskJeopardy -Entry file: FlaskJeopardy/app/__init__.py -Scanned: 2016-10-19 10:40:43.784932 -No vulnerabilities found. - - -motleytech/flaskPlate -https://github.com/motleytech/flaskPlate -Entry file: flaskPlate/app/app.py -Scanned: 2016-10-19 10:40:45.541794 -No vulnerabilities found. - - -ciricihq/wkhtmltopdf-flask-aas -https://github.com/ciricihq/wkhtmltopdf-flask-aas -Entry file: wkhtmltopdf-flask-aas/app.py -Scanned: 2016-10-19 10:40:47.052879 -No vulnerabilities found. - - -cr8ivecodesmith/save22-flask-course-src -https://github.com/cr8ivecodesmith/save22-flask-course-src -Entry file: save22-flask-course-src/01-hello/app2_1.py -Scanned: 2016-10-19 10:40:48.505860 -No vulnerabilities found. - - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-19 10:40:49.766407 -No vulnerabilities found. - - -swkaen/Flask_LED -https://github.com/swkaen/Flask_LED -Entry file: Flask_LED/hello.py -Scanned: 2016-10-19 10:40:51.024931 -No vulnerabilities found. - - -johnsliao/flask-bp -https://github.com/johnsliao/flask-bp -Entry file: flask-bp/flaskApp.py -Scanned: 2016-10-19 10:40:52.391028 -No vulnerabilities found. - - -MaximeGir/flask_skeleton -https://github.com/MaximeGir/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 10:40:52.894501 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -devmtnaing/python_flask -https://github.com/devmtnaing/python_flask -Entry file: None -Scanned: 2016-10-19 10:40:53.388402 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/devmtnaing/python_flask. - -josepablob/flask-blog -https://github.com/josepablob/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:40:54.007647 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -faraday-effect/spectacle-flask -https://github.com/faraday-effect/spectacle-flask -Entry file: spectacle-flask/app/__init__.py -Scanned: 2016-10-19 10:40:55.402375 -No vulnerabilities found. - - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-19 10:41:08.764989 -No vulnerabilities found. - - -raticate/flask-tutorial -https://github.com/raticate/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:41:09.271137 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cnds/flask_web -https://github.com/cnds/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-19 10:41:09.851229 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/test_tokenauth.py -Scanned: 2016-10-19 10:41:11.091285 -No vulnerabilities found. - - -jgoret/flask-dataset -https://github.com/jgoret/flask-dataset -Entry file: flask-dataset/flask_dataset/__init__.py -Scanned: 2016-10-19 10:41:12.783118 -No vulnerabilities found. - - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 10:41:13.373220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjamin/flask-guide -https://github.com/danjamin/flask-guide -Entry file: flask-guide/app/server.py -Scanned: 2016-10-19 10:41:14.587824 -No vulnerabilities found. - - -stevejgoodman/flask-app -https://github.com/stevejgoodman/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 10:41:19.099066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devizier/flask-blog -https://github.com/devizier/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:41:20.621926 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rafaelgotts/flask_rest -https://github.com/rafaelgotts/flask_rest -Entry file: flask_rest/flask_rest/app.py -Scanned: 2016-10-19 10:41:21.930594 -No vulnerabilities found. - - -Orlandohub/flask-tutorial -https://github.com/Orlandohub/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:41:23.426799 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -python-0/flask_blog -https://github.com/python-0/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:41:24.931128 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bdero/flask-sleep -https://github.com/bdero/flask-sleep -Entry file: flask-sleep/flasksleep.py -Scanned: 2016-10-19 10:41:27.156751 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-19 10:41:27.795088 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -IvanBodnar/flask_relevamientos -https://github.com/IvanBodnar/flask_relevamientos -Entry file: flask_relevamientos/app.py -Scanned: 2016-10-19 10:41:30.590913 -No vulnerabilities found. - - -ravivooda/flask-server -https://github.com/ravivooda/flask-server -Entry file: None -Scanned: 2016-10-19 10:41:32.668664 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ravivooda/flask-server. - -wipatrick/flask-restapi -https://github.com/wipatrick/flask-restapi -Entry file: flask-restapi/api.py -Scanned: 2016-10-19 10:41:33.996874 -No vulnerabilities found. - - -yogeshralhan/flask_1 -https://github.com/yogeshralhan/flask_1 -Entry file: flask_1/2.py -Scanned: 2016-10-19 10:41:37.822599 -No vulnerabilities found. - - -YeWang0/Flask_Blog -https://github.com/YeWang0/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-19 10:41:38.784316 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -windery/flask-blog -https://github.com/windery/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:41:46.331529 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -chuan137/flask_bess -https://github.com/chuan137/flask_bess -Entry file: flask_bess/main.py -Scanned: 2016-10-19 10:41:50.370658 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kgandhi37/flask_blog -https://github.com/kgandhi37/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:41:50.936745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krol3/python-flask -https://github.com/krol3/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 10:41:51.439467 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramhiser/flask-docker -https://github.com/ramhiser/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-19 10:41:53.657674 -No vulnerabilities found. - - -ialamin/flask_hello -https://github.com/ialamin/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 10:41:56.517937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vasiliy-tech/flask_httpserver -https://github.com/Vasiliy-tech/flask_httpserver -Entry file: flask_httpserver/simple_http.py -Scanned: 2016-10-19 10:41:58.253639 -No vulnerabilities found. - - -jyameo/Flask-Blog -https://github.com/jyameo/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-19 10:41:58.781267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-19 10:42:10.057896 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-19 10:42:11.320679 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-19 10:42:12.729933 -No vulnerabilities found. - - -timotk/flask-login -https://github.com/timotk/flask-login -Entry file: flask-login/app/__init__.py -Scanned: 2016-10-19 10:42:13.992862 -No vulnerabilities found. - - -johnsliao/flask-toy -https://github.com/johnsliao/flask-toy -Entry file: flask-toy/flaskr/flaskr.py -Scanned: 2016-10-19 10:42:15.343768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jan26th/flask_test -https://github.com/jan26th/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 10:42:15.923295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dawran6/flask-blog -https://github.com/dawran6/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:42:16.446527 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -msapkota/Flask_Blog -https://github.com/msapkota/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-19 10:42:21.414059 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wish007/MyFlask -https://github.com/wish007/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-19 10:42:22.784413 -No vulnerabilities found. - - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:42:23.302209 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rogerpence/flask-skeleton. - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-19 10:42:26.064855 -No vulnerabilities found. - - -zachbpd/microblog -https://github.com/zachbpd/microblog -Entry file: None -Scanned: 2016-10-19 10:42:26.607263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josepablob/flask-hello-world -https://github.com/josepablob/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:42:28.166991 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ipsha21/My-flask-application -https://github.com/ipsha21/My-flask-application -Entry file: My-flask-application/app.py -Scanned: 2016-10-19 10:42:29.465198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tribe216/microblog -https://github.com/Tribe216/microblog -Entry file: None -Scanned: 2016-10-19 10:42:30.967672 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: FlaskWebProject2/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-19 10:42:34.907916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laaroussiBadr/FlaskWebProject -https://github.com/laaroussiBadr/FlaskWebProject -Entry file: FlaskWebProject/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-19 10:42:36.648229 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mad1331/FlaskMessageBoard -https://github.com/Mad1331/FlaskMessageBoard -Entry file: FlaskMessageBoard/server.py -Scanned: 2016-10-19 10:42:39.553055 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sasha-ruby/flask2spark -https://github.com/sasha-ruby/flask2spark -Entry file: flask2spark/flask2spark.py -Scanned: 2016-10-19 10:42:40.874929 -No vulnerabilities found. - - -rakeshhegishte/Flask -https://github.com/rakeshhegishte/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:42:48.832142 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -damionlowers/flask -https://github.com/damionlowers/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:42:53.353794 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -smltc/Flask -https://github.com/smltc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:42:53.864755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -embasa/FLASK -https://github.com/embasa/FLASK -Entry file: FLASK/app.py -Scanned: 2016-10-19 10:42:55.165100 -No vulnerabilities found. - - -RayneHwang/Flask -https://github.com/RayneHwang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:42:55.670378 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RoseOu/flasky -https://github.com/RoseOu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:42:56.195941 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -materialsvirtuallab/flamyngo -https://github.com/materialsvirtuallab/flamyngo -Entry file: flamyngo/flamyngo/app.py -Scanned: 2016-10-19 10:43:00.082792 -No vulnerabilities found. - - -jonafato/Flask-Copilot -https://github.com/jonafato/Flask-Copilot -Entry file: Flask-Copilot/example/app.py -Scanned: 2016-10-19 10:43:01.480413 -No vulnerabilities found. - - -Upflask/Upflask -https://github.com/Upflask/Upflask -Entry file: Upflask/server.py -Scanned: 2016-10-19 10:43:03.079327 -No vulnerabilities found. - - -PrettyPrinted/flask-wtforms -https://github.com/PrettyPrinted/flask-wtforms -Entry file: flask-wtforms/main.py -Scanned: 2016-10-19 10:43:11.391578 -No vulnerabilities found. - - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-19 10:43:12.654874 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-19 10:43:13.967203 -No vulnerabilities found. - - -boydjohnson/flasktwilio -https://github.com/boydjohnson/flasktwilio -Entry file: flasktwilio/app.py -Scanned: 2016-10-19 10:43:15.252429 -No vulnerabilities found. - - -yizhianiu/flasky -https://github.com/yizhianiu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:43:15.774195 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-19 10:43:18.177635 -No vulnerabilities found. - - -wdxfairy/flaskblog -https://github.com/wdxfairy/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 10:43:18.710261 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -Narcissist1/flasktest -https://github.com/Narcissist1/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 10:43:22.223239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msapkota/flasktaskr -https://github.com/msapkota/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:43:23.765609 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -super452/flasky -https://github.com/super452/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:43:25.252056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wish007/flasktest -https://github.com/wish007/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 10:43:26.753100 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wildjan/Flaskr -https://github.com/wildjan/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 10:43:28.268113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pnilan/flaskr -https://github.com/pnilan/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:43:29.822047 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: Flasky/Projects/Flasky/app/__init__.py -Scanned: 2016-10-19 10:43:32.257405 -No vulnerabilities found. - - -cutedogspark/Flask-SocketIO -https://github.com/cutedogspark/Flask-SocketIO -Entry file: None -Scanned: 2016-10-19 10:43:35.772995 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-19 10:43:36.274671 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -VitPN/FlaskRPi -https://github.com/VitPN/FlaskRPi -Entry file: FlaskRPi/go.py -Scanned: 2016-10-19 10:43:37.550128 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EvenYan/FlaskTest -https://github.com/EvenYan/FlaskTest -Entry file: None -Scanned: 2016-10-19 10:43:39.046622 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/EvenYan/FlaskTest. - -jll90/flaskAng -https://github.com/jll90/flaskAng -Entry file: flaskAng/app.py -Scanned: 2016-10-19 10:43:44.332680 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskAng/lib/python2.7/genericpath.py - -edgewood/webfaction-flask0.10-boilerplate -https://github.com/edgewood/webfaction-flask0.10-boilerplate -Entry file: None -Scanned: 2016-10-19 10:43:51.637063 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/edgewood/webfaction-flask0.10-boilerplate. - -garderobin/HelloFlask -https://github.com/garderobin/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 10:43:52.136840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shidante/notes-flask -https://github.com/shidante/notes-flask -Entry file: notes-flask/hello.py -Scanned: 2016-10-19 10:43:56.522270 -No vulnerabilities found. - - -maixianyu/flask_tennis -https://github.com/maixianyu/flask_tennis -Entry file: flask_tennis/app/__init__.py -Scanned: 2016-10-19 10:44:02.809034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saalmerol/cds-flask -https://github.com/saalmerol/cds-flask -Entry file: None -Scanned: 2016-10-19 10:44:07.408192 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -trileg/HelloFlask -https://github.com/trileg/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 10:44:07.899731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -M1lan/flask_helloworld -https://github.com/M1lan/flask_helloworld -Entry file: flask_helloworld/flask_helloworld.py -Scanned: 2016-10-19 10:44:09.148769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codybousc/flask_practice- -https://github.com/codybousc/flask_practice- -Entry file: flask_practice-/app.py -Scanned: 2016-10-19 10:44:12.624597 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_practice-/venv/lib/python2.7/genericpath.py - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-19 10:44:14.058328 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -xpleaf/flask_catalog -https://github.com/xpleaf/flask_catalog -Entry file: flask_catalog/my_app/__init__.py -Scanned: 2016-10-19 10:44:15.875578 -Vulnerability 1: -File: flask_catalog/my_app/catalog/views.py - > User input at line 41, trigger word "get(": - products = [redis.get(k) for k in keys_alive] -File: flask_catalog/my_app/catalog/views.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('products'products) - -Vulnerability 2: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 80: ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 79, trigger word "flash(": - flash('The product %s has been created' % name, 'success') - -Vulnerability 3: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.create_category',id=category.id)) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 97, trigger word "flash(": - flash('The category %s has been created' % name, 'success') - -Vulnerability 4: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 144: products = products.filter(Product.price == price) - File: flask_catalog/my_app/catalog/views.py - > Line 146: products = products.filter(Product.company.like('%' + company + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 148: products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 5: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 146: products = products.filter(Product.company.like('%' + company + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 148: products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query - File: flask_catalog/my_app/catalog/views.py - > Line 142: products = products.filter(Product.name.like('%' + name + '%')) -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 6: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 148: products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query - File: flask_catalog/my_app/catalog/views.py - > Line 142: products = products.filter(Product.name.like('%' + name + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 144: products = products.filter(Product.price == price) -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 7: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query - File: flask_catalog/my_app/catalog/views.py - > Line 142: products = products.filter(Product.name.like('%' + name + '%')) - File: flask_catalog/my_app/catalog/views.py - > Line 144: products = products.filter(Product.price == price) - File: flask_catalog/my_app/catalog/views.py - > Line 146: products = products.filter(Product.company.like('%' + company + '%')) -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - - - -yizhianiu/flask-blog -https://github.com/yizhianiu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:44:16.422220 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -zhuwei05/flask-blog -https://github.com/zhuwei05/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:44:16.967826 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 10:44:17.521414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:44:18.060214 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -junhl/Flask_Test -https://github.com/junhl/Flask_Test -Entry file: None -Scanned: 2016-10-19 10:44:20.499763 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -anupam0601/flask_off -https://github.com/anupam0601/flask_off -Entry file: flask_off/app.py -Scanned: 2016-10-19 10:44:28.650456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdhop/flask_exercises -https://github.com/cdhop/flask_exercises -Entry file: flask_exercises/hello.py -Scanned: 2016-10-19 10:44:29.250938 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_exercises/venv/lib/python2.7/genericpath.py - -AmeetSM/AngularFlask -https://github.com/AmeetSM/AngularFlask -Entry file: AngularFlask/app.py -Scanned: 2016-10-19 10:44:32.264792 -No vulnerabilities found. - - -a358003542/flask-examples -https://github.com/a358003542/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-19 10:44:32.862936 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -slacksec/flask_blog -https://github.com/slacksec/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:44:33.364501 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seabrookmx/flask-demo -https://github.com/seabrookmx/flask-demo -Entry file: None -Scanned: 2016-10-19 10:44:33.881063 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/seabrookmx/flask-demo. - -Desmonddai583/flask-blog -https://github.com/Desmonddai583/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:44:34.393474 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-19 10:44:35.757747 -No vulnerabilities found. - - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 10:44:38.277826 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-19 10:44:39.505755 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-19 10:44:41.760983 -No vulnerabilities found. - - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-19 10:44:42.302954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ykchat/gundam-flask -https://github.com/ykchat/gundam-flask -Entry file: gundam-flask/server.py -Scanned: 2016-10-19 10:44:47.548723 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-19 10:44:51.894194 -No vulnerabilities found. - - -eltonto187/learn_flask -https://github.com/eltonto187/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 10:44:52.406221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:44:53.935621 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -netkicorp/flask-jwe -https://github.com/netkicorp/flask-jwe -Entry file: flask-jwe/server.py -Scanned: 2016-10-19 10:44:58.292464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-19 10:45:00.090989 -No vulnerabilities found. - - -dengshilong/flask_example -https://github.com/dengshilong/flask_example -Entry file: None -Scanned: 2016-10-19 10:45:04.607663 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nathanielcompton/flask-tutorial -https://github.com/nathanielcompton/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:45:09.118802 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 10:45:09.650512 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leon740gk/flask_quick_start -https://github.com/leon740gk/flask_quick_start -Entry file: flask_quick_start/hello.py -Scanned: 2016-10-19 10:45:11.906867 -No vulnerabilities found. - - -dommert/test.dommert.xyz -https://github.com/dommert/test.dommert.xyz -Entry file: None -Scanned: 2016-10-19 10:45:15.272697 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dommert/test.dommert.xyz. - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: FlaskWebProject2/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-19 10:45:15.758480 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -poppuyo/FlaskUrlShortener -https://github.com/poppuyo/FlaskUrlShortener -Entry file: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py -Scanned: 2016-10-19 10:45:19.445554 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -j1wu/wechat-enterprise-bot -https://github.com/j1wu/wechat-enterprise-bot -Entry file: None -Scanned: 2016-10-19 10:45:21.186362 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/j1wu/wechat-enterprise-bot. - -chamambom/flask_sqlalchemy_crud -https://github.com/chamambom/flask_sqlalchemy_crud -Entry file: flask_sqlalchemy_crud/sqlcrud.py -Scanned: 2016-10-19 10:45:22.546400 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pyd-testing/flask-docker-workflow -https://github.com/pyd-testing/flask-docker-workflow -Entry file: flask-docker-workflow/app/app.py -Scanned: 2016-10-19 10:45:23.883893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EsmondMoe/flask-globalcache-http-api -https://github.com/EsmondMoe/flask-globalcache-http-api -Entry file: flask-globalcache-http-api/app.py -Scanned: 2016-10-19 10:45:25.254432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gr8shivam/Flask---Handling-File-Uploads -https://github.com/gr8shivam/Flask---Handling-File-Uploads -Entry file: Flask---Handling-File-Uploads/app/__init__.py -Scanned: 2016-10-19 10:45:32.285907 -No vulnerabilities found. - - -pbsugg/flask_testbed_server -https://github.com/pbsugg/flask_testbed_server -Entry file: flask_testbed_server/main.py -Scanned: 2016-10-19 10:45:34.022680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HYL13/flask_project_0 -https://github.com/HYL13/flask_project_0 -Entry file: flask_project_0/app/__init__.py -Scanned: 2016-10-19 10:45:35.528742 -Vulnerability 1: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_project_0/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_project_0/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flask_project_0/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flask_project_0/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flask_project_0/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -anthonybrown/Flask-web-API-demo -https://github.com/anthonybrown/Flask-web-API-demo -Entry file: Flask-web-API-demo/app.py -Scanned: 2016-10-19 10:45:39.136076 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-web-API-demo/venv/lib/python2.7/genericpath.py - -myCSprojects/PythonFlask-IBMBluemix -https://github.com/myCSprojects/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-19 10:45:39.645530 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kriordan/flask-hello-world -https://github.com/Kriordan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:45:40.180090 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: None -Scanned: 2016-10-19 10:45:45.497947 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dwisulfahnur/My-flask-app -https://github.com/dwisulfahnur/My-flask-app -Entry file: None -Scanned: 2016-10-19 10:45:46.769146 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dwisulfahnur/My-flask-app. - -andreffs18/flask-template-project -https://github.com/andreffs18/flask-template-project -Entry file: flask-template-project/project/__init__.py -Scanned: 2016-10-19 10:45:48.231105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valexandersaulys/flask_microblog_tutorial -https://github.com/valexandersaulys/flask_microblog_tutorial -Entry file: flask_microblog_tutorial/app/__init__.py -Scanned: 2016-10-19 10:45:49.575100 -No vulnerabilities found. - - -wenzhihong2003/awesome-flask-todo -https://github.com/wenzhihong2003/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 10:45:50.082605 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wenzhihong2003/awesome-flask-todo. - -kfiras/cloudfoundry-flask-webservice -https://github.com/kfiras/cloudfoundry-flask-webservice -Entry file: cloudfoundry-flask-webservice/app.py -Scanned: 2016-10-19 10:45:51.441727 -Vulnerability 1: -File: cloudfoundry-flask-webservice/app.py - > User input at line 80, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: cloudfoundry-flask-webservice/app.py - > reaches line 87, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -ssam123/flask-blog-tutorial -https://github.com/ssam123/flask-blog-tutorial -Entry file: flask-blog-tutorial/__init__.py -Scanned: 2016-10-19 10:45:53.927947 -Vulnerability 1: -File: flask-blog-tutorial/author/views.py - > User input at line 31, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flask-blog-tutorial/author/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: flask-blog-tutorial/author/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: flask-blog-tutorial/author/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -MrLeeh/flask-mega-tutorial -https://github.com/MrLeeh/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 10:45:54.450635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MatthewHodgson/flask-by-example -https://github.com/MatthewHodgson/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:45:55.175137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yun70/flask-rest-api -https://github.com/yun70/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-19 10:46:00.910502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevinlondon/flask-hello-world -https://github.com/kevinlondon/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:46:01.468681 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -viney-shih/Flask_App_Template -https://github.com/viney-shih/Flask_App_Template -Entry file: Flask_App_Template/app/__init__.py -Scanned: 2016-10-19 10:46:06.748407 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davehalladay/openr-flask-api -https://github.com/davehalladay/openr-flask-api -Entry file: openr-flask-api/main.py -Scanned: 2016-10-19 10:46:11.103379 -No vulnerabilities found. - - -momotaro98/flask-for-test -https://github.com/momotaro98/flask-for-test -Entry file: flask-for-test/app.py -Scanned: 2016-10-19 10:46:12.376368 -No vulnerabilities found. - - -andela-mochieng/flask-practice-tutorial -https://github.com/andela-mochieng/flask-practice-tutorial -Entry file: flask-practice-tutorial/app/__init__.py -Scanned: 2016-10-19 10:46:13.768959 -No vulnerabilities found. - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-19 10:46:17.180788 -No vulnerabilities found. - - -mahfuzsust/flask-heroku-intro -https://github.com/mahfuzsust/flask-heroku-intro -Entry file: flask-heroku-intro/app.py -Scanned: 2016-10-19 10:46:18.553782 -No vulnerabilities found. - - -MoodyLyrics/flask -https://github.com/MoodyLyrics/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:46:22.127244 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -sunshine-sjd/Flask -https://github.com/sunshine-sjd/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:46:22.611221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unikatsieben/flask -https://github.com/unikatsieben/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:46:23.622516 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Mei-Lin-Chen/Flask -https://github.com/Mei-Lin-Chen/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:46:24.126340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dannyec/flask -https://github.com/dannyec/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:46:26.246501 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kakshi3242/Flask -https://github.com/kakshi3242/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:46:32.763036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Abirdcfly/flask-blog -https://github.com/Abirdcfly/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:46:34.816187 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rainyear/MathModeBot -https://github.com/rainyear/MathModeBot -Entry file: MathModeBot/main.py -Scanned: 2016-10-19 10:46:37.202281 -No vulnerabilities found. - - -jrhuerta/flask-api -https://github.com/jrhuerta/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 10:46:37.724066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huachen0216/flaskdemo -https://github.com/huachen0216/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 10:46:41.238958 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -MrLokans/flaskr -https://github.com/MrLokans/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:46:41.752908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -citizen-stig/flaskone -https://github.com/citizen-stig/flaskone -Entry file: flaskone/flask_one.py -Scanned: 2016-10-19 10:46:43.057757 -No vulnerabilities found. - - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-19 10:46:48.462580 -No vulnerabilities found. - - -Robotwing/flaskweb -https://github.com/Robotwing/flaskweb -Entry file: None -Scanned: 2016-10-19 10:46:50.299813 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -super452/flasky -https://github.com/super452/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:46:50.798343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -srbhtest/flaskwebsite -https://github.com/srbhtest/flaskwebsite -Entry file: flaskwebsite/__init__.py -Scanned: 2016-10-19 10:46:52.081971 -No vulnerabilities found. - - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:46:52.619884 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:46:55.625723 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neo1218/m2m -https://github.com/neo1218/m2m -Entry file: m2m/m2m/app/__init__.py -Scanned: 2016-10-19 10:46:56.969453 -No vulnerabilities found. - - -fhamami/flaskone -https://github.com/fhamami/flaskone -Entry file: flaskone/app/__init__.py -Scanned: 2016-10-19 10:47:01.467651 -No vulnerabilities found. - - -windery/flasky -https://github.com/windery/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:47:02.968821 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kcunning/flask-class-c9 -https://github.com/kcunning/flask-class-c9 -Entry file: flask-class-c9/flaskclass/app/__init__.py -Scanned: 2016-10-19 10:47:08.331606 -No vulnerabilities found. - - -tangza/FlaskAPP -https://github.com/tangza/FlaskAPP -Entry file: FlaskAPP/myblog/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:47:15.006697 -No vulnerabilities found. - - -MarHelen/FlaskLogin -https://github.com/MarHelen/FlaskLogin -Entry file: FlaskLogin/sql_declarative.py -Scanned: 2016-10-19 10:47:19.033644 -No vulnerabilities found. - - -louiskun/flaskGIT -https://github.com/louiskun/flaskGIT -Entry file: flaskGIT/sessionmail.py -Scanned: 2016-10-19 10:47:23.343212 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskGIT/venv/lib/python2.7/genericpath.py - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 10:47:23.845900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sethblack/python-flask-pixel-tracking -https://github.com/sethblack/python-flask-pixel-tracking -Entry file: python-flask-pixel-tracking/pfpt/main.py -Scanned: 2016-10-19 10:47:25.230635 -No vulnerabilities found. - - -kloudsec/py-webkit2png-flask-api -https://github.com/kloudsec/py-webkit2png-flask-api -Entry file: py-webkit2png-flask-api/api/app.py -Scanned: 2016-10-19 10:47:26.617124 -Vulnerability 1: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 2: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 3: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 4: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 5: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 6: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 7: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 8: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - - - -Karambir-K/Flask-Intro -https://github.com/Karambir-K/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-19 10:47:28.052959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-19 10:47:29.465814 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -logicalicy/flask_boostrap -https://github.com/logicalicy/flask_boostrap -Entry file: flask_boostrap/app/__init__.py -Scanned: 2016-10-19 10:47:31.448129 -No vulnerabilities found. - - -jeffreybergman/flask-blog -https://github.com/jeffreybergman/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:47:31.999940 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -MrLokans/discover_flask -https://github.com/MrLokans/discover_flask -Entry file: discover_flask/app.py -Scanned: 2016-10-19 10:47:33.758123 -No vulnerabilities found. - - -xiazhe/flask-demo -https://github.com/xiazhe/flask-demo -Entry file: None -Scanned: 2016-10-19 10:47:34.273883 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiazhe/flask-demo. - -nikoheikkila/flask-blog -https://github.com/nikoheikkila/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:47:35.791398 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Vatsalgame/flask-try -https://github.com/Vatsalgame/flask-try -Entry file: None -Scanned: 2016-10-19 10:47:36.307502 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Vatsalgame/flask-try. - -bbozhev/flask-test -https://github.com/bbozhev/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:47:37.867205 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:47:42.888588 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -danielcodes/flask-practice -https://github.com/danielcodes/flask-practice -Entry file: None -Scanned: 2016-10-19 10:47:43.402249 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danielcodes/flask-practice. - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 10:47:43.905766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-19 10:47:50.274713 -No vulnerabilities found. - - -keithleit/flask-demo -https://github.com/keithleit/flask-demo -Entry file: None -Scanned: 2016-10-19 10:47:50.771899 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/keithleit/flask-demo. - -wstcpyt/flask-demo -https://github.com/wstcpyt/flask-demo -Entry file: None -Scanned: 2016-10-19 10:47:52.265654 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wstcpyt/flask-demo. - -geraldmc/flask-template -https://github.com/geraldmc/flask-template -Entry file: None -Scanned: 2016-10-19 10:47:52.784662 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/geraldmc/flask-template. - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-19 10:47:55.163806 -No vulnerabilities found. - - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/run.py -Scanned: 2016-10-19 10:47:56.423525 -No vulnerabilities found. - - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-19 10:48:03.039719 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ktomlee/flask_init -https://github.com/ktomlee/flask_init -Entry file: flask_init/hello.py -Scanned: 2016-10-19 10:48:04.296506 -No vulnerabilities found. - - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-19 10:48:05.301187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Joryang/flask_videos -https://github.com/Joryang/flask_videos -Entry file: flask_videos/videos.py -Scanned: 2016-10-19 10:48:09.917912 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AvijitGhosh82/appengine_flask -https://github.com/AvijitGhosh82/appengine_flask -Entry file: appengine_flask/main.py -Scanned: 2016-10-19 10:48:15.370308 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sadev1/flask-demo -https://github.com/sadev1/flask-demo -Entry file: None -Scanned: 2016-10-19 10:48:16.865852 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sadev1/flask-demo. - -markleung1969/flask-base -https://github.com/markleung1969/flask-base -Entry file: None -Scanned: 2016-10-19 10:48:21.381200 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/markleung1969/flask-base. - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:48:24.868286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zmrfzn/Flask_Sample -https://github.com/zmrfzn/Flask_Sample -Entry file: Flask_Sample/app.py -Scanned: 2016-10-19 10:48:28.560244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 10:48:29.086277 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -butovichev/flask-blog -https://github.com/butovichev/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:48:29.603152 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-19 10:48:32.126335 -No vulnerabilities found. - - -rholmes69/flasky2_1 -https://github.com/rholmes69/flasky2_1 -Entry file: flasky2_1/app/__init__.py -Scanned: 2016-10-19 10:48:34.650027 -Vulnerability 1: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 22: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky2_1/app/api_1_0/users.py - > Line 25: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 2: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 44: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky2_1/app/api_1_0/users.py - > Line 47: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 3: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 18: prev = url_for('api.get_posts',page=page - 1, _external=True) - File: flasky2_1/app/api_1_0/posts.py - > Line 21: next = url_for('api.get_posts',page=page + 1, _external=True) - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 17: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky2_1/app/api_1_0/comments.py - > Line 20: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 5: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 45: prev = url_for('api.get_comments',page=page - 1, _external=True) - File: flasky2_1/app/api_1_0/comments.py - > Line 48: next = url_for('api.get_comments',page=page + 1, _external=True) - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-19 10:48:36.118148 -No vulnerabilities found. - - -jcerise/openspacesboard-python -https://github.com/jcerise/openspacesboard-python -Entry file: openspacesboard-python/osbp_app/__init__.py -Scanned: 2016-10-19 10:48:38.526278 -Vulnerability 1: -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > User input at line 29, trigger word "get(": - space = ConferenceSpace.query.get(space_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > Line 32: space = dict(id=space.id, space_name=space.space_name, location_id=space.location_id, event_date=space.event_date, start_time=space.start_time, end_time=space.end_time) -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('space'space) - -Vulnerability 2: -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > User input at line 39, trigger word "get(": - session = ConferenceSession.query.get(session_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 42: session_space = session.space - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 43: session_location = session_space.location - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 44: timespan = 'start_time''end_time'session_space.start_timesession_space.end_time - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 45: session = dict(id=session.id, title=session.title, description=session.description, convener=session.convener, space_name=session_space.space_name, location=session_location.name, date=session_space.event_date, timespan=timespan) -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('session'session) - -Vulnerability 3: -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > User input at line 27, trigger word "get(": - location = ConferenceLocation.query.get(location_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > Line 30: location = dict(id=location.id, name=location.name) -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > reaches line 31, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('location'location) - - - -icecraft/ZhiHuDaemon -https://github.com/icecraft/ZhiHuDaemon -Entry file: ZhiHuDaemon/app/__init__.py -Scanned: 2016-10-19 10:48:40.085832 -Vulnerability 1: -File: ZhiHuDaemon/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 33: questions = pagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('search.html',questions=questions, pagination=pagination, keyword=keyword[1-1]) - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 30, trigger word "filter(": - pagination = Question.query.filter(Question.title.like(keyword)).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - - - -AntonisFK/Login_registration_Flask -https://github.com/AntonisFK/Login_registration_Flask -Entry file: None -Scanned: 2016-10-19 10:48:44.815834 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AntonisFK/Login_registration_Flask. - -jeseon/flask-by-example -https://github.com/jeseon/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:48:45.924540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-19 10:48:51.331574 -No vulnerabilities found. - - -maxidrum/Flask_and_Mongo -https://github.com/maxidrum/Flask_and_Mongo -Entry file: Flask_and_Mongo/application/__init__.py -Scanned: 2016-10-19 10:48:52.664500 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: None -Scanned: 2016-10-19 10:48:54.188279 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -keimos/flask-rest-sql -https://github.com/keimos/flask-rest-sql -Entry file: flask-rest-sql/app.py -Scanned: 2016-10-19 10:48:55.431338 -No vulnerabilities found. - - -jeffreybergman/flask-hello-world -https://github.com/jeffreybergman/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:48:55.973459 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -zolaneta/todo_flask_application -https://github.com/zolaneta/todo_flask_application -Entry file: None -Scanned: 2016-10-19 10:48:58.661765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/todo_flask_application. - -baskervilski/flask-hello-world -https://github.com/baskervilski/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:48:59.199697 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Bbouley/flask-by-example -https://github.com/Bbouley/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:49:04.864826 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilbert-abreu/realtime_slack_flask_app -https://github.com/wilbert-abreu/realtime_slack_flask_app -Entry file: None -Scanned: 2016-10-19 10:49:10.659262 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ellachao/Flask_GmailAPI_Example -https://github.com/ellachao/Flask_GmailAPI_Example -Entry file: Flask_GmailAPI_Example/main.py -Scanned: 2016-10-19 10:49:11.959127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NJIT-SIG-WEBDEV/Flask-URL-Shortner -https://github.com/NJIT-SIG-WEBDEV/Flask-URL-Shortner -Entry file: Flask-URL-Shortner/app.py -Scanned: 2016-10-19 10:49:13.450285 -Vulnerability 1: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "url_for(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - -Vulnerability 2: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "flash(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - - - -hilmarh/island-python-flask-example -https://github.com/hilmarh/island-python-flask-example -Entry file: island-python-flask-example/app/__init__.py -Scanned: 2016-10-19 10:49:15.822192 -No vulnerabilities found. - - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-19 10:49:19.108231 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-19 10:49:23.379060 -No vulnerabilities found. - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-19 10:49:28.256484 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcabomb/flask_hello_world -https://github.com/marcabomb/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:49:30.285508 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcabomb/flask_hello_world. - -kevin-js/azure-flask-tutorial -https://github.com/kevin-js/azure-flask-tutorial -Entry file: azure-flask-tutorial/run.py -Scanned: 2016-10-19 10:49:32.131929 -No vulnerabilities found. - - -ShawnPengxy/Flask-madeBlog -https://github.com/ShawnPengxy/Flask-madeBlog -Entry file: Flask-madeBlog/site-packages/flask/sessions.py -Scanned: 2016-10-19 10:49:39.494923 -No vulnerabilities found. - - -vinayraghavan/pyacacemy-flask-workshop -https://github.com/vinayraghavan/pyacacemy-flask-workshop -Entry file: pyacacemy-flask-workshop/bookmarks.py -Scanned: 2016-10-19 10:49:40.883652 -No vulnerabilities found. - - -drbrightside/first-flask-app -https://github.com/drbrightside/first-flask-app -Entry file: None -Scanned: 2016-10-19 10:49:41.392146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -D10221/gae_flask_ndb_test -https://github.com/D10221/gae_flask_ndb_test -Entry file: gae_flask_ndb_test/main.py -Scanned: 2016-10-19 10:49:43.665683 -No vulnerabilities found. - - -micahcourey/FirstFlaskApp -https://github.com/micahcourey/FirstFlaskApp -Entry file: FirstFlaskApp/flask_app.py -Scanned: 2016-10-19 10:49:44.922707 -No vulnerabilities found. - - -commandknight/cs125-fooddy-flask -https://github.com/commandknight/cs125-fooddy-flask -Entry file: cs125-fooddy-flask/fooddy2.py -Scanned: 2016-10-19 10:49:48.578557 -No vulnerabilities found. - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-19 10:49:49.922956 -No vulnerabilities found. - - -rfmapp/TheFlaskMegaTutorial -https://github.com/rfmapp/TheFlaskMegaTutorial -Entry file: None -Scanned: 2016-10-19 10:49:56.563370 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scripterkaran/flask -https://github.com/scripterkaran/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:49:59.126826 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -JadyLiu/flask -https://github.com/JadyLiu/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:50:00.128296 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -candyer/Flask -https://github.com/candyer/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:50:00.640535 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -itsrifat/flask-celery-docker-scale -https://github.com/itsrifat/flask-celery-docker-scale -Entry file: flask-celery-docker-scale/flask-app/app.py -Scanned: 2016-10-19 10:50:01.940756 -No vulnerabilities found. - - -sinscary/Flask-Social-Networking -https://github.com/sinscary/Flask-Social-Networking -Entry file: Flask-Social-Networking/app.py -Scanned: 2016-10-19 10:50:03.324321 -No vulnerabilities found. - - -osuosl/timesync-frontend-flask -https://github.com/osuosl/timesync-frontend-flask -Entry file: None -Scanned: 2016-10-19 10:50:05.987378 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/osuosl/timesync-frontend-flask. - -CBR09/flaskapp -https://github.com/CBR09/flaskapp -Entry file: None -Scanned: 2016-10-19 10:50:06.489061 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CBR09/flaskapp. - -narakai/flaskblog -https://github.com/narakai/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 10:50:07.024197 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:50:07.538190 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:50:08.045995 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:50:12.548566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:50:14.047294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darrenhankins/flaskr -https://github.com/darrenhankins/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:50:16.553548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Looncall/Flaskr -https://github.com/Looncall/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 10:50:20.067887 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeffreybergman/flasktaskr -https://github.com/jeffreybergman/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:50:24.564980 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marcabomb/flasktaskr -https://github.com/marcabomb/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:50:28.067943 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -czy1238677/flasky -https://github.com/czy1238677/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:50:30.573259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pink-Moon/flaskr -https://github.com/Pink-Moon/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:50:32.066723 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexGrek/FlaskLib -https://github.com/AlexGrek/FlaskLib -Entry file: None -Scanned: 2016-10-19 10:50:34.499150 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -daveweber/FlaskBar -https://github.com/daveweber/FlaskBar -Entry file: FlaskBar/index.py -Scanned: 2016-10-19 10:50:35.755163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flaskMe -https://github.com/danleyb2/flaskMe -Entry file: flaskMe/flaskREST.py -Scanned: 2016-10-19 10:50:42.021549 -Vulnerability 1: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 2: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - - - -Rikka-chan/flaskCharts -https://github.com/Rikka-chan/flaskCharts -Entry file: None -Scanned: 2016-10-19 10:50:47.015266 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mcmcgonagle/flasktaskr2 -https://github.com/mcmcgonagle/flasktaskr2 -Entry file: flasktaskr2/project/views.py -Scanned: 2016-10-19 10:50:48.406454 -No vulnerabilities found. - - -AlexFransis/FlaskyProject -https://github.com/AlexFransis/FlaskyProject -Entry file: FlaskyProject/app/__init__.py -Scanned: 2016-10-19 10:50:49.957801 -No vulnerabilities found. - - -bunkdeath/FlaskTemplate -https://github.com/bunkdeath/FlaskTemplate -Entry file: FlaskTemplate/application.py -Scanned: 2016-10-19 10:50:51.210224 -No vulnerabilities found. - - -zding5/FlaskDemo -https://github.com/zding5/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 10:50:51.713336 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -diggzhang/flaskMaze -https://github.com/diggzhang/flaskMaze -Entry file: None -Scanned: 2016-10-19 10:50:53.609416 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/diggzhang/flaskMaze. - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 10:50:54.095312 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deanmax/FlaskAPP -https://github.com/deanmax/FlaskAPP -Entry file: FlaskAPP/app/__init__.py -Scanned: 2016-10-19 10:51:01.441975 -No vulnerabilities found. - - -hugoantunes/base-flask -https://github.com/hugoantunes/base-flask -Entry file: base-flask/service/__init__.py -Scanned: 2016-10-19 10:51:02.695096 -No vulnerabilities found. - - -haburibe/docker-flask -https://github.com/haburibe/docker-flask -Entry file: docker-flask/main.py -Scanned: 2016-10-19 10:51:03.945655 -No vulnerabilities found. - - -krisekenes/flask_deployment -https://github.com/krisekenes/flask_deployment -Entry file: flask_deployment/server.py -Scanned: 2016-10-19 10:51:05.193997 -No vulnerabilities found. - - -namickey/hello-flask -https://github.com/namickey/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 10:51:05.770546 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:51:06.340179 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-19 10:51:07.675671 -No vulnerabilities found. - - -timyi1212/flask-demo -https://github.com/timyi1212/flask-demo -Entry file: None -Scanned: 2016-10-19 10:51:08.182660 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/timyi1212/flask-demo. - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-19 10:51:09.892989 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-19 10:51:10.409396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-19 10:51:12.181066 -No vulnerabilities found. - - -honmaple/flask-word -https://github.com/honmaple/flask-word -Entry file: flask-word/app/__init__.py -Scanned: 2016-10-19 10:51:14.932341 -Vulnerability 1: -File: flask-word/app/count/views.py - > User input at line 17, trigger word "cookies[": - count = int(request.cookies['count']) + 1 -Reassigned in: - File: flask-word/app/count/views.py - > Line 19: count = 0 - File: flask-word/app/count/views.py - > Line 20: response = make_response(str(count)) - File: flask-word/app/count/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = response -File: flask-word/app/count/views.py - > reaches line 21, trigger word "set_cookie(": - response.set_cookie('count',value=str(count), max_age=1800) - - - -marcabomb/flask-blog -https://github.com/marcabomb/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:51:15.457518 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -studiomezklador/flask_api -https://github.com/studiomezklador/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 10:51:17.969790 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rinechran/flask-tutorial -https://github.com/rinechran/flask-tutorial -Entry file: None -Scanned: 2016-10-19 10:51:21.464259 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Savvis/flask-phonebook -https://github.com/Savvis/flask-phonebook -Entry file: flask-phonebook/app/__init__.py -Scanned: 2016-10-19 10:51:30.544415 -No vulnerabilities found. - - -a-r-g-v/flask-template -https://github.com/a-r-g-v/flask-template -Entry file: None -Scanned: 2016-10-19 10:51:32.061234 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/a-r-g-v/flask-template. - -aksareen/Flask-learn -https://github.com/aksareen/Flask-learn -Entry file: Flask-learn/app.py -Scanned: 2016-10-19 10:51:34.785169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aqisnotliquid/flask_rpg -https://github.com/aqisnotliquid/flask_rpg -Entry file: flask_rpg/app/__init__.py -Scanned: 2016-10-19 10:51:36.221024 -No vulnerabilities found. - - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-19 10:51:37.602244 -No vulnerabilities found. - - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/run.py -Scanned: 2016-10-19 10:51:43.847772 -No vulnerabilities found. - - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-19 10:51:47.978382 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Kriordan/flask-blog -https://github.com/Kriordan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:51:49.509317 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -textbook/flask-forecaster -https://github.com/textbook/flask-forecaster -Entry file: flask-forecaster/flask_forecaster/flask_app.py -Scanned: 2016-10-19 10:51:51.013622 -No vulnerabilities found. - - -nava45/flask-routelogger -https://github.com/nava45/flask-routelogger -Entry file: flask-routelogger/flask_app_example.py -Scanned: 2016-10-19 10:51:52.347270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MattHealy/flask-skeleton -https://github.com/MattHealy/flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:51:52.888484 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MattHealy/flask-skeleton. - -Xavier-Lam/flask-wechat -https://github.com/Xavier-Lam/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-19 10:51:53.401544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ty-WDFW/Flask-Tickets -https://github.com/Ty-WDFW/Flask-Tickets -Entry file: Flask-Tickets/main.py -Scanned: 2016-10-19 10:51:56.627705 -No vulnerabilities found. - - -makudesu/flask-thesis -https://github.com/makudesu/flask-thesis -Entry file: flask-thesis/bnhs.py -Scanned: 2016-10-19 10:52:01.473152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivanenko/flask-webcrawler -https://github.com/ivanenko/flask-webcrawler -Entry file: flask-webcrawler/ww2.py -Scanned: 2016-10-19 10:52:03.958443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-19 10:52:05.496254 -No vulnerabilities found. - - -kubabu/flask_blog -https://github.com/kubabu/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:52:07.514373 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MichaelDaniello/LearnFlask -https://github.com/MichaelDaniello/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-19 10:52:08.043045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bplabombarda/fdr -https://github.com/bplabombarda/fdr -Entry file: fdr/server/__init__.py -Scanned: 2016-10-19 10:52:09.876904 -No vulnerabilities found. - - -gzxultra/FlaskLoginManagement -https://github.com/gzxultra/FlaskLoginManagement -Entry file: FlaskLoginManagement/app/__init__.py -Scanned: 2016-10-19 10:52:11.678798 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -metajemo/testapp -https://github.com/metajemo/testapp -Entry file: testapp/testapp.py -Scanned: 2016-10-19 10:52:12.941563 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -victorcuervo/FlaskMongoDB -https://github.com/victorcuervo/FlaskMongoDB -Entry file: FlaskMongoDB/welcome.py -Scanned: 2016-10-19 10:52:14.309753 -No vulnerabilities found. - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-19 10:52:15.769710 -No vulnerabilities found. - - -sasha42/Mailchimp-utility -https://github.com/sasha42/Mailchimp-utility -Entry file: None -Scanned: 2016-10-19 10:52:17.010636 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sasha42/Mailchimp-utility. - -auliude/flask_hello_world -https://github.com/auliude/flask_hello_world -Entry file: None -Scanned: 2016-10-19 10:52:17.524810 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/auliude/flask_hello_world. - -yogeshdixit41/PyFlaskWebApp -https://github.com/yogeshdixit41/PyFlaskWebApp -Entry file: PyFlaskWebApp/hello.py -Scanned: 2016-10-19 10:52:20.826439 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-19 10:52:22.191756 -No vulnerabilities found. - - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-19 10:52:23.604673 -No vulnerabilities found. - - -rtorres90/rest-flask-tutorial -https://github.com/rtorres90/rest-flask-tutorial -Entry file: rest-flask-tutorial/rest_flask/endpoints_project2sol.py -Scanned: 2016-10-19 10:52:30.918890 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jz314/flask-demo-copy -https://github.com/jz314/flask-demo-copy -Entry file: None -Scanned: 2016-10-19 10:52:33.068937 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jz314/flask-demo-copy. - -willelson/flask-app-template -https://github.com/willelson/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-19 10:52:33.636784 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -acbart/lti-flask-skeleton -https://github.com/acbart/lti-flask-skeleton -Entry file: lti-flask-skeleton/main.py -Scanned: 2016-10-19 10:52:36.013314 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GreatBedAwake/flask_lab_web -https://github.com/GreatBedAwake/flask_lab_web -Entry file: flask_lab_web/app/__init__.py -Scanned: 2016-10-19 10:52:37.374155 -No vulnerabilities found. - - -Derfirm/hello-docker-flask -https://github.com/Derfirm/hello-docker-flask -Entry file: hello-docker-flask/app.py -Scanned: 2016-10-19 10:52:38.644090 -No vulnerabilities found. - - -arvvvs/Flask-Practice-Metis-Delivery -https://github.com/arvvvs/Flask-Practice-Metis-Delivery -Entry file: Flask-Practice-Metis-Delivery/app.py -Scanned: 2016-10-19 10:52:46.757670 -Vulnerability 1: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 57, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 2: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 59, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 3: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 148, trigger word "get(": - phone = request.args.get('phone', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 4: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 149, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 5: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 150, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 6: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 151, trigger word "get(": - phone_value = request.args.get('phone_value', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - - - -nosuchip/flask-video-streaming -https://github.com/nosuchip/flask-video-streaming -Entry file: flask-video-streaming/main.py -Scanned: 2016-10-19 10:52:52.602823 -No vulnerabilities found. - - -VistaarJ/REST-API-Using-Flask- -https://github.com/VistaarJ/REST-API-Using-Flask- -Entry file: REST-API-Using-Flask-/app.py -Scanned: 2016-10-19 10:52:58.350540 -No vulnerabilities found. - - -n-batalha/flask-api-template -https://github.com/n-batalha/flask-api-template -Entry file: flask-api-template/web/journey_predict/__init__.py -Scanned: 2016-10-19 10:52:59.747861 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-19 10:53:01.770558 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/knight-zhou/Web.py_Flask. - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-19 10:53:02.297055 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -blackmad/flask-google-login-example -https://github.com/blackmad/flask-google-login-example -Entry file: flask-google-login-example/main.py -Scanned: 2016-10-19 10:53:03.627678 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DEV3L/openshift-python-flask-example -https://github.com/DEV3L/openshift-python-flask-example -Entry file: openshift-python-flask-example/wsgi/run.py -Scanned: 2016-10-19 10:53:04.995388 -No vulnerabilities found. - - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-19 10:53:06.279252 -No vulnerabilities found. - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-19 10:53:06.782413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tim9Liu9/Flask_Bootstrap_Blog -https://github.com/Tim9Liu9/Flask_Bootstrap_Blog -Entry file: Flask_Bootstrap_Blog/doc/app.py -Scanned: 2016-10-19 10:53:08.358352 -No vulnerabilities found. - - -cerealcake/flask-ldap3 -https://github.com/cerealcake/flask-ldap3 -Entry file: flask-ldap3/app.py -Scanned: 2016-10-19 10:53:09.596754 -No vulnerabilities found. - - -willelson/flask-login-template -https://github.com/willelson/flask-login-template -Entry file: None -Scanned: 2016-10-19 10:53:14.134563 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zolaneta/books_flask_app -https://github.com/zolaneta/books_flask_app -Entry file: None -Scanned: 2016-10-19 10:53:15.868704 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/books_flask_app. - -Anivarth/quiz-python-flask -https://github.com/Anivarth/quiz-python-flask -Entry file: quiz-python-flask/quiz.py -Scanned: 2016-10-19 10:53:17.114463 -No vulnerabilities found. - - -richyvk/flask-url-shortener -https://github.com/richyvk/flask-url-shortener -Entry file: flask-url-shortener/app.py -Scanned: 2016-10-19 10:53:18.716824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -susantshrestha/flask -https://github.com/susantshrestha/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:53:21.536612 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -cobra0914/flask -https://github.com/cobra0914/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:53:22.572239 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -zbc/Flask -https://github.com/zbc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:53:23.062632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SunchunZhou/flask -https://github.com/SunchunZhou/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:53:25.007544 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -k-hung/FlaskApp -https://github.com/k-hung/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 10:53:33.083748 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-19 10:53:36.706698 -No vulnerabilities found. - - -yoshiya0503/Flask-Best-Practices -https://github.com/yoshiya0503/Flask-Best-Practices -Entry file: Flask-Best-Practices/methodview.py -Scanned: 2016-10-19 10:53:38.019034 -No vulnerabilities found. - - -ThunderousFigs/Genomes -https://github.com/ThunderousFigs/Genomes -Entry file: Genomes/server.py -Scanned: 2016-10-19 10:53:50.367562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Python-Project-Simple/flask-blog -https://github.com/Python-Project-Simple/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:53:51.863742 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -keer2345/flasky -https://github.com/keer2345/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:53:52.390956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PansFortress/flasktasker -https://github.com/PansFortress/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-19 10:53:55.842541 -No vulnerabilities found. - - -olegzhoglo/flasktaskr -https://github.com/olegzhoglo/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:54:00.359226 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:54:01.871653 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:54:03.361770 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tim1978/flasktaskr -https://github.com/tim1978/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:54:03.855892 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DXZ/flaskr -https://github.com/DXZ/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:54:05.340436 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -schen2011/flaskandazure -https://github.com/schen2011/flaskandazure -Entry file: None -Scanned: 2016-10-19 10:54:08.326521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kriordan/flasktaskr -https://github.com/Kriordan/flasktaskr -Entry file: None -Scanned: 2016-10-19 10:54:08.831681 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 10:54:09.367076 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-19 10:54:12.072476 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liteng123/flaskr -https://github.com/liteng123/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:54:12.566698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pchartrand/FlaskTemp -https://github.com/pchartrand/FlaskTemp -Entry file: FlaskTemp/tempreport.py -Scanned: 2016-10-19 10:54:17.750391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -salazar35/FlaskWeb -https://github.com/salazar35/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-19 10:54:18.335482 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -hattwick/flask2 -https://github.com/hattwick/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-19 10:54:18.843780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -narakai/FlaskServer -https://github.com/narakai/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-19 10:54:20.426246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:54:21.069861 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -julywoo/flaskWeb -https://github.com/julywoo/flaskWeb -Entry file: flaskWeb/flaskWeb.py -Scanned: 2016-10-19 10:54:23.945086 -No vulnerabilities found. - - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:54:24.475532 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-19 10:54:25.960690 -No vulnerabilities found. - - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-19 10:54:26.540308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tmlima/flask-intro -https://github.com/tmlima/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 10:54:30.054992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-19 10:54:35.292946 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-19 10:54:35.811978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-19 10:54:39.298999 -No vulnerabilities found. - - -amitbn/flask-docker -https://github.com/amitbn/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-19 10:54:53.072987 -No vulnerabilities found. - - -julywoo/flask_login -https://github.com/julywoo/flask_login -Entry file: None -Scanned: 2016-10-19 10:54:54.053320 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/julywoo/flask_login. - -LovroM/Flask-test -https://github.com/LovroM/Flask-test -Entry file: Flask-test/webserver.py -Scanned: 2016-10-19 10:54:56.936406 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-19 10:55:02.182427 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -OpenTrons/labsuite_flask -https://github.com/OpenTrons/labsuite_flask -Entry file: labsuite_flask/app.py -Scanned: 2016-10-19 10:55:04.653555 -No vulnerabilities found. - - -brandonfujii/flask-microblog -https://github.com/brandonfujii/flask-microblog -Entry file: None -Scanned: 2016-10-19 10:55:05.164726 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cherry-hyx/flask_t -https://github.com/cherry-hyx/flask_t -Entry file: None -Scanned: 2016-10-19 10:55:06.526662 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cherry-hyx/flask_t. - -YaGiNA/study-flask -https://github.com/YaGiNA/study-flask -Entry file: study-flask/flaskr/__init__.py -Scanned: 2016-10-19 10:55:08.615757 -No vulnerabilities found. - - -Viredery/python_flask -https://github.com/Viredery/python_flask -Entry file: None -Scanned: 2016-10-19 10:55:09.129201 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Viredery/python_flask. - -josanabr/flask-vbox -https://github.com/josanabr/flask-vbox -Entry file: flask-vbox/flask-vbox.py -Scanned: 2016-10-19 10:55:11.396786 -No vulnerabilities found. - - -tanzhixu/Flask-oauth -https://github.com/tanzhixu/Flask-oauth -Entry file: Flask-oauth/app/__init__.py -Scanned: 2016-10-19 10:55:12.729694 -Vulnerability 1: -File: Flask-oauth/app/user_manager_views.py - > User input at line 32, trigger word "get(": - password = request.json.get('password', None) -Reassigned in: - File: Flask-oauth/app/user_manager_views.py - > Line 38: newpasswd = pwd_context.encrypt(password) -File: Flask-oauth/app/user_manager_views.py - > reaches line 41, trigger word "filter(": - query.filter(User.id == userid).update(User.password_hashnewpasswd) - - - -abcsds/flask-tests -https://github.com/abcsds/flask-tests -Entry file: flask-tests/streaming/stream.py -Scanned: 2016-10-19 10:55:14.250630 -No vulnerabilities found. - - -simeon-xx/simeon-flask -https://github.com/simeon-xx/simeon-flask -Entry file: simeon-flask/app/init.py -Scanned: 2016-10-19 10:55:15.669955 -No vulnerabilities found. - - -seanhelm/flask-test -https://github.com/seanhelm/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:55:16.192465 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -dylannnnn/flask_study -https://github.com/dylannnnn/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-19 10:55:18.489696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huasu/InstantFlask -https://github.com/huasu/InstantFlask -Entry file: InstantFlask/app_return_values.py -Scanned: 2016-10-19 10:55:21.092419 -No vulnerabilities found. - - -maricante/flask-blog -https://github.com/maricante/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:55:21.665918 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-19 10:55:22.917024 -No vulnerabilities found. - - -ysicing/Pangu -https://github.com/ysicing/Pangu -Entry file: Pangu/Pangu.py -Scanned: 2016-10-19 10:55:34.140246 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -rbcolson9/flask4kids -https://github.com/rbcolson9/flask4kids -Entry file: flask4kids/hello.py -Scanned: 2016-10-19 10:55:35.465022 -No vulnerabilities found. - - -charlestondance/FlaskStartUp -https://github.com/charlestondance/FlaskStartUp -Entry file: FlaskStartUp/app/__init__.py -Scanned: 2016-10-19 10:55:36.869804 -No vulnerabilities found. - - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-19 10:55:38.254501 -No vulnerabilities found. - - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-19 10:55:39.658138 -No vulnerabilities found. - - -erik-farmer/flask-auth-wysiwyg-blog -https://github.com/erik-farmer/flask-auth-wysiwyg-blog -Entry file: flask-auth-wysiwyg-blog/app.py -Scanned: 2016-10-19 10:55:40.954415 -No vulnerabilities found. - - -dongheelee1/simple_flask_wall -https://github.com/dongheelee1/simple_flask_wall -Entry file: simple_flask_wall/server.py -Scanned: 2016-10-19 10:55:42.351404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PeggyZWY/blog-with-flask -https://github.com/PeggyZWY/blog-with-flask -Entry file: blog-with-flask/app/__init__.py -Scanned: 2016-10-19 10:55:44.291532 -No vulnerabilities found. - - -mnzr/Flask-Blueprint-test -https://github.com/mnzr/Flask-Blueprint-test -Entry file: Flask-Blueprint-test/app/__init__.py -Scanned: 2016-10-19 10:55:45.578278 -Vulnerability 1: -File: Flask-Blueprint-test/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprint-test/app/users/views.py - > Line 38: session['user_id'] = user.id -File: Flask-Blueprint-test/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -guilleJB/flask-web-book -https://github.com/guilleJB/flask-web-book -Entry file: flask-web-book/hello.py -Scanned: 2016-10-19 10:55:46.967296 -No vulnerabilities found. - - -aquang9124/flask_semi_restful_routes -https://github.com/aquang9124/flask_semi_restful_routes -Entry file: flask_semi_restful_routes/server.py -Scanned: 2016-10-19 10:55:54.406586 -No vulnerabilities found. - - -ynifamily3/CRUD-with-Flask-MVC -https://github.com/ynifamily3/CRUD-with-Flask-MVC -Entry file: CRUD-with-Flask-MVC/test.py -Scanned: 2016-10-19 10:55:55.860740 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TwilioDevEd/browser-calls-flask -https://github.com/TwilioDevEd/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-19 10:55:58.052491 -No vulnerabilities found. - - -terryllowery/flask-hello-world -https://github.com/terryllowery/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:55:59.131439 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -aquang9124/flask_wall_test -https://github.com/aquang9124/flask_wall_test -Entry file: flask_wall_test/server.py -Scanned: 2016-10-19 10:56:03.576753 -No vulnerabilities found. - - -ynejati/MyFlaskApp -https://github.com/ynejati/MyFlaskApp -Entry file: MyFlaskApp/MyFlaskWebApp.py -Scanned: 2016-10-19 10:56:05.985941 -No vulnerabilities found. - - -TheCypher/flask-boiler-plate -https://github.com/TheCypher/flask-boiler-plate -Entry file: flask-boiler-plate/app/__init__.py -Scanned: 2016-10-19 10:56:07.390268 -Vulnerability 1: -File: flask-boiler-plate/app/module_one/views.py - > User input at line 30, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-boiler-plate/app/module_one/views.py - > Line 34: session['user_id'] = user.id -File: flask-boiler-plate/app/module_one/views.py - > reaches line 36, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -TheCypher/flask-api-test -https://github.com/TheCypher/flask-api-test -Entry file: flask-api-test/api.py -Scanned: 2016-10-19 10:56:10.638272 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-api-test/lib/python2.7/genericpath.py - -vstanev1/heroku-flask-app -https://github.com/vstanev1/heroku-flask-app -Entry file: heroku-flask-app/app.py -Scanned: 2016-10-19 10:56:12.488251 -No vulnerabilities found. - - -bellcodo/bellcodo-flask-microblog -https://github.com/bellcodo/bellcodo-flask-microblog -Entry file: bellcodo-flask-microblog/app/__init__.py -Scanned: 2016-10-19 10:56:14.246311 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-19 10:56:14.863499 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Journo-App/flask-by-example -https://github.com/Journo-App/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 10:56:15.703897 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuer99cn/awesome-flask-todo -https://github.com/liuer99cn/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 10:56:16.209861 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/liuer99cn/awesome-flask-todo. - -megrela/python-flask-skeleton -https://github.com/megrela/python-flask-skeleton -Entry file: None -Scanned: 2016-10-19 10:56:17.573425 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/megrela/python-flask-skeleton. - -shyba/browser-calls-flask -https://github.com/shyba/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-19 10:56:18.850058 -No vulnerabilities found. - - -seiya-tsukada/instant_flask_server -https://github.com/seiya-tsukada/instant_flask_server -Entry file: instant_flask_server/main.py -Scanned: 2016-10-19 10:56:20.137424 -No vulnerabilities found. - - -jdgramajo/LearningFlaskFramework -https://github.com/jdgramajo/LearningFlaskFramework -Entry file: LearningFlaskFramework/blog/app/app.py -Scanned: 2016-10-19 10:56:22.552628 -No vulnerabilities found. - - -plablo09/minimal-flask-dev -https://github.com/plablo09/minimal-flask-dev -Entry file: minimal-flask-dev/hello.py -Scanned: 2016-10-19 10:56:23.954275 -No vulnerabilities found. - - -bobquest33/testRestFlask -https://github.com/bobquest33/testRestFlask -Entry file: testRestFlask/testRestFlask/testRestFlask/apps/testRest/models.py -Scanned: 2016-10-19 10:56:25.801655 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jjapp/flask-hello-world -https://github.com/jjapp/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 10:56:36.394955 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -snehasankavaram/donorRegistryFlask -https://github.com/snehasankavaram/donorRegistryFlask -Entry file: donorRegistryFlask/run.py -Scanned: 2016-10-19 10:56:38.784606 -No vulnerabilities found. - - -ayusharma/Drug-discovery-flask -https://github.com/ayusharma/Drug-discovery-flask -Entry file: Drug-discovery-flask/app.py -Scanned: 2016-10-19 10:56:40.173135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vishaljain3991/flask_oauth_example_template -https://github.com/vishaljain3991/flask_oauth_example_template -Entry file: flask_oauth_example_template/app/__init__.py -Scanned: 2016-10-19 10:56:42.993045 -No vulnerabilities found. - - -F483/flask-data-migration-example -https://github.com/F483/flask-data-migration-example -Entry file: flask-data-migration-example/app.py -Scanned: 2016-10-19 10:56:44.279291 -No vulnerabilities found. - - -studiomezklador/flask_api_2 -https://github.com/studiomezklador/flask_api_2 -Entry file: flask_api_2/__init__.py -Scanned: 2016-10-19 10:56:45.976393 -No vulnerabilities found. - - -SarthakS93/Flask-WebApp -https://github.com/SarthakS93/Flask-WebApp -Entry file: Flask-WebApp/app/__init__.py -Scanned: 2016-10-19 10:56:47.383133 -No vulnerabilities found. - - -dorneanu/flask-app-template -https://github.com/dorneanu/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-19 10:56:47.901145 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aquang9124/flask_friends_full -https://github.com/aquang9124/flask_friends_full -Entry file: flask_friends_full/server.py -Scanned: 2016-10-19 10:56:49.190882 -No vulnerabilities found. - - -huasu/LearningFlaskFramework -https://github.com/huasu/LearningFlaskFramework -Entry file: LearningFlaskFramework/hello.py -Scanned: 2016-10-19 10:56:55.532452 -No vulnerabilities found. - - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-19 10:56:58.426771 -No vulnerabilities found. - - -pavelrib/flask -https://github.com/pavelrib/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:57:00.467757 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ZhenghaoZhu/Flask -https://github.com/ZhenghaoZhu/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:57:00.987836 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -octt/flask -https://github.com/octt/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:57:05.203306 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -Bwooklyn/flask -https://github.com/Bwooklyn/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:57:07.193363 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:57:12.181466 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -SeanVaysburd/flask -https://github.com/SeanVaysburd/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 10:57:13.201337 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -kartheek3011/Flask -https://github.com/kartheek3011/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 10:57:13.731003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TerbiumLabs/flask-developer-challenge -https://github.com/TerbiumLabs/flask-developer-challenge -Entry file: flask-developer-challenge/gistapi/gistapi.py -Scanned: 2016-10-19 10:57:15.149416 -No vulnerabilities found. - - -sunscrapers/flask-boilerplate -https://github.com/sunscrapers/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 10:57:16.678985 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sunscrapers/flask-boilerplate. - -jabbalaci/DigitalOceanFlask -https://github.com/jabbalaci/DigitalOceanFlask -Entry file: DigitalOceanFlask/home/demo/projects/ave_caesar/main.py -Scanned: 2016-10-19 10:57:18.081237 -No vulnerabilities found. - - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-19 10:57:19.969761 -No vulnerabilities found. - - -pyx/flask-diced -https://github.com/pyx/flask-diced -Entry file: flask-diced/examples/simple/app.py -Scanned: 2016-10-19 10:57:21.370353 -No vulnerabilities found. - - -basco-johnkevin/note-taking-app -https://github.com/basco-johnkevin/note-taking-app -Entry file: note-taking-app/part1/main.py -Scanned: 2016-10-19 10:57:22.632734 -No vulnerabilities found. - - -Miserlou/serverless-imagehost -https://github.com/Miserlou/serverless-imagehost -Entry file: serverless-imagehost/my_app.py -Scanned: 2016-10-19 10:57:23.954348 -No vulnerabilities found. - - -MRamakri/flaskworkshop -https://github.com/MRamakri/flaskworkshop -Entry file: flaskworkshop/app.py -Scanned: 2016-10-19 10:57:25.261990 -No vulnerabilities found. - - -imhuwq/flasky -https://github.com/imhuwq/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:57:25.805058 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangyuhaomei/flasky -https://github.com/zhangyuhaomei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 10:57:26.306952 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hellohuangjin/flaskblog -https://github.com/hellohuangjin/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 10:57:26.862436 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -coolmile23/flaskr -https://github.com/coolmile23/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:57:37.363324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -antonsoroko/flaskapimongo -https://github.com/antonsoroko/flaskapimongo -Entry file: flaskapimongo/flaskapimongo/__init__.py -Scanned: 2016-10-19 10:57:40.819601 -No vulnerabilities found. - - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 10:57:41.340931 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-19 10:57:41.947043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhkmxx9302013/flaskmysql -https://github.com/zhkmxx9302013/flaskmysql -Entry file: flaskmysql/flaskmysql.py -Scanned: 2016-10-19 10:57:46.349519 -No vulnerabilities found. - - -xiaomao361/flaskr -https://github.com/xiaomao361/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:57:47.050556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alvaro893/flaskcinemaapp -https://github.com/alvaro893/flaskcinemaapp -Entry file: flaskcinemaapp/FlaskWebProject/__init__.py -Scanned: 2016-10-19 10:57:48.860333 -No vulnerabilities found. - - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 10:57:49.350333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -retozero/FlaskDemo -https://github.com/retozero/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 10:57:56.391478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uklineale/flaskTut -https://github.com/uklineale/flaskTut -Entry file: None -Scanned: 2016-10-19 10:58:04.820949 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saurabh1e/FlaskStructure -https://github.com/saurabh1e/FlaskStructure -Entry file: FlaskStructure/src/utils/__init__.py -Scanned: 2016-10-19 10:58:06.296283 -No vulnerabilities found. - - -zupeiza/FlaskTaskr -https://github.com/zupeiza/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-19 10:58:06.967898 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -yxun/FlaskSample -https://github.com/yxun/FlaskSample -Entry file: FlaskSample/hello.py -Scanned: 2016-10-19 10:58:08.281893 -No vulnerabilities found. - - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:58:08.898252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DearX-dlx/FlaskBlog -https://github.com/DearX-dlx/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 10:58:09.480595 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-19 10:58:10.088801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sohje/__flask_psgr -https://github.com/sohje/__flask_psgr -Entry file: __flask_psgr/app.py -Scanned: 2016-10-19 10:58:15.403015 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -doubtingben/flask-mongo -https://github.com/doubtingben/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-19 10:58:15.912846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -farridav/flask_friends -https://github.com/farridav/flask_friends -Entry file: flask_friends/src/friends/__init__.py -Scanned: 2016-10-19 10:58:17.312435 -No vulnerabilities found. - - -gh-tcbd/flask-test -https://github.com/gh-tcbd/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 10:58:17.849342 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -doubtingben/flask-jobs -https://github.com/doubtingben/flask-jobs -Entry file: flask-jobs/code/web.py -Scanned: 2016-10-19 10:58:19.146607 -No vulnerabilities found. - - -askewseth/StatsFlask -https://github.com/askewseth/StatsFlask -Entry file: StatsFlask/run.py -Scanned: 2016-10-19 10:58:20.883659 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BlackMud/flask_blog -https://github.com/BlackMud/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 10:58:22.384836 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bzerroug/flask_appbuilder -https://github.com/bzerroug/flask_appbuilder -Entry file: flask_appbuilder/meteo/__init__.py -Scanned: 2016-10-19 10:58:23.775894 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mkubaczyk/flask-structure -https://github.com/mkubaczyk/flask-structure -Entry file: flask-structure/apps/__init__.py -Scanned: 2016-10-19 10:58:25.039626 -No vulnerabilities found. - - -zhkmxx9302013/RPiFlask -https://github.com/zhkmxx9302013/RPiFlask -Entry file: RPiFlask/main.py -Scanned: 2016-10-19 10:58:26.373191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tahoe/flask-restless -https://github.com/tahoe/flask-restless -Entry file: flask-restless/examples/clients/jquery/__main__.py -Scanned: 2016-10-19 10:58:28.263937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PavelMPD/flask_oauth -https://github.com/PavelMPD/flask_oauth -Entry file: flask_oauth/server.py -Scanned: 2016-10-19 10:58:29.661803 -No vulnerabilities found. - - -hoikin-yiu/flask-blog -https://github.com/hoikin-yiu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:58:30.343424 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Cloudwick-BT/flask_project -https://github.com/Cloudwick-BT/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 10:58:39.351257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:58:41.879862 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -g-rich/flask-blog -https://github.com/g-rich/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:58:42.430453 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 10:58:43.022583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chensdream/learn-flask -https://github.com/chensdream/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 10:58:46.796264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coolmile23/flask_practice -https://github.com/coolmile23/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-19 10:58:54.280186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k9luo/Flask-Tutorial -https://github.com/k9luo/Flask-Tutorial -Entry file: Flask-Tutorial/microblog-version-0.2/app/__init__.py -Scanned: 2016-10-19 10:58:59.441581 -No vulnerabilities found. - - -Harry-Yao/learn-flask -https://github.com/Harry-Yao/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 10:59:00.259866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-19 10:59:00.769058 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -juan-castano/todo-flask -https://github.com/juan-castano/todo-flask -Entry file: None -Scanned: 2016-10-19 10:59:01.341182 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/juan-castano/todo-flask. - -mullaned/Flask-Test -https://github.com/mullaned/Flask-Test -Entry file: Flask-Test/flask_test.py -Scanned: 2016-10-19 10:59:02.647251 -No vulnerabilities found. - - -zupeiza/flask-blog -https://github.com/zupeiza/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 10:59:07.243662 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -shopetan/flask-api -https://github.com/shopetan/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 10:59:08.787106 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jungkoo/flask-dmango -https://github.com/jungkoo/flask-dmango -Entry file: flask-dmango/sample/blueprint_find.py -Scanned: 2016-10-19 10:59:10.189004 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -raghureddyram/flask-hello -https://github.com/raghureddyram/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 10:59:10.889597 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hrushikesh198/flask-server -https://github.com/hrushikesh198/flask-server -Entry file: None -Scanned: 2016-10-19 10:59:11.412541 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hrushikesh198/flask-server. - -omarkurt/flask-injection -https://github.com/omarkurt/flask-injection -Entry file: flask-injection/index.py -Scanned: 2016-10-19 10:59:17.717749 -No vulnerabilities found. - - -Datalker/Flask_sandbox -https://github.com/Datalker/Flask_sandbox -Entry file: Flask_sandbox/hello.py -Scanned: 2016-10-19 10:59:19.129341 -No vulnerabilities found. - - -getsentry/demo-flask -https://github.com/getsentry/demo-flask -Entry file: demo-flask/app.py -Scanned: 2016-10-19 10:59:22.409143 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -technocake/flask-eksempel -https://github.com/technocake/flask-eksempel -Entry file: flask-eksempel/webserver.py -Scanned: 2016-10-19 10:59:24.671452 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wkzhu/flask_example -https://github.com/wkzhu/flask_example -Entry file: None -Scanned: 2016-10-19 10:59:25.207700 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rgsingh/flask-timetrack -https://github.com/rgsingh/flask-timetrack -Entry file: flask-timetrack/app/__init__.py -Scanned: 2016-10-19 10:59:26.555283 -No vulnerabilities found. - - -pultitom/study-flask -https://github.com/pultitom/study-flask -Entry file: study-flask/microblog/app/__init__.py -Scanned: 2016-10-19 10:59:27.845386 -No vulnerabilities found. - - -StarsHu/ll-flask -https://github.com/StarsHu/ll-flask -Entry file: ll-flask/LikeLines/server.py -Scanned: 2016-10-19 10:59:29.279269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-19 10:59:29.932597 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wumb0/flask-examples -https://github.com/wumb0/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-19 10:59:31.496452 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -vladimirdotk/flask-boilerplate -https://github.com/vladimirdotk/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 10:59:43.483600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vladimirdotk/flask-boilerplate. - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-19 10:59:44.882644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramwin/flask_tutorial -https://github.com/ramwin/flask_tutorial -Entry file: None -Scanned: 2016-10-19 10:59:47.912046 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-19 10:59:53.113112 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/genericpath.py - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-19 10:59:57.395512 -No vulnerabilities found. - - -f-guitart/progcoms3-flask -https://github.com/f-guitart/progcoms3-flask -Entry file: progcoms3-flask/app.py -Scanned: 2016-10-19 11:00:03.671563 -No vulnerabilities found. - - -jackeylu/microblog -https://github.com/jackeylu/microblog -Entry file: None -Scanned: 2016-10-19 11:00:04.177313 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -garaud/pyris -https://github.com/garaud/pyris -Entry file: pyris/pyris/api/__init__.py -Scanned: 2016-10-19 11:00:05.585197 -No vulnerabilities found. - - -nicc777/flask-webservice-wsgi-python3-demo -https://github.com/nicc777/flask-webservice-wsgi-python3-demo -Entry file: flask-webservice-wsgi-python3-demo/fwsdemo/app.py -Scanned: 2016-10-19 11:00:06.975225 -No vulnerabilities found. - - -atbaker/zero-to-production -https://github.com/atbaker/zero-to-production -Entry file: zero-to-production/app.py -Scanned: 2016-10-19 11:00:10.861562 -No vulnerabilities found. - - -MicahSteinbrecher/mini-blog -https://github.com/MicahSteinbrecher/mini-blog -Entry file: mini-blog/flaskr.py -Scanned: 2016-10-19 11:00:12.189337 -No vulnerabilities found. - - -remarcbalisi/rest-demo-flask- -https://github.com/remarcbalisi/rest-demo-flask- -Entry file: rest-demo-flask-/app.py -Scanned: 2016-10-19 11:00:13.941052 -No vulnerabilities found. - - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-19 11:00:15.320299 -No vulnerabilities found. - - -mattvisco/flask_test_2 -https://github.com/mattvisco/flask_test_2 -Entry file: flask_test_2/insta.py -Scanned: 2016-10-19 11:00:16.686196 -No vulnerabilities found. - - -pavelchalyk/blackjack_on_flask -https://github.com/pavelchalyk/blackjack_on_flask -Entry file: blackjack_on_flask/blackjack.py -Scanned: 2016-10-19 11:00:19.107608 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -merryHunter/chat-flask-socketio -https://github.com/merryHunter/chat-flask-socketio -Entry file: chat-flask-socketio/chat.py -Scanned: 2016-10-19 11:00:24.425705 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:00:24.982548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-19 11:00:28.154919 -No vulnerabilities found. - - -bsteinberg/flask -https://github.com/bsteinberg/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:00:29.272662 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:00:30.371990 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -ninadmhatre/zual -https://github.com/ninadmhatre/zual -Entry file: zual/local_mods/flask-blogging/test/__init__.py -Scanned: 2016-10-19 11:00:33.411932 -No vulnerabilities found. - - -taogeT/flask-celery -https://github.com/taogeT/flask-celery -Entry file: flask-celery/example/app/__init__.py -Scanned: 2016-10-19 11:00:34.817847 -No vulnerabilities found. - - -frankV/flask-sendgrid -https://github.com/frankV/flask-sendgrid -Entry file: flask-sendgrid/setup.py -Scanned: 2016-10-19 11:00:36.065308 -No vulnerabilities found. - - -islandev/flaskweb -https://github.com/islandev/flaskweb -Entry file: None -Scanned: 2016-10-19 11:00:36.595667 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gyonghua/flasktaskr -https://github.com/gyonghua/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:00:37.108426 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Rothschild0120/flaskyblog -https://github.com/Rothschild0120/flaskyblog -Entry file: flaskyblog/app/__init__.py -Scanned: 2016-10-19 11:00:42.961326 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zixuzhang/flasky -https://github.com/zixuzhang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:00:45.502295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stalwart201/flaskimgupload -https://github.com/stalwart201/flaskimgupload -Entry file: flaskimgupload/upload.py -Scanned: 2016-10-19 11:00:46.776221 -No vulnerabilities found. - - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:00:47.297379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:00:49.814210 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -azureappserviceoss/FlaskAzure -https://github.com/azureappserviceoss/FlaskAzure -Entry file: FlaskAzure/FlaskWebProject1/__init__.py -Scanned: 2016-10-19 11:01:00.126114 -No vulnerabilities found. - - -yhappy/FlaskProjects -https://github.com/yhappy/FlaskProjects -Entry file: FlaskProjects/FlaskProjects.py -Scanned: 2016-10-19 11:01:04.459001 -No vulnerabilities found. - - -tajihiro/FlaskBluemix -https://github.com/tajihiro/FlaskBluemix -Entry file: FlaskBluemix/index.py -Scanned: 2016-10-19 11:01:06.724642 -No vulnerabilities found. - - -Leyawiin/FlaskDemo -https://github.com/Leyawiin/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:01:07.287972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KotiyaSenya/FlaskLearn -https://github.com/KotiyaSenya/FlaskLearn -Entry file: FlaskLearn/flask_learn/__init__.py -Scanned: 2016-10-19 11:01:08.729957 -No vulnerabilities found. - - -Patreon/cartographer -https://github.com/Patreon/cartographer -Entry file: cartographer/example/generic_social_network/app/__init__.py -Scanned: 2016-10-19 11:01:11.480339 -No vulnerabilities found. - - -Ketouem/flask-boto3 -https://github.com/Ketouem/flask-boto3 -Entry file: flask-boto3/example.py -Scanned: 2016-10-19 11:01:12.895901 -No vulnerabilities found. - - -Pushould/pushould-flask-sample -https://github.com/Pushould/pushould-flask-sample -Entry file: pushould-flask-sample/app.py -Scanned: 2016-10-19 11:01:14.244614 -No vulnerabilities found. - - -miaoihan/qulook_flask -https://github.com/miaoihan/qulook_flask -Entry file: qulook_flask/qulook.py -Scanned: 2016-10-19 11:01:17.546981 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: qulook_flask/ENV/lib/python2.7/genericpath.py - -rogerpence/Flask-App -https://github.com/rogerpence/Flask-App -Entry file: Flask-App/app/__init__.py -Scanned: 2016-10-19 11:01:19.210804 -No vulnerabilities found. - - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:01:19.812284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-19 11:01:21.167770 -No vulnerabilities found. - - -kessiacastro/flask-hello -https://github.com/kessiacastro/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 11:01:26.221167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -renaldopringle/flask_heroku -https://github.com/renaldopringle/flask_heroku -Entry file: flask_heroku/app.py -Scanned: 2016-10-19 11:01:29.392036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunhughees/flask-blog -https://github.com/sunhughees/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:01:30.663727 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:01:31.243772 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uyoaix/learn-flask -https://github.com/uyoaix/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 11:01:31.948396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -frenos/flask-sample -https://github.com/frenos/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 11:01:32.465408 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:01:35.008377 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 11:01:36.570275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangcheng/flask-example -https://github.com/zhangcheng/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 11:01:38.086221 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gemimarosier/flask_project -https://github.com/gemimarosier/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 11:01:38.889795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gchange/flask_server -https://github.com/gchange/flask_server -Entry file: flask_server/flask_server/main.py -Scanned: 2016-10-19 11:01:47.212261 -No vulnerabilities found. - - -Nickyzj/flask-first -https://github.com/Nickyzj/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-19 11:01:48.758379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Unicomcat/flask_test -https://github.com/Unicomcat/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:01:49.377115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -testforvln/flask-learning -https://github.com/testforvln/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-19 11:01:50.630189 -No vulnerabilities found. - - -m18664319351/Blog_Flask -https://github.com/m18664319351/Blog_Flask -Entry file: Blog_Flask/app/__init__.py -Scanned: 2016-10-19 11:01:51.933056 -No vulnerabilities found. - - -propupul/Flask_app -https://github.com/propupul/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-19 11:01:52.436490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jidn/flask-obscure -https://github.com/jidn/flask-obscure -Entry file: flask-obscure/tests/test_url.py -Scanned: 2016-10-19 11:01:59.829989 -No vulnerabilities found. - - -cdaidone/small_flask -https://github.com/cdaidone/small_flask -Entry file: small_flask/small_flask.py -Scanned: 2016-10-19 11:02:08.531558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-19 11:02:09.060730 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pedrogaudencio/refunite-flask -https://github.com/pedrogaudencio/refunite-flask -Entry file: refunite-flask/app.py -Scanned: 2016-10-19 11:02:10.593884 -No vulnerabilities found. - - -master105/flask_server -https://github.com/master105/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 11:02:13.415941 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -d3prof3t/flask-intro -https://github.com/d3prof3t/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:02:13.913706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-19 11:02:14.426794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shinstev/flask_server -https://github.com/shinstev/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 11:02:14.947265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vramakin/LearnFlask -https://github.com/vramakin/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-19 11:02:16.467933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nbeede/docker-flask -https://github.com/nbeede/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-19 11:02:20.733198 -No vulnerabilities found. - - -runningstrawberry/microblog -https://github.com/runningstrawberry/microblog -Entry file: None -Scanned: 2016-10-19 11:02:21.256209 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-19 11:02:21.936319 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/genericpath.py - -B2Crypt/Random-Gamemode- -https://github.com/B2Crypt/Random-Gamemode- -Entry file: Random-Gamemode-/FLASK/__init__.py -Scanned: 2016-10-19 11:02:24.603930 -No vulnerabilities found. - - -Lich2013/learnflask -https://github.com/Lich2013/learnflask -Entry file: None -Scanned: 2016-10-19 11:02:29.230072 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Lich2013/learnflask. - -jbisasky/flaskProtoBuffer -https://github.com/jbisasky/flaskProtoBuffer -Entry file: flaskProtoBuffer/flaskHello.py -Scanned: 2016-10-19 11:02:34.398027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WangShengguang/FlaskWebDevelopment -https://github.com/WangShengguang/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/Full_Stack_Foundations/finalproject.py -Scanned: 2016-10-19 11:02:34.976148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunliuHub/FlaskWebDevelopment -https://github.com/JunliuHub/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/Full_Stack_Foundations/finalproject.py -Scanned: 2016-10-19 11:02:35.473898 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adrianomaringolo/py-flask-tuts -https://github.com/adrianomaringolo/py-flask-tuts -Entry file: None -Scanned: 2016-10-19 11:02:40.653681 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:02:41.659010 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ishwarya-iyer/nuage_proj_flask_app -https://github.com/ishwarya-iyer/nuage_proj_flask_app -Entry file: nuage_proj_flask_app/app.py -Scanned: 2016-10-19 11:02:43.649708 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SamirKanaan/PlantillaFlaskREST1 -https://github.com/SamirKanaan/PlantillaFlaskREST1 -Entry file: PlantillaFlaskREST1/plantilla1.py -Scanned: 2016-10-19 11:02:45.015821 -No vulnerabilities found. - - -remarcbalisi/flask-angular-auth -https://github.com/remarcbalisi/flask-angular-auth -Entry file: flask-angular-auth/project/__init__.py -Scanned: 2016-10-19 11:02:46.289063 -No vulnerabilities found. - - -jarosenb/flask_ionratio_V2 -https://github.com/jarosenb/flask_ionratio_V2 -Entry file: flask_ionratio_V2/hello.py -Scanned: 2016-10-19 11:02:47.630876 -No vulnerabilities found. - - -themuppet2/flask-hello-world -https://github.com/themuppet2/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:02:48.175842 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -kindoprec/Flask-SecureHeaders -https://github.com/kindoprec/Flask-SecureHeaders -Entry file: Flask-SecureHeaders/tests/core_test.py -Scanned: 2016-10-19 11:02:50.557106 -No vulnerabilities found. - - -ishwarya-iyer/nuage_flask_app -https://github.com/ishwarya-iyer/nuage_flask_app -Entry file: nuage_flask_app/app.py -Scanned: 2016-10-19 11:02:53.445042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Christomas/flask_project_skeleton -https://github.com/Christomas/flask_project_skeleton -Entry file: flask_project_skeleton/app/__init__.py -Scanned: 2016-10-19 11:02:54.811138 -No vulnerabilities found. - - -pranavn-cuelogic/flask_video_conference_room -https://github.com/pranavn-cuelogic/flask_video_conference_room -Entry file: flask_video_conference_room/video_conf/main.py -Scanned: 2016-10-19 11:02:56.090514 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -llxxee/A-website-by-Flask -https://github.com/llxxee/A-website-by-Flask -Entry file: None -Scanned: 2016-10-19 11:02:57.448537 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/llxxee/A-website-by-Flask. - -micah-cal-sandbox/flask-heroku-sandbox -https://github.com/micah-cal-sandbox/flask-heroku-sandbox -Entry file: flask-heroku-sandbox/app.py -Scanned: 2016-10-19 11:03:00.829759 -No vulnerabilities found. - - -lkpanganiban/flask-rest-example -https://github.com/lkpanganiban/flask-rest-example -Entry file: flask-rest-example/app.py -Scanned: 2016-10-19 11:03:08.142701 -Vulnerability 1: -File: flask-rest-example/app.py - > User input at line 48, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-rest-example/app.py - > reaches line 55, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -rodcox89/flask-restful-blueprint-boilerplate -https://github.com/rodcox89/flask-restful-blueprint-boilerplate -Entry file: flask-restful-blueprint-boilerplate/main.py -Scanned: 2016-10-19 11:03:11.596331 -No vulnerabilities found. - - -bellkev/docker-flask-browserify -https://github.com/bellkev/docker-flask-browserify -Entry file: docker-flask-browserify/src/python/hello.py -Scanned: 2016-10-19 11:03:12.874611 -No vulnerabilities found. - - -braddmiller/flask-by-example -https://github.com/braddmiller/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:03:13.635998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -technocake/flask-user-profiles-example -https://github.com/technocake/flask-user-profiles-example -Entry file: flask-user-profiles-example/pyhtml.py -Scanned: 2016-10-19 11:03:16.364752 -No vulnerabilities found. - - -dhiraka/flask_basic_app -https://github.com/dhiraka/flask_basic_app -Entry file: flask_basic_app/test_rest_app.py -Scanned: 2016-10-19 11:03:17.635367 -No vulnerabilities found. - - -udpcloud/flask-rest-api -https://github.com/udpcloud/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-19 11:03:18.139991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AndersonQ/appengine-flask-contacts-api -https://github.com/AndersonQ/appengine-flask-contacts-api -Entry file: appengine-flask-contacts-api/application/__init__.py -Scanned: 2016-10-19 11:03:22.747598 -No vulnerabilities found. - - -tych0/flask-demo-app -https://github.com/tych0/flask-demo-app -Entry file: flask-demo-app/app/__init__.py -Scanned: 2016-10-19 11:03:24.021863 -No vulnerabilities found. - - -aaronja38/assignment10-flask -https://github.com/aaronja38/assignment10-flask -Entry file: assignment10-flask/winners.py -Scanned: 2016-10-19 11:03:27.017459 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: assignment10-flask/env/lib/python2.7/genericpath.py - -Christomas/i_dev_flask -https://github.com/Christomas/i_dev_flask -Entry file: i_dev_flask/app/__init__.py -Scanned: 2016-10-19 11:03:28.475901 -Vulnerability 1: -File: i_dev_flask/app/auth/views.py - > User input at line 66, trigger word ".data": - user.email = form.email.data -File: i_dev_flask/app/auth/views.py - > reaches line 72, trigger word "url_for(": - options.send_email(user.email, '验证邮箱', 'auth/mail/confirm',user=user, url=url_for('auth.confirm',token=token, _external=True)) - -Vulnerability 2: -File: i_dev_flask/app/auth/views.py - > User input at line 175, trigger word ".data": - current_user.email = form.email.data -File: i_dev_flask/app/auth/views.py - > reaches line 179, trigger word "url_for(": - options.send_email(current_user.email, '验证邮箱', 'auth/mail/confirm',user=current_user, url=url_for('auth.new_confirm',token=token, _external=True)) - - - -paulsavala/flask_aws_demo -https://github.com/paulsavala/flask_aws_demo -Entry file: None -Scanned: 2016-10-19 11:03:35.740597 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -avikantz/Flask-API-Demo -https://github.com/avikantz/Flask-API-Demo -Entry file: Flask-API-Demo/app/__init__.py -Scanned: 2016-10-19 11:03:37.441814 -No vulnerabilities found. - - -deenaacree/flask_app1 -https://github.com/deenaacree/flask_app1 -Entry file: flask_app1/songsapp.py -Scanned: 2016-10-19 11:03:40.541066 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_app1/env/lib/python2.7/genericpath.py - -AMontalva/flask_hello_world -https://github.com/AMontalva/flask_hello_world -Entry file: None -Scanned: 2016-10-19 11:03:41.050356 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AMontalva/flask_hello_world. - -xiewenlongs/Flask-CacheOBJ -https://github.com/xiewenlongs/Flask-CacheOBJ -Entry file: Flask-CacheOBJ/tests.py -Scanned: 2016-10-19 11:03:42.634962 -No vulnerabilities found. - - -thefunkjunky/python-flask-boilerplate -https://github.com/thefunkjunky/python-flask-boilerplate -Entry file: python-flask-boilerplate/mainapp/__init__.py -Scanned: 2016-10-19 11:03:44.018274 -No vulnerabilities found. - - -harryoh/flask-rest-api -https://github.com/harryoh/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-19 11:03:44.553541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanBlakeman/flask-deploy-practice -https://github.com/DanBlakeman/flask-deploy-practice -Entry file: flask-deploy-practice/src/app.py -Scanned: 2016-10-19 11:03:45.878044 -No vulnerabilities found. - - -MoxmiNu/flask-mongo-test -https://github.com/MoxmiNu/flask-mongo-test -Entry file: flask-mongo-test/provisioning/files/dr-app.py -Scanned: 2016-10-19 11:04:02.394369 -No vulnerabilities found. - - -medev21/Social-Network---Flask -https://github.com/medev21/Social-Network---Flask -Entry file: Social-Network---Flask/app.py -Scanned: 2016-10-19 11:04:03.674903 -No vulnerabilities found. - - -sealzjh/flask-celery-test -https://github.com/sealzjh/flask-celery-test -Entry file: None -Scanned: 2016-10-19 11:04:04.958258 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sealzjh/flask-celery-test. - -Glaun/flask-hello-world -https://github.com/Glaun/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:04:05.479746 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -PushpakPati/flask-by-example -https://github.com/PushpakPati/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:04:06.158789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aintmetho/flask -https://github.com/aintmetho/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:04:08.363815 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -acouderc/flask -https://github.com/acouderc/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:04:09.265188 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -MapEntryManagement/flask -https://github.com/MapEntryManagement/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:04:10.242268 -No vulnerabilities found. -An Error occurred while scanning the repo: ('Unexpected node type:', ) - -klen/flask-pw -https://github.com/klen/flask-pw -Entry file: flask-pw/tests.py -Scanned: 2016-10-19 11:04:11.723342 -No vulnerabilities found. - - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-19 11:04:13.125295 -No vulnerabilities found. - - -colingorrie/flask-boilerplate -https://github.com/colingorrie/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 11:04:13.641362 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/colingorrie/flask-boilerplate. - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-19 11:04:17.061635 -No vulnerabilities found. - - -wangxuan007/flasky -https://github.com/wangxuan007/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:04:17.598083 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lambdaplus/flasko -https://github.com/lambdaplus/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-19 11:04:25.021466 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -xiaohu2015/Flasky -https://github.com/xiaohu2015/Flasky -Entry file: Flasky/Flasky.py -Scanned: 2016-10-19 11:04:27.013936 -No vulnerabilities found. - - -yu66s/flaskr -https://github.com/yu66s/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:04:27.524267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cwywang/flasky -https://github.com/cwywang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:04:28.037651 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gene1wood/flaskoktaapp -https://github.com/gene1wood/flaskoktaapp -Entry file: flaskoktaapp/flaskoktaapp/__init__.py -Scanned: 2016-10-19 11:04:29.429131 -Vulnerability 1: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -Reassigned in: - File: flaskoktaapp/flaskoktaapp/__init__.py - > Line 196: url = url_for('user') -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 204, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -SSUHan/flasktutorial -https://github.com/SSUHan/flasktutorial -Entry file: None -Scanned: 2016-10-19 11:04:30.004151 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ma53192190/flaskwork -https://github.com/ma53192190/flaskwork -Entry file: flaskwork/flaskwork.py -Scanned: 2016-10-19 11:04:31.823423 -No vulnerabilities found. - - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:04:32.333788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-19 11:04:32.952322 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -zhouyang2640/FlaskInit -https://github.com/zhouyang2640/FlaskInit -Entry file: FlaskInit/hello.py -Scanned: 2016-10-19 11:04:38.398992 -No vulnerabilities found. - - -s3c0nDD/FlaskTutorial -https://github.com/s3c0nDD/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 11:04:39.926650 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ZaighumRajput/flaskPractice -https://github.com/ZaighumRajput/flaskPractice -Entry file: flaskPractice/chapter3/hello.py -Scanned: 2016-10-19 11:04:44.070581 -No vulnerabilities found. - - -rmotr/flask-api-example -https://github.com/rmotr/flask-api-example -Entry file: flask-api-example/api/_04_delete_method.py -Scanned: 2016-10-19 11:04:45.845582 -No vulnerabilities found. - - -frankpiva/mastering-flask -https://github.com/frankpiva/mastering-flask -Entry file: mastering-flask/main.py -Scanned: 2016-10-19 11:04:49.869709 -No vulnerabilities found. - - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:04:50.413409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-19 11:05:04.821018 -No vulnerabilities found. - - -kosen10spajam/f-flask -https://github.com/kosen10spajam/f-flask -Entry file: f-flask/main.py -Scanned: 2016-10-19 11:05:06.221657 -Vulnerability 1: -File: f-flask/main.py - > User input at line 132, trigger word "get(": - since = int(request.args.get('since')) -File: f-flask/main.py - > reaches line 134, trigger word "execute(": - sql.execute('SELECT time, animal, message FROM messages WHERE time >= %d' % since) - -Vulnerability 2: -File: f-flask/main.py - > User input at line 142, trigger word "get(": - animal = request.values.get('animal') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 3: -File: f-flask/main.py - > User input at line 143, trigger word "get(": - message = request.values.get('message') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 4: -File: f-flask/main.py - > User input at line 144, trigger word "get(": - time = int(request.values.get('time')) -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - - - -jjapp/flask-blog -https://github.com/jjapp/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:05:06.769799 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -engfilipe/curso_flask -https://github.com/engfilipe/curso_flask -Entry file: curso_flask/photolog/__init__.py -Scanned: 2016-10-19 11:05:12.405549 -Vulnerability 1: -File: curso_flask/photolog/login_view.py - > User input at line 39, trigger word "get(": - next_ = request.args.get('next') -Reassigned in: - File: curso_flask/photolog/login_view.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect('/index') - File: curso_flask/photolog/login_view.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Autenticação', form=form) - File: curso_flask/photolog/login_view.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: curso_flask/photolog/login_view.py - > reaches line 40, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_ or url_for('lista')) - -Vulnerability 2: -File: curso_flask/photolog/login_view.py - > User input at line 39, trigger word "get(": - next_ = request.args.get('next') -Reassigned in: - File: curso_flask/photolog/login_view.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect('/index') - File: curso_flask/photolog/login_view.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Autenticação', form=form) - File: curso_flask/photolog/login_view.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: curso_flask/photolog/login_view.py - > reaches line 40, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next_ or url_for('lista')) - - - -zhang-zhang/learning-flask -https://github.com/zhang-zhang/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 11:05:13.065606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mihai011/flask_server -https://github.com/mihai011/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 11:05:13.560284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morganvdavis/boilerplate-flask -https://github.com/morganvdavis/boilerplate-flask -Entry file: None -Scanned: 2016-10-19 11:05:14.824633 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morganvdavis/boilerplate-flask. - -jwg4/flask_converter -https://github.com/jwg4/flask_converter -Entry file: flask_converter/examples/app_with_constructor.py -Scanned: 2016-10-19 11:05:16.124437 -No vulnerabilities found. - - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:05:16.656362 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Riffstation/flaskutilsexample -https://github.com/Riffstation/flaskutilsexample -Entry file: flaskutilsexample/src/app/__init__.py -Scanned: 2016-10-19 11:20:16.571691 -No vulnerabilities found. - - -dolv/Flask -https://github.com/dolv/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:20:18.023365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mamun-dueee/flask -https://github.com/Mamun-dueee/flask -Entry file: flask/setup.py -Scanned: 2016-10-19 11:20:18.913468 -Vulnerability 1: -File: flask/examples/jqueryexample/jqueryexample.py - > User input at line 18, trigger word "get(": - a = request.args.get('a', 0,type=int) -File: flask/examples/jqueryexample/jqueryexample.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - -Vulnerability 2: -File: flask/examples/jqueryexample/jqueryexample.py - > User input at line 19, trigger word "get(": - b = request.args.get('b', 0,type=int) -File: flask/examples/jqueryexample/jqueryexample.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - - - -KyleSeem/Flask -https://github.com/KyleSeem/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:20:19.485423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nppat/Flask -https://github.com/nppat/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:20:20.102473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:20:20.612424 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cloverstd/flask-wechatpy -https://github.com/cloverstd/flask-wechatpy -Entry file: flask-wechatpy/demo.py -Scanned: 2016-10-19 11:20:21.896967 -No vulnerabilities found. - - -13923858795/Tutorial -https://github.com/13923858795/Tutorial -Entry file: Tutorial/my/app/__init__.py -Scanned: 2016-10-19 11:20:25.911565 -Vulnerability 1: -File: Tutorial/my/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 33: posts = pagination.items - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Tutorial/my/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 23: show_followed = False - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Tutorial/my/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 44: posts = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Tutorial/my/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 111: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Tutorial/my/app/main/views.py - > Line 113: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 116: comments = pagination.items - File: Tutorial/my/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Tutorial/my/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Tutorial/my/app/main/views.py - > User input at line 176, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 177: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 180: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 175: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Tutorial/my/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 194: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 197: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 192: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 199, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Tutorial/my/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 235: comments = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -szparag3/flask-hello-world -https://github.com/szparag3/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:20:26.467926 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -QuentinMoss/reimagined-computing-machine -https://github.com/QuentinMoss/reimagined-computing-machine -Entry file: reimagined-computing-machine/app/__init__.py -Scanned: 2016-10-19 11:20:27.799820 -No vulnerabilities found. - - -IronFist16/flasky -https://github.com/IronFist16/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:20:28.303736 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bsdtux/flaskblog -https://github.com/bsdtux/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:20:28.822771 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -terryllowery/flasktaskr -https://github.com/terryllowery/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:20:29.323274 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: None -Scanned: 2016-10-19 11:20:29.867660 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:20:30.374493 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WayneChen1987/flasky -https://github.com/WayneChen1987/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:20:30.960431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playgrdstar/flaskapp -https://github.com/playgrdstar/flaskapp -Entry file: None -Scanned: 2016-10-19 11:20:31.556215 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playgrdstar/flaskapp. - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:20:32.080132 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 11:20:32.585772 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulmkumar/flaskapp -https://github.com/rahulmkumar/flaskapp -Entry file: None -Scanned: 2016-10-19 11:20:33.098819 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rahulmkumar/flaskapp. - -chenglinguang/flaskky -https://github.com/chenglinguang/flaskky -Entry file: flaskky/hello1.py -Scanned: 2016-10-19 11:20:34.553900 -No vulnerabilities found. - - -jutreras/flaskTest -https://github.com/jutreras/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-19 11:20:35.612640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feocco/flaskLab -https://github.com/feocco/flaskLab -Entry file: flaskLab/app.py -Scanned: 2016-10-19 11:20:36.832647 -Vulnerability 1: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flaskLab/auth.py - > User input at line 42, trigger word "get(": - user = session.query(User).get(id) -File: flaskLab/auth.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -sarahbees/FlaskHeroku -https://github.com/sarahbees/FlaskHeroku -Entry file: FlaskHeroku/hello.py -Scanned: 2016-10-19 11:20:38.051388 -No vulnerabilities found. - - -954324919/FlaskDemo -https://github.com/954324919/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:20:38.582509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdagli/flask-restful-example -https://github.com/cdagli/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-19 11:20:39.081201 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pavelzamyatin/flask-mega-tutorial -https://github.com/pavelzamyatin/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 11:21:15.620967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -king100/flask-blog -https://github.com/king100/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:21:17.172017 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yyoowwllgit/flask_server -https://github.com/yyoowwllgit/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 11:21:18.677744 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -m4ra/flask-stripe -https://github.com/m4ra/flask-stripe -Entry file: flask-stripe/app/__init__.py -Scanned: 2016-10-19 11:21:20.376003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skinnyal/flask_tutorial -https://github.com/skinnyal/flask_tutorial -Entry file: None -Scanned: 2016-10-19 11:21:20.875706 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rspears74/flask-intro -https://github.com/rspears74/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:21:21.373085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Steve-Duncan/Learning-Flask -https://github.com/Steve-Duncan/Learning-Flask -Entry file: Learning-Flask/friends/server.py -Scanned: 2016-10-19 11:21:23.142320 -No vulnerabilities found. - - -jamesward/hello-flask -https://github.com/jamesward/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 11:21:23.712819 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -damyanbogoev/flask-cooking -https://github.com/damyanbogoev/flask-cooking -Entry file: flask-cooking/check.py -Scanned: 2016-10-19 11:21:25.106308 -No vulnerabilities found. - - -yyoowwllgit/flask_pro -https://github.com/yyoowwllgit/flask_pro -Entry file: flask_pro/he.py -Scanned: 2016-10-19 11:21:26.436710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egusahiroaki/flask_template -https://github.com/egusahiroaki/flask_template -Entry file: None -Scanned: 2016-10-19 11:21:26.942311 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/egusahiroaki/flask_template. - -ylto/learningFlask -https://github.com/ylto/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-19 11:21:27.569730 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -frederickOtus/copypaste_flask -https://github.com/frederickOtus/copypaste_flask -Entry file: copypaste_flask/server.py -Scanned: 2016-10-19 11:21:28.929976 -No vulnerabilities found. - - -alexeib2014/Flask-Android -https://github.com/alexeib2014/Flask-Android -Entry file: Flask-Android/flask_sqlalchemy.py -Scanned: 2016-10-19 11:21:32.991808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardtbell/flask-tutorial -https://github.com/richardtbell/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:21:33.550608 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -land-pack/flask-wordcounter -https://github.com/land-pack/flask-wordcounter -Entry file: flask-wordcounter/app.py -Scanned: 2016-10-19 11:21:36.800243 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-wordcounter/env/lib/python2.7/genericpath.py - -ibrahimirdem/flask-calisma -https://github.com/ibrahimirdem/flask-calisma -Entry file: flask-calisma/Hello.py -Scanned: 2016-10-19 11:21:37.993111 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prodicus/docker-flask -https://github.com/prodicus/docker-flask -Entry file: docker-flask/docker_flask/app.py -Scanned: 2016-10-19 11:21:39.271542 -No vulnerabilities found. - - -ItamarLevyOr/Flask_Tutorial -https://github.com/ItamarLevyOr/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-19 11:21:43.158711 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorial/venv/lib/python2.7/genericpath.py - -kcamenzind/flask_opentracing -https://github.com/kcamenzind/flask_opentracing -Entry file: flask_opentracing/tests/test_flask_opentracing.py -Scanned: 2016-10-19 11:21:44.846972 -No vulnerabilities found. - - -monburan/learn_flask -https://github.com/monburan/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 11:21:45.369639 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plasx/flask-rest -https://github.com/plasx/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-19 11:21:46.370835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChrisXiongWHU/flask_test -https://github.com/ChrisXiongWHU/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:21:46.930200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kflavin/flask-tutorial -https://github.com/kflavin/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:21:47.420792 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MalhotraVijay/flask-boilerplate -https://github.com/MalhotraVijay/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 11:21:47.924908 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MalhotraVijay/flask-boilerplate. - -SIJP-ORG/flask-demo -https://github.com/SIJP-ORG/flask-demo -Entry file: None -Scanned: 2016-10-19 11:21:48.432975 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SIJP-ORG/flask-demo. - -KOREAN139/flask-blog -https://github.com/KOREAN139/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:21:48.964585 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sumni-park/flask_blog -https://github.com/sumni-park/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:21:49.469449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -novking/Flask_AWS -https://github.com/novking/Flask_AWS -Entry file: Flask_AWS/PlagiarismDefender/home.py -Scanned: 2016-10-19 11:21:50.804813 -Vulnerability 1: -File: Flask_AWS/PlagiarismDefender/home.py - > User input at line 26, trigger word "form[": - text_to_filter = request.form['text_to_check'] -Reassigned in: - File: Flask_AWS/PlagiarismDefender/home.py - > Line 31: sentences = sentence_splitter.tokenize(text_to_filter) - File: Flask_AWS/PlagiarismDefender/home.py - > Line 40: is_it_plagiarized = str(probability_of_plagiarism / len(sentences) * 100) + '%' - File: Flask_AWS/PlagiarismDefender/home.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('plagiarizer-submit.html') -File: Flask_AWS/PlagiarismDefender/home.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('plagiarizer-results.html',text_to_filter=text_to_filter, is_it_plagiarized=is_it_plagiarized) - - - -umutcoskun/flask-ready -https://github.com/umutcoskun/flask-ready -Entry file: flask-ready/src/app/__init__.py -Scanned: 2016-10-19 11:22:20.414016 -Vulnerability 1: -File: flask-ready/src/app/auth/validators.py - > User input at line 15, trigger word ".data": - entity = self.model.query.filter(self.field == field.data).first() -File: flask-ready/src/app/auth/validators.py - > reaches line 15, trigger word "filter(": - entity = self.model.query.filter(self.field == field.data).first() - -Vulnerability 2: -File: flask-ready/src/app/auth/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -File: flask-ready/src/app/auth/views.py - > reaches line 58, trigger word "flash(": - flash('Welcome {}'.format(user.name), 'info') - - - -Amertz08/flask-docker -https://github.com/Amertz08/flask-docker -Entry file: flask-docker/app/setup.py -Scanned: 2016-10-19 11:22:21.743206 -No vulnerabilities found. - - -viniciusramos91/flask-skeleton -https://github.com/viniciusramos91/flask-skeleton -Entry file: None -Scanned: 2016-10-19 11:22:22.257912 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/viniciusramos91/flask-skeleton. - -priteshgudge/django-flask -https://github.com/priteshgudge/django-flask -Entry file: django-flask/app.py -Scanned: 2016-10-19 11:22:23.462749 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lalvarezguillen/inmobiliaria_flask -https://github.com/lalvarezguillen/inmobiliaria_flask -Entry file: inmobiliaria_flask/web_stuff/web_app.py -Scanned: 2016-10-19 11:22:24.837494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pythonadventurer/flask-blog -https://github.com/pythonadventurer/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:22:25.410664 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -JW275/flask_study -https://github.com/JW275/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-19 11:22:25.921434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smeggingsmegger/flask-cookiecutter -https://github.com/smeggingsmegger/flask-cookiecutter -Entry file: flask-cookiecutter/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/__init__.py -Scanned: 2016-10-19 11:22:27.465359 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdumay/flask-zookeeper -https://github.com/cdumay/flask-zookeeper -Entry file: flask-zookeeper/tests/test_blueprint.py -Scanned: 2016-10-19 11:22:28.853031 -No vulnerabilities found. - - -vaishakp9/flask-ask -https://github.com/vaishakp9/flask-ask -Entry file: flask-ask/server.py -Scanned: 2016-10-19 11:22:30.237397 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vesperalwall860/flask_blank -https://github.com/vesperalwall860/flask_blank -Entry file: flask_blank/project/__init__.py -Scanned: 2016-10-19 11:22:32.811160 -No vulnerabilities found. - - -natfoster82/flask-alcohol -https://github.com/natfoster82/flask-alcohol -Entry file: flask-alcohol/example/app.py -Scanned: 2016-10-19 11:22:34.213992 -Vulnerability 1: -File: flask-alcohol/example/app.py - > User input at line 138, trigger word "get(": - email = request.json.get('email') -File: flask-alcohol/example/app.py - > reaches line 139, trigger word "filter(": - user = cls.query.filter(db.func.lower(User.email) == db.func.lower(email)).first() - -Vulnerability 2: -File: flask-alcohol/example/app.py - > User input at line 279, trigger word "get(": - project_id = request.args.get('project_id') -Reassigned in: - File: flask-alcohol/example/app.py - > Line 282: ret_MAYBE_FUNCTION_NAME = query -File: flask-alcohol/example/app.py - > reaches line 278, trigger word "filter(": - query = query.filter(Post.last_published_at != None) - -Vulnerability 3: -File: flask-alcohol/example/app.py - > User input at line 279, trigger word "get(": - project_id = request.args.get('project_id') -Reassigned in: - File: flask-alcohol/example/app.py - > Line 282: ret_MAYBE_FUNCTION_NAME = query -File: flask-alcohol/example/app.py - > reaches line 281, trigger word "filter(": - query = query.filter(Post.project_id == project_id) - - - -liuzhangpei/myFlask -https://github.com/liuzhangpei/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-19 11:22:34.780833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stevenzhang18/Indeed-Flask -https://github.com/stevenzhang18/Indeed-Flask -Entry file: Indeed-Flask/main.py -Scanned: 2016-10-19 11:22:47.817399 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RAIRLab/Talos-Flask -https://github.com/RAIRLab/Talos-Flask -Entry file: None -Scanned: 2016-10-19 11:22:49.103864 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RAIRLab/Talos-Flask. - -stewill/flask_web -https://github.com/stewill/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-19 11:22:49.697779 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -bradkarels/restful-flask -https://github.com/bradkarels/restful-flask -Entry file: restful-flask/hello.py -Scanned: 2016-10-19 11:22:50.906756 -No vulnerabilities found. - - -linkcheng/flask_notes -https://github.com/linkcheng/flask_notes -Entry file: flask_notes/hello.py -Scanned: 2016-10-19 11:22:52.212222 -No vulnerabilities found. - - -Mamun-dueee/Flask-microblog -https://github.com/Mamun-dueee/Flask-microblog -Entry file: None -Scanned: 2016-10-19 11:22:59.986571 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -andrealmar/flask-microblog -https://github.com/andrealmar/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:23:00.475137 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vdnhnguyen/flask-upload -https://github.com/vdnhnguyen/flask-upload -Entry file: flask-upload/index.py -Scanned: 2016-10-19 11:23:00.991896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smrati/dockerize_flask -https://github.com/smrati/dockerize_flask -Entry file: dockerize_flask/app/__init__.py -Scanned: 2016-10-19 11:23:02.321767 -No vulnerabilities found. - - -cococohen/Microblog -https://github.com/cococohen/Microblog -Entry file: Microblog/flask/lib/python3.4/site-packages/flask_openid.py -Scanned: 2016-10-19 11:23:03.781188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BeFunes/App-FlaskExercise -https://github.com/BeFunes/App-FlaskExercise -Entry file: App-FlaskExercise/app.py -Scanned: 2016-10-19 11:23:05.040284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nonja/FlaskArticleSearchNYT -https://github.com/Nonja/FlaskArticleSearchNYT -Entry file: FlaskArticleSearchNYT/app/__init__.py -Scanned: 2016-10-19 11:23:06.255628 -Vulnerability 1: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 23, trigger word "get(": - begindate = request.args.get('begindate', '').replace('-', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 23, trigger word "replace(": - begindate = request.args.get('begindate', '').replace('-', '') - -Vulnerability 2: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 24, trigger word "get(": - enddate = request.args.get('enddate', '').replace('-', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 24, trigger word "replace(": - enddate = request.args.get('enddate', '').replace('-', '') - -Vulnerability 3: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 22, trigger word "get(": - searchquery = request.args.get('searchrequest', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(news=news, results=results, totalpages=totalpages, page=page, searchquery=searchquery) - -Vulnerability 4: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 31: page = 0 - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) - File: FlaskArticleSearchNYT/app/hummus.py - > Line 41: page = data['response']['meta']['offset'] / 10 + 1 -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(news=news, results=results, totalpages=totalpages, page=page, searchquery=searchquery) - - - -mr1holmes/planup-backend -https://github.com/mr1holmes/planup-backend -Entry file: planup-backend/flaskapp/__init__.py -Scanned: 2016-10-19 11:23:07.570163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonuidavies/Discover -https://github.com/tonuidavies/Discover -Entry file: Discover/app.py -Scanned: 2016-10-19 11:23:15.916884 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Discover/venv/lib/python2.7/genericpath.py - -RydrDojo/Ridr_app -https://github.com/RydrDojo/Ridr_app -Entry file: None -Scanned: 2016-10-19 11:23:27.028933 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thomasobrien99/flask-movie-crud -https://github.com/thomasobrien99/flask-movie-crud -Entry file: flask-movie-crud/app.py -Scanned: 2016-10-19 11:23:28.404940 -Vulnerability 1: -File: flask-movie-crud/app.py - > User input at line 47, trigger word "get(": - show_dir = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/directors/show.html',dir=show_dir) - -Vulnerability 2: -File: flask-movie-crud/app.py - > User input at line 52, trigger word "get(": - edit_dir = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/directors/edit.html',dir=edit_dir) - -Vulnerability 3: -File: flask-movie-crud/app.py - > User input at line 73, trigger word "get(": - director = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 74, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/index.html',director=director) - -Vulnerability 4: -File: flask-movie-crud/app.py - > User input at line 86, trigger word "get(": - director = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 88, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/new.html',director=director, tags=tags) - -Vulnerability 5: -File: flask-movie-crud/app.py - > User input at line 92, trigger word "get(": - movie = Movie.query.get(movie_id) -File: flask-movie-crud/app.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/edit.html',movie=movie, tags=tags) - -Vulnerability 6: -File: flask-movie-crud/app.py - > User input at line 98, trigger word "get(": - movie = Movie.query.get(movie_id) -File: flask-movie-crud/app.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/show.html',movie=movie) - -Vulnerability 7: -File: flask-movie-crud/app.py - > User input at line 136, trigger word "get(": - tag = Tag.query.get(id) -File: flask-movie-crud/app.py - > reaches line 137, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/show.html',tag=tag) - -Vulnerability 8: -File: flask-movie-crud/app.py - > User input at line 141, trigger word "get(": - tag = Tag.query.get(id) -File: flask-movie-crud/app.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/edit.html',tag=tag) - - - -thomasobrien99/flask_user_template -https://github.com/thomasobrien99/flask_user_template -Entry file: flask_user_template/app.py -Scanned: 2016-10-19 11:23:29.769390 -No vulnerabilities found. - - -krpeacock/flask_migrate_template -https://github.com/krpeacock/flask_migrate_template -Entry file: flask_migrate_template/app.py -Scanned: 2016-10-19 11:23:32.007516 -No vulnerabilities found. - - -thomasobrien99/flask-migrate-and-auth -https://github.com/thomasobrien99/flask-migrate-and-auth -Entry file: flask-migrate-and-auth/app.py -Scanned: 2016-10-19 11:23:33.834462 -No vulnerabilities found. - - -vmuguerzac/flask_by_example -https://github.com/vmuguerzac/flask_by_example -Entry file: flask_by_example/flask_by_example.py -Scanned: 2016-10-19 11:23:35.132673 -No vulnerabilities found. - - -Edubya77/hellow_world_flask -https://github.com/Edubya77/hellow_world_flask -Entry file: hellow_world_flask/hello_world.py -Scanned: 2016-10-19 11:23:36.394978 -No vulnerabilities found. - - -chavli/heroku-flask-start -https://github.com/chavli/heroku-flask-start -Entry file: heroku-flask-start/app.py -Scanned: 2016-10-19 11:23:37.763599 -No vulnerabilities found. - - -xilixjd/flask_project_blog -https://github.com/xilixjd/flask_project_blog -Entry file: flask_project_blog/models.py -Scanned: 2016-10-19 11:23:39.725199 -No vulnerabilities found. - - -kmalfatti/library-flask-app -https://github.com/kmalfatti/library-flask-app -Entry file: library-flask-app/app.py -Scanned: 2016-10-19 11:23:41.036482 -Vulnerability 1: -File: library-flask-app/app.py - > User input at line 63, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/index.html',author=found_author) - -Vulnerability 2: -File: library-flask-app/app.py - > User input at line 68, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/new.html',author=found_author) - - - -rbudzak/learnFlaskMigrate -https://github.com/rbudzak/learnFlaskMigrate -Entry file: learnFlaskMigrate/app.py -Scanned: 2016-10-19 11:23:42.367054 -No vulnerabilities found. - - -sh4nks/flask-caching -https://github.com/sh4nks/flask-caching -Entry file: flask-caching/setup.py -Scanned: 2016-10-19 11:23:46.002784 -No vulnerabilities found. - - -mani-python/flask -https://github.com/mani-python/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:23:49.816913 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -manikandaraj123ster/flask -https://github.com/manikandaraj123ster/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:23:50.371845 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:23:50.886156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -salhernandez/Flask -https://github.com/salhernandez/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:23:51.399992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -murilobsd/zeus -https://github.com/murilobsd/zeus -Entry file: None -Scanned: 2016-10-19 11:23:53.005183 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/murilobsd/zeus. - -xuelangZF/NaHan -https://github.com/xuelangZF/NaHan -Entry file: NaHan/nahan/__init__.py -Scanned: 2016-10-19 11:23:55.828688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haklabrador/podatci-s-burza -https://github.com/haklabrador/podatci-s-burza -Entry file: podatci-s-burza/webserver.py -Scanned: 2016-10-19 11:23:57.253911 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -weinbergdavid/python-flask-security -https://github.com/weinbergdavid/python-flask-security -Entry file: python-flask-security/run.py -Scanned: 2016-10-19 11:24:19.890465 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -aaossa/flask-openshift -https://github.com/aaossa/flask-openshift -Entry file: flask-openshift/flask_openshift_template.py -Scanned: 2016-10-19 11:24:21.468402 -Vulnerability 1: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - -Vulnerability 2: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - - - -nsujan/flaskbot -https://github.com/nsujan/flaskbot -Entry file: flaskbot/wsgi/myflaskapp.py -Scanned: 2016-10-19 11:24:23.327150 -No vulnerabilities found. - - -davbrink/flaskblog -https://github.com/davbrink/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:24:24.338433 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ToDolin/flaskgit -https://github.com/ToDolin/flaskgit -Entry file: flaskgit/flasky/app/__init__.py -Scanned: 2016-10-19 11:24:25.709021 -No vulnerabilities found. - - -yolandaz/flaskcars -https://github.com/yolandaz/flaskcars -Entry file: flaskcars/app.py -Scanned: 2016-10-19 11:24:31.857065 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskcars/venv/lib/python2.7/genericpath.py - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: None -Scanned: 2016-10-19 11:24:32.372315 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:24:32.867797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Halcae/flaskapp -https://github.com/Halcae/flaskapp -Entry file: None -Scanned: 2016-10-19 11:24:33.417149 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Halcae/flaskapp. - -themuppet2/flasktaskr -https://github.com/themuppet2/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:24:33.944196 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:24:34.459644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stevehaigh/flasktest -https://github.com/stevehaigh/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 11:24:34.983195 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juniorkrvl/flasky -https://github.com/juniorkrvl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:24:35.485738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 11:24:37.038187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SuZhiBai/flaskblog -https://github.com/SuZhiBai/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:24:38.552529 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ncmadhu/FlaskDemo -https://github.com/ncmadhu/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:24:40.064633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AkshayBhagat/FlaskApp -https://github.com/AkshayBhagat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:24:41.713254 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Qqlick/flaskRP -https://github.com/Qqlick/flaskRP -Entry file: flaskRP/flaskRP.py -Scanned: 2016-10-19 11:24:45.974856 -Vulnerability 1: -File: flaskRP/flaskRP.py - > User input at line 46, trigger word "form[": - title = request.form['title'] -File: flaskRP/flaskRP.py - > reaches line 53, trigger word "execute(": - g.db.execute('INSERT into posts (title, posts) VALUES (?,?)', [title, post]) - -Vulnerability 2: -File: flaskRP/flaskRP.py - > User input at line 47, trigger word "form[": - post = request.form['post'] -File: flaskRP/flaskRP.py - > reaches line 53, trigger word "execute(": - g.db.execute('INSERT into posts (title, posts) VALUES (?,?)', [title, post]) - - - -YoDaMa/FlaskApp -https://github.com/YoDaMa/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:24:46.623645 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valasek/taekwondo-flask -https://github.com/valasek/taekwondo-flask -Entry file: None -Scanned: 2016-10-19 11:24:49.256765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/valasek/taekwondo-flask. - -erose/tictactoe-flask -https://github.com/erose/tictactoe-flask -Entry file: tictactoe-flask/app.py -Scanned: 2016-10-19 11:24:52.518699 -No vulnerabilities found. - - -alexeib2014/Flask-Android -https://github.com/alexeib2014/Flask-Android -Entry file: Flask-Android/flask_sqlalchemy.py -Scanned: 2016-10-19 11:24:53.116920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jdgwartney/flask-blueprint -https://github.com/jdgwartney/flask-blueprint -Entry file: flask-blueprint/application/__init__.py -Scanned: 2016-10-19 11:24:54.462117 -No vulnerabilities found. - - -stylianos-kampakis/flask-test -https://github.com/stylianos-kampakis/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 11:24:55.015753 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -rjantos/flask-blog -https://github.com/rjantos/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:24:57.525649 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -leofofeo/flask-stuff -https://github.com/leofofeo/flask-stuff -Entry file: flask-stuff/flask_test.py -Scanned: 2016-10-19 11:25:03.811257 -No vulnerabilities found. - - -greenapplepark/flask_docker -https://github.com/greenapplepark/flask_docker -Entry file: flask_docker/app/flaskEntry.py -Scanned: 2016-10-19 11:25:23.172187 -No vulnerabilities found. - - -karloku/beginners_flask -https://github.com/karloku/beginners_flask -Entry file: beginners_flask/application/__init__.py -Scanned: 2016-10-19 11:25:24.529480 -No vulnerabilities found. - - -s2tephen/flask-network -https://github.com/s2tephen/flask-network -Entry file: flask-network/app.py -Scanned: 2016-10-19 11:25:25.795089 -No vulnerabilities found. - - -julianparismorgan/flask_cellcounter -https://github.com/julianparismorgan/flask_cellcounter -Entry file: flask_cellcounter/cell-app.py -Scanned: 2016-10-19 11:25:30.221215 -No vulnerabilities found. - - -jdgwartney/hello-flask -https://github.com/jdgwartney/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 11:25:30.815264 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -rohanagrawal/flask_social -https://github.com/rohanagrawal/flask_social -Entry file: flask_social/app.py -Scanned: 2016-10-19 11:25:32.691334 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -monburan/learn_flask -https://github.com/monburan/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-19 11:25:33.201587 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChrisXiongWHU/flask_test -https://github.com/ChrisXiongWHU/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:25:33.760680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -falterfriday/python-flask -https://github.com/falterfriday/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 11:25:34.301202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lklacar/flask-api -https://github.com/lklacar/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-19 11:25:35.295544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Amertz08/flask-docker -https://github.com/Amertz08/flask-docker -Entry file: flask-docker/app/setup.py -Scanned: 2016-10-19 11:25:36.677345 -No vulnerabilities found. - - -viniciusramos91/flask-skeleton -https://github.com/viniciusramos91/flask-skeleton -Entry file: None -Scanned: 2016-10-19 11:25:37.184146 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/viniciusramos91/flask-skeleton. - -jiaominlong/flask-web -https://github.com/jiaominlong/flask-web -Entry file: flask-web/app/__init__.py -Scanned: 2016-10-19 11:25:38.559587 -No vulnerabilities found. - - -jcue/flask-blog -https://github.com/jcue/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:25:39.097173 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -cdumay/flask-tat -https://github.com/cdumay/flask-tat -Entry file: flask-tat/examples/simple.py -Scanned: 2016-10-19 11:25:40.438714 -No vulnerabilities found. - - -metiago/flask-skeleton -https://github.com/metiago/flask-skeleton -Entry file: None -Scanned: 2016-10-19 11:25:41.956739 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/metiago/flask-skeleton. - -xubiaosunny/flask-blog -https://github.com/xubiaosunny/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:25:43.510810 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rodolfolottin/flask-sortingservice -https://github.com/rodolfolottin/flask-sortingservice -Entry file: flask-sortingservice/src/app.py -Scanned: 2016-10-19 11:25:49.343540 -No vulnerabilities found. - - -coder-zhuyu/flask-framework -https://github.com/coder-zhuyu/flask-framework -Entry file: flask-framework/app/__init__.py -Scanned: 2016-10-19 11:25:50.838296 -Vulnerability 1: -File: flask-framework/app/auth/views.py - > User input at line 71, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-framework/app/auth/views.py - > Line 73: pagination = query.paginate(page,per_page=current_app.config['FLASKY_USERS_PER_PAGE'], error_out=False) - File: flask-framework/app/auth/views.py - > Line 76: users = pagination.items -File: flask-framework/app/auth/views.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('auth/confirm.html',pagination=pagination, users=users) - - - -wizardbeard/demoservice_flask -https://github.com/wizardbeard/demoservice_flask -Entry file: demoservice_flask/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 11:25:58.969605 -No vulnerabilities found. - - -mvbn6789/flask-blog -https://github.com/mvbn6789/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:25:59.551853 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -andrew-j-price/python-flask -https://github.com/andrew-j-price/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 11:26:00.061985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VarmintWorks/VarmintFlask -https://github.com/VarmintWorks/VarmintFlask -Entry file: VarmintFlask/main.py -Scanned: 2016-10-19 11:26:01.537632 -No vulnerabilities found. - - -dqisme/Learn-Flask -https://github.com/dqisme/Learn-Flask -Entry file: Learn-Flask/hello.py -Scanned: 2016-10-19 11:26:02.801605 -No vulnerabilities found. - - -bakslash/flask_social -https://github.com/bakslash/flask_social -Entry file: flask_social/app.py -Scanned: 2016-10-19 11:26:03.296793 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jiri-fiala/flask-hellow -https://github.com/jiri-fiala/flask-hellow -Entry file: flask-hellow/app.py -Scanned: 2016-10-19 11:26:04.537136 -No vulnerabilities found. - - -fmlvn/quiz -https://github.com/fmlvn/quiz -Entry file: quiz/quiz/__init__.py -Scanned: 2016-10-19 11:26:06.019981 -No vulnerabilities found. - - -atelic/flask-react-skeleton -https://github.com/atelic/flask-react-skeleton -Entry file: None -Scanned: 2016-10-19 11:26:24.602291 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/atelic/flask-react-skeleton. - -maikeulb/flask-by-example -https://github.com/maikeulb/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:26:25.244112 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephenjjones/flask-auth-service -https://github.com/stephenjjones/flask-auth-service -Entry file: flask-auth-service/app/__init__.py -Scanned: 2016-10-19 11:26:27.492853 -Vulnerability 1: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flask-auth-service/app/main/views.py - > User input at line 31, trigger word "get(": - user = User.query.get(id) -File: flask-auth-service/app/main/views.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('email'user.email) - - - -cdumay/flask-graylog-bundle -https://github.com/cdumay/flask-graylog-bundle -Entry file: flask-graylog-bundle/examples/auth.py -Scanned: 2016-10-19 11:26:28.866683 -No vulnerabilities found. - - -kawilliams/new-db-Pronto-Flask -https://github.com/kawilliams/new-db-Pronto-Flask -Entry file: new-db-Pronto-Flask/syllabi_manager.py -Scanned: 2016-10-19 11:26:34.073369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xufuou/flask-by-example -https://github.com/xufuou/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:26:35.253666 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Michael728/awesome-flask-todo -https://github.com/Michael728/awesome-flask-todo -Entry file: None -Scanned: 2016-10-19 11:26:35.749096 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Michael728/awesome-flask-todo. - -ayttew/flask-simple-app -https://github.com/ayttew/flask-simple-app -Entry file: flask-simple-app/app/src/app.py -Scanned: 2016-10-19 11:26:37.064589 -No vulnerabilities found. - - -chiefspace/flask_media_streaming_server -https://github.com/chiefspace/flask_media_streaming_server -Entry file: flask_media_streaming_server/run.py -Scanned: 2016-10-19 11:26:40.591141 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_media_streaming_server/flask/lib/python2.7/genericpath.py - -vigevenoj/flask-hue-sensors -https://github.com/vigevenoj/flask-hue-sensors -Entry file: flask-hue-sensors/app/__init__.py -Scanned: 2016-10-19 11:26:41.829111 -No vulnerabilities found. - - -kyouko-taiga/Flask-SocketAPI -https://github.com/kyouko-taiga/Flask-SocketAPI -Entry file: Flask-SocketAPI/test_socketapi.py -Scanned: 2016-10-19 11:26:43.275762 -No vulnerabilities found. - - -Athsheep/Flask_Web_Development -https://github.com/Athsheep/Flask_Web_Development -Entry file: Flask_Web_Development/app/__init__.py -Scanned: 2016-10-19 11:26:49.009746 -Vulnerability 1: -File: Flask_Web_Development/app/main/views.py - > User input at line 32, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 40: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 42: posts = pagination.items - File: Flask_Web_Development/app/main/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flask_Web_Development/app/main/views.py - > User input at line 35, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 33: show_followed = False - File: Flask_Web_Development/app/main/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flask_Web_Development/app/main/views.py - > User input at line 136, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 138: page = post.comments.count() - 1 / 10 + 1 - File: Flask_Web_Development/app/main/views.py - > Line 139: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 141: comments = pagination.items - File: Flask_Web_Development/app/main/views.py - > Line 135: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask_Web_Development/app/main/views.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: Flask_Web_Development/app/main/views.py - > User input at line 182, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 183: pagination = user.followers.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 185: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask_Web_Development/app/main/views.py - > Line 181: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 187, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: Flask_Web_Development/app/main/views.py - > User input at line 196, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 197: pagination = user.followed.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 199: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask_Web_Development/app/main/views.py - > Line 195: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 201, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flask_Web_Development/app/main/views.py - > User input at line 223, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 225: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 227: comments = pagination.items -File: Flask_Web_Development/app/main/views.py - > reaches line 229, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 7: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 20, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 23, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 11: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 12: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 13: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 14: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 15: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 16: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 15, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 17: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 18, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 18: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 19: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 20: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 21: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -Omrigan/flask-github-ci -https://github.com/Omrigan/flask-github-ci -Entry file: flask-github-ci/service.py -Scanned: 2016-10-19 11:26:50.418809 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -kukuhsain/learn-flask-python -https://github.com/kukuhsain/learn-flask-python -Entry file: learn-flask-python/helloworld.py -Scanned: 2016-10-19 11:26:51.665402 -No vulnerabilities found. - - -mikefromit/flask-jsonschema-example -https://github.com/mikefromit/flask-jsonschema-example -Entry file: flask-jsonschema-example/app.py -Scanned: 2016-10-19 11:26:54.006292 -No vulnerabilities found. - - -learningpython08/flask-file-sharing -https://github.com/learningpython08/flask-file-sharing -Entry file: flask-file-sharing/upload/handlers.py -Scanned: 2016-10-19 11:26:55.381770 -Vulnerability 1: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 86, trigger word "url_for(": - prv_url = url_for('preview',path=url_path, _external=True) - -Vulnerability 2: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 87, trigger word "url_for(": - dl_url = url_for('download',path=url_path, _external=True) - -Vulnerability 3: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 89, trigger word "jsonify(": - resp = jsonify(download=dl_url, preview=prv_url) - - - -bmd/flask-docker-cookiecutter -https://github.com/bmd/flask-docker-cookiecutter -Entry file: flask-docker-cookiecutter/{{ cookiecutter.app_name }}/{{ cookiecutter.app_name }}/{{ cookiecutter.app_name }}/app.py -Scanned: 2016-10-19 11:26:56.618423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StephenWeber/rundeck-sensu-flask -https://github.com/StephenWeber/rundeck-sensu-flask -Entry file: rundeck-sensu-flask/rsf/__init__.py -Scanned: 2016-10-19 11:26:58.009534 -No vulnerabilities found. - - -chiefspace/miguelgrinberg_flask_mega -https://github.com/chiefspace/miguelgrinberg_flask_mega -Entry file: None -Scanned: 2016-10-19 11:27:05.749218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -krisekenes/productsDashFlask -https://github.com/krisekenes/productsDashFlask -Entry file: productsDashFlask/server.py -Scanned: 2016-10-19 11:27:07.149100 -No vulnerabilities found. - - -beibeiyang/cf-flask-bokeh-demo -https://github.com/beibeiyang/cf-flask-bokeh-demo -Entry file: cf-flask-bokeh-demo/stocks.py -Scanned: 2016-10-19 11:27:08.400735 -Vulnerability 1: -File: cf-flask-bokeh-demo/stocks.py - > User input at line 47, trigger word "get(": - symbol = request.args.get('symbol') -Reassigned in: - File: cf-flask-bokeh-demo/stocks.py - > Line 52: api_url = 'https://www.quandl.com/api/v1/datasets/WIKI/%s.json' % symbol - File: cf-flask-bokeh-demo/stocks.py - > Line 55: raw_data = session.get(api_url).text - File: cf-flask-bokeh-demo/stocks.py - > Line 56: json_data = json.loads(raw_data) - File: cf-flask-bokeh-demo/stocks.py - > Line 59: df = DataFrame(data=json_data['data'], columns=json_data['column_names']) - File: cf-flask-bokeh-demo/stocks.py - > Line 68: df['left'] = pd.DatetimeIndex(df.Date) - pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 69: df['right'] = pd.DatetimeIndex(df.Date) + pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 114: header = '

%s of %s

Name: %s

Description (from our data provider): %s

Zoom into the chart to see more detail.

' % (json_data['source_name'], json_data['code'], json_data['name'], json_data['description']) -File: cf-flask-bokeh-demo/stocks.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',script=script, div=div, header=header) - -Vulnerability 2: -File: cf-flask-bokeh-demo/stocks.py - > User input at line 55, trigger word "get(": - raw_data = session.get(api_url).text -Reassigned in: - File: cf-flask-bokeh-demo/stocks.py - > Line 56: json_data = json.loads(raw_data) - File: cf-flask-bokeh-demo/stocks.py - > Line 59: df = DataFrame(data=json_data['data'], columns=json_data['column_names']) - File: cf-flask-bokeh-demo/stocks.py - > Line 68: df['left'] = pd.DatetimeIndex(df.Date) - pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 69: df['right'] = pd.DatetimeIndex(df.Date) + pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 114: header = '

%s of %s

Name: %s

Description (from our data provider): %s

Zoom into the chart to see more detail.

' % (json_data['source_name'], json_data['code'], json_data['name'], json_data['description']) -File: cf-flask-bokeh-demo/stocks.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',script=script, div=div, header=header) - - - -Artadys/flask-by-example -https://github.com/Artadys/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:27:09.068190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gorogoro13/mFlask-TumbleLog -https://github.com/gorogoro13/mFlask-TumbleLog -Entry file: mFlask-TumbleLog/init.py -Scanned: 2016-10-19 11:27:10.266402 -No vulnerabilities found. - - -saileshpatnala/flask-by-example -https://github.com/saileshpatnala/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:27:10.882260 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kontiomaa/flask-sqlalchemy-demo -https://github.com/Kontiomaa/flask-sqlalchemy-demo -Entry file: flask-sqlalchemy-demo/app.py -Scanned: 2016-10-19 11:27:12.658437 -Vulnerability 1: -File: flask-sqlalchemy-demo/app.py - > User input at line 76, trigger word "get(": - order = Order.query.get(order_id) -Reassigned in: - File: flask-sqlalchemy-demo/app.py - > Line 81: orderData = 'Orderer''status''Items'order.customer.usernameorder.status['Name''Amount'row.itemonrow.productNamerow.count for row in order.orderrow] -File: flask-sqlalchemy-demo/app.py - > reaches line 83, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(orderData) - - - -1131909224/flask -https://github.com/1131909224/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:27:26.255687 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -RangerColt/Flask -https://github.com/RangerColt/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:27:29.256755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wangrenlearn/flask -https://github.com/wangrenlearn/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:27:33.817363 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -dongshuiquan/flasky -https://github.com/dongshuiquan/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:27:37.253716 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caseydunham/flaskr -https://github.com/caseydunham/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:27:37.785323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -francium/flaskr -https://github.com/francium/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:27:39.288374 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Qqlick/Flasktaskr -https://github.com/Qqlick/Flasktaskr -Entry file: Flasktaskr/flask_api.py -Scanned: 2016-10-19 11:27:42.820227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yolandaz/flaskcars -https://github.com/yolandaz/flaskcars -Entry file: flaskcars/app.py -Scanned: 2016-10-19 11:27:44.462933 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskcars/venv/lib/python2.7/genericpath.py - -PansFortress/flaskr -https://github.com/PansFortress/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:27:44.973872 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -goodman1209/flaskrestserver -https://github.com/goodman1209/flaskrestserver -Entry file: flaskrestserver/hello.py -Scanned: 2016-10-19 11:27:52.269843 -No vulnerabilities found. - - -Ivicel/flasky -https://github.com/Ivicel/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:27:52.779673 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atsk1618/flasko -https://github.com/atsk1618/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-19 11:27:53.373291 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -k0itsu/flasktaskr -https://github.com/k0itsu/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:27:53.874425 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -penglee87/flaskblog -https://github.com/penglee87/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:27:54.387535 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -davbrink/flasktaskr -https://github.com/davbrink/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:27:55.928843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kermit95/Flaskr -https://github.com/Kermit95/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:27:57.421735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juniorkrvl/flasky -https://github.com/juniorkrvl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:27:58.911431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Halcae/flaskapp -https://github.com/Halcae/flaskapp -Entry file: None -Scanned: 2016-10-19 11:28:00.404212 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Halcae/flaskapp. - -ptrees/flaskr -https://github.com/ptrees/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:28:07.896248 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langlangago/Flasky -https://github.com/langlangago/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-19 11:28:10.428812 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcue/flasktaskr -https://github.com/jcue/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:28:10.922366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qhdong/flaskr -https://github.com/qhdong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:28:11.420906 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aksenovpb/flaskproject -https://github.com/aksenovpb/flaskproject -Entry file: None -Scanned: 2016-10-19 11:28:11.915154 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ncmadhu/FlaskDemo -https://github.com/ncmadhu/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:28:12.425194 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LiKePAIN/FlaskStudy -https://github.com/LiKePAIN/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-19 11:28:12.926257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playscforever/flaskProject -https://github.com/playscforever/flaskProject -Entry file: flaskProject/helloFlask/app.py -Scanned: 2016-10-19 11:28:29.426471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MarkoArsenovic/FlaskAuth -https://github.com/MarkoArsenovic/FlaskAuth -Entry file: FlaskAuth/testapp/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 11:28:30.160676 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PythonWorkshop/TensorFlowFlask -https://github.com/PythonWorkshop/TensorFlowFlask -Entry file: TensorFlowFlask/main.py -Scanned: 2016-10-19 11:28:33.683886 -Vulnerability 1: -File: TensorFlowFlask/main.py - > User input at line 48, trigger word ".data": - filename = secure_filename(form.training_data.data.filename) -Reassigned in: - File: TensorFlowFlask/main.py - > Line 52: dataframe = pd.read_csv('wine_quality/data/' + filename,sep=',') - File: TensorFlowFlask/main.py - > Line 55: filename = None -File: TensorFlowFlask/main.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('test_data_upload.html',form=form, filename=filename) - - - -lucilecoutouly/back-flask -https://github.com/lucilecoutouly/back-flask -Entry file: back-flask/back_nsa/app/__init__.py -Scanned: 2016-10-19 11:28:35.667885 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jdgwartney/flask-blueprint -https://github.com/jdgwartney/flask-blueprint -Entry file: flask-blueprint/application/__init__.py -Scanned: 2016-10-19 11:28:36.946633 -No vulnerabilities found. - - -ketanrk/flask_practice -https://github.com/ketanrk/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-19 11:28:37.516616 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mehemken/generic-flask -https://github.com/mehemken/generic-flask -Entry file: generic-flask/app.py -Scanned: 2016-10-19 11:28:38.797983 -No vulnerabilities found. - - -abhishekg785/flask-gevent -https://github.com/abhishekg785/flask-gevent -Entry file: flask-gevent/chatServer.py -Scanned: 2016-10-19 11:28:40.122155 -No vulnerabilities found. - - -ja8zyjits/redis-flask -https://github.com/ja8zyjits/redis-flask -Entry file: redis-flask/flask_app.py -Scanned: 2016-10-19 11:28:41.404270 -Vulnerability 1: -File: redis-flask/flask_app.py - > User input at line 13, trigger word "get(": - number = int(request.values.get('number')) -Reassigned in: - File: redis-flask/flask_app.py - > Line 14: value = find_sum(number) -File: redis-flask/flask_app.py - > reaches line 15, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sum_finder.html',sum_value=value) - - - -bigzhao/flask-wechat -https://github.com/bigzhao/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-19 11:28:41.921377 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -szparag3/flask-blog -https://github.com/szparag3/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:28:44.447130 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Keita1/flask-blog -https://github.com/Keita1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:28:46.004723 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -vishukamble/PythonFlask -https://github.com/vishukamble/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 11:28:55.371551 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -cooleo/flask-cassandra -https://github.com/cooleo/flask-cassandra -Entry file: flask-cassandra/app/__init__.py -Scanned: 2016-10-19 11:28:56.846676 -Vulnerability 1: -File: flask-cassandra/app/models/app.py - > User input at line 301, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-cassandra/app/models/app.py - > Line 304: user = User(username=username) - File: flask-cassandra/app/models/app.py - > Line 307: session['id'] = user.id - File: flask-cassandra/app/models/app.py - > Line 309: user = current_user() - File: flask-cassandra/app/models/app.py - > Line 302: user = User.query.filter_by(username=username).first() - File: flask-cassandra/app/models/app.py - > Line 308: ret_MAYBE_FUNCTION_NAME = redirect('/') -File: flask-cassandra/app/models/app.py - > reaches line 310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',user=user) - - - -ggrumbley/flask_example -https://github.com/ggrumbley/flask_example -Entry file: None -Scanned: 2016-10-19 11:28:57.362718 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -themikepearce/flask-blog -https://github.com/themikepearce/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:28:57.902086 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Momingcoder/learn-flask -https://github.com/Momingcoder/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 11:28:58.615150 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -greenapplepark/flask_docker -https://github.com/greenapplepark/flask_docker -Entry file: flask_docker/app/flaskEntry.py -Scanned: 2016-10-19 11:28:59.855385 -No vulnerabilities found. - - -karloku/beginners_flask -https://github.com/karloku/beginners_flask -Entry file: beginners_flask/application/__init__.py -Scanned: 2016-10-19 11:29:01.213259 -No vulnerabilities found. - - -s2tephen/flask-network -https://github.com/s2tephen/flask-network -Entry file: flask-network/app.py -Scanned: 2016-10-19 11:29:02.444033 -No vulnerabilities found. - - -julianparismorgan/flask_cellcounter -https://github.com/julianparismorgan/flask_cellcounter -Entry file: flask_cellcounter/cell-app.py -Scanned: 2016-10-19 11:29:06.960869 -No vulnerabilities found. - - -vigneshrajkumar/simple-flask -https://github.com/vigneshrajkumar/simple-flask -Entry file: simple-flask/simple.py -Scanned: 2016-10-19 11:29:08.257763 -No vulnerabilities found. - - -linkinshurik/api_flask -https://github.com/linkinshurik/api_flask -Entry file: api_flask/app/__init__.py -Scanned: 2016-10-19 11:29:10.641754 -No vulnerabilities found. - - -pranavbadami/damson-flask -https://github.com/pranavbadami/damson-flask -Entry file: damson-flask/damson.py -Scanned: 2016-10-19 11:29:13.871107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coding2000/flask_web -https://github.com/coding2000/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-19 11:29:14.431548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -shihanng/appengine-flask -https://github.com/shihanng/appengine-flask -Entry file: appengine-flask/src/application/__init__.py -Scanned: 2016-10-19 11:29:15.671888 -No vulnerabilities found. - - -cristopher-rodrigues/phyton-flask -https://github.com/cristopher-rodrigues/phyton-flask -Entry file: None -Scanned: 2016-10-19 11:29:19.553189 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alodavi/flask_blog -https://github.com/alodavi/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:29:20.052471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sharan-monikantan/hello-flask -https://github.com/sharan-monikantan/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 11:29:20.611243 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -Mubbly/flask_test -https://github.com/Mubbly/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:29:21.171124 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asherkhb/flask-tutorial -https://github.com/asherkhb/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:29:31.712827 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -awproksel/docker_flask -https://github.com/awproksel/docker_flask -Entry file: docker_flask/code/app.py -Scanned: 2016-10-19 11:29:33.481477 -No vulnerabilities found. - - -tigerisnotinwood/flask_wx -https://github.com/tigerisnotinwood/flask_wx -Entry file: flask_wx/run.py -Scanned: 2016-10-19 11:29:34.766404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sdzharkov/bitFlask -https://github.com/sdzharkov/bitFlask -Entry file: None -Scanned: 2016-10-19 11:29:38.523199 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SverreHerland/flask-intro -https://github.com/SverreHerland/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:29:39.033336 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valexandersaulys/flask-ladder -https://github.com/valexandersaulys/flask-ladder -Entry file: flask-ladder/app/__init__.py -Scanned: 2016-10-19 11:29:40.564756 -No vulnerabilities found. - - -lucidfrontier45/flask-rethinkview -https://github.com/lucidfrontier45/flask-rethinkview -Entry file: flask-rethinkview/examples/main.py -Scanned: 2016-10-19 11:29:41.779489 -No vulnerabilities found. - - -ricleal/TornadoFlask -https://github.com/ricleal/TornadoFlask -Entry file: TornadoFlask/flasky.py -Scanned: 2016-10-19 11:29:43.113633 -No vulnerabilities found. - - -ekozlowski/flask_demo -https://github.com/ekozlowski/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 11:29:43.641564 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -python-ning/jira_flask -https://github.com/python-ning/jira_flask -Entry file: jira_flask/jira.py -Scanned: 2016-10-19 11:29:44.967969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devtye/learn-flask -https://github.com/devtye/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 11:29:45.587068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laerciosb/flask_challanges -https://github.com/laerciosb/flask_challanges -Entry file: flask_challanges/v2/app/core.py -Scanned: 2016-10-19 11:29:47.937652 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zheins/portalFlask -https://github.com/zheins/portalFlask -Entry file: portalFlask/portalFlask.py -Scanned: 2016-10-19 11:29:49.606166 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yvonnendutaw/flask-template -https://github.com/yvonnendutaw/flask-template -Entry file: None -Scanned: 2016-10-19 11:29:57.133967 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yvonnendutaw/flask-template. - -Subh1994/flask_demo -https://github.com/Subh1994/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 11:29:58.661268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chriskoh/intraday-flask -https://github.com/chriskoh/intraday-flask -Entry file: None -Scanned: 2016-10-19 11:30:03.141602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pouya-abbassi/rashapay-flask -https://github.com/pouya-abbassi/rashapay-flask -Entry file: rashapay-flask/main.py -Scanned: 2016-10-19 11:30:04.485343 -No vulnerabilities found. - - -c03rcion/flask-weather -https://github.com/c03rcion/flask-weather -Entry file: flask-weather/app.py -Scanned: 2016-10-19 11:30:05.021227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neoden/flask-filecache -https://github.com/neoden/flask-filecache -Entry file: flask-filecache/flask_filecache.py -Scanned: 2016-10-19 11:30:06.357582 -No vulnerabilities found. - - -lstmemery/flask-sqlalchemy -https://github.com/lstmemery/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-19 11:30:06.868160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charoleizer/TDD-Flask -https://github.com/charoleizer/TDD-Flask -Entry file: TDD-Flask/fonts/py/WebService/app.py -Scanned: 2016-10-19 11:30:11.359612 -No vulnerabilities found. - - -botheredbybees/flask-rss -https://github.com/botheredbybees/flask-rss -Entry file: flask-rss/headlines.py -Scanned: 2016-10-19 11:30:12.782425 -Vulnerability 1: -File: flask-rss/headlines.py - > User input at line 21, trigger word "get(": - query = urllib.parse.unquote_plus(request.args.get('publication')) -Reassigned in: - File: flask-rss/headlines.py - > Line 23: query = 'ABC Hobart' - File: flask-rss/headlines.py - > Line 24: feed = feedparser.parse(RSS_FEEDS[query]) - File: flask-rss/headlines.py - > Line 28: ret_MAYBE_FUNCTION_NAME = 'no news is good news' -File: flask-rss/headlines.py - > reaches line 26, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',articles=feed['entries'], header=query, rssFeeds=RSS_FEEDS, weather=weather) - - - -coding2000/flask_base -https://github.com/coding2000/flask_base -Entry file: flask_base/flask_01.py -Scanned: 2016-10-19 11:30:14.035957 -No vulnerabilities found. - - -afrancisboeuf/workshop_flask -https://github.com/afrancisboeuf/workshop_flask -Entry file: workshop_flask/1_get_started/6.py -Scanned: 2016-10-19 11:30:18.556027 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: workshop_flask/1_get_started/venv/lib/python2.7/genericpath.py - -tyfulcrum/Flask_Demo -https://github.com/tyfulcrum/Flask_Demo -Entry file: Flask_Demo/hello.py -Scanned: 2016-10-19 11:30:19.769551 -No vulnerabilities found. - - -chenkaiyu1997/flask-learning -https://github.com/chenkaiyu1997/flask-learning -Entry file: flask-learning/app/__init__.py -Scanned: 2016-10-19 11:30:21.027829 -No vulnerabilities found. - - -tpugh/flask_sample -https://github.com/tpugh/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 11:30:21.556351 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -schenkd/flask-core -https://github.com/schenkd/flask-core -Entry file: flask-core/app/__init__.py -Scanned: 2016-10-19 11:30:28.629317 -No vulnerabilities found. - - -sasakalaba/flask_project -https://github.com/sasakalaba/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 11:30:29.572664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jorgezepeda/flask-hello-world -https://github.com/jorgezepeda/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:30:30.178086 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -rajarshi98/giftsaver -https://github.com/rajarshi98/giftsaver -Entry file: giftsaver/app.py -Scanned: 2016-10-19 11:30:35.071420 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -newkdukem/flask4e -https://github.com/newkdukem/flask4e -Entry file: flask4e/headlines.py -Scanned: 2016-10-19 11:30:36.846364 -No vulnerabilities found. - - -fmlvn/quiz -https://github.com/fmlvn/quiz -Entry file: quiz/quiz/__init__.py -Scanned: 2016-10-19 11:30:38.298488 -No vulnerabilities found. - - -top2topii/FlaskServiceWin32 -https://github.com/top2topii/FlaskServiceWin32 -Entry file: FlaskServiceWin32/myapp.py -Scanned: 2016-10-19 11:30:41.588817 -No vulnerabilities found. - - -jpvillavicencio/FlaskDemoAPI -https://github.com/jpvillavicencio/FlaskDemoAPI -Entry file: FlaskDemoAPI/app.py -Scanned: 2016-10-19 11:30:42.964776 -No vulnerabilities found. - - -Karthik-Ramvijay/Flask_API-PROJECT -https://github.com/Karthik-Ramvijay/Flask_API-PROJECT -Entry file: None -Scanned: 2016-10-19 11:30:44.791750 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Karthik-Ramvijay/Flask_API-PROJECT. - -thirotan/flask_test_app -https://github.com/thirotan/flask_test_app -Entry file: flask_test_app/first_app/__init__.py -Scanned: 2016-10-19 11:30:46.160132 -No vulnerabilities found. - - -cdumay/flask-graylog-bundle -https://github.com/cdumay/flask-graylog-bundle -Entry file: flask-graylog-bundle/examples/auth.py -Scanned: 2016-10-19 11:30:47.520766 -No vulnerabilities found. - - -themese/flask -https://github.com/themese/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:30:50.172047 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bTanya/flask -https://github.com/bTanya/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:30:58.748921 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -rafaelhenrique/flask_tutorial -https://github.com/rafaelhenrique/flask_tutorial -Entry file: None -Scanned: 2016-10-19 11:31:00.727399 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sousic/flask_study -https://github.com/sousic/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-19 11:31:06.725152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davidgomes/flask-pygood -https://github.com/davidgomes/flask-pygood -Entry file: flask-pygood/flask_pygood/test/demo.py -Scanned: 2016-10-19 11:31:07.947515 -No vulnerabilities found. - - -goodman1209/flaskrestserver -https://github.com/goodman1209/flaskrestserver -Entry file: flaskrestserver/hello.py -Scanned: 2016-10-19 11:31:09.140419 -No vulnerabilities found. - - -marvinmarnold/flasky -https://github.com/marvinmarnold/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:09.638643 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bassel-meet/flasky -https://github.com/bassel-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:13.152856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sima16-meet/flasky -https://github.com/sima16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:14.639950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tamar16-meet/flasky -https://github.com/tamar16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:16.136818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alma16-meet/flasky -https://github.com/alma16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:20.653172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guy16-meet/flasky -https://github.com/guy16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:22.176868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aixiamomo/flasky -https://github.com/aixiamomo/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:23.156298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rama16-meet/flasky -https://github.com/rama16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:23.655698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dina16-meet/flasky -https://github.com/dina16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:31.249975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -orr16-meet/flasky -https://github.com/orr16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:31.808872 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -roni16-meet/flasky -https://github.com/roni16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:35.337454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wwpika/flaskww -https://github.com/wwpika/flaskww -Entry file: flaskww/app/__init__.py -Scanned: 2016-10-19 11:31:39.656836 -Vulnerability 1: -File: flaskww/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 32: posts = pagination.items - File: flaskww/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskww/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskww/app/main/views.py - > Line 22: show_followed = False - File: flaskww/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskww/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 45: posts = pagination.items -File: flaskww/app/main/views.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskww/app/main/views.py - > User input at line 103, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 105: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskww/app/main/views.py - > Line 107: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 111: comments = pagination.items - File: flaskww/app/main/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskww/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskww/app/main/views.py - > User input at line 168, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 169: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 173: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskww/app/main/views.py - > Line 167: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskww/app/main/views.py - > User input at line 185, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 186: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 190: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskww/app/main/views.py - > Line 184: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 192, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskww/app/main/views.py - > User input at line 214, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 215: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 219: comments = pagination.items -File: flaskww/app/main/views.py - > reaches line 220, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 21, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 24, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 43, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -yuyanqiuqiu/flaskblog -https://github.com/yuyanqiuqiu/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:31:40.196988 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -amjad16-meet/flasky -https://github.com/amjad16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:40.744896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elias16-meet/flasky -https://github.com/elias16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:42.281790 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yasmeen16-meet/flasky -https://github.com/yasmeen16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:43.786267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bluethon/flasky -https://github.com/bluethon/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:45.278246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -teodorgarzdin/Flaskr -https://github.com/teodorgarzdin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:31:45.784187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langlangago/Flasky -https://github.com/langlangago/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-19 11:31:47.281299 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aksenovpb/flaskproject -https://github.com/aksenovpb/flaskproject -Entry file: None -Scanned: 2016-10-19 11:31:47.767861 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pengshiqi/Flaskr -https://github.com/pengshiqi/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:31:49.270735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stylianos-kampakis/flasktaskr -https://github.com/stylianos-kampakis/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:31:49.770912 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yara16-meet/flasky -https://github.com/yara16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:31:51.291989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nimala16-meet/Flasky- -https://github.com/nimala16-meet/Flasky- -Entry file: None -Scanned: 2016-10-19 11:32:01.759583 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nimala16-meet/Flasky-. - -shiran16-meet/flasky -https://github.com/shiran16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:32:02.272845 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fadi16-meet/flasky -https://github.com/fadi16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:32:02.778721 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chijie/flaskdemo -https://github.com/chijie/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 11:32:06.291437 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -decherd/flasktaskr -https://github.com/decherd/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:32:07.794863 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arsalanam/flasktasker7 -https://github.com/arsalanam/flasktasker7 -Entry file: flasktasker7/project/__init__.py -Scanned: 2016-10-19 11:32:09.166975 -No vulnerabilities found. - - -Recad/FlaskSO -https://github.com/Recad/FlaskSO -Entry file: FlaskSO/Flask-vbox-so.py -Scanned: 2016-10-19 11:32:10.425968 -No vulnerabilities found. - - -LiKePAIN/FlaskStudy -https://github.com/LiKePAIN/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-19 11:32:10.929038 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NateLove/FlaskTest -https://github.com/NateLove/FlaskTest -Entry file: None -Scanned: 2016-10-19 11:32:14.432457 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NateLove/FlaskTest. - -playscforever/flaskProject -https://github.com/playscforever/flaskProject -Entry file: flaskProject/helloFlask/app.py -Scanned: 2016-10-19 11:32:15.930380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -winray/FlaskNote -https://github.com/winray/FlaskNote -Entry file: FlaskNote/microblog/app/__init__.py -Scanned: 2016-10-19 11:32:18.310550 -No vulnerabilities found. - - -anilkunchalaece/flaskForm -https://github.com/anilkunchalaece/flaskForm -Entry file: flaskForm/flaskApp.py -Scanned: 2016-10-19 11:32:22.578788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bigzhao/flask-wechat -https://github.com/bigzhao/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-19 11:32:24.560598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rysev-a/flask-blueprints -https://github.com/rysev-a/flask-blueprints -Entry file: flask-blueprints/ch05/application/__init__.py -Scanned: 2016-10-19 11:32:25.930356 -No vulnerabilities found. - - -opentracing-contrib/python-flask -https://github.com/opentracing-contrib/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 11:32:32.486891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ooldDoctor/Flask-Shell -https://github.com/ooldDoctor/Flask-Shell -Entry file: Flask-Shell/server.py -Scanned: 2016-10-19 11:32:33.919915 -No vulnerabilities found. - - -keik/flask-tutorial -https://github.com/keik/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:32:36.442585 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CaveMike/flask_rest -https://github.com/CaveMike/flask_rest -Entry file: None -Scanned: 2016-10-19 11:32:38.812840 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CaveMike/flask_rest. - -Keita1/flask-blog -https://github.com/Keita1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:32:41.336021 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -juliocesarfort/flask-demos -https://github.com/juliocesarfort/flask-demos -Entry file: flask-demos/json-contentsniffing.py -Scanned: 2016-10-19 11:32:44.042093 -No vulnerabilities found. - - -wlingxiao/HelloFlask -https://github.com/wlingxiao/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-19 11:32:45.548803 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gherero/analitika-flask -https://github.com/Gherero/analitika-flask -Entry file: analitika-flask/app/main.py -Scanned: 2016-10-19 11:32:50.156562 -No vulnerabilities found. - - -jen8/Flask-Intro -https://github.com/jen8/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-19 11:32:50.686284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evereux/flask_template -https://github.com/evereux/flask_template -Entry file: None -Scanned: 2016-10-19 11:32:51.199868 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/evereux/flask_template. - -Jareechang/flask-basic -https://github.com/Jareechang/flask-basic -Entry file: flask-basic/templates.py -Scanned: 2016-10-19 11:32:53.016655 -No vulnerabilities found. - - -alodavi/flask_blog -https://github.com/alodavi/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:32:53.506400 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sdzharkov/bitFlask -https://github.com/sdzharkov/bitFlask -Entry file: None -Scanned: 2016-10-19 11:32:54.043916 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SverreHerland/flask-intro -https://github.com/SverreHerland/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:01.558690 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -doblel/Flask-Hooker -https://github.com/doblel/Flask-Hooker -Entry file: Flask-Hooker/test.py -Scanned: 2016-10-19 11:33:04.839264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ainjii/20160719_flask -https://github.com/ainjii/20160719_flask -Entry file: 20160719_flask/nice.py -Scanned: 2016-10-19 11:33:06.036335 -No vulnerabilities found. - - -whitneybelba/Flask-Intro -https://github.com/whitneybelba/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-19 11:33:07.550775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahmsolo/flask-intro -https://github.com/ahmsolo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:09.052213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aaron4444/master_flask -https://github.com/aaron4444/master_flask -Entry file: master_flask/main.py -Scanned: 2016-10-19 11:33:10.435931 -No vulnerabilities found. - - -scotteggs/flask_tutor -https://github.com/scotteggs/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-19 11:33:10.958727 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -v2hey/flask-blog -https://github.com/v2hey/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:33:12.494430 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -defhook/flask-blog -https://github.com/defhook/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:33:16.012863 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -eflagg/flask-intro -https://github.com/eflagg/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:17.518238 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MariaAngela24/flask-intro -https://github.com/MariaAngela24/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:19.015894 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tarzioo/flask-intro -https://github.com/tarzioo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:23.514411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lingsitu1290/Flask-Intro -https://github.com/lingsitu1290/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-19 11:33:26.004045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thepomeranian/flask-intro -https://github.com/thepomeranian/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:26.501966 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibhan88/Flask-Intro -https://github.com/ibhan88/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-19 11:33:27.002502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apastewk/flask-intro -https://github.com/apastewk/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:33.532703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -n4s/flask-test -https://github.com/n4s/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 11:33:34.102033 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -boyxiaolong/flask_blog -https://github.com/boyxiaolong/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:33:37.635301 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ricleal/TornadoFlask -https://github.com/ricleal/TornadoFlask -Entry file: TornadoFlask/flasky.py -Scanned: 2016-10-19 11:33:39.899929 -No vulnerabilities found. - - -sarahdwyer/flask-intro -https://github.com/sarahdwyer/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:42.414323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shankj3/flask_version -https://github.com/shankj3/flask_version -Entry file: flask_version/render_with_jinja/render_with_jinja.py -Scanned: 2016-10-19 11:33:45.316207 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -13923858795/flask-blog -https://github.com/13923858795/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:33:45.832452 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -neldevfull/flask_api -https://github.com/neldevfull/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 11:33:48.838288 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -decherd/flask-blog -https://github.com/decherd/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:33:52.369768 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -thesiti92/flask_example -https://github.com/thesiti92/flask_example -Entry file: None -Scanned: 2016-10-19 11:33:52.864245 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rayramsay/flask-intro -https://github.com/rayramsay/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:33:53.394126 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aig-/flask_google -https://github.com/aig-/flask_google -Entry file: flask_google/app.py -Scanned: 2016-10-19 11:33:54.734626 -Vulnerability 1: -File: flask_google/app.py - > User input at line 93, trigger word "get(": - response = 'state''status'task.statetask.info.get('status', '') -Reassigned in: - File: flask_google/app.py - > Line 88: response = 'state''status'task.state'Pending...' - File: flask_google/app.py - > Line 101: response = 'state''status'task.statestr(task.info) -File: flask_google/app.py - > reaches line 105, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -yfalcon8/Flask_Intro -https://github.com/yfalcon8/Flask_Intro -Entry file: Flask_Intro/nice.py -Scanned: 2016-10-19 11:33:58.435536 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Intro/env/lib/python2.7/genericpath.py - -chriskoh/intraday-flask -https://github.com/chriskoh/intraday-flask -Entry file: None -Scanned: 2016-10-19 11:33:58.930826 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -laylasian/poke-flask -https://github.com/laylasian/poke-flask -Entry file: poke-flask/poke/app.py -Scanned: 2016-10-19 11:34:04.397388 -No vulnerabilities found. - - -YuliYaSokolova/home_flask -https://github.com/YuliYaSokolova/home_flask -Entry file: home_flask/__init__.py -Scanned: 2016-10-19 11:34:09.804035 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: home_flask/.envi/lib/python3.4/struct.py - -alodavi/flask_simple -https://github.com/alodavi/flask_simple -Entry file: flask_simple/hello.py -Scanned: 2016-10-19 11:34:11.091847 -No vulnerabilities found. - - -cdagli/flask-blueprint -https://github.com/cdagli/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-19 11:34:12.377846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charoleizer/TDD-Flask -https://github.com/charoleizer/TDD-Flask -Entry file: TDD-Flask/fonts/py/WebService/app.py -Scanned: 2016-10-19 11:34:16.433560 -No vulnerabilities found. - - -thechutrain/flask-tutorial -https://github.com/thechutrain/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:34:17.451897 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RetardedPigeon/flask_project -https://github.com/RetardedPigeon/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-19 11:34:19.186272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jzengzhan/Flask -https://github.com/Jzengzhan/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:34:21.003697 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crazw/flask -https://github.com/crazw/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:34:25.578059 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -mwongeraE/Flask -https://github.com/mwongeraE/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:34:27.124766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radajin/flask -https://github.com/radajin/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:34:28.144541 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -suryadana/Flask -https://github.com/suryadana/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:34:34.661194 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TheNixNinja/flask-boilerplate -https://github.com/TheNixNinja/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 11:34:35.162640 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TheNixNinja/flask-boilerplate. - -clef/flask-nameko -https://github.com/clef/flask-nameko -Entry file: flask-nameko/tests/test_flask_pooled_cluster_rpc_proxy.py -Scanned: 2016-10-19 11:34:39.593392 -No vulnerabilities found. - - -weihg/flaskr -https://github.com/weihg/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:34:43.600304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dasmemes/flasky -https://github.com/Dasmemes/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:34:44.101427 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhan12/Flaskblog -https://github.com/dhan12/Flaskblog -Entry file: Flaskblog/run.py -Scanned: 2016-10-19 11:34:49.378136 -Vulnerability 1: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 2: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 3: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 4: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - - - -SachinMaharana/flaskblog -https://github.com/SachinMaharana/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:34:49.890789 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:34:50.400181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-19 11:34:53.893216 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:34:54.388050 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igoroppo6/flasky -https://github.com/igoroppo6/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:34:54.891750 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evanzd/flasky -https://github.com/evanzd/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:34:55.387880 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dawson-G/flaskwebapp -https://github.com/Dawson-G/flaskwebapp -Entry file: flaskwebapp/main.py -Scanned: 2016-10-19 11:34:57.624416 -No vulnerabilities found. - - -diazdeentr/flasktest -https://github.com/diazdeentr/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 11:35:00.147044 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sT00ne/FlaskMega -https://github.com/sT00ne/FlaskMega -Entry file: FlaskMega/app/__init__.py -Scanned: 2016-10-19 11:35:05.990684 -No vulnerabilities found. - - -dedystyawan/flask2 -https://github.com/dedystyawan/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-19 11:35:07.523519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TitledPythonFile/FlaskItems -https://github.com/TitledPythonFile/FlaskItems -Entry file: FlaskItems/app/__init__.py -Scanned: 2016-10-19 11:35:08.855454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mtlevine0/FlaskPhoto -https://github.com/mtlevine0/FlaskPhoto -Entry file: FlaskPhoto/flaskphoto.py -Scanned: 2016-10-19 11:35:12.837907 -No vulnerabilities found. - - -laketiticaca/FlaskApp -https://github.com/laketiticaca/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:35:13.437612 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yipersevere/FlaskTutorial -https://github.com/yipersevere/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 11:35:18.416446 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jk34/Blog_Flask -https://github.com/jk34/Blog_Flask -Entry file: Blog_Flask/app.py -Scanned: 2016-10-19 11:35:22.907828 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Blog_Flask/lib/python2.7/genericpath.py - -vanalex/restful-flask -https://github.com/vanalex/restful-flask -Entry file: restful-flask/restful-flask.py -Scanned: 2016-10-19 11:35:24.609987 -No vulnerabilities found. - - -chicaum/flask_blog -https://github.com/chicaum/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:35:25.108717 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wangbicong/flask-newspaper -https://github.com/Wangbicong/flask-newspaper -Entry file: flask-newspaper/app/__init__.py -Scanned: 2016-10-19 11:35:27.889554 -Vulnerability 1: -File: flask-newspaper/app/main/views.py - > User input at line 29, trigger word "get(": - tab = request.args.get('tab') -Reassigned in: - File: flask-newspaper/app/main/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = redirect('/login/') - File: flask-newspaper/app/main/views.py - > Line 45: ret_MAYBE_FUNCTION_NAME = render_template('news.html',news_data=news_data) - File: flask-newspaper/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('index.html',news_data=news_data, user_data=user_data, tab_mark='user') - File: flask-newspaper/app/main/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = render_template('record.html',record_data=record_data) -File: flask-newspaper/app/main/views.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',news_data=news_data, user_data=user_data, tab_mark=tab) - - - -anupam0601/flask-REST -https://github.com/anupam0601/flask-REST -Entry file: flask-REST/restful.py -Scanned: 2016-10-19 11:35:29.119049 -No vulnerabilities found. - - -kerol/flask-utils -https://github.com/kerol/flask-utils -Entry file: flask-utils/logger.py -Scanned: 2016-10-19 11:35:30.846267 -No vulnerabilities found. - - -hicris/flask-note -https://github.com/hicris/flask-note -Entry file: flask-note/note.py -Scanned: 2016-10-19 11:35:31.410741 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yyoowwllgit/flask_agent -https://github.com/yyoowwllgit/flask_agent -Entry file: flask_agent/flask_agent_server/agent_server.py -Scanned: 2016-10-19 11:35:37.368898 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evereux/flask_template -https://github.com/evereux/flask_template -Entry file: None -Scanned: 2016-10-19 11:35:37.857714 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/evereux/flask_template. - -Faoxis/flask-microblog -https://github.com/Faoxis/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:35:40.381513 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AndrewSmiley/flask-demo -https://github.com/AndrewSmiley/flask-demo -Entry file: None -Scanned: 2016-10-19 11:35:42.917554 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewSmiley/flask-demo. - -volny/flask-openid -https://github.com/volny/flask-openid -Entry file: flask-openid/flask_openid.py -Scanned: 2016-10-19 11:35:45.951045 -No vulnerabilities found. - - -brianbrittain/flask-blog -https://github.com/brianbrittain/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:35:49.475457 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -broschke/flask_api -https://github.com/broschke/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 11:35:50.994310 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -welserjr/Flask_Recaptcha -https://github.com/welserjr/Flask_Recaptcha -Entry file: Flask_Recaptcha/app.py -Scanned: 2016-10-19 11:35:52.334338 -Vulnerability 1: -File: Flask_Recaptcha/app.py - > User input at line 36, trigger word "get(": - comments = session.get('comments', []) -File: Flask_Recaptcha/app.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',comments=comments, form=form) - - - -jearnest88/flask_practice -https://github.com/jearnest88/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-19 11:35:56.096475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbenderust/flask_dev -https://github.com/cbenderust/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-19 11:35:56.610411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scagle/Flask-Website -https://github.com/scagle/Flask-Website -Entry file: Flask-Website/hello.py -Scanned: 2016-10-19 11:35:57.877215 -No vulnerabilities found. - - -jfcorsini/testing-flask -https://github.com/jfcorsini/testing-flask -Entry file: None -Scanned: 2016-10-19 11:36:07.361286 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josenavarro-famoco/flask-pg -https://github.com/josenavarro-famoco/flask-pg -Entry file: flask-pg/pogo/ext_api.py -Scanned: 2016-10-19 11:36:09.054182 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apjanco/flask_blog -https://github.com/apjanco/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:36:10.036838 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChaosSoong/python_flask -https://github.com/ChaosSoong/python_flask -Entry file: None -Scanned: 2016-10-19 11:36:10.544314 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ChaosSoong/python_flask. - -mwave1239/Flask_Tutorials -https://github.com/mwave1239/Flask_Tutorials -Entry file: Flask_Tutorials/registration_form/server.py -Scanned: 2016-10-19 11:36:16.690079 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorials/registration_form/venv/lib/python2.7/genericpath.py - -yehiaa/flask-play -https://github.com/yehiaa/flask-play -Entry file: flask-play/app.py -Scanned: 2016-10-19 11:36:17.965127 -No vulnerabilities found. - - -tleskin/microblog-flask -https://github.com/tleskin/microblog-flask -Entry file: None -Scanned: 2016-10-19 11:36:18.956458 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ecfairle/flask_site -https://github.com/ecfairle/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-19 11:36:19.451061 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shankj3/flask_version -https://github.com/shankj3/flask_version -Entry file: flask_version/render_with_jinja/render_with_jinja.py -Scanned: 2016-10-19 11:36:19.953113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neldevfull/flask_api -https://github.com/neldevfull/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 11:36:24.949923 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lanyuan27/flask-web -https://github.com/lanyuan27/flask-web -Entry file: flask-web/test.py -Scanned: 2016-10-19 11:36:27.185094 -No vulnerabilities found. - - -bjgill/flask-testing -https://github.com/bjgill/flask-testing -Entry file: flask-testing/server.py -Scanned: 2016-10-19 11:36:28.469686 -No vulnerabilities found. - - -guoweikuang/flask-hello -https://github.com/guoweikuang/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-19 11:36:29.995472 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aiden0z/Flask-Thriftclient -https://github.com/aiden0z/Flask-Thriftclient -Entry file: Flask-Thriftclient/tests/thriftclient.py -Scanned: 2016-10-19 11:36:33.376545 -No vulnerabilities found. - - -hputiprawan2/flask-aprt -https://github.com/hputiprawan2/flask-aprt -Entry file: flask-aprt/app.py -Scanned: 2016-10-19 11:36:37.089492 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-aprt/venv/lib/python2.7/genericpath.py - -datasciencemonkey/flask_test -https://github.com/datasciencemonkey/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:36:37.629220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KittuJain/explore_Flask -https://github.com/KittuJain/explore_Flask -Entry file: explore_Flask/Hello.py -Scanned: 2016-10-19 11:36:39.880389 -No vulnerabilities found. - - -c75/flask-blueprint -https://github.com/c75/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-19 11:36:41.490807 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darbik/flask_fun -https://github.com/darbik/flask_fun -Entry file: flask_fun/blog/flaskr.py -Scanned: 2016-10-19 11:36:44.814980 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NujjLTD/nujjWebsiteNew -https://github.com/NujjLTD/nujjWebsiteNew -Entry file: None -Scanned: 2016-10-19 11:37:00.254521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pengxy8/TimeManager -https://github.com/pengxy8/TimeManager -Entry file: None -Scanned: 2016-10-19 11:37:01.486916 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pengxy8/TimeManager. - -vennyk/flask-hello-world -https://github.com/vennyk/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:37:02.044752 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -saifulazad/FlaskLargeApp -https://github.com/saifulazad/FlaskLargeApp -Entry file: FlaskLargeApp/run.py -Scanned: 2016-10-19 11:37:03.723072 -No vulnerabilities found. - - -jpvillavicencio/FlaskSQLAlchemyAPI -https://github.com/jpvillavicencio/FlaskSQLAlchemyAPI -Entry file: FlaskSQLAlchemyAPI/app.py -Scanned: 2016-10-19 11:37:04.977273 -No vulnerabilities found. - - -bradleygolden/cookiecutter-flaskrestful-barebones -https://github.com/bradleygolden/cookiecutter-flaskrestful-barebones -Entry file: cookiecutter-flaskrestful-barebones/{{cookiecutter.project_name}}/app.py -Scanned: 2016-10-19 11:37:06.199389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brevno/test_pg_flask -https://github.com/brevno/test_pg_flask -Entry file: test_pg_flask/app/__init__.py -Scanned: 2016-10-19 11:37:07.407802 -Vulnerability 1: -File: test_pg_flask/app/views.py - > User input at line 20, trigger word "form[": - user = User.query.get_or_404(request.form['id']) -Reassigned in: - File: test_pg_flask/app/views.py - > Line 25: user = User(request.form.to_dict()) -File: test_pg_flask/app/views.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify([user.as_dict()]) - - - -jksutow/flask_login_reg -https://github.com/jksutow/flask_login_reg -Entry file: flask_login_reg/login.py -Scanned: 2016-10-19 11:37:15.172333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwave1239/MySQL-Flask-Examples -https://github.com/mwave1239/MySQL-Flask-Examples -Entry file: MySQL-Flask-Examples/friends/server.py -Scanned: 2016-10-19 11:37:19.648654 -No vulnerabilities found. - - -myhro/flask-gunicorn-example -https://github.com/myhro/flask-gunicorn-example -Entry file: flask-gunicorn-example/web.py -Scanned: 2016-10-19 11:37:21.867121 -No vulnerabilities found. - - -yfalcon8/Project_Tracker_Flask -https://github.com/yfalcon8/Project_Tracker_Flask -Entry file: Project_Tracker_Flask/hackbright-web.py -Scanned: 2016-10-19 11:37:23.085271 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanhl/HB_SQL_Flask -https://github.com/jeanhl/HB_SQL_Flask -Entry file: HB_SQL_Flask/hackbright-web.py -Scanned: 2016-10-19 11:37:24.401049 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knalavadi/project-tracker-flask-felowship -https://github.com/knalavadi/project-tracker-flask-felowship -Entry file: project-tracker-flask-felowship/hackbright-web.py -Scanned: 2016-10-19 11:37:25.626556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ssmores/20160726_project_tracker_flask -https://github.com/ssmores/20160726_project_tracker_flask -Entry file: 20160726_project_tracker_flask/hackbright-web.py -Scanned: 2016-10-19 11:37:26.833174 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -polarisc8t/HB---project_tracker_flask -https://github.com/polarisc8t/HB---project_tracker_flask -Entry file: HB---project_tracker_flask/hackbright-web.py -Scanned: 2016-10-19 11:37:28.220269 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ElizabethLane/HB-flask-sequel-exercise -https://github.com/ElizabethLane/HB-flask-sequel-exercise -Entry file: HB-flask-sequel-exercise/hackbright-web.py -Scanned: 2016-10-19 11:37:29.491648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FromZeus/python_flask_learning -https://github.com/FromZeus/python_flask_learning -Entry file: python_flask_learning/lesson-02/app/__init__.py -Scanned: 2016-10-19 11:37:31.503379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jen8/Project-Tracker-Flask -https://github.com/jen8/Project-Tracker-Flask -Entry file: Project-Tracker-Flask/hackbright-web.py -Scanned: 2016-10-19 11:37:32.007455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yfalcon8/Flask_Intro_Lab -https://github.com/yfalcon8/Flask_Intro_Lab -Entry file: Flask_Intro_Lab/nice.py -Scanned: 2016-10-19 11:37:33.476083 -No vulnerabilities found. - - -HiiYL/vision-flask-demo -https://github.com/HiiYL/vision-flask-demo -Entry file: None -Scanned: 2016-10-19 11:37:35.163564 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HiiYL/vision-flask-demo. - -heratyian/flask-cat-tinder -https://github.com/heratyian/flask-cat-tinder -Entry file: flask-cat-tinder/app.py -Scanned: 2016-10-19 11:37:36.761551 -No vulnerabilities found. - - -brettlangdon/cookiecutter-flask-app -https://github.com/brettlangdon/cookiecutter-flask-app -Entry file: cookiecutter-flask-app/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/__init__.py -Scanned: 2016-10-19 11:37:38.107807 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feistiller/LearnPythonFlask -https://github.com/feistiller/LearnPythonFlask -Entry file: LearnPythonFlask/Demo1HelloWorld.py -Scanned: 2016-10-19 11:37:39.334875 -Vulnerability 1: -File: LearnPythonFlask/Demo4WtfHelloWorld.py - > User input at line 18, trigger word ".data": - name = form.name.data -Reassigned in: - File: LearnPythonFlask/Demo4WtfHelloWorld.py - > Line 15: name = None -File: LearnPythonFlask/Demo4WtfHelloWorld.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('wtfIndex.html',form=form, name=name) - - - -yfalcon8/Flask_Job_Application -https://github.com/yfalcon8/Flask_Job_Application -Entry file: Flask_Job_Application/application.py -Scanned: 2016-10-19 11:37:40.587728 -No vulnerabilities found. - - -eriknguyen/basic-auth-flask -https://github.com/eriknguyen/basic-auth-flask -Entry file: basic-auth-flask/flask_intro/__init__.py -Scanned: 2016-10-19 11:37:41.934408 -No vulnerabilities found. - - -micaiahparker/startkit-flask-heroku -https://github.com/micaiahparker/startkit-flask-heroku -Entry file: startkit-flask-heroku/app.py -Scanned: 2016-10-19 11:37:43.195225 -No vulnerabilities found. - - -thepomeranian/project-tracker-flask -https://github.com/thepomeranian/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-19 11:37:45.708591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottx611x/AWS-SNS-Flask -https://github.com/scottx611x/AWS-SNS-Flask -Entry file: AWS-SNS-Flask/recieve_SNS.py -Scanned: 2016-10-19 11:37:50.206898 -No vulnerabilities found. - - -Coolwater7/flask -https://github.com/Coolwater7/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:38:02.131285 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sepihere/flask -https://github.com/sepihere/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:38:03.690548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -SicunStudio/aunet-flask -https://github.com/SicunStudio/aunet-flask -Entry file: None -Scanned: 2016-10-19 11:38:05.358885 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SicunStudio/aunet-flask. - -afropolymath/papers -https://github.com/afropolymath/papers -Entry file: papers/api/__init__.py -Scanned: 2016-10-19 11:38:06.760544 -Vulnerability 1: -File: papers/api/controllers/files.py - > User input at line 149, trigger word "get(": - parent_id = args.get('parent_id', None) -Reassigned in: - File: papers/api/controllers/files.py - > Line 161: update_fields['tag'] = parent_id == '0'g.file['id']'{}#{}'.format(folder_access['tag'], folder['last_index']) - File: papers/api/controllers/files.py - > Line 166: update_fields['parent_id'] = parent_id - File: papers/api/controllers/files.py - > Line 152: update_fields['name'] = name -File: papers/api/controllers/files.py - > reaches line 156, trigger word "filter(": - folder_access = Folder.filter('id''creator'parent_iduser_id) - - - -munendrasn/Flaskr -https://github.com/munendrasn/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:38:07.278604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Eyali1001/flaskcalculator -https://github.com/Eyali1001/flaskcalculator -Entry file: flaskcalculator/calculator.py -Scanned: 2016-10-19 11:38:08.497625 -Vulnerability 1: -File: flaskcalculator/calculator.py - > User input at line 14, trigger word "form[": - result = int(request.form['title']) + int(request.form['text']) -File: flaskcalculator/calculator.py - > reaches line 15, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultpage.html',result=result) - - - -penglee87/flaskr -https://github.com/penglee87/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:38:09.009079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pecone/flaskr -https://github.com/pecone/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:38:17.502091 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lechain/flaskr -https://github.com/lechain/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:38:22.028698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fiezwang/flasky -https://github.com/fiezwang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:38:22.527624 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -swdmike/flasky -https://github.com/swdmike/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:38:23.020495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChuckiePae/flaskr -https://github.com/ChuckiePae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:38:23.529619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:38:25.066408 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-19 11:38:26.558965 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -Unknown22/Flaskr -https://github.com/Unknown22/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 11:38:28.052456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:38:28.541084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lux600/flasktest -https://github.com/lux600/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 11:38:30.161533 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagaragarwal94/flask-site-builder -https://github.com/sagaragarwal94/flask-site-builder -Entry file: flask-site-builder/sitebuilder.py -Scanned: 2016-10-19 11:38:33.367537 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Melvie/FlaskLearns -https://github.com/Melvie/FlaskLearns -Entry file: None -Scanned: 2016-10-19 11:38:35.002699 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Leon14451/FlaskMultisite -https://github.com/Leon14451/FlaskMultisite -Entry file: FlaskMultisite/wwwroot/__init__.py -Scanned: 2016-10-19 11:38:36.354348 -No vulnerabilities found. - - -laketiticaca/FlaskApp -https://github.com/laketiticaca/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:38:36.889218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rssenar/FlaskApp -https://github.com/rssenar/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:38:37.496912 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nenodias/flask-webservice -https://github.com/nenodias/flask-webservice -Entry file: flask-webservice/app.py -Scanned: 2016-10-19 11:38:39.852131 -Vulnerability 1: -File: flask-webservice/app.py - > User input at line 32, trigger word "get(": - dev = Developer(request.json.name, request.json.get('hireDate', ''), request.json.get('focus', '')) -File: flask-webservice/app.py - > reaches line 35, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('developer'dev), 201) - -Vulnerability 2: -File: flask-webservice/app.py - > User input at line 45, trigger word "get(": - dev = Developer.query.get(id) -Reassigned in: - File: flask-webservice/app.py - > Line 46: dev.name = request.json.get('name', dev.name) - File: flask-webservice/app.py - > Line 47: dev.hireDate = request.json.get('hireDate', dev.name) - File: flask-webservice/app.py - > Line 48: dev.focus = request.json.get('focus', dev.focus) -File: flask-webservice/app.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('dev'dev) - - - -StrGlee/flask-demo -https://github.com/StrGlee/flask-demo -Entry file: None -Scanned: 2016-10-19 11:38:40.356180 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StrGlee/flask-demo. - -rconnol/PromotionsFlask -https://github.com/rconnol/PromotionsFlask -Entry file: PromotionsFlask/app/__init__.py -Scanned: 2016-10-19 11:38:41.613600 -No vulnerabilities found. - - -dschmaryl/golf-flask -https://github.com/dschmaryl/golf-flask -Entry file: golf-flask/stats.py -Scanned: 2016-10-19 11:38:42.893364 -No vulnerabilities found. - - -Dudeguy409/flask_demo -https://github.com/Dudeguy409/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 11:38:44.649220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -1572766337/py_flask -https://github.com/1572766337/py_flask -Entry file: py_flask/app/__init__.py -Scanned: 2016-10-19 11:38:50.770686 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -letterli/Flask-blog -https://github.com/letterli/Flask-blog -Entry file: Flask-blog/app/__init__.py -Scanned: 2016-10-19 11:38:53.251294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -srinivasb07/Flask_Sample -https://github.com/srinivasb07/Flask_Sample -Entry file: Flask_Sample/app.py -Scanned: 2016-10-19 11:39:03.854342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jollyhrothgar/flask_template -https://github.com/Jollyhrothgar/flask_template -Entry file: None -Scanned: 2016-10-19 11:39:05.355948 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jollyhrothgar/flask_template. - -apengok/flask_tutor -https://github.com/apengok/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-19 11:39:05.852412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ArioShaman/flask-site -https://github.com/ArioShaman/flask-site -Entry file: None -Scanned: 2016-10-19 11:39:18.121461 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ibrewdudes/flask-server -https://github.com/ibrewdudes/flask-server -Entry file: None -Scanned: 2016-10-19 11:39:18.630987 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ibrewdudes/flask-server. - -hackrole/flask_demo -https://github.com/hackrole/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 11:39:19.128097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YeongjinOh/flask_pratice -https://github.com/YeongjinOh/flask_pratice -Entry file: flask_pratice/app/__init__.py -Scanned: 2016-10-19 11:39:20.397124 -No vulnerabilities found. - - -DylanVerstraete/ItsyouonlineFlask -https://github.com/DylanVerstraete/ItsyouonlineFlask -Entry file: ItsyouonlineFlask/itsyouonline-flask/ItsYouOnlineServer/app.py -Scanned: 2016-10-19 11:39:24.182732 -No vulnerabilities found. - - -jauschalley/flask_practice -https://github.com/jauschalley/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-19 11:39:24.860000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jubjub55/flask_test -https://github.com/jubjub55/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 11:39:25.431323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourav2406/learnFlask -https://github.com/sourav2406/learnFlask -Entry file: None -Scanned: 2016-10-19 11:39:25.936642 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sourav2406/learnFlask. - -chrisco/flask-demo -https://github.com/chrisco/flask-demo -Entry file: None -Scanned: 2016-10-19 11:39:26.466764 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chrisco/flask-demo. - -aripddev/cms_flask -https://github.com/aripddev/cms_flask -Entry file: cms_flask/app/__init__.py -Scanned: 2016-10-19 11:39:31.118474 -Vulnerability 1: -File: cms_flask/app/core/controllers.py - > User input at line 76, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 83: ret_MAYBE_FUNCTION_NAME = render_template('contact.html',form=form) - File: cms_flask/app/core/controllers.py - > Line 80: ret_MAYBE_FUNCTION_NAME = abort(400) -File: cms_flask/app/core/controllers.py - > reaches line 82, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 2: -File: cms_flask/app/core/controllers.py - > User input at line 76, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 83: ret_MAYBE_FUNCTION_NAME = render_template('contact.html',form=form) - File: cms_flask/app/core/controllers.py - > Line 80: ret_MAYBE_FUNCTION_NAME = abort(400) -File: cms_flask/app/core/controllers.py - > reaches line 82, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 3: -File: cms_flask/app/core/controllers.py - > User input at line 94, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 96: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.show.html',post=post) - -Vulnerability 4: -File: cms_flask/app/core/controllers.py - > User input at line 120, trigger word "form[": - post = Post(headline=request.form['headline'], subheadline=request.form['subheadline'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 114: ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.new.html') - File: cms_flask/app/core/controllers.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_new')) -File: cms_flask/app/core/controllers.py - > reaches line 124, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 5: -File: cms_flask/app/core/controllers.py - > User input at line 120, trigger word "form[": - post = Post(headline=request.form['headline'], subheadline=request.form['subheadline'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 114: ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.new.html') - File: cms_flask/app/core/controllers.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_new')) -File: cms_flask/app/core/controllers.py - > reaches line 124, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 6: -File: cms_flask/app/core/controllers.py - > User input at line 129, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 131: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 132, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.edit.html',post=post) - -Vulnerability 7: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 143, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 8: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 143, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 9: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 150, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 10: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 150, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 11: -File: cms_flask/app/core/controllers.py - > User input at line 161, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 163: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 165, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.show.html',category=category, posts=posts) - -Vulnerability 12: -File: cms_flask/app/core/controllers.py - > User input at line 172, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 174: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('page.show.html',page=page) - -Vulnerability 13: -File: cms_flask/app/core/controllers.py - > User input at line 193, trigger word "form[": - page = Page(title=request.form['title'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.new.html') - File: cms_flask/app/core/controllers.py - > Line 191: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_new')) -File: cms_flask/app/core/controllers.py - > reaches line 197, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 14: -File: cms_flask/app/core/controllers.py - > User input at line 193, trigger word "form[": - page = Page(title=request.form['title'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.new.html') - File: cms_flask/app/core/controllers.py - > Line 191: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_new')) -File: cms_flask/app/core/controllers.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 15: -File: cms_flask/app/core/controllers.py - > User input at line 202, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 204: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.edit.html',page=page) - -Vulnerability 16: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 216, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 17: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 216, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 18: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 222, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 19: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 222, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 20: -File: cms_flask/app/core/controllers.py - > User input at line 249, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 251: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 252, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/user.edit.html',user=user) - -Vulnerability 21: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 263, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_edit',id=user.id)) - -Vulnerability 22: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 263, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_edit',id=user.id)) - -Vulnerability 23: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 269, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_show',id=user.id)) - -Vulnerability 24: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 269, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_show',id=user.id)) - -Vulnerability 25: -File: cms_flask/app/core/controllers.py - > User input at line 274, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 276: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 277, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/user.show.html',user=user) - - - -northwestyam/flask_hello -https://github.com/northwestyam/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 11:39:31.853106 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibhan88/Flask-Testing -https://github.com/ibhan88/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:39:33.793065 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -titov-andrei/microblog-flask -https://github.com/titov-andrei/microblog-flask -Entry file: None -Scanned: 2016-10-19 11:39:34.318864 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -glenpadua/flask-blog -https://github.com/glenpadua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:39:34.885774 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -juliuskrah/flask-blog -https://github.com/juliuskrah/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:39:35.399862 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -elthran/flask-game -https://github.com/elthran/flask-game -Entry file: flask-game/flask-intro/app.py -Scanned: 2016-10-19 11:39:37.854877 -No vulnerabilities found. - - -ChaosSoong/python_flask -https://github.com/ChaosSoong/python_flask -Entry file: None -Scanned: 2016-10-19 11:39:38.839353 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ChaosSoong/python_flask. - -TheDeadMays/flask-bootstrap -https://github.com/TheDeadMays/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-19 11:39:41.604985 -No vulnerabilities found. - - -whitneybelba/Flask-Testing -https://github.com/whitneybelba/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:39:42.115681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MadhuriHB/Testing-flask -https://github.com/MadhuriHB/Testing-flask -Entry file: Testing-flask/party.py -Scanned: 2016-10-19 11:39:43.797624 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langep/flask-template -https://github.com/langep/flask-template -Entry file: None -Scanned: 2016-10-19 11:39:44.331616 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/langep/flask-template. - -tuvttran/flask-learning -https://github.com/tuvttran/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-19 11:39:46.569549 -No vulnerabilities found. - - -couldtt/flask-foundation -https://github.com/couldtt/flask-foundation -Entry file: flask-foundation/app/__init__.py -Scanned: 2016-10-19 11:39:50.188616 -No vulnerabilities found. - - -haithamslaibi/Flask_Template -https://github.com/haithamslaibi/Flask_Template -Entry file: Flask_Template/web_app.py -Scanned: 2016-10-19 11:39:52.454012 -No vulnerabilities found. - - -XiongZhijun/simple-flask -https://github.com/XiongZhijun/simple-flask -Entry file: simple-flask/app/app.py -Scanned: 2016-10-19 11:39:55.081609 -Vulnerability 1: -File: simple-flask/app/auth/views.py - > User input at line 16, trigger word ".data": - user = User.query.filter(or_(User.username == form.username.data)).first() -File: simple-flask/app/auth/views.py - > reaches line 16, trigger word "filter(": - user = User.query.filter(or_(User.username == form.username.data)).first() - - - -lanyuan27/flask-web -https://github.com/lanyuan27/flask-web -Entry file: flask-web/test.py -Scanned: 2016-10-19 11:40:06.340477 -No vulnerabilities found. - - -italomaia/flask-rev -https://github.com/italomaia/flask-rev -Entry file: flask-rev/tests/runtests.py -Scanned: 2016-10-19 11:40:07.721035 -No vulnerabilities found. - - -ckaren28/python-Flask -https://github.com/ckaren28/python-Flask -Entry file: python-Flask/PYTHON_FLASK/friends/server.py -Scanned: 2016-10-19 11:40:14.936761 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-Flask/PYTHON_FLASK/friends/venv/lib/python2.7/genericpath.py - -ssong319/Flask-Testing -https://github.com/ssong319/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:40:15.437784 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrb101/Flask-Sauce -https://github.com/mrb101/Flask-Sauce -Entry file: Flask-Sauce/app/__init__.py -Scanned: 2016-10-19 11:40:20.855775 -No vulnerabilities found. - - -mattalat/flask-microblog -https://github.com/mattalat/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:40:21.351997 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yehe01/minitwit-mongo -https://github.com/yehe01/minitwit-mongo -Entry file: minitwit-mongo/minitwit/main.py -Scanned: 2016-10-19 11:40:22.703361 -No vulnerabilities found. - - -pythonbean/microblog -https://github.com/pythonbean/microblog -Entry file: None -Scanned: 2016-10-19 11:40:23.223659 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vseeker/app -https://github.com/vseeker/app -Entry file: app/__init__.py -Scanned: 2016-10-19 11:40:26.492811 -No vulnerabilities found. - - -redtreelchao/microblog -https://github.com/redtreelchao/microblog -Entry file: None -Scanned: 2016-10-19 11:40:26.994997 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -katiayx/hblab_0805_Testing-Balloonicorn-After-Party -https://github.com/katiayx/hblab_0805_Testing-Balloonicorn-After-Party -Entry file: hblab_0805_Testing-Balloonicorn-After-Party/party.py -Scanned: 2016-10-19 11:40:28.721444 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iverstraeten/headlines -https://github.com/iverstraeten/headlines -Entry file: headlines/headlines.py -Scanned: 2016-10-19 11:40:30.615200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mizzlr/FlaskWebApp -https://github.com/Mizzlr/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-19 11:40:31.156487 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MusaTamzid05/FlaskYoutubeTest -https://github.com/MusaTamzid05/FlaskYoutubeTest -Entry file: None -Scanned: 2016-10-19 11:40:33.535160 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MusaTamzid05/FlaskYoutubeTest. - -ApexMuse/FlaskWebDevelopmentPractice -https://github.com/ApexMuse/FlaskWebDevelopmentPractice -Entry file: FlaskWebDevelopmentPractice/extensions.py -Scanned: 2016-10-19 11:40:34.785125 -No vulnerabilities found. - - -brizow/FlaskTriviaApp -https://github.com/brizow/FlaskTriviaApp -Entry file: FlaskTriviaApp/FlaskWebProject1/__init__.py -Scanned: 2016-10-19 11:40:37.579755 -Vulnerability 1: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 37, trigger word "form[": - question = request.form['question'] -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = render_template('CreateQuestion.html',title='Create a question', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('CreatedQuestion.html',question=question, title='Thanks!', year=year) - -Vulnerability 2: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 56, trigger word "get(": - question = r.get(title + ':question') -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - -Vulnerability 3: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 60, trigger word "form[": - submittedAnswer = request.form['submittedAnswer'] -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - -Vulnerability 4: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 62, trigger word "get(": - answer = r.get(title + ':answer') -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - - - -Chi-Qingjun/FlaskWechatDev -https://github.com/Chi-Qingjun/FlaskWechatDev -Entry file: FlaskWechatDev/app/__init__.py -Scanned: 2016-10-19 11:40:38.962454 -Vulnerability 1: -File: FlaskWechatDev/app/main/views.py - > User input at line 30, trigger word ".data": - tree = ET.fromstring(request.data.decode('utf-8')) -File: FlaskWechatDev/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('text.xml',to_user_name=tree.find('FromUserName').text, from_user_name=tree.find('ToUserName').text, timestamp=datetime.utcnow().timestamp(), content=tree.find('Content').text) - - - -lindsaynchan/hb_flask_testing -https://github.com/lindsaynchan/hb_flask_testing -Entry file: hb_flask_testing/party.py -Scanned: 2016-10-19 11:40:40.754641 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simsinght/microblog_flask_tutorial -https://github.com/simsinght/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 11:40:43.744199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -measurigtime/flask-by-example -https://github.com/measurigtime/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-19 11:40:44.597941 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Anthonyhawkins/flask_megatutorial_lab -https://github.com/Anthonyhawkins/flask_megatutorial_lab -Entry file: flask_megatutorial_lab/app/__init__.py -Scanned: 2016-10-19 11:40:45.852603 -No vulnerabilities found. - - -beatricep/hblab_0805_testing-flask -https://github.com/beatricep/hblab_0805_testing-flask -Entry file: hblab_0805_testing-flask/party.py -Scanned: 2016-10-19 11:40:47.601193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottx611x/AWS-SNS-Flask -https://github.com/scottx611x/AWS-SNS-Flask -Entry file: AWS-SNS-Flask/recieve_SNS.py -Scanned: 2016-10-19 11:40:49.588689 -No vulnerabilities found. - - -daniellawrence/flask-rest-sqla -https://github.com/daniellawrence/flask-rest-sqla -Entry file: flask-rest-sqla/web.py -Scanned: 2016-10-19 11:40:55.834741 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -12DReflections/docker_flask_mdb -https://github.com/12DReflections/docker_flask_mdb -Entry file: docker_flask_mdb/app.py -Scanned: 2016-10-19 11:40:57.066117 -No vulnerabilities found. - - -yucealiosman1/flask-deneme1 -https://github.com/yucealiosman1/flask-deneme1 -Entry file: flask-deneme1/app.py -Scanned: 2016-10-19 11:40:58.329565 -No vulnerabilities found. - - -vecelo/flask_lear_proj -https://github.com/vecelo/flask_lear_proj -Entry file: flask_lear_proj/blogs/Lib/site-packages/flask-0.11.1-py2.7.egg/flask/sessions.py -Scanned: 2016-10-19 11:41:01.964452 -No vulnerabilities found. - - -dinhnv/nginx-flask-stub -https://github.com/dinhnv/nginx-flask-stub -Entry file: nginx-flask-stub/webapp/eanstub_app.py -Scanned: 2016-10-19 11:41:08.394600 -No vulnerabilities found. - - -tinapastelero/HB-flask-test -https://github.com/tinapastelero/HB-flask-test -Entry file: HB-flask-test/party.py -Scanned: 2016-10-19 11:41:10.069637 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurelkorwin/hb-flask-testing -https://github.com/laurelkorwin/hb-flask-testing -Entry file: hb-flask-testing/party.py -Scanned: 2016-10-19 11:41:11.896108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lgorham/flask_testing_0805 -https://github.com/lgorham/flask_testing_0805 -Entry file: flask_testing_0805/party.py -Scanned: 2016-10-19 11:41:18.658349 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eugenepark81/flask-hello-world -https://github.com/eugenepark81/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:41:21.211998 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -NexusRJ/react_flask_blog -https://github.com/NexusRJ/react_flask_blog -Entry file: react_flask_blog/app/__init__.py -Scanned: 2016-10-19 11:41:23.699983 -Vulnerability 1: -File: react_flask_blog/app/admin/views.py - > User input at line 102, trigger word "get(": - x = Article.query.filter_by(id=request.args.get('id')).first() -File: react_flask_blog/app/admin/views.py - > reaches line 106, trigger word "flash(": - flash('已删除' + x.title) - - - -stonewm/flask_by_example -https://github.com/stonewm/flask_by_example -Entry file: flask_by_example/headlines.py -Scanned: 2016-10-19 11:41:24.968574 -No vulnerabilities found. - - -thechutrain/flask-burrito-app -https://github.com/thechutrain/flask-burrito-app -Entry file: flask-burrito-app/tacocat.py -Scanned: 2016-10-19 11:41:26.290232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jordanagreen/flask-todo-lists -https://github.com/jordanagreen/flask-todo-lists -Entry file: flask-todo-lists/app.py -Scanned: 2016-10-19 11:41:27.655024 -Vulnerability 1: -File: flask-todo-lists/views.py - > User input at line 24, trigger word "get(": - l = TodoList.query.get(id) -File: flask-todo-lists/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('list.html',title=l.title, list=l) - -Vulnerability 2: -File: flask-todo-lists/views.py - > User input at line 45, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-todo-lists/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = abort(400) -File: flask-todo-lists/views.py - > reaches line 48, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 3: -File: flask-todo-lists/views.py - > User input at line 45, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-todo-lists/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = abort(400) -File: flask-todo-lists/views.py - > reaches line 48, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - - - -tis86/flask -https://github.com/tis86/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:41:31.181852 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -yangliu2/flask -https://github.com/yangliu2/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:41:32.760908 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -KeyJia/Flask -https://github.com/KeyJia/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:41:34.261117 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Coolwater7/flask -https://github.com/Coolwater7/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:41:35.798989 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -vipitsoft/flask -https://github.com/vipitsoft/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:41:37.389054 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -reed-chi/flask -https://github.com/reed-chi/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:41:39.968535 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -huhjuang/Flask -https://github.com/huhjuang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:41:40.474196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mosquito/flask-example -https://github.com/mosquito/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 11:41:43.494702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -teuton0215/microblog -https://github.com/teuton0215/microblog -Entry file: None -Scanned: 2016-10-19 11:41:44.008387 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -babydeya/flaskr -https://github.com/babydeya/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:41:45.513286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rouzazari/flaskangular -https://github.com/rouzazari/flaskangular -Entry file: flaskangular/app/__init__.py -Scanned: 2016-10-19 11:41:47.776848 -No vulnerabilities found. - - -nocotan/flaski -https://github.com/nocotan/flaski -Entry file: flaski/app.py -Scanned: 2016-10-19 11:41:49.083904 -No vulnerabilities found. - - -berezovskiydenis/flasktaskr -https://github.com/berezovskiydenis/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:41:49.595046 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bencelder/flaskr -https://github.com/bencelder/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:41:50.139236 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -penglee87/flaskr -https://github.com/penglee87/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:41:51.626209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pecone/flaskr -https://github.com/pecone/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:41:58.138464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faridalrafi/flaskopencv -https://github.com/faridalrafi/flaskopencv -Entry file: flaskopencv/app.py -Scanned: 2016-10-19 11:41:59.844219 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smilemlz/flasktest -https://github.com/smilemlz/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 11:42:00.372606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YaleYeah/flasky -https://github.com/YaleYeah/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:42:08.878239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Runningdogs/flasky -https://github.com/Runningdogs/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:42:10.395267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seizans/flasko -https://github.com/seizans/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-19 11:42:12.042229 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -rouzazari/flaskfirst -https://github.com/rouzazari/flaskfirst -Entry file: flaskfirst/app/__init__.py -Scanned: 2016-10-19 11:42:19.373252 -No vulnerabilities found. - - -ChuckiePae/flaskr -https://github.com/ChuckiePae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:42:22.878737 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KamiNoSierhej/flaskkk -https://github.com/KamiNoSierhej/flaskkk -Entry file: flaskkk/flaskkk/Polczan.py -Scanned: 2016-10-19 11:42:25.107066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sampathweb/ml-cookiecutter-starter-flask-app -https://github.com/sampathweb/ml-cookiecutter-starter-flask-app -Entry file: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/__init__.py -Scanned: 2016-10-19 11:42:26.673662 -Vulnerability 1: -File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > User input at line 32, trigger word ".data": - submitted_data = form.data -Reassigned in: - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 36: sepal_length = float(submitted_data['sepal_length']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 37: sepal_width = float(submitted_data['sepal_width']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 38: petal_length = float(submitted_data['petal_length']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 39: petal_width = float(submitted_data['petal_width']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 42: flower_instance = [sepal_length, sepal_width, petal_length, petal_width] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 47: my_predictions = estimator.predict([flower_instance]) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 50: my_prediction = my_predictions[0] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 54: data = [flower_instance] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 28: data = [] -File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, prediction=predicted_iris, data=json.dumps(data)) - - - -roemhildtg/flask-can-crud -https://github.com/roemhildtg/flask-can-crud -Entry file: flask-can-crud/flaskapp.py -Scanned: 2016-10-19 11:42:28.601898 -No vulnerabilities found. - - -thippo/FlaskFrame -https://github.com/thippo/FlaskFrame -Entry file: FlaskFrame/myweb/__init__.py -Scanned: 2016-10-19 11:42:30.582933 -Vulnerability 1: -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > User input at line 12, trigger word ".data": - data = form.q.data.strip() -Reassigned in: - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 18: transfer_dict['pkuc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 19: transfer_dict['pkc'] = utils.WIF_to_compressed(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 20: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 21: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 22: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 24: transfer_dict['type'] = 1 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 25: transfer_dict['pkc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 26: transfer_dict['pkuc'] = utils.compressed_to_WIF(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 27: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 28: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 29: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 34: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 36: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 38: transfer_dict['type'] = 0 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('bitcoin',transfer_dict=transfer_dict, form=form) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 14: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 17: transfer_dict['type'] = 1 -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bitcoinaddress',data=data, form=form) - - - -famesprinter/FlaskDemo -https://github.com/famesprinter/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:42:31.097693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -omokehinde/FlaskExam -https://github.com/omokehinde/FlaskExam -Entry file: FlaskExam/app.py -Scanned: 2016-10-19 11:42:48.336897 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -fantingdong/flasky1 -https://github.com/fantingdong/flasky1 -Entry file: flasky1/app/__init__.py -Scanned: 2016-10-19 11:42:49.852795 -Vulnerability 1: -File: flasky1/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 55: posts = pagination.items - File: flasky1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flasky1/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky1/app/main/views.py - > Line 45: show_followed = False - File: flasky1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flasky1/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 67: posts = pagination.items -File: flasky1/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flasky1/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky1/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 134: comments = pagination.items - File: flasky1/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky1/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flasky1/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky1/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flasky1/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky1/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flasky1/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 246: comments = pagination.items -File: flasky1/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jmelchio/FlaskCF -https://github.com/jmelchio/FlaskCF -Entry file: FlaskCF/FlaskCF.py -Scanned: 2016-10-19 11:42:51.095094 -No vulnerabilities found. - - -lidingke/flaskStudy -https://github.com/lidingke/flaskStudy -Entry file: flaskStudy/user/app/__init__.py -Scanned: 2016-10-19 11:42:52.462614 -No vulnerabilities found. - - -xyq946692052/flaskLearn -https://github.com/xyq946692052/flaskLearn -Entry file: None -Scanned: 2016-10-19 11:42:53.737301 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xyq946692052/flaskLearn. - -wccosby/flaskML -https://github.com/wccosby/flaskML -Entry file: flaskML/app/__init__.py -Scanned: 2016-10-19 11:42:55.243342 -Vulnerability 1: -File: flaskML/app/views.py - > User input at line 32, trigger word ".data": - submitted_data = form.data -Reassigned in: - File: flaskML/app/views.py - > Line 36: sepal_length = float(submitted_data['sepal_length']) - File: flaskML/app/views.py - > Line 37: sepal_width = float(submitted_data['sepal_width']) - File: flaskML/app/views.py - > Line 38: petal_length = float(submitted_data['petal_length']) - File: flaskML/app/views.py - > Line 39: petal_width = float(submitted_data['petal_width']) - File: flaskML/app/views.py - > Line 42: flower_instance = [sepal_length, sepal_width, petal_length, petal_width] - File: flaskML/app/views.py - > Line 47: my_predictions = estimator.predict([flower_instance]) - File: flaskML/app/views.py - > Line 50: my_prediction = my_predictions[0] - File: flaskML/app/views.py - > Line 54: data = [flower_instance] - File: flaskML/app/views.py - > Line 28: data = [] -File: flaskML/app/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, prediction=predicted_iris, data=json.dumps(data)) - - - -nenodias/flask-webservice -https://github.com/nenodias/flask-webservice -Entry file: flask-webservice/app.py -Scanned: 2016-10-19 11:42:56.613290 -Vulnerability 1: -File: flask-webservice/app.py - > User input at line 32, trigger word "get(": - dev = Developer(request.json.name, request.json.get('hireDate', ''), request.json.get('focus', '')) -File: flask-webservice/app.py - > reaches line 35, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('developer'dev), 201) - -Vulnerability 2: -File: flask-webservice/app.py - > User input at line 45, trigger word "get(": - dev = Developer.query.get(id) -Reassigned in: - File: flask-webservice/app.py - > Line 46: dev.name = request.json.get('name', dev.name) - File: flask-webservice/app.py - > Line 47: dev.hireDate = request.json.get('hireDate', dev.name) - File: flask-webservice/app.py - > Line 48: dev.focus = request.json.get('focus', dev.focus) -File: flask-webservice/app.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('dev'dev) - - - -StrGlee/flask-demo -https://github.com/StrGlee/flask-demo -Entry file: None -Scanned: 2016-10-19 11:42:57.158223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StrGlee/flask-demo. - -SachinMaharana/firstapp-flask -https://github.com/SachinMaharana/firstapp-flask -Entry file: firstapp-flask/hello.py -Scanned: 2016-10-19 11:42:58.414594 -No vulnerabilities found. - - -kwin-wang/flask-learn -https://github.com/kwin-wang/flask-learn -Entry file: flask-learn/hello.py -Scanned: 2016-10-19 11:42:59.817312 -Vulnerability 1: -File: flask-learn/hello.py - > User input at line 52, trigger word "get(": - msg = Message(app.config.get('FLASKY_MAIL_SUBJECT_PREFIX') + subject,sender=app.config.get('FLASKY_MAIL_SENDER'), recipients=[to]) -File: flask-learn/hello.py - > reaches line 54, trigger word "render_template(": - msg.body = render_template(template + '.txt',kwargs) - -Vulnerability 2: -File: flask-learn/hello.py - > User input at line 52, trigger word "get(": - msg = Message(app.config.get('FLASKY_MAIL_SUBJECT_PREFIX') + subject,sender=app.config.get('FLASKY_MAIL_SENDER'), recipients=[to]) -File: flask-learn/hello.py - > reaches line 55, trigger word "render_template(": - msg.html = render_template(template + '.html',kwargs) - - - -xuqi1987/21.Flask -https://github.com/xuqi1987/21.Flask -Entry file: None -Scanned: 2016-10-19 11:43:01.020864 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xuqi1987/21.Flask. - -PlasmaSheep/flask-bug -https://github.com/PlasmaSheep/flask-bug -Entry file: None -Scanned: 2016-10-19 11:43:02.238246 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/PlasmaSheep/flask-bug. - -rconnol/PromotionsFlask -https://github.com/rconnol/PromotionsFlask -Entry file: PromotionsFlask/app/__init__.py -Scanned: 2016-10-19 11:43:03.481255 -No vulnerabilities found. - - -shtakai/flask-first -https://github.com/shtakai/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-19 11:43:04.102190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DaoQiu/flask_tutorial -https://github.com/DaoQiu/flask_tutorial -Entry file: None -Scanned: 2016-10-19 11:43:04.594896 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Maoao530/flask-todo -https://github.com/Maoao530/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 11:43:05.111617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -remarkablemark/flask-template -https://github.com/remarkablemark/flask-template -Entry file: None -Scanned: 2016-10-19 11:43:05.604903 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/remarkablemark/flask-template. - -Coolwater7/Flask_sample -https://github.com/Coolwater7/Flask_sample -Entry file: Flask_sample/app/__init__.py -Scanned: 2016-10-19 11:43:10.341930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -askz/flask-sandbox -https://github.com/askz/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 11:43:10.842001 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saeveritt/flask-DHT -https://github.com/saeveritt/flask-DHT -Entry file: flask-DHT/DHT-web.py -Scanned: 2016-10-19 11:43:12.249966 -No vulnerabilities found. - - -Nakort/flask_workouts -https://github.com/Nakort/flask_workouts -Entry file: flask_workouts/app/__init__.py -Scanned: 2016-10-19 11:43:13.500239 -No vulnerabilities found. - - -petersowa/flask_blog -https://github.com/petersowa/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:43:14.010141 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -janreyho/flask-demo -https://github.com/janreyho/flask-demo -Entry file: None -Scanned: 2016-10-19 11:43:14.529433 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janreyho/flask-demo. - -Jollyhrothgar/flask_template -https://github.com/Jollyhrothgar/flask_template -Entry file: None -Scanned: 2016-10-19 11:43:20.016945 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jollyhrothgar/flask_template. - -apengok/flask_tutor -https://github.com/apengok/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-19 11:43:24.519868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minodes/flask_boilerplate -https://github.com/minodes/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-19 11:43:26.041795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guoqiao/flask-examples -https://github.com/guoqiao/flask-examples -Entry file: flask-examples/minitwit/minitwit.py -Scanned: 2016-10-19 11:43:29.123358 -Vulnerability 1: -File: flask-examples/minitwit/minitwit.py - > User input at line 78, trigger word "get(": - profile_user = User.objects.filter(username__exact=username).get() -Reassigned in: - File: flask-examples/minitwit/minitwit.py - > Line 84: followed = profile_user in g.user.followers or None - File: flask-examples/minitwit/minitwit.py - > Line 82: followed = False -File: flask-examples/minitwit/minitwit.py - > reaches line 78, trigger word "filter(": - profile_user = User.objects.filter(username__exact=username).get() - -Vulnerability 2: -File: flask-examples/minitwit/minitwit.py - > User input at line 78, trigger word "get(": - profile_user = User.objects.filter(username__exact=username).get() -Reassigned in: - File: flask-examples/minitwit/minitwit.py - > Line 84: followed = profile_user in g.user.followers or None - File: flask-examples/minitwit/minitwit.py - > Line 82: followed = False -File: flask-examples/minitwit/minitwit.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('timeline.html',messages=messages, followed=followed, profile_user=profile_user) - -Vulnerability 3: -File: flask-examples/minitwit/minitwit.py - > User input at line 102, trigger word "get(": - user = User.objects.filter(username__exact=username).get() -File: flask-examples/minitwit/minitwit.py - > reaches line 102, trigger word "filter(": - user = User.objects.filter(username__exact=username).get() - -Vulnerability 4: -File: flask-examples/minitwit/minitwit.py - > User input at line 102, trigger word "get(": - user = User.objects.filter(username__exact=username).get() -File: flask-examples/minitwit/minitwit.py - > reaches line 105, trigger word "filter(": - User.objects.filter(username__exact=g.user.username).update_one(add_to_set__followers=user) - -Vulnerability 5: -File: flask-examples/minitwit/minitwit.py - > User input at line 120, trigger word "get(": - user = User.objects.filter(username__exact=username).get() -File: flask-examples/minitwit/minitwit.py - > reaches line 120, trigger word "filter(": - user = User.objects.filter(username__exact=username).get() - -Vulnerability 6: -File: flask-examples/minitwit/minitwit.py - > User input at line 120, trigger word "get(": - user = User.objects.filter(username__exact=username).get() -File: flask-examples/minitwit/minitwit.py - > reaches line 123, trigger word "filter(": - User.objects.filter(username__exact=g.user.username).update_one(pull__followers=user) - -Vulnerability 7: -File: flask-examples/minitwit/minitwit.py - > User input at line 153, trigger word "get(": - user = User.objects.filter(username__exact=request.form['username']).get() -Reassigned in: - File: flask-examples/minitwit/minitwit.py - > Line 158: session['user_id'] = user.id -File: flask-examples/minitwit/minitwit.py - > reaches line 153, trigger word "filter(": - user = User.objects.filter(username__exact=request.form['username']).get() - -Vulnerability 8: -File: flask-examples/minitwit/minitwit.py - > User input at line 153, trigger word "form[": - user = User.objects.filter(username__exact=request.form['username']).get() -Reassigned in: - File: flask-examples/minitwit/minitwit.py - > Line 158: session['user_id'] = user.id -File: flask-examples/minitwit/minitwit.py - > reaches line 153, trigger word "filter(": - user = User.objects.filter(username__exact=request.form['username']).get() - - - -ibhan88/Flask-Testing -https://github.com/ibhan88/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:43:30.697183 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -titov-andrei/microblog-flask -https://github.com/titov-andrei/microblog-flask -Entry file: None -Scanned: 2016-10-19 11:43:32.298788 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -anthonyheidenreich/flask-vagrant -https://github.com/anthonyheidenreich/flask-vagrant -Entry file: flask-vagrant/app.py -Scanned: 2016-10-19 11:43:34.104901 -No vulnerabilities found. - - -r0oki3/flask-webapp -https://github.com/r0oki3/flask-webapp -Entry file: flask-webapp/app.py -Scanned: 2016-10-19 11:43:51.354780 -No vulnerabilities found. - - -znebby/ubuntu-flask -https://github.com/znebby/ubuntu-flask -Entry file: ubuntu-flask/myproject/myproject.py -Scanned: 2016-10-19 11:43:52.574049 -No vulnerabilities found. - - -Muazzama/flask_app -https://github.com/Muazzama/flask_app -Entry file: None -Scanned: 2016-10-19 11:43:53.093480 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Muazzama/flask_app. - -tjctw/flask_intro -https://github.com/tjctw/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-19 11:43:54.602177 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -wouzar/flask-microblog -https://github.com/wouzar/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:43:56.122336 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DanielQujun/flask-web -https://github.com/DanielQujun/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-19 11:43:58.986520 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kzh4ng/flask_server -https://github.com/kzh4ng/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 11:43:59.494918 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uisky/flask-fish -https://github.com/uisky/flask-fish -Entry file: flask-fish/skel/app/app.py -Scanned: 2016-10-19 11:44:00.844779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenpadua/flask-blog -https://github.com/glenpadua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:44:01.363341 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -buzibu/flask-blog -https://github.com/buzibu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:44:02.902946 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bgiesa/flask-test -https://github.com/bgiesa/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 11:44:04.440543 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -neoden/flask-nmail -https://github.com/neoden/flask-nmail -Entry file: flask-nmail/flask-nmail.py -Scanned: 2016-10-19 11:44:06.698889 -No vulnerabilities found. - - -vThaian/flask_example -https://github.com/vThaian/flask_example -Entry file: None -Scanned: 2016-10-19 11:44:07.222929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xawei/flask_gw -https://github.com/xawei/flask_gw -Entry file: flask_gw/app/__init__.py -Scanned: 2016-10-19 11:44:08.819223 -Vulnerability 1: -File: flask_gw/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 32: posts = pagination.items - File: flask_gw/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask_gw/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 22: show_followed = False - File: flask_gw/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask_gw/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 44: posts = pagination.items -File: flask_gw/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_gw/app/main/views.py - > User input at line 104, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 106: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_gw/app/main/views.py - > Line 108: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 111: comments = pagination.items - File: flask_gw/app/main/views.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_gw/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask_gw/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 172: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_gw/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask_gw/app/main/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 189: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_gw/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask_gw/app/main/views.py - > User input at line 219, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 220: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 223: comments = pagination.items -File: flask_gw/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -KeyJia/Flask-Python -https://github.com/KeyJia/Flask-Python -Entry file: Flask-Python/Flask.py -Scanned: 2016-10-19 11:44:10.071050 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rhymiz/flask-template -https://github.com/rhymiz/flask-template -Entry file: None -Scanned: 2016-10-19 11:44:10.567956 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rhymiz/flask-template. - -schoolofnetcom/flask-python -https://github.com/schoolofnetcom/flask-python -Entry file: flask-python/init.py -Scanned: 2016-10-19 11:44:12.166376 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-python/venv/lib/python2.7/genericpath.py - -TheDeadMays/flask-bootstrap -https://github.com/TheDeadMays/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-19 11:44:14.869403 -No vulnerabilities found. - - -whitneybelba/Flask-Testing -https://github.com/whitneybelba/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:44:15.385227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MadhuriHB/Testing-flask -https://github.com/MadhuriHB/Testing-flask -Entry file: Testing-flask/party.py -Scanned: 2016-10-19 11:44:15.877138 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tuvttran/flask-learning -https://github.com/tuvttran/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-19 11:44:22.128601 -No vulnerabilities found. - - -couldtt/flask-foundation -https://github.com/couldtt/flask-foundation -Entry file: flask-foundation/app/__init__.py -Scanned: 2016-10-19 11:44:26.726161 -No vulnerabilities found. - - -ewjoachim/bttn_flask -https://github.com/ewjoachim/bttn_flask -Entry file: bttn_flask/bttn_flask.py -Scanned: 2016-10-19 11:44:27.936764 -No vulnerabilities found. - - -stonewm/flask_blog -https://github.com/stonewm/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:44:29.482833 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -curious725/blog_flask -https://github.com/curious725/blog_flask -Entry file: blog_flask/app.py -Scanned: 2016-10-19 11:44:33.550477 -No vulnerabilities found. - - -ssong319/Flask-Testing -https://github.com/ssong319/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-19 11:44:34.054821 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yantiz/flask-blog -https://github.com/yantiz/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:44:34.605763 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nanakenashi/flask_hello -https://github.com/nanakenashi/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 11:44:52.707652 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voltagemeeder/FirstFlask -https://github.com/voltagemeeder/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-19 11:44:53.329248 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -zembrzuski/openshift-flask -https://github.com/zembrzuski/openshift-flask -Entry file: openshift-flask/app.py -Scanned: 2016-10-19 11:44:55.564901 -No vulnerabilities found. - - -wgerald90/tth-Flask -https://github.com/wgerald90/tth-Flask -Entry file: None -Scanned: 2016-10-19 11:44:59.483074 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NataKuskova/Classwork_flask -https://github.com/NataKuskova/Classwork_flask -Entry file: Classwork_flask/script.py -Scanned: 2016-10-19 11:45:00.724765 -Vulnerability 1: -File: Classwork_flask/script.py - > User input at line 27, trigger word "form[": - text = request.form['text'] -File: Classwork_flask/script.py - > reaches line 31, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('result',text=text)) - -Vulnerability 2: -File: Classwork_flask/script.py - > User input at line 27, trigger word "form[": - text = request.form['text'] -File: Classwork_flask/script.py - > reaches line 31, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('result',text=text)) - - - -BadSol/flask-vendor -https://github.com/BadSol/flask-vendor -Entry file: flask-vendor/vendor/__init__.py -Scanned: 2016-10-19 11:45:02.389896 -Vulnerability 1: -File: flask-vendor/vendor/user/views.py - > User input at line 18, trigger word "form[": - user_obj = User.query.filter(User.email == request.form['email'].lower()).one_or_none() -File: flask-vendor/vendor/user/views.py - > reaches line 18, trigger word "filter(": - user_obj = User.query.filter(User.email == request.form['email'].lower()).one_or_none() - - - -kozyrevsergey89/flask_backend -https://github.com/kozyrevsergey89/flask_backend -Entry file: flask_backend/hello.py -Scanned: 2016-10-19 11:45:03.717191 -No vulnerabilities found. - - -haimapi/flask_pro -https://github.com/haimapi/flask_pro -Entry file: flask_pro/he.py -Scanned: 2016-10-19 11:45:04.222661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -katiayx/hblab_0805_Testing-Balloonicorn-After-Party -https://github.com/katiayx/hblab_0805_Testing-Balloonicorn-After-Party -Entry file: hblab_0805_Testing-Balloonicorn-After-Party/party.py -Scanned: 2016-10-19 11:45:04.714448 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -csyouk/faust-register-py -https://github.com/csyouk/faust-register-py -Entry file: faust-register-py/register_server.py -Scanned: 2016-10-19 11:45:06.490204 -Vulnerability 1: -File: faust-register-py/register_server.py - > User input at line 56, trigger word "form[": - session = game.find_session(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 53: session = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 2: -File: faust-register-py/register_server.py - > User input at line 57, trigger word "form[": - player_list = player.get_all_player(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 52: player_list = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 3: -File: faust-register-py/register_server.py - > User input at line 58, trigger word "form[": - player_count = player.get_count(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 54: player_count = 0 -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 4: -File: faust-register-py/register_server.py - > User input at line 139, trigger word "get(": - error_type = request.args.get('error_type') -File: faust-register-py/register_server.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alert.html',error_type=error_type) - - - -deonna/flask -https://github.com/deonna/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:45:08.449707 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ksbek/flask -https://github.com/ksbek/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:45:09.030585 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -feirendada/Flask -https://github.com/feirendada/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:45:09.552394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krandmm/flask -https://github.com/krandmm/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:45:10.096714 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -huhjuang/Flask -https://github.com/huhjuang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:45:10.586641 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vaspy/Flask -https://github.com/Vaspy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:45:12.101982 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sebas095/Flask -https://github.com/sebas095/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:45:14.102159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codigofacilito/flask_cf -https://github.com/codigofacilito/flask_cf -Entry file: flask_cf/Project/main.py -Scanned: 2016-10-19 11:45:16.727672 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lizTheDeveloper/__g26_flask -https://github.com/lizTheDeveloper/__g26_flask -Entry file: __g26_flask/model.py -Scanned: 2016-10-19 11:45:18.061777 -Vulnerability 1: -File: __g26_flask/app.py - > User input at line 27, trigger word "get(": - user = load_user(session.get('user_id')) -File: __g26_flask/app.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title='Pokestraveganzamon', pokemon=pokelist, user=user) - - - -ZakStrassberg/flask_products_group_project -https://github.com/ZakStrassberg/flask_products_group_project -Entry file: flask_products_group_project/server.py -Scanned: 2016-10-19 11:45:19.476068 -No vulnerabilities found. - - -iamrajhans/FlaskBackend -https://github.com/iamrajhans/FlaskBackend -Entry file: FlaskBackend/drone/main.py -Scanned: 2016-10-19 11:45:28.567705 -No vulnerabilities found. - - -yantiz/flasktaskr -https://github.com/yantiz/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:45:29.123533 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nocotan/flaski -https://github.com/nocotan/flaski -Entry file: flaski/app.py -Scanned: 2016-10-19 11:45:32.283222 -No vulnerabilities found. - - -asimonia/Flaskbook -https://github.com/asimonia/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-19 11:45:32.797058 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Markmwaura/Flaskblog -https://github.com/Markmwaura/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-19 11:45:35.081719 -No vulnerabilities found. - - -seizans/flasko -https://github.com/seizans/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-19 11:45:35.686289 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -vennyk/flasktaskr -https://github.com/vennyk/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:45:36.192274 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -akjanik/flasktutorial -https://github.com/akjanik/flasktutorial -Entry file: None -Scanned: 2016-10-19 11:45:53.742552 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hyteer/flaskdemo -https://github.com/hyteer/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-19 11:45:54.366018 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhang555/flasky -https://github.com/zhang555/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:45:56.108669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuqingwuqingwu/flaskk -https://github.com/wuqingwuqingwu/flaskk -Entry file: flaskk/hello.py -Scanned: 2016-10-19 11:46:05.591944 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskk/venv/lib/python2.7/genericpath.py - -HJeongWon/flaskr -https://github.com/HJeongWon/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:46:06.105208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarnyl/flaskpost -https://github.com/oscarnyl/flaskpost -Entry file: flaskpost/flaskpost/__init__.py -Scanned: 2016-10-19 11:46:07.501896 -No vulnerabilities found. - - -AdamWawrow/flasktaskr -https://github.com/AdamWawrow/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:46:08.020573 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -reed-chi/flasktaskr -https://github.com/reed-chi/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:46:08.510990 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thippo/FlaskFrame -https://github.com/thippo/FlaskFrame -Entry file: FlaskFrame/myweb/__init__.py -Scanned: 2016-10-19 11:46:10.345994 -Vulnerability 1: -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > User input at line 12, trigger word ".data": - data = form.q.data.strip() -Reassigned in: - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 18: transfer_dict['pkuc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 19: transfer_dict['pkc'] = utils.WIF_to_compressed(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 20: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 21: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 22: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 24: transfer_dict['type'] = 1 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 25: transfer_dict['pkc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 26: transfer_dict['pkuc'] = utils.compressed_to_WIF(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 27: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 28: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 29: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 34: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 36: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 38: transfer_dict['type'] = 0 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('bitcoin',transfer_dict=transfer_dict, form=form) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 14: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 17: transfer_dict['type'] = 1 -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bitcoinaddress',data=data, form=form) - - - -sevenZz/FlaskTest -https://github.com/sevenZz/FlaskTest -Entry file: None -Scanned: 2016-10-19 11:46:10.856496 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sevenZz/FlaskTest. - -omokehinde/FlaskExam -https://github.com/omokehinde/FlaskExam -Entry file: FlaskExam/app.py -Scanned: 2016-10-19 11:46:12.167479 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Niel2016/FlaskApp -https://github.com/Niel2016/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 11:46:12.713757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Chemoday/FlaskPractice -https://github.com/Chemoday/FlaskPractice -Entry file: FlaskPractice/app/__init__.py -Scanned: 2016-10-19 11:46:14.114411 -No vulnerabilities found. - - -JonathanFrederick/flask-cards -https://github.com/JonathanFrederick/flask-cards -Entry file: flask-cards/app.py -Scanned: 2016-10-19 11:46:15.944462 -Vulnerability 1: -File: flask-cards/app.py - > User input at line 20, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-cards/app.py - > Line 26: user = models.User(username=username, password=password) -File: flask-cards/app.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - -Vulnerability 2: -File: flask-cards/app.py - > User input at line 21, trigger word "get(": - password = request.json.get('password') -Reassigned in: - File: flask-cards/app.py - > Line 26: user = models.User(username=username, password=password) -File: flask-cards/app.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - - - -petersowa/flask_blog -https://github.com/petersowa/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:46:16.436461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -janreyho/flask-demo -https://github.com/janreyho/flask-demo -Entry file: None -Scanned: 2016-10-19 11:46:16.937215 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janreyho/flask-demo. - -morpy/flask_app -https://github.com/morpy/flask_app -Entry file: None -Scanned: 2016-10-19 11:46:17.482712 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morpy/flask_app. - -sacktla/JOURNAL_FLASK -https://github.com/sacktla/JOURNAL_FLASK -Entry file: JOURNAL_FLASK/journal.py -Scanned: 2016-10-19 11:46:19.748498 -No vulnerabilities found. - - -MrRedAmber/SlackFlask -https://github.com/MrRedAmber/SlackFlask -Entry file: SlackFlask/k.py -Scanned: 2016-10-19 11:46:20.995112 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flavio99/Flask-Scaffold -https://github.com/flavio99/Flask-Scaffold -Entry file: None -Scanned: 2016-10-19 11:46:24.552973 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/flavio99/Flask-Scaffold. - -Caveat4U/flask.docker -https://github.com/Caveat4U/flask.docker -Entry file: flask/hello.py -Scanned: 2016-10-19 11:46:29.115638 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -MustafaAdam/flask_app -https://github.com/MustafaAdam/flask_app -Entry file: None -Scanned: 2016-10-19 11:46:30.731795 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MustafaAdam/flask_app. - -huyuguo/flask_small -https://github.com/huyuguo/flask_small -Entry file: flask_small/small.py -Scanned: 2016-10-19 11:46:33.318958 -No vulnerabilities found. - - -michaelbahng999/dnd-flask -https://github.com/michaelbahng999/dnd-flask -Entry file: dnd-flask/app.py -Scanned: 2016-10-19 11:46:34.522978 -No vulnerabilities found. - - -sbarratt/flask-prometheus -https://github.com/sbarratt/flask-prometheus -Entry file: flask-prometheus/flask_prometheus/__init__.py -Scanned: 2016-10-19 11:46:36.775363 -No vulnerabilities found. - - -tjctw/flask_intro -https://github.com/tjctw/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-19 11:46:37.301733 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -evanxg852000/flask-starter -https://github.com/evanxg852000/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 11:46:37.806835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelescrich/pdf-flask -https://github.com/rafaelescrich/pdf-flask -Entry file: pdf-flask/app.py -Scanned: 2016-10-19 11:47:00.137725 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wouzar/flask-microblog -https://github.com/wouzar/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:47:00.638023 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DanielQujun/flask-web -https://github.com/DanielQujun/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-19 11:47:01.138267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CiscoPartnerCloudRotation/sparkbot-flask -https://github.com/CiscoPartnerCloudRotation/sparkbot-flask -Entry file: sparkbot-flask/spark_integration.py -Scanned: 2016-10-19 11:47:02.527566 -No vulnerabilities found. - - -vennyk/flask-blog -https://github.com/vennyk/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 11:47:03.066599 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -we444/flask-myblog -https://github.com/we444/flask-myblog -Entry file: flask-myblog/app/__init__.py -Scanned: 2016-10-19 11:47:08.519976 -No vulnerabilities found. - - -crhowell/plj-flask -https://github.com/crhowell/plj-flask -Entry file: plj-flask/app.py -Scanned: 2016-10-19 11:47:09.875335 -Vulnerability 1: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 2: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 3: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 90, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 4: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 90, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 5: -File: plj-flask/app.py - > User input at line 110, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 114: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) - File: plj-flask/app.py - > Line 115: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',entry=entry) - - - -bgiesa/flask-test -https://github.com/bgiesa/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 11:47:10.870224 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -neoden/flask-nmail -https://github.com/neoden/flask-nmail -Entry file: flask-nmail/flask-nmail.py -Scanned: 2016-10-19 11:47:12.203880 -No vulnerabilities found. - - -vThaian/flask_example -https://github.com/vThaian/flask_example -Entry file: None -Scanned: 2016-10-19 11:47:12.700327 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -helelily/flask-demo -https://github.com/helelily/flask-demo -Entry file: None -Scanned: 2016-10-19 11:47:13.189697 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/helelily/flask-demo. - -HCT118/Flask-web -https://github.com/HCT118/Flask-web -Entry file: Flask-web/app/__init__.py -Scanned: 2016-10-19 11:47:14.723458 -Vulnerability 1: -File: Flask-web/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 55: posts = pagination.items - File: Flask-web/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flask-web/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 45: show_followed = False - File: Flask-web/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flask-web/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 67: posts = pagination.items -File: Flask-web/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Flask-web/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Flask-web/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 134: comments = pagination.items - File: Flask-web/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask-web/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Flask-web/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask-web/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flask-web/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask-web/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Flask-web/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 246: comments = pagination.items -File: Flask-web/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -chenglinguang/flask_blog -https://github.com/chenglinguang/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:47:15.238265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jraaurellano/first-flask -https://github.com/jraaurellano/first-flask -Entry file: None -Scanned: 2016-10-19 11:47:18.506911 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -olagodavid/Flask-project -https://github.com/olagodavid/Flask-project -Entry file: None -Scanned: 2016-10-19 11:47:21.927753 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tsriram/flask-playground -https://github.com/tsriram/flask-playground -Entry file: flask-playground/app/__init__.py -Scanned: 2016-10-19 11:47:23.128658 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shutdown57/learning_flask -https://github.com/shutdown57/learning_flask -Entry file: learning_flask/src/app.py -Scanned: 2016-10-19 11:47:24.808406 -Vulnerability 1: -File: learning_flask/src/users/views.py - > User input at line 79, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/src/users/views.py - > Line 83: my_coordinates = p.address_to_latlng(address) - File: learning_flask/src/users/views.py - > Line 84: places = p.query(address) - File: learning_flask/src/users/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/src/users/views.py - > Line 71: places = [] - File: learning_flask/src/users/views.py - > Line 72: my_coordinates = (37.4221, -122.0844) - File: learning_flask/src/users/views.py - > Line 76: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/src/users/views.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/src/users/views.py - > User input at line 79, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/src/users/views.py - > Line 83: my_coordinates = p.address_to_latlng(address) - File: learning_flask/src/users/views.py - > Line 84: places = p.query(address) - File: learning_flask/src/users/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/src/users/views.py - > Line 71: places = [] - File: learning_flask/src/users/views.py - > Line 72: my_coordinates = (37.4221, -122.0844) - File: learning_flask/src/users/views.py - > Line 76: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/src/users/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -RatulGhosh/flask_tutorial -https://github.com/RatulGhosh/flask_tutorial -Entry file: None -Scanned: 2016-10-19 11:47:25.337948 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -voltagemeeder/flask-intro -https://github.com/voltagemeeder/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 11:47:25.849415 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdammkoehler/root_flask -https://github.com/rdammkoehler/root_flask -Entry file: root_flask/n/s/f/app_factory.py -Scanned: 2016-10-19 11:47:27.327783 -No vulnerabilities found. - - -aniruddhabarapatre/flask-microblog -https://github.com/aniruddhabarapatre/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:47:27.835920 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KeyJia/Flask-Python -https://github.com/KeyJia/Flask-Python -Entry file: Flask-Python/Flask.py -Scanned: 2016-10-19 11:47:28.366191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GuanYQ0926/flask-restful -https://github.com/GuanYQ0926/flask-restful -Entry file: flask-restful/flask_restful/__init__.py -Scanned: 2016-10-19 11:47:30.960250 -No vulnerabilities found. - - -kuaiwu/MyFlask -https://github.com/kuaiwu/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-19 11:47:33.780492 -Vulnerability 1: -File: MyFlask/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 55: posts = pagination.items - File: MyFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: MyFlask/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 45: show_followed = False - File: MyFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: MyFlask/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 67: posts = pagination.items -File: MyFlask/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: MyFlask/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: MyFlask/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 134: comments = pagination.items - File: MyFlask/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: MyFlask/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: MyFlask/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: MyFlask/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: MyFlask/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: MyFlask/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: MyFlask/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 246: comments = pagination.items -File: MyFlask/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -Tangugo/flask_learn -https://github.com/Tangugo/flask_learn -Entry file: flask_learn/hello.py -Scanned: 2016-10-19 11:47:34.291252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -upbit/flask_whiteboard -https://github.com/upbit/flask_whiteboard -Entry file: flask_whiteboard/main.py -Scanned: 2016-10-19 11:47:38.096088 -Vulnerability 1: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 76, trigger word "url_for(": - content = '请在地址栏后或输入框中,输入要分词的内容
例如: %s

' % (url_for('cut_words',word=EXAMPLE_WORDS).encode('utf8'), '/cut/' + EXAMPLE_WORDS) - -Vulnerability 2: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 76, trigger word "url_for(": - content = '请在地址栏后或输入框中,输入要分词的内容
例如: %s

' % (url_for('cut_words',word=EXAMPLE_WORDS).encode('utf8'), '/cut/' + EXAMPLE_WORDS) - -Vulnerability 3: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 4: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 5: -File: flask_whiteboard/main.py - > User input at line 43, trigger word "get(": - mode = request.method == 'POST'request.form['mode']request.args.get('mode') -Reassigned in: - File: flask_whiteboard/main.py - > Line 48: mode = 'mms' - File: flask_whiteboard/main.py - > Line 75: mode = '' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 6: -File: flask_whiteboard/main.py - > User input at line 43, trigger word "form[": - mode = request.method == 'POST'request.form['mode']request.args.get('mode') -Reassigned in: - File: flask_whiteboard/main.py - > Line 48: mode = 'mms' - File: flask_whiteboard/main.py - > Line 75: mode = '' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 7: -File: flask_whiteboard/main.py - > User input at line 87, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 90: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 91: segments = ['%s/%s' % (w, f) for (w, f) in pseg.cut(word)] - File: flask_whiteboard/main.py - > Line 95: word = '' -File: flask_whiteboard/main.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, content=content, title='Jieba词性标注测试') - -Vulnerability 8: -File: flask_whiteboard/main.py - > User input at line 87, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 90: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 91: segments = ['%s/%s' % (w, f) for (w, f) in pseg.cut(word)] - File: flask_whiteboard/main.py - > Line 95: word = '' -File: flask_whiteboard/main.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, content=content, title='Jieba词性标注测试') - - - -python-ning/flask_blog -https://github.com/python-ning/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 11:47:38.595196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenju254/flask-microblog -https://github.com/kenju254/flask-microblog -Entry file: None -Scanned: 2016-10-19 11:47:39.101385 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chloebecker/flask-tutorial -https://github.com/chloebecker/flask-tutorial -Entry file: None -Scanned: 2016-10-19 11:47:56.653416 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -4dsolutions/tiny_flask -https://github.com/4dsolutions/tiny_flask -Entry file: tiny_flask/flask_app.py -Scanned: 2016-10-19 11:48:03.184760 -No vulnerabilities found. - - -EduhG/Flask-App -https://github.com/EduhG/Flask-App -Entry file: Flask-App/app/flaskapp/__init__.py -Scanned: 2016-10-19 11:48:04.516083 -No vulnerabilities found. - - -submorphic/hello-flask -https://github.com/submorphic/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 11:48:05.099743 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -jmontroy90/first-flask -https://github.com/jmontroy90/first-flask -Entry file: None -Scanned: 2016-10-19 11:48:05.602918 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -szomolanyi/flask-base -https://github.com/szomolanyi/flask-base -Entry file: None -Scanned: 2016-10-19 11:48:09.103877 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/szomolanyi/flask-base. - -DGideas/flask_microservice -https://github.com/DGideas/flask_microservice -Entry file: flask_microservice/main.py -Scanned: 2016-10-19 11:48:11.329977 -No vulnerabilities found. - - -johnngugi/flask-assesment -https://github.com/johnngugi/flask-assesment -Entry file: flask-assesment/app/__init__.py -Scanned: 2016-10-19 11:48:12.913834 -No vulnerabilities found. - - -lieuhon/First-Flask -https://github.com/lieuhon/First-Flask -Entry file: First-Flask/app/__init__.py -Scanned: 2016-10-19 11:48:14.750196 -Vulnerability 1: -File: First-Flask/app/mod_auth/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: First-Flask/app/mod_auth/views.py - > Line 37: session['user_id'] = user.id -File: First-Flask/app/mod_auth/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -YuliYaSokolova/microservices_flask -https://github.com/YuliYaSokolova/microservices_flask -Entry file: microservices_flask/rating_route.py -Scanned: 2016-10-19 11:48:19.910398 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: microservices_flask/.envi/lib/python3.4/struct.py - -nenodias/flask-bigapp -https://github.com/nenodias/flask-bigapp -Entry file: flask-bigapp/app/__init__.py -Scanned: 2016-10-19 11:48:21.245051 -No vulnerabilities found. - - -rezastd/flask_two -https://github.com/rezastd/flask_two -Entry file: flask_two/app.py -Scanned: 2016-10-19 11:48:25.663354 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_two/venv/lib/python2.7/genericpath.py - -wuruthie/FirstFlask -https://github.com/wuruthie/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-19 11:48:26.205652 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -patoupatou/microblog -https://github.com/patoupatou/microblog -Entry file: None -Scanned: 2016-10-19 11:48:27.183488 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ahoff314/geet -https://github.com/ahoff314/geet -Entry file: geet/geet/app/main.py -Scanned: 2016-10-19 11:48:30.752853 -No vulnerabilities found. - - -csyouk/faust-register-py -https://github.com/csyouk/faust-register-py -Entry file: faust-register-py/register_server.py -Scanned: 2016-10-19 11:48:35.336127 -Vulnerability 1: -File: faust-register-py/register_server.py - > User input at line 56, trigger word "form[": - session = game.find_session(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 53: session = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 2: -File: faust-register-py/register_server.py - > User input at line 57, trigger word "form[": - player_list = player.get_all_player(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 52: player_list = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 3: -File: faust-register-py/register_server.py - > User input at line 58, trigger word "form[": - player_count = player.get_count(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 54: player_count = 0 -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 4: -File: faust-register-py/register_server.py - > User input at line 139, trigger word "get(": - error_type = request.args.get('error_type') -File: faust-register-py/register_server.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alert.html',error_type=error_type) - - - -Riffstation/flaskutilsexample -https://github.com/Riffstation/flaskutilsexample -Entry file: flaskutilsexample/src/app/__init__.py -Scanned: 2016-10-19 11:54:33.758962 -No vulnerabilities found. - - -KyleSeem/Flask -https://github.com/KyleSeem/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:54:35.302435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nppat/Flask -https://github.com/nppat/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:54:35.866273 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dolv/Flask -https://github.com/dolv/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:54:36.363807 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mamun-dueee/flask -https://github.com/Mamun-dueee/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 11:54:36.936827 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 11:54:37.473829 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cloverstd/flask-wechatpy -https://github.com/cloverstd/flask-wechatpy -Entry file: flask-wechatpy/demo.py -Scanned: 2016-10-19 11:54:38.889257 -No vulnerabilities found. - - -13923858795/Tutorial -https://github.com/13923858795/Tutorial -Entry file: Tutorial/my/app/__init__.py -Scanned: 2016-10-19 11:54:42.351522 -Vulnerability 1: -File: Tutorial/my/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 33: posts = pagination.items - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Tutorial/my/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 23: show_followed = False - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Tutorial/my/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 44: posts = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Tutorial/my/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 111: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Tutorial/my/app/main/views.py - > Line 113: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 116: comments = pagination.items - File: Tutorial/my/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Tutorial/my/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Tutorial/my/app/main/views.py - > User input at line 176, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 177: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 180: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 175: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Tutorial/my/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 194: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 197: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 192: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 199, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Tutorial/my/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 235: comments = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -szparag3/flask-hello-world -https://github.com/szparag3/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 11:54:42.889500 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -QuentinMoss/reimagined-computing-machine -https://github.com/QuentinMoss/reimagined-computing-machine -Entry file: reimagined-computing-machine/app/__init__.py -Scanned: 2016-10-19 11:54:44.252319 -No vulnerabilities found. - - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: None -Scanned: 2016-10-19 11:54:44.781930 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:54:45.275635 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WayneChen1987/flasky -https://github.com/WayneChen1987/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:54:45.778536 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -IronFist16/flasky -https://github.com/IronFist16/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 11:54:46.277464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bsdtux/flaskblog -https://github.com/bsdtux/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 11:54:46.796951 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -terryllowery/flasktaskr -https://github.com/terryllowery/flasktaskr -Entry file: None -Scanned: 2016-10-19 11:54:47.291712 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -playgrdstar/flaskapp -https://github.com/playgrdstar/flaskapp -Entry file: None -Scanned: 2016-10-19 11:54:47.807318 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playgrdstar/flaskapp. - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 11:54:48.514558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-19 11:54:49.005159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulmkumar/flaskapp -https://github.com/rahulmkumar/flaskapp -Entry file: None -Scanned: 2016-10-19 11:54:49.542330 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rahulmkumar/flaskapp. - -chenglinguang/flaskky -https://github.com/chenglinguang/flaskky -Entry file: flaskky/hello1.py -Scanned: 2016-10-19 11:54:50.984804 -No vulnerabilities found. - - -jutreras/flaskTest -https://github.com/jutreras/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-19 11:54:52.025500 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feocco/flaskLab -https://github.com/feocco/flaskLab -Entry file: flaskLab/app.py -Scanned: 2016-10-19 11:54:53.373502 -Vulnerability 1: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flaskLab/auth.py - > User input at line 42, trigger word "get(": - user = session.query(User).get(id) -File: flaskLab/auth.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -sarahbees/FlaskHeroku -https://github.com/sarahbees/FlaskHeroku -Entry file: FlaskHeroku/hello.py -Scanned: 2016-10-19 11:54:54.586123 -No vulnerabilities found. - - -954324919/FlaskDemo -https://github.com/954324919/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-19 11:54:55.116965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdagli/flask-restful-example -https://github.com/cdagli/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-19 11:54:55.626578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -linkyndy/flask-rethinkdb -https://github.com/linkyndy/flask-rethinkdb -Entry file: flask-rethinkdb/tests/__init__.py -Scanned: 2016-10-19 12:36:59.044586 -No vulnerabilities found. - - -erm/flaskel -https://github.com/erm/flaskel -Entry file: flaskel/flaskel.py -Scanned: 2016-10-19 12:37:00.465561 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ajmarcus/flaskhost -https://github.com/ajmarcus/flaskhost -Entry file: flaskhost/test.py -Scanned: 2016-10-19 12:37:02.231449 -No vulnerabilities found. - - -stef-k/flaskapp -https://github.com/stef-k/flaskapp -Entry file: None -Scanned: 2016-10-19 12:37:02.762056 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stef-k/flaskapp. - -zenideas/flaskblog -https://github.com/zenideas/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 12:37:03.302869 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -asap/weather-wizard -https://github.com/asap/weather-wizard -Entry file: weather-wizard/weather/__init__.py -Scanned: 2016-10-19 12:37:05.051534 -Vulnerability 1: -File: weather-wizard/weather/views.py - > User input at line 21, trigger word "get(": - root = app.config.get('FORECASTIO_ROOT') -Reassigned in: - File: weather-wizard/weather/views.py - > Line 25: url = root + key + '/' + lat + ', ' + lng + ', ' + timestamp - File: weather-wizard/weather/views.py - > Line 27: r = requests.get(url) -File: weather-wizard/weather/views.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(r.okr.json()) - -Vulnerability 2: -File: weather-wizard/weather/views.py - > User input at line 22, trigger word "get(": - key = app.config.get('FORECASTIO_API_KEY') -Reassigned in: - File: weather-wizard/weather/views.py - > Line 25: url = root + key + '/' + lat + ', ' + lng + ', ' + timestamp - File: weather-wizard/weather/views.py - > Line 27: r = requests.get(url) -File: weather-wizard/weather/views.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(r.okr.json()) - -Vulnerability 3: -File: weather-wizard/weather/views.py - > User input at line 27, trigger word "get(": - r = requests.get(url) -File: weather-wizard/weather/views.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(r.okr.json()) - - - -miguelp77/flaskDemo -https://github.com/miguelp77/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-19 12:37:06.056801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sumitsarkar/FlaskLogger -https://github.com/sumitsarkar/FlaskLogger -Entry file: FlaskLogger/app/__init__.py -Scanned: 2016-10-19 12:37:07.878316 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SeavantUUz/lolibot -https://github.com/SeavantUUz/lolibot -Entry file: lolibot/lolibot/loli.py -Scanned: 2016-10-19 12:37:09.252454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pierrelux/flask-zotero -https://github.com/pierrelux/flask-zotero -Entry file: flask-zotero/zotero.py -Scanned: 2016-10-19 12:37:10.587705 -Vulnerability 1: -File: flask-zotero/zotero.py - > User input at line 61, trigger word "get(": - resp = zotero.get('users/' + g.user['userID'] + '/items?q=delay&format=atom&content=json&key=' + g.user['oauth_token_secret']) -Reassigned in: - File: flask-zotero/zotero.py - > Line 63: feed = resp.data - File: flask-zotero/zotero.py - > Line 64: d = feedparser.parse(resp.data) - File: flask-zotero/zotero.py - > Line 65: titles = [entry.title for entry in d.entries] - File: flask-zotero/zotero.py - > Line 59: titles = None -File: flask-zotero/zotero.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',titles=titles) - -Vulnerability 2: -File: flask-zotero/zotero.py - > User input at line 64, trigger word ".data": - d = feedparser.parse(resp.data) -Reassigned in: - File: flask-zotero/zotero.py - > Line 65: titles = [entry.title for entry in d.entries] - File: flask-zotero/zotero.py - > Line 59: titles = None -File: flask-zotero/zotero.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',titles=titles) - -Vulnerability 3: -File: flask-zotero/zotero.py - > User input at line 72, trigger word "get(": - callback_url = url_for('oauthorized',next=request.args.get('next')) -Reassigned in: - File: flask-zotero/zotero.py - > Line 73: ret_MAYBE_FUNCTION_NAME = zotero.authorize(callback=callback_url or request.referrer or None) -File: flask-zotero/zotero.py - > reaches line 72, trigger word "url_for(": - callback_url = url_for('oauthorized',next=request.args.get('next')) - - - -Knirta/flask_html -https://github.com/Knirta/flask_html -Entry file: flask_html/flaskapphome.py -Scanned: 2016-10-19 12:37:11.880163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tgtech1000/flask-app -https://github.com/tgtech1000/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 12:37:12.866685 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -designhawg/flask_micro -https://github.com/designhawg/flask_micro -Entry file: flask_micro/app/__init__.py -Scanned: 2016-10-19 12:37:15.448320 -No vulnerabilities found. - - -IuryAlves/generate-flask-skeletons -https://github.com/IuryAlves/generate-flask-skeletons -Entry file: None -Scanned: 2016-10-19 12:37:17.698490 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/IuryAlves/generate-flask-skeletons. - -Vostbur/flask-tiny-blog -https://github.com/Vostbur/flask-tiny-blog -Entry file: flask-tiny-blog/app/__init__.py -Scanned: 2016-10-19 12:37:19.061923 -No vulnerabilities found. - - -Vostbur/Flask-tiny-skeleton -https://github.com/Vostbur/Flask-tiny-skeleton -Entry file: Flask-tiny-skeleton/app/__init__.py -Scanned: 2016-10-19 12:37:20.350541 -No vulnerabilities found. - - -yymm/Flask_Pusher_Sample -https://github.com/yymm/Flask_Pusher_Sample -Entry file: Flask_Pusher_Sample/app.py -Scanned: 2016-10-19 12:37:22.001841 -No vulnerabilities found. - - -Vostbur/microb -https://github.com/Vostbur/microb -Entry file: microb/app/__init__.py -Scanned: 2016-10-19 12:37:23.612859 -No vulnerabilities found. - - -JamesLaverack/website -https://github.com/JamesLaverack/website -Entry file: website/website.py -Scanned: 2016-10-19 12:37:25.678863 -No vulnerabilities found. - - -nokurn/webhook -https://github.com/nokurn/webhook -Entry file: webhook/webhook/__init__.py -Scanned: 2016-10-19 12:37:26.978994 -Vulnerability 1: -File: webhook/webhook/github.py - > User input at line 7, trigger word "get(": - r = requests.get(url_for('meta')) -File: webhook/webhook/github.py - > reaches line 7, trigger word "url_for(": - r = requests.get(url_for('meta')) - - - -lmas/feedloggr -https://github.com/lmas/feedloggr -Entry file: feedloggr/tests.py -Scanned: 2016-10-19 12:37:28.537100 -No vulnerabilities found. - - -macndesign/pin_clone -https://github.com/macndesign/pin_clone -Entry file: None -Scanned: 2016-10-19 12:38:00.927543 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/macndesign/pin_clone. - -anthonyyim/microblog -https://github.com/anthonyyim/microblog -Entry file: None -Scanned: 2016-10-19 12:38:01.431114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nealkhosla/website -https://github.com/nealkhosla/website -Entry file: website/app/__init__.py -Scanned: 2016-10-19 12:38:03.408233 -No vulnerabilities found. - - -schdef/clicker -https://github.com/schdef/clicker -Entry file: clicker/src/server_pi.py -Scanned: 2016-10-19 12:38:05.482327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clearglass/webapp -https://github.com/clearglass/webapp -Entry file: webapp/app/__init__.py -Scanned: 2016-10-19 12:38:06.877921 -No vulnerabilities found. - - -codelucas/flask_reddit -https://github.com/codelucas/flask_reddit -Entry file: None -Scanned: 2016-10-19 12:38:09.317462 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/codelucas/flask_reddit. - -corydolphin/flask-headers -https://github.com/corydolphin/flask-headers -Entry file: flask-headers/test.py -Scanned: 2016-10-19 12:38:11.196931 -No vulnerabilities found. - - -benhoyle/FlaskEnergyMeter -https://github.com/benhoyle/FlaskEnergyMeter -Entry file: FlaskEnergyMeter/flask_reader.py -Scanned: 2016-10-19 12:38:12.697075 -No vulnerabilities found. - - -1000ch/cobra -https://github.com/1000ch/cobra -Entry file: cobra/cobra/__init__.py -Scanned: 2016-10-19 12:38:14.208401 -No vulnerabilities found. - - -shenhailuanma/flaskblog -https://github.com/shenhailuanma/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 12:38:14.722098 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -yasoob/logit-bin -https://github.com/yasoob/logit-bin -Entry file: logit-bin/app.py -Scanned: 2016-10-19 12:38:16.242223 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sumitsarkar/FlaskLogger -https://github.com/sumitsarkar/FlaskLogger -Entry file: FlaskLogger/app/__init__.py -Scanned: 2016-10-19 12:38:16.758606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TrevorN/FlaskFM -https://github.com/TrevorN/FlaskFM -Entry file: FlaskFM/flaskfm.py -Scanned: 2016-10-19 12:38:19.711868 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskFM/venv/lib/python2.7/genericpath.py - -javierchavez/Flask-proj -https://github.com/javierchavez/Flask-proj -Entry file: Flask-proj/wsgi.py -Scanned: 2016-10-19 12:38:21.378410 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeredding/flask_cmdliner -https://github.com/jeredding/flask_cmdliner -Entry file: flask_cmdliner/cmdliner.py -Scanned: 2016-10-19 12:38:22.669012 -No vulnerabilities found. - - -jeasoft/flask-bp -https://github.com/jeasoft/flask-bp -Entry file: flask-bp/app/__init__.py -Scanned: 2016-10-19 12:38:24.160664 -No vulnerabilities found. - - -jiam/flask_sample -https://github.com/jiam/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 12:38:24.725488 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AsahikawaPythonWorkshop/flask-handson -https://github.com/AsahikawaPythonWorkshop/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-19 12:38:25.306511 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rona25/demo-flask -https://github.com/rona25/demo-flask -Entry file: demo-flask/app.py -Scanned: 2016-10-19 12:38:26.290873 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sparta1337/flask_blog -https://github.com/sparta1337/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 12:38:27.289217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QuazyThain/Flask_html_db -https://github.com/QuazyThain/Flask_html_db -Entry file: Flask_html_db/flask_framework.py -Scanned: 2016-10-19 12:38:28.561949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -froyo-team/openshift-flask-weixin -https://github.com/froyo-team/openshift-flask-weixin -Entry file: openshift-flask-weixin/wsgi/runserver.py -Scanned: 2016-10-19 12:38:29.968645 -No vulnerabilities found. - - -nikulesko/Flask-WebGLEarth -https://github.com/nikulesko/Flask-WebGLEarth -Entry file: None -Scanned: 2016-10-19 12:38:32.947126 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nikulesko/Flask-WebGLEarth. - -samf2147/profile -https://github.com/samf2147/profile -Entry file: profile/router.py -Scanned: 2016-10-19 12:38:34.567808 -No vulnerabilities found. - - -mswift42/helloflask -https://github.com/mswift42/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:38:35.145208 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -tsh/flask-0-10-tut-quickstart -https://github.com/tsh/flask-0-10-tut-quickstart -Entry file: flask-0-10-tut-quickstart/hello.py -Scanned: 2016-10-19 12:39:00.974581 -No vulnerabilities found. - - -lmas/feedloggr -https://github.com/lmas/feedloggr -Entry file: feedloggr/tests.py -Scanned: 2016-10-19 12:39:04.054971 -No vulnerabilities found. - - -chandyland/jook -https://github.com/chandyland/jook -Entry file: jook/jook.py -Scanned: 2016-10-19 12:39:09.646388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Haseebvp/Microblog-using-Flask-in-python-1- -https://github.com/Haseebvp/Microblog-using-Flask-in-python-1- -Entry file: None -Scanned: 2016-10-19 12:39:11.360666 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Haseebvp/Microblog-using-Flask-in-python-1-. - -sungnoone/infosrv -https://github.com/sungnoone/infosrv -Entry file: infosrv/infosrv.py -Scanned: 2016-10-19 12:39:12.794346 -No vulnerabilities found. - - -dpwrussell/photoviewer -https://github.com/dpwrussell/photoviewer -Entry file: photoviewer/photoviewer.py -Scanned: 2016-10-19 12:39:14.090976 -No vulnerabilities found. - - -clearglass/webapp -https://github.com/clearglass/webapp -Entry file: webapp/app/__init__.py -Scanned: 2016-10-19 12:39:15.407236 -No vulnerabilities found. - - -JGaard/GoogleDomain---AD-web-console -https://github.com/JGaard/GoogleDomain---AD-web-console -Entry file: GoogleDomain---AD-web-console/__init__.py -Scanned: 2016-10-19 12:39:16.997860 -Vulnerability 1: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 158, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 174: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 2: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 159, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 175: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 3: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 161, trigger word "form[": - user_chosen = json.loads(request.form['user_chosen']) -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 180: ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 4: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 162, trigger word "form[": - domain_chosen = json.loads(request.form['domain_chosen']) -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 180: ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 5: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 174, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 158: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 6: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 175, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 159: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 7: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 158, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 174: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 8: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 159, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 175: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 9: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 174, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 158: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 10: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 175, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 159: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 11: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 191, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 12: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 191, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 13: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 14: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 15: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 198, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 16: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 198, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 17: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 202, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 18: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 202, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 19: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 230, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 232: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 20: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 231, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 232: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 21: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 240, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 242: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 246, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 22: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 241, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 242: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 246, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 23: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 250, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 252: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 256, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 24: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 251, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 252: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 256, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 25: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 26: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 27: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 28: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 29: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 30: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 31: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 32: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 33: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 263, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 267: user = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 276: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - File: GoogleDomain---AD-web-console/routes.py - > Line 292: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 34: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 35: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 267, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 263: user = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 276: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - File: GoogleDomain---AD-web-console/routes.py - > Line 292: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 36: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 37: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 329, trigger word "form[": - org_domain = request.form['org_domain'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 330: gAPI = google_api.gAPI(org_domain, None, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 334, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user_list_display.html',domain_users=domain_users, given_names=given_names, family_names=family_names, org_domain=org_domain) - -Vulnerability 38: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 342, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 344: filename = secure_filename(file.filename) - File: GoogleDomain---AD-web-console/routes.py - > Line 349: ret_MAYBE_FUNCTION_NAME = render_template('upload.html') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 348, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 39: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 342, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 344: filename = secure_filename(file.filename) - File: GoogleDomain---AD-web-console/routes.py - > Line 349: ret_MAYBE_FUNCTION_NAME = render_template('upload.html') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 348, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -1stvamp/flask-straw-poll -https://github.com/1stvamp/flask-straw-poll -Entry file: flask-straw-poll/flask_straw_poll/__init__.py -Scanned: 2016-10-19 12:39:19.437004 -Vulnerability 1: -File: flask-straw-poll/flask_straw_poll/views.py - > User input at line 44, trigger word "get(": - vote = Vote(constituency_id=request.form.get('constituency_id'), party_id=request.form.get('party_id')) -Reassigned in: - File: flask-straw-poll/flask_straw_poll/views.py - > Line 42: ret_MAYBE_FUNCTION_NAME = (jsonify(error='Already voted.'), 401) -File: flask-straw-poll/flask_straw_poll/views.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(vote) - - - -corydolphin/flask-headers -https://github.com/corydolphin/flask-headers -Entry file: flask-headers/test.py -Scanned: 2016-10-19 12:39:20.744482 -No vulnerabilities found. - - -waynew/draftin-a-flask -https://github.com/waynew/draftin-a-flask -Entry file: draftin-a-flask/draftin_a_flask/draftin_a_flask.py -Scanned: 2016-10-19 12:39:22.141154 -No vulnerabilities found. - - -kocicjelena/flaskclever -https://github.com/kocicjelena/flaskclever -Entry file: flaskclever/i.py -Scanned: 2016-10-19 12:39:23.405072 -No vulnerabilities found. - - -cmlizama/flaskr -https://github.com/cmlizama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:39:23.929698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -im-auld/flaskapp -https://github.com/im-auld/flaskapp -Entry file: None -Scanned: 2016-10-19 12:39:24.516735 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/im-auld/flaskapp. - -payoung/flask-sqlalchemy-login-manager-template -https://github.com/payoung/flask-sqlalchemy-login-manager-template -Entry file: flask-sqlalchemy-login-manager-template/views.py -Scanned: 2016-10-19 12:39:25.958345 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yasoob/logit-bin -https://github.com/yasoob/logit-bin -Entry file: logit-bin/app.py -Scanned: 2016-10-19 12:39:26.490898 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gliimpse/Flask-RESTful-Demo -https://github.com/Gliimpse/Flask-RESTful-Demo -Entry file: Flask-RESTful-Demo/server.py -Scanned: 2016-10-19 12:39:28.273821 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -0xc0defeed/captcha -https://github.com/0xc0defeed/captcha -Entry file: captcha/captcha/__init__.py -Scanned: 2016-10-19 12:39:29.677640 -No vulnerabilities found. - - -internetfett/flask-timekeeper -https://github.com/internetfett/flask-timekeeper -Entry file: flask-timekeeper/main.py -Scanned: 2016-10-19 12:39:32.834228 -Vulnerability 1: -File: flask-timekeeper/main.py - > User input at line 81, trigger word "form[": - project_id = request.form['project_id'] -File: flask-timekeeper/main.py - > reaches line 83, trigger word "execute(": - g.db.execute('insert into timekeeper (project_id, start_date) values (?, ?)', [project_id, start_date]) - -Vulnerability 2: -File: flask-timekeeper/main.py - > User input at line 81, trigger word "form[": - project_id = request.form['project_id'] -File: flask-timekeeper/main.py - > reaches line 85, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project_id)) - -Vulnerability 3: -File: flask-timekeeper/main.py - > User input at line 81, trigger word "form[": - project_id = request.form['project_id'] -File: flask-timekeeper/main.py - > reaches line 85, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project_id)) - -Vulnerability 4: -File: flask-timekeeper/main.py - > User input at line 90, trigger word "form[": - timekeeper_id = request.form['timekeeper_id'] -File: flask-timekeeper/main.py - > reaches line 92, trigger word "execute(": - g.db.execute('update timekeeper set stop_date=(?) where (id)=(?)', [stop_date, timekeeper_id]) - -Vulnerability 5: -File: flask-timekeeper/main.py - > User input at line 89, trigger word "form[": - project_id = request.form['project_id'] -File: flask-timekeeper/main.py - > reaches line 94, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project_id)) - -Vulnerability 6: -File: flask-timekeeper/main.py - > User input at line 89, trigger word "form[": - project_id = request.form['project_id'] -File: flask-timekeeper/main.py - > reaches line 94, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project_id)) - -Vulnerability 7: -File: flask-timekeeper/main.py - > User input at line 101, trigger word "form[": - start_date = request.form['start_date'] -Reassigned in: - File: flask-timekeeper/main.py - > Line 110: start_date = '' -File: flask-timekeeper/main.py - > reaches line 112, trigger word "execute(": - g.db.execute('update timekeeper set start_date=(?), stop_date=(?), description=(?) where (id)=(?)', [start_date, stop_date, request.form['description'], timekeeper_id]) - -Vulnerability 8: -File: flask-timekeeper/main.py - > User input at line 101, trigger word "form[": - stop_date = request.form['stop_date'] -Reassigned in: - File: flask-timekeeper/main.py - > Line 105: stop_date = '' -File: flask-timekeeper/main.py - > reaches line 112, trigger word "execute(": - g.db.execute('update timekeeper set start_date=(?), stop_date=(?), description=(?) where (id)=(?)', [start_date, stop_date, request.form['description'], timekeeper_id]) - - - -jeredding/flask_cmdliner -https://github.com/jeredding/flask_cmdliner -Entry file: flask_cmdliner/cmdliner.py -Scanned: 2016-10-19 12:39:34.578840 -No vulnerabilities found. - - -jeasoft/flask-bp -https://github.com/jeasoft/flask-bp -Entry file: flask-bp/app/__init__.py -Scanned: 2016-10-19 12:39:36.087876 -No vulnerabilities found. - - -mjhea0/flask-input -https://github.com/mjhea0/flask-input -Entry file: flask-input/app.py -Scanned: 2016-10-19 12:39:38.368727 -No vulnerabilities found. - - -gpestana/flask-boilerplate -https://github.com/gpestana/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 12:39:38.890753 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gpestana/flask-boilerplate. - -xiaopeng163/twisted-flask -https://github.com/xiaopeng163/twisted-flask -Entry file: twisted-flask/restful/api.py -Scanned: 2016-10-19 12:39:40.149919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nigma/web-screenshots -https://github.com/nigma/web-screenshots -Entry file: web-screenshots/app.py -Scanned: 2016-10-19 12:39:41.417189 -No vulnerabilities found. - - -merisbahti/mongodb-flask-fun -https://github.com/merisbahti/mongodb-flask-fun -Entry file: mongodb-flask-fun/index.py -Scanned: 2016-10-19 12:39:43.015118 -Vulnerability 1: -File: mongodb-flask-fun/index.py - > User input at line 61, trigger word "get(": - file = FS.get(ObjectId(oid)) -Reassigned in: - File: mongodb-flask-fun/index.py - > Line 65: response.mimetype = file.content_type - File: mongodb-flask-fun/index.py - > Line 66: response.headers['Content-Disposition'] = 'attachment; filename="' + file.name + '"' - File: mongodb-flask-fun/index.py - > Line 67: ret_MAYBE_FUNCTION_NAME = response - File: mongodb-flask-fun/index.py - > Line 69: ret_MAYBE_FUNCTION_NAME = 'No file' -File: mongodb-flask-fun/index.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show',upload_id=file.upload_id)) - -Vulnerability 2: -File: mongodb-flask-fun/index.py - > User input at line 61, trigger word "get(": - file = FS.get(ObjectId(oid)) -Reassigned in: - File: mongodb-flask-fun/index.py - > Line 65: response.mimetype = file.content_type - File: mongodb-flask-fun/index.py - > Line 66: response.headers['Content-Disposition'] = 'attachment; filename="' + file.name + '"' - File: mongodb-flask-fun/index.py - > Line 67: ret_MAYBE_FUNCTION_NAME = response - File: mongodb-flask-fun/index.py - > Line 69: ret_MAYBE_FUNCTION_NAME = 'No file' -File: mongodb-flask-fun/index.py - > reaches line 63, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show',upload_id=file.upload_id)) - - - -arvelt/flask-fileupload-sample -https://github.com/arvelt/flask-fileupload-sample -Entry file: flask-fileupload-sample/flaskupload.py -Scanned: 2016-10-19 12:39:44.419333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sayanchowdhury/mukti-flask-101 -https://github.com/sayanchowdhury/mukti-flask-101 -Entry file: mukti-flask-101/webapp/__init__.py -Scanned: 2016-10-19 12:40:02.906193 -No vulnerabilities found. - - -im-auld/Flask_Inventory_Manager -https://github.com/im-auld/Flask_Inventory_Manager -Entry file: Flask_Inventory_Manager/flasktest.py -Scanned: 2016-10-19 12:40:05.569694 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cfmeyers/flask-api-factory -https://github.com/cfmeyers/flask-api-factory -Entry file: flask-api-factory/App/__init__.py -Scanned: 2016-10-19 12:40:07.098600 -No vulnerabilities found. - - -Kroisse/flask-study-2014 -https://github.com/Kroisse/flask-study-2014 -Entry file: flask-study-2014/week1/part1/app/__init__.py -Scanned: 2016-10-19 12:40:08.399637 -No vulnerabilities found. - - -recognosco/flask-uwsgi-error -https://github.com/recognosco/flask-uwsgi-error -Entry file: flask-uwsgi-error/main.py -Scanned: 2016-10-19 12:40:13.088195 -No vulnerabilities found. - - -dgolovan/angular-flask-gplus -https://github.com/dgolovan/angular-flask-gplus -Entry file: angular-flask-gplus/angular_flask/__init__.py -Scanned: 2016-10-19 12:40:14.856570 -No vulnerabilities found. - - -andrewmetersky/spotify-flaskapp -https://github.com/andrewmetersky/spotify-flaskapp -Entry file: spotify-flaskapp/routes.py -Scanned: 2016-10-19 12:40:16.599664 -Vulnerability 1: -File: spotify-flaskapp/routes.py - > User input at line 23, trigger word "get(": - message = request.args.get('q', '').split() -Reassigned in: - File: spotify-flaskapp/routes.py - > Line 24: first_arg = ' '.join(message) - File: spotify-flaskapp/routes.py - > Line 28: href = decrementList(message) - File: spotify-flaskapp/routes.py - > Line 28: new_list = decrementList(message) - File: spotify-flaskapp/routes.py - > Line 28: for_playlist = decrementList(message) - File: spotify-flaskapp/routes.py - > Line 29: message = new_list -File: spotify-flaskapp/routes.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',first_arg=first_arg, results=results, playlist_link=playlist_link) - - - -jterskine/flask-heroku-imageupload-s3 -https://github.com/jterskine/flask-heroku-imageupload-s3 -Entry file: flask-heroku-imageupload-s3/app.py -Scanned: 2016-10-19 12:40:20.910515 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-heroku-imageupload-s3/lib/python2.7/genericpath.py - -max-k/blog -https://github.com/max-k/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 12:40:21.928556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Crowdlink/lever -https://github.com/Crowdlink/lever -Entry file: lever/lever/tests/model_helpers.py -Scanned: 2016-10-19 12:40:23.499383 -No vulnerabilities found. - - -Pennvention/pvapp -https://github.com/Pennvention/pvapp -Entry file: pvapp/pvapp/__init__.py -Scanned: 2016-10-19 12:40:27.794356 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pulmro/pulmro-blog -https://github.com/pulmro/pulmro-blog -Entry file: pulmro-blog/blog/__init__.py -Scanned: 2016-10-19 12:40:29.453588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seenaburns/lifts -https://github.com/seenaburns/lifts -Entry file: lifts/server.py -Scanned: 2016-10-19 12:40:31.751866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -madr/adp -https://github.com/madr/adp -Entry file: adp/wsgi.py -Scanned: 2016-10-19 12:40:34.081067 -No vulnerabilities found. - - -SerCeMan/PlayCharm -https://github.com/SerCeMan/PlayCharm -Entry file: PlayCharm/PlayCharm.py -Scanned: 2016-10-19 12:40:35.744282 -No vulnerabilities found. - - -brenden17/blog -https://github.com/brenden17/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-19 12:40:36.760986 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marselester/upload-a-file -https://github.com/marselester/upload-a-file -Entry file: upload-a-file/uploader/__init__.py -Scanned: 2016-10-19 12:40:38.064926 -Vulnerability 1: -File: upload-a-file/uploader/views.py - > User input at line 28, trigger word "files[": - file_ = request.files['uploading_file'] -Reassigned in: - File: upload-a-file/uploader/views.py - > Line 30: filename = secure_filename(file_.filename) - File: upload-a-file/uploader/views.py - > Line 31: file_path = os.path.join(app.config['UPLOAD_PATH'], filename) - File: upload-a-file/uploader/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('upload.html',menu_basic='active') -File: upload-a-file/uploader/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_file',filename=filename)) - -Vulnerability 2: -File: upload-a-file/uploader/views.py - > User input at line 28, trigger word "files[": - file_ = request.files['uploading_file'] -Reassigned in: - File: upload-a-file/uploader/views.py - > Line 30: filename = secure_filename(file_.filename) - File: upload-a-file/uploader/views.py - > Line 31: file_path = os.path.join(app.config['UPLOAD_PATH'], filename) - File: upload-a-file/uploader/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('upload.html',menu_basic='active') -File: upload-a-file/uploader/views.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_file',filename=filename)) - -Vulnerability 3: -File: upload-a-file/uploader/views.py - > User input at line 44, trigger word "files[": - file_ = request.files['uploading_file'] -Reassigned in: - File: upload-a-file/uploader/views.py - > Line 47: filename = photos.save(file_) - File: upload-a-file/uploader/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = render_template('upload.html',menu_extension='active') -File: upload-a-file/uploader/views.py - > reaches line 51, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_file',filename=filename)) - -Vulnerability 4: -File: upload-a-file/uploader/views.py - > User input at line 44, trigger word "files[": - file_ = request.files['uploading_file'] -Reassigned in: - File: upload-a-file/uploader/views.py - > Line 47: filename = photos.save(file_) - File: upload-a-file/uploader/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = render_template('upload.html',menu_extension='active') -File: upload-a-file/uploader/views.py - > reaches line 51, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_file',filename=filename)) - - - -Raynes/pydiff -https://github.com/Raynes/pydiff -Entry file: pydiff/pydiff/__init__.py -Scanned: 2016-10-19 12:40:39.402203 -No vulnerabilities found. - - -janLo/restful-fieldsets -https://github.com/janLo/restful-fieldsets -Entry file: restful-fieldsets/tests/test_fieldset.py -Scanned: 2016-10-19 12:40:40.843726 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -tknickman/car_computer-RASPI_ARDUINO -https://github.com/tknickman/car_computer-RASPI_ARDUINO -Entry file: car_computer-RASPI_ARDUINO/main_app.py -Scanned: 2016-10-19 12:40:42.121373 -No vulnerabilities found. - - -jamesharding/DigitalStatusBoard -https://github.com/jamesharding/DigitalStatusBoard -Entry file: DigitalStatusBoard/app.py -Scanned: 2016-10-19 12:40:44.832152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nouyang/WTFisThisRegister -https://github.com/nouyang/WTFisThisRegister -Entry file: WTFisThisRegister/WTFisThisRegister.py -Scanned: 2016-10-19 12:40:46.141438 -Vulnerability 1: -File: WTFisThisRegister/WTFisThisRegister.py - > User input at line 48, trigger word "form[": - keyword = request.form['searchterm'] -Reassigned in: - File: WTFisThisRegister/WTFisThisRegister.py - > Line 51: result = [dict(keyword=keyword, helptext=row[0]) for row in cur.fetchall()] -File: WTFisThisRegister/WTFisThisRegister.py - > reaches line 49, trigger word "execute(": - cur = g.db.execute('select helptext from entries where keyword = ?', [keyword]) - -Vulnerability 2: -File: WTFisThisRegister/WTFisThisRegister.py - > User input at line 48, trigger word "form[": - keyword = request.form['searchterm'] -Reassigned in: - File: WTFisThisRegister/WTFisThisRegister.py - > Line 51: result = [dict(keyword=keyword, helptext=row[0]) for row in cur.fetchall()] -File: WTFisThisRegister/WTFisThisRegister.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',result=result) - - - -JGaard/GoogleDomain---AD-web-console -https://github.com/JGaard/GoogleDomain---AD-web-console -Entry file: GoogleDomain---AD-web-console/__init__.py -Scanned: 2016-10-19 12:40:47.742907 -Vulnerability 1: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 158, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 174: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 2: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 159, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 175: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 3: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 161, trigger word "form[": - user_chosen = json.loads(request.form['user_chosen']) -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 180: ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 4: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 162, trigger word "form[": - domain_chosen = json.loads(request.form['domain_chosen']) -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 180: ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 5: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 174, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 158: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 6: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 175, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 159: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 171, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=user_chosen, domainGroups=domain_chosen) - -Vulnerability 7: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 158, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 174: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 8: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 159, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 175: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 9: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 174, trigger word "get(": - username = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 158: username = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 10: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 175, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 159: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 160: gAPI = google_api.gAPI(org_domain, username, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 176: gAPI = google_api.gAPI(org_domain, username, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editgroups.html',username=username, org_domain=org_domain, userGroups=userGroups, domainGroups=domainGroups) - -Vulnerability 11: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 191, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 12: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 191, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 13: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 14: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 15: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 198, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 16: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 198, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 17: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 187, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 201: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 202, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 18: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 201, trigger word "get(": - gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 187: gAPI = _initFromHTML(request.args.get('org_domain'), request.args.get('user'), '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 202, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editforwarding.html',org_domain=request.args.get('org_domain'), username=request.args.get('user'), forwarding=gAPI.retrieveUserForwarding(), form=form) - -Vulnerability 19: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 230, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 232: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 20: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 231, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 232: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 21: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 240, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 242: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 246, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 22: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 241, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 242: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 246, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 23: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 250, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 252: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 256, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 24: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 251, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 252: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 256, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('actionconfirm.html',message=message, message_two=message_two, user=user, org_domain=org_domain) - -Vulnerability 25: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 26: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 27: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 28: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 276, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 29: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 30: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 31: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 32: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 292, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - -Vulnerability 33: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 263, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 267: user = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 276: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - File: GoogleDomain---AD-web-console/routes.py - > Line 292: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 34: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 264, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 268: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 35: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 267, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 263: user = request.args.get('user') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 276: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) - File: GoogleDomain---AD-web-console/routes.py - > Line 292: ret_MAYBE_FUNCTION_NAME = redirect(url_for('editusers',user=form.username.data, org_domain=org_domain)) -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 36: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 268, trigger word "get(": - org_domain = request.args.get('org_domain') -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 264: org_domain = request.args.get('org_domain') - File: GoogleDomain---AD-web-console/routes.py - > Line 269: gAPI = google_api.gAPI(org_domain, user, '') - File: GoogleDomain---AD-web-console/routes.py - > Line 295: gAPI = google_api.gAPI(org_domain, user, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('editusers.html',username=user, org_domain=org_domain, form=form, givenname=gAPI.get_firstname(), familyname=gAPI.get_lastname(), nicknames=gAPI.retrieve_nicknames()) - -Vulnerability 37: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 329, trigger word "form[": - org_domain = request.form['org_domain'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 330: gAPI = google_api.gAPI(org_domain, None, '') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 334, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user_list_display.html',domain_users=domain_users, given_names=given_names, family_names=family_names, org_domain=org_domain) - -Vulnerability 38: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 342, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 344: filename = secure_filename(file.filename) - File: GoogleDomain---AD-web-console/routes.py - > Line 349: ret_MAYBE_FUNCTION_NAME = render_template('upload.html') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 348, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 39: -File: GoogleDomain---AD-web-console/routes.py - > User input at line 342, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: GoogleDomain---AD-web-console/routes.py - > Line 344: filename = secure_filename(file.filename) - File: GoogleDomain---AD-web-console/routes.py - > Line 349: ret_MAYBE_FUNCTION_NAME = render_template('upload.html') -File: GoogleDomain---AD-web-console/routes.py - > reaches line 348, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -kylewmoser/HistoryEmergent -https://github.com/kylewmoser/HistoryEmergent -Entry file: HistoryEmergent/historyemergent/__init__.py -Scanned: 2016-10-19 12:40:49.478386 -Vulnerability 1: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 26, trigger word ".data": - file_obj = form.uploaded.data -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 27: filename = werkzeug.secure_filename(file_obj.filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 28: randstr = upload_to_s3(file_obj) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 30: filename = insert_in_filename(filename, randstr) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 31: doc = Document(form.name.data, make_s3_path(filename), request.form['format'], current_user) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 33: doc.uuid = croc.add_doc_to_croc(doc.s3path) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 38, trigger word "flash(": - flash('Successfully uploaded {0}'.format(filename), 'success') - -Vulnerability 2: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 62, trigger word "get(": - doc = Document.query.get(doc_id) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 3: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 62, trigger word "get(": - doc = Document.query.get(doc_id) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 4: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 62, trigger word "get(": - doc = Document.query.get(doc_id) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 74, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('view_doc.html',doc=doc, viewer_url='https://crocodoc.com/view/{0}'.format(str(doc.get_croc_session(current_user))), titleForm=title_form, fileForm=file_form) - -Vulnerability 5: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 83, trigger word "get(": - doc = Document.query.get(doc_id) -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 88: filename = insert_in_filename(werkzeug.secure_filename(file_obj.filename), '-{0}-rev.{1}'.format(current_user.username, len(doc.versions))) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 91: s3path = make_s3_path(filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 93: version = Version(form.comment.data, s3path, croc.add_doc_to_croc(s3path), doc) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 96, trigger word "flash(": - flash('Added new version of {0}'.format(doc.name), 'success') - -Vulnerability 6: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 83, trigger word "get(": - doc = Document.query.get(doc_id) -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 88: filename = insert_in_filename(werkzeug.secure_filename(file_obj.filename), '-{0}-rev.{1}'.format(current_user.username, len(doc.versions))) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 91: s3path = make_s3_path(filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 93: version = Version(form.comment.data, s3path, croc.add_doc_to_croc(s3path), doc) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 97, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 7: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 83, trigger word "get(": - doc = Document.query.get(doc_id) -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 88: filename = insert_in_filename(werkzeug.secure_filename(file_obj.filename), '-{0}-rev.{1}'.format(current_user.username, len(doc.versions))) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 91: s3path = make_s3_path(filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 93: version = Version(form.comment.data, s3path, croc.add_doc_to_croc(s3path), doc) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 97, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 8: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 83, trigger word "get(": - doc = Document.query.get(doc_id) -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 88: filename = insert_in_filename(werkzeug.secure_filename(file_obj.filename), '-{0}-rev.{1}'.format(current_user.username, len(doc.versions))) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 91: s3path = make_s3_path(filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 93: version = Version(form.comment.data, s3path, croc.add_doc_to_croc(s3path), doc) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 99, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 9: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 83, trigger word "get(": - doc = Document.query.get(doc_id) -Reassigned in: - File: HistoryEmergent/historyemergent/docs/views.py - > Line 88: filename = insert_in_filename(werkzeug.secure_filename(file_obj.filename), '-{0}-rev.{1}'.format(current_user.username, len(doc.versions))) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 91: s3path = make_s3_path(filename) - File: HistoryEmergent/historyemergent/docs/views.py - > Line 93: version = Version(form.comment.data, s3path, croc.add_doc_to_croc(s3path), doc) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 99, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('docs.view_doc',doc_id=doc.uid)) - -Vulnerability 10: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 106, trigger word "get(": - doc = Document.query.get(doc_id) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 120, trigger word "replace(": - files_to_delete.append(doc.s3path.replace('http://s3.amazonaws.com/{0}/'.format(app.config['BUCKET_NAME']), '')) - -Vulnerability 11: -File: HistoryEmergent/historyemergent/docs/views.py - > User input at line 106, trigger word "get(": - doc = Document.query.get(doc_id) -File: HistoryEmergent/historyemergent/docs/views.py - > reaches line 127, trigger word "flash(": - flash('{0} has been deleted.'.format(doc.name), 'info') - -Vulnerability 12: -File: HistoryEmergent/historyemergent/users/views.py - > User input at line 26, trigger word ".data": - uid = get_id_from_email(form.email.data) -Reassigned in: - File: HistoryEmergent/historyemergent/users/views.py - > Line 31: user = load_user(uid) -File: HistoryEmergent/historyemergent/users/views.py - > reaches line 38, trigger word "flash(": - flash('Good to have you back, {0}'.format(user.firstname), 'success') - -Vulnerability 13: -File: HistoryEmergent/historyemergent/users/views.py - > User input at line 70, trigger word ".data": - message = check_username_and_email(form.email.data, form.username.data) -File: HistoryEmergent/historyemergent/users/views.py - > reaches line 73, trigger word "flash(": - flash(message, 'error') - -Vulnerability 14: -File: HistoryEmergent/historyemergent/users/views.py - > User input at line 75, trigger word ".data": - user = User(form.firstname.data, form.lastname.data, form.username.data, form.email.data, form.password.data) -File: HistoryEmergent/historyemergent/users/views.py - > reaches line 79, trigger word "flash(": - flash('Your account has been created, {0}.'.format(user.firstname), 'success') - - - -chokepoint/flaskgur -https://github.com/chokepoint/flaskgur -Entry file: flaskgur/flaskgur.py -Scanned: 2016-10-19 12:41:06.562389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rayokota/generator-angular-flask -https://github.com/rayokota/generator-angular-flask -Entry file: None -Scanned: 2016-10-19 12:41:08.080213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rayokota/generator-angular-flask. - -zeekay/flask-uwsgi-websocket -https://github.com/zeekay/flask-uwsgi-websocket -Entry file: flask-uwsgi-websocket/examples/pubsub-asyncio/pubsub.py -Scanned: 2016-10-19 12:41:09.614200 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -inveniosoftware/flask-sso -https://github.com/inveniosoftware/flask-sso -Entry file: flask-sso/tests/helpers.py -Scanned: 2016-10-19 12:41:11.101597 -No vulnerabilities found. - - -kevincrane/flaskblog -https://github.com/kevincrane/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 12:41:15.212742 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -brakedust/flasktutorial -https://github.com/brakedust/flasktutorial -Entry file: None -Scanned: 2016-10-19 12:41:16.723843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HAYASAKA-Ryosuke/flaskserialmonitor -https://github.com/HAYASAKA-Ryosuke/flaskserialmonitor -Entry file: flaskserialmonitor/main.py -Scanned: 2016-10-19 12:41:18.034987 -No vulnerabilities found. - - -lnielsen/flask-ext-skeleton -https://github.com/lnielsen/flask-ext-skeleton -Entry file: flask-ext-skeleton/tests/helpers.py -Scanned: 2016-10-19 12:41:19.435740 -No vulnerabilities found. - - -avidas/flask-paypal-verify -https://github.com/avidas/flask-paypal-verify -Entry file: flask-paypal-verify/app.py -Scanned: 2016-10-19 12:41:20.824437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shivam5992/FlaskBlog -https://github.com/shivam5992/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 12:41:23.530328 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miqingren/flaskOpen -https://github.com/miqingren/flaskOpen -Entry file: flaskOpen/minitwit/minitwit.py -Scanned: 2016-10-19 12:41:24.849466 -No vulnerabilities found. - - -exversion/layer -https://github.com/exversion/layer -Entry file: layer/src/app.py -Scanned: 2016-10-19 12:41:26.499377 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thimslugga/flask-helloworld -https://github.com/thimslugga/flask-helloworld -Entry file: flask-helloworld/run.py -Scanned: 2016-10-19 12:41:27.787311 -No vulnerabilities found. - - -rch/flask-gacl -https://github.com/rch/flask-gacl -Entry file: flask-gacl/flask_gacl/flaskr.py -Scanned: 2016-10-19 12:41:32.252764 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davidcoallier/howto-flask -https://github.com/davidcoallier/howto-flask -Entry file: howto-flask/api.py -Scanned: 2016-10-19 12:41:33.716152 -No vulnerabilities found. - - -machow/flask-template -https://github.com/machow/flask-template -Entry file: None -Scanned: 2016-10-19 12:41:34.260165 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/machow/flask-template. - -doggyloot/sirius-flask -https://github.com/doggyloot/sirius-flask -Entry file: sirius-flask/app.py -Scanned: 2016-10-19 12:41:35.667752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hermansc/flask-amazon -https://github.com/hermansc/flask-amazon -Entry file: flask-amazon/main.py -Scanned: 2016-10-19 12:41:36.944048 -No vulnerabilities found. - - -ammiranda/flask_microblog -https://github.com/ammiranda/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 12:41:37.492531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shivam5992/pywordcloud-flask -https://github.com/shivam5992/pywordcloud-flask -Entry file: pywordcloud-flask/words.py -Scanned: 2016-10-19 12:41:38.883198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ripleyaffect/flask_tut -https://github.com/ripleyaffect/flask_tut -Entry file: flask_tut/flaskr.py -Scanned: 2016-10-19 12:41:40.156195 -No vulnerabilities found. - - -myevan/flask_server -https://github.com/myevan/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-19 12:41:40.699551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nidhinp/flask-blogapp -https://github.com/nidhinp/flask-blogapp -Entry file: flask-blogapp/run.py -Scanned: 2016-10-19 12:41:42.215293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tr-Heath/FlaskMicroBlog -https://github.com/Tr-Heath/FlaskMicroBlog -Entry file: FlaskMicroBlog/app/__init__.py -Scanned: 2016-10-19 12:41:43.592708 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -petertbernhardt/FlaskPostGetTest -https://github.com/petertbernhardt/FlaskPostGetTest -Entry file: FlaskPostGetTest/main/__init__.py -Scanned: 2016-10-19 12:41:44.864491 -Vulnerability 1: -File: FlaskPostGetTest/main/__init__.py - > User input at line 19, trigger word "form[": - name = request.form['yourname'] -File: FlaskPostGetTest/main/__init__.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',name=name, email=email) - -Vulnerability 2: -File: FlaskPostGetTest/main/__init__.py - > User input at line 20, trigger word "form[": - email = request.form['youremail'] -File: FlaskPostGetTest/main/__init__.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',name=name, email=email) - - - -sayanchowdhury/mukti-flask-101 -https://github.com/sayanchowdhury/mukti-flask-101 -Entry file: mukti-flask-101/webapp/__init__.py -Scanned: 2016-10-19 12:41:48.746145 -No vulnerabilities found. - - -charlie-es/flask-file-structure -https://github.com/charlie-es/flask-file-structure -Entry file: flask-file-structure/application_name/__init__.py -Scanned: 2016-10-19 12:41:51.045205 -No vulnerabilities found. - - -florianpaquet/flask-mease-example -https://github.com/florianpaquet/flask-mease-example -Entry file: flask-mease-example/app.py -Scanned: 2016-10-19 12:41:52.318845 -No vulnerabilities found. - - -scottmiao/Flask-Mega-Tutorial -https://github.com/scottmiao/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/app/__init__.py -Scanned: 2016-10-19 12:42:04.887599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BoulderBTC/valar -https://github.com/BoulderBTC/valar -Entry file: valar/valar/__init__.py -Scanned: 2016-10-19 12:42:09.428783 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Haseebvp/Simple-Microblog-app-using-flask- -https://github.com/Haseebvp/Simple-Microblog-app-using-flask- -Entry file: None -Scanned: 2016-10-19 12:42:11.162765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Haseebvp/Simple-Microblog-app-using-flask-. - -dgolovan/everblog -https://github.com/dgolovan/everblog -Entry file: everblog/angular_flask/__init__.py -Scanned: 2016-10-19 12:42:17.847588 -No vulnerabilities found. - - -Haseebvp/Blog-app-using-flask-in-python-version-2 -https://github.com/Haseebvp/Blog-app-using-flask-in-python-version-2 -Entry file: None -Scanned: 2016-10-19 12:42:19.568427 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Haseebvp/Blog-app-using-flask-in-python-version-2. - -mikesu/miki -https://github.com/mikesu/miki -Entry file: miki/src/Main.py -Scanned: 2016-10-19 12:42:21.282088 -No vulnerabilities found. - - -insom/dogefaucet -https://github.com/insom/dogefaucet -Entry file: dogefaucet/main.py -Scanned: 2016-10-19 12:42:22.551581 -Vulnerability 1: -File: dogefaucet/main.py - > User input at line 42, trigger word "get(": - form = app.config.get('RECAPTCHA_PRIVATE_KEY') and SecureWalletForm() or WalletForm() -File: dogefaucet/main.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',wallet=wallet, form=form) - -Vulnerability 2: -File: dogefaucet/main.py - > User input at line 43, trigger word "get(": - wallet = session.get('wallet', []) -File: dogefaucet/main.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',wallet=wallet, form=form) - -Vulnerability 3: -File: dogefaucet/main.py - > User input at line 50, trigger word ".data": - wallet = form.wallet.data.strip() -Reassigned in: - File: dogefaucet/main.py - > Line 51: validation = coin.validateaddress(wallet) - File: dogefaucet/main.py - > Line 66: wallet_row = Wallet(wallet=wallet, ip=request.remote_addr) - File: dogefaucet/main.py - > Line 73: tx = coin.sendtoaddress(wallet, app.config['DOGE_AMOUNT'],comment='Dogebowl #{}'.format(wallet_row.id)) - File: dogefaucet/main.py - > Line 78: tx_url = 'http://dogechain.info/tx/{}'.format(tx) - File: dogefaucet/main.py - > Line 81: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 54: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 62: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 65: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 77: ret_MAYBE_FUNCTION_NAME = index(form) -File: dogefaucet/main.py - > reaches line 56, trigger word "filter(": - res = Wallet.query.filter(and_(or_(Wallet.wallet == wallet, Wallet.ip == request.remote_addr), Wallet.created > an_hour_ago)) - -Vulnerability 4: -File: dogefaucet/main.py - > User input at line 50, trigger word ".data": - wallet = form.wallet.data.strip() -Reassigned in: - File: dogefaucet/main.py - > Line 51: validation = coin.validateaddress(wallet) - File: dogefaucet/main.py - > Line 66: wallet_row = Wallet(wallet=wallet, ip=request.remote_addr) - File: dogefaucet/main.py - > Line 73: tx = coin.sendtoaddress(wallet, app.config['DOGE_AMOUNT'],comment='Dogebowl #{}'.format(wallet_row.id)) - File: dogefaucet/main.py - > Line 78: tx_url = 'http://dogechain.info/tx/{}'.format(tx) - File: dogefaucet/main.py - > Line 81: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 54: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 62: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 65: ret_MAYBE_FUNCTION_NAME = index(form) - File: dogefaucet/main.py - > Line 77: ret_MAYBE_FUNCTION_NAME = index(form) -File: dogefaucet/main.py - > reaches line 79, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('success.html',block_chain_url=tx_url, doge_amount=app.config['DOGE_AMOUNT']) - - - -johnrork/skeletor -https://github.com/johnrork/skeletor -Entry file: skeletor/__init__.py -Scanned: 2016-10-19 12:42:24.307393 -Vulnerability 1: -File: skeletor/__init__.py - > User input at line 44, trigger word "get(": - order = request.args.get('sort') -Reassigned in: - File: skeletor/__init__.py - > Line 46: order = db.desc(order) - File: skeletor/__init__.py - > Line 47: data = data.order_by(order) - File: skeletor/__init__.py - > Line 41: data = Album.query -File: skeletor/__init__.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('list.html',list=data.paginate(page), cols=['Title'], params=params) - - - -seemless/tanr -https://github.com/seemless/tanr -Entry file: tanr/file_texts.py -Scanned: 2016-10-19 12:42:26.089629 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelmartins/rst-resume -https://github.com/rafaelmartins/rst-resume -Entry file: rst-resume/rst_resume/__init__.py -Scanned: 2016-10-19 12:42:27.489680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -josh23941/Brew_PYE -https://github.com/josh23941/Brew_PYE -Entry file: Brew_PYE/Brew_PYE/brew_py/__init__.py -Scanned: 2016-10-19 12:42:30.341044 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rouanw/feature-toggles -https://github.com/rouanw/feature-toggles -Entry file: feature-toggles/flaskr.py -Scanned: 2016-10-19 12:42:33.070818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gpatrick/SimpleNewsService -https://github.com/gpatrick/SimpleNewsService -Entry file: SimpleNewsService/simple-news-service.py -Scanned: 2016-10-19 12:42:35.354824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-jwt -https://github.com/mattupstate/flask-jwt -Entry file: flask-jwt/tests/conftest.py -Scanned: 2016-10-19 12:42:38.080440 -No vulnerabilities found. - - -Frozenball/flask-color -https://github.com/Frozenball/flask-color -Entry file: flask-color/sample.py -Scanned: 2016-10-19 12:42:39.372789 -No vulnerabilities found. - - -merkhofer/flask_angular -https://github.com/merkhofer/flask_angular -Entry file: flask_angular/flask_rest_service.py -Scanned: 2016-10-19 12:42:40.880502 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -angstwad/elemental -https://github.com/angstwad/elemental -Entry file: elemental/elemental/__init__.py -Scanned: 2016-10-19 12:42:42.305815 -No vulnerabilities found. - - -Zizzamia/tasty-flask-app -https://github.com/Zizzamia/tasty-flask-app -Entry file: tasty-flask-app/shared.py -Scanned: 2016-10-19 12:42:44.027863 -Vulnerability 1: -File: tasty-flask-app/api/timeline.py - > User input at line 32, trigger word "get(": - data = 'success''list_tweet''seconds_to_restart'Truetimeline_storage.get()30 -File: tasty-flask-app/api/timeline.py - > reaches line 37, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(data) - - - -leaena/snp-api -https://github.com/leaena/snp-api -Entry file: snp-api/snpapi/__init__.py -Scanned: 2016-10-19 12:42:45.428531 -No vulnerabilities found. - - -beshrkayali/flaskshort -https://github.com/beshrkayali/flaskshort -Entry file: flaskshort/models.py -Scanned: 2016-10-19 12:42:46.819084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Toasty2/flaskr -https://github.com/Toasty2/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:42:47.334787 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nouzlin/flaskapp -https://github.com/Nouzlin/flaskapp -Entry file: None -Scanned: 2016-10-19 12:42:47.835390 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Nouzlin/flaskapp. - -cogwheelcircuitworks/barcodatron -https://github.com/cogwheelcircuitworks/barcodatron -Entry file: barcodatron/barcode_flask/__init__.py -Scanned: 2016-10-19 12:42:49.471128 -No vulnerabilities found. - - -deslee/flask-counter -https://github.com/deslee/flask-counter -Entry file: flask-counter/counter/app.py -Scanned: 2016-10-19 12:42:50.805494 -No vulnerabilities found. - - -itdxer/flask-test -https://github.com/itdxer/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 12:42:51.343241 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -1995eaton/flask-bitcoin -https://github.com/1995eaton/flask-bitcoin -Entry file: flask-bitcoin/bitcoin.py -Scanned: 2016-10-19 12:42:53.740945 -No vulnerabilities found. - - -alexandremello/python_flask -https://github.com/alexandremello/python_flask -Entry file: None -Scanned: 2016-10-19 12:43:06.311461 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alexandremello/python_flask. - -rch/flask-gacl -https://github.com/rch/flask-gacl -Entry file: flask-gacl/flask_gacl/flaskr.py -Scanned: 2016-10-19 12:43:09.822102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -inuishan/LearningFlask -https://github.com/inuishan/LearningFlask -Entry file: LearningFlask/app/__init__.py -Scanned: 2016-10-19 12:43:12.373004 -No vulnerabilities found. - - -machow/flask-template -https://github.com/machow/flask-template -Entry file: None -Scanned: 2016-10-19 12:43:12.886915 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/machow/flask-template. - -utsavdusad/ModifiedFlask -https://github.com/utsavdusad/ModifiedFlask -Entry file: None -Scanned: 2016-10-19 12:43:18.485366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shivam5992/pywordcloud-flask -https://github.com/shivam5992/pywordcloud-flask -Entry file: pywordcloud-flask/words.py -Scanned: 2016-10-19 12:43:18.990663 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abrade/flask_tut -https://github.com/abrade/flask_tut -Entry file: flask_tut/app/__init__.py -Scanned: 2016-10-19 12:43:20.439629 -No vulnerabilities found. - - -cruor99/networkcp_flask -https://github.com/cruor99/networkcp_flask -Entry file: networkcp_flask/app/__init__.py -Scanned: 2016-10-19 12:43:31.055758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tr-Heath/FlaskMicroBlog -https://github.com/Tr-Heath/FlaskMicroBlog -Entry file: FlaskMicroBlog/app/__init__.py -Scanned: 2016-10-19 12:43:31.617391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sambev/basicflask -https://github.com/sambev/basicflask -Entry file: basicflask/server.py -Scanned: 2016-10-19 12:43:33.901910 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MrFabkirox/python-flask-1 -https://github.com/MrFabkirox/python-flask-1 -Entry file: python-flask-1/routes.py -Scanned: 2016-10-19 12:43:35.190384 -No vulnerabilities found. - - -charlie-es/flask-file-structure -https://github.com/charlie-es/flask-file-structure -Entry file: flask-file-structure/application_name/__init__.py -Scanned: 2016-10-19 12:43:36.458116 -No vulnerabilities found. - - -mjp2220/my_first_flask -https://github.com/mjp2220/my_first_flask -Entry file: my_first_flask/app.py -Scanned: 2016-10-19 12:43:37.748682 -Vulnerability 1: -File: my_first_flask/app.py - > User input at line 39, trigger word "get(": - response_dict = requests.get(url).json() -Reassigned in: - File: my_first_flask/app.py - > Line 40: cleaned_response = parse_response(response_dict) -File: my_first_flask/app.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',api_data=cleaned_response) - - - -josephlee021/timecontrol-chessclock-flask -https://github.com/josephlee021/timecontrol-chessclock-flask -Entry file: timecontrol-chessclock-flask/project/app.py -Scanned: 2016-10-19 12:43:39.377334 -No vulnerabilities found. - - -Scatchell/m-pedigree-flask -https://github.com/Scatchell/m-pedigree-flask -Entry file: m-pedigree-flask/goldkeys/__init__.py -Scanned: 2016-10-19 12:43:42.018792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timgalvin/Rpi-server-flask -https://github.com/timgalvin/Rpi-server-flask -Entry file: Rpi-server-flask/start.py -Scanned: 2016-10-19 12:43:43.281733 -No vulnerabilities found. - - -cogell/learningPythonFlask -https://github.com/cogell/learningPythonFlask -Entry file: learningPythonFlask/app/__init__.py -Scanned: 2016-10-19 12:43:44.639522 -Vulnerability 1: -File: learningPythonFlask/app/views.py - > User input at line 13, trigger word "files[": - file = request.files['files'] -Reassigned in: - File: learningPythonFlask/app/views.py - > Line 15: filename = secure_filename(file.filename) - File: learningPythonFlask/app/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: learningPythonFlask/app/views.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',filename=filename) - - - -jeremymeyersny/arthum -https://github.com/jeremymeyersny/arthum -Entry file: arthum/arthum.py -Scanned: 2016-10-19 12:43:45.942942 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -theho/dokku -https://github.com/theho/dokku -Entry file: dokku/hello.py -Scanned: 2016-10-19 12:43:47.230599 -No vulnerabilities found. - - -wesleyan/pulleffect -https://github.com/wesleyan/pulleffect -Entry file: pulleffect/pulleffect/__init__.py -Scanned: 2016-10-19 12:43:50.588884 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drsm79/baguette -https://github.com/drsm79/baguette -Entry file: baguette/test.py -Scanned: 2016-10-19 12:43:52.367605 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kajun/microblog -https://github.com/kajun/microblog -Entry file: None -Scanned: 2016-10-19 12:43:53.395907 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -johnrork/skeletor -https://github.com/johnrork/skeletor -Entry file: skeletor/__init__.py -Scanned: 2016-10-19 12:43:55.147552 -Vulnerability 1: -File: skeletor/__init__.py - > User input at line 44, trigger word "get(": - order = request.args.get('sort') -Reassigned in: - File: skeletor/__init__.py - > Line 46: order = db.desc(order) - File: skeletor/__init__.py - > Line 47: data = data.order_by(order) - File: skeletor/__init__.py - > Line 41: data = Album.query -File: skeletor/__init__.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('list.html',list=data.paginate(page), cols=['Title'], params=params) - - - -diadara/guiwsn -https://github.com/diadara/guiwsn -Entry file: guiwsn/app/__init__.py -Scanned: 2016-10-19 12:43:57.818306 -No vulnerabilities found. - - -supertom44/PythonMicroblog -https://github.com/supertom44/PythonMicroblog -Entry file: PythonMicroblog/flask/Lib/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 12:44:02.034458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -billjedi/nfl_picks -https://github.com/billjedi/nfl_picks -Entry file: nfl_picks/app/__init__.py -Scanned: 2016-10-19 12:44:03.592163 -No vulnerabilities found. - - -cparlette/FakeDataServer -https://github.com/cparlette/FakeDataServer -Entry file: FakeDataServer/FakeDataServer.py -Scanned: 2016-10-19 12:44:06.845705 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FakeDataServer/venv/lib/python2.7/genericpath.py - -ant1441/xvfb-viewer -https://github.com/ant1441/xvfb-viewer -Entry file: xvfb-viewer/xvfb_viewer/__init__.py -Scanned: 2016-10-19 12:44:08.218710 -No vulnerabilities found. - - -mking/flask-uwsgi -https://github.com/mking/flask-uwsgi -Entry file: flask-uwsgi/flask_uwsgi.py -Scanned: 2016-10-19 12:44:13.504879 -No vulnerabilities found. - - -moremorefor/flask-fileupload-ajax-example -https://github.com/moremorefor/flask-fileupload-ajax-example -Entry file: flask-fileupload-ajax-example/app.py -Scanned: 2016-10-19 12:44:14.777271 -Vulnerability 1: -File: flask-fileupload-ajax-example/app.py - > User input at line 71, trigger word "files[": - files = request.files['file'] -Reassigned in: - File: flask-fileupload-ajax-example/app.py - > Line 73: filename = secure_filename(files.filename) - File: flask-fileupload-ajax-example/app.py - > Line 77: file_size = os.path.getsize(os.path.join(updir, filename)) -File: flask-fileupload-ajax-example/app.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(name=filename, size=file_size) - - - -dgilland/flask-alchy -https://github.com/dgilland/flask-alchy -Entry file: flask-alchy/test_flask_alchy.py -Scanned: 2016-10-19 12:44:19.210921 -No vulnerabilities found. - - -ArtAPI/artFlask -https://github.com/ArtAPI/artFlask -Entry file: artFlask/mainapp.py -Scanned: 2016-10-19 12:44:22.894127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sbezboro/standard-web-flask -https://github.com/sbezboro/standard-web-flask -Entry file: standard-web-flask/standardweb/__init__.py -Scanned: 2016-10-19 12:44:25.869197 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -merkhofer/flask_angular -https://github.com/merkhofer/flask_angular -Entry file: flask_angular/flask_rest_service.py -Scanned: 2016-10-19 12:44:26.374867 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -angstwad/elemental -https://github.com/angstwad/elemental -Entry file: elemental/elemental/__init__.py -Scanned: 2016-10-19 12:44:34.263971 -No vulnerabilities found. - - -gouthambs/angularjs-flask -https://github.com/gouthambs/angularjs-flask -Entry file: angularjs-flask/src/example2/webapp.py -Scanned: 2016-10-19 12:44:36.609922 -No vulnerabilities found. - - -jeyraof/flask-protein -https://github.com/jeyraof/flask-protein -Entry file: None -Scanned: 2016-10-19 12:44:38.047388 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jeyraof/flask-protein. - -Zizzamia/tasty-flask-app -https://github.com/Zizzamia/tasty-flask-app -Entry file: tasty-flask-app/shared.py -Scanned: 2016-10-19 12:44:39.787349 -Vulnerability 1: -File: tasty-flask-app/api/timeline.py - > User input at line 32, trigger word "get(": - data = 'success''list_tweet''seconds_to_restart'Truetimeline_storage.get()30 -File: tasty-flask-app/api/timeline.py - > reaches line 37, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(data) - - - -craigglennie/flask-api-starter -https://github.com/craigglennie/flask-api-starter -Entry file: flask-api-starter/my_app/app.py -Scanned: 2016-10-19 12:44:41.216557 -No vulnerabilities found. - - -erkarl/flask-restful-todo -https://github.com/erkarl/flask-restful-todo -Entry file: flask-restful-todo/apps/app.py -Scanned: 2016-10-19 12:44:43.387556 -No vulnerabilities found. - - -shaunktw/flaskapp -https://github.com/shaunktw/flaskapp -Entry file: None -Scanned: 2016-10-19 12:44:43.927027 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shaunktw/flaskapp. - -kajun/flaskr -https://github.com/kajun/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:44:44.424752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/music-streaming-flask -https://github.com/mjhea0/music-streaming-flask -Entry file: music-streaming-flask/app/__init__.py -Scanned: 2016-10-19 12:44:46.534620 -Vulnerability 1: -File: music-streaming-flask/app/views.py - > User input at line 13, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: music-streaming-flask/app/views.py - > Line 15: filename = secure_filename(file.filename) - File: music-streaming-flask/app/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: music-streaming-flask/app/views.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',filename=filename) - - - -junqed/flask-resty -https://github.com/junqed/flask-resty -Entry file: flask-resty/flask_resty/helpers.py -Scanned: 2016-10-19 12:44:47.879257 -No vulnerabilities found. - - -riquellopes/boot-flask -https://github.com/riquellopes/boot-flask -Entry file: boot-flask/boot_flask/boot_file.py -Scanned: 2016-10-19 12:44:49.265229 -No vulnerabilities found. - - -shaffer-wv/flask-microblog -https://github.com/shaffer-wv/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:44:49.806719 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -inuishan/LearningFlask -https://github.com/inuishan/LearningFlask -Entry file: LearningFlask/app/__init__.py -Scanned: 2016-10-19 12:44:53.308308 -No vulnerabilities found. - - -cogfor/flask-init -https://github.com/cogfor/flask-init -Entry file: flask-init/hello.py -Scanned: 2016-10-19 12:44:54.583937 -No vulnerabilities found. - - -sayangel/helloflask -https://github.com/sayangel/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:44:55.124774 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -rram/moneypenny -https://github.com/rram/moneypenny -Entry file: moneypenny/moneypenny.py -Scanned: 2016-10-19 12:44:56.521678 -Vulnerability 1: -File: moneypenny/moneypenny.py - > User input at line 116, trigger word "get(": - date = entry.get('signed_in_time_local') -Reassigned in: - File: moneypenny/moneypenny.py - > Line 117: date = datetime.strptime(date, '%Y-%m-%d %H:%M:%S') - File: moneypenny/moneypenny.py - > Line 141: title = link_format.format(d=date, location=loc_info, visitor_name=visitor_name) - File: moneypenny/moneypenny.py - > Line 149: s = sr.submit(title,text=text, url=img_url, raise_captcha_exception=True) - File: moneypenny/moneypenny.py - > Line 153: link = s - File: moneypenny/moneypenny.py - > Line 156: link = s.short_link - File: moneypenny/moneypenny.py - > Line 159: message = message_format.format(d=date, location=loc_info, visitor_name=visitor_name, link=link) - File: moneypenny/moneypenny.py - > Line 166: ret_MAYBE_FUNCTION_NAME = link - File: moneypenny/moneypenny.py - > Line 112: ret_MAYBE_FUNCTION_NAME = '' - File: moneypenny/moneypenny.py - > Line 150: link = 'Something went wrong here' -File: moneypenny/moneypenny.py - > reaches line 118, trigger word "replace(": - date = date.replace(tzinfo=pytz.timezone(loc_info[1])) - - - -drincruz/flask-tutorial-flaskr -https://github.com/drincruz/flask-tutorial-flaskr -Entry file: flask-tutorial-flaskr/flaskr.py -Scanned: 2016-10-19 12:44:57.782444 -No vulnerabilities found. - - -gurpp/FlaskMusicLibrary -https://github.com/gurpp/FlaskMusicLibrary -Entry file: FlaskMusicLibrary/musicmanager.py -Scanned: 2016-10-19 12:44:59.394333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrislaskey/kingdom -https://github.com/chrislaskey/kingdom -Entry file: kingdom/app/__init__.py -Scanned: 2016-10-19 12:45:01.153908 -No vulnerabilities found. - - -saltycrane/flask-subdomain-dispatcher-example -https://github.com/saltycrane/flask-subdomain-dispatcher-example -Entry file: flask-subdomain-dispatcher-example/subdomainexample.py -Scanned: 2016-10-19 12:45:04.387496 -No vulnerabilities found. - - -colorstain/flask-api-base -https://github.com/colorstain/flask-api-base -Entry file: flask-api-base/tests/test_require_json.py -Scanned: 2016-10-19 12:45:09.353194 -No vulnerabilities found. - - -superpilot/cr_flask_api -https://github.com/superpilot/cr_flask_api -Entry file: cr_flask_api/wsgi.py -Scanned: 2016-10-19 12:45:13.804701 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DhashS/TryOutFlask -https://github.com/DhashS/TryOutFlask -Entry file: TryOutFlask/TryOutFlask/app/__init__.py -Scanned: 2016-10-19 12:45:19.036808 -No vulnerabilities found. - - -PyBulls/teach-me-flask -https://github.com/PyBulls/teach-me-flask -Entry file: teach-me-flask/submit.py -Scanned: 2016-10-19 12:45:20.433857 -No vulnerabilities found. - - -cogell/learningPythonFlask -https://github.com/cogell/learningPythonFlask -Entry file: learningPythonFlask/app/__init__.py -Scanned: 2016-10-19 12:45:21.782623 -Vulnerability 1: -File: learningPythonFlask/app/views.py - > User input at line 13, trigger word "files[": - file = request.files['files'] -Reassigned in: - File: learningPythonFlask/app/views.py - > Line 15: filename = secure_filename(file.filename) - File: learningPythonFlask/app/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: learningPythonFlask/app/views.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',filename=filename) - - - -jashmead/helloflask -https://github.com/jashmead/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:45:22.310027 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -jashmead/hello -https://github.com/jashmead/hello -Entry file: hello/hello.py -Scanned: 2016-10-19 12:45:29.081564 -No vulnerabilities found. - - -Beluki/Frozen-Blog -https://github.com/Beluki/Frozen-Blog -Entry file: Frozen-Blog/Source/blog.py -Scanned: 2016-10-19 12:45:35.698520 -No vulnerabilities found. - - -chenyunchen/NexmoCalendar -https://github.com/chenyunchen/NexmoCalendar -Entry file: None -Scanned: 2016-10-19 12:45:38.629205 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -merkhofer/parsel -https://github.com/merkhofer/parsel -Entry file: None -Scanned: 2016-10-19 12:45:40.636491 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/merkhofer/parsel. - -ajmarcus/bootflask -https://github.com/ajmarcus/bootflask -Entry file: bootflask/app/views.py -Scanned: 2016-10-19 12:45:42.002605 -No vulnerabilities found. - - -davemurph/ICTProject -https://github.com/davemurph/ICTProject -Entry file: ICTProject/_ubuntu_files/exchange_api.py -Scanned: 2016-10-19 12:45:45.561968 -No vulnerabilities found. - - -madflow/toni -https://github.com/madflow/toni -Entry file: None -Scanned: 2016-10-19 12:45:48.449165 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/madflow/toni. - -akahuang/comic-viewer -https://github.com/akahuang/comic-viewer -Entry file: comic-viewer/index.py -Scanned: 2016-10-19 12:45:49.850284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -djds23/deanstream -https://github.com/djds23/deanstream -Entry file: deanstream/app/__init__.py -Scanned: 2016-10-19 12:45:53.579062 -No vulnerabilities found. - - -JonHMChan/nimbus -https://github.com/JonHMChan/nimbus -Entry file: nimbus/index.py -Scanned: 2016-10-19 12:45:54.884306 -No vulnerabilities found. - - -alexwright/restrepos -https://github.com/alexwright/restrepos -Entry file: restrepos/rest.py -Scanned: 2016-10-19 12:45:56.168508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willfong/okgotit -https://github.com/willfong/okgotit -Entry file: okgotit/app.py -Scanned: 2016-10-19 12:45:57.587539 -Vulnerability 1: -File: okgotit/app.py - > User input at line 290, trigger word "form[": - callgroup = request.form['callgroup'] -File: okgotit/app.py - > reaches line 295, trigger word "execute(": - cur = g.db.execute('SELECT id FROM callgroup WHERE name = ?', [callgroup]) - -Vulnerability 2: -File: okgotit/app.py - > User input at line 290, trigger word "form[": - callgroup = request.form['callgroup'] -File: okgotit/app.py - > reaches line 299, trigger word "execute(": - cur = g.db.execute('SELECT u.name, u.mobilenum FROM user AS u INNER JOIN notification AS s ON u.id = s.userid AND s.groupid = ? AND s.typeid = 1', [gid[0]]) - -Vulnerability 3: -File: okgotit/app.py - > User input at line 344, trigger word "get(": - response = int(request.args.get('Digits', '')) -File: okgotit/app.py - > reaches line 345, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('response.xml',response=response) - - - -TomDunn/flog -https://github.com/TomDunn/flog -Entry file: flog/application.py -Scanned: 2016-10-19 12:45:59.442304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nitesh201/wisspr -https://github.com/nitesh201/wisspr -Entry file: wisspr/wisspr.py -Scanned: 2016-10-19 12:46:01.177897 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tlewis/microblog -https://github.com/tlewis/microblog -Entry file: None -Scanned: 2016-10-19 12:46:01.683410 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -acamilo/WS2811Web -https://github.com/acamilo/WS2811Web -Entry file: WS2811Web/ws2811web.py -Scanned: 2016-10-19 12:46:03.406766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -billjedi/nfl_picks -https://github.com/billjedi/nfl_picks -Entry file: nfl_picks/app/__init__.py -Scanned: 2016-10-19 12:46:04.944574 -No vulnerabilities found. - - -aliyarahman/code-for-progress-curriculum -https://github.com/aliyarahman/code-for-progress-curriculum -Entry file: code-for-progress-curriculum/app/__init__.py -Scanned: 2016-10-19 12:46:06.456074 -Vulnerability 1: -File: code-for-progress-curriculum/app/views.py - > User input at line 36, trigger word "get(": - nextlesson = LessonPlan.query.get(lesson.id + 1) -File: code-for-progress-curriculum/app/views.py - > reaches line 38, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('lesson_plan.html',lesson=lesson, nextlesson=nextlesson, previouslesson=previouslesson) - -Vulnerability 2: -File: code-for-progress-curriculum/app/views.py - > User input at line 37, trigger word "get(": - previouslesson = LessonPlan.query.get(lesson.id - 1) -File: code-for-progress-curriculum/app/views.py - > reaches line 38, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('lesson_plan.html',lesson=lesson, nextlesson=nextlesson, previouslesson=previouslesson) - -Vulnerability 3: -File: code-for-progress-curriculum/app/views.py - > User input at line 45, trigger word "get(": - nextlesson = LessonPlan.query.get(lesson.id + 1) -Reassigned in: - File: code-for-progress-curriculum/app/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect('/index') -File: code-for-progress-curriculum/app/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_lesson.html',lesson=lesson, form=form, previouslesson=previouslesson, nextlesson=nextlesson) - -Vulnerability 4: -File: code-for-progress-curriculum/app/views.py - > User input at line 46, trigger word "get(": - previouslesson = LessonPlan.query.get(lesson.id - 1) -Reassigned in: - File: code-for-progress-curriculum/app/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect('/index') -File: code-for-progress-curriculum/app/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_lesson.html',lesson=lesson, form=form, previouslesson=previouslesson, nextlesson=nextlesson) - - - -x1o/brblog -https://github.com/x1o/brblog -Entry file: None -Scanned: 2016-10-19 12:46:07.892740 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/x1o/brblog. - -miguelgrinberg/Flask-SocketIO -https://github.com/miguelgrinberg/Flask-SocketIO -Entry file: None -Scanned: 2016-10-19 12:46:09.499192 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alisaifee/flask-limiter -https://github.com/alisaifee/flask-limiter -Entry file: flask-limiter/tests/test_regressions.py -Scanned: 2016-10-19 12:46:15.493593 -No vulnerabilities found. - - -Jahaja/psdash -https://github.com/Jahaja/psdash -Entry file: psdash/psdash/run.py -Scanned: 2016-10-19 12:46:17.791403 -Vulnerability 1: -File: psdash/psdash/web.py - > User input at line 227, trigger word "get(": - form_values = dict(((k, request.args.get(k, default_val)) for (k, default_val) in form_keys.iteritems())) -Reassigned in: - File: psdash/psdash/web.py - > Line 238: conns = current_service.get_connections(form_values) -File: psdash/psdash/web.py - > reaches line 248, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('network.html',page='network', network_interfaces=netifs, connections=conns, socket_families=socket_families, socket_types=socket_types, states=states, is_xhr=request.is_xhr, num_conns=len(conns), form_values) - -Vulnerability 2: -File: psdash/psdash/web.py - > User input at line 292, trigger word "get(": - seek_tail = request.args.get('seek_tail', '1') != '0' -Reassigned in: - File: psdash/psdash/web.py - > Line 296: content = current_service.read_log(filename,session_key=session_key, seek_tail=seek_tail) - File: psdash/psdash/web.py - > Line 304: ret_MAYBE_FUNCTION_NAME = content - File: psdash/psdash/web.py - > Line 300: ret_MAYBE_FUNCTION_NAME = error_msg - File: psdash/psdash/web.py - > Line 301: ret_MAYBE_FUNCTION_NAME = (render_template('error.html',error=error_msg), 404) -File: psdash/psdash/web.py - > reaches line 306, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('log.html',content=content, filename=filename) - -Vulnerability 3: -File: psdash/psdash/web.py - > User input at line 293, trigger word "get(": - session_key = session.get('client_id') -Reassigned in: - File: psdash/psdash/web.py - > Line 296: content = current_service.read_log(filename,session_key=session_key, seek_tail=seek_tail) - File: psdash/psdash/web.py - > Line 304: ret_MAYBE_FUNCTION_NAME = content - File: psdash/psdash/web.py - > Line 300: ret_MAYBE_FUNCTION_NAME = error_msg - File: psdash/psdash/web.py - > Line 301: ret_MAYBE_FUNCTION_NAME = (render_template('error.html',error=error_msg), 404) -File: psdash/psdash/web.py - > reaches line 306, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('log.html',content=content, filename=filename) - -Vulnerability 4: -File: psdash/psdash/web.py - > User input at line 313, trigger word "get(": - session_key = session.get('client_id') -Reassigned in: - File: psdash/psdash/web.py - > Line 316: data = current_service.search_log(filename, query_text,session_key=session_key) - File: psdash/psdash/web.py - > Line 319: ret_MAYBE_FUNCTION_NAME = ('Could not find log file with given filename', 404) -File: psdash/psdash/web.py - > reaches line 317, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(data) - - - -cewing/training.sample-flask-app -https://github.com/cewing/training.sample-flask-app -Entry file: None -Scanned: 2016-10-19 12:46:23.751975 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cewing/training.sample-flask-app. - -mattbates/mycms_mongodb -https://github.com/mattbates/mycms_mongodb -Entry file: mycms_mongodb/web.py -Scanned: 2016-10-19 12:46:27.540764 -No vulnerabilities found. - - -rgrinberg/flask-gevent-omegle -https://github.com/rgrinberg/flask-gevent-omegle -Entry file: None -Scanned: 2016-10-19 12:46:31.622711 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rgrinberg/flask-gevent-omegle. - -alyssaq/flask-restful-api-appengine -https://github.com/alyssaq/flask-restful-api-appengine -Entry file: flask-restful-api-appengine/server/__init__.py -Scanned: 2016-10-19 12:46:36.932262 -No vulnerabilities found. - - -fhirschmann/Flask-FlatPages-Knitr -https://github.com/fhirschmann/Flask-FlatPages-Knitr -Entry file: Flask-FlatPages-Knitr/testapp/sitebuilder.py -Scanned: 2016-10-19 12:46:41.957380 -No vulnerabilities found. - - -aaboyd/flask-shared-templates -https://github.com/aaboyd/flask-shared-templates -Entry file: flask-shared-templates/app.py -Scanned: 2016-10-19 12:46:43.356075 -No vulnerabilities found. - - -fhirschmann/Flask-FlatPages-Pandoc -https://github.com/fhirschmann/Flask-FlatPages-Pandoc -Entry file: Flask-FlatPages-Pandoc/tests.py -Scanned: 2016-10-19 12:46:44.737298 -No vulnerabilities found. - - -qdonnellan/flaskblog -https://github.com/qdonnellan/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 12:46:47.265772 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ipdae/flaskr -https://github.com/ipdae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:46:47.773974 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregconant/flasktest -https://github.com/gregconant/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 12:46:48.294808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jephdo/flaskapp -https://github.com/jephdo/flaskapp -Entry file: None -Scanned: 2016-10-19 12:46:50.798489 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jephdo/flaskapp. - -Mordeaux/FlaskCheckers -https://github.com/Mordeaux/FlaskCheckers -Entry file: FlaskCheckers/run.py -Scanned: 2016-10-19 12:46:56.820228 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kajun/flaskr2 -https://github.com/kajun/flaskr2 -Entry file: flaskr2/flaskr.py -Scanned: 2016-10-19 12:46:58.225355 -No vulnerabilities found. - - -rdegges/flask-api-sample -https://github.com/rdegges/flask-api-sample -Entry file: flask-api-sample/app.py -Scanned: 2016-10-19 12:46:59.736778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gilesbrown/flask_inform -https://github.com/gilesbrown/flask_inform -Entry file: flask_inform/demo_flask_inform.py -Scanned: 2016-10-19 12:47:01.158102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jason2506/flask-skeleton -https://github.com/jason2506/flask-skeleton -Entry file: None -Scanned: 2016-10-19 12:47:02.182405 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jason2506/flask-skeleton. - -drawcode/deployee-flask -https://github.com/drawcode/deployee-flask -Entry file: deployee-flask/app/__init__.py -Scanned: 2016-10-19 12:47:05.112264 -Vulnerability 1: -File: deployee-flask/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: deployee-flask/app/users/views.py - > Line 38: session['user_id'] = user.id -File: deployee-flask/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -chen-huaijin/owlympics_flask -https://github.com/chen-huaijin/owlympics_flask -Entry file: owlympics_flask/owlympics.py -Scanned: 2016-10-19 12:47:11.631569 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: owlympics_flask/lib/python2.7/genericpath.py - -chizel/try_flask -https://github.com/chizel/try_flask -Entry file: try_flask/my_site/__init__.py -Scanned: 2016-10-19 12:47:13.319370 -No vulnerabilities found. - - -drawcode/blueprints-flask -https://github.com/drawcode/blueprints-flask -Entry file: blueprints-flask/app/__init__.py -Scanned: 2016-10-19 12:47:14.742317 -Vulnerability 1: -File: blueprints-flask/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: blueprints-flask/app/users/views.py - > Line 38: session['user_id'] = user.id -File: blueprints-flask/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -Zren/flask-examples -https://github.com/Zren/flask-examples -Entry file: flask-examples/memcache-example/app.py -Scanned: 2016-10-19 12:47:16.024049 -No vulnerabilities found. - - -sibukixxx/docker_web -https://github.com/sibukixxx/docker_web -Entry file: docker_web/docker_web.py -Scanned: 2016-10-19 12:47:17.424125 -No vulnerabilities found. - - -chiffa/Flask4Meitoppi -https://github.com/chiffa/Flask4Meitoppi -Entry file: Flask4Meitoppi/source/MainServer.py -Scanned: 2016-10-19 12:47:18.817891 -No vulnerabilities found. - - -vladkrylov/FlaskLoginTest -https://github.com/vladkrylov/FlaskLoginTest -Entry file: FlaskLoginTest/app/__init__.py -Scanned: 2016-10-19 12:47:20.564309 -Vulnerability 1: -File: FlaskLoginTest/app/views.py - > User input at line 45, trigger word ".data": - userName = form.openid.data -File: FlaskLoginTest/app/views.py - > reaches line 47, trigger word "filter(": - user = User.query.filter(User.name == userName).first() - - - -dhuntsperger/new_flask_app -https://github.com/dhuntsperger/new_flask_app -Entry file: new_flask_app/app/flask_app/__init__.py -Scanned: 2016-10-19 12:47:24.313639 -No vulnerabilities found. - - -MarkRoddy/heroku-first-flask -https://github.com/MarkRoddy/heroku-first-flask -Entry file: heroku-first-flask/hello.py -Scanned: 2016-10-19 12:47:25.646858 -No vulnerabilities found. - - -cdahlhausen/flask-web-demo -https://github.com/cdahlhausen/flask-web-demo -Entry file: flask-web-demo/ve/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 12:47:28.593238 -No vulnerabilities found. - - -PyBulls/teach-me-flask -https://github.com/PyBulls/teach-me-flask -Entry file: teach-me-flask/submit.py -Scanned: 2016-10-19 12:47:33.126677 -No vulnerabilities found. - - -palei/ng-flask-shop -https://github.com/palei/ng-flask-shop -Entry file: ng-flask-shop/app/__init__.py -Scanned: 2016-10-19 12:47:38.804015 -No vulnerabilities found. - - -dihuynh/helloflask -https://github.com/dihuynh/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:47:39.337399 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -aphivantrakul/microblog -https://github.com/aphivantrakul/microblog -Entry file: None -Scanned: 2016-10-19 12:47:42.924212 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kafkahw/flaskr-tdd -https://github.com/kafkahw/flaskr-tdd -Entry file: flaskr-tdd/flaskr.py -Scanned: 2016-10-19 12:47:45.336237 -No vulnerabilities found. - - -yangyeol/flaskr_tutorial -https://github.com/yangyeol/flaskr_tutorial -Entry file: flaskr_tutorial/flaskr.py -Scanned: 2016-10-19 12:47:46.645573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -michaelew/ducking-octo-bear -https://github.com/michaelew/ducking-octo-bear -Entry file: ducking-octo-bear/app.py -Scanned: 2016-10-19 12:47:50.059437 -No vulnerabilities found. - - -davemurph/ICTProject -https://github.com/davemurph/ICTProject -Entry file: ICTProject/_ubuntu_files/exchange_api.py -Scanned: 2016-10-19 12:47:53.597806 -No vulnerabilities found. - - -blancgab/devfest-2014-training -https://github.com/blancgab/devfest-2014-training -Entry file: devfest-2014-training/app.py -Scanned: 2016-10-19 12:47:56.561768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nadol/to_do -https://github.com/nadol/to_do -Entry file: to_do/todo.py -Scanned: 2016-10-19 12:47:58.307165 -No vulnerabilities found. - - -jonathanwgoodwin/AnsibleConductor -https://github.com/jonathanwgoodwin/AnsibleConductor -Entry file: None -Scanned: 2016-10-19 12:47:59.701429 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jonathanwgoodwin/AnsibleConductor. - -qdonnellan/helloflask -https://github.com/qdonnellan/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:48:00.225754 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -kr4ng/helloflask -https://github.com/kr4ng/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:48:00.749463 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -mrkaiser/confrencebackend -https://github.com/mrkaiser/confrencebackend -Entry file: confrencebackend/migrate.py -Scanned: 2016-10-19 12:48:02.673904 -No vulnerabilities found. - - -djds23/deanstream -https://github.com/djds23/deanstream -Entry file: deanstream/app/__init__.py -Scanned: 2016-10-19 12:48:06.402837 -No vulnerabilities found. - - -cmanallen/refreshly -https://github.com/cmanallen/refreshly -Entry file: refreshly/refreshly.py -Scanned: 2016-10-19 12:48:09.373622 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: refreshly/env/lib/python3.3/struct.py - -nitesh201/wisspr -https://github.com/nitesh201/wisspr -Entry file: wisspr/wisspr.py -Scanned: 2016-10-19 12:48:09.884384 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dannytranlx/interface-feed-parser -https://github.com/dannytranlx/interface-feed-parser -Entry file: interface-feed-parser/application.py -Scanned: 2016-10-19 12:48:11.262952 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lingthio/Flask-User -https://github.com/lingthio/Flask-User -Entry file: Flask-User/example_apps/multi_email_app.py -Scanned: 2016-10-19 12:48:18.752331 -Vulnerability 1: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 90: db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 2: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 90, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 83: db_adapter = SQLAlchemyAdapter(db, User) - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 4: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 83, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 5: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 92: db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - -Vulnerability 6: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 92, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - - - -alisaifee/flask-limiter -https://github.com/alisaifee/flask-limiter -Entry file: flask-limiter/tests/test_regressions.py -Scanned: 2016-10-19 12:48:21.162724 -No vulnerabilities found. - - -stormpath/stormpath-flask -https://github.com/stormpath/stormpath-flask -Entry file: stormpath-flask/tests/test_stormpath.py -Scanned: 2016-10-19 12:48:24.155093 -No vulnerabilities found. - - -Jahaja/psdash -https://github.com/Jahaja/psdash -Entry file: psdash/psdash/run.py -Scanned: 2016-10-19 12:48:26.696852 -Vulnerability 1: -File: psdash/psdash/web.py - > User input at line 227, trigger word "get(": - form_values = dict(((k, request.args.get(k, default_val)) for (k, default_val) in form_keys.iteritems())) -Reassigned in: - File: psdash/psdash/web.py - > Line 238: conns = current_service.get_connections(form_values) -File: psdash/psdash/web.py - > reaches line 248, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('network.html',page='network', network_interfaces=netifs, connections=conns, socket_families=socket_families, socket_types=socket_types, states=states, is_xhr=request.is_xhr, num_conns=len(conns), form_values) - -Vulnerability 2: -File: psdash/psdash/web.py - > User input at line 292, trigger word "get(": - seek_tail = request.args.get('seek_tail', '1') != '0' -Reassigned in: - File: psdash/psdash/web.py - > Line 296: content = current_service.read_log(filename,session_key=session_key, seek_tail=seek_tail) - File: psdash/psdash/web.py - > Line 304: ret_MAYBE_FUNCTION_NAME = content - File: psdash/psdash/web.py - > Line 300: ret_MAYBE_FUNCTION_NAME = error_msg - File: psdash/psdash/web.py - > Line 301: ret_MAYBE_FUNCTION_NAME = (render_template('error.html',error=error_msg), 404) -File: psdash/psdash/web.py - > reaches line 306, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('log.html',content=content, filename=filename) - -Vulnerability 3: -File: psdash/psdash/web.py - > User input at line 293, trigger word "get(": - session_key = session.get('client_id') -Reassigned in: - File: psdash/psdash/web.py - > Line 296: content = current_service.read_log(filename,session_key=session_key, seek_tail=seek_tail) - File: psdash/psdash/web.py - > Line 304: ret_MAYBE_FUNCTION_NAME = content - File: psdash/psdash/web.py - > Line 300: ret_MAYBE_FUNCTION_NAME = error_msg - File: psdash/psdash/web.py - > Line 301: ret_MAYBE_FUNCTION_NAME = (render_template('error.html',error=error_msg), 404) -File: psdash/psdash/web.py - > reaches line 306, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('log.html',content=content, filename=filename) - -Vulnerability 4: -File: psdash/psdash/web.py - > User input at line 313, trigger word "get(": - session_key = session.get('client_id') -Reassigned in: - File: psdash/psdash/web.py - > Line 316: data = current_service.search_log(filename, query_text,session_key=session_key) - File: psdash/psdash/web.py - > Line 319: ret_MAYBE_FUNCTION_NAME = ('Could not find log file with given filename', 404) -File: psdash/psdash/web.py - > reaches line 317, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(data) - - - -Jwpe/Flask-Nicely -https://github.com/Jwpe/Flask-Nicely -Entry file: Flask-Nicely/examples/app.py -Scanned: 2016-10-19 12:48:28.061394 -No vulnerabilities found. - - -michaljemala/hello-python -https://github.com/michaljemala/hello-python -Entry file: hello-python/hello.py -Scanned: 2016-10-19 12:48:29.297751 -No vulnerabilities found. - - -sloria/webargs -https://github.com/sloria/webargs -Entry file: webargs/examples/annotations_example.py -Scanned: 2016-10-19 12:48:35.160614 -Vulnerability 1: -File: webargs/examples/annotations_example.py - > User input at line 68, trigger word ".data": - exc = err.data['exc'] -File: webargs/examples/annotations_example.py - > reaches line 69, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('errors'exc.messages), 422) - -Vulnerability 2: -File: webargs/examples/flask_example.py - > User input at line 63, trigger word ".data": - exc = err.data['exc'] -File: webargs/examples/flask_example.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('errors'exc.messages), 422) - -Vulnerability 3: -File: webargs/examples/schema_example.py - > User input at line 116, trigger word ".data": - exc = err.data['exc'] -File: webargs/examples/schema_example.py - > reaches line 117, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('errors'exc.messages), 422) - - - -elleryq/FlaskPractice -https://github.com/elleryq/FlaskPractice -Entry file: FlaskPractice/app4/hello.py -Scanned: 2016-10-19 12:48:39.577215 -No vulnerabilities found. - - -efazati/flask-tutorial -https://github.com/efazati/flask-tutorial -Entry file: None -Scanned: 2016-10-19 12:48:44.591189 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thinkingserious/api-design-with-apiaryio-python-and-flask -https://github.com/thinkingserious/api-design-with-apiaryio-python-and-flask -Entry file: api-design-with-apiaryio-python-and-flask/app.py -Scanned: 2016-10-19 12:48:46.910496 -Vulnerability 1: -File: api-design-with-apiaryio-python-and-flask/app.py - > User input at line 38, trigger word "get(": - folder = 'id''name''description''parent''meta'folders[-1]['id'] + 1request.json['name']request.json['description']request.json['parent']request.json.get('meta', 'NULL') -File: api-design-with-apiaryio-python-and-flask/app.py - > reaches line 46, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(folder), 201) - - - -tehpug/TehPUG-flask -https://github.com/tehpug/TehPUG-flask -Entry file: TehPUG-flask/wsgi/app/__init__.py -Scanned: 2016-10-19 12:48:49.042370 -Vulnerability 1: -File: TehPUG-flask/wsgi/app/views.py - > User input at line 243, trigger word "get(": - ss = Session.query.get(int(id)) -Reassigned in: - File: TehPUG-flask/wsgi/app/views.py - > Line 244: user = User.query.get(ss.user_id) - File: TehPUG-flask/wsgi/app/views.py - > Line 246: ret_MAYBE_FUNCTION_NAME = render_template('sessions.html',sessions=sessions) -File: TehPUG-flask/wsgi/app/views.py - > reaches line 245, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sessions.html',sessions=sessions, ss=ss, user=user) - -Vulnerability 2: -File: TehPUG-flask/wsgi/app/views.py - > User input at line 244, trigger word "get(": - user = User.query.get(ss.user_id) -Reassigned in: - File: TehPUG-flask/wsgi/app/views.py - > Line 246: ret_MAYBE_FUNCTION_NAME = render_template('sessions.html',sessions=sessions) -File: TehPUG-flask/wsgi/app/views.py - > reaches line 245, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sessions.html',sessions=sessions, ss=ss, user=user) - -Vulnerability 3: -File: TehPUG-flask/wsgi/app/views.py - > User input at line 254, trigger word "get(": - news = News.query.get(int(id)) -Reassigned in: - File: TehPUG-flask/wsgi/app/views.py - > Line 256: user = User.query.get(news.user_id) - File: TehPUG-flask/wsgi/app/views.py - > Line 258: ret_MAYBE_FUNCTION_NAME = render_template('news.html',allnews=allnews) -File: TehPUG-flask/wsgi/app/views.py - > reaches line 257, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('news.html',allnews=allnews, news=news, comments=comments, user=user) - -Vulnerability 4: -File: TehPUG-flask/wsgi/app/views.py - > User input at line 256, trigger word "get(": - user = User.query.get(news.user_id) -Reassigned in: - File: TehPUG-flask/wsgi/app/views.py - > Line 258: ret_MAYBE_FUNCTION_NAME = render_template('news.html',allnews=allnews) -File: TehPUG-flask/wsgi/app/views.py - > reaches line 257, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('news.html',allnews=allnews, news=news, comments=comments, user=user) - - - -mpatini/flaskr -https://github.com/mpatini/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:48:50.560385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Chokwanghwan/flaskr -https://github.com/Chokwanghwan/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:48:55.546334 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ipdae/flaskr -https://github.com/ipdae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:48:59.042409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregconant/flasktest -https://github.com/gregconant/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 12:49:00.575422 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elainewlee/FlaskMicroblog -https://github.com/elainewlee/FlaskMicroblog -Entry file: None -Scanned: 2016-10-19 12:49:08.821028 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mordeaux/FlaskCheckers -https://github.com/Mordeaux/FlaskCheckers -Entry file: FlaskCheckers/run.py -Scanned: 2016-10-19 12:49:09.318455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shaffer-wv/flask-todo -https://github.com/shaffer-wv/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 12:49:09.879323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -moloch/flask_addressbook -https://github.com/moloch/flask_addressbook -Entry file: flask_addressbook/addressbook/__init__.py -Scanned: 2016-10-19 12:49:11.263875 -Vulnerability 1: -File: flask_addressbook/addressbook/views.py - > User input at line 33, trigger word "get(": - search_txt = request.args.get('search_txt') -Reassigned in: - File: flask_addressbook/addressbook/views.py - > Line 34: query_string = '%' + search_txt + '%' -File: flask_addressbook/addressbook/views.py - > reaches line 35, trigger word "filter(": - entries = Entry.query.filter(Entry.first_name.ilike(query_string) | Entry.last_name.ilike(query_string) | Entry.phone_number.ilike(query_string)) - - - -rosscdh/flask-wtd -https://github.com/rosscdh/flask-wtd -Entry file: flask-wtd/wtd.py -Scanned: 2016-10-19 12:49:12.998383 -No vulnerabilities found. - - -h4k1m0u/flask-rdv -https://github.com/h4k1m0u/flask-rdv -Entry file: flask-rdv/app.py -Scanned: 2016-10-19 12:49:14.516882 -Vulnerability 1: -File: flask-rdv/app.py - > User input at line 50, trigger word "get(": - is_logged_in = session.get('is_logged_in') -Reassigned in: - File: flask-rdv/app.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('rdv')) - File: flask-rdv/app.py - > Line 80: ret_MAYBE_FUNCTION_NAME = redirect(url_for('rdv')) -File: flask-rdv/app.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('register.html','login_form''register_form''is_logged_in''username''getmtime'login_formregister_formis_logged_inusernameos.path.getmtime) - -Vulnerability 2: -File: flask-rdv/app.py - > User input at line 51, trigger word "get(": - username = session.get('username') -Reassigned in: - File: flask-rdv/app.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('rdv')) - File: flask-rdv/app.py - > Line 80: ret_MAYBE_FUNCTION_NAME = redirect(url_for('rdv')) -File: flask-rdv/app.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('register.html','login_form''register_form''is_logged_in''username''getmtime'login_formregister_formis_logged_inusernameos.path.getmtime) - -Vulnerability 3: -File: flask-rdv/app.py - > User input at line 109, trigger word "get(": - title = request.args.get('title', None,type=str) -File: flask-rdv/app.py - > reaches line 120, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(flash='Rdv '%s' added between %s and %s' % (title, start, end)) - -Vulnerability 4: -File: flask-rdv/app.py - > User input at line 110, trigger word "get(": - start = datetime.strptime(request.args.get('start', None,type=str), '%a, %d %b %Y %H:%M:%S %Z') -File: flask-rdv/app.py - > reaches line 120, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(flash='Rdv '%s' added between %s and %s' % (title, start, end)) - -Vulnerability 5: -File: flask-rdv/app.py - > User input at line 111, trigger word "get(": - end = datetime.strptime(request.args.get('end', None,type=str), '%a, %d %b %Y %H:%M:%S %Z') -File: flask-rdv/app.py - > reaches line 120, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(flash='Rdv '%s' added between %s and %s' % (title, start, end)) - - - -kholidfu/flask_init -https://github.com/kholidfu/flask_init -Entry file: None -Scanned: 2016-10-19 12:49:16.265620 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kholidfu/flask_init. - -code-first-cambridge/flask-1 -https://github.com/code-first-cambridge/flask-1 -Entry file: flask-1/hello1.py -Scanned: 2016-10-19 12:49:18.074758 -No vulnerabilities found. - - -benhagen/flask-sessionable -https://github.com/benhagen/flask-sessionable -Entry file: flask-sessionable/example/app.py -Scanned: 2016-10-19 12:49:19.468380 -No vulnerabilities found. - - -alexfehr15/Flask_Tutorial -https://github.com/alexfehr15/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-19 12:49:20.191289 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorial/venv/lib/python2.7/genericpath.py - -HellerCommaA/flask-template -https://github.com/HellerCommaA/flask-template -Entry file: None -Scanned: 2016-10-19 12:49:20.686727 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HellerCommaA/flask-template. - -achivil/flask_practice -https://github.com/achivil/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-19 12:49:21.212977 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vishwin/flask-wikitongues -https://github.com/vishwin/flask-wikitongues -Entry file: None -Scanned: 2016-10-19 12:49:22.734379 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vishwin/flask-wikitongues. - -anxst/flask_test -https://github.com/anxst/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 12:49:23.358318 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ko/sandbox-flask -https://github.com/ko/sandbox-flask -Entry file: sandbox-flask/flask-httpauth/main.py -Scanned: 2016-10-19 12:49:26.802105 -Vulnerability 1: -File: sandbox-flask/flask-httpauth/main.py - > User input at line 73, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: sandbox-flask/flask-httpauth/main.py - > Line 85: user = User(username=username) -File: sandbox-flask/flask-httpauth/main.py - > reaches line 90, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - - - -chizel/try_flask -https://github.com/chizel/try_flask -Entry file: try_flask/my_site/__init__.py -Scanned: 2016-10-19 12:49:29.485412 -No vulnerabilities found. - - -Casagrill/flask-blog -https://github.com/Casagrill/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 12:49:30.062429 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ami-GS/Flask_practice -https://github.com/ami-GS/Flask_practice -Entry file: Flask_practice/minitwit/minitwit.py -Scanned: 2016-10-19 12:49:33.676883 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alfg/flask-conditional -https://github.com/alfg/flask-conditional -Entry file: flask-conditional/test_conditional.py -Scanned: 2016-10-19 12:49:35.985930 -No vulnerabilities found. - - -gpapakyriakopoulos/PyFlask -https://github.com/gpapakyriakopoulos/PyFlask -Entry file: PyFlask/app.py -Scanned: 2016-10-19 12:49:40.625589 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: PyFlask/venv/lib/python2.7/genericpath.py - -lanius/flask-mime -https://github.com/lanius/flask-mime -Entry file: flask-mime/test_mime.py -Scanned: 2016-10-19 12:49:42.966930 -No vulnerabilities found. - - -clarkduvall/fleroku -https://github.com/clarkduvall/fleroku -Entry file: None -Scanned: 2016-10-19 12:49:47.396036 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/clarkduvall/fleroku. - -davenportw15/FlaskPostBeta -https://github.com/davenportw15/FlaskPostBeta -Entry file: FlaskPostBeta/application.py -Scanned: 2016-10-19 12:49:48.833465 -No vulnerabilities found. - - -vladkrylov/FlaskLoginTest -https://github.com/vladkrylov/FlaskLoginTest -Entry file: FlaskLoginTest/app/__init__.py -Scanned: 2016-10-19 12:49:50.693067 -Vulnerability 1: -File: FlaskLoginTest/app/views.py - > User input at line 45, trigger word ".data": - userName = form.openid.data -File: FlaskLoginTest/app/views.py - > reaches line 47, trigger word "filter(": - user = User.query.filter(User.name == userName).first() - - - -cliffmin/flask_bootstrap_boiler -https://github.com/cliffmin/flask_bootstrap_boiler -Entry file: None -Scanned: 2016-10-19 12:49:54.936344 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yijingping/flask-memcache-cloud -https://github.com/yijingping/flask-memcache-cloud -Entry file: flask-memcache-cloud/memcache_cloud/__init__.py -Scanned: 2016-10-19 12:49:56.662517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cevaris/flask-hk5 -https://github.com/cevaris/flask-hk5 -Entry file: flask-hk5/mongoFlask/__init__.py -Scanned: 2016-10-19 12:50:03.067358 -Vulnerability 1: -File: flask-hk5/mongoFlask/views.py - > User input at line 13, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 17: articles = Article.objects(body__contains=query) - File: flask-hk5/mongoFlask/views.py - > Line 19: articles = [] -File: flask-hk5/mongoFlask/views.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/index.html',articles=articles[count]) - -Vulnerability 2: -File: flask-hk5/mongoFlask/views.py - > User input at line 14, trigger word "get(": - count = int(request.args.get('n', 0)) -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('articles/index.html',articles=articles) -File: flask-hk5/mongoFlask/views.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/index.html',articles=articles[count]) - -Vulnerability 3: -File: flask-hk5/mongoFlask/views.py - > User input at line 13, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 17: articles = Article.objects(body__contains=query) - File: flask-hk5/mongoFlask/views.py - > Line 19: articles = [] -File: flask-hk5/mongoFlask/views.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/index.html',articles=articles) - -Vulnerability 4: -File: flask-hk5/mongoFlask/views.py - > User input at line 41, trigger word "form[": - body = request.form['body'] -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 45: article = Article(body=body, author=author, title=title, slug=slug) - File: flask-hk5/mongoFlask/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('articles/create.html') -File: flask-hk5/mongoFlask/views.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/show.html',article=article) - -Vulnerability 5: -File: flask-hk5/mongoFlask/views.py - > User input at line 42, trigger word "form[": - author = request.form['body'] -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 45: article = Article(body=body, author=author, title=title, slug=slug) - File: flask-hk5/mongoFlask/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('articles/create.html') -File: flask-hk5/mongoFlask/views.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/show.html',article=article) - -Vulnerability 6: -File: flask-hk5/mongoFlask/views.py - > User input at line 43, trigger word "form[": - title = request.form['body'] -Reassigned in: - File: flask-hk5/mongoFlask/views.py - > Line 44: slug = slugify(title) - File: flask-hk5/mongoFlask/views.py - > Line 45: article = Article(body=body, author=author, title=title, slug=slug) - File: flask-hk5/mongoFlask/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('articles/create.html') -File: flask-hk5/mongoFlask/views.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('articles/show.html',article=article) - - - -camall/Sli.ba-Flask -https://github.com/camall/Sli.ba-Flask -Entry file: None -Scanned: 2016-10-19 12:50:06.681396 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/camall/Sli.ba-Flask. - -Gentle/gw2flask -https://github.com/Gentle/gw2flask -Entry file: gw2flask/app.py -Scanned: 2016-10-19 12:50:11.500789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SparrowJang/flask-babel-example -https://github.com/SparrowJang/flask-babel-example -Entry file: flask-babel-example/app.py -Scanned: 2016-10-19 12:50:12.996452 -No vulnerabilities found. - - -rameshwor/flask-mini-blog -https://github.com/rameshwor/flask-mini-blog -Entry file: None -Scanned: 2016-10-19 12:50:14.286378 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rameshwor/flask-mini-blog. - -chiwanpark/flask-gae-skeleton -https://github.com/chiwanpark/flask-gae-skeleton -Entry file: flask-gae-skeleton/gae/main.py -Scanned: 2016-10-19 12:50:14.795003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guyjacks/flask-blueprints-simple-tutorial -https://github.com/guyjacks/flask-blueprints-simple-tutorial -Entry file: flask-blueprints-simple-tutorial/app.py -Scanned: 2016-10-19 12:50:16.092020 -No vulnerabilities found. - - -Yves-T/python_microblog -https://github.com/Yves-T/python_microblog -Entry file: None -Scanned: 2016-10-19 12:50:21.628635 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -juliomenendez/heroku-vagrant-flask-postgres-app -https://github.com/juliomenendez/heroku-vagrant-flask-postgres-app -Entry file: heroku-vagrant-flask-postgres-app/app.py -Scanned: 2016-10-19 12:50:22.938799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wiliamsouza/cars -https://github.com/wiliamsouza/cars -Entry file: cars/cars/__init__.py -Scanned: 2016-10-19 12:50:24.585792 -Vulnerability 1: -File: cars/cars/controllers.py - > User input at line 77, trigger word "get(": - car = Car.objects.get(id=id) -Reassigned in: - File: cars/cars/controllers.py - > Line 78: form = CarForm(obj=car) - File: cars/cars/controllers.py - > Line 88: car.manufacturer = form.manufacturer.data - File: cars/cars/controllers.py - > Line 89: car.model = form.model.data - File: cars/cars/controllers.py - > Line 90: car.year = form.year.data -File: cars/cars/controllers.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(car.edit_absolute_url()) - -Vulnerability 2: -File: cars/cars/controllers.py - > User input at line 77, trigger word "get(": - car = Car.objects.get(id=id) -Reassigned in: - File: cars/cars/controllers.py - > Line 78: form = CarForm(obj=car) - File: cars/cars/controllers.py - > Line 88: car.manufacturer = form.manufacturer.data - File: cars/cars/controllers.py - > Line 89: car.model = form.model.data - File: cars/cars/controllers.py - > Line 90: car.year = form.year.data -File: cars/cars/controllers.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('cars.html',form=form, url=url) - - - -michaelew/ducking-octo-bear -https://github.com/michaelew/ducking-octo-bear -Entry file: ducking-octo-bear/app.py -Scanned: 2016-10-19 12:50:26.003114 -No vulnerabilities found. - - -volnt/yabuf -https://github.com/volnt/yabuf -Entry file: yabuf/app/main.py -Scanned: 2016-10-19 12:50:27.826574 -No vulnerabilities found. - - -michaelew/psychic-hipster -https://github.com/michaelew/psychic-hipster -Entry file: None -Scanned: 2016-10-19 12:50:33.234276 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dantezhu/kola -https://github.com/dantezhu/kola -Entry file: kola/kola/bin/kola_http.py -Scanned: 2016-10-19 12:50:34.730938 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ytjohn/clubflask -https://github.com/ytjohn/clubflask -Entry file: clubflask/clubflask/app.py -Scanned: 2016-10-19 12:50:36.971435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -artran/MyMdb -https://github.com/artran/MyMdb -Entry file: MyMdb/application.py -Scanned: 2016-10-19 12:50:38.550110 -Vulnerability 1: -File: MyMdb/adaptors/controllers/user_controller.py - > User input at line 54, trigger word "get(": - followed = user_repo.get_by_username(request.args.get('name')) -File: MyMdb/adaptors/controllers/user_controller.py - > reaches line 56, trigger word "flash(": - flash('You are now following %s' % followed.username, 'success') - -Vulnerability 2: -File: MyMdb/adaptors/controllers/user_controller.py - > User input at line 45, trigger word "get(": - user_repo = current_app.config.get('user-repo') -File: MyMdb/adaptors/controllers/user_controller.py - > reaches line 60, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('follow.html',users=user_repo.get_all(), following=[f.username for f in following]) - -Vulnerability 3: -File: MyMdb/adaptors/controllers/user_controller.py - > User input at line 47, trigger word "get(": - follower = session.get('user', '') -Reassigned in: - File: MyMdb/adaptors/controllers/user_controller.py - > Line 48: follower = user_repo.get_by_username(follower) - File: MyMdb/adaptors/controllers/user_controller.py - > Line 59: following = follower_repo.get_following(follower) - File: MyMdb/adaptors/controllers/user_controller.py - > Line 50: ret_MAYBE_FUNCTION_NAME = redirect(url_for('IndexView:index')) - File: MyMdb/adaptors/controllers/user_controller.py - > Line 57: ret_MAYBE_FUNCTION_NAME = redirect(url_for('UserView:follow')) -File: MyMdb/adaptors/controllers/user_controller.py - > reaches line 60, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('follow.html',users=user_repo.get_all(), following=[f.username for f in following]) - -Vulnerability 4: -File: MyMdb/adaptors/controllers/movies_controller.py - > User input at line 11, trigger word "get(": - movies_repo = current_app.config.get('movies-repo') -File: MyMdb/adaptors/controllers/movies_controller.py - > reaches line 12, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies.html',movies=movies_repo.get_all().values()) - - - -scjackson/twiceurl -https://github.com/scjackson/twiceurl -Entry file: twiceurl/twiceurl.py -Scanned: 2016-10-19 12:50:39.963068 -Vulnerability 1: -File: twiceurl/twiceurl.py - > User input at line 86, trigger word "form[": - url_request = request.form['full_url'] -Reassigned in: - File: twiceurl/twiceurl.py - > Line 89: url_request = urlparse.urlparse(url_request,scheme='http') - File: twiceurl/twiceurl.py - > Line 97: url_request = url_request.geturl() - File: twiceurl/twiceurl.py - > Line 100: result = look_up_by_url('', url_request) - File: twiceurl/twiceurl.py - > Line 119: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], server_error=True) - File: twiceurl/twiceurl.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(valid_id))) - File: twiceurl/twiceurl.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], bad_format=True) -File: twiceurl/twiceurl.py - > reaches line 102, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(result[0]['id']))) - -Vulnerability 2: -File: twiceurl/twiceurl.py - > User input at line 86, trigger word "form[": - url_request = request.form['full_url'] -Reassigned in: - File: twiceurl/twiceurl.py - > Line 89: url_request = urlparse.urlparse(url_request,scheme='http') - File: twiceurl/twiceurl.py - > Line 97: url_request = url_request.geturl() - File: twiceurl/twiceurl.py - > Line 100: result = look_up_by_url('', url_request) - File: twiceurl/twiceurl.py - > Line 119: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], server_error=True) - File: twiceurl/twiceurl.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(valid_id))) - File: twiceurl/twiceurl.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], bad_format=True) -File: twiceurl/twiceurl.py - > reaches line 102, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(result[0]['id']))) - - - -fizyk20/beelzebuBB -https://github.com/fizyk20/beelzebuBB -Entry file: beelzebuBB/beelzebubb/__init__.py -Scanned: 2016-10-19 12:50:41.852479 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ericdoi/LittleLibrarian -https://github.com/ericdoi/LittleLibrarian -Entry file: LittleLibrarian/main.py -Scanned: 2016-10-19 12:50:43.315582 -No vulnerabilities found. - - -snirp/flatfreeze -https://github.com/snirp/flatfreeze -Entry file: flatfreeze/app.py -Scanned: 2016-10-19 12:50:49.621513 -No vulnerabilities found. - - -okaram/learnmongo -https://github.com/okaram/learnmongo -Entry file: learnmongo/FlaskApplication/__init__.py -Scanned: 2016-10-19 12:50:51.872978 -Vulnerability 1: -File: learnmongo/FlaskApplication/__init__.py - > User input at line 19, trigger word "get(": - obj = client.okaram.test.find('_id'request.args.get('id')) -Reassigned in: - File: learnmongo/FlaskApplication/__init__.py - > Line 20: dict = 'content'obj -File: learnmongo/FlaskApplication/__init__.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',title='Welcome', text=dict) - - - -jashmead/mapsndata -https://github.com/jashmead/mapsndata -Entry file: mapsndata/mapsndata.py -Scanned: 2016-10-19 12:50:53.894314 -No vulnerabilities found. - - -adionditsak/Newiki -https://github.com/adionditsak/Newiki -Entry file: Newiki/app/__init__.py -Scanned: 2016-10-19 12:50:57.693953 -No vulnerabilities found. - - -opyate/soapbox -https://github.com/opyate/soapbox -Entry file: soapbox/soapbox/__init__.py -Scanned: 2016-10-19 12:51:03.958366 -No vulnerabilities found. - - -lingthio/Flask-User -https://github.com/lingthio/Flask-User -Entry file: Flask-User/example_apps/multi_email_app.py -Scanned: 2016-10-19 12:51:10.194774 -Vulnerability 1: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 90: db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 2: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 90, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 83: db_adapter = SQLAlchemyAdapter(db, User) - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 4: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 83, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 5: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 92: db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - -Vulnerability 6: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 92, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - - - -citruspi/Flask-Analytics -https://github.com/citruspi/Flask-Analytics -Entry file: Flask-Analytics/test/app.py -Scanned: 2016-10-19 12:51:12.859982 -No vulnerabilities found. - - -adambard/flask-skeleton -https://github.com/adambard/flask-skeleton -Entry file: None -Scanned: 2016-10-19 12:51:13.382385 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adambard/flask-skeleton. - -naushadzaman/heroku-flask-sklearn -https://github.com/naushadzaman/heroku-flask-sklearn -Entry file: heroku-flask-sklearn/hello.py -Scanned: 2016-10-19 12:51:15.783647 -No vulnerabilities found. - - -digismack/si4703-flask-web-server -https://github.com/digismack/si4703-flask-web-server -Entry file: None -Scanned: 2016-10-19 12:51:18.111802 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/digismack/si4703-flask-web-server. - -nhayes-roth/FlaskApp -https://github.com/nhayes-roth/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-19 12:51:18.745392 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erictempleton1/FlaskTemplate -https://github.com/erictempleton1/FlaskTemplate -Entry file: FlaskTemplate/app/__init__.py -Scanned: 2016-10-19 12:51:24.390138 -No vulnerabilities found. - - -valdelmeglio/flaskAPIs -https://github.com/valdelmeglio/flaskAPIs -Entry file: flaskAPIs/flaskApi.py -Scanned: 2016-10-19 12:51:25.896888 -No vulnerabilities found. - - -MarioZX/flask_thi -https://github.com/MarioZX/flask_thi -Entry file: flask_thi/app/__init__.py -Scanned: 2016-10-19 12:51:27.578153 -Vulnerability 1: -File: flask_thi/app/views.py - > User input at line 93, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 99, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 2: -File: flask_thi/app/views.py - > User input at line 93, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 99, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 3: -File: flask_thi/app/views.py - > User input at line 93, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 105, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 4: -File: flask_thi/app/views.py - > User input at line 93, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 105, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 5: -File: flask_thi/app/views.py - > User input at line 93, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 107, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',error=error, page=page) - -Vulnerability 6: -File: flask_thi/app/views.py - > User input at line 120, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('admin/index.html') - File: flask_thi/app/views.py - > Line 122: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 124, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 7: -File: flask_thi/app/views.py - > User input at line 120, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('admin/index.html') - File: flask_thi/app/views.py - > Line 122: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 124, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 8: -File: flask_thi/app/views.py - > User input at line 120, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('admin/index.html') - File: flask_thi/app/views.py - > Line 122: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 129, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 9: -File: flask_thi/app/views.py - > User input at line 120, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: flask_thi/app/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = render_template('admin/index.html') - File: flask_thi/app/views.py - > Line 122: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_thi/app/views.py - > reaches line 129, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - - - -eslamio/flask_tutorials -https://github.com/eslamio/flask_tutorials -Entry file: None -Scanned: 2016-10-19 12:51:28.815849 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/eslamio/flask_tutorials. - -kholidfu/flask_init -https://github.com/kholidfu/flask_init -Entry file: None -Scanned: 2016-10-19 12:51:30.319142 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kholidfu/flask_init. - -ericzhong/flask_demo -https://github.com/ericzhong/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 12:51:34.841337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -code-first-cambridge/flask-2 -https://github.com/code-first-cambridge/flask-2 -Entry file: flask-2/guthub6.py -Scanned: 2016-10-19 12:51:38.057893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aert/flask-microblog -https://github.com/aert/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:51:38.563171 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Igorolivei/flask_bar -https://github.com/Igorolivei/flask_bar -Entry file: flask_bar/app.py -Scanned: 2016-10-19 12:51:41.094912 -No vulnerabilities found. - - -code-first-cambridge/flask-1 -https://github.com/code-first-cambridge/flask-1 -Entry file: flask-1/hello1.py -Scanned: 2016-10-19 12:51:42.858948 -No vulnerabilities found. - - -ldcicconi/flask-strap -https://github.com/ldcicconi/flask-strap -Entry file: flask-strap/app/__init__.py -Scanned: 2016-10-19 12:51:44.954523 -No vulnerabilities found. - - -j3rrywan9/flask-study -https://github.com/j3rrywan9/flask-study -Entry file: flask-study/hello.py -Scanned: 2016-10-19 12:51:46.299573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LeanThis/hola-flask -https://github.com/LeanThis/hola-flask -Entry file: hola-flask/app.py -Scanned: 2016-10-19 12:51:50.622524 -No vulnerabilities found. - - -cevaris/flask-dating -https://github.com/cevaris/flask-dating -Entry file: flask-dating/dating/__init__.py -Scanned: 2016-10-19 12:51:52.030677 -Vulnerability 1: -File: flask-dating/dating/views.py - > User input at line 13, trigger word "get(": - name = request.args.get('name', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 25, trigger word "filter(": - pets = Pets.objects.filter(name__contains=name, pet_type__contains=pet_type) - -Vulnerability 2: -File: flask-dating/dating/views.py - > User input at line 15, trigger word "get(": - pet_type = request.args.get('pet_type', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 25, trigger word "filter(": - pets = Pets.objects.filter(name__contains=name, pet_type__contains=pet_type) - -Vulnerability 3: -File: flask-dating/dating/views.py - > User input at line 13, trigger word "get(": - name = request.args.get('name', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets[count], data=form_data) - -Vulnerability 4: -File: flask-dating/dating/views.py - > User input at line 15, trigger word "get(": - pet_type = request.args.get('pet_type', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets[count], data=form_data) - -Vulnerability 5: -File: flask-dating/dating/views.py - > User input at line 20, trigger word "get(": - count = int(request.args.get('n').encode('utf8')) or Pets.objects.count() -Reassigned in: - File: flask-dating/dating/views.py - > Line 18: count = Pets.objects.count() - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets[count], data=form_data) - -Vulnerability 6: -File: flask-dating/dating/views.py - > User input at line 13, trigger word "get(": - name = request.args.get('name', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets, data=form_data) - -Vulnerability 7: -File: flask-dating/dating/views.py - > User input at line 15, trigger word "get(": - pet_type = request.args.get('pet_type', '') -Reassigned in: - File: flask-dating/dating/views.py - > Line 27: pets = [] - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets, data=form_data) - -Vulnerability 8: -File: flask-dating/dating/views.py - > User input at line 20, trigger word "get(": - count = int(request.args.get('n').encode('utf8')) or Pets.objects.count() -Reassigned in: - File: flask-dating/dating/views.py - > Line 18: count = Pets.objects.count() - File: flask-dating/dating/views.py - > Line 29: form_data = 'name''pet_type''count'namepet_typecount -File: flask-dating/dating/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dating/pets.html',pets=pets, data=form_data) - - - -bceskavich/flask-foundation -https://github.com/bceskavich/flask-foundation -Entry file: flask-foundation/app/__init__.py -Scanned: 2016-10-19 12:51:54.354461 -No vulnerabilities found. - - -lanius/flask-mime -https://github.com/lanius/flask-mime -Entry file: flask-mime/test_mime.py -Scanned: 2016-10-19 12:51:56.663288 -No vulnerabilities found. - - -alyonajun/flask_application -https://github.com/alyonajun/flask_application -Entry file: flask_application/application/__init__.py -Scanned: 2016-10-19 12:51:59.095870 -No vulnerabilities found. - - -thermosym/web-test -https://github.com/thermosym/web-test -Entry file: web-test/app/__init__.py -Scanned: 2016-10-19 12:52:00.384034 -No vulnerabilities found. - - -marianatuma/helloflask -https://github.com/marianatuma/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 12:52:02.913056 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -ssinha3/FlaskWebService -https://github.com/ssinha3/FlaskWebService -Entry file: FlaskWebService/flaskWebServiceTest.py -Scanned: 2016-10-19 12:52:05.202958 -No vulnerabilities found. - - -orangain/example-github-oauth-flask -https://github.com/orangain/example-github-oauth-flask -Entry file: example-github-oauth-flask/github_oauth.py -Scanned: 2016-10-19 12:52:07.816355 -No vulnerabilities found. - - -bradcypert/PyComoFlaskDemo -https://github.com/bradcypert/PyComoFlaskDemo -Entry file: PyComoFlaskDemo/FlaskApi.py -Scanned: 2016-10-19 12:52:13.620325 -Vulnerability 1: -File: PyComoFlaskDemo/FlaskApi.py - > User input at line 41, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: PyComoFlaskDemo/FlaskApi.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -murphsp1/WebDevelopmentWithFlask -https://github.com/murphsp1/WebDevelopmentWithFlask -Entry file: WebDevelopmentWithFlask/mongo/mongo.py -Scanned: 2016-10-19 12:52:16.745237 -No vulnerabilities found. - - -ahh2131/pebmo-authorization-flask -https://github.com/ahh2131/pebmo-authorization-flask -Entry file: pebmo-authorization-flask/__init__.py -Scanned: 2016-10-19 12:52:18.129507 -Vulnerability 1: -File: pebmo-authorization-flask/pebmo.py - > User input at line 15, trigger word "get(": - access_token = request.args.get('access_token') -File: pebmo-authorization-flask/pebmo.py - > reaches line 16, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',access_token=access_token) - - - -matrix10657/flask-alchemy-api -https://github.com/matrix10657/flask-alchemy-api -Entry file: flask-alchemy-api/tests/__init__.py -Scanned: 2016-10-19 12:52:20.568120 -No vulnerabilities found. - - -periclesmacedo/flask_first_blog -https://github.com/periclesmacedo/flask_first_blog -Entry file: flask_first_blog/flaskr.py -Scanned: 2016-10-19 12:52:26.016077 -No vulnerabilities found. - - -erictempleton1/TodoList -https://github.com/erictempleton1/TodoList -Entry file: TodoList/todo/__init__.py -Scanned: 2016-10-19 12:52:27.791034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manugarri/d3_map -https://github.com/manugarri/d3_map -Entry file: d3_map/app/__init__.py -Scanned: 2016-10-19 12:52:30.044654 -No vulnerabilities found. - - -cevaris/music-ch6 -https://github.com/cevaris/music-ch6 -Entry file: music-ch6/music/__init__.py -Scanned: 2016-10-19 12:52:32.565596 -No vulnerabilities found. - - -melissayu/Url-Shortener -https://github.com/melissayu/Url-Shortener -Entry file: None -Scanned: 2016-10-19 12:52:38.554130 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scjackson/twiceurl -https://github.com/scjackson/twiceurl -Entry file: twiceurl/twiceurl.py -Scanned: 2016-10-19 12:52:39.923784 -Vulnerability 1: -File: twiceurl/twiceurl.py - > User input at line 86, trigger word "form[": - url_request = request.form['full_url'] -Reassigned in: - File: twiceurl/twiceurl.py - > Line 89: url_request = urlparse.urlparse(url_request,scheme='http') - File: twiceurl/twiceurl.py - > Line 97: url_request = url_request.geturl() - File: twiceurl/twiceurl.py - > Line 100: result = look_up_by_url('', url_request) - File: twiceurl/twiceurl.py - > Line 119: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], server_error=True) - File: twiceurl/twiceurl.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(valid_id))) - File: twiceurl/twiceurl.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], bad_format=True) -File: twiceurl/twiceurl.py - > reaches line 102, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(result[0]['id']))) - -Vulnerability 2: -File: twiceurl/twiceurl.py - > User input at line 86, trigger word "form[": - url_request = request.form['full_url'] -Reassigned in: - File: twiceurl/twiceurl.py - > Line 89: url_request = urlparse.urlparse(url_request,scheme='http') - File: twiceurl/twiceurl.py - > Line 97: url_request = url_request.geturl() - File: twiceurl/twiceurl.py - > Line 100: result = look_up_by_url('', url_request) - File: twiceurl/twiceurl.py - > Line 119: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], server_error=True) - File: twiceurl/twiceurl.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(valid_id))) - File: twiceurl/twiceurl.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('new_url.html',full_url=request.form['full_url'], bad_format=True) -File: twiceurl/twiceurl.py - > reaches line 102, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('url_information',short_url=convert_to_base62(result[0]['id']))) - - - -fizyk20/beelzebuBB -https://github.com/fizyk20/beelzebuBB -Entry file: beelzebuBB/beelzebubb/__init__.py -Scanned: 2016-10-19 12:52:40.931525 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -bluecliff/python-blog -https://github.com/bluecliff/python-blog -Entry file: python-blog/blog/__init__.py -Scanned: 2016-10-19 12:52:42.703921 -No vulnerabilities found. - - -zephod/pio -https://github.com/zephod/pio -Entry file: None -Scanned: 2016-10-19 12:52:44.251962 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zephod/pio. - -okaram/learnmongo -https://github.com/okaram/learnmongo -Entry file: learnmongo/FlaskApplication/__init__.py -Scanned: 2016-10-19 12:52:46.597488 -Vulnerability 1: -File: learnmongo/FlaskApplication/__init__.py - > User input at line 19, trigger word "get(": - obj = client.okaram.test.find('_id'request.args.get('id')) -Reassigned in: - File: learnmongo/FlaskApplication/__init__.py - > Line 20: dict = 'content'obj -File: learnmongo/FlaskApplication/__init__.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',title='Welcome', text=dict) - - - -jashmead/mapsndata -https://github.com/jashmead/mapsndata -Entry file: mapsndata/mapsndata.py -Scanned: 2016-10-19 12:52:49.147782 -No vulnerabilities found. - - -patadune/pyblogr -https://github.com/patadune/pyblogr -Entry file: pyblogr/pyblogr/__init__.py -Scanned: 2016-10-19 12:52:50.558939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VollMich/vdrcontrol -https://github.com/VollMich/vdrcontrol -Entry file: vdrcontrol/server.py -Scanned: 2016-10-19 12:52:51.850449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikejamesthompson/magic-bins -https://github.com/mikejamesthompson/magic-bins -Entry file: magic-bins/app/__init__.py -Scanned: 2016-10-19 12:52:53.535951 -Vulnerability 1: -File: magic-bins/app/views.py - > User input at line 32, trigger word "get(": - search_string = form.data.get('road') -Reassigned in: - File: magic-bins/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: magic-bins/app/views.py - > reaches line 33, trigger word "filter(": - roads = Location.query.filter(Location.name.ilike('%' + search_string + '%')).all() - -Vulnerability 2: -File: magic-bins/app/views.py - > User input at line 32, trigger word ".data": - search_string = form.data.get('road') -Reassigned in: - File: magic-bins/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: magic-bins/app/views.py - > reaches line 33, trigger word "filter(": - roads = Location.query.filter(Location.name.ilike('%' + search_string + '%')).all() - -Vulnerability 3: -File: magic-bins/app/views.py - > User input at line 32, trigger word "get(": - search_string = form.data.get('road') -Reassigned in: - File: magic-bins/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: magic-bins/app/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',form=form, roads=roads, title='Finding bin collections for roads matching ' + search_string, body='search') - -Vulnerability 4: -File: magic-bins/app/views.py - > User input at line 32, trigger word ".data": - search_string = form.data.get('road') -Reassigned in: - File: magic-bins/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: magic-bins/app/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',form=form, roads=roads, title='Finding bin collections for roads matching ' + search_string, body='search') - - - -adionditsak/Newiki -https://github.com/adionditsak/Newiki -Entry file: Newiki/app/__init__.py -Scanned: 2016-10-19 12:52:55.825031 -No vulnerabilities found. - - -CLOUGH/info3180-lab4 -https://github.com/CLOUGH/info3180-lab4 -Entry file: info3180-lab4/lib/flask/sessions.py -Scanned: 2016-10-19 12:52:59.156968 -No vulnerabilities found. - - -Eleonore9/MyNotes -https://github.com/Eleonore9/MyNotes -Entry file: MyNotes/__init__.py -Scanned: 2016-10-19 12:53:02.449569 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: MyNotes/tumblelog/lib/python2.7/genericpath.py - -KyleJamesWalker/brunch-with-friends -https://github.com/KyleJamesWalker/brunch-with-friends -Entry file: brunch-with-friends/api/__init__.py -Scanned: 2016-10-19 12:53:03.841534 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FRC-Team-3140/north-american-happiness -https://github.com/FRC-Team-3140/north-american-happiness -Entry file: north-american-happiness/routes.py -Scanned: 2016-10-19 12:53:08.215267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OzTamir/AlienHot -https://github.com/OzTamir/AlienHot -Entry file: AlienHot/routes.py -Scanned: 2016-10-19 12:53:10.758265 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -I-am-Gabi/getting-started-with-python-heroku -https://github.com/I-am-Gabi/getting-started-with-python-heroku -Entry file: getting-started-with-python-heroku/hello.py -Scanned: 2016-10-19 12:53:12.141817 -No vulnerabilities found. - - -miguelgrinberg/flask-pycon2014 -https://github.com/miguelgrinberg/flask-pycon2014 -Entry file: flask-pycon2014/app/__init__.py -Scanned: 2016-10-19 12:53:14.899213 -Vulnerability 1: -File: flask-pycon2014/app/talks/routes.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-pycon2014/app/talks/routes.py - > Line 14: pagination = Talk.query.order_by(Talk.date.desc()).paginate(page,per_page=current_app.config['TALKS_PER_PAGE'], error_out=False) - File: flask-pycon2014/app/talks/routes.py - > Line 17: talk_list = pagination.items -File: flask-pycon2014/app/talks/routes.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('talks/index.html',talks=talk_list, pagination=pagination) - -Vulnerability 2: -File: flask-pycon2014/app/talks/routes.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-pycon2014/app/talks/routes.py - > Line 26: pagination = user.talks.order_by(Talk.date.desc()).paginate(page,per_page=current_app.config['TALKS_PER_PAGE'], error_out=False) - File: flask-pycon2014/app/talks/routes.py - > Line 29: talk_list = pagination.items -File: flask-pycon2014/app/talks/routes.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('talks/user.html',user=user, talks=talk_list, pagination=pagination) - -Vulnerability 3: -File: flask-pycon2014/app/talks/routes.py - > User input at line 101, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-pycon2014/app/talks/routes.py - > Line 102: pagination = comments_query.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flask-pycon2014/app/talks/routes.py - > Line 105: comments = pagination.items - File: flask-pycon2014/app/talks/routes.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.talk',id=talk.id) + '#top') -File: flask-pycon2014/app/talks/routes.py - > reaches line 109, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = (render_template('talks/talk.html',talk=talk, form=form, comments=comments, pagination=pagination), 200, headers) - - - -anuppathak/flask -https://github.com/anuppathak/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 12:53:16.518641 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -lustlost/saltstack-api-Flask -https://github.com/lustlost/saltstack-api-Flask -Entry file: saltstack-api-Flask/api.py -Scanned: 2016-10-19 12:53:21.328497 -No vulnerabilities found. - - -easonhan007/flyback_blog -https://github.com/easonhan007/flyback_blog -Entry file: flyback_blog/app.py -Scanned: 2016-10-19 12:53:23.033804 -Vulnerability 1: -File: flyback_blog/app.py - > User input at line 58, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: flyback_blog/app.py - > Line 59: posts = get_lists(page) - File: flyback_blog/app.py - > Line 60: next_page = page + 1 - File: flyback_blog/app.py - > Line 61: pre_page = page - 1 -File: flyback_blog/app.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, action='list', current_page=page, next_page=next_page, pre_page=pre_page, total_page=total_page) - - - -elbuo8/flask-tutorial -https://github.com/elbuo8/flask-tutorial -Entry file: None -Scanned: 2016-10-19 12:53:23.547558 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rfyiamcool/flask_restful_api -https://github.com/rfyiamcool/flask_restful_api -Entry file: flask_restful_api/app.py -Scanned: 2016-10-19 12:53:27.876390 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrichman/flask-redis -https://github.com/mrichman/flask-redis -Entry file: flask-redis/flask-redis.py -Scanned: 2016-10-19 12:53:29.360691 -No vulnerabilities found. - - -parasm/flask-boilerplate -https://github.com/parasm/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 12:53:29.898751 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/parasm/flask-boilerplate. - -naushadzaman/heroku-flask-sklearn -https://github.com/naushadzaman/heroku-flask-sklearn -Entry file: heroku-flask-sklearn/hello.py -Scanned: 2016-10-19 12:53:33.845912 -No vulnerabilities found. - - -iynaix/manga-downloader-flask -https://github.com/iynaix/manga-downloader-flask -Entry file: None -Scanned: 2016-10-19 12:53:35.598184 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/iynaix/manga-downloader-flask. - -brunsgaard/yoloAPI -https://github.com/brunsgaard/yoloAPI -Entry file: yoloAPI/app.py -Scanned: 2016-10-19 12:53:41.037609 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -mauri84/FlaskTut -https://github.com/mauri84/FlaskTut -Entry file: FlaskTut/app/__init__.py -Scanned: 2016-10-19 12:53:42.476394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valdelmeglio/flaskAPIs -https://github.com/valdelmeglio/flaskAPIs -Entry file: flaskAPIs/flaskApi.py -Scanned: 2016-10-19 12:53:43.987934 -No vulnerabilities found. - - -vimalkvn/flask_security_example -https://github.com/vimalkvn/flask_security_example -Entry file: flask_security_example/flaskr.py -Scanned: 2016-10-19 12:53:45.315961 -No vulnerabilities found. - - -eslamio/flask_tutorials -https://github.com/eslamio/flask_tutorials -Entry file: None -Scanned: 2016-10-19 12:53:45.827367 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/eslamio/flask_tutorials. - -genju83/flask_skeleton -https://github.com/genju83/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 12:53:46.355730 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -axce1/flask-microblog -https://github.com/axce1/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:53:48.880644 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -code-first-cambridge/flask-2 -https://github.com/code-first-cambridge/flask-2 -Entry file: flask-2/guthub6.py -Scanned: 2016-10-19 12:53:49.398144 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bluecliff/flask-microblog -https://github.com/bluecliff/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:53:50.913624 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aert/flask-microblog -https://github.com/aert/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:53:52.420299 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kryptykfysh/flask-microblog -https://github.com/kryptykfysh/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:53:53.944145 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -timothydbutterworth/flask-starter -https://github.com/timothydbutterworth/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 12:53:56.454196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LeanThis/hola-flask -https://github.com/LeanThis/hola-flask -Entry file: hola-flask/app.py -Scanned: 2016-10-19 12:53:59.752983 -No vulnerabilities found. - - -haya14busa/learning-flask -https://github.com/haya14busa/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 12:54:01.345721 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noorbakerally/flask_blueprint -https://github.com/noorbakerally/flask_blueprint -Entry file: flask_blueprint/dispatcher.py -Scanned: 2016-10-19 12:54:05.660794 -No vulnerabilities found. - - -jdelacruz9/flask-demo -https://github.com/jdelacruz9/flask-demo -Entry file: None -Scanned: 2016-10-19 12:54:06.188555 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jdelacruz9/flask-demo. - -iwanbk/licode-python-basic-example -https://github.com/iwanbk/licode-python-basic-example -Entry file: licode-python-basic-example/app.py -Scanned: 2016-10-19 12:54:11.790696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -naushadzaman/flask-app-on-heroku -https://github.com/naushadzaman/flask-app-on-heroku -Entry file: flask-app-on-heroku/tmp/hello.py -Scanned: 2016-10-19 12:54:16.644104 -No vulnerabilities found. - - -LeanThis/flask-security-basico -https://github.com/LeanThis/flask-security-basico -Entry file: flask-security-basico/app.py -Scanned: 2016-10-19 12:54:17.961764 -No vulnerabilities found. - - -orangain/example-github-oauth-flask -https://github.com/orangain/example-github-oauth-flask -Entry file: example-github-oauth-flask/github_oauth.py -Scanned: 2016-10-19 12:54:19.588712 -No vulnerabilities found. - - -shashisp/flask-todo--REST-API -https://github.com/shashisp/flask-todo--REST-API -Entry file: flask-todo--REST-API/app.py -Scanned: 2016-10-19 12:54:23.968111 -No vulnerabilities found. - - -bradcypert/PyComoFlaskDemo -https://github.com/bradcypert/PyComoFlaskDemo -Entry file: PyComoFlaskDemo/FlaskApi.py -Scanned: 2016-10-19 12:54:26.308194 -Vulnerability 1: -File: PyComoFlaskDemo/FlaskApi.py - > User input at line 41, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: PyComoFlaskDemo/FlaskApi.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -murphsp1/WebDevelopmentWithFlask -https://github.com/murphsp1/WebDevelopmentWithFlask -Entry file: WebDevelopmentWithFlask/mongo/mongo.py -Scanned: 2016-10-19 12:54:30.503797 -No vulnerabilities found. - - -mphuie/flask_restful_angular_uirouter -https://github.com/mphuie/flask_restful_angular_uirouter -Entry file: flask_restful_angular_uirouter/myapp/__init__.py -Scanned: 2016-10-19 12:54:33.218140 -No vulnerabilities found. - - -avishai-ish-shalom/flask-demo-app -https://github.com/avishai-ish-shalom/flask-demo-app -Entry file: flask-demo-app/app.py -Scanned: 2016-10-19 12:54:34.895380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ko/base-flask-restful-api -https://github.com/ko/base-flask-restful-api -Entry file: base-flask-restful-api/app/__init__.py -Scanned: 2016-10-19 12:54:36.689364 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilbertom/flask_base_template -https://github.com/wilbertom/flask_base_template -Entry file: flask_base_template/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/app.py -Scanned: 2016-10-19 12:54:41.996839 -No vulnerabilities found. - - -ryanrdetzel/slack-flask-hook -https://github.com/ryanrdetzel/slack-flask-hook -Entry file: slack-flask-hook/listener.py -Scanned: 2016-10-19 12:54:44.312932 -No vulnerabilities found. - - -eithanshavit/eithanshavit.com.flask -https://github.com/eithanshavit/eithanshavit.com.flask -Entry file: None -Scanned: 2016-10-19 12:54:50.127944 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/eithanshavit/eithanshavit.com.flask. - -asciifaceman/voran -https://github.com/asciifaceman/voran -Entry file: voran/voran/__init__.py -Scanned: 2016-10-19 12:54:51.553999 -No vulnerabilities found. - - -theanalyst/thermos -https://github.com/theanalyst/thermos -Entry file: thermos/__init__.py -Scanned: 2016-10-19 12:54:52.881780 -No vulnerabilities found. - - -avezhenya/musicstream -https://github.com/avezhenya/musicstream -Entry file: musicstream/app/__init__.py -Scanned: 2016-10-19 12:54:54.326331 -Vulnerability 1: -File: musicstream/app/views.py - > User input at line 17, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: musicstream/app/views.py - > Line 19: filename = secure_filename(file.filename) - File: musicstream/app/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: musicstream/app/views.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',filename=filename) - - - -qadeer05/qanalytics -https://github.com/qadeer05/qanalytics -Entry file: qanalytics/qanalytics/__init__.py -Scanned: 2016-10-19 12:54:55.816557 -Vulnerability 1: -File: qanalytics/qanalytics/analytics/views.py - > User input at line 32, trigger word "get(": - browser = request.headers.get('User-Agent') -Reassigned in: - File: qanalytics/qanalytics/analytics/views.py - > Line 44: form = VisitForm(csrf_enabled=False, site=site, browser=browser, url=url, ip_address=ip_address, latitude=geodata.get('latitude'), longitude=geodata.get('longitude'), location=location, event=event) - File: qanalytics/qanalytics/analytics/views.py - > Line 59: ret_MAYBE_FUNCTION_NAME = ('', 204) -File: qanalytics/qanalytics/analytics/views.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(errors=form.errors), 400) - -Vulnerability 2: -File: qanalytics/qanalytics/analytics/views.py - > User input at line 33, trigger word "get(": - url = request.values.get('url') or request.headers.get('Referer') -Reassigned in: - File: qanalytics/qanalytics/analytics/views.py - > Line 44: form = VisitForm(csrf_enabled=False, site=site, browser=browser, url=url, ip_address=ip_address, latitude=geodata.get('latitude'), longitude=geodata.get('longitude'), location=location, event=event) - File: qanalytics/qanalytics/analytics/views.py - > Line 59: ret_MAYBE_FUNCTION_NAME = ('', 204) -File: qanalytics/qanalytics/analytics/views.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(errors=form.errors), 400) - -Vulnerability 3: -File: qanalytics/qanalytics/analytics/views.py - > User input at line 34, trigger word "get(": - event = request.values.get('event') -Reassigned in: - File: qanalytics/qanalytics/analytics/views.py - > Line 44: form = VisitForm(csrf_enabled=False, site=site, browser=browser, url=url, ip_address=ip_address, latitude=geodata.get('latitude'), longitude=geodata.get('longitude'), location=location, event=event) - File: qanalytics/qanalytics/analytics/views.py - > Line 59: ret_MAYBE_FUNCTION_NAME = ('', 204) -File: qanalytics/qanalytics/analytics/views.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(errors=form.errors), 400) - -Vulnerability 4: -File: qanalytics/qanalytics/analytics/views.py - > User input at line 37, trigger word "get(": - location = '{}, {}'.format(geodata.get('city'), geodata.get('zipcode')) -Reassigned in: - File: qanalytics/qanalytics/analytics/views.py - > Line 44: form = VisitForm(csrf_enabled=False, site=site, browser=browser, url=url, ip_address=ip_address, latitude=geodata.get('latitude'), longitude=geodata.get('longitude'), location=location, event=event) - File: qanalytics/qanalytics/analytics/views.py - > Line 59: ret_MAYBE_FUNCTION_NAME = ('', 204) -File: qanalytics/qanalytics/analytics/views.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(errors=form.errors), 400) - -Vulnerability 5: -File: qanalytics/qanalytics/analytics/views.py - > User input at line 44, trigger word "get(": - form = VisitForm(csrf_enabled=False, site=site, browser=browser, url=url, ip_address=ip_address, latitude=geodata.get('latitude'), longitude=geodata.get('longitude'), location=location, event=event) -Reassigned in: - File: qanalytics/qanalytics/analytics/views.py - > Line 59: ret_MAYBE_FUNCTION_NAME = ('', 204) -File: qanalytics/qanalytics/analytics/views.py - > reaches line 61, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(errors=form.errors), 400) - -Vulnerability 6: -File: qanalytics/qanalytics/users/forms.py - > User input at line 19, trigger word ".data": - user = User.query.filter(User.email == form.email.data).one() -Reassigned in: - File: qanalytics/qanalytics/users/forms.py - > Line 29: form.user = user -File: qanalytics/qanalytics/users/forms.py - > reaches line 19, trigger word "filter(": - user = User.query.filter(User.email == form.email.data).one() - -Vulnerability 7: -File: qanalytics/qanalytics/users/forms.py - > User input at line 38, trigger word ".data": - user = User.query.filter(User.email == field.data).first() -File: qanalytics/qanalytics/users/forms.py - > reaches line 38, trigger word "filter(": - user = User.query.filter(User.email == field.data).first() - - - -cyberved/simple-web-proxy -https://github.com/cyberved/simple-web-proxy -Entry file: simple-web-proxy/app.py -Scanned: 2016-10-19 12:54:57.661451 -Vulnerability 1: -File: simple-web-proxy/app.py - > User input at line 87, trigger word "form[": - url = request.form['req_url'] -Reassigned in: - File: simple-web-proxy/app.py - > Line 86: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: simple-web-proxy/app.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('fetch',url=url)) - -Vulnerability 2: -File: simple-web-proxy/app.py - > User input at line 87, trigger word "form[": - url = request.form['req_url'] -Reassigned in: - File: simple-web-proxy/app.py - > Line 86: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: simple-web-proxy/app.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('fetch',url=url)) - - - -mapleoin/shorter -https://github.com/mapleoin/shorter -Entry file: shorter/shorter/web.py -Scanned: 2016-10-19 12:54:59.157385 -Vulnerability 1: -File: shorter/shorter/web.py - > User input at line 47, trigger word "form[": - url = request.form['url'] -Reassigned in: - File: shorter/shorter/web.py - > Line 52: db_url = database.Url(url) - File: shorter/shorter/web.py - > Line 62: shorter = urljoin(config.base_url, db_url.short) -File: shorter/shorter/web.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('shorter.html',original=url, shorter=shorter) - - - -anggao/albatross -https://github.com/anggao/albatross -Entry file: albatross/app/__init__.py -Scanned: 2016-10-19 12:55:01.288509 -No vulnerabilities found. - - -bluecliff/python-blog -https://github.com/bluecliff/python-blog -Entry file: python-blog/blog/__init__.py -Scanned: 2016-10-19 12:55:03.018696 -No vulnerabilities found. - - -delqn/text-ddg -https://github.com/delqn/text-ddg -Entry file: text-ddg/app.py -Scanned: 2016-10-19 12:55:04.351156 -No vulnerabilities found. - - -Jonnyd55/first-news-app -https://github.com/Jonnyd55/first-news-app -Entry file: first-news-app/app.py -Scanned: 2016-10-19 12:55:08.252812 -No vulnerabilities found. - - -michelsazevedo/koffe -https://github.com/michelsazevedo/koffe -Entry file: koffe/app/__init__.py -Scanned: 2016-10-19 12:55:16.919752 -No vulnerabilities found. - - -fogleman/RssToJson -https://github.com/fogleman/RssToJson -Entry file: RssToJson/rss_json/__init__.py -Scanned: 2016-10-19 12:55:19.244143 -Vulnerability 1: -File: RssToJson/rss_json/__init__.py - > User input at line 67, trigger word "get(": - etag = request.args.get('etag') or None -File: RssToJson/rss_json/__init__.py - > reaches line 69, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(parse(url, etag, modified)) - -Vulnerability 2: -File: RssToJson/rss_json/__init__.py - > User input at line 68, trigger word "get(": - modified = request.args.get('modified') or None -File: RssToJson/rss_json/__init__.py - > reaches line 69, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(parse(url, etag, modified)) - - - -brummell/dougr -https://github.com/brummell/dougr -Entry file: dougr/dougr.py -Scanned: 2016-10-19 12:55:20.532537 -No vulnerabilities found. - - -mpatini/wiki -https://github.com/mpatini/wiki -Entry file: None -Scanned: 2016-10-19 12:55:24.503392 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aaronroe/handle-grid-visualizer -https://github.com/aaronroe/handle-grid-visualizer -Entry file: handle-grid-visualizer/handlegridvis.py -Scanned: 2016-10-19 12:55:25.934812 -No vulnerabilities found. - - -indiv0/texserve -https://github.com/indiv0/texserve -Entry file: texserve/app/__init__.py -Scanned: 2016-10-19 12:55:27.363295 -No vulnerabilities found. - - -souparno/scaling-octo -https://github.com/souparno/scaling-octo -Entry file: scaling-octo/__init__.py -Scanned: 2016-10-19 12:55:31.718076 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xmm/flask-restful-example -https://github.com/xmm/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-19 12:55:34.751428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anuppathak/flask -https://github.com/anuppathak/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 12:55:37.307539 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -williamHuang5468/Flask -https://github.com/williamHuang5468/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 12:55:42.317721 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rfyiamcool/flask_restful_api -https://github.com/rfyiamcool/flask_restful_api -Entry file: flask_restful_api/app.py -Scanned: 2016-10-19 12:55:44.821323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morgan-del/flask-espresso -https://github.com/morgan-del/flask-espresso -Entry file: flask-espresso/setup.py -Scanned: 2016-10-19 12:55:52.892782 -No vulnerabilities found. - - -axce1/flask-microblog -https://github.com/axce1/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:55:53.395162 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jbrengman/flask-microblog -https://github.com/jbrengman/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:55:54.896628 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lukewrites/flask-microblog -https://github.com/lukewrites/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:55:56.424405 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -markcharyk/flask-microblog -https://github.com/markcharyk/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:55:57.928735 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -abeinstein/recoil-flask -https://github.com/abeinstein/recoil-flask -Entry file: recoil-flask/app.py -Scanned: 2016-10-19 12:55:59.378597 -No vulnerabilities found. - - -kryptykfysh/flask-microblog -https://github.com/kryptykfysh/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:55:59.904226 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -GeorgiCodes/GdayFlask -https://github.com/GeorgiCodes/GdayFlask -Entry file: GdayFlask/hello.py -Scanned: 2016-10-19 12:56:02.202613 -No vulnerabilities found. - - -wolf0403/flask-boilerplate -https://github.com/wolf0403/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 12:56:04.680713 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wolf0403/flask-boilerplate. - -sniboboof/flask-microblog -https://github.com/sniboboof/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:56:07.186114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jwhite007/Flask-Microblog -https://github.com/jwhite007/Flask-Microblog -Entry file: Flask-Microblog/microblog_package/app/__init__.py -Scanned: 2016-10-19 12:56:09.628382 -No vulnerabilities found. - - -jamescarr/flask-demo -https://github.com/jamescarr/flask-demo -Entry file: None -Scanned: 2016-10-19 12:56:13.153376 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jamescarr/flask-demo. - -risingmoon/flask-microblog -https://github.com/risingmoon/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:56:15.667502 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sbabineau/flask-microblog -https://github.com/sbabineau/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:56:17.172787 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -geekofalltrades/flask-microblog -https://github.com/geekofalltrades/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:56:19.674891 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -noorbakerally/flask_blueprint -https://github.com/noorbakerally/flask_blueprint -Entry file: flask_blueprint/dispatcher.py -Scanned: 2016-10-19 12:56:21.996149 -No vulnerabilities found. - - -dinob0t/Flask_test -https://github.com/dinob0t/Flask_test -Entry file: Flask_test/hello.py -Scanned: 2016-10-19 12:56:24.333809 -No vulnerabilities found. - - -iwanbk/licode-python-basic-example -https://github.com/iwanbk/licode-python-basic-example -Entry file: licode-python-basic-example/app.py -Scanned: 2016-10-19 12:56:26.844536 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crimsoneer/FlaskQueueManager -https://github.com/crimsoneer/FlaskQueueManager -Entry file: FlaskQueueManager/app/__init__.py -Scanned: 2016-10-19 12:56:29.295423 -Vulnerability 1: -File: FlaskQueueManager/app/views.py - > User input at line 84, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 85: role = User.query.get(user).role - File: FlaskQueueManager/app/views.py - > Line 77: ret_MAYBE_FUNCTION_NAME = redirect('') -File: FlaskQueueManager/app/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_user.html',form=form, user=user, anonymous=current_user.is_anonymous(), role=role, role_label=role_label, current_user=current_user, is_admin=is_admin) - -Vulnerability 2: -File: FlaskQueueManager/app/views.py - > User input at line 85, trigger word "get(": - role = User.query.get(user).role -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 77: ret_MAYBE_FUNCTION_NAME = redirect('') -File: FlaskQueueManager/app/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_user.html',form=form, user=user, anonymous=current_user.is_anonymous(), role=role, role_label=role_label, current_user=current_user, is_admin=is_admin) - -Vulnerability 3: -File: FlaskQueueManager/app/views.py - > User input at line 239, trigger word "get(": - previous_task = Task.query.get(previous_no) -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 240: start_hour = str(previous_task.end_hour) - File: FlaskQueueManager/app/views.py - > Line 242: start_hour = '0' + start_hour - File: FlaskQueueManager/app/views.py - > Line 243: start_minute = str(previous_task.end_minute) - File: FlaskQueueManager/app/views.py - > Line 245: start_minute = '0' + start_minute - File: FlaskQueueManager/app/views.py - > Line 230: start_hour = 0 - File: FlaskQueueManager/app/views.py - > Line 231: start_minute = 0 -File: FlaskQueueManager/app/views.py - > reaches line 266, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title='Home', task_no=task_no, task_no_type=task_no_type, form=form, task_types=task_types_dict, current_user=current_user, is_admin=is_admin, anonymous=current_user.is_anonymous(), tasks=tasks, start_hour=start_hour, start_minute=start_minute) - - - -crimsoneer/FlaskMegaTutorial -https://github.com/crimsoneer/FlaskMegaTutorial -Entry file: FlaskMegaTutorial/flask/Lib/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 12:56:34.211653 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kljensen/flask-sockets-demo -https://github.com/kljensen/flask-sockets-demo -Entry file: flask-sockets-demo/hello.py -Scanned: 2016-10-19 12:56:35.511227 -No vulnerabilities found. - - -cevaris/flask-ch8 -https://github.com/cevaris/flask-ch8 -Entry file: flask-ch8/hello.py -Scanned: 2016-10-19 12:56:37.141726 -No vulnerabilities found. - - -mhw32/Online-Flask-Tutorial -https://github.com/mhw32/Online-Flask-Tutorial -Entry file: None -Scanned: 2016-10-19 12:56:42.775902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wulongqiu/Python-Flask-Microblog -https://github.com/wulongqiu/Python-Flask-Microblog -Entry file: Python-Flask-Microblog/app/__init__.py -Scanned: 2016-10-19 12:56:44.034093 -No vulnerabilities found. - - -leafpeak/QuickRest-Flask -https://github.com/leafpeak/QuickRest-Flask -Entry file: QuickRest-Flask/app.py -Scanned: 2016-10-19 12:56:45.346366 -No vulnerabilities found. - - -marchibbins/teela -https://github.com/marchibbins/teela -Entry file: teela/teela/app.py -Scanned: 2016-10-19 12:56:46.888062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cff007/todo_list -https://github.com/cff007/todo_list -Entry file: todo_list/todo.py -Scanned: 2016-10-19 12:56:48.190128 -No vulnerabilities found. - - -mfrohberg/microblog -https://github.com/mfrohberg/microblog -Entry file: None -Scanned: 2016-10-19 12:56:48.740329 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wxue/Tonbo -https://github.com/wxue/Tonbo -Entry file: Tonbo/lib/flask/sessions.py -Scanned: 2016-10-19 12:56:56.589848 -No vulnerabilities found. - - -ryan-lane/together-video -https://github.com/ryan-lane/together-video -Entry file: together-video/tv/__init__.py -Scanned: 2016-10-19 12:57:00.086205 -No vulnerabilities found. - - -nakul225/command-module -https://github.com/nakul225/command-module -Entry file: command-module/application.py -Scanned: 2016-10-19 12:57:01.764908 -Vulnerability 1: -File: command-module/application.py - > User input at line 194, trigger word "form[": - alfred_response = process_command(request.form['text']) -File: command-module/application.py - > reaches line 195, trigger word "flash(": - flash('Alfred says: ' + alfred_response) - - - -hammadmlk/TailorMadeFlaskEmailServ -https://github.com/hammadmlk/TailorMadeFlaskEmailServ -Entry file: TailorMadeFlaskEmailServ/server.py -Scanned: 2016-10-19 12:57:03.723479 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sant0sh/BlogSpot -https://github.com/sant0sh/BlogSpot -Entry file: None -Scanned: 2016-10-19 12:57:05.070760 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sant0sh/BlogSpot. - -brianfarris/simplelogin-form-db -https://github.com/brianfarris/simplelogin-form-db -Entry file: simplelogin-form-db/app/__init__.py -Scanned: 2016-10-19 12:57:07.287426 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -miclovich/personal -https://github.com/miclovich/personal -Entry file: personal/routes.py -Scanned: 2016-10-19 12:57:08.587681 -No vulnerabilities found. - - -yhuili/Schedule -https://github.com/yhuili/Schedule -Entry file: Schedule/sched/app.py -Scanned: 2016-10-19 12:57:10.035159 -Vulnerability 1: -File: Schedule/sched/app.py - > User input at line 58, trigger word "get(": - appt = db.session.query(Appointment).get(appointment_id) -File: Schedule/sched/app.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('appointment/detail.html',appt=appt) - -Vulnerability 2: -File: Schedule/sched/app.py - > User input at line 71, trigger word "get(": - appt = db.session.query(Appointment).get(appointment_id) -Reassigned in: - File: Schedule/sched/app.py - > Line 76: form = AppointmentForm(request.form, appt) -File: Schedule/sched/app.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('appointment_detail',appointment_id=appt.id)) - -Vulnerability 3: -File: Schedule/sched/app.py - > User input at line 71, trigger word "get(": - appt = db.session.query(Appointment).get(appointment_id) -Reassigned in: - File: Schedule/sched/app.py - > Line 76: form = AppointmentForm(request.form, appt) -File: Schedule/sched/app.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('appointment_detail',appointment_id=appt.id)) - -Vulnerability 4: -File: Schedule/sched/app.py - > User input at line 71, trigger word "get(": - appt = db.session.query(Appointment).get(appointment_id) -Reassigned in: - File: Schedule/sched/app.py - > Line 76: form = AppointmentForm(request.form, appt) -File: Schedule/sched/app.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('appointment/edit.html',form=form) - - - -matmoody/Local-Weather -https://github.com/matmoody/Local-Weather -Entry file: None -Scanned: 2016-10-19 12:57:13.364183 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -salmanwahed/wecare -https://github.com/salmanwahed/wecare -Entry file: wecare/wecareapi.py -Scanned: 2016-10-19 12:57:17.386142 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: wecare/venv/lib/python2.7/genericpath.py - -altvec/glowing-hipster -https://github.com/altvec/glowing-hipster -Entry file: glowing-hipster/app/__init__.py -Scanned: 2016-10-19 12:57:18.783269 -No vulnerabilities found. - - -conanc2c/spelunkytracker -https://github.com/conanc2c/spelunkytracker -Entry file: spelunkytracker/spelunkytrack.py -Scanned: 2016-10-19 12:57:20.214379 -No vulnerabilities found. - - -delqn/text-ddg -https://github.com/delqn/text-ddg -Entry file: text-ddg/app.py -Scanned: 2016-10-19 12:57:21.996510 -No vulnerabilities found. - - -jdglover/homepage -https://github.com/jdglover/homepage -Entry file: None -Scanned: 2016-10-19 12:57:24.412950 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -balloonsys/newsapi -https://github.com/balloonsys/newsapi -Entry file: newsapi/app.py -Scanned: 2016-10-19 12:57:30.524131 -No vulnerabilities found. - - -michelsazevedo/koffe -https://github.com/michelsazevedo/koffe -Entry file: koffe/app/__init__.py -Scanned: 2016-10-19 12:57:33.140620 -No vulnerabilities found. - - -gabalese/isbn-checker -https://github.com/gabalese/isbn-checker -Entry file: isbn-checker/isbn-checker.py -Scanned: 2016-10-19 12:57:35.071851 -No vulnerabilities found. - - -kchudy/deploy_webhook -https://github.com/kchudy/deploy_webhook -Entry file: deploy_webhook/webhook.py -Scanned: 2016-10-19 12:57:37.028471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StudioQi/htpasswd-api -https://github.com/StudioQi/htpasswd-api -Entry file: htpasswd-api/app.py -Scanned: 2016-10-19 12:57:38.424967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brianfarris/simplelogin -https://github.com/brianfarris/simplelogin -Entry file: simplelogin/app/__init__.py -Scanned: 2016-10-19 12:57:40.097434 -Vulnerability 1: -File: simplelogin/app/frontend.py - > User input at line 48, trigger word "get(": - thisuser_request = SERVICE.people().get(userId='me') -File: simplelogin/app/frontend.py - > reaches line 49, trigger word "execute(": - thisuser = thisuser_request.execute(http=http) - - - -cgie/dline-srv -https://github.com/cgie/dline-srv -Entry file: dline-srv/app.py -Scanned: 2016-10-19 12:57:45.396704 -No vulnerabilities found. - - -brianfarris/simpleflask -https://github.com/brianfarris/simpleflask -Entry file: simpleflask/app/__init__.py -Scanned: 2016-10-19 12:57:47.025867 -No vulnerabilities found. - - -xmm/flask-restful-example -https://github.com/xmm/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-19 12:57:48.535364 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cff007/flask -https://github.com/cff007/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 12:57:50.142808 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -DanielSalgado/Flask -https://github.com/DanielSalgado/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 12:57:54.693282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/flask-geolocation -https://github.com/mjhea0/flask-geolocation -Entry file: flask-geolocation/run.py -Scanned: 2016-10-19 12:58:09.865354 -No vulnerabilities found. - - -fainle/sae_python_blog -https://github.com/fainle/sae_python_blog -Entry file: sae_python_blog/site-packages/flask/sessions.py -Scanned: 2016-10-19 12:58:12.698443 -No vulnerabilities found. - - -thisissoon/flask-template -https://github.com/thisissoon/flask-template -Entry file: None -Scanned: 2016-10-19 12:58:13.213909 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thisissoon/flask-template. - -jbrambleDC/flitterFlask -https://github.com/jbrambleDC/flitterFlask -Entry file: flitterFlask/flitter/app/__init__.py -Scanned: 2016-10-19 12:58:14.891438 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbr/Flask-Debug -https://github.com/mbr/Flask-Debug -Entry file: Flask-Debug/tests/test_client.py -Scanned: 2016-10-19 12:58:16.302433 -No vulnerabilities found. - - -morgan-del/flask-espresso -https://github.com/morgan-del/flask-espresso -Entry file: flask-espresso/setup.py -Scanned: 2016-10-19 12:58:17.834678 -No vulnerabilities found. - - -zyhazwraith/flaskr -https://github.com/zyhazwraith/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:58:18.353428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -frimmy/flaskr -https://github.com/frimmy/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 12:58:18.868582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shiflonium/BookBay -https://github.com/shiflonium/BookBay -Entry file: BookBay/app/__init__.py -Scanned: 2016-10-19 12:58:21.458719 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nfb-onf/nfbsearch-flask -https://github.com/nfb-onf/nfbsearch-flask -Entry file: nfbsearch-flask/nfbsearch_flask/nfbsearch_flask.py -Scanned: 2016-10-19 12:58:22.744392 -Vulnerability 1: -File: nfbsearch-flask/nfbsearch_flask/nfbsearch_flask.py - > User input at line 10, trigger word "get(": - query = request.args.get('q', None) -Reassigned in: - File: nfbsearch-flask/nfbsearch_flask/nfbsearch_flask.py - > Line 12: ret_MAYBE_FUNCTION_NAME = 'please provide a q parameter' -File: nfbsearch-flask/nfbsearch_flask/nfbsearch_flask.py - > reaches line 14, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(es.search(index='nfb_films', doc_type='films', body='query''bool''should''query_string''default_field''query''_all'query)) - - - -tkmallik/PythonFlask -https://github.com/tkmallik/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 12:58:29.761573 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ochen/flask-notification -https://github.com/ochen/flask-notification -Entry file: flask-notification/app/__init__.py -Scanned: 2016-10-19 12:58:33.226631 -Vulnerability 1: -File: flask-notification/app/views.py - > User input at line 43, trigger word ".data": - nickname = form.nickname.data -Reassigned in: - File: flask-notification/app/views.py - > Line 48: user = User(nickname=nickname, email=form.email.data, mobile=form.mobile.data, email_notification=form.email_notification.data, sms_notification=form.sms_notification.data, app_notification=form.app_notification.data) - File: flask-notification/app/views.py - > Line 44: user = User.query.filter_by(nickname=nickname).first() -File: flask-notification/app/views.py - > reaches line 55, trigger word "flash(": - flash('User {} added.'.format(nickname)) - -Vulnerability 2: -File: flask-notification/app/views.py - > User input at line 139, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask-notification/app/views.py - > Line 140: template = Template(name=name, email_subject=form.email_subject.data, email=form.email.data, sms=form.sms.data, app=form.app.data) - File: flask-notification/app/views.py - > Line 134: template = Template.query.filter_by(name=form.name.data).first() -File: flask-notification/app/views.py - > reaches line 144, trigger word "flash(": - flash('Template for notification type {} added.'.format(name)) - - - -tatiana/flask_api -https://github.com/tatiana/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 12:58:33.765567 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oceanboy2012/flask-dev -https://github.com/oceanboy2012/flask-dev -Entry file: flask-dev/app.py -Scanned: 2016-10-19 12:58:35.553175 -Vulnerability 1: -File: flask-dev/app.py - > User input at line 32, trigger word "get(": - a = request.args.get('a', 0,type=int) -File: flask-dev/app.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - -Vulnerability 2: -File: flask-dev/app.py - > User input at line 33, trigger word "get(": - b = request.args.get('b', 0,type=int) -File: flask-dev/app.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - - - -shuxiang/flask-sample -https://github.com/shuxiang/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 12:58:36.113583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaychoo/flask-baseapp -https://github.com/jaychoo/flask-baseapp -Entry file: None -Scanned: 2016-10-19 12:58:40.332204 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bearzk/flask-microblog -https://github.com/bearzk/flask-microblog -Entry file: None -Scanned: 2016-10-19 12:58:40.848025 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -claudyus/flask-sql -https://github.com/claudyus/flask-sql -Entry file: flask-sql/app.py -Scanned: 2016-10-19 12:58:42.609162 -No vulnerabilities found. - - -tsnaomi/flask_microblog -https://github.com/tsnaomi/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 12:58:43.143810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jwhite007/Flask-Microblog -https://github.com/jwhite007/Flask-Microblog -Entry file: Flask-Microblog/microblog_package/app/__init__.py -Scanned: 2016-10-19 12:58:44.586789 -No vulnerabilities found. - - -gszpura/flask-ratelimiter -https://github.com/gszpura/flask-ratelimiter -Entry file: flask-ratelimiter/tests/helpers.py -Scanned: 2016-10-19 12:58:46.056112 -No vulnerabilities found. - - -crimsoneer/FlaskQueueManager -https://github.com/crimsoneer/FlaskQueueManager -Entry file: FlaskQueueManager/app/__init__.py -Scanned: 2016-10-19 12:58:47.504873 -Vulnerability 1: -File: FlaskQueueManager/app/views.py - > User input at line 84, trigger word "get(": - user = request.args.get('user') -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 85: role = User.query.get(user).role - File: FlaskQueueManager/app/views.py - > Line 77: ret_MAYBE_FUNCTION_NAME = redirect('') -File: FlaskQueueManager/app/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_user.html',form=form, user=user, anonymous=current_user.is_anonymous(), role=role, role_label=role_label, current_user=current_user, is_admin=is_admin) - -Vulnerability 2: -File: FlaskQueueManager/app/views.py - > User input at line 85, trigger word "get(": - role = User.query.get(user).role -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 77: ret_MAYBE_FUNCTION_NAME = redirect('') -File: FlaskQueueManager/app/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit_user.html',form=form, user=user, anonymous=current_user.is_anonymous(), role=role, role_label=role_label, current_user=current_user, is_admin=is_admin) - -Vulnerability 3: -File: FlaskQueueManager/app/views.py - > User input at line 239, trigger word "get(": - previous_task = Task.query.get(previous_no) -Reassigned in: - File: FlaskQueueManager/app/views.py - > Line 240: start_hour = str(previous_task.end_hour) - File: FlaskQueueManager/app/views.py - > Line 242: start_hour = '0' + start_hour - File: FlaskQueueManager/app/views.py - > Line 243: start_minute = str(previous_task.end_minute) - File: FlaskQueueManager/app/views.py - > Line 245: start_minute = '0' + start_minute - File: FlaskQueueManager/app/views.py - > Line 230: start_hour = 0 - File: FlaskQueueManager/app/views.py - > Line 231: start_minute = 0 -File: FlaskQueueManager/app/views.py - > reaches line 266, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title='Home', task_no=task_no, task_no_type=task_no_type, form=form, task_types=task_types_dict, current_user=current_user, is_admin=is_admin, anonymous=current_user.is_anonymous(), tasks=tasks, start_hour=start_hour, start_minute=start_minute) - - - -kevinchenxyz/Flask_mongodb_CRUD -https://github.com/kevinchenxyz/Flask_mongodb_CRUD -Entry file: Flask_mongodb_CRUD/app/__init__.py -Scanned: 2016-10-19 12:58:48.893423 -No vulnerabilities found. - - -rebill/flask-zmq-demo -https://github.com/rebill/flask-zmq-demo -Entry file: flask-zmq-demo/web/demo.py -Scanned: 2016-10-19 12:58:50.214349 -No vulnerabilities found. - - -ToxicWar/Flask-SocketIO-Test -https://github.com/ToxicWar/Flask-SocketIO-Test -Entry file: Flask-SocketIO-Test/server.py -Scanned: 2016-10-19 12:58:51.537528 -No vulnerabilities found. - - -olegarioca/BDD-Behave-Flask -https://github.com/olegarioca/BDD-Behave-Flask -Entry file: BDD-Behave-Flask/app.py -Scanned: 2016-10-19 12:58:52.945137 -Vulnerability 1: -File: BDD-Behave-Flask/app.py - > User input at line 12, trigger word "form[": - meal_cost = int(request.form['meal_cost']) -Reassigned in: - File: BDD-Behave-Flask/app.py - > Line 14: tip_cost = int(meal_cost) * int(tip_percentage) * 0.01 - File: BDD-Behave-Flask/app.py - > Line 23: ret_MAYBE_FUNCTION_NAME = render_template('home.html',again=try_again) - File: BDD-Behave-Flask/app.py - > Line 17: ret_MAYBE_FUNCTION_NAME = render_template('home.html',again=try_again) -File: BDD-Behave-Flask/app.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',meal_cost=meal_cost, tip_percentage=tip_percentage, tip_cost=tip_cost) - -Vulnerability 2: -File: BDD-Behave-Flask/app.py - > User input at line 13, trigger word "form[": - tip_percentage = int(request.form['tip_percentage']) -Reassigned in: - File: BDD-Behave-Flask/app.py - > Line 14: tip_cost = int(meal_cost) * int(tip_percentage) * 0.01 - File: BDD-Behave-Flask/app.py - > Line 23: ret_MAYBE_FUNCTION_NAME = render_template('home.html',again=try_again) - File: BDD-Behave-Flask/app.py - > Line 17: ret_MAYBE_FUNCTION_NAME = render_template('home.html',again=try_again) -File: BDD-Behave-Flask/app.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',meal_cost=meal_cost, tip_percentage=tip_percentage, tip_cost=tip_cost) - - - -kevinchenxyz/Flask_unit_test -https://github.com/kevinchenxyz/Flask_unit_test -Entry file: Flask_unit_test/Flask_openid/app/__init__.py -Scanned: 2016-10-19 12:58:54.333508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Graham42/flask-prototype-base -https://github.com/Graham42/flask-prototype-base -Entry file: flask-prototype-base/app_name/__init__.py -Scanned: 2016-10-19 12:58:56.651858 -No vulnerabilities found. - - -shbhrsaha/flask-heroku-boilerplate -https://github.com/shbhrsaha/flask-heroku-boilerplate -Entry file: flask-heroku-boilerplate/app.py -Scanned: 2016-10-19 12:59:01.003763 -No vulnerabilities found. - - -fixxxerTachi/blog_flaskr -https://github.com/fixxxerTachi/blog_flaskr -Entry file: None -Scanned: 2016-10-19 12:59:12.465190 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fixxxerTachi/blog_flaskr. - -todo1991/doanpython -https://github.com/todo1991/doanpython -Entry file: doanpython/app/__init__.py -Scanned: 2016-10-19 12:59:15.833279 -Vulnerability 1: -File: doanpython/app/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: doanpython/app/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = error - File: doanpython/app/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: doanpython/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: doanpython/app/views.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 2: -File: doanpython/app/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: doanpython/app/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = error - File: doanpython/app/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: doanpython/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: doanpython/app/views.py - > reaches line 44, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(page)) - -Vulnerability 3: -File: doanpython/app/views.py - > User input at line 47, trigger word "form[": - username = request.form['user'] -File: doanpython/app/views.py - > reaches line 50, trigger word "execute(": - cursor.execute('SELECT * from user where username='' + username + '' and password='' + password + '' ') - -Vulnerability 4: -File: doanpython/app/views.py - > User input at line 48, trigger word "form[": - password = request.form['pass'] -File: doanpython/app/views.py - > reaches line 50, trigger word "execute(": - cursor.execute('SELECT * from user where username='' + username + '' and password='' + password + '' ') - -Vulnerability 5: -File: doanpython/app/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 'index') -Reassigned in: - File: doanpython/app/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = error - File: doanpython/app/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: doanpython/app/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: doanpython/app/views.py - > reaches line 58, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',error=error, page=page) - - - -tmblweed/Blog -https://github.com/tmblweed/Blog -Entry file: Blog/flaskr.py -Scanned: 2016-10-19 12:59:17.184689 -No vulnerabilities found. - - -dcrn/restcal -https://github.com/dcrn/restcal -Entry file: restcal/restcal.py -Scanned: 2016-10-19 12:59:18.621585 -No vulnerabilities found. - - -lavriv92/blog_f -https://github.com/lavriv92/blog_f -Entry file: blog_f/application/__init__.py -Scanned: 2016-10-19 12:59:20.365153 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryan-lane/together-video -https://github.com/ryan-lane/together-video -Entry file: together-video/tv/__init__.py -Scanned: 2016-10-19 12:59:23.850058 -No vulnerabilities found. - - -zyhazwraith/quick -https://github.com/zyhazwraith/quick -Entry file: quick/application.py -Scanned: 2016-10-19 12:59:26.512191 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregimba/WhoRu -https://github.com/gregimba/WhoRu -Entry file: WhoRu/app.py -Scanned: 2016-10-19 12:59:27.733577 -Vulnerability 1: -File: WhoRu/app.py - > User input at line 18, trigger word "form[": - email = ark.email(request.form['email']) -Reassigned in: - File: WhoRu/app.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('person.html',data=twitter) - File: WhoRu/app.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: WhoRu/app.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('person.html',data=email) - -Vulnerability 2: -File: WhoRu/app.py - > User input at line 24, trigger word "form[": - twitter = ark.twitter(request.form['handle']) -Reassigned in: - File: WhoRu/app.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: WhoRu/app.py - > Line 21: ret_MAYBE_FUNCTION_NAME = render_template('person.html',data=email) -File: WhoRu/app.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('person.html',data=twitter) - - - -brianfarris/simplelogin-form-db -https://github.com/brianfarris/simplelogin-form-db -Entry file: simplelogin-form-db/app/__init__.py -Scanned: 2016-10-19 12:59:34.775475 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vickyi/microblog -https://github.com/vickyi/microblog -Entry file: None -Scanned: 2016-10-19 12:59:35.306978 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -salmanwahed/wecare -https://github.com/salmanwahed/wecare -Entry file: wecare/wecareapi.py -Scanned: 2016-10-19 12:59:37.949853 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: wecare/venv/lib/python2.7/genericpath.py - -Albertorio/tweetBot -https://github.com/Albertorio/tweetBot -Entry file: tweetBot/app.py -Scanned: 2016-10-19 12:59:39.325871 -Vulnerability 1: -File: tweetBot/app.py - > User input at line 16, trigger word "form[": - newtweet = 'id''text'randint(0, 256)request_form['tweet'] -Reassigned in: - File: tweetBot/app.py - > Line 22: ret_MAYBE_FUNCTION_NAME = jsonify('tweets'tweets) -File: tweetBot/app.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(newtweet) - - - -aguegu/lunchorder -https://github.com/aguegu/lunchorder -Entry file: lunchorder/app/__init__.py -Scanned: 2016-10-19 12:59:42.976683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richstoner/image_review -https://github.com/richstoner/image_review -Entry file: image_review/app/app.py -Scanned: 2016-10-19 12:59:45.660094 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CodeNowOrg/student_registration -https://github.com/CodeNowOrg/student_registration -Entry file: student_registration/main.py -Scanned: 2016-10-19 12:59:47.476464 -No vulnerabilities found. - - -jorgen99/smarthus -https://github.com/jorgen99/smarthus -Entry file: smarthus/smarthus.py -Scanned: 2016-10-19 12:59:48.784710 -No vulnerabilities found. - - -paddycarey/speelchecker -https://github.com/paddycarey/speelchecker -Entry file: speelchecker/app.py -Scanned: 2016-10-19 12:59:50.071219 -Vulnerability 1: -File: speelchecker/app.py - > User input at line 28, trigger word "get(": - text = request.args.get('text', '') -Reassigned in: - File: speelchecker/app.py - > Line 29: text = TextBlob(text) -File: speelchecker/app.py - > reaches line 30, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(text=unicode(text.correct())) - - - -balloonsys/newsapi -https://github.com/balloonsys/newsapi -Entry file: newsapi/app.py -Scanned: 2016-10-19 12:59:56.185369 -No vulnerabilities found. - - -thisissoon/pravis -https://github.com/thisissoon/pravis -Entry file: pravis/pravis/app.py -Scanned: 2016-10-19 12:59:57.853641 -No vulnerabilities found. - - -trigunshin/interview_questions -https://github.com/trigunshin/interview_questions -Entry file: interview_questions/app.py -Scanned: 2016-10-19 12:59:59.150710 -No vulnerabilities found. - - -gabalese/isbn-checker -https://github.com/gabalese/isbn-checker -Entry file: isbn-checker/isbn-checker.py -Scanned: 2016-10-19 13:00:00.569491 -No vulnerabilities found. - - -j-burgos/musiclib -https://github.com/j-burgos/musiclib -Entry file: musiclib/musiclib.py -Scanned: 2016-10-19 13:00:02.112030 -No vulnerabilities found. - - -dedalusj/ECIdenticon -https://github.com/dedalusj/ECIdenticon -Entry file: ECIdenticon/ECIdenticon.py -Scanned: 2016-10-19 13:00:03.789664 -No vulnerabilities found. - - -vrk7bp/OneDir -https://github.com/vrk7bp/OneDir -Entry file: OneDir/Flask.py -Scanned: 2016-10-19 13:00:05.342413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bouncer-app/flask-bouncer -https://github.com/bouncer-app/flask-bouncer -Entry file: flask-bouncer/test_flask_bouncer/test_base.py -Scanned: 2016-10-19 13:00:08.183612 -No vulnerabilities found. - - -googlearchive/appengine-try-python-flask -https://github.com/googlearchive/appengine-try-python-flask -Entry file: appengine-try-python-flask/main.py -Scanned: 2016-10-19 13:00:14.469237 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sixu05202004/async-flask-sqlalchemy-postgresql -https://github.com/sixu05202004/async-flask-sqlalchemy-postgresql -Entry file: async-flask-sqlalchemy-postgresql/app.py -Scanned: 2016-10-19 13:00:16.796399 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -inveniosoftware-attic/flask-ratelimiter -https://github.com/inveniosoftware-attic/flask-ratelimiter -Entry file: flask-ratelimiter/examples/simple/app.py -Scanned: 2016-10-19 13:00:19.263587 -No vulnerabilities found. - - -thisissoon/flask-template -https://github.com/thisissoon/flask-template -Entry file: None -Scanned: 2016-10-19 13:00:20.245090 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thisissoon/flask-template. - -iiSeymour/flasked-vincent -https://github.com/iiSeymour/flasked-vincent -Entry file: flasked-vincent/app.py -Scanned: 2016-10-19 13:00:23.635002 -No vulnerabilities found. - - -ellisonleao/flask-mistune -https://github.com/ellisonleao/flask-mistune -Entry file: flask-mistune/tests.py -Scanned: 2016-10-19 13:00:26.884693 -No vulnerabilities found. - - -stfp/flask-presst -https://github.com/stfp/flask-presst -Entry file: flask-presst/examples/quickstart_api_resource_method.py -Scanned: 2016-10-19 13:00:28.474520 -No vulnerabilities found. - - -SaintDako/nginx-flask -https://github.com/SaintDako/nginx-flask -Entry file: nginx-flask/domainBscript.py -Scanned: 2016-10-19 13:00:29.747067 -No vulnerabilities found. - - -mbr/Flask-Debug -https://github.com/mbr/Flask-Debug -Entry file: Flask-Debug/tests/test_client.py -Scanned: 2016-10-19 13:00:31.964672 -No vulnerabilities found. - - -zyhazwraith/flaskr -https://github.com/zyhazwraith/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:00:32.478948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davenportw15/FlaskPost -https://github.com/davenportw15/FlaskPost -Entry file: FlaskPost/application.py -Scanned: 2016-10-19 13:00:37.457037 -No vulnerabilities found. - - -Jpadilla1/flask-site -https://github.com/Jpadilla1/flask-site -Entry file: None -Scanned: 2016-10-19 13:00:38.023080 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -oceanboy2012/flask-dev -https://github.com/oceanboy2012/flask-dev -Entry file: flask-dev/app.py -Scanned: 2016-10-19 13:00:40.325553 -Vulnerability 1: -File: flask-dev/app.py - > User input at line 32, trigger word "get(": - a = request.args.get('a', 0,type=int) -File: flask-dev/app.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - -Vulnerability 2: -File: flask-dev/app.py - > User input at line 33, trigger word "get(": - b = request.args.get('b', 0,type=int) -File: flask-dev/app.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=a + b) - - - -ochen/flask-notification -https://github.com/ochen/flask-notification -Entry file: flask-notification/app/__init__.py -Scanned: 2016-10-19 13:00:41.773718 -Vulnerability 1: -File: flask-notification/app/views.py - > User input at line 43, trigger word ".data": - nickname = form.nickname.data -Reassigned in: - File: flask-notification/app/views.py - > Line 48: user = User(nickname=nickname, email=form.email.data, mobile=form.mobile.data, email_notification=form.email_notification.data, sms_notification=form.sms_notification.data, app_notification=form.app_notification.data) - File: flask-notification/app/views.py - > Line 44: user = User.query.filter_by(nickname=nickname).first() -File: flask-notification/app/views.py - > reaches line 55, trigger word "flash(": - flash('User {} added.'.format(nickname)) - -Vulnerability 2: -File: flask-notification/app/views.py - > User input at line 139, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask-notification/app/views.py - > Line 140: template = Template(name=name, email_subject=form.email_subject.data, email=form.email.data, sms=form.sms.data, app=form.app.data) - File: flask-notification/app/views.py - > Line 134: template = Template.query.filter_by(name=form.name.data).first() -File: flask-notification/app/views.py - > reaches line 144, trigger word "flash(": - flash('Template for notification type {} added.'.format(name)) - - - -jaychoo/flask-baseapp -https://github.com/jaychoo/flask-baseapp -Entry file: None -Scanned: 2016-10-19 13:00:43.296608 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bearzk/flask-microblog -https://github.com/bearzk/flask-microblog -Entry file: None -Scanned: 2016-10-19 13:00:47.273663 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rsj217/dtapi-flask -https://github.com/rsj217/dtapi-flask -Entry file: dtapi-flask/dtapi/api/__init__.py -Scanned: 2016-10-19 13:00:51.068367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -im-auld/simple_flask -https://github.com/im-auld/simple_flask -Entry file: simple_flask/simple_flask.py -Scanned: 2016-10-19 13:00:52.673604 -No vulnerabilities found. - - -BlaXpirit/flask-simplesqla -https://github.com/BlaXpirit/flask-simplesqla -Entry file: None -Scanned: 2016-10-19 13:00:54.020482 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/BlaXpirit/flask-simplesqla. - -claudyus/flask-sql -https://github.com/claudyus/flask-sql -Entry file: flask-sql/app.py -Scanned: 2016-10-19 13:00:59.323778 -No vulnerabilities found. - - -sunilgopinath/flask_experiments -https://github.com/sunilgopinath/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-19 13:00:59.839934 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -j-burgos/ejemplo-flask -https://github.com/j-burgos/ejemplo-flask -Entry file: ejemplo-flask/app.py -Scanned: 2016-10-19 13:01:05.691314 -No vulnerabilities found. - - -brijeshb42/flask-app -https://github.com/brijeshb42/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-19 13:01:06.200246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ffeast/flask-dbshell -https://github.com/ffeast/flask-dbshell -Entry file: flask-dbshell/example/manage.py -Scanned: 2016-10-19 13:01:08.420254 -No vulnerabilities found. - - -codebynumbers/flask-base-project -https://github.com/codebynumbers/flask-base-project -Entry file: flask-base-project/dashboard/server/app.py -Scanned: 2016-10-19 13:01:15.249585 -No vulnerabilities found. - - -andriy-kulish/flask-book-library -https://github.com/andriy-kulish/flask-book-library -Entry file: flask-book-library/app/__init__.py -Scanned: 2016-10-19 13:01:18.946538 -Vulnerability 1: -File: flask-book-library/app/views.py - > User input at line 50, trigger word "get(": - book = db_session.query(Book).get(id) -Reassigned in: - File: flask-book-library/app/views.py - > Line 51: book_form = BookForm(request.form,obj=book) - File: flask-book-library/app/views.py - > Line 55: book = db_session.query(Book).get(id) - File: flask-book-library/app/views.py - > Line 56: book.title = book_form.title.data - File: flask-book-library/app/views.py - > Line 57: book.authors = [db_session.query(Author).get(o) for o in book_form.authors.data] - File: flask-book-library/app/views.py - > Line 62: book_form.authors.data = [p.id for p in book.authors] - File: flask-book-library/app/views.py - > Line 60: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-book-library/app/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',bform=book_form, form=form, book=book, user=current_user, is_authenticated=True) - -Vulnerability 2: -File: flask-book-library/app/views.py - > User input at line 55, trigger word "get(": - book = db_session.query(Book).get(id) -Reassigned in: - File: flask-book-library/app/views.py - > Line 50: book = db_session.query(Book).get(id) - File: flask-book-library/app/views.py - > Line 51: book_form = BookForm(request.form,obj=book) - File: flask-book-library/app/views.py - > Line 56: book.title = book_form.title.data - File: flask-book-library/app/views.py - > Line 57: book.authors = [db_session.query(Author).get(o) for o in book_form.authors.data] - File: flask-book-library/app/views.py - > Line 62: book_form.authors.data = [p.id for p in book.authors] - File: flask-book-library/app/views.py - > Line 60: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-book-library/app/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',bform=book_form, form=form, book=book, user=current_user, is_authenticated=True) - -Vulnerability 3: -File: flask-book-library/app/views.py - > User input at line 100, trigger word "get(": - author = db_session.query(Author).get(id) -Reassigned in: - File: flask-book-library/app/views.py - > Line 101: author_form = AuthorForm(request.form,obj=author) - File: flask-book-library/app/views.py - > Line 105: author = db_session.query(Author).get(id) - File: flask-book-library/app/views.py - > Line 106: author.name = author_form.name.data - File: flask-book-library/app/views.py - > Line 107: author.books = [db_session.query(Book).get(o) for o in author_form.books.data] - File: flask-book-library/app/views.py - > Line 112: author_form.books.data = [p.id for p in author.books] - File: flask-book-library/app/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-book-library/app/views.py - > reaches line 113, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('author.html',bform=author_form, form=form, author=author, user=current_user, is_authenticated=True) - -Vulnerability 4: -File: flask-book-library/app/views.py - > User input at line 105, trigger word "get(": - author = db_session.query(Author).get(id) -Reassigned in: - File: flask-book-library/app/views.py - > Line 100: author = db_session.query(Author).get(id) - File: flask-book-library/app/views.py - > Line 101: author_form = AuthorForm(request.form,obj=author) - File: flask-book-library/app/views.py - > Line 106: author.name = author_form.name.data - File: flask-book-library/app/views.py - > Line 107: author.books = [db_session.query(Book).get(o) for o in author_form.books.data] - File: flask-book-library/app/views.py - > Line 112: author_form.books.data = [p.id for p in author.books] - File: flask-book-library/app/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-book-library/app/views.py - > reaches line 113, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('author.html',bform=author_form, form=form, author=author, user=current_user, is_authenticated=True) - - - -ararog/TodoOnFlask -https://github.com/ararog/TodoOnFlask -Entry file: TodoOnFlask/todo.py -Scanned: 2016-10-19 13:01:20.228427 -No vulnerabilities found. - - -leoleozhu/flask_gfwlist2pac -https://github.com/leoleozhu/flask_gfwlist2pac -Entry file: flask_gfwlist2pac/examples/heroku/app.py -Scanned: 2016-10-19 13:01:23.098287 -No vulnerabilities found. - - -x/Simple-Flask-Guest-Book -https://github.com/x/Simple-Flask-Guest-Book -Entry file: Simple-Flask-Guest-Book/app.py -Scanned: 2016-10-19 13:01:25.376840 -No vulnerabilities found. - - -Graham42/flask-prototype-base -https://github.com/Graham42/flask-prototype-base -Entry file: flask-prototype-base/app_name/__init__.py -Scanned: 2016-10-19 13:01:28.627057 -No vulnerabilities found. - - -bskari/libraries-cache-flask -https://github.com/bskari/libraries-cache-flask -Entry file: libraries-cache-flask/libraries_cache.py -Scanned: 2016-10-19 13:01:29.925128 -No vulnerabilities found. - - -hmdavis/flask-mega-tutorial -https://github.com/hmdavis/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:01:30.440253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -basilleaf/base_flask_redis_app -https://github.com/basilleaf/base_flask_redis_app -Entry file: base_flask_redis_app/hello.py -Scanned: 2016-10-19 13:01:33.122519 -No vulnerabilities found. - - -sudaraka/flask-form-demo -https://github.com/sudaraka/flask-form-demo -Entry file: flask-form-demo/manage.py -Scanned: 2016-10-19 13:01:35.710273 -No vulnerabilities found. - - -Third9/flask-login_test -https://github.com/Third9/flask-login_test -Entry file: flask-login_test/login.py -Scanned: 2016-10-19 13:01:37.305401 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rileonard15/python-gae-flask-classy -https://github.com/rileonard15/python-gae-flask-classy -Entry file: python-gae-flask-classy/main.py -Scanned: 2016-10-19 13:01:39.549978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fixxxerTachi/blog_flaskr -https://github.com/fixxxerTachi/blog_flaskr -Entry file: None -Scanned: 2016-10-19 13:01:40.112343 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fixxxerTachi/blog_flaskr. - -ras3638/FinalBoss -https://github.com/ras3638/FinalBoss -Entry file: FinalBoss/ToDo-List/__init__.py -Scanned: 2016-10-19 13:01:41.808026 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dcrn/restcal -https://github.com/dcrn/restcal -Entry file: restcal/restcal.py -Scanned: 2016-10-19 13:01:43.245517 -No vulnerabilities found. - - -asserchiu/RESTful-example-in-pure-Flask -https://github.com/asserchiu/RESTful-example-in-pure-Flask -Entry file: RESTful-example-in-pure-Flask/app/__init__.py -Scanned: 2016-10-19 13:01:49.613907 -No vulnerabilities found. - - -jettagozoom/microblog -https://github.com/jettagozoom/microblog -Entry file: None -Scanned: 2016-10-19 13:01:51.137538 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JPWKU/microblog -https://github.com/JPWKU/microblog -Entry file: None -Scanned: 2016-10-19 13:01:52.634966 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arloft/Flaskapp-Microblog-Tutorial -https://github.com/arloft/Flaskapp-Microblog-Tutorial -Entry file: None -Scanned: 2016-10-19 13:01:59.975617 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aguegu/lunchorder -https://github.com/aguegu/lunchorder -Entry file: lunchorder/app/__init__.py -Scanned: 2016-10-19 13:02:00.943405 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanprater/weight_tracker -https://github.com/ryanprater/weight_tracker -Entry file: weight_tracker/weighttracker.py -Scanned: 2016-10-19 13:02:03.244716 -No vulnerabilities found. - - -lolyzor/pushnotifications-server -https://github.com/lolyzor/pushnotifications-server -Entry file: pushnotifications-server/main.py -Scanned: 2016-10-19 13:02:05.877173 -No vulnerabilities found. - - -irdan/valorem-vis -https://github.com/irdan/valorem-vis -Entry file: valorem-vis/valoremvis/main.py -Scanned: 2016-10-19 13:02:07.590488 -Vulnerability 1: -File: valorem-vis/valoremvis/main.py - > User input at line 15, trigger word "get(": - value = app.config['CACHE'].get(key) -Reassigned in: - File: valorem-vis/valoremvis/main.py - > Line 21: ret_MAYBE_FUNCTION_NAME = jsonify('success'True) -File: valorem-vis/valoremvis/main.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('value'value) - - - -aaronroe/vid2gifweb -https://github.com/aaronroe/vid2gifweb -Entry file: vid2gifweb/vid2gifweb.py -Scanned: 2016-10-19 13:02:10.392385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -distortedsignal/python-sample -https://github.com/distortedsignal/python-sample -Entry file: python-sample/hello.py -Scanned: 2016-10-19 13:02:11.686954 -No vulnerabilities found. - - -rnowling/py-notes -https://github.com/rnowling/py-notes -Entry file: py-notes/py-notes/py-notes.py -Scanned: 2016-10-19 13:02:20.596185 -No vulnerabilities found. - - -cswank/hello-candidate -https://github.com/cswank/hello-candidate -Entry file: hello-candidate/hello/app.py -Scanned: 2016-10-19 13:02:22.015465 -No vulnerabilities found. - - -tottaz/Basic-Python-RESTful-Server -https://github.com/tottaz/Basic-Python-RESTful-Server -Entry file: None -Scanned: 2016-10-19 13:02:26.503083 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mjp2220/PlanMyNY-Backend -https://github.com/mjp2220/PlanMyNY-Backend -Entry file: PlanMyNY-Backend/__init__.py -Scanned: 2016-10-19 13:02:27.854299 -No vulnerabilities found. - - -JoeOBrien/tvLinks -https://github.com/JoeOBrien/tvLinks -Entry file: tvLinks/routes.py -Scanned: 2016-10-19 13:02:29.256163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igleyy/rabbit-eats-python -https://github.com/igleyy/rabbit-eats-python -Entry file: rabbit-eats-python/api/app.py -Scanned: 2016-10-19 13:02:31.694761 -No vulnerabilities found. - - -cameronbwhite/Flask-CAS -https://github.com/cameronbwhite/Flask-CAS -Entry file: Flask-CAS/setup.py -Scanned: 2016-10-19 13:02:34.449094 -No vulnerabilities found. - - -ejkul/flask -https://github.com/ejkul/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:02:41.590578 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -miguelgrinberg/api-pycon2014 -https://github.com/miguelgrinberg/api-pycon2014 -Entry file: api-pycon2014/api/app.py -Scanned: 2016-10-19 13:02:43.018651 -No vulnerabilities found. - - -iiSeymour/flasked-vincent -https://github.com/iiSeymour/flasked-vincent -Entry file: flasked-vincent/app.py -Scanned: 2016-10-19 13:02:44.490374 -No vulnerabilities found. - - -timeartist/flask_chutes -https://github.com/timeartist/flask_chutes -Entry file: flask_chutes/example/__init__.py -Scanned: 2016-10-19 13:02:48.401953 -No vulnerabilities found. - - -ltanady/flasktask -https://github.com/ltanady/flasktask -Entry file: flasktask/client.py -Scanned: 2016-10-19 13:02:53.120500 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pahaz/FaceMash-flask -https://github.com/pahaz/FaceMash-flask -Entry file: FaceMash-flask/_old/f_mash.py -Scanned: 2016-10-19 13:02:55.150593 -Vulnerability 1: -File: FaceMash-flask/_old/f_mash.py - > User input at line 87, trigger word "form[": - win_id = request.form['win_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 88, trigger word "execute(": - cur = db.execute('select elo, times from users where id = %s' % win_id) - -Vulnerability 2: -File: FaceMash-flask/_old/f_mash.py - > User input at line 91, trigger word "form[": - lose_id = request.form['lose_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 88, trigger word "execute(": - cur = db.execute('select elo, times from users where id = %s' % win_id) - -Vulnerability 3: -File: FaceMash-flask/_old/f_mash.py - > User input at line 87, trigger word "form[": - win_id = request.form['win_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 92, trigger word "execute(": - cur = db.execute('select elo, times from users where id = %s' % lose_id) - -Vulnerability 4: -File: FaceMash-flask/_old/f_mash.py - > User input at line 91, trigger word "form[": - lose_id = request.form['lose_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 92, trigger word "execute(": - cur = db.execute('select elo, times from users where id = %s' % lose_id) - -Vulnerability 5: -File: FaceMash-flask/_old/f_mash.py - > User input at line 87, trigger word "form[": - win_id = request.form['win_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 101, trigger word "execute(": - db.execute('update users set elo = %f, times = %d where id = %s' % (win_elo, int(win_times) + 1, win_id)) - -Vulnerability 6: -File: FaceMash-flask/_old/f_mash.py - > User input at line 91, trigger word "form[": - lose_id = request.form['lose_id'] -File: FaceMash-flask/_old/f_mash.py - > reaches line 102, trigger word "execute(": - db.execute('update users set elo = %f, times = %s where id = %s' % (lose_elo, lose_times, lose_id)) - - - -masud/flaskblog -https://github.com/masud/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 13:02:56.713731 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -yuchixing/flaskApp -https://github.com/yuchixing/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-19 13:03:03.043247 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcardillo55/unfriended-flask -https://github.com/mcardillo55/unfriended-flask -Entry file: unfriended-flask/unfriended-flask/app.py -Scanned: 2016-10-19 13:03:04.964014 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bVector/bribe-flask -https://github.com/bVector/bribe-flask -Entry file: bribe-flask/wsgi/bribe.py -Scanned: 2016-10-19 13:03:09.030743 -No vulnerabilities found. - - -rmar89/gae-flask -https://github.com/rmar89/gae-flask -Entry file: gae-flask/main.py -Scanned: 2016-10-19 13:03:11.289360 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -rsj217/dtapi-flask -https://github.com/rsj217/dtapi-flask -Entry file: dtapi-flask/dtapi/api/__init__.py -Scanned: 2016-10-19 13:03:11.799928 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alpaca/flask-template -https://github.com/alpaca/flask-template -Entry file: None -Scanned: 2016-10-19 13:03:12.790985 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alpaca/flask-template. - -saml/flask_contentnego -https://github.com/saml/flask_contentnego -Entry file: flask_contentnego/app.py -Scanned: 2016-10-19 13:03:18.132857 -Vulnerability 1: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 2: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 3: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 84, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 4: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 84, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 5: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 6: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 7: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 112, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 8: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 112, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 9: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 10: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 11: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 12: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 13: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 14: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 15: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 16: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 17: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 18: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 19: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - -Vulnerability 20: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - -Vulnerability 21: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - - - -jlock6/Flask_Practice -https://github.com/jlock6/Flask_Practice -Entry file: Flask_Practice/hello.py -Scanned: 2016-10-19 13:03:22.469423 -No vulnerabilities found. - - -digaxfr/dhcpd-flask -https://github.com/digaxfr/dhcpd-flask -Entry file: None -Scanned: 2016-10-19 13:03:23.745454 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/digaxfr/dhcpd-flask. - -necavi/flask-test -https://github.com/necavi/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-19 13:03:25.277751 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -ffeast/flask-dbshell -https://github.com/ffeast/flask-dbshell -Entry file: flask-dbshell/example/manage.py -Scanned: 2016-10-19 13:03:31.958829 -No vulnerabilities found. - - -blastokid/Barebone-Flask-Template -https://github.com/blastokid/Barebone-Flask-Template -Entry file: Barebone-Flask-Template/app.py -Scanned: 2016-10-19 13:03:33.743754 -No vulnerabilities found. - - -davedg629/RedditRatings -https://github.com/davedg629/RedditRatings -Entry file: RedditRatings/app/__init__.py -Scanned: 2016-10-19 13:03:35.557510 -Vulnerability 1: -File: RedditRatings/app/views.py - > User input at line 132, trigger word "get(": - code = request.args.get('code', '') -Reassigned in: - File: RedditRatings/app/views.py - > Line 133: access_info = r.get_access_information(code) - File: RedditRatings/app/views.py - > Line 139: user = User(username=user_reddit.name, role_id=2, refresh_token=access_info['refresh_token']) - File: RedditRatings/app/views.py - > Line 147: user.refresh_token = access_info['refresh_token'] - File: RedditRatings/app/views.py - > Line 135: user = db.session.query(User).filter_by(username=user_reddit.name).first() -File: RedditRatings/app/views.py - > reaches line 150, trigger word "flash(": - flash('Hi ' + user.username + '! You have successfully' + ' logged in with your reddit account.') - -Vulnerability 2: -File: RedditRatings/app/views.py - > User input at line 391, trigger word ".data": - reddit_post = r.submit(form.subreddit.data, '[Community Rating] ' + form.reddit_title.data, reddit_body(form.description.data, form.title.data)) -Reassigned in: - File: RedditRatings/app/views.py - > Line 387: reddit_post = None - File: RedditRatings/app/views.py - > Line 401: new_thread = Thread(user_id=g.user.id, title=form.title.data, slug=make_slug(form.title.data), category_id=form.category.data, reddit_id=reddit_post.id, reddit_permalink=reddit_post.permalink, subreddit=form.subreddit.data, date_posted=datetime.now(), open_for_comments=True, last_crawl=datetime.now()) - File: RedditRatings/app/views.py - > Line 415: success_message = Markup('Your rating thread has been posted to reddit here.') - File: RedditRatings/app/views.py - > Line 455: new_thread = Thread(user_id=g.user.id, title=form.title.data, category_id=form.category.data, subreddit=form.subreddit.data, date_posted=datetime.now(), open_for_comments=True) -File: RedditRatings/app/views.py - > reaches line 421, trigger word "flash(": - flash(success_message) - -Vulnerability 3: -File: RedditRatings/app/views.py - > User input at line 415, trigger word "Markup(": - success_message = Markup('Your rating thread has been posted to reddit here.') -File: RedditRatings/app/views.py - > reaches line 421, trigger word "flash(": - flash(success_message) - -Vulnerability 4: -File: RedditRatings/app/views.py - > User input at line 467, trigger word ".data": - this_thread = db.session.query(Thread).filter_by(category_id=form.category.data).filter_by(title=form.title.data).first() -Reassigned in: - File: RedditRatings/app/views.py - > Line 423: this_thread = db.session.query(Thread).filter_by(reddit_id=reddit_post.id).first() - File: RedditRatings/app/views.py - > Line 479: ret_MAYBE_FUNCTION_NAME = render_template('create_thread.html',title='Create a Community Rating on reddit', page_title='Create a Community Rating on reddit', form=form) - File: RedditRatings/app/views.py - > Line 375: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: RedditRatings/app/views.py - > reaches line 427, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('thread',category_slug=this_thread.category.slug, thread_slug=this_thread.slug, thread_id=this_thread.id)) - -Vulnerability 5: -File: RedditRatings/app/views.py - > User input at line 467, trigger word ".data": - this_thread = db.session.query(Thread).filter_by(category_id=form.category.data).filter_by(title=form.title.data).first() -Reassigned in: - File: RedditRatings/app/views.py - > Line 423: this_thread = db.session.query(Thread).filter_by(reddit_id=reddit_post.id).first() - File: RedditRatings/app/views.py - > Line 479: ret_MAYBE_FUNCTION_NAME = render_template('create_thread.html',title='Create a Community Rating on reddit', page_title='Create a Community Rating on reddit', form=form) - File: RedditRatings/app/views.py - > Line 375: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: RedditRatings/app/views.py - > reaches line 427, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('thread',category_slug=this_thread.category.slug, thread_slug=this_thread.slug, thread_id=this_thread.id)) - -Vulnerability 6: -File: RedditRatings/app/views.py - > User input at line 447, trigger word "Markup(": - error_message = Markup('Something went wrong. Please try again or submit an [Issue] to /r/RedditRatings.') -File: RedditRatings/app/views.py - > reaches line 453, trigger word "flash(": - flash(error_message) - -Vulnerability 7: -File: RedditRatings/app/views.py - > User input at line 467, trigger word ".data": - this_thread = db.session.query(Thread).filter_by(category_id=form.category.data).filter_by(title=form.title.data).first() -Reassigned in: - File: RedditRatings/app/views.py - > Line 423: this_thread = db.session.query(Thread).filter_by(reddit_id=reddit_post.id).first() - File: RedditRatings/app/views.py - > Line 479: ret_MAYBE_FUNCTION_NAME = render_template('create_thread.html',title='Create a Community Rating on reddit', page_title='Create a Community Rating on reddit', form=form) - File: RedditRatings/app/views.py - > Line 375: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: RedditRatings/app/views.py - > reaches line 472, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('thread',category_slug=this_thread.category.slug, thread_slug=this_thread.slug, thread_id=this_thread.id)) - -Vulnerability 8: -File: RedditRatings/app/views.py - > User input at line 467, trigger word ".data": - this_thread = db.session.query(Thread).filter_by(category_id=form.category.data).filter_by(title=form.title.data).first() -Reassigned in: - File: RedditRatings/app/views.py - > Line 423: this_thread = db.session.query(Thread).filter_by(reddit_id=reddit_post.id).first() - File: RedditRatings/app/views.py - > Line 479: ret_MAYBE_FUNCTION_NAME = render_template('create_thread.html',title='Create a Community Rating on reddit', page_title='Create a Community Rating on reddit', form=form) - File: RedditRatings/app/views.py - > Line 375: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: RedditRatings/app/views.py - > reaches line 472, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('thread',category_slug=this_thread.category.slug, thread_slug=this_thread.slug, thread_id=this_thread.id)) - -Vulnerability 9: -File: RedditRatings/app/views.py - > User input at line 571, trigger word "Markup(": - success_message = Markup('This rating has been closed and updated on reddit.') -File: RedditRatings/app/views.py - > reaches line 578, trigger word "flash(": - flash(success_message) - - - -MattyO/flask-integration-demo -https://github.com/MattyO/flask-integration-demo -Entry file: flask-integration-demo/app.py -Scanned: 2016-10-19 13:03:37.408062 -No vulnerabilities found. - - -corbinbs/flask-api-talk -https://github.com/corbinbs/flask-api-talk -Entry file: flask-api-talk/classy-api/hubology/__init__.py -Scanned: 2016-10-19 13:03:38.767654 -No vulnerabilities found. - - -lucasnewman11/url-shortener-flask -https://github.com/lucasnewman11/url-shortener-flask -Entry file: url-shortener-flask/main.py -Scanned: 2016-10-19 13:03:41.606244 -No vulnerabilities found. - - -HelderVieira/flask_master_detail -https://github.com/HelderVieira/flask_master_detail -Entry file: flask_master_detail/app.py -Scanned: 2016-10-19 13:03:44.632289 -No vulnerabilities found. - - -pmccavana/chrisarcand.com-flask -https://github.com/pmccavana/chrisarcand.com-flask -Entry file: None -Scanned: 2016-10-19 13:03:50.822798 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pmccavana/chrisarcand.com-flask. - -ashleymcnamara/social_project_flask -https://github.com/ashleymcnamara/social_project_flask -Entry file: social_project_flask/app.py -Scanned: 2016-10-19 13:03:52.138713 -Vulnerability 1: -File: social_project_flask/app.py - > User input at line 36, trigger word "get(": - next_url = request.args.get('next') or url_for('hello_world') -File: social_project_flask/app.py - > reaches line 36, trigger word "url_for(": - next_url = request.args.get('next') or url_for('hello_world') - -Vulnerability 2: -File: social_project_flask/app.py - > User input at line 36, trigger word "get(": - next_url = request.args.get('next') or url_for('hello_world') -File: social_project_flask/app.py - > reaches line 39, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: social_project_flask/app.py - > User input at line 36, trigger word "get(": - next_url = request.args.get('next') or url_for('hello_world') -File: social_project_flask/app.py - > reaches line 48, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -rileonard15/python-gae-flask-classy -https://github.com/rileonard15/python-gae-flask-classy -Entry file: python-gae-flask-classy/main.py -Scanned: 2016-10-19 13:03:52.920110 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gcav66/helloflask -https://github.com/Gcav66/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 13:03:55.468653 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -JPWKU/microblog -https://github.com/JPWKU/microblog -Entry file: None -Scanned: 2016-10-19 13:03:58.456919 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -michalskuza/pronunciation-finder -https://github.com/michalskuza/pronunciation-finder -Entry file: None -Scanned: 2016-10-19 13:04:05.574617 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/michalskuza/pronunciation-finder. - -max-k/pynauth -https://github.com/max-k/pynauth -Entry file: pynauth/pynauth.py -Scanned: 2016-10-19 13:04:07.028740 -No vulnerabilities found. - - -danilobellini/pyturing -https://github.com/danilobellini/pyturing -Entry file: pyturing/main.py -Scanned: 2016-10-19 13:04:08.902463 -Vulnerability 1: -File: pyturing/main.py - > User input at line 18, trigger word "form[": - tm = TuringMachine(request.form['machine']) -File: pyturing/main.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(tm.tape) - - - -mdutia/web -https://github.com/mdutia/web -Entry file: web/app/__init__.py -Scanned: 2016-10-19 13:04:10.343369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lolyzor/pushnotifications-server -https://github.com/lolyzor/pushnotifications-server -Entry file: pushnotifications-server/main.py -Scanned: 2016-10-19 13:04:12.097563 -No vulnerabilities found. - - -droopy4096/fliki -https://github.com/droopy4096/fliki -Entry file: fliki/wiki.py -Scanned: 2016-10-19 13:04:14.526552 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -housne/pavements -https://github.com/housne/pavements -Entry file: pavements/apps/__init__.py -Scanned: 2016-10-19 13:04:16.316939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -irdan/valorem-vis -https://github.com/irdan/valorem-vis -Entry file: valorem-vis/valoremvis/main.py -Scanned: 2016-10-19 13:04:17.918394 -Vulnerability 1: -File: valorem-vis/valoremvis/main.py - > User input at line 15, trigger word "get(": - value = app.config['CACHE'].get(key) -Reassigned in: - File: valorem-vis/valoremvis/main.py - > Line 21: ret_MAYBE_FUNCTION_NAME = jsonify('success'True) -File: valorem-vis/valoremvis/main.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('value'value) - - - -paylogic/settei-example -https://github.com/paylogic/settei-example -Entry file: settei-example/main.py -Scanned: 2016-10-19 13:04:19.242572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marksamman/pylinkshortener -https://github.com/marksamman/pylinkshortener -Entry file: pylinkshortener/app/__init__.py -Scanned: 2016-10-19 13:04:23.663629 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -tkinst/hero-counters -https://github.com/tkinst/hero-counters -Entry file: hero-counters/__init__.py -Scanned: 2016-10-19 13:04:27.695785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask-website -https://github.com/pallets/flask-website -Entry file: flask-website/flask_website/__init__.py -Scanned: 2016-10-19 13:04:33.662683 -Vulnerability 1: -File: flask-website/flask_website/views/general.py - > User input at line 29, trigger word "get(": - q = request.args.get('q') or '' -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 33: results = perform_search(q,page=page) - File: flask-website/flask_website/views/general.py - > Line 31: results = None -File: flask-website/flask_website/views/general.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/search.html',results=results, q=q) - -Vulnerability 2: -File: flask-website/flask_website/views/general.py - > User input at line 30, trigger word "get(": - page = request.args.get('page',type=int) or 1 -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 33: results = perform_search(q,page=page) - File: flask-website/flask_website/views/general.py - > Line 31: results = None -File: flask-website/flask_website/views/general.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/search.html',results=results, q=q) - -Vulnerability 3: -File: flask-website/flask_website/views/general.py - > User input at line 89, trigger word "form[": - name = request.form['name'].strip() -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 87: name = g.user.name - File: flask-website/flask_website/views/general.py - > Line 93: g.user.name = name - File: flask-website/flask_website/views/general.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-website/flask_website/views/general.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/profile.html',name=name) - -Vulnerability 4: -File: flask-website/flask_website/views/snippets.py - > User input at line 30, trigger word "get(": - category_id = request.form.get('category',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 23: category_id = None - File: flask-website/flask_website/views/snippets.py - > Line 28: category_id = rv.id - File: flask-website/flask_website/views/snippets.py - > Line 39: category = Category.query.get(category_id) - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 5: -File: flask-website/flask_website/views/snippets.py - > User input at line 34, trigger word "form[": - title = request.form['title'] -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 6: -File: flask-website/flask_website/views/snippets.py - > User input at line 35, trigger word "form[": - body = request.form['body'] -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 7: -File: flask-website/flask_website/views/snippets.py - > User input at line 39, trigger word "get(": - category = Category.query.get(category_id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 8: -File: flask-website/flask_website/views/snippets.py - > User input at line 30, trigger word "get(": - category_id = request.form.get('category',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 23: category_id = None - File: flask-website/flask_website/views/snippets.py - > Line 28: category_id = rv.id - File: flask-website/flask_website/views/snippets.py - > Line 39: category = Category.query.get(category_id) - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) -File: flask-website/flask_website/views/snippets.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) - -Vulnerability 9: -File: flask-website/flask_website/views/snippets.py - > User input at line 32, trigger word "form[": - preview = format_creole(request.form['body']) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 24: preview = None - File: flask-website/flask_website/views/snippets.py - > Line 45: ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) -File: flask-website/flask_website/views/snippets.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) - -Vulnerability 10: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 57, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(snippet=snippet.to_json()) - -Vulnerability 11: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 65, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 12: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/show.html',snippet=snippet) - -Vulnerability 13: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 81, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 14: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 83, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 15: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 16: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit_comment.html',form=form, comment=comment) - -Vulnerability 17: -File: flask-website/flask_website/views/snippets.py - > User input at line 101, trigger word "get(": - snippet = Snippet.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 107: form = dict(title=snippet.title, body=snippet.body, category=snippet.category.id) - File: flask-website/flask_website/views/snippets.py - > Line 129: snippet.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 130: snippet.body = form['body'] - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) -File: flask-website/flask_website/views/snippets.py - > reaches line 134, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 18: -File: flask-website/flask_website/views/snippets.py - > User input at line 101, trigger word "get(": - snippet = Snippet.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 107: form = dict(title=snippet.title, body=snippet.body, category=snippet.category.id) - File: flask-website/flask_website/views/snippets.py - > Line 129: snippet.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 130: snippet.body = form['body'] - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) -File: flask-website/flask_website/views/snippets.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit.html',snippet=snippet, preview=preview, form=form, categories=Category.query.order_by(Category.name).all()) - -Vulnerability 19: -File: flask-website/flask_website/views/snippets.py - > User input at line 114, trigger word "form[": - preview = format_creole(request.form['body']) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 106: preview = None - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) - File: flask-website/flask_website/views/snippets.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) -File: flask-website/flask_website/views/snippets.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit.html',snippet=snippet, preview=preview, form=form, categories=Category.query.order_by(Category.name).all()) - -Vulnerability 20: -File: flask-website/flask_website/views/snippets.py - > User input at line 171, trigger word "form[": - category = Category(name=request.form['name']) -File: flask-website/flask_website/views/snippets.py - > reaches line 174, trigger word "flash(": - flash('Category %s created.' % category.name) - -Vulnerability 21: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 22: -File: flask-website/flask_website/views/snippets.py - > User input at line 188, trigger word "get(": - move_to_id = request.form.get('move_to',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 190: move_to = Category.query.get(move_to_id) - File: flask-website/flask_website/views/snippets.py - > Line 195: snippet.category = move_to -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 23: -File: flask-website/flask_website/views/snippets.py - > User input at line 190, trigger word "get(": - move_to = Category.query.get(move_to_id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 195: snippet.category = move_to -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 24: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 202, trigger word "flash(": - flash('Category %s deleted' % category.name) - -Vulnerability 25: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 205, trigger word "filter(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/delete_category.html',category=category, other_categories=Category.query.filter(Category.id != category.id).all()) - -Vulnerability 26: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/delete_category.html',category=category, other_categories=Category.query.filter(Category.id != category.id).all()) - - - -tonyseek/flask-navigation -https://github.com/tonyseek/flask-navigation -Entry file: flask-navigation/examples/nested.py -Scanned: 2016-10-19 13:04:35.266877 -No vulnerabilities found. - - -gilles/flask-apns -https://github.com/gilles/flask-apns -Entry file: flask-apns/tests/__init__.py -Scanned: 2016-10-19 13:04:38.207536 -No vulnerabilities found. - - -hartleybrody/web_starter -https://github.com/hartleybrody/web_starter -Entry file: web_starter/app.py -Scanned: 2016-10-19 13:04:39.663688 -No vulnerabilities found. - - -switham/flask_via_fcgi -https://github.com/switham/flask_via_fcgi -Entry file: flask_via_fcgi/sponge.py -Scanned: 2016-10-19 13:04:41.571958 -No vulnerabilities found. - - -janmtl/flaskenberg -https://github.com/janmtl/flaskenberg -Entry file: None -Scanned: 2016-10-19 13:04:43.200797 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janmtl/flaskenberg. - -dashdanw/flaskbook -https://github.com/dashdanw/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-19 13:04:43.752856 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -douglarek/restful -https://github.com/douglarek/restful -Entry file: restful/restful/__init__.py -Scanned: 2016-10-19 13:04:44.987821 -No vulnerabilities found. - - -abhijit148/FlaskREST -https://github.com/abhijit148/FlaskREST -Entry file: None -Scanned: 2016-10-19 13:04:46.212607 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/abhijit148/FlaskREST. - -mattkgross/flaskTest -https://github.com/mattkgross/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-19 13:04:46.718808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cwmat/flask_test -https://github.com/cwmat/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 13:04:52.801208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -disavowd/flask-pastebin -https://github.com/disavowd/flask-pastebin -Entry file: flask-pastebin/pastebin.py -Scanned: 2016-10-19 13:04:54.353248 -Vulnerability 1: -File: flask-pastebin/pastebin.py - > User input at line 79, trigger word "get(": - reply_to = request.args.get('reply_to',type=int) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 81: parent = Paste.query.get(reply_to) - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) - File: flask-pastebin/pastebin.py - > Line 78: parent = None -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 2: -File: flask-pastebin/pastebin.py - > User input at line 81, trigger word "get(": - parent = Paste.query.get(reply_to) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 78: parent = None - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 3: -File: flask-pastebin/pastebin.py - > User input at line 83, trigger word "form[": - paste = Paste(g.user, request.form['code'],parent=parent) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 89: ret_MAYBE_FUNCTION_NAME = render_template('new_paste.html',parent=parent) -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 4: -File: flask-pastebin/pastebin.py - > User input at line 79, trigger word "get(": - reply_to = request.args.get('reply_to',type=int) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 81: parent = Paste.query.get(reply_to) - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) - File: flask-pastebin/pastebin.py - > Line 78: parent = None -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 5: -File: flask-pastebin/pastebin.py - > User input at line 81, trigger word "get(": - parent = Paste.query.get(reply_to) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 78: parent = None - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 6: -File: flask-pastebin/pastebin.py - > User input at line 83, trigger word "form[": - paste = Paste(g.user, request.form['code'],parent=parent) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 89: ret_MAYBE_FUNCTION_NAME = render_template('new_paste.html',parent=parent) -File: flask-pastebin/pastebin.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_paste',paste_id=paste.id)) - -Vulnerability 7: -File: flask-pastebin/pastebin.py - > User input at line 79, trigger word "get(": - reply_to = request.args.get('reply_to',type=int) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 81: parent = Paste.query.get(reply_to) - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) - File: flask-pastebin/pastebin.py - > Line 78: parent = None -File: flask-pastebin/pastebin.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new_paste.html',parent=parent) - -Vulnerability 8: -File: flask-pastebin/pastebin.py - > User input at line 81, trigger word "get(": - parent = Paste.query.get(reply_to) -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 78: parent = None - File: flask-pastebin/pastebin.py - > Line 83: paste = Paste(g.user, request.form['code'],parent=parent) -File: flask-pastebin/pastebin.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new_paste.html',parent=parent) - -Vulnerability 9: -File: flask-pastebin/pastebin.py - > User input at line 140, trigger word "get(": - next_url = request.args.get('next') or url_for('new_paste') -File: flask-pastebin/pastebin.py - > reaches line 140, trigger word "url_for(": - next_url = request.args.get('next') or url_for('new_paste') - -Vulnerability 10: -File: flask-pastebin/pastebin.py - > User input at line 140, trigger word "get(": - next_url = request.args.get('next') or url_for('new_paste') -File: flask-pastebin/pastebin.py - > reaches line 143, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 11: -File: flask-pastebin/pastebin.py - > User input at line 148, trigger word ".data": - user = User.query.filter_by(fb_id=me.data['id']).first() -Reassigned in: - File: flask-pastebin/pastebin.py - > Line 150: user = User() - File: flask-pastebin/pastebin.py - > Line 156: session['user_id'] = user.id - File: flask-pastebin/pastebin.py - > Line 145: session['fb_access_token'] = (resp['access_token'], '') -File: flask-pastebin/pastebin.py - > reaches line 158, trigger word "flash(": - flash('You are now logged in as %s' % user.display_name) - -Vulnerability 12: -File: flask-pastebin/pastebin.py - > User input at line 140, trigger word "get(": - next_url = request.args.get('next') or url_for('new_paste') -File: flask-pastebin/pastebin.py - > reaches line 159, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -bjpcjp/flask-demo -https://github.com/bjpcjp/flask-demo -Entry file: None -Scanned: 2016-10-19 13:04:56.889995 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bjpcjp/flask-demo. - -saml/flask_contentnego -https://github.com/saml/flask_contentnego -Entry file: flask_contentnego/app.py -Scanned: 2016-10-19 13:04:58.365597 -Vulnerability 1: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 2: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 3: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 84, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 4: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 84, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 5: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 6: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 85, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 7: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 112, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 8: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 112, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 9: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 10: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',key=key, val=val) - -Vulnerability 11: -File: flask_contentnego/flask_contentnego.py - > User input at line 70, trigger word "get(": - val = db.get(key) -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 106: val = request.form['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 12: -File: flask_contentnego/flask_contentnego.py - > User input at line 106, trigger word "form[": - val = request.form['val'] -Reassigned in: - File: flask_contentnego/flask_contentnego.py - > Line 70: val = db.get(key) - File: flask_contentnego/flask_contentnego.py - > Line 95: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 97: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 98: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 405) - File: flask_contentnego/flask_contentnego.py - > Line 101: val = None - File: flask_contentnego/flask_contentnego.py - > Line 104: val = d['val'] - File: flask_contentnego/flask_contentnego.py - > Line 123: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 125: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 126: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 200) - File: flask_contentnego/flask_contentnego.py - > Line 130: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 132: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 133: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 75: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 77: ret_MAYBE_FUNCTION_NAME = (render_template('base.html',msg=msg), 404) - File: flask_contentnego/flask_contentnego.py - > Line 78: ret_MAYBE_FUNCTION_NAME = (jsonify(msg=msg), 404) -File: flask_contentnego/flask_contentnego.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(key=key, val=val) - -Vulnerability 13: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 14: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 15: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 23, trigger word "url_for(": - resp = self.client.get(url_for('classes.list')) - -Vulnerability 16: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 17: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 18: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 26, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') - -Vulnerability 19: -File: flask_contentnego/test.py - > User input at line 23, trigger word "get(": - resp = self.client.get(url_for('classes.list')) -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - -Vulnerability 20: -File: flask_contentnego/test.py - > User input at line 26, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.2,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - -Vulnerability 21: -File: flask_contentnego/test.py - > User input at line 29, trigger word "get(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') -File: flask_contentnego/test.py - > reaches line 29, trigger word "url_for(": - resp = self.client.get(url_for('classes.list'),headers='Accept''text/html;q=0.5,application/json;q=0.3') - - - -digaxfr/dhcpd-flask -https://github.com/digaxfr/dhcpd-flask -Entry file: None -Scanned: 2016-10-19 13:04:59.871935 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/digaxfr/dhcpd-flask. - -FGtatsuro/flask-boilerplate -https://github.com/FGtatsuro/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 13:05:05.386330 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/FGtatsuro/flask-boilerplate. - -mkaplenko/flask-dynstatic -https://github.com/mkaplenko/flask-dynstatic -Entry file: flask-dynstatic/test.py -Scanned: 2016-10-19 13:05:08.740456 -No vulnerabilities found. - - -yxssfxwzy/LabMeeting -https://github.com/yxssfxwzy/LabMeeting -Entry file: LabMeeting/flaskr.py -Scanned: 2016-10-19 13:05:10.311239 -No vulnerabilities found. - - -harokb/FlaskBootstrapStarterPack -https://github.com/harokb/FlaskBootstrapStarterPack -Entry file: FlaskBootstrapStarterPack/FlaskApp.py -Scanned: 2016-10-19 13:05:11.589544 -No vulnerabilities found. - - -mattkoskela/py-flask-auth -https://github.com/mattkoskela/py-flask-auth -Entry file: py-flask-auth/example/app.py -Scanned: 2016-10-19 13:05:13.038056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Danielp3/flask-sql-example -https://github.com/Danielp3/flask-sql-example -Entry file: flask-sql-example/example_app/__init__.py -Scanned: 2016-10-19 13:05:16.318646 -No vulnerabilities found. - - -Chavjoh/PollFlaskPython -https://github.com/Chavjoh/PollFlaskPython -Entry file: PollFlaskPython/SpreadPoll.py -Scanned: 2016-10-19 13:05:17.736098 -No vulnerabilities found. - - -Avinash9/flask_rest_api -https://github.com/Avinash9/flask_rest_api -Entry file: flask_rest_api/app.py -Scanned: 2016-10-19 13:05:19.029224 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kholidfu/flask_login_mail -https://github.com/kholidfu/flask_login_mail -Entry file: None -Scanned: 2016-10-19 13:05:20.456618 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kholidfu/flask_login_mail. - -corbinbs/flask-api-talk -https://github.com/corbinbs/flask-api-talk -Entry file: flask-api-talk/classy-api/hubology/__init__.py -Scanned: 2016-10-19 13:05:24.754874 -No vulnerabilities found. - - -nickcharlton/empty-flask-app -https://github.com/nickcharlton/empty-flask-app -Entry file: empty-flask-app/example/__init__.py -Scanned: 2016-10-19 13:05:26.192801 -No vulnerabilities found. - - -eikonomega/flask-api-awesomesauce -https://github.com/eikonomega/flask-api-awesomesauce -Entry file: flask-api-awesomesauce/flask_api_awesomesauce/tests/test_api_decorators.py -Scanned: 2016-10-19 13:05:28.619990 -No vulnerabilities found. - - -eikonomega/flask-authorization-panda -https://github.com/eikonomega/flask-authorization-panda -Entry file: flask-authorization-panda/flask_authorization_panda/__init__.py -Scanned: 2016-10-19 13:05:33.195219 -No vulnerabilities found. - - -nfoonf/flask_auth_wrapper -https://github.com/nfoonf/flask_auth_wrapper -Entry file: flask_auth_wrapper/auth_wrapper/app.py -Scanned: 2016-10-19 13:05:34.484936 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shrayasr/learning-flask-login -https://github.com/shrayasr/learning-flask-login -Entry file: learning-flask-login/server.py -Scanned: 2016-10-19 13:05:38.547035 -No vulnerabilities found. - - -davidtwco/flask-markdown-app -https://github.com/davidtwco/flask-markdown-app -Entry file: flask-markdown-app/app/__init__.py -Scanned: 2016-10-19 13:05:40.368531 -Vulnerability 1: -File: flask-markdown-app/app/views.py - > User input at line 70, trigger word ".data": - e = Entry(form.article.data, form.title.data, datetime.date.today(), current_user) -Reassigned in: - File: flask-markdown-app/app/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('pages/new.html',form=form) -File: flask-markdown-app/app/views.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',id=e.id)) - -Vulnerability 2: -File: flask-markdown-app/app/views.py - > User input at line 70, trigger word ".data": - e = Entry(form.article.data, form.title.data, datetime.date.today(), current_user) -Reassigned in: - File: flask-markdown-app/app/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('pages/new.html',form=form) -File: flask-markdown-app/app/views.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',id=e.id)) - - - -Jayin/python-microblog -https://github.com/Jayin/python-microblog -Entry file: python-microblog/app/__init__.py -Scanned: 2016-10-19 13:05:41.681927 -No vulnerabilities found. - - -tim-tang/arctic-bear -https://github.com/tim-tang/arctic-bear -Entry file: None -Scanned: 2016-10-19 13:05:43.653915 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tim-tang/arctic-bear. - -asen6/fl_amartyasenguptadotcom -https://github.com/asen6/fl_amartyasenguptadotcom -Entry file: fl_amartyasenguptadotcom/fl_amartyasenguptadotcom/__init__.py -Scanned: 2016-10-19 13:05:50.251027 -No vulnerabilities found. - - -lizrush/webmap-app -https://github.com/lizrush/webmap-app -Entry file: webmap-app/app.py -Scanned: 2016-10-19 13:05:51.576638 -No vulnerabilities found. - - -nottings/flask_wsgi_nginx_app_skeleton -https://github.com/nottings/flask_wsgi_nginx_app_skeleton -Entry file: flask_wsgi_nginx_app_skeleton/module/__init__.py -Scanned: 2016-10-19 13:05:53.223691 -No vulnerabilities found. - - -xsteadfastx/fackernews -https://github.com/xsteadfastx/fackernews -Entry file: fackernews/app/app.py -Scanned: 2016-10-19 13:05:54.664991 -No vulnerabilities found. - - -sirfilip/microblog -https://github.com/sirfilip/microblog -Entry file: None -Scanned: 2016-10-19 13:05:55.178806 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nicholsonjf/abacus -https://github.com/nicholsonjf/abacus -Entry file: abacus/abacus.py -Scanned: 2016-10-19 13:05:56.585659 -Vulnerability 1: -File: abacus/abacus.py - > User input at line 74, trigger word "get(": - a = request.args.get('a', 0,type=int) -Reassigned in: - File: abacus/abacus.py - > Line 76: my_nums = Nums(num1=a, num2=b) -File: abacus/abacus.py - > reaches line 80, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=my_nums.num3) - -Vulnerability 2: -File: abacus/abacus.py - > User input at line 75, trigger word "get(": - b = request.args.get('b', 0,type=int) -Reassigned in: - File: abacus/abacus.py - > Line 76: my_nums = Nums(num1=a, num2=b) -File: abacus/abacus.py - > reaches line 80, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result=my_nums.num3) - - - -relsqui/openqdb -https://github.com/relsqui/openqdb -Entry file: openqdb/app/__init__.py -Scanned: 2016-10-19 13:05:58.018773 -Vulnerability 1: -File: openqdb/app/views.py - > User input at line 35, trigger word ".data": - quote = Quotes(quote=form.quote.data, by=form.submitter.data) -File: openqdb/app/views.py - > reaches line 39, trigger word "flash(": - flash('Submitted quote #{}'.format(quote.id)) - - - -kxxoling/chatroom -https://github.com/kxxoling/chatroom -Entry file: chatroom/chatroom/views.py -Scanned: 2016-10-19 13:05:59.324083 -No vulnerabilities found. - - -DMzda/tilbot -https://github.com/DMzda/tilbot -Entry file: tilbot/tilbot/__init__.py -Scanned: 2016-10-19 13:06:00.750118 -No vulnerabilities found. - - -marksamman/pylinkshortener -https://github.com/marksamman/pylinkshortener -Entry file: pylinkshortener/app/__init__.py -Scanned: 2016-10-19 13:06:01.281149 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -CMThF/microblog -https://github.com/CMThF/microblog -Entry file: None -Scanned: 2016-10-19 13:06:01.779728 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mhaseebtariq/restful_oauth -https://github.com/mhaseebtariq/restful_oauth -Entry file: restful_oauth/urls.py -Scanned: 2016-10-19 13:06:08.339105 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mramirezmendez/python -https://github.com/mramirezmendez/python -Entry file: python/flask/microblog/app/__init__.py -Scanned: 2016-10-19 13:06:10.776324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fubuki/python-bookmark-service -https://github.com/fubuki/python-bookmark-service -Entry file: python-bookmark-service/app.py -Scanned: 2016-10-19 13:06:12.429120 -Vulnerability 1: -File: python-bookmark-service/app.py - > User input at line 57, trigger word "get(": - url = request.args.get('url') -Reassigned in: - File: python-bookmark-service/app.py - > Line 59: bookmark = Bookmark(url=url) -File: python-bookmark-service/app.py - > reaches line 62, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -bezineb5/ImageMatcher -https://github.com/bezineb5/ImageMatcher -Entry file: ImageMatcher/imagematcher.py -Scanned: 2016-10-19 13:06:13.932235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pallets/flask-website -https://github.com/pallets/flask-website -Entry file: flask-website/flask_website/__init__.py -Scanned: 2016-10-19 13:06:19.466292 -Vulnerability 1: -File: flask-website/flask_website/views/general.py - > User input at line 29, trigger word "get(": - q = request.args.get('q') or '' -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 33: results = perform_search(q,page=page) - File: flask-website/flask_website/views/general.py - > Line 31: results = None -File: flask-website/flask_website/views/general.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/search.html',results=results, q=q) - -Vulnerability 2: -File: flask-website/flask_website/views/general.py - > User input at line 30, trigger word "get(": - page = request.args.get('page',type=int) or 1 -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 33: results = perform_search(q,page=page) - File: flask-website/flask_website/views/general.py - > Line 31: results = None -File: flask-website/flask_website/views/general.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/search.html',results=results, q=q) - -Vulnerability 3: -File: flask-website/flask_website/views/general.py - > User input at line 89, trigger word "form[": - name = request.form['name'].strip() -Reassigned in: - File: flask-website/flask_website/views/general.py - > Line 87: name = g.user.name - File: flask-website/flask_website/views/general.py - > Line 93: g.user.name = name - File: flask-website/flask_website/views/general.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-website/flask_website/views/general.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('general/profile.html',name=name) - -Vulnerability 4: -File: flask-website/flask_website/views/snippets.py - > User input at line 30, trigger word "get(": - category_id = request.form.get('category',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 23: category_id = None - File: flask-website/flask_website/views/snippets.py - > Line 28: category_id = rv.id - File: flask-website/flask_website/views/snippets.py - > Line 39: category = Category.query.get(category_id) - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 5: -File: flask-website/flask_website/views/snippets.py - > User input at line 34, trigger word "form[": - title = request.form['title'] -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 6: -File: flask-website/flask_website/views/snippets.py - > User input at line 35, trigger word "form[": - body = request.form['body'] -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 7: -File: flask-website/flask_website/views/snippets.py - > User input at line 39, trigger word "get(": - category = Category.query.get(category_id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) - File: flask-website/flask_website/views/snippets.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) -File: flask-website/flask_website/views/snippets.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 8: -File: flask-website/flask_website/views/snippets.py - > User input at line 30, trigger word "get(": - category_id = request.form.get('category',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 23: category_id = None - File: flask-website/flask_website/views/snippets.py - > Line 28: category_id = rv.id - File: flask-website/flask_website/views/snippets.py - > Line 39: category = Category.query.get(category_id) - File: flask-website/flask_website/views/snippets.py - > Line 41: snippet = Snippet(g.user, title, body, category) -File: flask-website/flask_website/views/snippets.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) - -Vulnerability 9: -File: flask-website/flask_website/views/snippets.py - > User input at line 32, trigger word "form[": - preview = format_creole(request.form['body']) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 24: preview = None - File: flask-website/flask_website/views/snippets.py - > Line 45: ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) -File: flask-website/flask_website/views/snippets.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/new.html',categories=Category.query.order_by(Category.name).all(), active_category=category_id, preview=preview) - -Vulnerability 10: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 57, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(snippet=snippet.to_json()) - -Vulnerability 11: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 65, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 12: -File: flask-website/flask_website/views/snippets.py - > User input at line 53, trigger word "get(": - snippet = Snippet.query.get(id) -File: flask-website/flask_website/views/snippets.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/show.html',snippet=snippet) - -Vulnerability 13: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 81, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 14: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 83, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 15: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(comment.snippet.url) - -Vulnerability 16: -File: flask-website/flask_website/views/snippets.py - > User input at line 72, trigger word "get(": - comment = Comment.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 75: form = dict(title=comment.title, text=comment.text) - File: flask-website/flask_website/views/snippets.py - > Line 89: comment.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 90: comment.text = form['text'] -File: flask-website/flask_website/views/snippets.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit_comment.html',form=form, comment=comment) - -Vulnerability 17: -File: flask-website/flask_website/views/snippets.py - > User input at line 101, trigger word "get(": - snippet = Snippet.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 107: form = dict(title=snippet.title, body=snippet.body, category=snippet.category.id) - File: flask-website/flask_website/views/snippets.py - > Line 129: snippet.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 130: snippet.body = form['body'] - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) -File: flask-website/flask_website/views/snippets.py - > reaches line 134, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) - -Vulnerability 18: -File: flask-website/flask_website/views/snippets.py - > User input at line 101, trigger word "get(": - snippet = Snippet.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 107: form = dict(title=snippet.title, body=snippet.body, category=snippet.category.id) - File: flask-website/flask_website/views/snippets.py - > Line 129: snippet.title = form['title'] - File: flask-website/flask_website/views/snippets.py - > Line 130: snippet.body = form['body'] - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) -File: flask-website/flask_website/views/snippets.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit.html',snippet=snippet, preview=preview, form=form, categories=Category.query.order_by(Category.name).all()) - -Vulnerability 19: -File: flask-website/flask_website/views/snippets.py - > User input at line 114, trigger word "form[": - preview = format_creole(request.form['body']) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 106: preview = None - File: flask-website/flask_website/views/snippets.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('snippets.index')) - File: flask-website/flask_website/views/snippets.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(snippet.url) -File: flask-website/flask_website/views/snippets.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/edit.html',snippet=snippet, preview=preview, form=form, categories=Category.query.order_by(Category.name).all()) - -Vulnerability 20: -File: flask-website/flask_website/views/snippets.py - > User input at line 171, trigger word "form[": - category = Category(name=request.form['name']) -File: flask-website/flask_website/views/snippets.py - > reaches line 174, trigger word "flash(": - flash('Category %s created.' % category.name) - -Vulnerability 21: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 22: -File: flask-website/flask_website/views/snippets.py - > User input at line 188, trigger word "get(": - move_to_id = request.form.get('move_to',type=int) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 190: move_to = Category.query.get(move_to_id) - File: flask-website/flask_website/views/snippets.py - > Line 195: snippet.category = move_to -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 23: -File: flask-website/flask_website/views/snippets.py - > User input at line 190, trigger word "get(": - move_to = Category.query.get(move_to_id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 195: snippet.category = move_to -File: flask-website/flask_website/views/snippets.py - > reaches line 197, trigger word "flash(": - flash('Category %s deleted and entries moved to %s.' % (category.name, move_to.name)) - -Vulnerability 24: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 202, trigger word "flash(": - flash('Category %s deleted' % category.name) - -Vulnerability 25: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 205, trigger word "filter(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/delete_category.html',category=category, other_categories=Category.query.filter(Category.id != category.id).all()) - -Vulnerability 26: -File: flask-website/flask_website/views/snippets.py - > User input at line 181, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: flask-website/flask_website/views/snippets.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) - File: flask-website/flask_website/views/snippets.py - > Line 204: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.manage_categories')) -File: flask-website/flask_website/views/snippets.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('snippets/delete_category.html',category=category, other_categories=Category.query.filter(Category.id != category.id).all()) - - - -wooyek/flask-social-blueprint -https://github.com/wooyek/flask-social-blueprint -Entry file: None -Scanned: 2016-10-19 13:06:22.643626 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wooyek/flask-social-blueprint. - -sasaporta/flask-security-admin-example -https://github.com/sasaporta/flask-security-admin-example -Entry file: flask-security-admin-example/main.py -Scanned: 2016-10-19 13:06:23.973221 -No vulnerabilities found. - - -thisissoon/Flask-Velox -https://github.com/thisissoon/Flask-Velox -Entry file: Flask-Velox/flask_velox/mixins/context.py -Scanned: 2016-10-19 13:06:26.605220 -No vulnerabilities found. - - -areski/a2billing-flask-api -https://github.com/areski/a2billing-flask-api -Entry file: a2billing-flask-api/a2billing_flask_api/app.py -Scanned: 2016-10-19 13:06:31.247241 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pbt-templates/flask -https://github.com/pbt-templates/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:06:33.833689 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gblanchard4/flask -https://github.com/gblanchard4/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:06:35.369595 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ellisonleao/Flask-Gist -https://github.com/ellisonleao/Flask-Gist -Entry file: None -Scanned: 2016-10-19 13:06:40.243323 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ellisonleao/Flask-Gist. - -ryanj/flask-hbase-todos -https://github.com/ryanj/flask-hbase-todos -Entry file: flask-hbase-todos/todoapp.py -Scanned: 2016-10-19 13:06:41.896080 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plredmond-archive/flask-oauth-hackerschool-py -https://github.com/plredmond-archive/flask-oauth-hackerschool-py -Entry file: flask-oauth-hackerschool-py/example.py -Scanned: 2016-10-19 13:06:43.430963 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -xsleonard/flask-dogstatsd -https://github.com/xsleonard/flask-dogstatsd -Entry file: flask-dogstatsd/tests/test_flask_dogstatsd.py -Scanned: 2016-10-19 13:06:44.764730 -No vulnerabilities found. - - -GordonsBeard/cafe-flask -https://github.com/GordonsBeard/cafe-flask -Entry file: cafe-flask/cafesite.py -Scanned: 2016-10-19 13:06:46.641809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ranom123/flaskdump -https://github.com/ranom123/flaskdump -Entry file: flaskdump/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 13:06:55.679714 -No vulnerabilities found. - - -mvrmoreira/flaskr -https://github.com/mvrmoreira/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:06:56.223738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevmo/flaskr -https://github.com/kevmo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:06:56.714277 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MatthewJWalls/FlaskStrap -https://github.com/MatthewJWalls/FlaskStrap -Entry file: FlaskStrap/app.py -Scanned: 2016-10-19 13:06:58.078650 -No vulnerabilities found. - - -hiroaki-yamamoto/flask-error -https://github.com/hiroaki-yamamoto/flask-error -Entry file: flask-error/test.py -Scanned: 2016-10-19 13:06:59.412894 -No vulnerabilities found. - - -Risto-Stevcev/flask-mongodb -https://github.com/Risto-Stevcev/flask-mongodb -Entry file: flask-mongodb/tumblelog/tumblelog/__init__.py -Scanned: 2016-10-19 13:07:01.126015 -No vulnerabilities found. - - -zlkca/flask-cms -https://github.com/zlkca/flask-cms -Entry file: flask-cms/flaskCMS/flaskCMS/__init__.py -Scanned: 2016-10-19 13:07:01.692786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nikhilalmeida/flask-template -https://github.com/nikhilalmeida/flask-template -Entry file: None -Scanned: 2016-10-19 13:07:03.185179 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nikhilalmeida/flask-template. - -gblanchard4/keg_flask -https://github.com/gblanchard4/keg_flask -Entry file: keg_flask/keg_flask.py -Scanned: 2016-10-19 13:07:04.550396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -php-technolog/flask-uniteller -https://github.com/php-technolog/flask-uniteller -Entry file: flask-uniteller/console/__init__.py -Scanned: 2016-10-19 13:07:09.955454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -almeida-marcusaf/estudos-Flask -https://github.com/almeida-marcusaf/estudos-Flask -Entry file: None -Scanned: 2016-10-19 13:07:12.210389 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/almeida-marcusaf/estudos-Flask. - -mkaplenko/flask-dynstatic -https://github.com/mkaplenko/flask-dynstatic -Entry file: flask-dynstatic/test.py -Scanned: 2016-10-19 13:07:16.506533 -No vulnerabilities found. - - -sionc/microblog -https://github.com/sionc/microblog -Entry file: None -Scanned: 2016-10-19 13:07:19.021401 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pellenberger/FlaskNetworkAnalyzer -https://github.com/pellenberger/FlaskNetworkAnalyzer -Entry file: FlaskNetworkAnalyzer/flaskNetworkAnalyzer.py -Scanned: 2016-10-19 13:07:22.487237 -No vulnerabilities found. - - -harokb/FlaskBootstrapStarterPack -https://github.com/harokb/FlaskBootstrapStarterPack -Entry file: FlaskBootstrapStarterPack/FlaskApp.py -Scanned: 2016-10-19 13:07:23.703478 -No vulnerabilities found. - - -smholloway/toopher-iframe-example-in-python -https://github.com/smholloway/toopher-iframe-example-in-python -Entry file: toopher-iframe-example-in-python/app.py -Scanned: 2016-10-19 13:07:24.932739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -her0e1c1/gae-flask-tamplae -https://github.com/her0e1c1/gae-flask-tamplae -Entry file: gae-flask-tamplae/gae/application/__init__.py -Scanned: 2016-10-19 13:07:29.020870 -No vulnerabilities found. - - -GDG-DAKAR/webservices_python_flask -https://github.com/GDG-DAKAR/webservices_python_flask -Entry file: webservices_python_flask/main.py -Scanned: 2016-10-19 13:07:30.529012 -No vulnerabilities found. - - -Wolniewicz/Flask_And_Robot -https://github.com/Wolniewicz/Flask_And_Robot -Entry file: Flask_And_Robot/app.py -Scanned: 2016-10-19 13:07:34.893194 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -robsugar/MyFlaskRepo -https://github.com/robsugar/MyFlaskRepo -Entry file: MyFlaskRepo/appHandle.py -Scanned: 2016-10-19 13:07:36.613901 -No vulnerabilities found. - - -biilmann/flask-token-auth -https://github.com/biilmann/flask-token-auth -Entry file: flask-token-auth/app.py -Scanned: 2016-10-19 13:07:40.430071 -No vulnerabilities found. - - -ANB2/flask-basic-template -https://github.com/ANB2/flask-basic-template -Entry file: flask-basic-template/app.py -Scanned: 2016-10-19 13:07:43.331317 -No vulnerabilities found. - - -erm1lov/py-microblog -https://github.com/erm1lov/py-microblog -Entry file: py-microblog/app/__init__.py -Scanned: 2016-10-19 13:07:46.432535 -No vulnerabilities found. - - -dharmit/microblog -https://github.com/dharmit/microblog -Entry file: None -Scanned: 2016-10-19 13:07:46.932132 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tejovanthn/tejovanthn -https://github.com/tejovanthn/tejovanthn -Entry file: tejovanthn/routes.py -Scanned: 2016-10-19 13:07:54.168649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ppmi-bsu/belt-server -https://github.com/ppmi-bsu/belt-server -Entry file: belt-server/src/main.py -Scanned: 2016-10-19 13:07:58.597147 -Vulnerability 1: -File: belt-server/src/main.py - > User input at line 15, trigger word "form[": - length = request.method == 'POST'request.form['length']128 -Reassigned in: - File: belt-server/src/main.py - > Line 17: keys = jbelt.genKeys(int(length)) - File: belt-server/src/main.py - > Line 19: keys['priv'] = base64.b64encode(str(keys['priv'])) - File: belt-server/src/main.py - > Line 20: keys['pub'] = base64.b64encode(str(keys['pub'])) -File: belt-server/src/main.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('keys.html',keys) - -Vulnerability 2: -File: belt-server/src/main.py - > User input at line 36, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 38: encrypted = jbelt.enc(xml, base64.b64decode(key)) - File: belt-server/src/main.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('enc.html') -File: belt-server/src/main.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dec.html',xml=prettify(encrypted), button_label='Зашифровать') - -Vulnerability 3: -File: belt-server/src/main.py - > User input at line 37, trigger word "form[": - xml = request.form['xml'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 38: encrypted = jbelt.enc(xml, base64.b64decode(key)) - File: belt-server/src/main.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('enc.html') -File: belt-server/src/main.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dec.html',xml=prettify(encrypted), button_label='Зашифровать') - -Vulnerability 4: -File: belt-server/src/main.py - > User input at line 44, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 46: decrypted = jbelt.dec(xml, base64.b64decode(key)) -File: belt-server/src/main.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('enc.html',xml=decrypted) - -Vulnerability 5: -File: belt-server/src/main.py - > User input at line 45, trigger word "form[": - xml = request.form['xml'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 46: decrypted = jbelt.dec(xml, base64.b64decode(key)) -File: belt-server/src/main.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('enc.html',xml=decrypted) - -Vulnerability 6: -File: belt-server/src/main.py - > User input at line 54, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 60: key = request.form['key'].strip() - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 62: signed = request.form['signed'].strip() - File: belt-server/src/main.py - > Line 63: is_valid = False - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) -File: belt-server/src/main.py - > reaches line 58, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=file.read(), signed='', key=key, is_valid=True) - -Vulnerability 7: -File: belt-server/src/main.py - > User input at line 57, trigger word "files[": - file = request.files['file'] -File: belt-server/src/main.py - > reaches line 58, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=file.read(), signed='', key=key, is_valid=True) - -Vulnerability 8: -File: belt-server/src/main.py - > User input at line 60, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 54: key = request.form['key'].strip() - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 62: signed = request.form['signed'].strip() - File: belt-server/src/main.py - > Line 63: is_valid = False - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) -File: belt-server/src/main.py - > reaches line 58, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=file.read(), signed='', key=key, is_valid=True) - -Vulnerability 9: -File: belt-server/src/main.py - > User input at line 54, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 60: key = request.form['key'].strip() - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 62: signed = request.form['signed'].strip() - File: belt-server/src/main.py - > Line 63: is_valid = False - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) -File: belt-server/src/main.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=xml, signed=signed, key=key, is_valid=is_valid) - -Vulnerability 10: -File: belt-server/src/main.py - > User input at line 60, trigger word "form[": - key = request.form['key'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 54: key = request.form['key'].strip() - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 62: signed = request.form['signed'].strip() - File: belt-server/src/main.py - > Line 63: is_valid = False - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) -File: belt-server/src/main.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=xml, signed=signed, key=key, is_valid=is_valid) - -Vulnerability 11: -File: belt-server/src/main.py - > User input at line 61, trigger word "form[": - xml = request.form['xml'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 58: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=file.read(), signed='', key=key, is_valid=True) - File: belt-server/src/main.py - > Line 62: signed = request.form['signed'].strip() - File: belt-server/src/main.py - > Line 63: is_valid = False - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) -File: belt-server/src/main.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=xml, signed=signed, key=key, is_valid=is_valid) - -Vulnerability 12: -File: belt-server/src/main.py - > User input at line 62, trigger word "form[": - signed = request.form['signed'].strip() -Reassigned in: - File: belt-server/src/main.py - > Line 65: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 67: signed = jbelt.sign(xml,keys=jbelt.calc_keys(base64.b64decode(key))) - File: belt-server/src/main.py - > Line 68: is_valid = jbelt.verify(signed) - File: belt-server/src/main.py - > Line 71: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml='', signed='', key=base64.b64encode(str(jbelt.genKeys()['priv']))) - File: belt-server/src/main.py - > Line 58: ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=file.read(), signed='', key=key, is_valid=True) - File: belt-server/src/main.py - > Line 63: is_valid = False -File: belt-server/src/main.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sign.html',xml=xml, signed=signed, key=key, is_valid=is_valid) - - - -yhfyhf/yhfWeibo -https://github.com/yhfyhf/yhfWeibo -Entry file: yhfWeibo/yhfWeibo.py -Scanned: 2016-10-19 13:08:00.731180 -No vulnerabilities found. - - -r0rshark/iOccupancyServer -https://github.com/r0rshark/iOccupancyServer -Entry file: iOccupancyServer/app.py -Scanned: 2016-10-19 13:08:02.293713 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mskog/cheapskate -https://github.com/mskog/cheapskate -Entry file: cheapskate/cheapskate.py -Scanned: 2016-10-19 13:08:03.555806 -Vulnerability 1: -File: cheapskate/cheapskate.py - > User input at line 15, trigger word "get(": - url = request.args.get('url', '') -Reassigned in: - File: cheapskate/cheapskate.py - > Line 20: result = 'url''top_image''text'urlurl'' - File: cheapskate/cheapskate.py - > Line 27: article = Article(url) - File: cheapskate/cheapskate.py - > Line 33: ret_MAYBE_FUNCTION_NAME = ('', 422) - File: cheapskate/cheapskate.py - > Line 40: result = 'url''top_image''text'urltop_imagearticle.text -File: cheapskate/cheapskate.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 2: -File: cheapskate/cheapskate.py - > User input at line 15, trigger word "get(": - url = request.args.get('url', '') -Reassigned in: - File: cheapskate/cheapskate.py - > Line 20: result = 'url''top_image''text'urlurl'' - File: cheapskate/cheapskate.py - > Line 27: article = Article(url) - File: cheapskate/cheapskate.py - > Line 33: ret_MAYBE_FUNCTION_NAME = ('', 422) - File: cheapskate/cheapskate.py - > Line 40: result = 'url''top_image''text'urltop_imagearticle.text -File: cheapskate/cheapskate.py - > reaches line 46, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(result) - -Vulnerability 3: -File: cheapskate/cheapskate.py - > User input at line 50, trigger word "get(": - url = request.args.get('url', '') -Reassigned in: - File: cheapskate/cheapskate.py - > Line 57: article = Article(url) - File: cheapskate/cheapskate.py - > Line 63: ret_MAYBE_FUNCTION_NAME = ('', 422) - File: cheapskate/cheapskate.py - > Line 71: ret_MAYBE_FUNCTION_NAME = redirect(top_image) - File: cheapskate/cheapskate.py - > Line 73: ret_MAYBE_FUNCTION_NAME = ('', 422) -File: cheapskate/cheapskate.py - > reaches line 55, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -lindseybrockman/api-cache -https://github.com/lindseybrockman/api-cache -Entry file: api-cache/models.py -Scanned: 2016-10-19 13:08:05.979411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gchacaltana/APIFlaskPython -https://github.com/gchacaltana/APIFlaskPython -Entry file: APIFlaskPython/api.py -Scanned: 2016-10-19 13:08:07.283531 -No vulnerabilities found. - - -kxxoling/chatroom -https://github.com/kxxoling/chatroom -Entry file: chatroom/chatroom/views.py -Scanned: 2016-10-19 13:08:08.606032 -No vulnerabilities found. - - -jonwalch/littleURL -https://github.com/jonwalch/littleURL -Entry file: littleURL/shortener.py -Scanned: 2016-10-19 13:08:11.789268 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: littleURL/lib/python3.3/struct.py - -PyPanel/testflaskapp -https://github.com/PyPanel/testflaskapp -Entry file: testflaskapp/testflaskapp/__init__.py -Scanned: 2016-10-19 13:08:13.120666 -No vulnerabilities found. - - -rfaugeroux/instant_server -https://github.com/rfaugeroux/instant_server -Entry file: instant_server/auth_server/server/__init__.py -Scanned: 2016-10-19 13:08:14.653099 -No vulnerabilities found. - - -vbshah1992/microblog -https://github.com/vbshah1992/microblog -Entry file: None -Scanned: 2016-10-19 13:08:15.645735 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -subsetpark/pyACH -https://github.com/subsetpark/pyACH -Entry file: pyACH/ach_web.py -Scanned: 2016-10-19 13:08:17.072194 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -pigeonflight/ughchat -https://github.com/pigeonflight/ughchat -Entry file: ughchat/main.py -Scanned: 2016-10-19 13:08:18.812773 -No vulnerabilities found. - - -areski/a2billing-flask-api -https://github.com/areski/a2billing-flask-api -Entry file: a2billing-flask-api/a2billing_flask_api/app.py -Scanned: 2016-10-19 13:08:23.422735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mastersoftwaresolutions/flask -https://github.com/mastersoftwaresolutions/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:08:24.962320 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -pbt-templates/flask -https://github.com/pbt-templates/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:08:25.553069 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -dlbewley/flask-todo -https://github.com/dlbewley/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 13:08:29.078683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ranom123/flaskdump -https://github.com/ranom123/flaskdump -Entry file: flaskdump/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-19 13:08:35.649176 -No vulnerabilities found. - - -neukzhou/flaskblog -https://github.com/neukzhou/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 13:08:36.222825 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -aphivantrakul/flaskr -https://github.com/aphivantrakul/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:08:36.784418 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joseph8th/flaskapp -https://github.com/joseph8th/flaskapp -Entry file: None -Scanned: 2016-10-19 13:08:38.300738 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joseph8th/flaskapp. - -lkbm/flaskr -https://github.com/lkbm/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:08:40.862229 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ideabin/Ideabin -https://github.com/Ideabin/Ideabin -Entry file: Ideabin/frontend/__init__.py -Scanned: 2016-10-19 13:08:43.737372 -No vulnerabilities found. - - -simonm/flaskCamel -https://github.com/simonm/flaskCamel -Entry file: flaskCamel/flaskcamel/__init__.py -Scanned: 2016-10-19 13:08:45.207384 -Vulnerability 1: -File: flaskCamel/flaskcamel/views.py - > User input at line 162, trigger word ".data": - admin = Users.query.filter_by(username=form.username.data).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 166, trigger word "flash(": - flash(admin.username + ' logged in') - -Vulnerability 2: -File: flaskCamel/flaskcamel/views.py - > User input at line 183, trigger word ".data": - user = Users.query.filter_by(username=form.username.data).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 185: user = Users.query.filter_by(email=form.email.data).first() - File: flaskCamel/flaskcamel/views.py - > Line 192: key = s.dumps([user.username, user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 194: msg = Message('Password reset',sender='your_id@your_host.com', recipients=[user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 195: msg.html = 'Click on this link to reset your password. #http://127.0.0.1:5000/passwordreset/ ' + key + '' -File: flaskCamel/flaskcamel/views.py - > reaches line 202, trigger word "flash(": - flash('Email sent to: ' + user.email) - -Vulnerability 3: -File: flaskCamel/flaskcamel/views.py - > User input at line 185, trigger word ".data": - user = Users.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 183: user = Users.query.filter_by(username=form.username.data).first() - File: flaskCamel/flaskcamel/views.py - > Line 192: key = s.dumps([user.username, user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 194: msg = Message('Password reset',sender='your_id@your_host.com', recipients=[user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 195: msg.html = 'Click on this link to reset your password. #http://127.0.0.1:5000/passwordreset/ ' + key + '' -File: flaskCamel/flaskcamel/views.py - > reaches line 202, trigger word "flash(": - flash('Email sent to: ' + user.email) - -Vulnerability 4: -File: flaskCamel/flaskcamel/views.py - > User input at line 252, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 280: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskCamel/flaskcamel/views.py - > reaches line 252, trigger word "url_for(": - next_url = request.args.get('next') or url_for('index') - -Vulnerability 5: -File: flaskCamel/flaskcamel/views.py - > User input at line 252, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 280: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskCamel/flaskcamel/views.py - > reaches line 255, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 6: -File: flaskCamel/flaskcamel/views.py - > User input at line 259, trigger word "get(": - me = facebook.get('/me') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 264: fb_username = me.data['username'] - File: flaskCamel/flaskcamel/views.py - > Line 266: fb_username = me.data['name'] - File: flaskCamel/flaskcamel/views.py - > Line 268: fb_email = me.data['email'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 272: user.fb_id = me.data['id'] - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 7: -File: flaskCamel/flaskcamel/views.py - > User input at line 260, trigger word ".data": - user = Users.query.filter_by(fb_id=me.data['id']).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 8: -File: flaskCamel/flaskcamel/views.py - > User input at line 264, trigger word ".data": - fb_username = me.data['username'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 266: fb_username = me.data['name'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 9: -File: flaskCamel/flaskcamel/views.py - > User input at line 266, trigger word ".data": - fb_username = me.data['name'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 264: fb_username = me.data['username'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 10: -File: flaskCamel/flaskcamel/views.py - > User input at line 268, trigger word ".data": - fb_email = me.data['email'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - - - -colehudson/flaskApp -https://github.com/colehudson/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-19 13:08:45.747491 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoubleSpout/flask_mvc -https://github.com/DoubleSpout/flask_mvc -Entry file: flask_mvc/trymenu/__init__.py -Scanned: 2016-10-19 13:08:49.639906 -No vulnerabilities found. - - -stroud109/flask_data -https://github.com/stroud109/flask_data -Entry file: flask_data/flask_data.py -Scanned: 2016-10-19 13:08:55.872821 -No vulnerabilities found. - - -Risto-Stevcev/flask-mongodb -https://github.com/Risto-Stevcev/flask-mongodb -Entry file: flask-mongodb/tumblelog/tumblelog/__init__.py -Scanned: 2016-10-19 13:09:00.184284 -No vulnerabilities found. - - -marcelrieger/Flask-Openshift -https://github.com/marcelrieger/Flask-Openshift -Entry file: Flask-Openshift/wsgi/app/__init__.py -Scanned: 2016-10-19 13:09:01.613401 -No vulnerabilities found. - - -infecto/flask-tutorial -https://github.com/infecto/flask-tutorial -Entry file: None -Scanned: 2016-10-19 13:09:03.114436 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -almeida-marcusaf/estudos-Flask -https://github.com/almeida-marcusaf/estudos-Flask -Entry file: None -Scanned: 2016-10-19 13:09:04.626263 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/almeida-marcusaf/estudos-Flask. - -steven-mercatante/Flask-sandbox -https://github.com/steven-mercatante/Flask-sandbox -Entry file: Flask-sandbox/app/__init__.py -Scanned: 2016-10-19 13:09:08.874815 -No vulnerabilities found. - - -stroud109/flask_galore -https://github.com/stroud109/flask_galore -Entry file: flask_galore/flask_galore.py -Scanned: 2016-10-19 13:09:10.088666 -No vulnerabilities found. - - -agutoli/flask-easy -https://github.com/agutoli/flask-easy -Entry file: flask-easy/examples/rest_api/server.py -Scanned: 2016-10-19 13:09:11.336769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mictadlo/flask-examples -https://github.com/mictadlo/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-19 13:09:14.581680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aberle/robo-flask -https://github.com/aberle/robo-flask -Entry file: robo-flask/robo.py -Scanned: 2016-10-19 13:09:15.818163 -No vulnerabilities found. - - -menglewis/cookiecutter-flask -https://github.com/menglewis/cookiecutter-flask -Entry file: None -Scanned: 2016-10-19 13:09:16.320912 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/menglewis/cookiecutter-flask. - -dastagg/flask-talk -https://github.com/dastagg/flask-talk -Entry file: flask-talk/app/__init__.py -Scanned: 2016-10-19 13:09:17.537876 -No vulnerabilities found. - - -chiangf/flask-boiler -https://github.com/chiangf/flask-boiler -Entry file: None -Scanned: 2016-10-19 13:09:18.047529 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ISEAGE-ISU/itocdc-2014-www -https://github.com/ISEAGE-ISU/itocdc-2014-www -Entry file: itocdc-2014-www/webapp.py -Scanned: 2016-10-19 13:09:20.662092 -No vulnerabilities found. - - -Wolniewicz/Flask_And_Robot -https://github.com/Wolniewicz/Flask_And_Robot -Entry file: Flask_And_Robot/app.py -Scanned: 2016-10-19 13:09:22.263081 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GDG-DAKAR/webservices_python_flask -https://github.com/GDG-DAKAR/webservices_python_flask -Entry file: webservices_python_flask/main.py -Scanned: 2016-10-19 13:09:25.544001 -No vulnerabilities found. - - -Bloodevil/flask_cache_server -https://github.com/Bloodevil/flask_cache_server -Entry file: flask_cache_server/main.py -Scanned: 2016-10-19 13:09:26.849294 -Vulnerability 1: -File: flask_cache_server/cached/tumblr.py - > User input at line 7, trigger word "get(": - r = requests.get(url) -Reassigned in: - File: flask_cache_server/cached/tumblr.py - > Line 16: content = r.content - File: flask_cache_server/cached/tumblr.py - > Line 17: ret_MAYBE_FUNCTION_NAME = content - File: flask_cache_server/cached/tumblr.py - > Line 10: post = 'created''modified''url''content'datetime.now()Noneurlcontent -File: flask_cache_server/cached/tumblr.py - > reaches line 9, trigger word "replace(": - content = r.content.replace(app.config['target_domain'], app.config['server']) - - - -biilmann/flask-token-auth -https://github.com/biilmann/flask-token-auth -Entry file: flask-token-auth/app.py -Scanned: 2016-10-19 13:09:28.128811 -No vulnerabilities found. - - -hnphan/wtf-server-flask -https://github.com/hnphan/wtf-server-flask -Entry file: wtf-server-flask/app.py -Scanned: 2016-10-19 13:09:32.225916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PuZheng/Flask-DataBrowser -https://github.com/PuZheng/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-19 13:09:32.753588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vosahloj/flasky_original -https://github.com/vosahloj/flasky_original -Entry file: flasky_original/hello.py -Scanned: 2016-10-19 13:09:38.111536 -No vulnerabilities found. - - -tejovanthn/tejovanthn -https://github.com/tejovanthn/tejovanthn -Entry file: tejovanthn/routes.py -Scanned: 2016-10-19 13:09:38.610553 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mixedmedia/WebApp -https://github.com/mixedmedia/WebApp -Entry file: WebApp/hello.py -Scanned: 2016-10-19 13:09:40.839476 -No vulnerabilities found. - - -r0rshark/iOccupancyServer -https://github.com/r0rshark/iOccupancyServer -Entry file: iOccupancyServer/app.py -Scanned: 2016-10-19 13:09:42.380785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aliyarahman/community-learning-site -https://github.com/aliyarahman/community-learning-site -Entry file: community-learning-site/app/__init__.py -Scanned: 2016-10-19 13:09:48.656159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lindseybrockman/api-cache -https://github.com/lindseybrockman/api-cache -Entry file: api-cache/models.py -Scanned: 2016-10-19 13:09:49.145139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dinoshauer/img-resize -https://github.com/Dinoshauer/img-resize -Entry file: img-resize/app.py -Scanned: 2016-10-19 13:09:50.830467 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andreagrandi/floggr -https://github.com/andreagrandi/floggr -Entry file: floggr/floggr.py -Scanned: 2016-10-19 13:09:52.144955 -No vulnerabilities found. - - -bloy/contact-potion -https://github.com/bloy/contact-potion -Entry file: contact-potion/contact_potion/app.py -Scanned: 2016-10-19 13:09:53.476202 -No vulnerabilities found. - - -jonwalch/littleURL -https://github.com/jonwalch/littleURL -Entry file: littleURL/shortener.py -Scanned: 2016-10-19 13:09:57.061076 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: littleURL/lib/python3.3/struct.py - -bw-giraffe/Venus -https://github.com/bw-giraffe/Venus -Entry file: Venus/venusapp.py -Scanned: 2016-10-19 13:10:01.293878 -No vulnerabilities found. - - -dastagg/microblog -https://github.com/dastagg/microblog -Entry file: None -Scanned: 2016-10-19 13:10:01.782288 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lazy-night/yukkuri-server -https://github.com/lazy-night/yukkuri-server -Entry file: yukkuri-server/app.py -Scanned: 2016-10-19 13:10:06.904849 -No vulnerabilities found. - - -vbshah1992/microblog -https://github.com/vbshah1992/microblog -Entry file: None -Scanned: 2016-10-19 13:10:07.446329 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Rorosha/sqlApp -https://github.com/Rorosha/sqlApp -Entry file: sqlApp/app.py -Scanned: 2016-10-19 13:10:08.770984 -No vulnerabilities found. - - -DMzda/cann-tables -https://github.com/DMzda/cann-tables -Entry file: cann-tables/cann_tables/__init__.py -Scanned: 2016-10-19 13:10:10.130810 -Vulnerability 1: -File: cann-tables/cann_tables/views.py - > User input at line 32, trigger word "get(": - wanted_leagues = request.cookies.get('leagues').split(',') -Reassigned in: - File: cann-tables/cann_tables/views.py - > Line 16: wanted_leagues = None - File: cann-tables/cann_tables/views.py - > Line 22: wanted_leagues = request.form.getlist('league') - File: cann-tables/cann_tables/views.py - > Line 35: leagues = [league for league in all_leagues] - File: cann-tables/cann_tables/views.py - > Line 39: leagues = all_leagues - File: cann-tables/cann_tables/views.py - > Line 63: ret_MAYBE_FUNCTION_NAME = response - File: cann-tables/cann_tables/views.py - > Line 15: leagues = None - File: cann-tables/cann_tables/views.py - > Line 25: leagues = all_leagues -File: cann-tables/cann_tables/views.py - > reaches line 53, trigger word "render_template(": - response = make_response(render_template('index.html',all_leagues=all_leagues, leagues=leagues, data=data, filtered=filtered)) - -Vulnerability 2: -File: cann-tables/cann_tables/views.py - > User input at line 32, trigger word "get(": - wanted_leagues = request.cookies.get('leagues').split(',') -Reassigned in: - File: cann-tables/cann_tables/views.py - > Line 16: wanted_leagues = None - File: cann-tables/cann_tables/views.py - > Line 22: wanted_leagues = request.form.getlist('league') - File: cann-tables/cann_tables/views.py - > Line 35: leagues = [league for league in all_leagues] - File: cann-tables/cann_tables/views.py - > Line 39: leagues = all_leagues - File: cann-tables/cann_tables/views.py - > Line 63: ret_MAYBE_FUNCTION_NAME = response - File: cann-tables/cann_tables/views.py - > Line 15: leagues = None - File: cann-tables/cann_tables/views.py - > Line 25: leagues = all_leagues -File: cann-tables/cann_tables/views.py - > reaches line 61, trigger word "set_cookie(": - response.set_cookie('leagues', ','.join(wanted_leagues),expires=expires) - -Vulnerability 3: -File: cann-tables/cann_tables/views.py - > User input at line 84, trigger word ".data": - user = User.query.filter(User.username == form.username.data).first() -File: cann-tables/cann_tables/views.py - > reaches line 84, trigger word "filter(": - user = User.query.filter(User.username == form.username.data).first() - - - -pigeonflight/ughchat -https://github.com/pigeonflight/ughchat -Entry file: ughchat/main.py -Scanned: 2016-10-19 13:10:11.658776 -No vulnerabilities found. - - -elvinyung/quimbu -https://github.com/elvinyung/quimbu -Entry file: quimbu/quimbu.py -Scanned: 2016-10-19 13:10:12.984531 -Vulnerability 1: -File: quimbu/quimbu.py - > User input at line 64, trigger word "form[": - username = request.form['username'] -File: quimbu/quimbu.py - > reaches line 67, trigger word "execute(": - elif db.execute('select * from accounts where username=?', (username)).fetchone(): - -Vulnerability 2: -File: quimbu/quimbu.py - > User input at line 64, trigger word "form[": - username = request.form['username'] -File: quimbu/quimbu.py - > reaches line 77, trigger word "execute(": - db.execute('insert into accounts (username, password, acctType) values (?, ?, ?)', (username, password, acct_type)) - -Vulnerability 3: -File: quimbu/quimbu.py - > User input at line 71, trigger word "form[": - password = request.form['password'] -File: quimbu/quimbu.py - > reaches line 77, trigger word "execute(": - db.execute('insert into accounts (username, password, acctType) values (?, ?, ?)', (username, password, acct_type)) - -Vulnerability 4: -File: quimbu/quimbu.py - > User input at line 89, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: quimbu/quimbu.py - > Line 99: session['username'] = username - File: quimbu/quimbu.py - > Line 98: session['logged_in'] = True -File: quimbu/quimbu.py - > reaches line 90, trigger word "execute(": - username_row = db.execute('select * from accounts where username=?', (username)).fetchone() - -Vulnerability 5: -File: quimbu/quimbu.py - > User input at line 127, trigger word "form[": - post_title = request.form['title'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 6: -File: quimbu/quimbu.py - > User input at line 131, trigger word "form[": - post_link = request.form['link'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 7: -File: quimbu/quimbu.py - > User input at line 132, trigger word "form[": - post_content = request.form['content'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - - - -csu/IdeaDB -https://github.com/csu/IdeaDB -Entry file: IdeaDB/server.py -Scanned: 2016-10-19 13:10:16.385613 -No vulnerabilities found. - - -baliga-lab/mtbwebtools -https://github.com/baliga-lab/mtbwebtools -Entry file: mtbwebtools/app/__init__.py -Scanned: 2016-10-19 13:10:18.603320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Rosk/flasqlite -https://github.com/Rosk/flasqlite -Entry file: flasqlite/app/__init__.py -Scanned: 2016-10-19 13:10:20.079530 -Vulnerability 1: -File: flasqlite/app/__init__.py - > User input at line 159, trigger word "form[": - user = query_db('select * from user where user_name = ?', [request.form['username']],one=True) -Reassigned in: - File: flasqlite/app/__init__.py - > Line 167: session['user_id'] = user['user_id'] - File: flasqlite/app/__init__.py - > Line 168: session['user_name'] = user['user_name'] - File: flasqlite/app/__init__.py - > Line 169: session['user_status'] = user['user_status'] - File: flasqlite/app/__init__.py - > Line 170: session['user_points'] = user['user_points'] -File: flasqlite/app/__init__.py - > reaches line 165, trigger word "flash(": - flash('Sie sind jetzt eingeloggt. Herzlich Willkommen, ' + user['user_name'] + '!', 'hinweis') - -Vulnerability 2: -File: flasqlite/app/__init__.py - > User input at line 203, trigger word "form[": - uname = request.form['user_name'] -Reassigned in: - File: flasqlite/app/__init__.py - > Line 225: session['user_name'] = uname - File: flasqlite/app/__init__.py - > Line 226: session['user_edit'] = True - File: flasqlite/app/__init__.py - > Line 201: session['user_edit'] = False -File: flasqlite/app/__init__.py - > reaches line 222, trigger word "execute(": - db.execute('UPDATE user SET user_name=?, user_email=?, user_land=? WHERE user_id=?', [uname, uemail, uland, uid]) - -Vulnerability 3: -File: flasqlite/app/__init__.py - > User input at line 204, trigger word "form[": - uemail = request.form['user_email'] -File: flasqlite/app/__init__.py - > reaches line 222, trigger word "execute(": - db.execute('UPDATE user SET user_name=?, user_email=?, user_land=? WHERE user_id=?', [uname, uemail, uland, uid]) - -Vulnerability 4: -File: flasqlite/app/__init__.py - > User input at line 205, trigger word "form[": - uland = request.form['user_land'] -File: flasqlite/app/__init__.py - > reaches line 222, trigger word "execute(": - db.execute('UPDATE user SET user_name=?, user_email=?, user_land=? WHERE user_id=?', [uname, uemail, uland, uid]) - -Vulnerability 5: -File: flasqlite/app/jscripts.py - > User input at line 14, trigger word "get(": - a = request.args.get('a', 0,type=int) -Reassigned in: - File: flasqlite/app/jscripts.py - > Line 16: res = a + b -File: flasqlite/app/jscripts.py - > reaches line 17, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(ergebnis=res) - -Vulnerability 6: -File: flasqlite/app/jscripts.py - > User input at line 15, trigger word "get(": - b = request.args.get('b', 0,type=int) -Reassigned in: - File: flasqlite/app/jscripts.py - > Line 16: res = a + b -File: flasqlite/app/jscripts.py - > reaches line 17, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(ergebnis=res) - - - -fengsp/flask-session -https://github.com/fengsp/flask-session -Entry file: flask-session/examples/hello.py -Scanned: 2016-10-19 13:10:22.635967 -No vulnerabilities found. - - -marshmallow-code/flask-marshmallow -https://github.com/marshmallow-code/flask-marshmallow -Entry file: flask-marshmallow/flask_marshmallow/__init__.py -Scanned: 2016-10-19 13:10:24.193695 -Vulnerability 1: -File: flask-marshmallow/flask_marshmallow/schema.py - > User input at line 35, trigger word ".data": - data = self.dump(obj,many=many).data -File: flask-marshmallow/flask_marshmallow/schema.py - > reaches line 36, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = flask.jsonify(data, args,kwargs) - - - -alyssaq/celery-flask-demo -https://github.com/alyssaq/celery-flask-demo -Entry file: celery-flask-demo/app.py -Scanned: 2016-10-19 13:10:25.494809 -Vulnerability 1: -File: celery-flask-demo/app.py - > User input at line 14, trigger word "get(": - res = tasks.add.delay(int(request.form.get('num1', 0)), int(request.form.get('num2', 0))) -File: celery-flask-demo/app.py - > reaches line 18, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/result/' + res.id) - - - -dlbewley/flask-todo -https://github.com/dlbewley/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 13:10:25.989646 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jbn/cssbloggers -https://github.com/jbn/cssbloggers -Entry file: cssbloggers/main.py -Scanned: 2016-10-19 13:10:28.436591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bmcharek/flaskapp -https://github.com/bmcharek/flaskapp -Entry file: None -Scanned: 2016-10-19 13:10:32.447913 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bmcharek/flaskapp. - -dk-da/flaskr -https://github.com/dk-da/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:10:33.949596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joseph8th/flaskapp -https://github.com/joseph8th/flaskapp -Entry file: None -Scanned: 2016-10-19 13:10:38.435000 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joseph8th/flaskapp. - -harisubramaniam/flaskr -https://github.com/harisubramaniam/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:10:39.922046 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sasaporta/s3multifile -https://github.com/sasaporta/s3multifile -Entry file: s3multifile/test.py -Scanned: 2016-10-19 13:10:42.161778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simonm/flaskCamel -https://github.com/simonm/flaskCamel -Entry file: flaskCamel/flaskcamel/__init__.py -Scanned: 2016-10-19 13:10:44.630073 -Vulnerability 1: -File: flaskCamel/flaskcamel/views.py - > User input at line 162, trigger word ".data": - admin = Users.query.filter_by(username=form.username.data).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 166, trigger word "flash(": - flash(admin.username + ' logged in') - -Vulnerability 2: -File: flaskCamel/flaskcamel/views.py - > User input at line 183, trigger word ".data": - user = Users.query.filter_by(username=form.username.data).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 185: user = Users.query.filter_by(email=form.email.data).first() - File: flaskCamel/flaskcamel/views.py - > Line 192: key = s.dumps([user.username, user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 194: msg = Message('Password reset',sender='your_id@your_host.com', recipients=[user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 195: msg.html = 'Click on this link to reset your password. #http://127.0.0.1:5000/passwordreset/ ' + key + '' -File: flaskCamel/flaskcamel/views.py - > reaches line 202, trigger word "flash(": - flash('Email sent to: ' + user.email) - -Vulnerability 3: -File: flaskCamel/flaskcamel/views.py - > User input at line 185, trigger word ".data": - user = Users.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 183: user = Users.query.filter_by(username=form.username.data).first() - File: flaskCamel/flaskcamel/views.py - > Line 192: key = s.dumps([user.username, user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 194: msg = Message('Password reset',sender='your_id@your_host.com', recipients=[user.email]) - File: flaskCamel/flaskcamel/views.py - > Line 195: msg.html = 'Click on this link to reset your password. #http://127.0.0.1:5000/passwordreset/ ' + key + '' -File: flaskCamel/flaskcamel/views.py - > reaches line 202, trigger word "flash(": - flash('Email sent to: ' + user.email) - -Vulnerability 4: -File: flaskCamel/flaskcamel/views.py - > User input at line 252, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 280: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskCamel/flaskcamel/views.py - > reaches line 252, trigger word "url_for(": - next_url = request.args.get('next') or url_for('index') - -Vulnerability 5: -File: flaskCamel/flaskcamel/views.py - > User input at line 252, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 280: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskCamel/flaskcamel/views.py - > reaches line 255, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 6: -File: flaskCamel/flaskcamel/views.py - > User input at line 259, trigger word "get(": - me = facebook.get('/me') -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 264: fb_username = me.data['username'] - File: flaskCamel/flaskcamel/views.py - > Line 266: fb_username = me.data['name'] - File: flaskCamel/flaskcamel/views.py - > Line 268: fb_email = me.data['email'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 272: user.fb_id = me.data['id'] - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 7: -File: flaskCamel/flaskcamel/views.py - > User input at line 260, trigger word ".data": - user = Users.query.filter_by(fb_id=me.data['id']).first() -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 8: -File: flaskCamel/flaskcamel/views.py - > User input at line 264, trigger word ".data": - fb_username = me.data['username'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 266: fb_username = me.data['name'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 9: -File: flaskCamel/flaskcamel/views.py - > User input at line 266, trigger word ".data": - fb_username = me.data['name'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 264: fb_username = me.data['username'] - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - -Vulnerability 10: -File: flaskCamel/flaskcamel/views.py - > User input at line 268, trigger word ".data": - fb_email = me.data['email'] -Reassigned in: - File: flaskCamel/flaskcamel/views.py - > Line 271: user = Users(fb_username, 'temp', fb_email, role) - File: flaskCamel/flaskcamel/views.py - > Line 277: session['user_id'] = user.uid - File: flaskCamel/flaskcamel/views.py - > Line 257: session['fb_access_token'] = (resp['access_token'], '') - File: flaskCamel/flaskcamel/views.py - > Line 260: user = Users.query.filter_by(fb_id=me.data['id']).first() -File: flaskCamel/flaskcamel/views.py - > reaches line 279, trigger word "flash(": - flash('You are now logged in as %s' % user.username) - - - -smockoro/FlaskSample -https://github.com/smockoro/FlaskSample -Entry file: FlaskSample/sample2.py -Scanned: 2016-10-19 13:10:45.879146 -No vulnerabilities found. - - -balaaagi/FlaskTuts -https://github.com/balaaagi/FlaskTuts -Entry file: FlaskTuts/app/__init__.py -Scanned: 2016-10-19 13:10:51.104239 -No vulnerabilities found. - - -vatslav/flask1 -https://github.com/vatslav/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 13:10:51.778556 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -mjegilbert/blank-flask -https://github.com/mjegilbert/blank-flask -Entry file: blank-flask/project/__init__.py -Scanned: 2016-10-19 13:10:54.841017 -No vulnerabilities found. - - -garynakanelua/hello-flask -https://github.com/garynakanelua/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-19 13:10:58.480511 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -jaapverloop/flask-knot -https://github.com/jaapverloop/flask-knot -Entry file: flask-knot/test_knot.py -Scanned: 2016-10-19 13:11:02.719142 -No vulnerabilities found. - - -Shidima/flask-skeleton -https://github.com/Shidima/flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:11:03.230894 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Shidima/flask-skeleton. - -robschwartz/flask_hello -https://github.com/robschwartz/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 13:11:05.858303 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danielsamuels/gantt-flask -https://github.com/danielsamuels/gantt-flask -Entry file: gantt-flask/gantt/app.py -Scanned: 2016-10-19 13:11:10.079119 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timtan/flask-starter -https://github.com/timtan/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 13:11:10.573367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -binishbaig/flask_hello -https://github.com/binishbaig/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-19 13:11:11.170027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -azach/flask-todo -https://github.com/azach/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 13:11:14.157379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -segof/flask_Flitter -https://github.com/segof/flask_Flitter -Entry file: flask_Flitter/flitter_db.py -Scanned: 2016-10-19 13:11:17.507237 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexFrazer/flask_tutorial -https://github.com/AlexFrazer/flask_tutorial -Entry file: None -Scanned: 2016-10-19 13:11:18.006050 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sbrother/dsla-web-service -https://github.com/sbrother/dsla-web-service -Entry file: dsla-web-service/times_tracker/main.py -Scanned: 2016-10-19 13:11:21.391747 -No vulnerabilities found. - - -cz0930/funtyping -https://github.com/cz0930/funtyping -Entry file: funtyping/flask_learn/httpserver.py -Scanned: 2016-10-19 13:11:23.044704 -No vulnerabilities found. - - -ISEAGE-ISU/itocdc-2014-www -https://github.com/ISEAGE-ISU/itocdc-2014-www -Entry file: itocdc-2014-www/webapp.py -Scanned: 2016-10-19 13:11:24.592598 -No vulnerabilities found. - - -FLEXSIS/FlaskMongoBootstrap -https://github.com/FLEXSIS/FlaskMongoBootstrap -Entry file: FlaskMongoBootstrap/flask_application/__init__.py -Scanned: 2016-10-19 13:11:26.162556 -No vulnerabilities found. - - -Fingel/flaskImageUploader -https://github.com/Fingel/flaskImageUploader -Entry file: flaskImageUploader/app.py -Scanned: 2016-10-19 13:11:27.521341 -No vulnerabilities found. - - -ashifkalladi/Quiz-Application-in-flask -https://github.com/ashifkalladi/Quiz-Application-in-flask -Entry file: Quiz-Application-in-flask/app.py -Scanned: 2016-10-19 13:11:28.807354 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joastbg/python-flask-skeleton -https://github.com/joastbg/python-flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:11:29.377802 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joastbg/python-flask-skeleton. - -Little--ZM/test_flask_blog -https://github.com/Little--ZM/test_flask_blog -Entry file: test_flask_blog/modules/app.py -Scanned: 2016-10-19 13:11:32.524328 -No vulnerabilities found. - - -amygdalama/flask-mega-tutorial -https://github.com/amygdalama/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:11:34.029435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Data-drone/test_flaskapp -https://github.com/Data-drone/test_flaskapp -Entry file: test_flaskapp/routes.py -Scanned: 2016-10-19 13:11:40.839808 -No vulnerabilities found. - - -dn-aoi23/python-git -https://github.com/dn-aoi23/python-git -Entry file: None -Scanned: 2016-10-19 13:11:42.155819 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dn-aoi23/python-git. - -morgan-del/ft-tutorial -https://github.com/morgan-del/ft-tutorial -Entry file: None -Scanned: 2016-10-19 13:11:43.548080 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morgan-del/ft-tutorial. - -tlukasiak/yolo-avenger -https://github.com/tlukasiak/yolo-avenger -Entry file: None -Scanned: 2016-10-19 13:11:46.361667 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tlukasiak/yolo-avenger. - -kumaranzone/myflaskblogger -https://github.com/kumaranzone/myflaskblogger -Entry file: myflaskblogger/app/__init__.py -Scanned: 2016-10-19 13:11:47.969630 -No vulnerabilities found. - - -tasti/Twittre -https://github.com/tasti/Twittre -Entry file: Twittre/twittre.py -Scanned: 2016-10-19 13:11:54.826763 -Vulnerability 1: -File: Twittre/twittre.py - > User input at line 217, trigger word "form[": - username = request.form['username'].strip() -Reassigned in: - File: Twittre/twittre.py - > Line 239: session['username'] = username - File: Twittre/twittre.py - > Line 240: session['admin'] = False - File: Twittre/twittre.py - > Line 238: session['logged_in'] = True -File: Twittre/twittre.py - > reaches line 235, trigger word "execute(": - db.execute('insert into users (username, username_lower, password, salt, admin) values (?, ?, ?, ?, ?)', [username, username_lower, hashPassword, salt, 0]) - - - -modbert/Robot_Challenge_Repository -https://github.com/modbert/Robot_Challenge_Repository -Entry file: None -Scanned: 2016-10-19 13:11:56.113630 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/modbert/Robot_Challenge_Repository. - -Dinoshauer/img-resize -https://github.com/Dinoshauer/img-resize -Entry file: img-resize/app.py -Scanned: 2016-10-19 13:11:56.617421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gentle/quasselflask -https://github.com/Gentle/quasselflask -Entry file: quasselflask/main.py -Scanned: 2016-10-19 13:12:03.870248 -No vulnerabilities found. - - -mariofix/ad-login -https://github.com/mariofix/ad-login -Entry file: ad-login/adlogin.py -Scanned: 2016-10-19 13:12:05.195594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jimbog/blogger -https://github.com/jimbog/blogger -Entry file: blogger/generator.py -Scanned: 2016-10-19 13:12:08.405136 -No vulnerabilities found. - - -jespino/foobadges -https://github.com/jespino/foobadges -Entry file: foobadges/foobadges.py -Scanned: 2016-10-19 13:12:11.657249 -No vulnerabilities found. - - -burck1/sam-website -https://github.com/burck1/sam-website -Entry file: sam-website/__init__.py -Scanned: 2016-10-19 13:12:13.014267 -No vulnerabilities found. - - -tristaneuan/microblog -https://github.com/tristaneuan/microblog -Entry file: None -Scanned: 2016-10-19 13:12:13.512665 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -elvinyung/quimbu -https://github.com/elvinyung/quimbu -Entry file: quimbu/quimbu.py -Scanned: 2016-10-19 13:12:14.838621 -Vulnerability 1: -File: quimbu/quimbu.py - > User input at line 64, trigger word "form[": - username = request.form['username'] -File: quimbu/quimbu.py - > reaches line 67, trigger word "execute(": - elif db.execute('select * from accounts where username=?', (username)).fetchone(): - -Vulnerability 2: -File: quimbu/quimbu.py - > User input at line 64, trigger word "form[": - username = request.form['username'] -File: quimbu/quimbu.py - > reaches line 77, trigger word "execute(": - db.execute('insert into accounts (username, password, acctType) values (?, ?, ?)', (username, password, acct_type)) - -Vulnerability 3: -File: quimbu/quimbu.py - > User input at line 71, trigger word "form[": - password = request.form['password'] -File: quimbu/quimbu.py - > reaches line 77, trigger word "execute(": - db.execute('insert into accounts (username, password, acctType) values (?, ?, ?)', (username, password, acct_type)) - -Vulnerability 4: -File: quimbu/quimbu.py - > User input at line 89, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: quimbu/quimbu.py - > Line 99: session['username'] = username - File: quimbu/quimbu.py - > Line 98: session['logged_in'] = True -File: quimbu/quimbu.py - > reaches line 90, trigger word "execute(": - username_row = db.execute('select * from accounts where username=?', (username)).fetchone() - -Vulnerability 5: -File: quimbu/quimbu.py - > User input at line 127, trigger word "form[": - post_title = request.form['title'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 6: -File: quimbu/quimbu.py - > User input at line 131, trigger word "form[": - post_link = request.form['link'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 7: -File: quimbu/quimbu.py - > User input at line 132, trigger word "form[": - post_content = request.form['content'] -File: quimbu/quimbu.py - > reaches line 136, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - - - -zzdoo/trello-service -https://github.com/zzdoo/trello-service -Entry file: trello-service/trello_wrapper_test.py -Scanned: 2016-10-19 13:12:16.078977 -No vulnerabilities found. - - -kirang89/flappi -https://github.com/kirang89/flappi -Entry file: flappi/api/__init__.py -Scanned: 2016-10-19 13:12:19.415435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Amanda-Clark/BartStats -https://github.com/Amanda-Clark/BartStats -Entry file: BartStats/BartStats/BartStats/BartStats.py -Scanned: 2016-10-19 13:12:20.741391 -Vulnerability 1: -File: BartStats/BartStats/BartStats/BartStats.py - > User input at line 35, trigger word "form[": - station = request.form['station'] -Reassigned in: - File: BartStats/BartStats/BartStats/BartStats.py - > Line 36: query = 'SELECT * FROM stats WHERE station_name='%s'' % station - File: BartStats/BartStats/BartStats/BartStats.py - > Line 40: img = showGraph(row, num, station) - File: BartStats/BartStats/BartStats/BartStats.py - > Line 41: ret_MAYBE_FUNCTION_NAME = img -File: BartStats/BartStats/BartStats/BartStats.py - > reaches line 37, trigger word "execute(": - cursor.execute(query) - - - -ISEAGE-ISU/voting-wars -https://github.com/ISEAGE-ISU/voting-wars -Entry file: voting-wars/webapp.py -Scanned: 2016-10-19 13:12:23.073841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plumdog/flask_table -https://github.com/plumdog/flask_table -Entry file: flask_table/examples/simple_app.py -Scanned: 2016-10-19 13:12:25.742472 -No vulnerabilities found. - - -jeffknupp/flask_sandboy -https://github.com/jeffknupp/flask_sandboy -Entry file: flask_sandboy/tests/test_sandboy.py -Scanned: 2016-10-19 13:12:27.417457 -No vulnerabilities found. - - -sh4nks/flask-plugins -https://github.com/sh4nks/flask-plugins -Entry file: flask-plugins/tests/pluginmanager_tests.py -Scanned: 2016-10-19 13:12:28.858646 -No vulnerabilities found. - - -miguelgrinberg/flask-webcast -https://github.com/miguelgrinberg/flask-webcast -Entry file: flask-webcast/03-forms/hello.py -Scanned: 2016-10-19 13:12:30.191157 -Vulnerability 1: -File: flask-webcast/03-forms/hello.py - > User input at line 8, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-webcast/03-forms/hello.py - > Line 6: name = None -File: flask-webcast/03-forms/hello.py - > reaches line 9, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',name=name) - - - -thisissoon/Flask-Via -https://github.com/thisissoon/Flask-Via -Entry file: Flask-Via/flask_via/__init__.py -Scanned: 2016-10-19 13:12:32.460641 -No vulnerabilities found. - - -iiSeymour/Flasked-Notebooks -https://github.com/iiSeymour/Flasked-Notebooks -Entry file: Flasked-Notebooks/app.py -Scanned: 2016-10-19 13:12:33.782762 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tornadotbh/flask -https://github.com/tornadotbh/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:12:35.316570 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jbn/cssbloggers -https://github.com/jbn/cssbloggers -Entry file: cssbloggers/main.py -Scanned: 2016-10-19 13:12:41.293542 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhoufeng1989/flaskr -https://github.com/zhoufeng1989/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:12:44.287984 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ozgebascil/flaskr -https://github.com/ozgebascil/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:12:46.814839 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vosahloj/flasky -https://github.com/vosahloj/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 13:12:48.329377 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brianjgeiger/flaskpractice -https://github.com/brianjgeiger/flaskpractice -Entry file: None -Scanned: 2016-10-19 13:12:52.826836 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yjroot/domainserver -https://github.com/yjroot/domainserver -Entry file: domainserver/dnsserver/__init__.py -Scanned: 2016-10-19 13:12:58.665338 -Vulnerability 1: -File: domainserver/dnsserver/account.py - > User input at line 57, trigger word ".data": - user = g.session.query(User).filter(User.email == field.data).first() -File: domainserver/dnsserver/account.py - > reaches line 57, trigger word "filter(": - user = g.session.query(User).filter(User.email == field.data).first() - -Vulnerability 2: -File: domainserver/dnsserver/account.py - > User input at line 76, trigger word ".data": - user = g.session.query(User).filter(User.email == form.email.data).first() -File: domainserver/dnsserver/account.py - > reaches line 76, trigger word "filter(": - user = g.session.query(User).filter(User.email == form.email.data).first() - -Vulnerability 3: -File: domainserver/dnsserver/domain_cname.py - > User input at line 95, trigger word ".data": - record = g.session.query(RecordCNAME).filter(RecordCNAME.domain == domain).filter(RecordCNAME.name.like(form.name.data)).first() -File: domainserver/dnsserver/domain_cname.py - > reaches line 95, trigger word "filter(": - record = g.session.query(RecordCNAME).filter(RecordCNAME.domain == domain).filter(RecordCNAME.name.like(form.name.data)).first() - -Vulnerability 4: -File: domainserver/dnsserver/domain.py - > User input at line 28, trigger word "form[": - domains = request.form['domain'].split() -Reassigned in: - File: domainserver/dnsserver/domain.py - > Line 30: domains = [] - File: domainserver/dnsserver/domain.py - > Line 54: ret_MAYBE_FUNCTION_NAME = redirect(url_for('domain.index')) -File: domainserver/dnsserver/domain.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('domain_new.html',error_domains=error_domains, domains=domains) - - - -vatslav/flask1 -https://github.com/vatslav/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 13:12:59.290883 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -0xPr0xy/flask-torrent -https://github.com/0xPr0xy/flask-torrent -Entry file: flask-torrent/app/__init__.py -Scanned: 2016-10-19 13:13:02.558389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaapverloop/flask-knot -https://github.com/jaapverloop/flask-knot -Entry file: flask-knot/test_knot.py -Scanned: 2016-10-19 13:13:05.858402 -No vulnerabilities found. - - -plumdog/flask_boilerplate -https://github.com/plumdog/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-19 13:13:06.387733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mlautman/flask_scaffold -https://github.com/mlautman/flask_scaffold -Entry file: flask_scaffold/app/__init__.py -Scanned: 2016-10-19 13:13:09.966674 -No vulnerabilities found. - - -jstacoder/flask-basehead -https://github.com/jstacoder/flask-basehead -Entry file: flask-basehead/flask_basehead/app.py -Scanned: 2016-10-19 13:13:16.334598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rsirres/Flask-Generator -https://github.com/rsirres/Flask-Generator -Entry file: Flask-Generator/generate.py -Scanned: 2016-10-19 13:13:17.606962 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyphirx/generic_flask -https://github.com/cyphirx/generic_flask -Entry file: generic_flask/generic_flask/__init__.py -Scanned: 2016-10-19 13:13:18.963597 -No vulnerabilities found. - - -picwell/flask-tutorial -https://github.com/picwell/flask-tutorial -Entry file: None -Scanned: 2016-10-19 13:13:20.946602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -azach/flask-todo -https://github.com/azach/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 13:13:26.405278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kubkon/flask-uploads -https://github.com/kubkon/flask-uploads -Entry file: flask-uploads/tests.py -Scanned: 2016-10-19 13:13:28.885271 -No vulnerabilities found. - - -crakins/microblog -https://github.com/crakins/microblog -Entry file: None -Scanned: 2016-10-19 13:13:29.401332 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cdtavijit/microblog -https://github.com/cdtavijit/microblog -Entry file: None -Scanned: 2016-10-19 13:13:30.901725 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -danielthiel/FlaskFactoryBone -https://github.com/danielthiel/FlaskFactoryBone -Entry file: FlaskFactoryBone/server.py -Scanned: 2016-10-19 13:13:33.624388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -infothrill/cookiecutter-flask-foundation -https://github.com/infothrill/cookiecutter-flask-foundation -Entry file: cookiecutter-flask-foundation/{{cookiecutter.project_name}}/{{ cookiecutter.repo_name }}/__init__.py -Scanned: 2016-10-19 13:13:37.560077 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Little--ZM/test_flask_blog -https://github.com/Little--ZM/test_flask_blog -Entry file: test_flask_blog/modules/app.py -Scanned: 2016-10-19 13:13:39.105426 -No vulnerabilities found. - - -crisbal/NoteApp-with-Flask -https://github.com/crisbal/NoteApp-with-Flask -Entry file: NoteApp-with-Flask/Main.py -Scanned: 2016-10-19 13:13:43.328302 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krobe/Flask-SurvivorApp -https://github.com/krobe/Flask-SurvivorApp -Entry file: Flask-SurvivorApp/survivorapp/__init__.py -Scanned: 2016-10-19 13:13:44.967637 -No vulnerabilities found. - - -RichardJTorres/flask-mega-tutorial -https://github.com/RichardJTorres/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:13:45.478705 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ashifkalladi/facebook-application-in-flask -https://github.com/ashifkalladi/facebook-application-in-flask -Entry file: facebook-application-in-flask/facebook.py -Scanned: 2016-10-19 13:13:48.815316 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amygdalama/flask-mega-tutorial -https://github.com/amygdalama/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:13:50.316112 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MDCox/EpiAPy -https://github.com/MDCox/EpiAPy -Entry file: None -Scanned: 2016-10-19 13:13:58.019388 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dariusdunlap/flasky-darius -https://github.com/dariusdunlap/flasky-darius -Entry file: None -Scanned: 2016-10-19 13:13:59.315258 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dariusdunlap/flasky-darius. - -ashifkalladi/media-player-application-using-flask -https://github.com/ashifkalladi/media-player-application-using-flask -Entry file: media-player-application-using-flask/run.py -Scanned: 2016-10-19 13:14:09.668249 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xulianghong/picshare -https://github.com/xulianghong/picshare -Entry file: None -Scanned: 2016-10-19 13:14:10.982729 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xulianghong/picshare. - -tallus/monomatapa -https://github.com/tallus/monomatapa -Entry file: monomatapa/monomotapa/__init__.py -Scanned: 2016-10-19 13:14:12.531332 -No vulnerabilities found. - - -yabalaban/noodle-cocaine-app -https://github.com/yabalaban/noodle-cocaine-app -Entry file: noodle-cocaine-app/app.py -Scanned: 2016-10-19 13:14:13.872620 -No vulnerabilities found. - - -plumdog/recipe-for-delicious -https://github.com/plumdog/recipe-for-delicious -Entry file: recipe-for-delicious/recipe/__init__.py -Scanned: 2016-10-19 13:14:15.208254 -No vulnerabilities found. - - -frimmy/helloflask-heroku -https://github.com/frimmy/helloflask-heroku -Entry file: helloflask-heroku/hello.py -Scanned: 2016-10-19 13:14:16.398786 -No vulnerabilities found. - - -sayganesha/betting_pool_web_app -https://github.com/sayganesha/betting_pool_web_app -Entry file: betting_pool_web_app/main_app.py -Scanned: 2016-10-19 13:14:20.586404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -britalmeida/test-assoc -https://github.com/britalmeida/test-assoc -Entry file: None -Scanned: 2016-10-19 13:14:21.782494 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/britalmeida/test-assoc. - -nyakiss/nyanblog -https://github.com/nyakiss/nyanblog -Entry file: nyanblog/blogpy/__init__.py -Scanned: 2016-10-19 13:14:23.697475 -Vulnerability 1: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 37, trigger word "url_for(": - url = request.args.get('next', '') or url_for('home') - -Vulnerability 2: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 39, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 3: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 4: -File: nyanblog/blogpy/views.py - > User input at line 71, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 71, trigger word "url_for(": - url = request.args.get('next', url_for('home')) - -Vulnerability 5: -File: nyanblog/blogpy/views.py - > User input at line 71, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 72, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 6: -File: nyanblog/blogpy/views.py - > User input at line 115, trigger word ".data": - post = Post(g.user, form.text.data, get_tags(form.tags.data.strip())) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 123: ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) -File: nyanblog/blogpy/views.py - > reaches line 119, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 7: -File: nyanblog/blogpy/views.py - > User input at line 115, trigger word ".data": - post = Post(g.user, form.text.data, get_tags(form.tags.data.strip())) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 123: ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) -File: nyanblog/blogpy/views.py - > reaches line 119, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 8: -File: nyanblog/blogpy/views.py - > User input at line 132, trigger word "files[": - file = File(request.files['file']) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 136: ret_MAYBE_FUNCTION_NAME = jsonify(success=False) -File: nyanblog/blogpy/views.py - > reaches line 135, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(success=True, url=file.file_url) - -Vulnerability 9: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 157, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 10: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 157, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 11: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 159, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) - -Vulnerability 12: -File: nyanblog/blogpy/views.py - > User input at line 174, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 174, trigger word "url_for(": - url = request.args.get('next', url_for('home')) - -Vulnerability 13: -File: nyanblog/blogpy/views.py - > User input at line 174, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 175, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 14: -File: nyanblog/blogpy/views.py - > User input at line 180, trigger word "get(": - rss = cache.get('rss') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 186: ret_MAYBE_FUNCTION_NAME = rss -File: nyanblog/blogpy/views.py - > reaches line 184, trigger word "render_template(": - rss = render_template('rss.xml',posts=posts, now=now) - - - -regisf/Strawberry -https://github.com/regisf/Strawberry -Entry file: Strawberry/main.py -Scanned: 2016-10-19 13:14:25.012621 -No vulnerabilities found. - - -davidhax0r/Rocket -https://github.com/davidhax0r/Rocket -Entry file: None -Scanned: 2016-10-19 13:14:28.090811 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kylepotts/droptak-web -https://github.com/kylepotts/droptak-web -Entry file: None -Scanned: 2016-10-19 13:14:42.514882 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saurabh95/sampleflaskapp -https://github.com/saurabh95/sampleflaskapp -Entry file: sampleflaskapp/flaskr.py -Scanned: 2016-10-19 13:14:45.267713 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arilotter/sparky -https://github.com/arilotter/sparky -Entry file: sparky/sparky.py -Scanned: 2016-10-19 13:14:49.742409 -No vulnerabilities found. - - -miguelgrinberg/flask-webcast -https://github.com/miguelgrinberg/flask-webcast -Entry file: flask-webcast/03-forms/hello.py -Scanned: 2016-10-19 13:14:52.193746 -Vulnerability 1: -File: flask-webcast/03-forms/hello.py - > User input at line 8, trigger word "form[": - name = request.form['name'] -Reassigned in: - File: flask-webcast/03-forms/hello.py - > Line 6: name = None -File: flask-webcast/03-forms/hello.py - > reaches line 9, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',name=name) - - - -rayrapetyan/flask-spyne -https://github.com/rayrapetyan/flask-spyne -Entry file: flask-spyne/example/server.py -Scanned: 2016-10-19 13:14:53.498914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iiSeymour/Flasked-Notebooks -https://github.com/iiSeymour/Flasked-Notebooks -Entry file: Flasked-Notebooks/app.py -Scanned: 2016-10-19 13:14:53.992064 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -basilfx/flask-daapserver -https://github.com/basilfx/flask-daapserver -Entry file: None -Scanned: 2016-10-19 13:14:55.584044 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/basilfx/flask-daapserver. - -waitingkuo/flask-sample -https://github.com/waitingkuo/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 13:14:56.068628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -infothrill/flask-socketio-dbus-demo -https://github.com/infothrill/flask-socketio-dbus-demo -Entry file: flask-socketio-dbus-demo/myapp/__init__.py -Scanned: 2016-10-19 13:14:57.377160 -No vulnerabilities found. - - -OpenSystemsLab/flask-widgets -https://github.com/OpenSystemsLab/flask-widgets -Entry file: flask-widgets/example/app.py -Scanned: 2016-10-19 13:14:58.691272 -No vulnerabilities found. - - -fengsp/flask-application-wizard -https://github.com/fengsp/flask-application-wizard -Entry file: flask-application-wizard/make-flaskapp.py -Scanned: 2016-10-19 13:14:59.991416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chiedo/flask-starter -https://github.com/chiedo/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 13:15:00.474306 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devxoul/flask-errorhandler -https://github.com/devxoul/flask-errorhandler -Entry file: flask-errorhandler/flask_errorhandler.py -Scanned: 2016-10-19 13:15:01.693137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iamtonyarmstrong/flasky -https://github.com/iamtonyarmstrong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 13:15:02.196839 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hannah-grape/flaskr -https://github.com/hannah-grape/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:15:02.692079 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dastagg/flasktaskr -https://github.com/dastagg/flasktaskr -Entry file: None -Scanned: 2016-10-19 13:15:03.176178 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StorjOld/promotweet -https://github.com/StorjOld/promotweet -Entry file: None -Scanned: 2016-10-19 13:15:04.376118 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StorjOld/promotweet. - -florije1988/FlaskJson -https://github.com/florije1988/FlaskJson -Entry file: FlaskJson/FlaskJson/FlaskJson.py -Scanned: 2016-10-19 13:15:05.678594 -Vulnerability 1: -File: FlaskJson/FlaskJson/FlaskJson.py - > User input at line 13, trigger word "get(": - n = [request.form.get(x, 0,type=float) for x in 'n1''n2''n3'] -Reassigned in: - File: FlaskJson/FlaskJson/FlaskJson.py - > Line 16: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: FlaskJson/FlaskJson/FlaskJson.py - > reaches line 14, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(max=max(n), min=min(n)) - - - -tsh/flaskBlog -https://github.com/tsh/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-19 13:15:06.252701 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -tornadotbh/flask2 -https://github.com/tornadotbh/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-19 13:15:11.749746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florije1988/flask_todo -https://github.com/florije1988/flask_todo -Entry file: None -Scanned: 2016-10-19 13:15:16.210060 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jstacoder/flask-basehead -https://github.com/jstacoder/flask-basehead -Entry file: flask-basehead/flask_basehead/app.py -Scanned: 2016-10-19 13:15:17.730047 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kawasakitoshiya/flask_sample -https://github.com/kawasakitoshiya/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-19 13:15:19.505167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SandeR2012/flask_blog -https://github.com/SandeR2012/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-19 13:15:23.039600 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LaunchKey/launchkey-flask -https://github.com/LaunchKey/launchkey-flask -Entry file: launchkey-flask/example/app.py -Scanned: 2016-10-19 13:15:24.627960 -Vulnerability 1: -File: launchkey-flask/example/app.py - > User input at line 43, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: launchkey-flask/example/app.py - > Line 46: auth_request = launchkey.authorize(username) -File: launchkey-flask/example/app.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('response'auth_request) - - - -crakins/microblog -https://github.com/crakins/microblog -Entry file: None -Scanned: 2016-10-19 13:15:26.124250 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -olidin/FlaskCoolProp -https://github.com/olidin/FlaskCoolProp -Entry file: FlaskCoolProp/app/__init__.py -Scanned: 2016-10-19 13:15:27.388344 -No vulnerabilities found. - - -xi/flekky -https://github.com/xi/flekky -Entry file: None -Scanned: 2016-10-19 13:15:45.346116 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xi/flekky. - -paulegan/flask-assets-dist-example -https://github.com/paulegan/flask-assets-dist-example -Entry file: flask-assets-dist-example/myapp/__init__.py -Scanned: 2016-10-19 13:15:52.044181 -No vulnerabilities found. - - -tildedave/cassandra-flask-sessions -https://github.com/tildedave/cassandra-flask-sessions -Entry file: cassandra-flask-sessions/server.py -Scanned: 2016-10-19 13:15:53.248870 -Vulnerability 1: -File: cassandra-flask-sessions/session.py - > User input at line 48, trigger word "get(": - sid = request.cookies.get(app.session_cookie_name) -Reassigned in: - File: cassandra-flask-sessions/session.py - > Line 50: sid = self.generate_sid() - File: cassandra-flask-sessions/session.py - > Line 51: ret_MAYBE_FUNCTION_NAME = self.session_class(sid=sid, new=True) - File: cassandra-flask-sessions/session.py - > Line 57: data = self.serializer.loads(rows[0].session_data) - File: cassandra-flask-sessions/session.py - > Line 58: ret_MAYBE_FUNCTION_NAME = self.session_class(data,sid=sid) - File: cassandra-flask-sessions/session.py - > Line 60: ret_MAYBE_FUNCTION_NAME = self.session_class(sid=sid, new=True) -File: cassandra-flask-sessions/session.py - > reaches line 53, trigger word "execute(": - rows = self.session.execute(self.select_query, (self.prefix + sid)) - - - -tonytan748/python_flask_blog -https://github.com/tonytan748/python_flask_blog -Entry file: None -Scanned: 2016-10-19 13:15:54.813970 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tonytan748/python_flask_blog. - -omab/psa-flask-mongoengine -https://github.com/omab/psa-flask-mongoengine -Entry file: psa-flask-mongoengine/example/__init__.py -Scanned: 2016-10-19 13:15:56.019974 -No vulnerabilities found. - - -Airead/angular-flask-seed -https://github.com/Airead/angular-flask-seed -Entry file: angular-flask-seed/flaskApp/main.py -Scanned: 2016-10-19 13:15:57.328496 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mphuie/nginx_uwsgi_flask_base -https://github.com/mphuie/nginx_uwsgi_flask_base -Entry file: nginx_uwsgi_flask_base/myapp/__init__.py -Scanned: 2016-10-19 13:15:58.519529 -No vulnerabilities found. - - -josuebrunel/getting_started_with_flask -https://github.com/josuebrunel/getting_started_with_flask -Entry file: None -Scanned: 2016-10-19 13:15:59.716145 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/josuebrunel/getting_started_with_flask. - -gloebit/python-flask-gloebit -https://github.com/gloebit/python-flask-gloebit -Entry file: None -Scanned: 2016-10-19 13:16:01.032775 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gloebit/python-flask-gloebit. - -jawsthegame/jawsapps -https://github.com/jawsthegame/jawsapps -Entry file: jawsapps/jawsapps/__init__.py -Scanned: 2016-10-19 13:16:02.225073 -No vulnerabilities found. - - -TransactCharlie/fake-airline-api -https://github.com/TransactCharlie/fake-airline-api -Entry file: fake-airline-api/fake_airline_api.py -Scanned: 2016-10-19 13:16:03.490585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elvinyung/florum -https://github.com/elvinyung/florum -Entry file: florum/app/__init__.py -Scanned: 2016-10-19 13:16:04.825037 -Vulnerability 1: -File: florum/app/views.py - > User input at line 53, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: florum/app/views.py - > Line 63: session['username'] = username - File: florum/app/views.py - > Line 62: session['logged_in'] = True -File: florum/app/views.py - > reaches line 54, trigger word "execute(": - username_row = db.execute('select * from accounts where username=?', (username)).fetchone() - -Vulnerability 2: -File: florum/app/views.py - > User input at line 91, trigger word "form[": - post_title = request.form['title'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 3: -File: florum/app/views.py - > User input at line 95, trigger word "form[": - post_link = request.form['link'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 4: -File: florum/app/views.py - > User input at line 96, trigger word "form[": - post_content = request.form['content'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - - - -graup/servocam -https://github.com/graup/servocam -Entry file: servocam/api/app.py -Scanned: 2016-10-19 13:16:06.175679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dariusdunlap/flasky-darius -https://github.com/dariusdunlap/flasky-darius -Entry file: None -Scanned: 2016-10-19 13:16:06.658135 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dariusdunlap/flasky-darius. - -OpenShift-Cookbook/chapter8-recipe2 -https://github.com/OpenShift-Cookbook/chapter8-recipe2 -Entry file: chapter8-recipe2/hello.py -Scanned: 2016-10-19 13:16:08.025835 -No vulnerabilities found. - - -zztalker/flskZakupki.gov.ru -https://github.com/zztalker/flskZakupki.gov.ru -Entry file: None -Scanned: 2016-10-19 13:16:09.394439 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zztalker/flskZakupki.gov.ru. - -funningboy/remoteChat -https://github.com/funningboy/remoteChat -Entry file: remoteChat/main.py -Scanned: 2016-10-19 13:16:11.181806 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -lbull/bullmicroblog -https://github.com/lbull/bullmicroblog -Entry file: bullmicroblog/app/__init__.py -Scanned: 2016-10-19 13:16:12.511381 -No vulnerabilities found. - - -liks79/flachat -https://github.com/liks79/flachat -Entry file: flachat/flachat.py -Scanned: 2016-10-19 13:16:13.771014 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ATRAN2/batimer -https://github.com/ATRAN2/batimer -Entry file: batimer/batimer.py -Scanned: 2016-10-19 13:16:15.146531 -Vulnerability 1: -File: batimer/batimer.py - > User input at line 13, trigger word "form[": - time_start = convert_to_datetime(request.form['date1'], request.form['time1']) -Reassigned in: - File: batimer/batimer.py - > Line 18: output_data += 'Opto 22 data between the times starting from ' + read_time(time_start) + ' to ' + read_time(time_end) + ' -' - File: batimer/batimer.py - > Line 25: output_data += read_time(status_row.recorded_time) + ',' + str(status_row.torr) + ' -' - File: batimer/batimer.py - > Line 28: output_data += ' | No data found in this range' - File: batimer/batimer.py - > Line 29: response = make_response(output_data) - File: batimer/batimer.py - > Line 30: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 31: response = make_response(output_data) - File: batimer/batimer.py - > Line 32: data_filename = 'Opto22 Data ' + read_time(time_start) + ' to ' + read_time(time_end) - File: batimer/batimer.py - > Line 37: response.headers['Content-Disposition'] = 'attachment; filename=' + data_filename + '.csv' - File: batimer/batimer.py - > Line 39: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'Inputted times were incorrect!' - File: batimer/batimer.py - > Line 43: ret_MAYBE_FUNCTION_NAME = render_template('main_page.html') - File: batimer/batimer.py - > Line 12: output_data = '' -File: batimer/batimer.py - > reaches line 20, trigger word "filter(": - db_query = Status.query.filter(Status.recorded_time > time_start).filter(Status.recorded_time < time_end).all() - -Vulnerability 2: -File: batimer/batimer.py - > User input at line 14, trigger word "form[": - time_end = convert_to_datetime(request.form['date2'], request.form['time2']) -Reassigned in: - File: batimer/batimer.py - > Line 18: output_data += 'Opto 22 data between the times starting from ' + read_time(time_start) + ' to ' + read_time(time_end) + ' -' - File: batimer/batimer.py - > Line 25: output_data += read_time(status_row.recorded_time) + ',' + str(status_row.torr) + ' -' - File: batimer/batimer.py - > Line 28: output_data += ' | No data found in this range' - File: batimer/batimer.py - > Line 29: response = make_response(output_data) - File: batimer/batimer.py - > Line 30: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 31: response = make_response(output_data) - File: batimer/batimer.py - > Line 32: data_filename = 'Opto22 Data ' + read_time(time_start) + ' to ' + read_time(time_end) - File: batimer/batimer.py - > Line 37: response.headers['Content-Disposition'] = 'attachment; filename=' + data_filename + '.csv' - File: batimer/batimer.py - > Line 39: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'Inputted times were incorrect!' - File: batimer/batimer.py - > Line 43: ret_MAYBE_FUNCTION_NAME = render_template('main_page.html') - File: batimer/batimer.py - > Line 12: output_data = '' -File: batimer/batimer.py - > reaches line 20, trigger word "filter(": - db_query = Status.query.filter(Status.recorded_time > time_start).filter(Status.recorded_time < time_end).all() - -Vulnerability 3: -File: batimer/batimer.py - > User input at line 13, trigger word "form[": - time_start = convert_to_datetime(request.form['date1'], request.form['time1']) -Reassigned in: - File: batimer/batimer.py - > Line 18: output_data += 'Opto 22 data between the times starting from ' + read_time(time_start) + ' to ' + read_time(time_end) + ' -' - File: batimer/batimer.py - > Line 25: output_data += read_time(status_row.recorded_time) + ',' + str(status_row.torr) + ' -' - File: batimer/batimer.py - > Line 28: output_data += ' | No data found in this range' - File: batimer/batimer.py - > Line 29: response = make_response(output_data) - File: batimer/batimer.py - > Line 30: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 31: response = make_response(output_data) - File: batimer/batimer.py - > Line 32: data_filename = 'Opto22 Data ' + read_time(time_start) + ' to ' + read_time(time_end) - File: batimer/batimer.py - > Line 37: response.headers['Content-Disposition'] = 'attachment; filename=' + data_filename + '.csv' - File: batimer/batimer.py - > Line 39: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'Inputted times were incorrect!' - File: batimer/batimer.py - > Line 43: ret_MAYBE_FUNCTION_NAME = render_template('main_page.html') - File: batimer/batimer.py - > Line 12: output_data = '' -File: batimer/batimer.py - > reaches line 35, trigger word "replace(": - data_filename = data_filename.replace(' ', '-') - -Vulnerability 4: -File: batimer/batimer.py - > User input at line 14, trigger word "form[": - time_end = convert_to_datetime(request.form['date2'], request.form['time2']) -Reassigned in: - File: batimer/batimer.py - > Line 18: output_data += 'Opto 22 data between the times starting from ' + read_time(time_start) + ' to ' + read_time(time_end) + ' -' - File: batimer/batimer.py - > Line 25: output_data += read_time(status_row.recorded_time) + ',' + str(status_row.torr) + ' -' - File: batimer/batimer.py - > Line 28: output_data += ' | No data found in this range' - File: batimer/batimer.py - > Line 29: response = make_response(output_data) - File: batimer/batimer.py - > Line 30: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 31: response = make_response(output_data) - File: batimer/batimer.py - > Line 32: data_filename = 'Opto22 Data ' + read_time(time_start) + ' to ' + read_time(time_end) - File: batimer/batimer.py - > Line 37: response.headers['Content-Disposition'] = 'attachment; filename=' + data_filename + '.csv' - File: batimer/batimer.py - > Line 39: ret_MAYBE_FUNCTION_NAME = response - File: batimer/batimer.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'Inputted times were incorrect!' - File: batimer/batimer.py - > Line 43: ret_MAYBE_FUNCTION_NAME = render_template('main_page.html') - File: batimer/batimer.py - > Line 12: output_data = '' -File: batimer/batimer.py - > reaches line 35, trigger word "replace(": - data_filename = data_filename.replace(' ', '-') - - - -OpenShift-Cookbook/chapter8-tornado-server -https://github.com/OpenShift-Cookbook/chapter8-tornado-server -Entry file: chapter8-tornado-server/hello.py -Scanned: 2016-10-19 13:16:17.489235 -No vulnerabilities found. - - -jackschultz/fantasy-golf -https://github.com/jackschultz/fantasy-golf -Entry file: fantasy-golf/app.py -Scanned: 2016-10-19 13:16:19.646196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanhoskin/satisfaction -https://github.com/ryanhoskin/satisfaction -Entry file: satisfaction/satisfaction.py -Scanned: 2016-10-19 13:16:23.407278 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: satisfaction/venv/lib/python2.7/genericpath.py - -iancaltest/basicflask -https://github.com/iancaltest/basicflask -Entry file: basicflask/server.py -Scanned: 2016-10-19 13:16:23.917598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gbrennon/RestPi -https://github.com/gbrennon/RestPi -Entry file: RestPi/RestPi.py -Scanned: 2016-10-19 13:16:25.247675 -No vulnerabilities found. - - -mbcrocci/agenda -https://github.com/mbcrocci/agenda -Entry file: agenda/run.py -Scanned: 2016-10-19 13:16:26.496552 -No vulnerabilities found. - - -aifa/python -https://github.com/aifa/python -Entry file: python/flask/microblog/app/__init__.py -Scanned: 2016-10-19 13:16:27.996766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nyakiss/nyanblog -https://github.com/nyakiss/nyanblog -Entry file: nyanblog/blogpy/__init__.py -Scanned: 2016-10-19 13:16:30.119949 -Vulnerability 1: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 37, trigger word "url_for(": - url = request.args.get('next', '') or url_for('home') - -Vulnerability 2: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 39, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 3: -File: nyanblog/blogpy/views.py - > User input at line 37, trigger word "get(": - url = request.args.get('next', '') or url_for('home') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('login.html',ulogin_url=ulogin_url) -File: nyanblog/blogpy/views.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 4: -File: nyanblog/blogpy/views.py - > User input at line 71, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 71, trigger word "url_for(": - url = request.args.get('next', url_for('home')) - -Vulnerability 5: -File: nyanblog/blogpy/views.py - > User input at line 71, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 72, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 6: -File: nyanblog/blogpy/views.py - > User input at line 115, trigger word ".data": - post = Post(g.user, form.text.data, get_tags(form.tags.data.strip())) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 123: ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) -File: nyanblog/blogpy/views.py - > reaches line 119, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 7: -File: nyanblog/blogpy/views.py - > User input at line 115, trigger word ".data": - post = Post(g.user, form.text.data, get_tags(form.tags.data.strip())) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 123: ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) -File: nyanblog/blogpy/views.py - > reaches line 119, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 8: -File: nyanblog/blogpy/views.py - > User input at line 132, trigger word "files[": - file = File(request.files['file']) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 136: ret_MAYBE_FUNCTION_NAME = jsonify(success=False) -File: nyanblog/blogpy/views.py - > reaches line 135, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(success=True, url=file.file_url) - -Vulnerability 9: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 157, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 10: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 157, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('post',id=post.id)) - -Vulnerability 11: -File: nyanblog/blogpy/views.py - > User input at line 149, trigger word "get(": - post = Post.query.get(int(id)) -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 150: form = PostForm(obj=post) - File: nyanblog/blogpy/views.py - > Line 158: form.tags.data = ' '.join((unicode(tag) for tag in post.tags)) - File: nyanblog/blogpy/views.py - > Line 152: form.tags.data = get_tags(form.tags.data.strip()) -File: nyanblog/blogpy/views.py - > reaches line 159, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new.html',form=form) - -Vulnerability 12: -File: nyanblog/blogpy/views.py - > User input at line 174, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 174, trigger word "url_for(": - url = request.args.get('next', url_for('home')) - -Vulnerability 13: -File: nyanblog/blogpy/views.py - > User input at line 174, trigger word "get(": - url = request.args.get('next', url_for('home')) -File: nyanblog/blogpy/views.py - > reaches line 175, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - -Vulnerability 14: -File: nyanblog/blogpy/views.py - > User input at line 180, trigger word "get(": - rss = cache.get('rss') -Reassigned in: - File: nyanblog/blogpy/views.py - > Line 186: ret_MAYBE_FUNCTION_NAME = rss -File: nyanblog/blogpy/views.py - > reaches line 184, trigger word "render_template(": - rss = render_template('rss.xml',posts=posts, now=now) - - - -sbackus/microblog -https://github.com/sbackus/microblog -Entry file: None -Scanned: 2016-10-19 13:16:31.632170 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CrystalMoogle/rankedstats -https://github.com/CrystalMoogle/rankedstats -Entry file: None -Scanned: 2016-10-19 13:16:49.450350 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CrystalMoogle/rankedstats. - -karen-mikaela/terra_tv -https://github.com/karen-mikaela/terra_tv -Entry file: terra_tv/terra_tv_car/__init__.py -Scanned: 2016-10-19 13:16:53.970639 -Vulnerability 1: -File: terra_tv/terra_tv_car/views.py - > User input at line 108, trigger word "form[": - model = request.form['model'] -Reassigned in: - File: terra_tv/terra_tv_car/views.py - > Line 133: context = 'car''create''tab_active''alert''status'Car(model=model, year=year, photo=photo, manufacturer=manufacturer)id is None'admin'alert-1 - File: terra_tv/terra_tv_car/views.py - > Line 146: car.model = model - File: terra_tv/terra_tv_car/views.py - > Line 158: car = Car(model=model, year=year, photo=photo_name, manufacturer=manufacturer) - File: terra_tv/terra_tv_car/views.py - > Line 160: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.list')) - File: terra_tv/terra_tv_car/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.login')) - File: terra_tv/terra_tv_car/views.py - > Line 145: car = Car.objects.get_or_404(id=id) -File: terra_tv/terra_tv_car/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/detail.html',context) - -Vulnerability 2: -File: terra_tv/terra_tv_car/views.py - > User input at line 109, trigger word "form[": - year = request.form['year'] -Reassigned in: - File: terra_tv/terra_tv_car/views.py - > Line 133: context = 'car''create''tab_active''alert''status'Car(model=model, year=year, photo=photo, manufacturer=manufacturer)id is None'admin'alert-1 - File: terra_tv/terra_tv_car/views.py - > Line 147: car.year = year - File: terra_tv/terra_tv_car/views.py - > Line 158: car = Car(model=model, year=year, photo=photo_name, manufacturer=manufacturer) - File: terra_tv/terra_tv_car/views.py - > Line 160: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.list')) - File: terra_tv/terra_tv_car/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.login')) - File: terra_tv/terra_tv_car/views.py - > Line 145: car = Car.objects.get_or_404(id=id) -File: terra_tv/terra_tv_car/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/detail.html',context) - -Vulnerability 3: -File: terra_tv/terra_tv_car/views.py - > User input at line 110, trigger word "form[": - manufacturer = request.form['manufacturer'] -Reassigned in: - File: terra_tv/terra_tv_car/views.py - > Line 133: context = 'car''create''tab_active''alert''status'Car(model=model, year=year, photo=photo, manufacturer=manufacturer)id is None'admin'alert-1 - File: terra_tv/terra_tv_car/views.py - > Line 148: car.manufacturer = manufacturer - File: terra_tv/terra_tv_car/views.py - > Line 158: car = Car(model=model, year=year, photo=photo_name, manufacturer=manufacturer) - File: terra_tv/terra_tv_car/views.py - > Line 160: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.list')) - File: terra_tv/terra_tv_car/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.login')) - File: terra_tv/terra_tv_car/views.py - > Line 145: car = Car.objects.get_or_404(id=id) -File: terra_tv/terra_tv_car/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/detail.html',context) - -Vulnerability 4: -File: terra_tv/terra_tv_car/views.py - > User input at line 111, trigger word "files[": - photo = request.files['photo'] -Reassigned in: - File: terra_tv/terra_tv_car/views.py - > Line 133: context = 'car''create''tab_active''alert''status'Car(model=model, year=year, photo=photo, manufacturer=manufacturer)id is None'admin'alert-1 - File: terra_tv/terra_tv_car/views.py - > Line 143: photo_name = self.upload_file(photo) - File: terra_tv/terra_tv_car/views.py - > Line 156: car.photo = photo_name - File: terra_tv/terra_tv_car/views.py - > Line 158: car = Car(model=model, year=year, photo=photo_name, manufacturer=manufacturer) - File: terra_tv/terra_tv_car/views.py - > Line 160: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.list')) - File: terra_tv/terra_tv_car/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin.login')) - File: terra_tv/terra_tv_car/views.py - > Line 145: car = Car.objects.get_or_404(id=id) -File: terra_tv/terra_tv_car/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/detail.html',context) - - - -OpenShift-Cookbook/chapter8-recipe2-setup.py -https://github.com/OpenShift-Cookbook/chapter8-recipe2-setup.py -Entry file: None -Scanned: 2016-10-19 13:16:55.317319 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/OpenShift-Cookbook/chapter8-recipe2-setup.py. - -jalp/httplogger -https://github.com/jalp/httplogger -Entry file: httplogger/log.py -Scanned: 2016-10-19 13:16:56.524085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gelioz/prom-test -https://github.com/gelioz/prom-test -Entry file: prom-test/library/__init__.py -Scanned: 2016-10-19 13:16:57.864584 -Vulnerability 1: -File: prom-test/library/__init__.py - > User input at line 32, trigger word "get(": - search = request.args.get('search') -File: prom-test/library/__init__.py - > reaches line 33, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + search + '%')).all() - -Vulnerability 2: -File: prom-test/library/__init__.py - > User input at line 39, trigger word "get(": - search = request.args.get('search') -File: prom-test/library/__init__.py - > reaches line 40, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + search + '%')).all() - -Vulnerability 3: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 48, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 4: -File: prom-test/library/__init__.py - > User input at line 49, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 49, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 5: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 6: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 7: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 67, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 8: -File: prom-test/library/__init__.py - > User input at line 68, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 68, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 9: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 79, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 10: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 79, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 11: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 86, trigger word "filter(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() - -Vulnerability 12: -File: prom-test/library/__init__.py - > User input at line 87, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 87, trigger word "filter(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() - -Vulnerability 13: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 98, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 14: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 98, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 15: -File: prom-test/library/__init__.py - > User input at line 105, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 105, trigger word "filter(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() - -Vulnerability 16: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 106, trigger word "filter(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() - -Vulnerability 17: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 117, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 18: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 117, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 19: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 124, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 20: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 133, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 21: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 133, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 22: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 140, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 23: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 149, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 24: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 149, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 25: -File: prom-test/library/__init__.py - > User input at line 156, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 160: d = authors_books.delete(authors_books.c.author_id == author.id) -File: prom-test/library/__init__.py - > reaches line 156, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 26: -File: prom-test/library/__init__.py - > User input at line 156, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 160: d = authors_books.delete(authors_books.c.author_id == author.id) -File: prom-test/library/__init__.py - > reaches line 161, trigger word "execute(": - db_session.execute(d) - -Vulnerability 27: -File: prom-test/library/__init__.py - > User input at line 172, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 176: d = authors_books.delete(authors_books.c.book_id == book.id) -File: prom-test/library/__init__.py - > reaches line 172, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 28: -File: prom-test/library/__init__.py - > User input at line 172, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 176: d = authors_books.delete(authors_books.c.book_id == book.id) -File: prom-test/library/__init__.py - > reaches line 177, trigger word "execute(": - db_session.execute(d) - -Vulnerability 29: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 238, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() - -Vulnerability 30: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 238, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() - -Vulnerability 31: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 241, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() - -Vulnerability 32: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 241, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() - -Vulnerability 33: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 242, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',results=res, source=source, form=form) - -Vulnerability 34: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 242, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',results=res, source=source, form=form) - -Vulnerability 35: -File: prom-test/library/__init__.py - > User input at line 265, trigger word ".data": - user = User.query.filter(User.username == form.username.data).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 273: session['username'] = user.username - File: prom-test/library/__init__.py - > Line 271: session['logged_in'] = True -File: prom-test/library/__init__.py - > reaches line 265, trigger word "filter(": - user = User.query.filter(User.username == form.username.data).first() - - - -regisf/Strawberry -https://github.com/regisf/Strawberry -Entry file: Strawberry/main.py -Scanned: 2016-10-19 13:16:59.174451 -No vulnerabilities found. - - -Smirl/teaflask -https://github.com/Smirl/teaflask -Entry file: teaflask/app/__init__.py -Scanned: 2016-10-19 13:17:01.150631 -Vulnerability 1: -File: teaflask/app/main/views.py - > User input at line 28, trigger word "get(": - tea = Tea.query.get(form.tea_id.data) -Reassigned in: - File: teaflask/app/main/views.py - > Line 32: pot = Pot(brewer=current_user._get_current_object(), tea=tea) -File: teaflask/app/main/views.py - > reaches line 37, trigger word "flash(": - flash('A pot of {} has been brewed.'.format(tea.name), 'info') - -Vulnerability 2: -File: teaflask/app/main/views.py - > User input at line 28, trigger word ".data": - tea = Tea.query.get(form.tea_id.data) -Reassigned in: - File: teaflask/app/main/views.py - > Line 32: pot = Pot(brewer=current_user._get_current_object(), tea=tea) -File: teaflask/app/main/views.py - > reaches line 37, trigger word "flash(": - flash('A pot of {} has been brewed.'.format(tea.name), 'info') - -Vulnerability 3: -File: teaflask/app/api_1_0/__init__.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: teaflask/app/api_1_0/__init__.py - > Line 10: pagination = query.paginate(page,per_page=request.args.get('limit', current_app.config['TEAFLASK_PER_PAGE'],type=int), error_out=False) - File: teaflask/app/api_1_0/__init__.py - > Line 19: _prev = None - File: teaflask/app/api_1_0/__init__.py - > Line 22: _next = None -File: teaflask/app/api_1_0/__init__.py - > reaches line 21, trigger word "url_for(": - _prev = url_for(endpoint,page=page - 1, _external=True, kwargs) - -Vulnerability 4: -File: teaflask/app/api_1_0/__init__.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: teaflask/app/api_1_0/__init__.py - > Line 10: pagination = query.paginate(page,per_page=request.args.get('limit', current_app.config['TEAFLASK_PER_PAGE'],type=int), error_out=False) - File: teaflask/app/api_1_0/__init__.py - > Line 19: _prev = None - File: teaflask/app/api_1_0/__init__.py - > Line 22: _next = None -File: teaflask/app/api_1_0/__init__.py - > reaches line 24, trigger word "url_for(": - _next = url_for(endpoint,page=page + 1, _external=True, kwargs) - -Vulnerability 5: -File: teaflask/app/api_1_0/__init__.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: teaflask/app/api_1_0/__init__.py - > Line 10: pagination = query.paginate(page,per_page=request.args.get('limit', current_app.config['TEAFLASK_PER_PAGE'],type=int), error_out=False) - File: teaflask/app/api_1_0/__init__.py - > Line 19: _prev = None - File: teaflask/app/api_1_0/__init__.py - > Line 22: _next = None -File: teaflask/app/api_1_0/__init__.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(tag_name'prev''next''count'[item.to_json() for item in pagination.items]_prev_nextpagination.total) - -Vulnerability 6: -File: teaflask/app/api_1_0/__init__.py - > User input at line 10, trigger word "get(": - pagination = query.paginate(page,per_page=request.args.get('limit', current_app.config['TEAFLASK_PER_PAGE'],type=int), error_out=False) -File: teaflask/app/api_1_0/__init__.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(tag_name'prev''next''count'[item.to_json() for item in pagination.items]_prev_nextpagination.total) - - - -jimr/chopper -https://github.com/jimr/chopper -Entry file: chopper/app.py -Scanned: 2016-10-19 13:17:02.452992 -No vulnerabilities found. - - -pawl/pdfreverse -https://github.com/pawl/pdfreverse -Entry file: pdfreverse/lib/flask/sessions.py -Scanned: 2016-10-19 13:17:04.688233 -No vulnerabilities found. - - -vrk7bp/GautamWebsite -https://github.com/vrk7bp/GautamWebsite -Entry file: GautamWebsite/FlaskServer.py -Scanned: 2016-10-19 13:17:09.165381 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -csojinb/flask_demo -https://github.com/csojinb/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 13:17:10.886481 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -waitingkuo/flask-sample -https://github.com/waitingkuo/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 13:17:11.384856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nezaj/flask-skeleton -https://github.com/nezaj/flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:17:11.868142 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nezaj/flask-skeleton. - -fengsp/flask-application-wizard -https://github.com/fengsp/flask-application-wizard -Entry file: flask-application-wizard/make-flaskapp.py -Scanned: 2016-10-19 13:17:12.360298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chiedo/flask-starter -https://github.com/chiedo/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-19 13:17:12.842562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dadadel/codelauncher -https://github.com/dadadel/codelauncher -Entry file: codelauncher/webdev.py -Scanned: 2016-10-19 13:17:14.528520 -Vulnerability 1: -File: codelauncher/webdev.py - > User input at line 39, trigger word "form[": - code = request.form['code'] -Reassigned in: - File: codelauncher/webdev.py - > Line 40: run = runcode.RunCCode(code) - File: codelauncher/webdev.py - > Line 45: code = default_c_code -File: codelauncher/webdev.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('main.html',code=code, target='runc', resrun=resrun, rescomp=rescompil, rows=default_rows, cols=default_cols) - -Vulnerability 2: -File: codelauncher/webdev.py - > User input at line 59, trigger word "form[": - code = request.form['code'] -Reassigned in: - File: codelauncher/webdev.py - > Line 60: run = runcode.RunCppCode(code) - File: codelauncher/webdev.py - > Line 65: code = default_cpp_code -File: codelauncher/webdev.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('main.html',code=code, target='runcpp', resrun=resrun, rescomp=rescompil, rows=default_rows, cols=default_cols) - -Vulnerability 3: -File: codelauncher/webdev.py - > User input at line 79, trigger word "form[": - code = request.form['code'] -Reassigned in: - File: codelauncher/webdev.py - > Line 80: run = runcode.RunPyCode(code) - File: codelauncher/webdev.py - > Line 85: code = default_py_code -File: codelauncher/webdev.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('main.html',code=code, target='runpy', resrun=resrun, rescomp=rescompil, rows=default_rows, cols=default_cols) - - - -devxoul/flask-errorhandler -https://github.com/devxoul/flask-errorhandler -Entry file: flask-errorhandler/flask_errorhandler.py -Scanned: 2016-10-19 13:17:15.022045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cwmat/flasky -https://github.com/cwmat/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 13:17:15.511193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rongmic/flaskr -https://github.com/rongmic/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:17:16.000898 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hannah-grape/flaskr -https://github.com/hannah-grape/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:17:18.494119 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Rosuav/Flask1 -https://github.com/Rosuav/Flask1 -Entry file: Flask1/1.py -Scanned: 2016-10-19 13:17:20.854789 -Vulnerability 1: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 2: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 3: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 4: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 5: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 6: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 7: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 8: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 9: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 10: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 11: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 12: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 13: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 14: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 15: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 16: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 17: -File: Flask1/1.py - > User input at line 63, trigger word "get(": - search = request.args.get('search', '') -Reassigned in: - File: Flask1/1.py - > Line 77: search = '' - File: Flask1/1.py - > Line 78: morelink = '

More...

' - File: Flask1/1.py - > Line 49: ret_MAYBE_FUNCTION_NAME = redirect(url_for('view')) - File: Flask1/1.py - > Line 51: ret_MAYBE_FUNCTION_NAME = Response('Invalid query, click here to retry', 401, 'WWW-Authenticate''Basic realm="1"') - File: Flask1/1.py - > Line 74: morelink = '' -File: Flask1/1.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('view.html',rows=rows, more=more, morelink=morelink, auth=auth) - -Vulnerability 18: -File: Flask1/1.py - > User input at line 106, trigger word "Markup(": - publish = Markup(publish'Currently published.''Private entry.' + '') -Reassigned in: - File: Flask1/1.py - > Line 100: publish = '' - File: Flask1/1.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('view')) -File: Flask1/1.py - > reaches line 120, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('addent.html',date=date, title=title, content=content, publish=publish, savenote=Markup(savenote)) - - - -florije1988/FlaskJson -https://github.com/florije1988/FlaskJson -Entry file: FlaskJson/FlaskJson/FlaskJson.py -Scanned: 2016-10-19 13:17:22.084951 -Vulnerability 1: -File: FlaskJson/FlaskJson/FlaskJson.py - > User input at line 13, trigger word "get(": - n = [request.form.get(x, 0,type=float) for x in 'n1''n2''n3'] -Reassigned in: - File: FlaskJson/FlaskJson/FlaskJson.py - > Line 16: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: FlaskJson/FlaskJson/FlaskJson.py - > reaches line 14, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(max=max(n), min=min(n)) - - - -Zhang/pythonFlask -https://github.com/Zhang/pythonFlask -Entry file: pythonFlask/server.py -Scanned: 2016-10-19 13:17:28.168694 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -casschin/flask-example -https://github.com/casschin/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-19 13:17:28.679440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jasonfong/base-flask -https://github.com/jasonfong/base-flask -Entry file: base-flask/app.py -Scanned: 2016-10-19 13:17:29.971854 -No vulnerabilities found. - - -arushs/Flask-Experiments -https://github.com/arushs/Flask-Experiments -Entry file: Flask-Experiments/app/__init__.py -Scanned: 2016-10-19 13:17:34.146737 -No vulnerabilities found. - - -raulgtk/flask-base -https://github.com/raulgtk/flask-base -Entry file: None -Scanned: 2016-10-19 13:17:47.655109 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/raulgtk/flask-base. - -mgaldieri/flask-crosswords -https://github.com/mgaldieri/flask-crosswords -Entry file: flask-crosswords/flask-crosswords.py -Scanned: 2016-10-19 13:17:51.029864 -No vulnerabilities found. - - -Wojtek-89/Flask-stronka -https://github.com/Wojtek-89/Flask-stronka -Entry file: Flask-stronka/routes.py -Scanned: 2016-10-19 13:17:55.419506 -No vulnerabilities found. - - -Parkayun/Parkayun-Flask-Plate -https://github.com/Parkayun/Parkayun-Flask-Plate -Entry file: Parkayun-Flask-Plate/app/__init__.py -Scanned: 2016-10-19 13:17:56.639823 -No vulnerabilities found. - - -morpheme/FlaskWebDev -https://github.com/morpheme/FlaskWebDev -Entry file: FlaskWebDev/app/__init__.py -Scanned: 2016-10-19 13:17:57.950696 -No vulnerabilities found. - - -lucasmcastro/pymdb -https://github.com/lucasmcastro/pymdb -Entry file: pymdb/manage.py -Scanned: 2016-10-19 13:17:59.238842 -Vulnerability 1: -File: pymdb/manage.py - > User input at line 40, trigger word "get(": - movie = db.session.query(Movie).get(id) -File: pymdb/manage.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/edit.html',movie=movie) - - - -masakichi/pocket -https://github.com/masakichi/pocket -Entry file: pocket/app/__init__.py -Scanned: 2016-10-19 13:18:00.659702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jwatson/simple-flask-stacktrace -https://github.com/jwatson/simple-flask-stacktrace -Entry file: simple-flask-stacktrace/server.py -Scanned: 2016-10-19 13:18:04.816872 -No vulnerabilities found. - - -NickWoodhams/Flask-Admin-Mongo-Example -https://github.com/NickWoodhams/Flask-Admin-Mongo-Example -Entry file: Flask-Admin-Mongo-Example/app.py -Scanned: 2016-10-19 13:18:07.050208 -No vulnerabilities found. - - -stanleygu/flask-ipython-redirect -https://github.com/stanleygu/flask-ipython-redirect -Entry file: flask-ipython-redirect/app.py -Scanned: 2016-10-19 13:18:12.590578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StephanieKim/flask-todo-api -https://github.com/StephanieKim/flask-todo-api -Entry file: flask-todo-api/app/mongo_todo_app.py -Scanned: 2016-10-19 13:18:13.781959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -steelywing/flask-blueprint-test -https://github.com/steelywing/flask-blueprint-test -Entry file: flask-blueprint-test/index.py -Scanned: 2016-10-19 13:18:14.974413 -No vulnerabilities found. - - -jstacoder/mrbob-flask-templates -https://github.com/jstacoder/mrbob-flask-templates -Entry file: mrbob-flask-templates/app.py -Scanned: 2016-10-19 13:18:16.196186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rpsoko/tic_tac_flask -https://github.com/rpsoko/tic_tac_flask -Entry file: tic_tac_flask/server.py -Scanned: 2016-10-19 13:18:17.731249 -No vulnerabilities found. - - -rpsoko/my_dictionary_flask -https://github.com/rpsoko/my_dictionary_flask -Entry file: my_dictionary_flask/server.py -Scanned: 2016-10-19 13:18:18.974089 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -theTechnoWeenie/sample-flask-app -https://github.com/theTechnoWeenie/sample-flask-app -Entry file: sample-flask-app/src/sampleApp.py -Scanned: 2016-10-19 13:18:20.172461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kartyboyz/n64-storage-flask -https://github.com/kartyboyz/n64-storage-flask -Entry file: n64-storage-flask/n64_storage/__init__.py -Scanned: 2016-10-19 13:18:21.618886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sandys/flask-sms-ses -https://github.com/sandys/flask-sms-ses -Entry file: flask-sms-ses/routes.py -Scanned: 2016-10-19 13:18:22.823386 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elvinyung/wiski -https://github.com/elvinyung/wiski -Entry file: wiski/app.py -Scanned: 2016-10-19 13:18:24.263589 -Vulnerability 1: -File: wiski/app/views.py - > User input at line 39, trigger word "form[": - search_query = request.form['search_query'] -File: wiski/app/views.py - > reaches line 40, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(search,search_query=search_query)) - -Vulnerability 2: -File: wiski/app/views.py - > User input at line 39, trigger word "form[": - search_query = request.form['search_query'] -File: wiski/app/views.py - > reaches line 40, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for(search,search_query=search_query)) - -Vulnerability 3: -File: wiski/app/views.py - > User input at line 39, trigger word "form[": - search_query = request.form['search_query'] -File: wiski/app/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('searchresults.html',search_query=search_query, results=results) - - - -elvinyung/florum -https://github.com/elvinyung/florum -Entry file: florum/app/__init__.py -Scanned: 2016-10-19 13:18:25.578247 -Vulnerability 1: -File: florum/app/views.py - > User input at line 53, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: florum/app/views.py - > Line 63: session['username'] = username - File: florum/app/views.py - > Line 62: session['logged_in'] = True -File: florum/app/views.py - > reaches line 54, trigger word "execute(": - username_row = db.execute('select * from accounts where username=?', (username)).fetchone() - -Vulnerability 2: -File: florum/app/views.py - > User input at line 91, trigger word "form[": - post_title = request.form['title'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 3: -File: florum/app/views.py - > User input at line 95, trigger word "form[": - post_link = request.form['link'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - -Vulnerability 4: -File: florum/app/views.py - > User input at line 96, trigger word "form[": - post_content = request.form['content'] -File: florum/app/views.py - > reaches line 100, trigger word "execute(": - db.execute('insert into posts (postTime, title, content, linkURL, author, points) values (?, ?, ?, ?, ?, ?)', (current_time, post_title, post_content, post_link, post_author, starting_points)) - - - -leebox/bbs -https://github.com/leebox/bbs -Entry file: bbs/app/__init__.py -Scanned: 2016-10-19 13:18:26.895910 -No vulnerabilities found. - - -NilsNoreyson/FlaskServerToDocxLetter -https://github.com/NilsNoreyson/FlaskServerToDocxLetter -Entry file: None -Scanned: 2016-10-19 13:18:28.629293 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NilsNoreyson/FlaskServerToDocxLetter. - -bhsaurabh/microblog -https://github.com/bhsaurabh/microblog -Entry file: None -Scanned: 2016-10-19 13:18:29.121262 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -frederick-masterton/python27-flask-RESTful-api-how-to -https://github.com/frederick-masterton/python27-flask-RESTful-api-how-to -Entry file: python27-flask-RESTful-api-how-to/restfulapi.py -Scanned: 2016-10-19 13:18:32.392321 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shekhargulati/redis-in-action-chapter1-flask-app -https://github.com/shekhargulati/redis-in-action-chapter1-flask-app -Entry file: redis-in-action-chapter1-flask-app/hackerpins.py -Scanned: 2016-10-19 13:18:33.837254 -No vulnerabilities found. - - -nmathias/tumbleblog -https://github.com/nmathias/tumbleblog -Entry file: tumbleblog/__init__.py -Scanned: 2016-10-19 13:18:35.245808 -No vulnerabilities found. - - -Konbonix/DisasterSupplyTracker -https://github.com/Konbonix/DisasterSupplyTracker -Entry file: DisasterSupplyTracker/lib/flask/sessions.py -Scanned: 2016-10-19 13:18:37.737296 -No vulnerabilities found. - - -jgrip/ddns -https://github.com/jgrip/ddns -Entry file: ddns/ddns.py -Scanned: 2016-10-19 13:18:39.013377 -No vulnerabilities found. - - -MrTrustworthy/SL21 -https://github.com/MrTrustworthy/SL21 -Entry file: SL21/ProjectSL/__init__.py -Scanned: 2016-10-19 13:18:50.775797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shashisp/express -https://github.com/shashisp/express -Entry file: express/app/__init__.py -Scanned: 2016-10-19 13:18:52.025852 -No vulnerabilities found. - - -mhielscher/htpc-control -https://github.com/mhielscher/htpc-control -Entry file: htpc-control/htpc.py -Scanned: 2016-10-19 13:18:57.483175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gbrennon/RestPi -https://github.com/gbrennon/RestPi -Entry file: RestPi/RestPi.py -Scanned: 2016-10-19 13:18:58.801511 -No vulnerabilities found. - - -caryoscelus/comment-anything -https://github.com/caryoscelus/comment-anything -Entry file: comment-anything/main.py -Scanned: 2016-10-19 13:19:00.149206 -No vulnerabilities found. - - -ryepdx/printer_proxy_server -https://github.com/ryepdx/printer_proxy_server -Entry file: printer_proxy_server/app.py -Scanned: 2016-10-19 13:19:01.478291 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -patxu/messageboard -https://github.com/patxu/messageboard -Entry file: None -Scanned: 2016-10-19 13:19:05.336120 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -romgain/PythonRestAPI -https://github.com/romgain/PythonRestAPI -Entry file: PythonRestAPI/app.py -Scanned: 2016-10-19 13:19:06.655791 -No vulnerabilities found. - - -niijv/webvita -https://github.com/niijv/webvita -Entry file: webvita/wsgi/webvita/__init__.py -Scanned: 2016-10-19 13:19:09.215554 -Vulnerability 1: -File: webvita/wsgi/webvita/views.py - > User input at line 34, trigger word "form[": - terms = unicode(request.form['searchterms']) -Reassigned in: - File: webvita/wsgi/webvita/views.py - > Line 36: blogposts = Blogpost.query.whoosh_search(terms,or_=True) -File: webvita/wsgi/webvita/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',terms=terms, blogposts=blogposts) - -Vulnerability 2: -File: webvita/wsgi/webvita/blogposts.py - > User input at line 45, trigger word "form[": - short_title = unicode(request.form['short_title']).replace(' ', '-') -Reassigned in: - File: webvita/wsgi/webvita/blogposts.py - > Line 64: blogpost = Blogpost(user, title, subtitle, short_title, text_markdown, text_html, blogpost_tags,hidden=False) -File: webvita/wsgi/webvita/blogposts.py - > reaches line 45, trigger word "replace(": - short_title = unicode(request.form['short_title']).replace(' ', '-') - -Vulnerability 3: -File: webvita/wsgi/webvita/blogposts.py - > User input at line 106, trigger word "form[": - short_title = unicode(request.form['short_title']).replace(' ', '-') -Reassigned in: - File: webvita/wsgi/webvita/blogposts.py - > Line 129: old_bp.short_title = short_title - File: webvita/wsgi/webvita/blogposts.py - > Line 104: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) - File: webvita/wsgi/webvita/blogposts.py - > Line 112: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) -File: webvita/wsgi/webvita/blogposts.py - > reaches line 106, trigger word "replace(": - short_title = unicode(request.form['short_title']).replace(' ', '-') - -Vulnerability 4: -File: webvita/wsgi/webvita/blogposts.py - > User input at line 106, trigger word "form[": - short_title = unicode(request.form['short_title']).replace(' ', '-') -Reassigned in: - File: webvita/wsgi/webvita/blogposts.py - > Line 129: old_bp.short_title = short_title - File: webvita/wsgi/webvita/blogposts.py - > Line 104: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) - File: webvita/wsgi/webvita/blogposts.py - > Line 112: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) -File: webvita/wsgi/webvita/blogposts.py - > reaches line 138, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_blogpost',blogpost_short_title=short_title)) - -Vulnerability 5: -File: webvita/wsgi/webvita/blogposts.py - > User input at line 106, trigger word "form[": - short_title = unicode(request.form['short_title']).replace(' ', '-') -Reassigned in: - File: webvita/wsgi/webvita/blogposts.py - > Line 129: old_bp.short_title = short_title - File: webvita/wsgi/webvita/blogposts.py - > Line 104: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) - File: webvita/wsgi/webvita/blogposts.py - > Line 112: ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit_blogpost',blogpost_title=blogpost_title)) -File: webvita/wsgi/webvita/blogposts.py - > reaches line 138, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_blogpost',blogpost_short_title=short_title)) - - - -fhebert-perkins/FileShare -https://github.com/fhebert-perkins/FileShare -Entry file: FileShare/server.py -Scanned: 2016-10-19 13:19:10.596529 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dastagg/sightings -https://github.com/dastagg/sightings -Entry file: sightings/routes.py -Scanned: 2016-10-19 13:19:22.178056 -No vulnerabilities found. - - -gregeinfrank/microblog -https://github.com/gregeinfrank/microblog -Entry file: None -Scanned: 2016-10-19 13:19:23.181940 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gelioz/prom-test -https://github.com/gelioz/prom-test -Entry file: prom-test/library/__init__.py -Scanned: 2016-10-19 13:19:24.579431 -Vulnerability 1: -File: prom-test/library/__init__.py - > User input at line 32, trigger word "get(": - search = request.args.get('search') -File: prom-test/library/__init__.py - > reaches line 33, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + search + '%')).all() - -Vulnerability 2: -File: prom-test/library/__init__.py - > User input at line 39, trigger word "get(": - search = request.args.get('search') -File: prom-test/library/__init__.py - > reaches line 40, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + search + '%')).all() - -Vulnerability 3: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 48, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 4: -File: prom-test/library/__init__.py - > User input at line 49, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 49, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 5: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 6: -File: prom-test/library/__init__.py - > User input at line 48, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 7: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 67, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 8: -File: prom-test/library/__init__.py - > User input at line 68, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 68, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 9: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 79, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 10: -File: prom-test/library/__init__.py - > User input at line 67, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 79, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 11: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 86, trigger word "filter(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() - -Vulnerability 12: -File: prom-test/library/__init__.py - > User input at line 87, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 87, trigger word "filter(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() - -Vulnerability 13: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 98, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 14: -File: prom-test/library/__init__.py - > User input at line 86, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 98, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 15: -File: prom-test/library/__init__.py - > User input at line 105, trigger word "get(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() -File: prom-test/library/__init__.py - > reaches line 105, trigger word "filter(": - book = Book.query.filter(Book.id == request.args.get('book', '')).first() - -Vulnerability 16: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 106, trigger word "filter(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() - -Vulnerability 17: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 117, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 18: -File: prom-test/library/__init__.py - > User input at line 106, trigger word "get(": - author = Author.query.filter(Author.id == request.args.get('author', '')).first() -File: prom-test/library/__init__.py - > reaches line 117, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 19: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 124, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 20: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 133, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 21: -File: prom-test/library/__init__.py - > User input at line 124, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -File: prom-test/library/__init__.py - > reaches line 133, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('author_page',author_id=author.id)) - -Vulnerability 22: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 140, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 23: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 149, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 24: -File: prom-test/library/__init__.py - > User input at line 140, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -File: prom-test/library/__init__.py - > reaches line 149, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book_page',book_id=book.id)) - -Vulnerability 25: -File: prom-test/library/__init__.py - > User input at line 156, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 160: d = authors_books.delete(authors_books.c.author_id == author.id) -File: prom-test/library/__init__.py - > reaches line 156, trigger word "filter(": - author = Author.query.filter(Author.id == request.form['author_id']).first() - -Vulnerability 26: -File: prom-test/library/__init__.py - > User input at line 156, trigger word "form[": - author = Author.query.filter(Author.id == request.form['author_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 160: d = authors_books.delete(authors_books.c.author_id == author.id) -File: prom-test/library/__init__.py - > reaches line 161, trigger word "execute(": - db_session.execute(d) - -Vulnerability 27: -File: prom-test/library/__init__.py - > User input at line 172, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 176: d = authors_books.delete(authors_books.c.book_id == book.id) -File: prom-test/library/__init__.py - > reaches line 172, trigger word "filter(": - book = Book.query.filter(Book.id == request.form['book_id']).first() - -Vulnerability 28: -File: prom-test/library/__init__.py - > User input at line 172, trigger word "form[": - book = Book.query.filter(Book.id == request.form['book_id']).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 176: d = authors_books.delete(authors_books.c.book_id == book.id) -File: prom-test/library/__init__.py - > reaches line 177, trigger word "execute(": - db_session.execute(d) - -Vulnerability 29: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 238, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() - -Vulnerability 30: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 238, trigger word "filter(": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() - -Vulnerability 31: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 241, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() - -Vulnerability 32: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 241, trigger word "filter(": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() - -Vulnerability 33: -File: prom-test/library/__init__.py - > User input at line 238, trigger word ".data": - res = Book.query.filter(Book.title.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 242, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',results=res, source=source, form=form) - -Vulnerability 34: -File: prom-test/library/__init__.py - > User input at line 241, trigger word ".data": - res = Author.query.filter(Author.name.like('%' + form.query.data + '%')).all() -Reassigned in: - File: prom-test/library/__init__.py - > Line 233: res = None -File: prom-test/library/__init__.py - > reaches line 242, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',results=res, source=source, form=form) - -Vulnerability 35: -File: prom-test/library/__init__.py - > User input at line 265, trigger word ".data": - user = User.query.filter(User.username == form.username.data).first() -Reassigned in: - File: prom-test/library/__init__.py - > Line 273: session['username'] = user.username - File: prom-test/library/__init__.py - > Line 271: session['logged_in'] = True -File: prom-test/library/__init__.py - > reaches line 265, trigger word "filter(": - user = User.query.filter(User.username == form.username.data).first() - - - -cspears2002/tumblelog -https://github.com/cspears2002/tumblelog -Entry file: tumblelog/tumblelog/__init__.py -Scanned: 2016-10-19 13:19:25.864291 -No vulnerabilities found. - - -vrk7bp/GautamWebsite -https://github.com/vrk7bp/GautamWebsite -Entry file: GautamWebsite/FlaskServer.py -Scanned: 2016-10-19 13:19:27.850661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StevenMaude/pdf_to_html_preview -https://github.com/StevenMaude/pdf_to_html_preview -Entry file: pdf_to_html_preview/app/__init__.py -Scanned: 2016-10-19 13:19:29.194848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voidabhi/flask -https://github.com/voidabhi/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:19:30.782783 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -daniel-cheng/flask_webapp -https://github.com/daniel-cheng/flask_webapp -Entry file: flask_webapp/routes.py -Scanned: 2016-10-19 13:19:34.799591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fmarella/dalie-flask -https://github.com/fmarella/dalie-flask -Entry file: dalie-flask/flask_application/__init__.py -Scanned: 2016-10-19 13:19:36.524458 -No vulnerabilities found. - - -rongmic/flaskr -https://github.com/rongmic/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:19:37.023812 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Rosuav/Flask1 -https://github.com/Rosuav/Flask1 -Entry file: Flask1/1.py -Scanned: 2016-10-19 13:19:38.357344 -Vulnerability 1: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 2: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 3: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 4: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 34, trigger word "replace(": - s = s.replace(' - ', Markup(' - ')) - -Vulnerability 5: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 6: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 7: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 8: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 35, trigger word "replace(": - s = s.replace(' ', Markup('  ')) - -Vulnerability 9: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 10: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 11: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 12: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 36, trigger word "replace(": - s = s.replace(' - -', Markup('

- -

')) - -Vulnerability 13: -File: Flask1/1.py - > User input at line 34, trigger word "Markup(": - s = s.replace(' - ', Markup(' - ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 14: -File: Flask1/1.py - > User input at line 35, trigger word "Markup(": - s = s.replace(' ', Markup('  ')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 15: -File: Flask1/1.py - > User input at line 36, trigger word "Markup(": - s = s.replace(' - -', Markup('

- -

')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 16: -File: Flask1/1.py - > User input at line 37, trigger word "Markup(": - s = s.replace(' -', Markup('
-')) -Reassigned in: - File: Flask1/1.py - > Line 32: s = s.decode('utf-8') - File: Flask1/1.py - > Line 33: s = Markup.escape(s) - File: Flask1/1.py - > Line 38: ret_MAYBE_FUNCTION_NAME = s -File: Flask1/1.py - > reaches line 37, trigger word "replace(": - s = s.replace(' -', Markup('
-')) - -Vulnerability 17: -File: Flask1/1.py - > User input at line 63, trigger word "get(": - search = request.args.get('search', '') -Reassigned in: - File: Flask1/1.py - > Line 77: search = '' - File: Flask1/1.py - > Line 78: morelink = '

More...

' - File: Flask1/1.py - > Line 49: ret_MAYBE_FUNCTION_NAME = redirect(url_for('view')) - File: Flask1/1.py - > Line 51: ret_MAYBE_FUNCTION_NAME = Response('Invalid query, click here to retry', 401, 'WWW-Authenticate''Basic realm="1"') - File: Flask1/1.py - > Line 74: morelink = '' -File: Flask1/1.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('view.html',rows=rows, more=more, morelink=morelink, auth=auth) - -Vulnerability 18: -File: Flask1/1.py - > User input at line 106, trigger word "Markup(": - publish = Markup(publish'Currently published.''Private entry.' + '') -Reassigned in: - File: Flask1/1.py - > Line 100: publish = '' - File: Flask1/1.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('view')) -File: Flask1/1.py - > reaches line 120, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('addent.html',date=date, title=title, content=content, publish=publish, savenote=Markup(savenote)) - - - -scgodbold/flaskFramework -https://github.com/scgodbold/flaskFramework -Entry file: flaskFramework/app/__init__.py -Scanned: 2016-10-19 13:19:39.918047 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramsys/FlaskDo -https://github.com/ramsys/FlaskDo -Entry file: FlaskDo/wsgi/myflaskapp.py -Scanned: 2016-10-19 13:19:41.262830 -No vulnerabilities found. - - -farconada/FlaskWSSE -https://github.com/farconada/FlaskWSSE -Entry file: FlaskWSSE/application/__init__.py -Scanned: 2016-10-19 13:19:42.503202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yi719/flask_demo -https://github.com/yi719/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 13:19:43.001395 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elvinyung/flask-scaffold -https://github.com/elvinyung/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-19 13:19:43.510281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rkk09c/Flask_Boilerplate -https://github.com/rkk09c/Flask_Boilerplate -Entry file: Flask_Boilerplate/app/__init__.py -Scanned: 2016-10-19 13:19:45.164127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -avwie/Flask-Flat -https://github.com/avwie/Flask-Flat -Entry file: Flask-Flat/example/app.py -Scanned: 2016-10-19 13:19:51.517971 -No vulnerabilities found. - - -bertonha/base_flask -https://github.com/bertonha/base_flask -Entry file: base_flask/app/__init__.py -Scanned: 2016-10-19 13:19:53.846754 -No vulnerabilities found. - - -wangwangwar/flask-docker -https://github.com/wangwangwar/flask-docker -Entry file: flask-docker/app/__init__.py -Scanned: 2016-10-19 13:19:59.122592 -No vulnerabilities found. - - -jbradach/flask-markov -https://github.com/jbradach/flask-markov -Entry file: flask-markov/app.py -Scanned: 2016-10-19 13:20:00.502838 -No vulnerabilities found. - - -antoniotari/flask_api -https://github.com/antoniotari/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-19 13:20:00.997265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trudikampfschaf/flask-microblog -https://github.com/trudikampfschaf/flask-microblog -Entry file: None -Scanned: 2016-10-19 13:20:02.506118 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Wojtek-89/Flask-stronka -https://github.com/Wojtek-89/Flask-stronka -Entry file: Flask-stronka/routes.py -Scanned: 2016-10-19 13:20:03.893630 -No vulnerabilities found. - - -BobbyJoeSmith3/FlaskAppLaunch -https://github.com/BobbyJoeSmith3/FlaskAppLaunch -Entry file: FlaskAppLaunch/app/__init__.py -Scanned: 2016-10-19 13:20:10.852650 -No vulnerabilities found. - - -masakichi/pocket -https://github.com/masakichi/pocket -Entry file: pocket/app/__init__.py -Scanned: 2016-10-19 13:20:11.386184 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jwatson/simple-flask-stacktrace -https://github.com/jwatson/simple-flask-stacktrace -Entry file: simple-flask-stacktrace/server.py -Scanned: 2016-10-19 13:20:12.609255 -No vulnerabilities found. - - -NickWoodhams/Flask-Admin-Mongo-Example -https://github.com/NickWoodhams/Flask-Admin-Mongo-Example -Entry file: Flask-Admin-Mongo-Example/app.py -Scanned: 2016-10-19 13:20:13.838275 -No vulnerabilities found. - - -stanleygu/flask-ipython-redirect -https://github.com/stanleygu/flask-ipython-redirect -Entry file: flask-ipython-redirect/app.py -Scanned: 2016-10-19 13:20:24.334763 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jef5ez/nlToSparqlFlask -https://github.com/jef5ez/nlToSparqlFlask -Entry file: nlToSparqlFlask/quepy_flask.py -Scanned: 2016-10-19 13:20:25.683871 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andrewkreid/swagger-flask-test -https://github.com/andrewkreid/swagger-flask-test -Entry file: swagger-flask-test/app_api.py -Scanned: 2016-10-19 13:20:27.017513 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Sysnove/flask-hello-world -https://github.com/Sysnove/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 13:20:27.545349 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -sakserv/hadoop-flask-apps -https://github.com/sakserv/hadoop-flask-apps -Entry file: hadoop-flask-apps/main.py -Scanned: 2016-10-19 13:20:28.885956 -No vulnerabilities found. - - -gene9/Flask-LaunchSoon -https://github.com/gene9/Flask-LaunchSoon -Entry file: Flask-LaunchSoon/launchsoon.py -Scanned: 2016-10-19 13:20:30.874509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sandys/flask-sms-ses -https://github.com/sandys/flask-sms-ses -Entry file: flask-sms-ses/routes.py -Scanned: 2016-10-19 13:20:31.368779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PatrickEGorman/Website -https://github.com/PatrickEGorman/Website -Entry file: Website/__init__.py -Scanned: 2016-10-19 13:20:32.812804 -No vulnerabilities found. - - -zlkca/fezlin -https://github.com/zlkca/fezlin -Entry file: fezlin/__init__.py -Scanned: 2016-10-19 13:20:36.248440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daboross/qxlc -https://github.com/daboross/qxlc -Entry file: qxlc/qxlc/__init__.py -Scanned: 2016-10-19 13:20:37.859886 -Vulnerability 1: -File: qxlc/qxlc/database.py - > User input at line 91, trigger word ".data": - select_result = db.execute(select([data_table.c.id]).where(data_table.c.type == data_type).where(data_table.c.data == data)) -Reassigned in: - File: qxlc/qxlc/database.py - > Line 89: select_result = None -File: qxlc/qxlc/database.py - > reaches line 91, trigger word "execute(": - select_result = db.execute(select([data_table.c.id]).where(data_table.c.type == data_type).where(data_table.c.data == data)) - -Vulnerability 2: -File: qxlc/qxlc/database.py - > User input at line 120, trigger word ".data": - select_result = db.execute(select([data_table.c.type, data_table.c.data]).where(data_table.c.id == data_id)) -Reassigned in: - File: qxlc/qxlc/database.py - > Line 118: select_result = None -File: qxlc/qxlc/database.py - > reaches line 120, trigger word "execute(": - select_result = db.execute(select([data_table.c.type, data_table.c.data]).where(data_table.c.id == data_id)) - - - -frederick-masterton/python27-flask-RESTful-api-how-to -https://github.com/frederick-masterton/python27-flask-RESTful-api-how-to -Entry file: python27-flask-RESTful-api-how-to/restfulapi.py -Scanned: 2016-10-19 13:20:38.351350 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xsteadfastx/praeger -https://github.com/xsteadfastx/praeger -Entry file: praeger/app/app.py -Scanned: 2016-10-19 13:20:39.916299 -Vulnerability 1: -File: praeger/app/app.py - > User input at line 401, trigger word ".data": - bet = Bet(username=current_user.get_id(), score1=form.score1.data, score2=form.score2.data) -Reassigned in: - File: praeger/app/app.py - > Line 379: form = MatchForm(score1=bet.score1, score2=bet.score2) - File: praeger/app/app.py - > Line 385: form = MatchForm() - File: praeger/app/app.py - > Line 398: bet.score1 = form.score1.data - File: praeger/app/app.py - > Line 399: bet.score2 = form.score2.data - File: praeger/app/app.py - > Line 368: ret_MAYBE_FUNCTION_NAME = redirect('/round/' + str(round)) - File: praeger/app/app.py - > Line 406: ret_MAYBE_FUNCTION_NAME = redirect('/round/' + str(round_number)) -File: praeger/app/app.py - > reaches line 407, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bet.html',form=form, rounds=rounds, round=round, team1=team_key_to_title(team1), team2=team_key_to_title(team2)) - - - -shashisp/express -https://github.com/shashisp/express -Entry file: express/app/__init__.py -Scanned: 2016-10-19 13:20:41.121106 -No vulnerabilities found. - - -Smashman/mods.tf -https://github.com/Smashman/mods.tf -Entry file: None -Scanned: 2016-10-19 13:20:43.938402 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Smashman/mods.tf. - -belda/metaextractor -https://github.com/belda/metaextractor -Entry file: None -Scanned: 2016-10-19 13:20:45.276379 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/belda/metaextractor. - -hrkfdn/pyle -https://github.com/hrkfdn/pyle -Entry file: pyle/pyle.py -Scanned: 2016-10-19 13:20:47.547734 -No vulnerabilities found. - - -Ragora/CNS-Web -https://github.com/Ragora/CNS-Web -Entry file: None -Scanned: 2016-10-19 13:20:49.086850 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Ragora/CNS-Web. - -sambodanis/Receipt-Tracker -https://github.com/sambodanis/Receipt-Tracker -Entry file: Receipt-Tracker/server/__init__.py -Scanned: 2016-10-19 13:20:53.356213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zeckalpha/wx -https://github.com/zeckalpha/wx -Entry file: wx/wx/app.py -Scanned: 2016-10-19 13:20:55.960077 -No vulnerabilities found. - - -Kentoseth/SimpleBlog -https://github.com/Kentoseth/SimpleBlog -Entry file: SimpleBlog/__init__.py -Scanned: 2016-10-19 13:21:00.335054 -No vulnerabilities found. - - -dastagg/fsblog -https://github.com/dastagg/fsblog -Entry file: fsblog/app/__init__.py -Scanned: 2016-10-19 13:21:01.681595 -No vulnerabilities found. - - -nrpeterson/homepage -https://github.com/nrpeterson/homepage -Entry file: None -Scanned: 2016-10-19 13:21:02.275438 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sourya/codoo -https://github.com/sourya/codoo -Entry file: codoo/codoo/codoo.py -Scanned: 2016-10-19 13:21:04.615968 -No vulnerabilities found. - - -realpython/discover-flask -https://github.com/realpython/discover-flask -Entry file: discover-flask/project/__init__.py -Scanned: 2016-10-19 13:21:09.890364 -No vulnerabilities found. - - -Depado/flask-skeleton -https://github.com/Depado/flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:21:13.393793 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Depado/flask-skeleton. - -Robpol86/Flask-Celery-Helper -https://github.com/Robpol86/Flask-Celery-Helper -Entry file: Flask-Celery-Helper/tests/instances.py -Scanned: 2016-10-19 13:21:14.857418 -Vulnerability 1: -File: Flask-Celery-Helper/tests/instances.py - > User input at line 67, trigger word "SQLAlchemy": - db = SQLAlchemy(flask_app) -File: Flask-Celery-Helper/tests/instances.py - > reaches line 68, trigger word "execute(": - db.engine.execute('DROP TABLE IF EXISTS celery_tasksetmeta;') - - - -mmautner/simple_api -https://github.com/mmautner/simple_api -Entry file: simple_api/app.py -Scanned: 2016-10-19 13:21:16.181532 -No vulnerabilities found. - - -itsnauman/shrt -https://github.com/itsnauman/shrt -Entry file: shrt/app/__init__.py -Scanned: 2016-10-19 13:21:26.693693 -Vulnerability 1: -File: shrt/app/views.py - > User input at line 51, trigger word "form[": - url = request.form['url'] -Reassigned in: - File: shrt/app/views.py - > Line 52: short_url = shorten_link(url) - File: shrt/app/views.py - > Line 55: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: shrt/app/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('shortened.html',url=short_url) - - - -miguelgrinberg/flask-examples -https://github.com/miguelgrinberg/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-19 13:21:27.215930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aliyarahman/flask_evolution -https://github.com/aliyarahman/flask_evolution -Entry file: flask_evolution/app/__init__.py -Scanned: 2016-10-19 13:21:34.078000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Robpol86/Flask-Redis-Helper -https://github.com/Robpol86/Flask-Redis-Helper -Entry file: Flask-Redis-Helper/tests/conftest.py -Scanned: 2016-10-19 13:21:35.978536 -No vulnerabilities found. - - -desertpy/flask-demo -https://github.com/desertpy/flask-demo -Entry file: None -Scanned: 2016-10-19 13:21:36.481291 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/desertpy/flask-demo. - -jamonation/flask-hmac -https://github.com/jamonation/flask-hmac -Entry file: flask-hmac/flask_hmac.py -Scanned: 2016-10-19 13:21:37.741965 -No vulnerabilities found. - - -Drexden/flaskapp -https://github.com/Drexden/flaskapp -Entry file: None -Scanned: 2016-10-19 13:21:38.267322 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Drexden/flaskapp. - -shreyasrk/flaskr -https://github.com/shreyasrk/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:21:39.755863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jvalentini/flaskr -https://github.com/jvalentini/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:21:40.251586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdorman1/flaskapp -https://github.com/cdorman1/flaskapp -Entry file: None -Scanned: 2016-10-19 13:21:43.234935 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cdorman1/flaskapp. - -mattiashem/python-oauth2 -https://github.com/mattiashem/python-oauth2 -Entry file: python-oauth2/client2.py -Scanned: 2016-10-19 13:21:46.479426 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -code-haven/FlaskBlog -https://github.com/code-haven/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 13:21:47.081494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HellerCommaA/flask-angular -https://github.com/HellerCommaA/flask-angular -Entry file: None -Scanned: 2016-10-19 13:21:49.790576 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -elainekamlley/flask_skeleton -https://github.com/elainekamlley/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:21:50.304432 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -SelinaMusuta/flask_skeleton -https://github.com/SelinaMusuta/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:21:50.809520 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jhona22baz/blog-flask -https://github.com/jhona22baz/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-19 13:21:54.578891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -the-adrian/demoFlask -https://github.com/the-adrian/demoFlask -Entry file: demoFlask/venv/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 13:21:58.847950 -No vulnerabilities found. - - -portyaninoleh/flask_admin -https://github.com/portyaninoleh/flask_admin -Entry file: flask_admin/flask_test.py -Scanned: 2016-10-19 13:22:02.143783 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pmaddi/flask-graph -https://github.com/pmaddi/flask-graph -Entry file: None -Scanned: 2016-10-19 13:22:11.611330 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BobbyJoeSmith3/flask_skeleton -https://github.com/BobbyJoeSmith3/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:22:12.146925 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -mitkaua/flask-page -https://github.com/mitkaua/flask-page -Entry file: flask-page/app/__init__.py -Scanned: 2016-10-19 13:22:13.789585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abekim/flask-seed -https://github.com/abekim/flask-seed -Entry file: None -Scanned: 2016-10-19 13:22:14.300002 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/abekim/flask-seed. - -dagobailon/flask_skeleton -https://github.com/dagobailon/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:22:15.280816 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jbradach/flask-markov -https://github.com/jbradach/flask-markov -Entry file: flask-markov/app.py -Scanned: 2016-10-19 13:22:17.680129 -No vulnerabilities found. - - -jefftriplett/flask-whois -https://github.com/jefftriplett/flask-whois -Entry file: flask-whois/app.py -Scanned: 2016-10-19 13:22:27.944552 -Vulnerability 1: -File: flask-whois/app.py - > User input at line 11, trigger word "get(": - domain = request.args.get('domain', None) -Reassigned in: - File: flask-whois/app.py - > Line 14: data = pythonwhois.net.get_whois_raw(domain) - File: flask-whois/app.py - > Line 16: parsed = pythonwhois.parse.parse_raw_whois(data,normalized=True) - File: flask-whois/app.py - > Line 19: ret_MAYBE_FUNCTION_NAME = '
{0}
'.format(data[0]) - File: flask-whois/app.py - > Line 21: ret_MAYBE_FUNCTION_NAME = data[0] - File: flask-whois/app.py - > Line 23: ret_MAYBE_FUNCTION_NAME = 'No ?domain= specified!' -File: flask-whois/app.py - > reaches line 17, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(parsed) - - - -Sylnai/flask_zmq -https://github.com/Sylnai/flask_zmq -Entry file: flask_zmq/test.py -Scanned: 2016-10-19 13:22:29.168977 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cristian69/Pagina_Flask -https://github.com/cristian69/Pagina_Flask -Entry file: Pagina_Flask/__init__.py -Scanned: 2016-10-19 13:22:32.932858 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Pagina_Flask/venv/lib/python2.7/genericpath.py - -KittyLee/flask_skeleton -https://github.com/KittyLee/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:22:33.445540 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -areis23/Flask-SQLAlchemy -https://github.com/areis23/Flask-SQLAlchemy -Entry file: Flask-SQLAlchemy/app.py -Scanned: 2016-10-19 13:22:35.040722 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alon21034/flask-server -https://github.com/alon21034/flask-server -Entry file: None -Scanned: 2016-10-19 13:22:36.550780 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alon21034/flask-server. - -msoltysik/FlaskMegaTutorial -https://github.com/msoltysik/FlaskMegaTutorial -Entry file: FlaskMegaTutorial/flask/Lib/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-19 13:22:37.190716 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flect/ht-python-flask -https://github.com/flect/ht-python-flask -Entry file: ht-python-flask/hello.py -Scanned: 2016-10-19 13:22:38.882834 -No vulnerabilities found. - - -pebreo/flask-heroku-helloworld -https://github.com/pebreo/flask-heroku-helloworld -Entry file: flask-heroku-helloworld/app.py -Scanned: 2016-10-19 13:22:40.139636 -No vulnerabilities found. - - -nfazzio/flask-mega-tutorial -https://github.com/nfazzio/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:22:41.628885 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wbeyda/flask-rest-api -https://github.com/wbeyda/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-19 13:22:42.120363 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danwiesenthal/simple_flask_api -https://github.com/danwiesenthal/simple_flask_api -Entry file: simple_flask_api/projectname/__init__.py -Scanned: 2016-10-19 13:22:44.469972 -No vulnerabilities found. - - -maethu/flask-pdf2img -https://github.com/maethu/flask-pdf2img -Entry file: flask-pdf2img/webapp/__init__.py -Scanned: 2016-10-19 13:22:47.648228 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timzdevz/fm-flask-app -https://github.com/timzdevz/fm-flask-app -Entry file: fm-flask-app/app/__init__.py -Scanned: 2016-10-19 13:22:48.993676 -No vulnerabilities found. - - -twstddev/flask-admin-panel -https://github.com/twstddev/flask-admin-panel -Entry file: None -Scanned: 2016-10-19 13:22:50.563566 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/twstddev/flask-admin-panel. - -RockyRoad29/Flask-know_users -https://github.com/RockyRoad29/Flask-know_users -Entry file: Flask-know_users/know_users/__init__.py -Scanned: 2016-10-19 13:22:51.883369 -No vulnerabilities found. - - -SelinaMusuta/three_views -https://github.com/SelinaMusuta/three_views -Entry file: three_views/app/__init__.py -Scanned: 2016-10-19 13:22:55.483042 -No vulnerabilities found. - - -hortonew/Pyruse -https://github.com/hortonew/Pyruse -Entry file: Pyruse/server.py -Scanned: 2016-10-19 13:22:56.856454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GandalfTheGandalf/twitter -https://github.com/GandalfTheGandalf/twitter -Entry file: twitter/hello.py -Scanned: 2016-10-19 13:22:58.086129 -Vulnerability 1: -File: twitter/hello.py - > User input at line 94, trigger word "get(": - resp = twitter.get('statuses/user_timeline.json?screen_name=twitter') -Reassigned in: - File: twitter/hello.py - > Line 96: tweets = resp.data - File: twitter/hello.py - > Line 92: tweets = None -File: twitter/hello.py - > reaches line 100, trigger word "flash(": - flash(resp.status) - -Vulnerability 2: -File: twitter/hello.py - > User input at line 94, trigger word "get(": - resp = twitter.get('statuses/user_timeline.json?screen_name=twitter') -Reassigned in: - File: twitter/hello.py - > Line 96: tweets = resp.data - File: twitter/hello.py - > Line 92: tweets = None -File: twitter/hello.py - > reaches line 101, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',tweets=tweets) - -Vulnerability 3: -File: twitter/hello.py - > User input at line 96, trigger word ".data": - tweets = resp.data -Reassigned in: - File: twitter/hello.py - > Line 92: tweets = None -File: twitter/hello.py - > reaches line 101, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',tweets=tweets) - -Vulnerability 4: -File: twitter/hello.py - > User input at line 109, trigger word "form[": - status = request.form['tweet'] -Reassigned in: - File: twitter/hello.py - > Line 112: resp = twitter.post('statuses/update.json',data='status'status) -File: twitter/hello.py - > reaches line 120, trigger word "flash(": - flash('Successfully tweeted your tweet (ID: #%s)' % resp.data['id']) - -Vulnerability 5: -File: twitter/hello.py - > User input at line 157, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: twitter/hello.py - > reaches line 157, trigger word "url_for(": - next_url = request.args.get('next') or url_for('index') - -Vulnerability 6: -File: twitter/hello.py - > User input at line 157, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: twitter/hello.py - > reaches line 160, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 7: -File: twitter/hello.py - > User input at line 157, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: twitter/hello.py - > reaches line 178, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -lnhubbell/learning_journal -https://github.com/lnhubbell/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:00.702582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fernandojunior/rest_flaskr -https://github.com/fernandojunior/rest_flaskr -Entry file: rest_flaskr/app/__init__.py -Scanned: 2016-10-19 13:23:04.459082 -Vulnerability 1: -File: rest_flaskr/app/views/entry.py - > User input at line 32, trigger word "get(": - entry = Entry.query.get(id) -File: rest_flaskr/app/views/entry.py - > reaches line 37, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(entry=entry.serialize) - - - -somyamohanty/tweet_stream -https://github.com/somyamohanty/tweet_stream -Entry file: tweet_stream/twt_server.py -Scanned: 2016-10-19 13:23:05.672771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jacktian86/learning_journal -https://github.com/jacktian86/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:06.175474 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rivese/learning_journal -https://github.com/rivese/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:13.663575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EyuelAbebe/learning_journal -https://github.com/EyuelAbebe/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:14.182366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corinnelhh/learning_journal -https://github.com/corinnelhh/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:15.696790 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonathansiebert/learning_journal -https://github.com/jonathansiebert/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:16.192166 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sazlin/learning_journal -https://github.com/sazlin/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:16.683746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lfritts/learning_journal -https://github.com/lfritts/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:18.182586 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caderache2014/learning_journal -https://github.com/caderache2014/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:23:28.679792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AngieBrilliance/Swampr -https://github.com/AngieBrilliance/Swampr -Entry file: Swampr/app/__init__.py -Scanned: 2016-10-19 13:23:35.122122 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsvoss/minitwit -https://github.com/joshsvoss/minitwit -Entry file: minitwit/minitwit.py -Scanned: 2016-10-19 13:23:36.508824 -No vulnerabilities found. - - -CasidyHenderson24/swamper -https://github.com/CasidyHenderson24/swamper -Entry file: swamper/app/__init__.py -Scanned: 2016-10-19 13:23:40.191358 -No vulnerabilities found. - - -burdell/GoWithMe -https://github.com/burdell/GoWithMe -Entry file: GoWithMe/app/__init__.py -Scanned: 2016-10-19 13:23:41.469028 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -belda/metaextractor -https://github.com/belda/metaextractor -Entry file: None -Scanned: 2016-10-19 13:23:41.957577 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/belda/metaextractor. - -danimajo/pineapple -https://github.com/danimajo/pineapple -Entry file: pineapple/pineapple.py -Scanned: 2016-10-19 13:23:45.251476 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -finnurtorfa/aflafrettir.is -https://github.com/finnurtorfa/aflafrettir.is -Entry file: None -Scanned: 2016-10-19 13:23:46.988896 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/finnurtorfa/aflafrettir.is. - -BobbyJoeSmith3/swampr -https://github.com/BobbyJoeSmith3/swampr -Entry file: swampr/app/__init__.py -Scanned: 2016-10-19 13:23:53.977544 -No vulnerabilities found. - - -jhtdc/swampr -https://github.com/jhtdc/swampr -Entry file: swampr/app/__init__.py -Scanned: 2016-10-19 13:23:59.090595 -No vulnerabilities found. - - -etse/HackMe -https://github.com/etse/HackMe -Entry file: HackMe/HackMe.py -Scanned: 2016-10-19 13:24:02.119640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elainekamlley/swamper -https://github.com/elainekamlley/swamper -Entry file: swamper/app/__init__.py -Scanned: 2016-10-19 13:24:07.264167 -No vulnerabilities found. - - -birhanuh/MonkeyFace -https://github.com/birhanuh/MonkeyFace -Entry file: MonkeyFace/app/__init__.py -Scanned: 2016-10-19 13:24:13.582003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AureaMartinez/swamp -https://github.com/AureaMartinez/swamp -Entry file: swamp/app/__init__.py -Scanned: 2016-10-19 13:24:18.364521 -No vulnerabilities found. - - -MariellaPaulino/swampr -https://github.com/MariellaPaulino/swampr -Entry file: swampr/app/__init__.py -Scanned: 2016-10-19 13:24:23.353796 -No vulnerabilities found. - - -michaelgugino/web_keyer -https://github.com/michaelgugino/web_keyer -Entry file: web_keyer/main.py -Scanned: 2016-10-19 13:24:28.361792 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -elainekamlley/three_views -https://github.com/elainekamlley/three_views -Entry file: three_views/app/__init__.py -Scanned: 2016-10-19 13:24:31.672595 -No vulnerabilities found. - - -sourya/codoo -https://github.com/sourya/codoo -Entry file: codoo/codoo/codoo.py -Scanned: 2016-10-19 13:24:33.586601 -No vulnerabilities found. - - -betoesquivel/CIE -https://github.com/betoesquivel/CIE -Entry file: None -Scanned: 2016-10-19 13:24:39.413521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -grrrrreg/ASNator -https://github.com/grrrrreg/ASNator -Entry file: ASNator/asntool.py -Scanned: 2016-10-19 13:24:40.771528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ks111777/BookScanner -https://github.com/ks111777/BookScanner -Entry file: BookScanner/run.py -Scanned: 2016-10-19 13:24:46.515116 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hufman/flask_rdf -https://github.com/hufman/flask_rdf -Entry file: flask_rdf/examples/simple.py -Scanned: 2016-10-19 13:24:50.011905 -No vulnerabilities found. - - -aliyarahman/flask_evolution -https://github.com/aliyarahman/flask_evolution -Entry file: flask_evolution/app/__init__.py -Scanned: 2016-10-19 13:24:50.514907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JeffOwOSun/flaskr -https://github.com/JeffOwOSun/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:24:50.998162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shreyasrk/flaskr -https://github.com/shreyasrk/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:24:51.486262 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -craig3050/flasktest -https://github.com/craig3050/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 13:24:51.995605 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdorman1/flaskapp -https://github.com/cdorman1/flaskapp -Entry file: None -Scanned: 2016-10-19 13:24:52.492180 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cdorman1/flaskapp. - -naoiwata/simple-flask-api -https://github.com/naoiwata/simple-flask-api -Entry file: simple-flask-api/api.py -Scanned: 2016-10-19 13:24:53.828843 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devunt/g -https://github.com/devunt/g -Entry file: g/g.py -Scanned: 2016-10-19 13:24:55.143291 -No vulnerabilities found. - - -nrkefauver/FlaskMegatutorial -https://github.com/nrkefauver/FlaskMegatutorial -Entry file: None -Scanned: 2016-10-19 13:25:03.221547 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jhtdc/flask-skeleton -https://github.com/jhtdc/flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:25:04.234197 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jhtdc/flask-skeleton. - -the-adrian/demoFlask -https://github.com/the-adrian/demoFlask -Entry file: demoFlask/venv/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-19 13:25:08.446673 -No vulnerabilities found. - - -LemunkoCORP/flask_lions -https://github.com/LemunkoCORP/flask_lions -Entry file: flask_lions/lemunko_app.py -Scanned: 2016-10-19 13:25:09.715015 -No vulnerabilities found. - - -davidabelman/wordcount_flask -https://github.com/davidabelman/wordcount_flask -Entry file: wordcount_flask/app.py -Scanned: 2016-10-19 13:25:10.930335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tawastory/JuboFlask -https://github.com/tawastory/JuboFlask -Entry file: JuboFlask/minijubo.py -Scanned: 2016-10-19 13:25:16.861842 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -cristian69/Pagina_Flask -https://github.com/cristian69/Pagina_Flask -Entry file: Pagina_Flask/__init__.py -Scanned: 2016-10-19 13:25:17.401357 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Pagina_Flask/venv/lib/python2.7/genericpath.py - -Syntaf/flask-liblogger -https://github.com/Syntaf/flask-liblogger -Entry file: flask-liblogger/app/__init__.py -Scanned: 2016-10-19 13:25:21.127558 -No vulnerabilities found. - - -Benknis/LXC_Flask -https://github.com/Benknis/LXC_Flask -Entry file: LXC_Flask/flask/main.py -Scanned: 2016-10-19 13:25:22.350798 -No vulnerabilities found. - - -miabbott/reserve-flask -https://github.com/miabbott/reserve-flask -Entry file: reserve-flask/app/__init__.py -Scanned: 2016-10-19 13:25:23.717945 -Vulnerability 1: -File: reserve-flask/app/views.py - > User input at line 44, trigger word "get(": - res_id = request.args.get('res_id') -Reassigned in: - File: reserve-flask/app/views.py - > Line 45: reservation = Reservation.query.get(res_id) - File: reserve-flask/app/views.py - > Line 46: user_id = reservation.reserved_by - File: reserve-flask/app/views.py - > Line 47: sys = reservation.device - File: reserve-flask/app/views.py - > Line 48: res_date = reservation.res_datetime - File: reserve-flask/app/views.py - > Line 56: res_date = res_date + timedelta(hours=1) -File: reserve-flask/app/views.py - > reaches line 57, trigger word "filter(": - next_res = Reservation.query.filter(Reservation.res_datetime == res_date, Reservation.reserved_by == user_id, Reservation.device == sys).all() - -Vulnerability 2: -File: reserve-flask/app/views.py - > User input at line 45, trigger word "get(": - reservation = Reservation.query.get(res_id) -Reassigned in: - File: reserve-flask/app/views.py - > Line 46: user_id = reservation.reserved_by - File: reserve-flask/app/views.py - > Line 47: sys = reservation.device - File: reserve-flask/app/views.py - > Line 48: res_date = reservation.res_datetime - File: reserve-flask/app/views.py - > Line 56: res_date = res_date + timedelta(hours=1) -File: reserve-flask/app/views.py - > reaches line 57, trigger word "filter(": - next_res = Reservation.query.filter(Reservation.res_datetime == res_date, Reservation.reserved_by == user_id, Reservation.device == sys).all() - -Vulnerability 3: -File: reserve-flask/app/views.py - > User input at line 79, trigger word "get(": - date_list = request.args.get('res_date').split('-') -Reassigned in: - File: reserve-flask/app/views.py - > Line 80: year = int(date_list[0]) - File: reserve-flask/app/views.py - > Line 81: month = int(date_list[1]) - File: reserve-flask/app/views.py - > Line 82: day = int(date_list[2]) - File: reserve-flask/app/views.py - > Line 83: new_date = date(year, month, day) - File: reserve-flask/app/views.py - > Line 88: new_datetime = datetime.combine(new_date, new_time) - File: reserve-flask/app/views.py - > Line 95: r = Reservation(res_datetime=new_datetime + timedelta(hours=hr), reserved_by=reserved_by, device=system) -File: reserve-flask/app/views.py - > reaches line 104, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('hours',date_str=new_date.isoformat())) - -Vulnerability 4: -File: reserve-flask/app/views.py - > User input at line 79, trigger word "get(": - date_list = request.args.get('res_date').split('-') -Reassigned in: - File: reserve-flask/app/views.py - > Line 80: year = int(date_list[0]) - File: reserve-flask/app/views.py - > Line 81: month = int(date_list[1]) - File: reserve-flask/app/views.py - > Line 82: day = int(date_list[2]) - File: reserve-flask/app/views.py - > Line 83: new_date = date(year, month, day) - File: reserve-flask/app/views.py - > Line 88: new_datetime = datetime.combine(new_date, new_time) - File: reserve-flask/app/views.py - > Line 95: r = Reservation(res_datetime=new_datetime + timedelta(hours=hr), reserved_by=reserved_by, device=system) -File: reserve-flask/app/views.py - > reaches line 104, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('hours',date_str=new_date.isoformat())) - - - -practo/gource-flask -https://github.com/practo/gource-flask -Entry file: gource-flask/gource.py -Scanned: 2016-10-19 13:25:26.055550 -No vulnerabilities found. - - -Robpol86/Flask-JIRA-Helper -https://github.com/Robpol86/Flask-JIRA-Helper -Entry file: Flask-JIRA-Helper/tests/conftest.py -Scanned: 2016-10-19 13:25:32.105939 -No vulnerabilities found. - - -dmonopoly/flask-simple-setup -https://github.com/dmonopoly/flask-simple-setup -Entry file: flask-simple-setup/hello.py -Scanned: 2016-10-19 13:25:34.883715 -No vulnerabilities found. - - -nimate/flask-ink-test -https://github.com/nimate/flask-ink-test -Entry file: flask-ink-test/web.py -Scanned: 2016-10-19 13:25:42.699480 -No vulnerabilities found. - - -tototoshi/flask-app-template -https://github.com/tototoshi/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-19 13:25:43.205395 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zappala/listomatic-flask-server -https://github.com/zappala/listomatic-flask-server -Entry file: listomatic-flask-server/doc/config.py -Scanned: 2016-10-19 13:25:49.501969 -No vulnerabilities found. - - -frimmy/flask-uploads-demo -https://github.com/frimmy/flask-uploads-demo -Entry file: flask-uploads-demo/app.py -Scanned: 2016-10-19 13:25:51.333173 -Vulnerability 1: -File: flask-uploads-demo/app.py - > User input at line 24, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask-uploads-demo/app.py - > Line 26: filename = secure_filename(file.filename) - File: flask-uploads-demo/app.py - > Line 31: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flask-uploads-demo/app.py - > reaches line 28, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: flask-uploads-demo/app.py - > User input at line 24, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask-uploads-demo/app.py - > Line 26: filename = secure_filename(file.filename) - File: flask-uploads-demo/app.py - > Line 31: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flask-uploads-demo/app.py - > reaches line 28, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -natereed/flask-sample-app -https://github.com/natereed/flask-sample-app -Entry file: flask-sample-app/app/__init__.py -Scanned: 2016-10-19 13:25:52.668772 -No vulnerabilities found. - - -ishanagr/ttml -https://github.com/ishanagr/ttml -Entry file: ttml/ttml.py -Scanned: 2016-10-19 13:25:56.770896 -No vulnerabilities found. - - -binishbaig/Binish-s-Shoe-Boutique -https://github.com/binishbaig/Binish-s-Shoe-Boutique -Entry file: Binish-s-Shoe-Boutique/app.py -Scanned: 2016-10-19 13:25:58.470801 -No vulnerabilities found. - - -EyuelAbebe/learning_journal -https://github.com/EyuelAbebe/learning_journal -Entry file: learning_journal/journal.py -Scanned: 2016-10-19 13:25:58.971757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DhashS/Greyhole_Frontend -https://github.com/DhashS/Greyhole_Frontend -Entry file: Greyhole_Frontend/Greyhole Webapp.py -Scanned: 2016-10-19 13:26:00.315776 -No vulnerabilities found. - - -saskyong/CoTwitter -https://github.com/saskyong/CoTwitter -Entry file: None -Scanned: 2016-10-19 13:26:04.930213 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AngieBrilliance/Swampr -https://github.com/AngieBrilliance/Swampr -Entry file: Swampr/app/__init__.py -Scanned: 2016-10-19 13:26:05.468227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eamonjohnson/fierce-rambo-78 -https://github.com/eamonjohnson/fierce-rambo-78 -Entry file: fierce-rambo-78/main.py -Scanned: 2016-10-19 13:26:08.479329 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -d1ff/malinka-web-ui -https://github.com/d1ff/malinka-web-ui -Entry file: malinka-web-ui/webapp.py -Scanned: 2016-10-19 13:26:09.903374 -No vulnerabilities found. - - -OpenLinkedSocialData/aa01 -https://github.com/OpenLinkedSocialData/aa01 -Entry file: aa01/aaServer.py -Scanned: 2016-10-19 13:26:23.936126 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nebelhom/WordPuzzleCreator -https://github.com/Nebelhom/WordPuzzleCreator -Entry file: WordPuzzleCreator/main.py -Scanned: 2016-10-19 13:26:26.260117 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -calpe20/websimple -https://github.com/calpe20/websimple -Entry file: websimple/app.py -Scanned: 2016-10-19 13:26:27.493721 -No vulnerabilities found. - - -ZCT/social_login -https://github.com/ZCT/social_login -Entry file: social_login/github.py -Scanned: 2016-10-19 13:26:28.743634 -Vulnerability 1: -File: social_login/github.py - > User input at line 97, trigger word "get(": - me = auth.get('user').json() -Reassigned in: - File: social_login/github.py - > Line 99: user = User.get_or_create(me['login'], me['name']) - File: social_login/github.py - > Line 102: session['user_id'] = user.id - File: social_login/github.py - > Line 101: session['token'] = auth.access_token -File: social_login/github.py - > reaches line 104, trigger word "flash(": - flash('Logged in as ' + me['name']) - - - -bembu/tidy -https://github.com/bembu/tidy -Entry file: tidy/app/__init__.py -Scanned: 2016-10-19 13:26:30.931226 -Vulnerability 1: -File: tidy/app/views.py - > User input at line 155, trigger word ".data": - user = models.User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: tidy/app/views.py - > Line 157: rv = login_user(user) -File: tidy/app/views.py - > reaches line 158, trigger word "flash(": - flash('Logged in as ' + user.username + '.', 'alert-success') - - - -brcontainer/html2canvas-python-proxy -https://github.com/brcontainer/html2canvas-python-proxy -Entry file: None -Scanned: 2016-10-19 13:26:32.644455 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/brcontainer/html2canvas-python-proxy. - -psychopenguin/wikiwarrior -https://github.com/psychopenguin/wikiwarrior -Entry file: wikiwarrior/wikiwarrior.py -Scanned: 2016-10-19 13:26:34.718838 -Vulnerability 1: -File: wikiwarrior/wikiwarrior.py - > User input at line 73, trigger word "get(": - wikipage = requests.get(wikipedia + '/wiki/' + article).text -Reassigned in: - File: wikiwarrior/wikiwarrior.py - > Line 74: content = wikicontent(wikipage) - File: wikiwarrior/wikiwarrior.py - > Line 88: ret_MAYBE_FUNCTION_NAME = response -File: wikiwarrior/wikiwarrior.py - > reaches line 79, trigger word "replace(": - response = make_response(render_template('wiki.html',app_name=app_name, current_game=gamename(), content=content['text'], infobox=content['infobox'], title=unquote(article).decode('utf-8').replace('_', ' '), gameover=gameover)) - -Vulnerability 2: -File: wikiwarrior/wikiwarrior.py - > User input at line 73, trigger word "get(": - wikipage = requests.get(wikipedia + '/wiki/' + article).text -Reassigned in: - File: wikiwarrior/wikiwarrior.py - > Line 74: content = wikicontent(wikipage) - File: wikiwarrior/wikiwarrior.py - > Line 88: ret_MAYBE_FUNCTION_NAME = response -File: wikiwarrior/wikiwarrior.py - > reaches line 79, trigger word "render_template(": - response = make_response(render_template('wiki.html',app_name=app_name, current_game=gamename(), content=content['text'], infobox=content['infobox'], title=unquote(article).decode('utf-8').replace('_', ' '), gameover=gameover)) - - - -MwzkQmuUZkFLbXm/tumblelog -https://github.com/MwzkQmuUZkFLbXm/tumblelog -Entry file: tumblelog/__init__.py -Scanned: 2016-10-19 13:26:36.129420 -No vulnerabilities found. - - -birhanuh/MonkeyFace -https://github.com/birhanuh/MonkeyFace -Entry file: MonkeyFace/app/__init__.py -Scanned: 2016-10-19 13:26:36.620609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yoniLavi/guess_me -https://github.com/yoniLavi/guess_me -Entry file: guess_me/guess_me.py -Scanned: 2016-10-19 13:26:38.423365 -Vulnerability 1: -File: guess_me/guess_me.py - > User input at line 22, trigger word "form[": - new_username = request.form['username'] -Reassigned in: - File: guess_me/guess_me.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: guess_me/guess_me.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('login.html') -File: guess_me/guess_me.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = (render_template('invalid_username.html',username=new_username), 401) - -Vulnerability 2: -File: guess_me/guess_me.py - > User input at line 46, trigger word "get(": - guess_input = request.args.get('guessed_number') -Reassigned in: - File: guess_me/guess_me.py - > Line 52: guess = int(guess_input) - File: guess_me/guess_me.py - > Line 62: ret_MAYBE_FUNCTION_NAME = render_template('victory.html',username=username, guesses=current_guesses) - File: guess_me/guess_me.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: guess_me/guess_me.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('guess.html',MAX_NUMBER=MAX_NUMBER) -File: guess_me/guess_me.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('guess.html',MAX_NUMBER=MAX_NUMBER, current_guesses=current_guesses, last_guess=guess) - - - -andrewkreid/oauth2-test-client -https://github.com/andrewkreid/oauth2-test-client -Entry file: oauth2-test-client/openam_client.py -Scanned: 2016-10-19 13:26:39.643068 -No vulnerabilities found. - - -mcgoddard/chatta -https://github.com/mcgoddard/chatta -Entry file: chatta/chatta.py -Scanned: 2016-10-19 13:26:49.646305 -Vulnerability 1: -File: chatta/chatta.py - > User input at line 30, trigger word "get(": - last_update = request.args.get('last_update', '') -Reassigned in: - File: chatta/chatta.py - > Line 33: last_datetime = datetime.datetime.strptime(last_update, '%Y-%m-%d %H:%M:%S') -File: chatta/chatta.py - > reaches line 38, trigger word "filter(": - new_messages = Message.query.filter(Message.created_at > last_datetime) - - - -hrkfdn/mcpanel -https://github.com/hrkfdn/mcpanel -Entry file: mcpanel/mcpanel.py -Scanned: 2016-10-19 13:26:50.918902 -No vulnerabilities found. - - -danimajo/pineapple_pdf -https://github.com/danimajo/pineapple_pdf -Entry file: pineapple_pdf/pineapple.py -Scanned: 2016-10-19 13:26:55.200883 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcgoddard/HALON -https://github.com/mcgoddard/HALON -Entry file: HALON/halon.py -Scanned: 2016-10-19 13:26:59.083119 -Vulnerability 1: -File: HALON/halon.py - > User input at line 118, trigger word "form[": - character_id = request.form['character_id'] -File: HALON/halon.py - > reaches line 119, trigger word "filter(": - character = Character.query.filter(Character.id == character_id).first() - - - -andrewparrish/SkypeConferenceAutomator -https://github.com/andrewparrish/SkypeConferenceAutomator -Entry file: SkypeConferenceAutomator/gui.py -Scanned: 2016-10-19 13:27:00.434131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ks111777/BookScannerScraper -https://github.com/ks111777/BookScannerScraper -Entry file: BookScannerScraper/run.py -Scanned: 2016-10-19 13:27:03.844531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hussaintamboli/doMonit -https://github.com/hussaintamboli/doMonit -Entry file: doMonit/monit.py -Scanned: 2016-10-19 13:27:05.288343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -betoesquivel/CIE -https://github.com/betoesquivel/CIE -Entry file: None -Scanned: 2016-10-19 13:27:05.828653 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -miguelgrinberg/Flask-SocketIO-Chat -https://github.com/miguelgrinberg/Flask-SocketIO-Chat -Entry file: Flask-SocketIO-Chat/app/__init__.py -Scanned: 2016-10-19 13:27:08.090900 -Vulnerability 1: -File: Flask-SocketIO-Chat/app/main/routes.py - > User input at line 24, trigger word "get(": - name = session.get('name', '') -Reassigned in: - File: Flask-SocketIO-Chat/app/main/routes.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-SocketIO-Chat/app/main/routes.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - -Vulnerability 2: -File: Flask-SocketIO-Chat/app/main/routes.py - > User input at line 25, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: Flask-SocketIO-Chat/app/main/routes.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-SocketIO-Chat/app/main/routes.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - - - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-19 13:38:04.524200 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-19 13:38:05.028961 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-19 13:38:05.555177 -Vulnerability 1: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Everything looks good!
- Click here to complete the payment. - ' % url_for('paypal_do',token=getexp_response['TOKEN']) - -Vulnerability 2: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Oh noes! PayPal returned an error code.
-
-                %s
-            
- Click here to try again. - ' % (getexp_response['ACK'], url_for('index')) - - - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-19 13:38:06.990137 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-19 13:38:08.158039 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-19 13:38:08.686030 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-19 13:38:09.206098 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-19 13:38:10.725933 -No vulnerabilities found. - - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-19 13:38:11.283257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-19 13:38:11.812743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-19 13:38:13.188797 -No vulnerabilities found. - - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-19 13:38:13.712126 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-19 13:38:14.785477 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-19 13:38:16.454462 -No vulnerabilities found. - - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-19 13:38:16.978530 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-19 13:38:17.509184 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-19 13:38:19.401289 -No vulnerabilities found. - - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-19 13:38:19.932333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-19 13:38:22.041902 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-19 13:38:23.640743 -No vulnerabilities found. - - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-19 13:38:26.047454 -No vulnerabilities found. - - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:38:26.573529 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-19 13:38:27.568851 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-19 13:38:28.071295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -parryjacob/flask-boilerplate -https://github.com/parryjacob/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 13:39:04.622406 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/parryjacob/flask-boilerplate. - -jpercent/flask-control -https://github.com/jpercent/flask-control -Entry file: flask-control/example.py -Scanned: 2016-10-19 13:39:05.144688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ceasar/pocket_flask -https://github.com/Ceasar/pocket_flask -Entry file: pocket_flask/app/__init__.py -Scanned: 2016-10-19 13:39:07.788825 -No vulnerabilities found. - - -CMGS/poll -https://github.com/CMGS/poll -Entry file: poll/app.py -Scanned: 2016-10-19 13:39:11.292419 -Vulnerability 1: -File: poll/app.py - > User input at line 31, trigger word "get(": - q = request.args.get('q', '') -File: poll/app.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user=g.user, subjects=get_subjects(q), groups=get_groups(), group=get_group(q)) - -Vulnerability 2: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - -Vulnerability 3: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - - - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-19 13:39:12.545071 -No vulnerabilities found. - - -dogrdon/txtr -https://github.com/dogrdon/txtr -Entry file: txtr/txtr.py -Scanned: 2016-10-19 13:39:13.065166 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-19 13:39:13.574920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-19 13:39:15.679975 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-19 13:39:16.208993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sburns/switchboard -https://github.com/sburns/switchboard -Entry file: switchboard/sample_app.py -Scanned: 2016-10-19 13:39:16.742229 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-19 13:39:17.268513 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-19 13:39:19.172400 -No vulnerabilities found. - - -bogdan-kulynych/cloudlectures -https://github.com/bogdan-kulynych/cloudlectures -Entry file: cloudlectures/flask/sessions.py -Scanned: 2016-10-19 13:39:19.754213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanielleSucher/BookQueue -https://github.com/DanielleSucher/BookQueue -Entry file: BookQueue/app.py -Scanned: 2016-10-19 13:39:21.156614 -Vulnerability 1: -File: BookQueue/app.py - > User input at line 145, trigger word "form[": - from_email = request.form['sender'].lower() -File: BookQueue/app.py - > reaches line 146, trigger word "filter(": - query = User.query.filter(User.email == from_email) - - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-19 13:39:24.118873 -No vulnerabilities found. - - -maxcnunes/flaskgaedemo -https://github.com/maxcnunes/flaskgaedemo -Entry file: flaskgaedemo/main.py -Scanned: 2016-10-19 13:39:25.190868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -domenicosolazzo/flask_examples -https://github.com/domenicosolazzo/flask_examples -Entry file: flask_examples/logger_example.py -Scanned: 2016-10-19 13:39:26.525738 -No vulnerabilities found. - - -akostyuk/flask-dbmigrate -https://github.com/akostyuk/flask-dbmigrate -Entry file: flask-dbmigrate/tests.py -Scanned: 2016-10-19 13:39:27.063264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -50onRed/phillypug-flask -https://github.com/50onRed/phillypug-flask -Entry file: phillypug-flask/phillypug/app.py -Scanned: 2016-10-19 13:39:28.359703 -Vulnerability 1: -File: phillypug-flask/phillypug/views.py - > User input at line 19, trigger word "get(": - repos = redis_client.get(repos_key) -Reassigned in: - File: phillypug-flask/phillypug/views.py - > Line 21: repos = json.loads(repos) -File: phillypug-flask/phillypug/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',repos=repos) - - - -booo/flask-gtfs -https://github.com/booo/flask-gtfs -Entry file: None -Scanned: 2016-10-19 13:39:28.882710 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/booo/flask-gtfs. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-19 13:39:29.396594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nerevu/prometheus -https://github.com/nerevu/prometheus -Entry file: prometheus/app/__init__.py -Scanned: 2016-10-19 13:39:29.970101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottdnz/flask_skeleton -https://github.com/scottdnz/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-19 13:39:30.491136 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -pavlenko-volodymyr/flask-study -https://github.com/pavlenko-volodymyr/flask-study -Entry file: flask-study/hello.py -Scanned: 2016-10-19 13:39:31.054239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slizadel/flask-gitrcv -https://github.com/slizadel/flask-gitrcv -Entry file: flask-gitrcv/flask-gitrcv/gitrcv.py -Scanned: 2016-10-19 13:39:32.740265 -No vulnerabilities found. - - -apjd/flask-heroku -https://github.com/apjd/flask-heroku -Entry file: flask-heroku/flasky.py -Scanned: 2016-10-19 13:39:34.034443 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-19 13:39:35.506709 -No vulnerabilities found. - - -JunilJacob/Paint-app-using-Flask -https://github.com/JunilJacob/Paint-app-using-Flask -Entry file: Paint-app-using-Flask/hello.py -Scanned: 2016-10-19 13:40:07.330554 -Vulnerability 1: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 18, trigger word "execute(": - c.execute('DELETE FROM Image WHERE file=?', iname) - -Vulnerability 2: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 3: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 4: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 34, trigger word "execute(": - for row in c.execute('SELECT * FROM Image WHERE file=?', filename): - -Vulnerability 5: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 36, trigger word "render_template(": - resp = Response('' + render_template('paint.html'),status=200, mimetype='html') - - - -dimfox/flask-mega-tutorial -https://github.com/dimfox/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:40:07.839555 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-19 13:40:12.842540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-19 13:40:14.388613 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshkurz/exi -https://github.com/joshkurz/exi -Entry file: exi/exi/tests/security/test_app/__init__.py -Scanned: 2016-10-19 13:40:16.148298 -No vulnerabilities found. - - -booo/baedproject -https://github.com/booo/baedproject -Entry file: baedproject/app.py -Scanned: 2016-10-19 13:40:17.441498 -No vulnerabilities found. - - -kalimatas/herokuflask -https://github.com/kalimatas/herokuflask -Entry file: herokuflask/app.py -Scanned: 2016-10-19 13:40:18.744554 -No vulnerabilities found. - - -norbert/helloflask -https://github.com/norbert/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 13:40:19.288672 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-19 13:40:21.402448 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -Pusungwi/lobotomizer -https://github.com/Pusungwi/lobotomizer -Entry file: None -Scanned: 2016-10-19 13:40:21.929599 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pusungwi/lobotomizer. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-19 13:40:22.432823 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -takosuke/pizzasuicideclub -https://github.com/takosuke/pizzasuicideclub -Entry file: pizzasuicideclub/psc_app/__init__.py -Scanned: 2016-10-19 13:40:23.032365 -Vulnerability 1: -File: pizzasuicideclub/psc_app/filters.py - > User input at line 15, trigger word "Markup(": - result = Markup(result) -Reassigned in: - File: pizzasuicideclub/psc_app/filters.py - > Line 16: ret_MAYBE_FUNCTION_NAME = result -File: pizzasuicideclub/psc_app/filters.py - > reaches line 12, trigger word "replace(": - result = ' - -'.join(('

%s

' % p.replace(' -', '
-') for p in _paragraph_re.split(escape(value)))) -This vulnerability is potentially sanitised by: ['escape'] - -Vulnerability 2: -File: pizzasuicideclub/psc_app/pages/views.py - > User input at line 35, trigger word "get(": - post = Post.query.get(postId) -Reassigned in: - File: pizzasuicideclub/psc_app/pages/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('404.html',user=user) -File: pizzasuicideclub/psc_app/pages/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pages/permalink.html',title=post.title, post=post, user=user) - -Vulnerability 3: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 31, trigger word "get(": - profile = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('pages.userlist')) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/profile.html',profile=profile, user=user, form=form) - -Vulnerability 4: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 54, trigger word "flash(": - flash('You are logged in %s' % user.username) - -Vulnerability 5: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 6: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 7: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 8: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 9: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 10: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 11: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 140, trigger word "get(": - user = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 134: user = g.user - File: pizzasuicideclub/psc_app/users/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=userId)) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 145, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/modify_password.html',form=form, user=user) - - - -neilduncan/FlickrPlaceholders -https://github.com/neilduncan/FlickrPlaceholders -Entry file: FlickrPlaceholders/main.py -Scanned: 2016-10-19 13:40:24.331840 -No vulnerabilities found. - - -amaterasu-/placeholder -https://github.com/amaterasu-/placeholder -Entry file: placeholder/image.py -Scanned: 2016-10-19 13:40:25.622493 -No vulnerabilities found. - - -koon-kai/kiblog -https://github.com/koon-kai/kiblog -Entry file: kiblog/app.py -Scanned: 2016-10-19 13:40:26.810039 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelrojo/flask -https://github.com/joelrojo/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:40:27.409321 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -asgoel/Merge-flask -https://github.com/asgoel/Merge-flask -Entry file: Merge-flask/app.py -Scanned: 2016-10-19 13:40:28.413767 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregimba/Vodka -https://github.com/gregimba/Vodka -Entry file: Vodka/app.py -Scanned: 2016-10-19 13:40:30.180609 -No vulnerabilities found. - - -corydolphin/flask-olinauth -https://github.com/corydolphin/flask-olinauth -Entry file: flask-olinauth/example.py -Scanned: 2016-10-19 13:40:32.375131 -No vulnerabilities found. - - -danielestevez/flasktutorial -https://github.com/danielestevez/flasktutorial -Entry file: None -Scanned: 2016-10-19 13:40:33.887393 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pityonline/flaskr -https://github.com/pityonline/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:40:34.402792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Studentapp-Flask -https://github.com/prabeesh/Studentapp-Flask -Entry file: Studentapp-Flask/test.py -Scanned: 2016-10-19 13:40:35.417199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dproni/flask_test -https://github.com/dproni/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-19 13:41:07.583563 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-19 13:41:09.009935 -No vulnerabilities found. - - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-19 13:41:09.571792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kishorekdty/paint_using_flask -https://github.com/kishorekdty/paint_using_flask -Entry file: None -Scanned: 2016-10-19 13:41:11.083863 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kishorekdty/paint_using_flask. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-19 13:41:14.619994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Heroku-Paint-Using-Flask -https://github.com/rasheedh/Heroku-Paint-Using-Flask -Entry file: None -Scanned: 2016-10-19 13:41:16.136504 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Heroku-Paint-Using-Flask. - -sreekanthkaralmanna/heroku-paint-app-using-flask -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask -Entry file: None -Scanned: 2016-10-19 13:41:16.662161 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask. - -mikewallace1979/milk -https://github.com/mikewallace1979/milk -Entry file: milk/milk.py -Scanned: 2016-10-19 13:41:18.994033 -No vulnerabilities found. - - -goonpug/goonpug-stats -https://github.com/goonpug/goonpug-stats -Entry file: goonpug-stats/goonpug/__init__.py -Scanned: 2016-10-19 13:41:20.796108 -No vulnerabilities found. - - -clly/blog.md -https://github.com/clly/blog.md -Entry file: blog/flaskr.py -Scanned: 2016-10-19 13:41:21.312854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simplyluke/dothis -https://github.com/simplyluke/dothis -Entry file: dothis/dothis.py -Scanned: 2016-10-19 13:41:22.606795 -No vulnerabilities found. - - -oberkowitz/improv -https://github.com/oberkowitz/improv -Entry file: improv/mytest/app.py -Scanned: 2016-10-19 13:41:25.954182 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: improv/mytest/venv/lib/python2.7/genericpath.py - -mikeboers/Flask-Images -https://github.com/mikeboers/Flask-Images -Entry file: Flask-Images/tests/__init__.py -Scanned: 2016-10-19 13:41:28.474603 -No vulnerabilities found. - - -berlotto/flask-app-template -https://github.com/berlotto/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-19 13:41:29.458863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/flask-jsonpify -https://github.com/corydolphin/flask-jsonpify -Entry file: flask-jsonpify/test.py -Scanned: 2016-10-19 13:41:31.628687 -No vulnerabilities found. - - -eadmundo/flask-static-blog -https://github.com/eadmundo/flask-static-blog -Entry file: flask-static-blog/app/__init__.py -Scanned: 2016-10-19 13:41:33.563474 -Vulnerability 1: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 17, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 30: pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - -Vulnerability 2: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 30, trigger word "get(": - pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - - - -0atman/flask-basic -https://github.com/0atman/flask-basic -Entry file: flask-basic/flask-basic.py -Scanned: 2016-10-19 13:41:35.356511 -No vulnerabilities found. - - -clmns/flasktest -https://github.com/clmns/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-19 13:41:36.398358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zfdang/memcached-in-openshift -https://github.com/zfdang/memcached-in-openshift -Entry file: memcached-in-openshift/wsgi/main.py -Scanned: 2016-10-19 13:41:36.923431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garethpaul/flask-sample -https://github.com/garethpaul/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 13:41:37.934024 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -naveenpremchand02/flask_url -https://github.com/naveenpremchand02/flask_url -Entry file: flask_url/url.py -Scanned: 2016-10-19 13:41:38.453126 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-NavBar -https://github.com/xiechao06/Flask-NavBar -Entry file: Flask-NavBar/flask_nav_bar.py -Scanned: 2016-10-19 13:41:39.482550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/flask-oauth-tutorial -https://github.com/cpdean/flask-oauth-tutorial -Entry file: flask-oauth-tutorial/flaskr.py -Scanned: 2016-10-19 13:41:40.783765 -No vulnerabilities found. - - -nsfyn55/flask-mega-tutorial -https://github.com/nsfyn55/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-19 13:42:09.431953 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kshitizrimal/flaskr-modified -https://github.com/kshitizrimal/flaskr-modified -Entry file: flaskr-modified/flaskr.py -Scanned: 2016-10-19 13:42:10.047560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prasanthkumara/Heroku-Paint-App-Using--Flask -https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask -Entry file: None -Scanned: 2016-10-19 13:42:13.069764 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask. - -pyxze/PyxzeCorpus -https://github.com/pyxze/PyxzeCorpus -Entry file: PyxzeCorpus/corpus.py -Scanned: 2016-10-19 13:42:17.356769 -No vulnerabilities found. - - -crcsmnky/thehotspot -https://github.com/crcsmnky/thehotspot -Entry file: thehotspot/v2/app.py -Scanned: 2016-10-19 13:42:19.006316 -Vulnerability 1: -File: thehotspot/v2/app.py - > User input at line 54, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('places.html',places=places, count=count, skip=checkins_skip) - -Vulnerability 2: -File: thehotspot/v2/app.py - > User input at line 64, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',users=users, count=count, skip=checkins_skip) - -Vulnerability 3: -File: thehotspot/v2/app.py - > User input at line 73, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('checkins.html',checkins=checkins, users=users, places=places, skip=checkins_skip, count=count) - -Vulnerability 4: -File: thehotspot/v2/app.py - > User input at line 103, trigger word "get(": - cats_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('categories.html',categories=categories, count=count, skip=cats_skip) - -Vulnerability 5: -File: thehotspot/v2/app.py - > User input at line 114, trigger word "get(": - places_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 118, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',category=cat, places=places, mapped=places.clone(), count=cat['count'], skip=places_skip) - - - -etscrivner/sovereign-states -https://github.com/etscrivner/sovereign-states -Entry file: sovereign-states/sovereign_states/api.py -Scanned: 2016-10-19 13:42:20.485120 -No vulnerabilities found. - - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-19 13:42:21.898919 -No vulnerabilities found. - - -sreedathns/paint-app-using-heroku-and-flask -https://github.com/sreedathns/paint-app-using-heroku-and-flask -Entry file: None -Scanned: 2016-10-19 13:42:22.418314 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreedathns/paint-app-using-heroku-and-flask. - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-19 13:42:22.938693 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -chadgh/chessy -https://github.com/chadgh/chessy -Entry file: None -Scanned: 2016-10-19 13:42:23.459624 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wowo/pithermo -https://github.com/wowo/pithermo -Entry file: pithermo/pithermo.py -Scanned: 2016-10-19 13:42:29.484233 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aranasaurus/android-demo-server -https://github.com/aranasaurus/android-demo-server -Entry file: android-demo-server/app.py -Scanned: 2016-10-19 13:42:31.495709 -Vulnerability 1: -File: android-demo-server/app.py - > User input at line 21, trigger word "get(": - r = requests.get(url.format(query)) -Reassigned in: - File: android-demo-server/app.py - > Line 22: images = [(i, json.dumps(i)) for i in json.loads(r.text)['responseData']['results']] -File: android-demo-server/app.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',images=images) - - - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 13:42:32.933805 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deepgully/me -https://github.com/deepgully/me -Entry file: me/settings.py -Scanned: 2016-10-19 13:42:33.575633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mickey06/Flask-principal-example -https://github.com/mickey06/Flask-principal-example -Entry file: Flask-principal-example/FPrincipals.py -Scanned: 2016-10-19 13:42:35.046839 -No vulnerabilities found. - - -crazygit/flask -https://github.com/crazygit/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:42:35.658145 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wingu/flask_filters -https://github.com/wingu/flask_filters -Entry file: flask_filters/test_flask_filters.py -Scanned: 2016-10-19 13:42:37.051365 -No vulnerabilities found. - - -BuongiornoMIP/Reding -https://github.com/BuongiornoMIP/Reding -Entry file: Reding/reding/app.py -Scanned: 2016-10-19 13:42:39.441537 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-19 13:42:41.358343 -No vulnerabilities found. - - -colwilson/flask-lazyapi -https://github.com/colwilson/flask-lazyapi -Entry file: flask-lazyapi/demo_server.py -Scanned: 2016-10-19 13:42:41.905909 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-DataBrowser -https://github.com/xiechao06/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-19 13:42:42.449200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-19 13:42:43.929122 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Masagin/FlaskCelery -https://github.com/Masagin/FlaskCelery -Entry file: FlaskCelery/flask.py -Scanned: 2016-10-19 13:42:44.445143 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-19 13:43:11.438578 -No vulnerabilities found. - - -EvilDmitri/flask-mikroblog -https://github.com/EvilDmitri/flask-mikroblog -Entry file: flask-mikroblog/app/__init__.py -Scanned: 2016-10-19 13:43:12.872673 -No vulnerabilities found. - - -maxcnunes/flask_bravi -https://github.com/maxcnunes/flask_bravi -Entry file: flask_bravi/braviapp/__init__.py -Scanned: 2016-10-19 13:43:14.385471 -No vulnerabilities found. - - -zhemao/flask_demo -https://github.com/zhemao/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-19 13:43:18.412051 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SalemHarrache-Archive/flask_chat_eventsource -https://github.com/SalemHarrache-Archive/flask_chat_eventsource -Entry file: flask_chat_eventsource/server.py -Scanned: 2016-10-19 13:43:18.945526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-19 13:43:22.513938 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-19 13:43:23.056501 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -texuf/myflaskproject -https://github.com/texuf/myflaskproject -Entry file: myflaskproject/hello.py -Scanned: 2016-10-19 13:43:24.341238 -No vulnerabilities found. - - -csesoc/bark-core -https://github.com/csesoc/bark-core -Entry file: bark-core/bark/__init__.py -Scanned: 2016-10-19 13:43:25.354615 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-19 13:43:27.768890 -No vulnerabilities found. - - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-19 13:43:30.290565 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -lee212/fg-ws -https://github.com/lee212/fg-ws -Entry file: fg-ws/fgws/ws/FGWSApps.py -Scanned: 2016-10-19 13:43:31.840161 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brunsgaard/qwablog -https://github.com/brunsgaard/qwablog -Entry file: qwablog/qwablog.py -Scanned: 2016-10-19 13:43:34.273183 -No vulnerabilities found. - - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-19 13:43:35.598481 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -rubinovitz/fourequality -https://github.com/rubinovitz/fourequality -Entry file: fourequality/app.py -Scanned: 2016-10-19 13:43:38.336062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darylchang/Hacker-Viz -https://github.com/darylchang/Hacker-Viz -Entry file: Hacker-Viz/flaskDir.py -Scanned: 2016-10-19 13:43:39.714517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexlod/movielist -https://github.com/alexlod/movielist -Entry file: movielist/movielist.py -Scanned: 2016-10-19 13:43:41.239092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhumbert/literable -https://github.com/dhumbert/literable -Entry file: None -Scanned: 2016-10-19 13:43:46.817740 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dhumbert/literable. - -ArcTanSusan/Task_List -https://github.com/ArcTanSusan/Task_List -Entry file: Task_List/tipsy/tipsy.py -Scanned: 2016-10-19 13:43:48.467266 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbuysse/url_shortener -https://github.com/rbuysse/url_shortener -Entry file: url_shortener/url.py -Scanned: 2016-10-19 13:43:49.751466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-19 13:43:50.979633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanrose/box-arcade -https://github.com/seanrose/box-arcade -Entry file: box-arcade/app/__init__.py -Scanned: 2016-10-19 13:43:51.974163 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-19 13:43:53.266988 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-19 13:43:55.728412 -No vulnerabilities found. - - -theho/flask-wsgi -https://github.com/theho/flask-wsgi -Entry file: flask-wsgi/wsgi.py -Scanned: 2016-10-19 13:44:14.824987 -No vulnerabilities found. - - -adityaathalye/flaskr -https://github.com/adityaathalye/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:44:15.330914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-19 13:44:16.835554 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-19 13:44:20.355829 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-19 13:44:21.780496 -No vulnerabilities found. - - -ekfriis/flask-mbtiles -https://github.com/ekfriis/flask-mbtiles -Entry file: flask-mbtiles/mbtileserver.py -Scanned: 2016-10-19 13:44:24.082855 -No vulnerabilities found. - - -hyaticua/flask-blog -https://github.com/hyaticua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 13:44:24.677194 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -thearchduke/flask-boiler -https://github.com/thearchduke/flask-boiler -Entry file: None -Scanned: 2016-10-19 13:44:25.202160 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StefanKjartansson/bower-flask -https://github.com/StefanKjartansson/bower-flask -Entry file: bower-flask/server.py -Scanned: 2016-10-19 13:44:27.525798 -No vulnerabilities found. - - -tanayseven/Voix -https://github.com/tanayseven/Voix -Entry file: None -Scanned: 2016-10-19 13:44:28.111487 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gatesphere/flaskr-flask-tutorial -https://github.com/gatesphere/flaskr-flask-tutorial -Entry file: flaskr-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-19 13:44:29.431785 -No vulnerabilities found. - - -bazerk/baz-flask-base -https://github.com/bazerk/baz-flask-base -Entry file: baz-flask-base/app/app.py -Scanned: 2016-10-19 13:44:33.342125 -Vulnerability 1: -File: baz-flask-base/app/frontend/views.py - > User input at line 26, trigger word "get(": - form = RegisterForm(username=request.args.get('username', twitter_name), password=request.args.get('password', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 30: err = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 30: user = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('frontend.login')) -File: baz-flask-base/app/frontend/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/register.html',form=form, twitter_name=twitter_name) - -Vulnerability 2: -File: baz-flask-base/app/frontend/views.py - > User input at line 48, trigger word "get(": - form = LoginForm(login=request.args.get('login', None), next=request.args.get('next', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 52: user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id - File: baz-flask-base/app/frontend/views.py - > Line 61: ret_MAYBE_FUNCTION_NAME = redirect('') -File: baz-flask-base/app/frontend/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/login.html',form=form) - - - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-19 13:44:34.884042 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-19 13:44:35.421788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Andrey-Khobnya/flask-sessions-mongo -https://github.com/Andrey-Khobnya/flask-sessions-mongo -Entry file: flask-sessions-mongo/flask-sessions-mongo/examples/loginsession.py -Scanned: 2016-10-19 13:44:36.749102 -No vulnerabilities found. - - -igrishaev/youtube-python-api-sample -https://github.com/igrishaev/youtube-python-api-sample -Entry file: youtube-python-api-sample/app.py -Scanned: 2016-10-19 13:44:37.878135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-19 13:44:39.302194 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -kfr2/pynances -https://github.com/kfr2/pynances -Entry file: pynances/pynances/pynances.py -Scanned: 2016-10-19 13:44:41.662646 -No vulnerabilities found. - - -WilliamMayor/geoffrey -https://github.com/WilliamMayor/geoffrey -Entry file: geoffrey/geoffrey.py -Scanned: 2016-10-19 13:44:42.965642 -No vulnerabilities found. - - -Timothee/Passerelle -https://github.com/Timothee/Passerelle -Entry file: Passerelle/passerelle.py -Scanned: 2016-10-19 13:44:44.256621 -No vulnerabilities found. - - -fusic-com/flask-todo -https://github.com/fusic-com/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-19 13:44:50.628244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bkabrda/flask-whooshee -https://github.com/bkabrda/flask-whooshee -Entry file: flask-whooshee/test.py -Scanned: 2016-10-19 13:44:53.249500 -No vulnerabilities found. - - -DavidWittman/csrgenerator.com -https://github.com/DavidWittman/csrgenerator.com -Entry file: None -Scanned: 2016-10-19 13:44:54.260385 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-19 13:44:55.556738 -No vulnerabilities found. - - -1000ch/flask-handson -https://github.com/1000ch/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-19 13:44:56.109146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-19 13:44:56.619963 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -jishnujagajeeve/Flaskr -https://github.com/jishnujagajeeve/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 13:45:14.183509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Basher51/Flaskr -https://github.com/Basher51/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 13:45:15.686184 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-19 13:45:17.191472 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-19 13:45:18.706616 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaste/FlaskDeferredHandler -https://github.com/kaste/FlaskDeferredHandler -Entry file: FlaskDeferredHandler/flask_handler_test.py -Scanned: 2016-10-19 13:45:23.035199 -No vulnerabilities found. - - -adityaathalye/flaskr2 -https://github.com/adityaathalye/flaskr2 -Entry file: flaskr2/app.py -Scanned: 2016-10-19 13:45:24.324687 -No vulnerabilities found. - - -ConceptPending/flaskTemplate -https://github.com/ConceptPending/flaskTemplate -Entry file: flaskTemplate/server.py -Scanned: 2016-10-19 13:45:26.531627 -No vulnerabilities found. - - -AlexMost/Flask-starter -https://github.com/AlexMost/Flask-starter -Entry file: Flask-starter/app.py -Scanned: 2016-10-19 13:45:27.920716 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-19 13:45:28.441725 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jonomillin/learning-flask -https://github.com/jonomillin/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-19 13:45:29.048258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nthfloor/Flask_learn -https://github.com/nthfloor/Flask_learn -Entry file: Flask_learn/login_system/flskr.py -Scanned: 2016-10-19 13:45:33.524906 -Vulnerability 1: -File: Flask_learn/login_system/flskr.py - > User input at line 116, trigger word "get(": - username = request.form.get('username') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - -Vulnerability 2: -File: Flask_learn/login_system/flskr.py - > User input at line 117, trigger word "get(": - password = request.form.get('password') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - - - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-19 13:45:34.973683 -No vulnerabilities found. - - -mmcgahan/flask-labs-bb -https://github.com/mmcgahan/flask-labs-bb -Entry file: flask-labs-bb/flask_labs/__init__.py -Scanned: 2016-10-19 13:45:35.572201 -Vulnerability 1: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 2: -File: flask-labs-bb/flask_labs/views.py - > User input at line 29, trigger word ".data": - user = db.session.query(User).filter(User.username == login_form.username.data).first() -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 3: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 4: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 5: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',login_form=login_form) - - - -daisuzu/flask-app-sample -https://github.com/daisuzu/flask-app-sample -Entry file: flask-app-sample/db.py -Scanned: 2016-10-19 13:45:36.882015 -No vulnerabilities found. - - -penpyt/flask-couchdb-auth -https://github.com/penpyt/flask-couchdb-auth -Entry file: flask-couchdb-auth/example/guestbook.py -Scanned: 2016-10-19 13:45:38.385531 -Vulnerability 1: -File: flask-couchdb-auth/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-auth/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-19 13:45:38.913765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 13:45:39.483685 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-19 13:45:41.298961 -No vulnerabilities found. - - -honestappalachia/honest_site -https://github.com/honestappalachia/honest_site -Entry file: honest_site/run.py -Scanned: 2016-10-19 13:45:43.609346 -Vulnerability 1: -File: honest_site/run.py - > User input at line 36, trigger word "get(": - template = page.meta.get('template', 'default.html') -File: honest_site/run.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -daikeshi/one-dollar-metasearch-engine -https://github.com/daikeshi/one-dollar-metasearch-engine -Entry file: one-dollar-metasearch-engine/app/__init__.py -Scanned: 2016-10-19 13:45:44.154934 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-19 13:45:50.167407 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msalahi/art-party -https://github.com/msalahi/art-party -Entry file: art-party/app.py -Scanned: 2016-10-19 13:45:54.331658 -No vulnerabilities found. - - -saltire/artpubpy -https://github.com/saltire/artpubpy -Entry file: artpubpy/artpubpy.py -Scanned: 2016-10-19 13:45:55.842265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcniac/simple-blog -https://github.com/mcniac/simple-blog -Entry file: simple-blog/tumblelog/__init__.py -Scanned: 2016-10-19 13:45:58.851477 -No vulnerabilities found. - - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-19 13:46:00.122458 -No vulnerabilities found. - - -fusic-com/flask-webcache -https://github.com/fusic-com/flask-webcache -Entry file: flask-webcache/contrib/sleepycalc/app.py -Scanned: 2016-10-19 13:46:02.313205 -No vulnerabilities found. - - -rehandalal/flask-mobility -https://github.com/rehandalal/flask-mobility -Entry file: flask-mobility/flask_mobility/tests/test_decorators.py -Scanned: 2016-10-19 13:46:16.874195 -Vulnerability 1: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 48, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 2: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 51, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 3: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 69, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 4: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 72, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 5: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 36, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 6: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 40, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'off') - - - -kelp404/Flask-GAE -https://github.com/kelp404/Flask-GAE -Entry file: None -Scanned: 2016-10-19 13:46:17.384044 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jaysonsantos/jinja-assets-compressor -https://github.com/jaysonsantos/jinja-assets-compressor -Entry file: jinja-assets-compressor/jac/contrib/flask.py -Scanned: 2016-10-19 13:46:20.002140 -No vulnerabilities found. - - -nabetama/flaskr -https://github.com/nabetama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:46:24.013097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-19 13:46:25.523032 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-19 13:46:28.113012 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-19 13:46:30.097385 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shunyata/flask-helloworld -https://github.com/shunyata/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-19 13:46:31.919394 -No vulnerabilities found. - - -stephen-allison/basic-flask -https://github.com/stephen-allison/basic-flask -Entry file: None -Scanned: 2016-10-19 13:46:32.454791 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stephen-allison/basic-flask. - -bollwyvl/flask-reloaded -https://github.com/bollwyvl/flask-reloaded -Entry file: None -Scanned: 2016-10-19 13:46:35.983333 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bollwyvl/flask-reloaded. - -kitanata/flask-demo -https://github.com/kitanata/flask-demo -Entry file: None -Scanned: 2016-10-19 13:46:37.515280 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kitanata/flask-demo. - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-19 13:46:38.918590 -No vulnerabilities found. - - -flyingsparx/MongoFlask -https://github.com/flyingsparx/MongoFlask -Entry file: MongoFlask/application.py -Scanned: 2016-10-19 13:46:40.227721 -Vulnerability 1: -File: MongoFlask/application.py - > User input at line 39, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -File: MongoFlask/application.py - > reaches line 39, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - -Vulnerability 2: -File: MongoFlask/application.py - > User input at line 64, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -Reassigned in: - File: MongoFlask/application.py - > Line 67: session['id'] = person.id -File: MongoFlask/application.py - > reaches line 64, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - - - -DanAlbert/flask-guestbook -https://github.com/DanAlbert/flask-guestbook -Entry file: flask-guestbook/guestbook.py -Scanned: 2016-10-19 13:46:41.533754 -No vulnerabilities found. - - -kirkeby/empty-flask -https://github.com/kirkeby/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-19 13:46:42.544778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rehandalal/buchner -https://github.com/rehandalal/buchner -Entry file: buchner/buchner/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-19 13:46:44.548815 -No vulnerabilities found. - - -vitalk/flask-staticutils -https://github.com/vitalk/flask-staticutils -Entry file: flask-staticutils/tests/test_app/__init__.py -Scanned: 2016-10-19 13:46:45.982647 -No vulnerabilities found. - - -chiwong/flask_quickstart -https://github.com/chiwong/flask_quickstart -Entry file: flask_quickstart/hello.py -Scanned: 2016-10-19 13:46:46.649732 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_quickstart/venv_hello/lib/python2.6/genericpath.py - -archieyang/flask_app -https://github.com/archieyang/flask_app -Entry file: None -Scanned: 2016-10-19 13:46:47.165483 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/archieyang/flask_app. - -ipfans/openshift-flask-template -https://github.com/ipfans/openshift-flask-template -Entry file: openshift-flask-template/wsgi/mainapp.py -Scanned: 2016-10-19 13:46:52.470867 -No vulnerabilities found. - - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-19 13:46:53.760515 -No vulnerabilities found. - - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 13:46:56.307424 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -philangist/url-shorten -https://github.com/philangist/url-shorten -Entry file: url-shorten/shorten.py -Scanned: 2016-10-19 13:46:57.844037 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabionatali/DigiWebStats -https://github.com/fabionatali/DigiWebStats -Entry file: DigiWebStats/app.py -Scanned: 2016-10-19 13:46:59.389584 -Vulnerability 1: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 2: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 3: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - -Vulnerability 4: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - - - -confessin/addressbook -https://github.com/confessin/addressbook -Entry file: addressbook/addressbook.py -Scanned: 2016-10-19 13:47:02.026312 -No vulnerabilities found. - - -nafur/flmpc -https://github.com/nafur/flmpc -Entry file: flmpc/main.py -Scanned: 2016-10-19 13:47:03.447359 -No vulnerabilities found. - - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-19 13:47:03.966636 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kvalle/greetr -https://github.com/kvalle/greetr -Entry file: greetr/greetr/__init__.py -Scanned: 2016-10-19 13:47:18.405753 -No vulnerabilities found. - - -mjhea0/brew -https://github.com/mjhea0/brew -Entry file: brew/app.py -Scanned: 2016-10-19 13:47:20.803085 -No vulnerabilities found. - - -dan-v/crossfitboxreview -https://github.com/dan-v/crossfitboxreview -Entry file: crossfitboxreview/seed_affiliates.py -Scanned: 2016-10-19 13:47:24.285512 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoctorMalboro/leandropoblet.com -https://github.com/DoctorMalboro/leandropoblet.com -Entry file: None -Scanned: 2016-10-19 13:47:26.276503 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DoctorMalboro/leandropoblet.com. - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-19 13:47:27.573437 -No vulnerabilities found. - - -danielholmstrom/flask-alchemyview -https://github.com/danielholmstrom/flask-alchemyview -Entry file: flask-alchemyview/tests/test_with_flask_sqlalchemy.py -Scanned: 2016-10-19 13:47:32.041189 -Vulnerability 1: -File: flask-alchemyview/tests/test_view.py - > User input at line 150, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 150, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) - -Vulnerability 2: -File: flask-alchemyview/tests/test_view.py - > User input at line 154, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 154, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 3: -File: flask-alchemyview/tests/test_view.py - > User input at line 181, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 174: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 177: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 178, trigger word "url_for(": - response = self.json_put(url_for('SimpleModelView:put',id=model_id), 'name''new name') - -Vulnerability 4: -File: flask-alchemyview/tests/test_view.py - > User input at line 197, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 197, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) - -Vulnerability 5: -File: flask-alchemyview/tests/test_view.py - > User input at line 209, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 202: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 205: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 206, trigger word "url_for(": - response = self.json_delete(url_for('SimpleModelView:put',id=model_id)) - -Vulnerability 6: -File: flask-alchemyview/tests/test_view.py - > User input at line 236, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) -File: flask-alchemyview/tests/test_view.py - > reaches line 236, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) - -Vulnerability 7: -File: flask-alchemyview/tests/test_view.py - > User input at line 246, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 246, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 8: -File: flask-alchemyview/tests/test_view.py - > User input at line 251, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 251, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 9: -File: flask-alchemyview/tests/test_view.py - > User input at line 258, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) -File: flask-alchemyview/tests/test_view.py - > reaches line 258, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) - -Vulnerability 10: -File: flask-alchemyview/tests/test_view.py - > User input at line 266, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index')) -File: flask-alchemyview/tests/test_view.py - > reaches line 266, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index')) - -Vulnerability 11: -File: flask-alchemyview/tests/test_view.py - > User input at line 279, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 279, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 12: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 13: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - -Vulnerability 14: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 15: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - - - -vovantics/flask-bluebone -https://github.com/vovantics/flask-bluebone -Entry file: flask-bluebone/app/app.py -Scanned: 2016-10-19 13:47:32.618471 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-19 13:47:35.698731 -No vulnerabilities found. - - -abulte/flask-arduino-websocket-sqlite -https://github.com/abulte/flask-arduino-websocket-sqlite -Entry file: flask-arduino-websocket-sqlite/app.py -Scanned: 2016-10-19 13:47:38.150209 -No vulnerabilities found. - - -futuregrid/flask_cm -https://github.com/futuregrid/flask_cm -Entry file: flask_cm/examples/forms/app.py -Scanned: 2016-10-19 13:47:40.746779 -Vulnerability 1: -File: flask_cm/examples/forms/app.py - > User input at line 24, trigger word "get(": - comments = session.get('comments', []) -File: flask_cm/examples/forms/app.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',comments=comments, form=form) - - - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-19 13:47:44.057062 -No vulnerabilities found. - - -mozillazg/flask-demo -https://github.com/mozillazg/flask-demo -Entry file: None -Scanned: 2016-10-19 13:47:44.583448 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mozillazg/flask-demo. - -toastercup/flask-social -https://github.com/toastercup/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-19 13:47:45.096448 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-19 13:47:47.435441 -No vulnerabilities found. - - -danillosouza/flask-boilerplate -https://github.com/danillosouza/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 13:47:47.948661 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danillosouza/flask-boilerplate. - -dogrdon/flask-map -https://github.com/dogrdon/flask-map -Entry file: None -Scanned: 2016-10-19 13:47:48.480978 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sapid/Flask-Community -https://github.com/sapid/Flask-Community -Entry file: None -Scanned: 2016-10-19 13:47:53.010772 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sapid/Flask-Community. - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-19 13:47:58.037908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-19 13:48:00.333343 -No vulnerabilities found. - - -garbados/flask-the-gauntlet -https://github.com/garbados/flask-the-gauntlet -Entry file: flask-the-gauntlet/app.py -Scanned: 2016-10-19 13:48:03.116859 -No vulnerabilities found. - - -NoxDineen/microblog -https://github.com/NoxDineen/microblog -Entry file: None -Scanned: 2016-10-19 13:48:03.646481 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kaibin/Condom_Data_Server -https://github.com/Kaibin/Condom_Data_Server -Entry file: Condom_Data_Server/app.py -Scanned: 2016-10-19 13:48:05.184220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nathanrosspowell/frozenboots -https://github.com/nathanrosspowell/frozenboots -Entry file: None -Scanned: 2016-10-19 13:48:21.466572 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nathanrosspowell/frozenboots. - -craneon/debutante -https://github.com/craneon/debutante -Entry file: debutante/app.py -Scanned: 2016-10-19 13:48:23.893786 -Vulnerability 1: -File: debutante/app.py - > User input at line 14, trigger word "form[": - name1 = request.form['name1'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - -Vulnerability 2: -File: debutante/app.py - > User input at line 15, trigger word "form[": - name2 = request.form['name2'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - -Vulnerability 3: -File: debutante/app.py - > User input at line 16, trigger word "form[": - age = request.form['age'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - - - -kljensen/async-flask-sqlalchemy-example -https://github.com/kljensen/async-flask-sqlalchemy-example -Entry file: async-flask-sqlalchemy-example/server.py -Scanned: 2016-10-19 13:48:28.120683 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kommmy/Flask -https://github.com/kommmy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 13:48:29.701972 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbika/flaskm -https://github.com/rbika/flaskm -Entry file: flaskm/flaskm.py -Scanned: 2016-10-19 13:48:35.210493 -No vulnerabilities found. - - -catfive/flaskr -https://github.com/catfive/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:48:35.736939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikedll/flasksqlitedemo -https://github.com/mikedll/flasksqlitedemo -Entry file: flasksqlitedemo/app.py -Scanned: 2016-10-19 13:48:36.288660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GerardoGR/flask-boilerplate -https://github.com/GerardoGR/flask-boilerplate -Entry file: None -Scanned: 2016-10-19 13:48:38.808715 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/GerardoGR/flask-boilerplate. - -edouardswiac/linkstash-flask -https://github.com/edouardswiac/linkstash-flask -Entry file: linkstash-flask/app.py -Scanned: 2016-10-19 13:48:40.323815 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-19 13:48:41.616514 -No vulnerabilities found. - - -mattolsen1/flask_tumblelog -https://github.com/mattolsen1/flask_tumblelog -Entry file: flask_tumblelog/tumblelog/__init__.py -Scanned: 2016-10-19 13:48:44.049108 -No vulnerabilities found. - - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-19 13:48:45.847165 -No vulnerabilities found. - - -eudaimonious/HangmanWebsite -https://github.com/eudaimonious/HangmanWebsite -Entry file: HangmanWebsite/application_hangman.py -Scanned: 2016-10-19 13:48:46.514309 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bracken1983/flaskBlogDemo -https://github.com/bracken1983/flaskBlogDemo -Entry file: flaskBlogDemo/flask-sqlalchemy-test.py -Scanned: 2016-10-19 13:48:47.161870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-19 13:48:47.685775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pinchsoft/flask-newrelic-dotcloud -https://github.com/pinchsoft/flask-newrelic-dotcloud -Entry file: flask-newrelic-dotcloud/app.py -Scanned: 2016-10-19 13:48:49.967110 -No vulnerabilities found. - - -PurplePilot/zanzeeba -https://github.com/PurplePilot/zanzeeba -Entry file: zanzeeba/appstd.py -Scanned: 2016-10-19 13:48:50.543991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hit9/flask-sign-in-with-github.py -https://github.com/hit9/flask-sign-in-with-github.py -Entry file: None -Scanned: 2016-10-19 13:48:54.060972 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bscarlett/personal-site -https://github.com/bscarlett/personal-site -Entry file: personal-site/PersonalSite/__init__.py -Scanned: 2016-10-19 13:49:00.106111 -No vulnerabilities found. - - -cypx/trocr -https://github.com/cypx/trocr -Entry file: trocr/trocr.py -Scanned: 2016-10-19 13:49:03.430175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ungarst/p4p_svr -https://github.com/ungarst/p4p_svr -Entry file: p4p_svr/server/__init__.py -Scanned: 2016-10-19 13:49:07.013357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -koordinates/py-pubtkt -https://github.com/koordinates/py-pubtkt -Entry file: py-pubtkt/app.py -Scanned: 2016-10-19 13:49:08.418134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-19 13:49:22.104780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wbolster/flask-uuid -https://github.com/wbolster/flask-uuid -Entry file: flask-uuid/test_flask_uuid.py -Scanned: 2016-10-19 13:49:25.430908 -No vulnerabilities found. - - -pyr/url-shortener -https://github.com/pyr/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-19 13:49:27.961872 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmi356/filemanager -https://github.com/vmi356/filemanager -Entry file: filemanager/manager.py -Scanned: 2016-10-19 13:49:29.512499 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-19 13:49:33.935726 -No vulnerabilities found. - - -cratejoy/flask-experiment -https://github.com/cratejoy/flask-experiment -Entry file: flask-experiment/test/test.py -Scanned: 2016-10-19 13:49:35.453173 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openfree/flaskr -https://github.com/openfree/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:49:36.971425 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulthrissur/Flask_app -https://github.com/rahulthrissur/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-19 13:49:40.021697 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcerise/flask-photos -https://github.com/jcerise/flask-photos -Entry file: flask-photos/app.py -Scanned: 2016-10-19 13:49:42.463132 -No vulnerabilities found. - - -grimkeke/miniblog -https://github.com/grimkeke/miniblog -Entry file: miniblog/app/__init__.py -Scanned: 2016-10-19 13:49:45.622057 -No vulnerabilities found. - - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-19 13:49:46.629111 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -Pitxon/sivir -https://github.com/Pitxon/sivir -Entry file: sivir/app.py -Scanned: 2016-10-19 13:49:48.920683 -No vulnerabilities found. - - -sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB -Entry file: None -Scanned: 2016-10-19 13:49:50.202344 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB. - -ssidorenko/twisker -https://github.com/ssidorenko/twisker -Entry file: twisker/flask/sessions.py -Scanned: 2016-10-19 13:49:52.267090 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gabriele91/rss-soap-server -https://github.com/Gabriele91/rss-soap-server -Entry file: rss-soap-server/app.py -Scanned: 2016-10-19 13:49:55.507890 -No vulnerabilities found. - - -einashaddad/follow_app -https://github.com/einashaddad/follow_app -Entry file: follow_app/web_button.py -Scanned: 2016-10-19 13:49:58.020109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cypx/trocr -https://github.com/cypx/trocr -Entry file: trocr/trocr.py -Scanned: 2016-10-19 13:49:58.538633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haizaar/microtweet -https://github.com/haizaar/microtweet -Entry file: microtweet/server.py -Scanned: 2016-10-19 13:49:59.847667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-19 13:50:02.265688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulkmr/flask-bigapp-template -https://github.com/rahulkmr/flask-bigapp-template -Entry file: flask-bigapp-template/main.py -Scanned: 2016-10-19 13:50:03.797547 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/flask-tlsauth -https://github.com/stef/flask-tlsauth -Entry file: flask-tlsauth/demo/webapp.py -Scanned: 2016-10-19 13:50:06.208210 -No vulnerabilities found. - - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-19 13:50:08.741788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-19 13:50:22.785493 -No vulnerabilities found. - - -topherjaynes/flasktut -https://github.com/topherjaynes/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-19 13:50:24.440734 -No vulnerabilities found. - - -elboby/flask-config-override -https://github.com/elboby/flask-config-override -Entry file: flask-config-override/tests/basic_flask_test.py -Scanned: 2016-10-19 13:50:25.969286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sherzberg/flask-native-package -https://github.com/sherzberg/flask-native-package -Entry file: flask-native-package/application.py -Scanned: 2016-10-19 13:50:30.661515 -No vulnerabilities found. - - -xrefor/flask_tut -https://github.com/xrefor/flask_tut -Entry file: flask_tut/flaskr.py -Scanned: 2016-10-19 13:50:32.443266 -No vulnerabilities found. - - -McrCoderDojo/Flask-Webapps -https://github.com/McrCoderDojo/Flask-Webapps -Entry file: Flask-Webapps/flask1.py -Scanned: 2016-10-19 13:50:33.029282 -No vulnerabilities found. - - -xrefor/flask_stuff -https://github.com/xrefor/flask_stuff -Entry file: flask_stuff/main.py -Scanned: 2016-10-19 13:50:34.323185 -No vulnerabilities found. - - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 13:50:34.841464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adesst/flask-blog -https://github.com/adesst/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 13:50:37.399946 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -gourneau/anode -https://github.com/gourneau/anode -Entry file: anode/app.py -Scanned: 2016-10-19 13:50:41.911090 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmahnken/Flask_to_do_list -https://github.com/mmahnken/Flask_to_do_list -Entry file: Flask_to_do_list/tipsy.py -Scanned: 2016-10-19 13:50:43.434432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask -Entry file: Paintapp-Javascript-Canvas-Flask/test.py -Scanned: 2016-10-19 13:50:45.797445 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 19, trigger word "execute(": - cur.execute('SELECT * FROM Image WHERE imgname=?', imgname) - -Vulnerability 2: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - -Vulnerability 3: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - -Vulnerability 4: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - - - -godber/flask-mobile-switch -https://github.com/godber/flask-mobile-switch -Entry file: flask-mobile-switch/missionops/missionops/__init__.py -Scanned: 2016-10-19 13:50:47.313707 -Vulnerability 1: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 29, trigger word "form[": - title = config_form['title'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 33: config_title.value = title - File: flask-mobile-switch/missionops/missionops/views.py - > Line 43: title = title.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 45: title = 'Mission Ops' -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 41, trigger word "filter(": - title = Config.query.filter(Config.key == 'title').first() - -Vulnerability 2: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 30, trigger word "form[": - image_url = config_form['url'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 37: config_url.value = image_url - File: flask-mobile-switch/missionops/missionops/views.py - > Line 49: image_url = image_url.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 51: image_url = '../static/Mars.jpg' - File: flask-mobile-switch/missionops/missionops/views.py - > Line 52: ysize = image_size(image_url) - File: flask-mobile-switch/missionops/missionops/views.py - > Line 24: ysize = 0 -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 47, trigger word "filter(": - image_url = Config.query.filter(Config.key == 'url').first() - -Vulnerability 3: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 29, trigger word "form[": - title = config_form['title'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 33: config_title.value = title - File: flask-mobile-switch/missionops/missionops/views.py - > Line 43: title = title.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 45: title = 'Mission Ops' -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('app.html',switch=switch, title=title, image_url=image_url, ysize=ysize) - -Vulnerability 4: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 30, trigger word "form[": - image_url = config_form['url'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 37: config_url.value = image_url - File: flask-mobile-switch/missionops/missionops/views.py - > Line 49: image_url = image_url.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 51: image_url = '../static/Mars.jpg' - File: flask-mobile-switch/missionops/missionops/views.py - > Line 52: ysize = image_size(image_url) - File: flask-mobile-switch/missionops/missionops/views.py - > Line 24: ysize = 0 -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('app.html',switch=switch, title=title, image_url=image_url, ysize=ysize) - - - -naveenpremchand02/paintapp-using-Flask -https://github.com/naveenpremchand02/paintapp-using-Flask -Entry file: None -Scanned: 2016-10-19 13:50:47.840129 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/naveenpremchand02/paintapp-using-Flask. - -orkunozbek/deploy_test -https://github.com/orkunozbek/deploy_test -Entry file: deploy_test/app_pack/__init__.py -Scanned: 2016-10-19 13:50:49.164516 -No vulnerabilities found. - - -y2bishop2y/microengine -https://github.com/y2bishop2y/microengine -Entry file: microengine/lib/flask_sqlalchemy.py -Scanned: 2016-10-19 13:50:49.867283 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -Entry file: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -Scanned: 2016-10-19 13:50:52.675859 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > User input at line 34, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 22: imgdata = row['imgdata'] - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 38: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - - - -popeliao/FlavorPlusServer -https://github.com/popeliao/FlavorPlusServer -Entry file: FlavorPlusServer/app.py -Scanned: 2016-10-19 13:50:54.967548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tatertot/tipsy -https://github.com/tatertot/tipsy -Entry file: tipsy/tipsy.py -Scanned: 2016-10-19 13:50:58.505655 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ssidorenko/twisker -https://github.com/ssidorenko/twisker -Entry file: twisker/flask/sessions.py -Scanned: 2016-10-19 13:51:00.025173 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soniacs/mockup-boot -https://github.com/soniacs/mockup-boot -Entry file: mockup-boot/build.py -Scanned: 2016-10-19 13:51:01.424871 -Vulnerability 1: -File: mockup-boot/build.py - > User input at line 33, trigger word "get(": - template = page.meta.get('template', 'page.html') -File: mockup-boot/build.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -Liquix/microblog -https://github.com/Liquix/microblog -Entry file: None -Scanned: 2016-10-19 13:51:01.967758 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mvader/Quickflask -https://github.com/mvader/Quickflask -Entry file: Quickflask/quickflask/app.py -Scanned: 2016-10-19 13:51:04.480041 -No vulnerabilities found. - - -einashaddad/follow_app -https://github.com/einashaddad/follow_app -Entry file: follow_app/web_button.py -Scanned: 2016-10-19 13:51:05.018900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joepetrini/dayuntil -https://github.com/joepetrini/dayuntil -Entry file: dayuntil/app/__init__.py -Scanned: 2016-10-19 13:51:08.011199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dnet/wsfacade -https://github.com/dnet/wsfacade -Entry file: wsfacade/wsfacade.py -Scanned: 2016-10-19 13:51:11.476275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -croach/cheap-and-scalable-websites-code -https://github.com/croach/cheap-and-scalable-websites-code -Entry file: cheap-and-scalable-websites-code/generator.py -Scanned: 2016-10-19 13:51:12.893190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kylemarsh/recipelister -https://github.com/kylemarsh/recipelister -Entry file: recipelister/recipelister/__init__.py -Scanned: 2016-10-19 13:51:24.447478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jimpurbrick/hackinabox -https://github.com/jimpurbrick/hackinabox -Entry file: hackinabox/app.py -Scanned: 2016-10-19 13:51:25.852806 -No vulnerabilities found. - - -thegeekchick/converter -https://github.com/thegeekchick/converter -Entry file: None -Scanned: 2016-10-19 13:51:30.313947 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -angstwad/linky -https://github.com/angstwad/linky -Entry file: linky/linky/__init__.py -Scanned: 2016-10-19 13:51:32.757278 -No vulnerabilities found. - - -pysgf/GeoPhotoPy -https://github.com/pysgf/GeoPhotoPy -Entry file: GeoPhotoPy/GeoPhotoPy/__init__.py -Scanned: 2016-10-19 13:51:45.236604 -No vulnerabilities found. - - -GradySimon/RoommateDishes -https://github.com/GradySimon/RoommateDishes -Entry file: RoommateDishes/dishes.py -Scanned: 2016-10-19 13:51:46.600600 -No vulnerabilities found. - - -the-gigi/cloud_state -https://github.com/the-gigi/cloud_state -Entry file: cloud_state/CloudState.py -Scanned: 2016-10-19 13:51:48.010406 -No vulnerabilities found. - - -xiyoulaoyuanjia/flaskapp -https://github.com/xiyoulaoyuanjia/flaskapp -Entry file: None -Scanned: 2016-10-19 13:51:49.421844 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiyoulaoyuanjia/flaskapp. - -trustrachel/Flask-FeatureFlags -https://github.com/trustrachel/Flask-FeatureFlags -Entry file: Flask-FeatureFlags/tests/fixtures.py -Scanned: 2016-10-19 13:51:50.072425 -Vulnerability 1: -File: Flask-FeatureFlags/tests/test_core_function.py - > User input at line 55, trigger word "get(": - response = self.test_client.get(url) -File: Flask-FeatureFlags/tests/test_core_function.py - > reaches line 57, trigger word "url_for(": - response.location == url_for('redirect_destination',_external=True) - -Vulnerability 2: -File: Flask-FeatureFlags/tests/test_core_function.py - > User input at line 66, trigger word "get(": - response = self.test_client.get(url) -File: Flask-FeatureFlags/tests/test_core_function.py - > reaches line 68, trigger word "url_for(": - response.location == url_for('redirect_destination',_external=True) - - - -aahluwal/flask -https://github.com/aahluwal/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:51:50.678908 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-19 13:51:51.183552 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clef/sample-flask -https://github.com/clef/sample-flask -Entry file: sample-flask/app.py -Scanned: 2016-10-19 13:51:52.590861 -No vulnerabilities found. - - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-19 13:51:55.038722 -No vulnerabilities found. - - -jonascj/flaskr -https://github.com/jonascj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:51:55.557774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thinboy92/flasktuts -https://github.com/thinboy92/flasktuts -Entry file: flasktuts/app/__init__.py -Scanned: 2016-10-19 13:51:57.048363 -No vulnerabilities found. - - -guilhermecomum/FlaskTutorial -https://github.com/guilhermecomum/FlaskTutorial -Entry file: None -Scanned: 2016-10-19 13:51:57.582960 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-19 13:51:59.605561 -Vulnerability 1: -File: squeak/app.py - > User input at line 73, trigger word "form[": - search_term = request.form['term'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 2: -File: squeak/app.py - > User input at line 74, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 3: -File: squeak/app.py - > User input at line 83, trigger word "get(": - response = requests.get(signed_url) -Reassigned in: - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - - - -xjdrew/flask-demo -https://github.com/xjdrew/flask-demo -Entry file: None -Scanned: 2016-10-19 13:52:00.124579 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xjdrew/flask-demo. - -aerialdomo/flask_microblog -https://github.com/aerialdomo/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-19 13:52:00.661282 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-19 13:52:01.161742 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jinzhangg/flask-helloworld -https://github.com/jinzhangg/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-19 13:52:04.076069 -No vulnerabilities found. - - -hardez/Flask-Skeleton -https://github.com/hardez/Flask-Skeleton -Entry file: None -Scanned: 2016-10-19 13:52:06.093759 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hardez/Flask-Skeleton. - -stfy86/pruebitasFlask -https://github.com/stfy86/pruebitasFlask -Entry file: pruebitasFlask/practica4/src/app/__init__.py -Scanned: 2016-10-19 13:52:08.743477 -No vulnerabilities found. - - -kracekumar/test-flask -https://github.com/kracekumar/test-flask -Entry file: test-flask/app.py -Scanned: 2016-10-19 13:52:13.365172 -No vulnerabilities found. - - -charliecrissman/microblog -https://github.com/charliecrissman/microblog -Entry file: None -Scanned: 2016-10-19 13:52:13.875991 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -abulte/Flask-Bootstrap-Fanstatic -https://github.com/abulte/Flask-Bootstrap-Fanstatic -Entry file: Flask-Bootstrap-Fanstatic/application/__init__.py -Scanned: 2016-10-19 13:52:26.331519 -No vulnerabilities found. - - -jennyferpinto/Flask_Part_1 -https://github.com/jennyferpinto/Flask_Part_1 -Entry file: Flask_Part_1/tipsy.py -Scanned: 2016-10-19 13:52:26.874293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-19 13:52:34.376547 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -isms/flask-phonebank-dashboard -https://github.com/isms/flask-phonebank-dashboard -Entry file: flask-phonebank-dashboard/app.py -Scanned: 2016-10-19 13:52:46.922071 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jpanganiban/flask-heroku-kickstart -https://github.com/jpanganiban/flask-heroku-kickstart -Entry file: None -Scanned: 2016-10-19 13:52:48.434988 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jpanganiban/flask-heroku-kickstart. - -justinxreese/ajax-calculator-flask -https://github.com/justinxreese/ajax-calculator-flask -Entry file: None -Scanned: 2016-10-19 13:52:49.978865 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-19 13:52:50.510242 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soniacs/cabinet -https://github.com/soniacs/cabinet -Entry file: cabinet/app/__init__.py -Scanned: 2016-10-19 13:52:52.118600 -Vulnerability 1: -File: cabinet/app/views/clients.py - > User input at line 18, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/clients.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/view.html',title=client.name, client=client, projects=projects, invoices=invoices) - -Vulnerability 2: -File: cabinet/app/views/clients.py - > User input at line 33, trigger word "form[": - client = Client(name=request.form['name'], company=request.form['company'], website=request.form['website'], twitter=request.form['twitter'], email=request.form['email'], telephone=request.form['telephone'], skype=request.form['skype'], street=request.form['street'], street_2=request.form['street_2'], city=request.form['city'], state=request.form['state'], postcode=request.form['postcode'], country=request.form['country'], notes=request.form['notes']) -File: cabinet/app/views/clients.py - > reaches line 50, trigger word "flash(": - flash('Client '%s' was added.' % client.name) - -Vulnerability 3: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 78, trigger word "flash(": - flash('Client '%s' has been updated.' % client.name) - -Vulnerability 4: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/edit.html',title='Edit %s' % client.name, client=client) - -Vulnerability 5: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 93, trigger word "flash(": - flash('Client '%s' has been deleted.' % client.name) - -Vulnerability 6: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/delete.html',title='Delete %s' % client.name, client=client) - -Vulnerability 7: -File: cabinet/app/views/invoices.py - > User input at line 18, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/invoices.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/view.html',title=invoice.name, invoice=invoice) - -Vulnerability 8: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 9: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 10: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "get(": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 11: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "form[": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 12: -File: cabinet/app/views/invoices.py - > User input at line 33, trigger word "form[": - invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 13: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 78, trigger word "flash(": - flash('Invoice '%s' has been updated.' % invoice.name) - -Vulnerability 14: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/edit.html',title='Edit Invoice %s' % invoice.name, invoice=invoice, clients=clients, projects=projects) - -Vulnerability 15: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 95, trigger word "flash(": - flash('Invoice '%s' has been deleted.' % invoice.name) - -Vulnerability 16: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/delete.html',title='Delete Invoice %s' % invoice.name, invoice=invoice) - -Vulnerability 17: -File: cabinet/app/views/projects.py - > User input at line 18, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/projects.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/view.html',title=project.name, project=project) - -Vulnerability 18: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 19: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 20: -File: cabinet/app/views/projects.py - > User input at line 31, trigger word "form[": - project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 21: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 69, trigger word "flash(": - flash('Project '%s' has been updated.' % project.name) - -Vulnerability 22: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/edit.html',title='Edit %s' % project.name, project=project, clients=clients) - -Vulnerability 23: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 85, trigger word "flash(": - flash('Project '%s' has been deleted.' % project.name) - -Vulnerability 24: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/delete.html',title='Delete %s' % project.name, project=project) - - - -MattStockton/manpage -https://github.com/MattStockton/manpage -Entry file: manpage/app.py -Scanned: 2016-10-19 13:52:52.659943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qzio/tododis -https://github.com/qzio/tododis -Entry file: tododis/app.py -Scanned: 2016-10-19 13:52:53.184484 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-19 13:52:53.699023 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -Entry file: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -Scanned: 2016-10-19 13:52:55.523342 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > User input at line 34, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 22: imgdata = row['imgdata'] - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 38: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - - - -mmahnken/Flask-To-Do-List-with-updates- -https://github.com/mmahnken/Flask-To-Do-List-with-updates- -Entry file: Flask-To-Do-List-with-updates-/tipsy.py -Scanned: 2016-10-19 13:52:57.940094 -No vulnerabilities found. - - -samgclarke/sms_sender -https://github.com/samgclarke/sms_sender -Entry file: sms_sender/application.py -Scanned: 2016-10-19 13:52:59.252961 -No vulnerabilities found. - - -Liquix/microblog -https://github.com/Liquix/microblog -Entry file: None -Scanned: 2016-10-19 13:52:59.763668 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -deegill/tipsytasklist -https://github.com/deegill/tipsytasklist -Entry file: tipsytasklist/tipsy.py -Scanned: 2016-10-19 13:53:01.280883 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dnet/wsfacade -https://github.com/dnet/wsfacade -Entry file: wsfacade/wsfacade.py -Scanned: 2016-10-19 13:53:01.785095 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdjhny/OilPainter -https://github.com/mdjhny/OilPainter -Entry file: OilPainter/app/app.py -Scanned: 2016-10-19 13:53:03.513263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yeradis/sizing -https://github.com/yeradis/sizing -Entry file: sizing/sizing.py -Scanned: 2016-10-19 13:53:04.781924 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-social -https://github.com/mattupstate/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-19 13:53:06.137570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-19 13:53:07.419243 -No vulnerabilities found. - - -whtsky/Flask-WeRoBot -https://github.com/whtsky/Flask-WeRoBot -Entry file: Flask-WeRoBot/flask_werobot.py -Scanned: 2016-10-19 13:53:08.841032 -No vulnerabilities found. - - -OpenTechSchool/python-flask-code -https://github.com/OpenTechSchool/python-flask-code -Entry file: python-flask-code/core/files-templates/catseverywhere.py -Scanned: 2016-10-19 13:53:10.145631 -No vulnerabilities found. - - -rollbar/rollbar-flask-example -https://github.com/rollbar/rollbar-flask-example -Entry file: rollbar-flask-example/hello.py -Scanned: 2016-10-19 13:53:10.674949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqez/flasky -https://github.com/lqez/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-19 13:53:14.183824 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jd007/flask-rest -https://github.com/Jd007/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-19 13:53:15.687609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-19 13:53:28.656567 -No vulnerabilities found. - - -aerialdomo/flaskblog -https://github.com/aerialdomo/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-19 13:53:29.692614 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel.py -Scanned: 2016-10-19 13:53:33.219465 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -pinoytech/flaskapp -https://github.com/pinoytech/flaskapp -Entry file: None -Scanned: 2016-10-19 13:53:35.727032 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pinoytech/flaskapp. - -aahluwal/flaskagain -https://github.com/aahluwal/flaskagain -Entry file: flaskagain/judgement.py -Scanned: 2016-10-19 13:53:48.365473 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskagain/renv/lib/python2.7/genericpath.py - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-19 13:53:50.899579 -Vulnerability 1: -File: squeak/app.py - > User input at line 73, trigger word "form[": - search_term = request.form['term'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 2: -File: squeak/app.py - > User input at line 74, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 3: -File: squeak/app.py - > User input at line 83, trigger word "get(": - response = requests.get(signed_url) -Reassigned in: - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - - - -y2bishop2y/vagrant.flask -https://github.com/y2bishop2y/vagrant.flask -Entry file: None -Scanned: 2016-10-19 13:53:51.905156 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -markchadwick/flask-empty -https://github.com/markchadwick/flask-empty -Entry file: flask-empty/main.py -Scanned: 2016-10-19 13:53:53.209731 -No vulnerabilities found. - - -Hardtack/Flask-Router -https://github.com/Hardtack/Flask-Router -Entry file: Flask-Router/flask_router/tests.py -Scanned: 2016-10-19 13:53:54.521979 -No vulnerabilities found. - - -mwmeyer/minimal-flask-socketserver -https://github.com/mwmeyer/minimal-flask-socketserver -Entry file: minimal-flask-socketserver/flash_socket.py -Scanned: 2016-10-19 13:53:56.016308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-19 13:53:56.545865 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-19 13:53:58.959433 -No vulnerabilities found. - - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-19 13:53:59.475971 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -emi1337/movie_rater -https://github.com/emi1337/movie_rater -Entry file: movie_rater/judgement.py -Scanned: 2016-10-19 13:54:01.246871 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-19 13:54:01.755274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thrisp/flacro -https://github.com/thrisp/flacro -Entry file: flacro/tests/conftest.py -Scanned: 2016-10-19 13:54:04.282535 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -aksiksi/aflam -https://github.com/aksiksi/aflam -Entry file: aflam/views.py -Scanned: 2016-10-19 13:54:05.710046 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samgclarke/sms_sender -https://github.com/samgclarke/sms_sender -Entry file: sms_sender/application.py -Scanned: 2016-10-19 13:54:06.994657 -No vulnerabilities found. - - -kjudd/ratings_app -https://github.com/kjudd/ratings_app -Entry file: ratings_app/judgement.py -Scanned: 2016-10-19 13:54:10.701895 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: ratings_app/env/lib/python2.7/genericpath.py - -Max00355/FileUpload -https://github.com/Max00355/FileUpload -Entry file: FileUpload/main.py -Scanned: 2016-10-19 13:54:11.986723 -No vulnerabilities found. - - -joel-briggs/microblog -https://github.com/joel-briggs/microblog -Entry file: None -Scanned: 2016-10-19 13:54:12.497914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gonewandering/TwitterLogin -https://github.com/gonewandering/TwitterLogin -Entry file: TwitterLogin/app.py -Scanned: 2016-10-19 13:54:13.793710 -No vulnerabilities found. - - -flebel/yt-redirector -https://github.com/flebel/yt-redirector -Entry file: yt-redirector/yt-redirector.py -Scanned: 2016-10-19 13:54:15.202837 -Vulnerability 1: -File: yt-redirector/yt-redirector.py - > User input at line 17, trigger word "get(": - video_id = requests.get(video_url).json()['items'][0]['id']['videoId'] -Reassigned in: - File: yt-redirector/yt-redirector.py - > Line 18: player_url = 'https://www.youtube.com/watch?v=%s' % (video_id) -File: yt-redirector/yt-redirector.py - > reaches line 19, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(player_url, 301) - - - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-19 13:54:18.697226 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 13:54:28.317666 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-19 13:54:30.839965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florapdx/My-Blog -https://github.com/florapdx/My-Blog -Entry file: My-Blog/sitebuilder.py -Scanned: 2016-10-19 13:54:38.153839 -No vulnerabilities found. - - -zeuxisoo/python-flask-social-oauth-facebook -https://github.com/zeuxisoo/python-flask-social-oauth-facebook -Entry file: None -Scanned: 2016-10-19 13:54:38.679559 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeuxisoo/python-flask-social-oauth-facebook. - -lpolepeddi/sightings -https://github.com/lpolepeddi/sightings -Entry file: sightings/routes.py -Scanned: 2016-10-19 13:55:00.557802 -No vulnerabilities found. - - -sholsapp/flask-skeleton -https://github.com/sholsapp/flask-skeleton -Entry file: None -Scanned: 2016-10-19 13:55:01.571864 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sholsapp/flask-skeleton. - -adatlabor/soa-demo -https://github.com/adatlabor/soa-demo -Entry file: soa-demo/service.py -Scanned: 2016-10-19 13:55:02.086386 -No vulnerabilities found. - - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-19 13:55:04.327948 -No vulnerabilities found. - - -kirang89/flask-boiler -https://github.com/kirang89/flask-boiler -Entry file: None -Scanned: 2016-10-19 13:55:04.846721 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel.py -Scanned: 2016-10-19 13:55:05.845741 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -a2lin/flaskapp -https://github.com/a2lin/flaskapp -Entry file: None -Scanned: 2016-10-19 13:55:06.363503 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/a2lin/flaskapp. - -MrFichter/flask1 -https://github.com/MrFichter/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-19 13:55:07.055223 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-19 13:55:07.691797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smdmustaffa/PythonFlask -https://github.com/smdmustaffa/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-19 13:55:13.664632 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -bogavante/mitsuhiko-flask -https://github.com/bogavante/mitsuhiko-flask -Entry file: mitsuhiko-flask/setup.py -Scanned: 2016-10-19 13:55:14.223238 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephanienkram/Flask-Log-Tracker -https://github.com/stephanienkram/Flask-Log-Tracker -Entry file: Flask-Log-Tracker/main.py -Scanned: 2016-10-19 13:55:15.944929 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 13:55:16.499423 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-19 13:55:17.832166 -No vulnerabilities found. - - -akshar-raaj/flaks -https://github.com/akshar-raaj/flaks -Entry file: flaks/hello.py -Scanned: 2016-10-19 13:55:19.145022 -No vulnerabilities found. - - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-19 13:55:19.692232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willmcmain/blag -https://github.com/willmcmain/blag -Entry file: blag/blag/__init__.py -Scanned: 2016-10-19 13:55:21.006778 -No vulnerabilities found. - - -mihneasim/iphy -https://github.com/mihneasim/iphy -Entry file: None -Scanned: 2016-10-19 13:55:22.437933 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mihneasim/iphy. - -dnajd/pyrest -https://github.com/dnajd/pyrest -Entry file: pyrest/src/main/rest_test.py -Scanned: 2016-10-19 13:55:23.856434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MinnPost/jsonproxy -https://github.com/MinnPost/jsonproxy -Entry file: jsonproxy/app.py -Scanned: 2016-10-19 13:55:25.163581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BigBlueHat/recshackday -https://github.com/BigBlueHat/recshackday -Entry file: recshackday/app.py -Scanned: 2016-10-19 13:55:30.826151 -No vulnerabilities found. - - -capellayee/remake -https://github.com/capellayee/remake -Entry file: remake/Flasktest/__init__.py -Scanned: 2016-10-19 13:55:33.186059 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/ifighthunger -https://github.com/corydolphin/ifighthunger -Entry file: ifighthunger/ifighthunger/__init__.py -Scanned: 2016-10-19 13:55:40.937612 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lxchavez/CSULB-Confessions -https://github.com/lxchavez/CSULB-Confessions -Entry file: CSULB-Confessions/confessions_app/__init__.py -Scanned: 2016-10-19 13:55:43.469342 -No vulnerabilities found. - - -zoowii/VerySimpleBlog -https://github.com/zoowii/VerySimpleBlog -Entry file: VerySimpleBlog/main.py -Scanned: 2016-10-19 13:55:44.791756 -No vulnerabilities found. - - -ashcrow/flask-track-usage -https://github.com/ashcrow/flask-track-usage -Entry file: flask-track-usage/test/__init__.py -Scanned: 2016-10-19 13:56:02.720043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lepture/flask-shorturl -https://github.com/lepture/flask-shorturl -Entry file: flask-shorturl/test_shorturl.py -Scanned: 2016-10-19 13:56:04.198924 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-19 13:56:04.773267 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-19 13:56:06.782776 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -krushton/flask-api-example -https://github.com/krushton/flask-api-example -Entry file: flask-api-example/app.py -Scanned: 2016-10-19 13:56:08.213839 -No vulnerabilities found. - - -roshow/flasktutorial -https://github.com/roshow/flasktutorial -Entry file: None -Scanned: 2016-10-19 13:56:08.750514 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jph98/flaskdmg -https://github.com/jph98/flaskdmg -Entry file: flaskdmg/flaskexample.py -Scanned: 2016-10-19 13:56:10.041368 -No vulnerabilities found. - - -akshar-raaj/flaskr -https://github.com/akshar-raaj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:56:10.554526 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codergirl/flaskbabar -https://github.com/codergirl/flaskbabar -Entry file: flaskbabar/hello.py -Scanned: 2016-10-19 13:56:11.889462 -Vulnerability 1: -File: flaskbabar/hello.py - > User input at line 44, trigger word "get(": - new_user = BabarUser(request.args.get('username'), request.args.get('email')) -Reassigned in: - File: flaskbabar/hello.py - > Line 47: json = new_user.id'username''email'new_user.namenew_user.email -File: flaskbabar/hello.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 2: -File: flaskbabar/hello.py - > User input at line 61, trigger word "get(": - the_user = db.session.query(BabarUser).filter_by(id=request.args.get('user_id')).first() -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 3: -File: flaskbabar/hello.py - > User input at line 62, trigger word "get(": - task_name = request.args.get('name') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 4: -File: flaskbabar/hello.py - > User input at line 63, trigger word "get(": - task_description = request.args.get('description') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 5: -File: flaskbabar/hello.py - > User input at line 64, trigger word "get(": - dismissable = request.args.get('dismissable') -Reassigned in: - File: flaskbabar/hello.py - > Line 66: dismissable = True - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 6: -File: flaskbabar/hello.py - > User input at line 67, trigger word "get(": - due_date = request.args.get('due_date') -Reassigned in: - File: flaskbabar/hello.py - > Line 69: due_date = datetime.datetime.fromtimestamp(float(due_date)) - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - - - -rajendrakrp/GAE-Flask-OpenID -https://github.com/rajendrakrp/GAE-Flask-OpenID -Entry file: GAE-Flask-OpenID/flask/sessions.py -Scanned: 2016-10-19 13:56:12.496563 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-19 13:56:16.122572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haburibe/flask-myapps -https://github.com/haburibe/flask-myapps -Entry file: flask-myapps/todos/todos.py -Scanned: 2016-10-19 13:56:17.448365 -No vulnerabilities found. - - -mykolasmith/flask-leaderboard -https://github.com/mykolasmith/flask-leaderboard -Entry file: flask-leaderboard/leaderboard/__init__.py -Scanned: 2016-10-19 13:56:18.914232 -Vulnerability 1: -File: flask-leaderboard/leaderboard/endpoints/login.py - > User input at line 13, trigger word "form[": - user = User.query.filter(User.name == request.form['username']).first() -Reassigned in: - File: flask-leaderboard/leaderboard/endpoints/login.py - > Line 19: session['user_id'] = user.id -File: flask-leaderboard/leaderboard/endpoints/login.py - > reaches line 13, trigger word "filter(": - user = User.query.filter(User.name == request.form['username']).first() - - - -betobaz/app_flask -https://github.com/betobaz/app_flask -Entry file: app_flask/app/routes.py -Scanned: 2016-10-19 13:56:20.318326 -No vulnerabilities found. - - -elimgoodman/Personnel-Flask -https://github.com/elimgoodman/Personnel-Flask -Entry file: Personnel-Flask/app/__init__.py -Scanned: 2016-10-19 13:56:22.488197 -Vulnerability 1: -File: Personnel-Flask/app/users/views.py - > User input at line 68, trigger word "get(": - salt = app.config.get('PW_SALT') -Reassigned in: - File: Personnel-Flask/app/users/views.py - > Line 69: password_hash = bcrypt.hashpw(form.password.data, salt) - File: Personnel-Flask/app/users/views.py - > Line 71: clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - -Vulnerability 2: -File: Personnel-Flask/app/users/views.py - > User input at line 69, trigger word ".data": - password_hash = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: Personnel-Flask/app/users/views.py - > Line 71: clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - -Vulnerability 3: -File: Personnel-Flask/app/users/views.py - > User input at line 71, trigger word ".data": - clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - - - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-19 13:56:23.489814 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -Duelist/ianb-flask -https://github.com/Duelist/ianb-flask -Entry file: ianb-flask/ianb/__init__.py -Scanned: 2016-10-19 13:56:24.934721 -No vulnerabilities found. - - -stephanienkram/Flask-Money-Tracker -https://github.com/stephanienkram/Flask-Money-Tracker -Entry file: Flask-Money-Tracker/main.py -Scanned: 2016-10-19 13:56:26.047789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cismet/sqlparse-flask-webservice -https://github.com/cismet/sqlparse-flask-webservice -Entry file: sqlparse-flask-webservice/sqlparse_webservice.py -Scanned: 2016-10-19 13:56:26.577072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonascj/flask_logger_test -https://github.com/jonascj/flask_logger_test -Entry file: flask_logger_test/flask_logger_test.py -Scanned: 2016-10-19 13:56:32.214509 -No vulnerabilities found. - - -luckypool/flask-blueprints-template -https://github.com/luckypool/flask-blueprints-template -Entry file: flask-blueprints-template/hello/__init__.py -Scanned: 2016-10-19 13:56:34.654314 -No vulnerabilities found. - - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-19 13:56:35.210140 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -adamjmarkham/flask-micro-blog -https://github.com/adamjmarkham/flask-micro-blog -Entry file: flask-micro-blog/micro_blog_flask.py -Scanned: 2016-10-19 13:56:43.649954 -No vulnerabilities found. - - -chrismeono1022/microblog_flask_tutorial -https://github.com/chrismeono1022/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 13:56:47.279084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jsutterfield/flaskr-buildout -https://github.com/jsutterfield/flaskr-buildout -Entry file: flaskr-buildout/src/flaskr/flaskr.py -Scanned: 2016-10-19 13:56:54.890901 -No vulnerabilities found. - - -corydolphin/boilerflask-facebook -https://github.com/corydolphin/boilerflask-facebook -Entry file: boilerflask-facebook/boilerflask/__init__.py -Scanned: 2016-10-19 13:57:03.438367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subdesign/temp_Flaskblog -https://github.com/subdesign/temp_Flaskblog -Entry file: temp_Flaskblog/app.py -Scanned: 2016-10-19 13:57:05.063205 -Vulnerability 1: -File: temp_Flaskblog/app.py - > User input at line 107, trigger word ".data": - cur = g.db.execute('INSERT INTO fblog (title, content, date, status) VALUES (?, ?, ?, 1)', [form.title.data, form.content.data, d]) -File: temp_Flaskblog/app.py - > reaches line 107, trigger word "execute(": - cur = g.db.execute('INSERT INTO fblog (title, content, date, status) VALUES (?, ?, ?, 1)', [form.title.data, form.content.data, d]) - -Vulnerability 2: -File: temp_Flaskblog/app.py - > User input at line 129, trigger word ".data": - cur = g.db.execute('UPDATE fblog SET title =' + form.title.data + ', content =' + form.content.data + ' WHERE blog_id=' + str(blog_id)) -File: temp_Flaskblog/app.py - > reaches line 129, trigger word "execute(": - cur = g.db.execute('UPDATE fblog SET title =' + form.title.data + ', content =' + form.content.data + ' WHERE blog_id=' + str(blog_id)) - - - -farresmoidu/weather -https://github.com/farresmoidu/weather -Entry file: weather/weather.py -Scanned: 2016-10-19 13:57:06.397311 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thensgens/vvs -https://github.com/thensgens/vvs -Entry file: vvs/src/flask/sessions.py -Scanned: 2016-10-19 13:57:08.481989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwieler/soccer -https://github.com/mwieler/soccer -Entry file: soccer/soccer/main.py -Scanned: 2016-10-19 13:57:09.878543 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shiroyuki/tori-sample-blog -https://github.com/shiroyuki/tori-sample-blog -Entry file: tori-sample-blog/main.py -Scanned: 2016-10-19 13:57:11.284027 -No vulnerabilities found. - - -jackvnimble/jackvnimble -https://github.com/jackvnimble/jackvnimble -Entry file: jackvnimble/flaskblog.py -Scanned: 2016-10-19 13:57:14.055245 -No vulnerabilities found. - - -micahwalter/hello-mysql -https://github.com/micahwalter/hello-mysql -Entry file: hello-mysql/hello-mysql.py -Scanned: 2016-10-19 13:57:15.354958 -No vulnerabilities found. - - -itsme300/assignment -https://github.com/itsme300/assignment -Entry file: assignment/iptables.py -Scanned: 2016-10-19 13:57:16.753853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yhyap/lipsum -https://github.com/yhyap/lipsum -Entry file: lipsum/flask/app.py -Scanned: 2016-10-19 13:57:18.900535 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lxchavez/CSULB-Confessions -https://github.com/lxchavez/CSULB-Confessions -Entry file: CSULB-Confessions/confessions_app/__init__.py -Scanned: 2016-10-19 13:57:21.885565 -No vulnerabilities found. - - -tornado-utils/tornado-restless -https://github.com/tornado-utils/tornado-restless -Entry file: tornado-restless/tests/base.py -Scanned: 2016-10-19 13:57:25.399463 -No vulnerabilities found. - - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-19 13:57:25.919894 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -maxcountryman/flask-simpleoauth -https://github.com/maxcountryman/flask-simpleoauth -Entry file: flask-simpleoauth/flask_simpleoauth/app.py -Scanned: 2016-10-19 13:57:27.355851 -Vulnerability 1: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 30, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.index')) - -Vulnerability 2: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 42, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.login')) - -Vulnerability 4: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 5: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 53, trigger word ".data": - consumer = Consumer(name=form.name.data, callback_uri=form.callback_uri.data) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 58: args = 'key''secret'consumer.keyconsumer.secret - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 62: consumer = Consumer.objects.with_id(consumer_id) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 59, trigger word "flash(": - flash('Consumer created. Key {key} Secret {secret}'.format(args)) - - - -bayazee/flask-mosession -https://github.com/bayazee/flask-mosession -Entry file: flask-mosession/example/example.py -Scanned: 2016-10-19 13:57:28.899700 -No vulnerabilities found. - - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 13:57:29.437895 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dorajistyle/proposal_center_python_flask_sqlalchemy_jade -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade -Entry file: proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -Scanned: 2016-10-19 13:57:31.628223 -Vulnerability 1: -File: proposal_center_python_flask_sqlalchemy_jade/application/manager.py - > User input at line 58, trigger word "get(": - feedback = Feedback.query.get(feedback_id) -File: proposal_center_python_flask_sqlalchemy_jade/application/manager.py - > reaches line 59, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(feedback_id=feedback_id, vote_count=feedback.vote_count()) - - - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-19 13:57:32.997675 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -gabrielengel/learn-flask -https://github.com/gabrielengel/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-19 13:57:35.770419 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mutaku/alfred_flask -https://github.com/mutaku/alfred_flask -Entry file: alfred_flask/alfred.py -Scanned: 2016-10-19 13:57:36.287593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-19 13:57:43.793528 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -marksteve/flask-nsq -https://github.com/marksteve/flask-nsq -Entry file: flask-nsq/test.py -Scanned: 2016-10-19 13:57:46.313939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luxuia/gene_designer -https://github.com/luxuia/gene_designer -Entry file: gene_designer/geneDesigne.py -Scanned: 2016-10-19 13:58:05.359324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rubinovitz/flask-gevent-boiler -https://github.com/rubinovitz/flask-gevent-boiler -Entry file: flask-gevent-boiler/app.py -Scanned: 2016-10-19 13:58:05.897788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyhmltn/stripe-flask-test -https://github.com/andyhmltn/stripe-flask-test -Entry file: stripe-flask-test/main.py -Scanned: 2016-10-19 13:58:07.421973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manuclementz/shrt -https://github.com/manuclementz/shrt -Entry file: shrt/app.py -Scanned: 2016-10-19 13:58:11.243823 -Vulnerability 1: -File: shrt/app.py - > User input at line 46, trigger word "form[": - link = ShortLink(request.form['url']) -Reassigned in: - File: shrt/app.py - > Line 49: link.encoded_id = encode_id(link.id) - File: shrt/app.py - > Line 53: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: shrt/app.py - > reaches line 52, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('link_info',link_id=link.encoded_id)) - -Vulnerability 2: -File: shrt/app.py - > User input at line 46, trigger word "form[": - link = ShortLink(request.form['url']) -Reassigned in: - File: shrt/app.py - > Line 49: link.encoded_id = encode_id(link.id) - File: shrt/app.py - > Line 53: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: shrt/app.py - > reaches line 52, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('link_info',link_id=link.encoded_id)) - - - -liontree/lemonbook -https://github.com/liontree/lemonbook -Entry file: lemonbook/__init__.py -Scanned: 2016-10-19 13:58:13.626917 -Vulnerability 1: -File: lemonbook/common/flask_login.py - > User input at line 227, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 2: -File: lemonbook/common/flask_login.py - > User input at line 228, trigger word "get(": - duration = config.get('REMEMBER_COOKIE_DURATION', COOKIE_DURATION) -Reassigned in: - File: lemonbook/common/flask_login.py - > Line 235: expires = datetime.utcnow() + duration -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 3: -File: lemonbook/common/flask_login.py - > User input at line 229, trigger word "get(": - domain = config.get('REMEMBER_COOKIE_DOMAIN', None) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 4: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 55, trigger word "replace(": - date = date.replace('/', '') - -Vulnerability 5: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - - - -willkg/fredrik -https://github.com/willkg/fredrik -Entry file: fredrik/fredrik/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-19 13:58:15.273935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scotfu/gae-twitter -https://github.com/scotfu/gae-twitter -Entry file: gae-twitter/lib/flask/sessions.py -Scanned: 2016-10-19 13:58:19.833151 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardmonette/webremote -https://github.com/richardmonette/webremote -Entry file: webremote/app.py -Scanned: 2016-10-19 13:58:21.610741 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -micahwalter/hello-mysql -https://github.com/micahwalter/hello-mysql -Entry file: hello-mysql/hello-mysql.py -Scanned: 2016-10-19 13:58:22.911087 -No vulnerabilities found. - - -joshsee/GAE-Online-Apparel-Survey-Form -https://github.com/joshsee/GAE-Online-Apparel-Survey-Form -Entry file: GAE-Online-Apparel-Survey-Form/flask/sessions.py -Scanned: 2016-10-19 13:58:25.134036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samsolariusleo/Flask -https://github.com/samsolariusleo/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-19 13:58:26.793030 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adamgreenhall/flask-haml-sass-coffee-template -https://github.com/adamgreenhall/flask-haml-sass-coffee-template -Entry file: flask-haml-sass-coffee-template/app.py -Scanned: 2016-10-19 13:58:28.587018 -No vulnerabilities found. - - -prakhar1989/flask-tuts -https://github.com/prakhar1989/flask-tuts -Entry file: flask-tuts/lesson-2/blogs/__init__.py -Scanned: 2016-10-19 13:58:31.993430 -No vulnerabilities found. - - -damour/flaskr -https://github.com/damour/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:58:33.089989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-19 13:58:33.700202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aussiroth/FlaskPractical -https://github.com/Aussiroth/FlaskPractical -Entry file: FlaskPractical/flask/routes.py -Scanned: 2016-10-19 13:58:34.586440 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-19 13:58:36.356480 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -lachezar/tada_backend -https://github.com/lachezar/tada_backend -Entry file: tada_backend/todo.py -Scanned: 2016-10-19 13:58:38.465270 -No vulnerabilities found. - - -krushton/flask-location-example -https://github.com/krushton/flask-location-example -Entry file: flask-location-example/app.py -Scanned: 2016-10-19 13:58:48.344387 -No vulnerabilities found. - - -david-torres/flask-rest-quickstart -https://github.com/david-torres/flask-rest-quickstart -Entry file: flask-rest-quickstart/application/__init__.py -Scanned: 2016-10-19 13:58:55.704652 -No vulnerabilities found. - - -Syerram/maintenance-server -https://github.com/Syerram/maintenance-server -Entry file: maintenance-server/run.py -Scanned: 2016-10-19 13:59:07.257915 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-19 13:59:07.805380 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abhiomkar/contacts-rest -https://github.com/abhiomkar/contacts-rest -Entry file: contacts-rest/contacts.py -Scanned: 2016-10-19 13:59:09.323572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Giorgix/thor -https://github.com/Giorgix/thor -Entry file: thor/thor.py -Scanned: 2016-10-19 13:59:10.706626 -No vulnerabilities found. - - -dyim42/wiki -https://github.com/dyim42/wiki -Entry file: None -Scanned: 2016-10-19 13:59:13.747750 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aromanovich/flask-webtest -https://github.com/aromanovich/flask-webtest -Entry file: flask-webtest/tests/core.py -Scanned: 2016-10-19 13:59:19.843988 -No vulnerabilities found. - - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:59:21.929169 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wangzexin/flask -https://github.com/wangzexin/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 13:59:23.514228 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Treeki/bitBoard -https://github.com/Treeki/bitBoard -Entry file: bitBoard/bitBoard/__init__.py -Scanned: 2016-10-19 13:59:26.362672 -Vulnerability 1: -File: bitBoard/bitBoard/views/board.py - > User input at line 173, trigger word "get(": - pagenum = int(request.args.get('page', 1)) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 175: pagination = query.paginate(pagenum, THREADS_PER_PAGE,error_out=False) - File: bitBoard/bitBoard/views/board.py - > Line 180: pagination.items = add_null_entities(pagination.items) -File: bitBoard/bitBoard/views/board.py - > reaches line 183, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('thread_list.html',mode='forum', forum=forum, stickies=stickies, threads=pagination.items, pagination=pagination) - -Vulnerability 2: -File: bitBoard/bitBoard/views/board.py - > User input at line 210, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 219: ret_MAYBE_FUNCTION_NAME = _base_view_thread(thread) -File: bitBoard/bitBoard/views/board.py - > reaches line 218, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=301) - -Vulnerability 3: -File: bitBoard/bitBoard/views/board.py - > User input at line 224, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 233: ret_MAYBE_FUNCTION_NAME = _base_view_thread(thread) -File: bitBoard/bitBoard/views/board.py - > reaches line 232, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=301) - -Vulnerability 4: -File: bitBoard/bitBoard/views/board.py - > User input at line 239, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 291: user = post.creator - File: bitBoard/bitBoard/views/board.py - > Line 296: ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) -File: bitBoard/bitBoard/views/board.py - > reaches line 250, trigger word "filter(": - post = Post.query.filter(Post.thread == thread, Post.created_at > timestamp).order_by(db.asc(Post.created_at)).first() - -Vulnerability 5: -File: bitBoard/bitBoard/views/board.py - > User input at line 239, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 291: user = post.creator - File: bitBoard/bitBoard/views/board.py - > Line 296: ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) -File: bitBoard/bitBoard/views/board.py - > reaches line 255, trigger word "filter(": - post = Post.query.filter(Post.thread == thread).order_by(db.asc(Post.created_at)).first() - -Vulnerability 6: -File: bitBoard/bitBoard/views/board.py - > User input at line 286, trigger word "get(": - pagenum = int(request.args.get('page', 1)) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 287: pagination = query.paginate(pagenum, POSTS_PER_PAGE,error_out=False) - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) -File: bitBoard/bitBoard/views/board.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) - -Vulnerability 7: -File: bitBoard/bitBoard/views/board.py - > User input at line 366, trigger word ".data": - thread = Thread(title=form.title.data, subtitle=form.subtitle.data, forum=forum, creator=g.user, type=is_privateThread.PRIVATEThread.BASIC_THREAD, post_count=1) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 382: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 400: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 407: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 412: notify = Notification(thread=thread, recipient=user, type=Notification.NEW_PRIVATE_THREAD) - File: bitBoard/bitBoard/views/board.py - > Line 422: ret_MAYBE_FUNCTION_NAME = render_template('post.html',is_thread=True, is_private=is_private, recipient_errors=recipient_errors, form=form, forum=forum, pm_recipient_limit=PM_RECIPIENT_LIMIT, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 420, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - -Vulnerability 8: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 459, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.reply_url,code=301) - -Vulnerability 9: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 504, trigger word "filter(": - notify_which = db.session.query(u_table.c.user_id, Notification.id).filter(u_table.c.thread_id == thread.id).filter(u_table.c.user_id != g.user.id).outerjoin(Notification, notify_join) - -Vulnerability 10: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 534, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 11: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 536, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=True, post_id=post.id, post_html=render_template('post_box.html',post=post, postNumber=thread.post_count), layout_extra=get_layout_extra(post)) - -Vulnerability 12: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 536, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=True, post_id=post.id, post_html=render_template('post_box.html',post=post, postNumber=thread.post_count), layout_extra=get_layout_extra(post)) - -Vulnerability 13: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 546, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, thread=thread, forum=thread.forum, url=thread.reply_url) - -Vulnerability 14: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 577, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.edit_url,code=301) - -Vulnerability 15: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 579, trigger word "filter(": - posts_before = Post.query.filter(Post.thread == thread, Post.id < post.id).count() - -Vulnerability 16: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 595, trigger word "render_template(": - html = render_template('inline_edit.html',post=post, is_thread=edits_thread, form=form, url=post.edit_url) - -Vulnerability 17: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 627, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 18: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 629, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=True, post_html=escape(parse_text(version.content))) - -Vulnerability 19: -File: bitBoard/bitBoard/views/board.py - > User input at line 604, trigger word ".data": - version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 635: ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, is_thread=edits_thread, is_edit=True, thread=thread, forum=thread.forum, url=post.edit_url) - File: bitBoard/bitBoard/views/board.py - > Line 643: ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=False, errors=jsonify_errors(form)) - File: bitBoard/bitBoard/views/board.py - > Line 577: ret_MAYBE_FUNCTION_NAME = redirect(post.edit_url,code=301) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 627: ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) -File: bitBoard/bitBoard/views/board.py - > reaches line 629, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=True, post_html=escape(parse_text(version.content))) - -Vulnerability 20: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 635, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, is_thread=edits_thread, is_edit=True, thread=thread, forum=thread.forum, url=post.edit_url) - -Vulnerability 21: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 643, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=False, errors=jsonify_errors(form)) - -Vulnerability 22: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 669, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.delete_url,code=301) - -Vulnerability 23: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 679, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 24: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 681, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_deleted=True, post_html=render_template('post_box.html',post=post)) - -Vulnerability 25: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 681, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_deleted=True, post_html=render_template('post_box.html',post=post)) - -Vulnerability 26: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 686, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirm_post_delete.html',post=post, thread=post.thread, forum=post.thread.forum, url=post.delete_url) - -Vulnerability 27: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 710, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 28: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 757, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - -Vulnerability 29: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 760, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('move_thread.html',form=form, forum=forum, thread=thread, url=url) - -Vulnerability 30: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 802, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 31: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 869, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = form.redirect(url=thread.url) - -Vulnerability 32: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 871, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirm.html',form=form, crumbs_type='thread', forum=forum, thread=thread, final_crumb='%s Thread' % cap_verb, message=message, url=url) - -Vulnerability 33: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 34: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 35: -File: bitBoard/bitBoard/views/wiki.py - > User input at line 31, trigger word "get(": - revision = WikiRevision.query.get(revision_id) -Reassigned in: - File: bitBoard/bitBoard/views/wiki.py - > Line 29: ret_MAYBE_FUNCTION_NAME = redirect(page.url,code=303) -File: bitBoard/bitBoard/views/wiki.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('wiki_page.html',is_old_revision=True, page=page, revision=revision) - -Vulnerability 36: -File: bitBoard/bitBoard/views/user.py - > User input at line 36, trigger word ".data": - user = User.query.filter(db.func.lower(User.name) == db.func.lower(self.name.data)).first() -Reassigned in: - File: bitBoard/bitBoard/views/user.py - > Line 44: self.user = user -File: bitBoard/bitBoard/views/user.py - > reaches line 36, trigger word "filter(": - user = User.query.filter(db.func.lower(User.name) == db.func.lower(self.name.data)).first() - -Vulnerability 37: -File: bitBoard/bitBoard/views/user.py - > User input at line 124, trigger word "get(": - user = User.query.get(id) -File: bitBoard/bitBoard/views/user.py - > reaches line 128, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(user.url,code=301) - -Vulnerability 38: -File: bitBoard/bitBoard/views/user.py - > User input at line 124, trigger word "get(": - user = User.query.get(id) -File: bitBoard/bitBoard/views/user.py - > reaches line 129, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('profile.html',user=user) - - - -byu-osl/familytree-sample-app -https://github.com/byu-osl/familytree-sample-app -Entry file: familytree-sample-app/app.py -Scanned: 2016-10-19 13:59:26.884698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmiasko/flask-barcode -https://github.com/kmiasko/flask-barcode -Entry file: flask-barcode/wsgi.py -Scanned: 2016-10-19 13:59:28.219837 -No vulnerabilities found. - - -jayzcode/helloflask -https://github.com/jayzcode/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-19 13:59:28.763071 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -bootandy/flask-sample -https://github.com/bootandy/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-19 13:59:29.301853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 13:59:29.888598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JLtheking/FlaskExample -https://github.com/JLtheking/FlaskExample -Entry file: FlaskExample/routes.py -Scanned: 2016-10-19 13:59:30.433939 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -redfive/python-flask -https://github.com/redfive/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-19 13:59:33.589211 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atbaker/flask-tutorial -https://github.com/atbaker/flask-tutorial -Entry file: None -Scanned: 2016-10-19 13:59:35.608653 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marcilioleite/flask-saude -https://github.com/marcilioleite/flask-saude -Entry file: flask-saude/app/__init__.py -Scanned: 2016-10-19 13:59:37.424193 -Vulnerability 1: -File: flask-saude/app/views.py - > User input at line 11, trigger word "get(": - m = Medico.query.get(1) -File: flask-saude/app/views.py - > reaches line 12, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('medico.html',medico=m) - - - -bradmerlin/porty_flask -https://github.com/bradmerlin/porty_flask -Entry file: porty_flask/app.py -Scanned: 2016-10-19 13:59:38.483098 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asap/watchman.flask -https://github.com/asap/watchman.flask -Entry file: None -Scanned: 2016-10-19 13:59:39.019032 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bradmerlin/mxit-spock_flask -https://github.com/bradmerlin/mxit-spock_flask -Entry file: mxit-spock_flask/app.py -Scanned: 2016-10-19 13:59:46.574787 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rartavia/flask-babel-example -https://github.com/rartavia/flask-babel-example -Entry file: flask-babel-example/flask-babel-example.py -Scanned: 2016-10-19 13:59:49.902580 -No vulnerabilities found. - - -elidickinson/flask-proxy-demo -https://github.com/elidickinson/flask-proxy-demo -Entry file: flask-proxy-demo/hello.py -Scanned: 2016-10-19 13:59:57.280896 -No vulnerabilities found. - - -bradmerlin/mxit-blackjack_flask -https://github.com/bradmerlin/mxit-blackjack_flask -Entry file: mxit-blackjack_flask/app.py -Scanned: 2016-10-19 14:00:09.347888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-19 14:00:11.706933 -No vulnerabilities found. - - -wangxiaoxiao88/python-bookmanager -https://github.com/wangxiaoxiao88/python-bookmanager -Entry file: python-bookmanager/app.py -Scanned: 2016-10-19 14:00:13.128584 -No vulnerabilities found. - - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-19 14:00:13.674022 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChannelIQ/redis-explorer -https://github.com/ChannelIQ/redis-explorer -Entry file: redis-explorer/redis_explorer/__init__.py -Scanned: 2016-10-19 14:00:16.226225 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -dougdragon/fuckyeanouns.com -https://github.com/dougdragon/fuckyeanouns.com -Entry file: None -Scanned: 2016-10-19 14:00:17.548163 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dougdragon/fuckyeanouns.com. - -brocksamson/minesweeper -https://github.com/brocksamson/minesweeper -Entry file: minesweeper/minesweeper/__init__.py -Scanned: 2016-10-19 14:00:20.504293 -No vulnerabilities found. - - -Sadhanandh/Chat-thumbnailer -https://github.com/Sadhanandh/Chat-thumbnailer -Entry file: Chat-thumbnailer/urllib2-enabled/flask_app.py -Scanned: 2016-10-19 14:00:22.960607 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -znewman01/creepy -https://github.com/znewman01/creepy -Entry file: creepy/creepy/app.py -Scanned: 2016-10-19 14:00:24.619752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aliismayilov/microblog -https://github.com/aliismayilov/microblog -Entry file: None -Scanned: 2016-10-19 14:00:25.133486 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -konrad/annotation_helper_web_app -https://github.com/konrad/annotation_helper_web_app -Entry file: annotation_helper_web_app/annotate.py -Scanned: 2016-10-19 14:00:26.571709 -No vulnerabilities found. - - -smerritt/tempurl-signer -https://github.com/smerritt/tempurl-signer -Entry file: tempurl-signer/app.py -Scanned: 2016-10-19 14:00:27.885477 -No vulnerabilities found. - - -laiqing/crossFireWall-Search -https://github.com/laiqing/crossFireWall-Search -Entry file: crossFireWall-Search/google-enchance.py -Scanned: 2016-10-19 14:00:29.440559 -No vulnerabilities found. - - -lepture/flask-oauthlib -https://github.com/lepture/flask-oauthlib -Entry file: flask-oauthlib/flask_oauthlib/provider/oauth1.py -Scanned: 2016-10-19 14:00:33.811528 -Vulnerability 1: -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > User input at line 87, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH1_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 90: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 86: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > reaches line 89, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 2: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 104, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH2_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 107: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 103: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 106, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 3: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 447, trigger word "get(": - redirect_uri = credentials.get('redirect_uri') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 464: ret_MAYBE_FUNCTION_NAME = redirect(add_params_to_uri(self.error_uri, 'error'str(e))) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 455: ret_MAYBE_FUNCTION_NAME = create_response(ret) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 458: ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(self.error_uri)) -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 461, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(redirect_uri or self.error_uri)) - - - -miguelgrinberg/Flask-HTTPAuth -https://github.com/miguelgrinberg/Flask-HTTPAuth -Entry file: Flask-HTTPAuth/examples/basic_auth.py -Scanned: 2016-10-19 14:00:37.566600 -No vulnerabilities found. - - -plastboks/Flaskmarks -https://github.com/plastboks/Flaskmarks -Entry file: Flaskmarks/flaskmarks/__init__.py -Scanned: 2016-10-19 14:00:39.790350 -Vulnerability 1: -File: Flaskmarks/flaskmarks/views/marks.py - > User input at line 92, trigger word "get(": - q = request.args.get('q') -Reassigned in: - File: Flaskmarks/flaskmarks/views/marks.py - > Line 98: m = g.user.q_marks_by_string(page, q, t) - File: Flaskmarks/flaskmarks/views/marks.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('marks.allmarks')) -File: Flaskmarks/flaskmarks/views/marks.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mark/index.html',title='Search results for: %s' % q, header='Search results for: '%s'' % q, marks=m) - -Vulnerability 2: -File: Flaskmarks/flaskmarks/views/marks.py - > User input at line 93, trigger word "get(": - t = request.args.get('type') -Reassigned in: - File: Flaskmarks/flaskmarks/views/marks.py - > Line 98: m = g.user.q_marks_by_string(page, q, t) - File: Flaskmarks/flaskmarks/views/marks.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('marks.allmarks')) -File: Flaskmarks/flaskmarks/views/marks.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mark/index.html',title='Search results for: %s' % q, header='Search results for: '%s'' % q, marks=m) - -Vulnerability 3: -File: Flaskmarks/flaskmarks/views/auth.py - > User input at line 33, trigger word ".data": - u = User.by_uname_or_email(form.username.data) -File: Flaskmarks/flaskmarks/views/auth.py - > reaches line 38, trigger word "flash(": - flash('Welcome %s.' % u.username,category='success') - - - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/hello.py -Scanned: 2016-10-19 14:00:40.414316 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -klen/mixer -https://github.com/klen/mixer -Entry file: mixer/tests/test_flask.py -Scanned: 2016-10-19 14:00:42.571652 -No vulnerabilities found. - - -fedenusy/flaskr -https://github.com/fedenusy/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 14:00:43.579217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-19 14:00:44.099342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paraboul/FlaskPress -https://github.com/paraboul/FlaskPress -Entry file: None -Scanned: 2016-10-19 14:00:44.622415 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paraboul/FlaskPress. - -AlexeyMK/gglto_flask -https://github.com/AlexeyMK/gglto_flask -Entry file: gglto_flask/gglto.py -Scanned: 2016-10-19 14:00:46.278159 -Vulnerability 1: -File: gglto_flask/gglto.py - > User input at line 27, trigger word "get(": - base_path = domain_to_redirect_url.get(request.headers['Host'], 'http://google.com/search?q={}') -File: gglto_flask/gglto.py - > reaches line 30, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(base_path.format(query_escaped)) - - - -DamnedFacts/flask-contact -https://github.com/DamnedFacts/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-19 14:00:46.807878 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxbucknell/vanilla_flask -https://github.com/maxbucknell/vanilla_flask -Entry file: vanilla_flask/vanilla/__init__.py -Scanned: 2016-10-19 14:00:48.465748 -No vulnerabilities found. - - -sammyrulez/flask-grolla -https://github.com/sammyrulez/flask-grolla -Entry file: flask-grolla/tests.py -Scanned: 2016-10-19 14:00:50.578136 -Vulnerability 1: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 22, trigger word "url_for(": - next_url = request.args.get('next') or url_for('index') - -Vulnerability 2: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 25, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 32, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -duffy25/sample_flask -https://github.com/duffy25/sample_flask -Entry file: sample_flask/sample_flask.py -Scanned: 2016-10-19 14:00:58.116350 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-19 14:01:12.067463 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 14, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/user.py - > Line 17: user = um.getByLoginId(loginid) - File: agent/agent/views/user.py - > Line 18: company = um.getUserCompany(user) - File: agent/agent/views/user.py - > Line 19: region = user.department.region - File: agent/agent/views/user.py - > Line 20: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/user.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user=user, company=company, region=region, cities=cities) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 8: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -vasnake/mapfeatureserver -https://github.com/vasnake/mapfeatureserver -Entry file: None -Scanned: 2016-10-19 14:01:12.596272 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vasnake/mapfeatureserver. - -tonilxm/1stFlask -https://github.com/tonilxm/1stFlask -Entry file: 1stFlask/src/lib/flask/sessions.py -Scanned: 2016-10-19 14:01:13.149961 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cldershem/WebFlask-CleanTemplate -https://github.com/cldershem/WebFlask-CleanTemplate -Entry file: None -Scanned: 2016-10-19 14:01:13.661799 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brooks/python-flask-sample -https://github.com/brooks/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-19 14:01:15.254180 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -palei/Just-Another-Flask-App -https://github.com/palei/Just-Another-Flask-App -Entry file: Just-Another-Flask-App/app/__init__.py -Scanned: 2016-10-19 14:01:16.802908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FriendCode/python-flask-sample -https://github.com/FriendCode/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-19 14:01:18.354455 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -thrisp/flarf -https://github.com/thrisp/flarf -Entry file: flarf/examples/example.py -Scanned: 2016-10-19 14:01:23.399347 -No vulnerabilities found. - - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-19 14:01:25.696816 -No vulnerabilities found. - - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: nozomiServer/app.py -Scanned: 2016-10-19 14:01:28.075186 -No vulnerabilities found. - - -ChannelIQ/redis-explorer -https://github.com/ChannelIQ/redis-explorer -Entry file: redis-explorer/redis_explorer/__init__.py -Scanned: 2016-10-19 14:01:28.588041 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sangallimarco/arduino_raspberry_garden_ui -https://github.com/sangallimarco/arduino_raspberry_garden_ui -Entry file: arduino_raspberry_garden_ui/main.py -Scanned: 2016-10-19 14:01:29.113224 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -carlosvin/cmsflask -https://github.com/carlosvin/cmsflask -Entry file: cmsflask/cmsflask/__init__.py -Scanned: 2016-10-19 14:01:30.985871 -No vulnerabilities found. - - -Sadhanandh/Fb-page-manager -https://github.com/Sadhanandh/Fb-page-manager -Entry file: Fb-page-manager/flask_app.py -Scanned: 2016-10-19 14:01:31.516951 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chromy/pithy -https://github.com/chromy/pithy -Entry file: None -Scanned: 2016-10-19 14:01:33.047956 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chromy/pithy. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-20 06:51:13.042094 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-20 06:51:13.559213 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-20 06:51:14.818617 -Vulnerability 1: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Everything looks good!
- Click here to complete the payment. - ' % url_for('paypal_do',token=getexp_response['TOKEN']) - -Vulnerability 2: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Oh noes! PayPal returned an error code.
-
-                %s
-            
- Click here to try again. - ' % (getexp_response['ACK'], url_for('index')) - - - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 06:51:16.184186 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-20 06:51:17.138369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 06:51:17.655636 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-20 06:51:18.179937 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-20 06:51:19.657719 -No vulnerabilities found. - - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-20 06:51:20.180706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 06:51:20.697868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 06:51:21.952416 -No vulnerabilities found. - - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-20 06:51:22.468860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-20 06:51:23.553479 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-20 06:51:25.132938 -No vulnerabilities found. - - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 06:51:25.646343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 06:51:26.162908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 06:51:28.003866 -No vulnerabilities found. - - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-20 06:51:28.523630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 06:51:30.896551 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 06:51:32.410798 -No vulnerabilities found. - - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-20 06:51:34.737347 -No vulnerabilities found. - - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 06:51:35.280176 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 06:51:36.270667 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 06:51:36.792104 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-20 06:53:14.651536 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-20 06:53:15.147947 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-20 06:53:16.345532 -Vulnerability 1: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Everything looks good!
- Click here to complete the payment. - ' % url_for('paypal_do',token=getexp_response['TOKEN']) - -Vulnerability 2: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Oh noes! PayPal returned an error code.
-
-                %s
-            
- Click here to try again. - ' % (getexp_response['ACK'], url_for('index')) - - - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 06:53:17.680291 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-20 06:53:18.630604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 06:53:19.112148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-20 06:53:19.597455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-20 06:53:21.029904 -No vulnerabilities found. - - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-20 06:53:21.530338 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 06:53:22.029691 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 06:53:23.266967 -No vulnerabilities found. - - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-20 06:53:23.771455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-20 06:53:24.786259 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-20 06:53:26.343027 -No vulnerabilities found. - - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 06:53:26.856531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 06:53:27.367748 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 06:53:29.297310 -No vulnerabilities found. - - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-20 06:53:29.802200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 06:53:32.116384 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 06:53:33.651567 -No vulnerabilities found. - - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-20 06:53:35.987428 -No vulnerabilities found. - - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 06:53:36.507315 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 06:53:37.476644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 06:53:37.973907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-20 08:27:12.053852 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-20 08:27:12.547228 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-20 08:27:13.749667 -Vulnerability 1: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Everything looks good!
- Click here to complete the payment. - ' % url_for('paypal_do',token=getexp_response['TOKEN']) - -Vulnerability 2: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Oh noes! PayPal returned an error code.
-
-                %s
-            
- Click here to try again. - ' % (getexp_response['ACK'], url_for('index')) - - - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 08:27:15.080607 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-20 08:27:16.449274 -Vulnerability 1: -File: tarbell/tarbell/app.py - > User input at line 558, trigger word "get(": - spreadsheet_file = self.client.files().get(fileId=key).execute() -File: tarbell/tarbell/app.py - > reaches line 558, trigger word "execute(": - spreadsheet_file = self.client.files().get(fileId=key).execute() - - - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 08:27:16.952327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-20 08:27:17.464339 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-20 08:27:18.903986 -No vulnerabilities found. - - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-20 08:27:19.428052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 08:27:19.965994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 08:27:21.315854 -No vulnerabilities found. - - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-20 08:27:21.825577 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-20 08:27:22.879104 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-20 08:27:24.451190 -No vulnerabilities found. - - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 08:27:24.964353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 08:27:25.463728 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 08:27:27.902289 -No vulnerabilities found. - - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-20 08:27:28.409485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 08:27:30.625953 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 08:27:32.136133 -No vulnerabilities found. - - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-20 08:27:34.387562 -No vulnerabilities found. - - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:27:34.911900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 08:27:35.896431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 08:27:36.391196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -parryjacob/flask-boilerplate -https://github.com/parryjacob/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 08:28:10.938439 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/parryjacob/flask-boilerplate. - -jpercent/flask-control -https://github.com/jpercent/flask-control -Entry file: flask-control/example.py -Scanned: 2016-10-20 08:28:11.447146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ceasar/pocket_flask -https://github.com/Ceasar/pocket_flask -Entry file: pocket_flask/app/__init__.py -Scanned: 2016-10-20 08:28:13.960309 -No vulnerabilities found. - - -CMGS/poll -https://github.com/CMGS/poll -Entry file: poll/app.py -Scanned: 2016-10-20 08:28:17.074592 -Vulnerability 1: -File: poll/app.py - > User input at line 31, trigger word "get(": - q = request.args.get('q', '') -File: poll/app.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user=g.user, subjects=get_subjects(q), groups=get_groups(), group=get_group(q)) - -Vulnerability 2: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - -Vulnerability 3: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - - - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 08:28:18.387324 -No vulnerabilities found. - - -dogrdon/txtr -https://github.com/dogrdon/txtr -Entry file: txtr/txtr.py -Scanned: 2016-10-20 08:28:18.899209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 08:28:19.397664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-20 08:28:21.902112 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 08:28:22.418123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sburns/switchboard -https://github.com/sburns/switchboard -Entry file: switchboard/sample_app.py -Scanned: 2016-10-20 08:28:22.924289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-20 08:28:23.423695 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 08:28:25.339036 -No vulnerabilities found. - - -bogdan-kulynych/cloudlectures -https://github.com/bogdan-kulynych/cloudlectures -Entry file: cloudlectures/flask/sessions.py -Scanned: 2016-10-20 08:28:25.894192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanielleSucher/BookQueue -https://github.com/DanielleSucher/BookQueue -Entry file: BookQueue/app.py -Scanned: 2016-10-20 08:28:27.239965 -Vulnerability 1: -File: BookQueue/app.py - > User input at line 145, trigger word "form[": - from_email = request.form['sender'].lower() -File: BookQueue/app.py - > reaches line 146, trigger word "filter(": - query = User.query.filter(User.email == from_email) - - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 08:28:30.381453 -No vulnerabilities found. - - -maxcnunes/flaskgaedemo -https://github.com/maxcnunes/flaskgaedemo -Entry file: flaskgaedemo/main.py -Scanned: 2016-10-20 08:28:31.442540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -domenicosolazzo/flask_examples -https://github.com/domenicosolazzo/flask_examples -Entry file: flask_examples/logger_example.py -Scanned: 2016-10-20 08:28:33.078443 -No vulnerabilities found. - - -akostyuk/flask-dbmigrate -https://github.com/akostyuk/flask-dbmigrate -Entry file: flask-dbmigrate/tests.py -Scanned: 2016-10-20 08:28:33.591971 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -50onRed/phillypug-flask -https://github.com/50onRed/phillypug-flask -Entry file: phillypug-flask/phillypug/app.py -Scanned: 2016-10-20 08:28:34.950694 -Vulnerability 1: -File: phillypug-flask/phillypug/views.py - > User input at line 19, trigger word "get(": - repos = redis_client.get(repos_key) -Reassigned in: - File: phillypug-flask/phillypug/views.py - > Line 21: repos = json.loads(repos) -File: phillypug-flask/phillypug/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',repos=repos) - - - -booo/flask-gtfs -https://github.com/booo/flask-gtfs -Entry file: None -Scanned: 2016-10-20 08:28:35.468180 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/booo/flask-gtfs. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 08:28:35.963498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nerevu/prometheus -https://github.com/nerevu/prometheus -Entry file: prometheus/app/__init__.py -Scanned: 2016-10-20 08:28:36.477247 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottdnz/flask_skeleton -https://github.com/scottdnz/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 08:28:36.981272 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -pavlenko-volodymyr/flask-study -https://github.com/pavlenko-volodymyr/flask-study -Entry file: flask-study/hello.py -Scanned: 2016-10-20 08:28:37.510487 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slizadel/flask-gitrcv -https://github.com/slizadel/flask-gitrcv -Entry file: flask-gitrcv/flask-gitrcv/gitrcv.py -Scanned: 2016-10-20 08:28:38.760043 -No vulnerabilities found. - - -apjd/flask-heroku -https://github.com/apjd/flask-heroku -Entry file: flask-heroku/flasky.py -Scanned: 2016-10-20 08:28:40.030416 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-20 08:28:41.353299 -No vulnerabilities found. - - -JunilJacob/Paint-app-using-Flask -https://github.com/JunilJacob/Paint-app-using-Flask -Entry file: Paint-app-using-Flask/hello.py -Scanned: 2016-10-20 08:29:13.177705 -Vulnerability 1: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 18, trigger word "execute(": - c.execute('DELETE FROM Image WHERE file=?', iname) - -Vulnerability 2: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 3: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 4: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 34, trigger word "execute(": - for row in c.execute('SELECT * FROM Image WHERE file=?', filename): - -Vulnerability 5: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 36, trigger word "render_template(": - resp = Response('' + render_template('paint.html'),status=200, mimetype='html') - - - -dimfox/flask-mega-tutorial -https://github.com/dimfox/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 08:29:13.693957 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-20 08:29:17.679223 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-20 08:29:19.204669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshkurz/exi -https://github.com/joshkurz/exi -Entry file: exi/exi/tests/security/test_app/__init__.py -Scanned: 2016-10-20 08:29:20.885836 -No vulnerabilities found. - - -booo/baedproject -https://github.com/booo/baedproject -Entry file: baedproject/app.py -Scanned: 2016-10-20 08:29:22.107180 -No vulnerabilities found. - - -kalimatas/herokuflask -https://github.com/kalimatas/herokuflask -Entry file: herokuflask/app.py -Scanned: 2016-10-20 08:29:23.315458 -No vulnerabilities found. - - -norbert/helloflask -https://github.com/norbert/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-20 08:29:23.851395 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-20 08:29:26.587197 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -Pusungwi/lobotomizer -https://github.com/Pusungwi/lobotomizer -Entry file: None -Scanned: 2016-10-20 08:29:27.136162 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pusungwi/lobotomizer. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-20 08:29:27.627894 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -takosuke/pizzasuicideclub -https://github.com/takosuke/pizzasuicideclub -Entry file: pizzasuicideclub/psc_app/__init__.py -Scanned: 2016-10-20 08:29:33.690341 -Vulnerability 1: -File: pizzasuicideclub/psc_app/filters.py - > User input at line 15, trigger word "Markup(": - result = Markup(result) -Reassigned in: - File: pizzasuicideclub/psc_app/filters.py - > Line 16: ret_MAYBE_FUNCTION_NAME = result -File: pizzasuicideclub/psc_app/filters.py - > reaches line 12, trigger word "replace(": - result = ' - -'.join(('

%s

' % p.replace(' -', '
-') for p in _paragraph_re.split(escape(value)))) -This vulnerability is potentially sanitised by: ['escape'] - -Vulnerability 2: -File: pizzasuicideclub/psc_app/pages/views.py - > User input at line 35, trigger word "get(": - post = Post.query.get(postId) -Reassigned in: - File: pizzasuicideclub/psc_app/pages/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('404.html',user=user) -File: pizzasuicideclub/psc_app/pages/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pages/permalink.html',title=post.title, post=post, user=user) - -Vulnerability 3: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 31, trigger word "get(": - profile = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('pages.userlist')) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/profile.html',profile=profile, user=user, form=form) - -Vulnerability 4: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 54, trigger word "flash(": - flash('You are logged in %s' % user.username) - -Vulnerability 5: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 6: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 7: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 8: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 9: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 10: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 11: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 140, trigger word "get(": - user = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 134: user = g.user - File: pizzasuicideclub/psc_app/users/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=userId)) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 145, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/modify_password.html',form=form, user=user) - - - -neilduncan/FlickrPlaceholders -https://github.com/neilduncan/FlickrPlaceholders -Entry file: FlickrPlaceholders/main.py -Scanned: 2016-10-20 08:29:34.950411 -No vulnerabilities found. - - -amaterasu-/placeholder -https://github.com/amaterasu-/placeholder -Entry file: placeholder/image.py -Scanned: 2016-10-20 08:29:36.184828 -No vulnerabilities found. - - -koon-kai/kiblog -https://github.com/koon-kai/kiblog -Entry file: kiblog/app.py -Scanned: 2016-10-20 08:29:37.405804 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelrojo/flask -https://github.com/joelrojo/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 08:29:37.981126 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -asgoel/Merge-flask -https://github.com/asgoel/Merge-flask -Entry file: Merge-flask/app.py -Scanned: 2016-10-20 08:29:38.959270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregimba/Vodka -https://github.com/gregimba/Vodka -Entry file: Vodka/app.py -Scanned: 2016-10-20 08:29:40.635859 -No vulnerabilities found. - - -corydolphin/flask-olinauth -https://github.com/corydolphin/flask-olinauth -Entry file: flask-olinauth/example.py -Scanned: 2016-10-20 08:29:41.874731 -No vulnerabilities found. - - -danielestevez/flasktutorial -https://github.com/danielestevez/flasktutorial -Entry file: None -Scanned: 2016-10-20 08:29:43.343534 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pityonline/flaskr -https://github.com/pityonline/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:29:43.839798 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Studentapp-Flask -https://github.com/prabeesh/Studentapp-Flask -Entry file: Studentapp-Flask/test.py -Scanned: 2016-10-20 08:29:44.818815 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dproni/flask_test -https://github.com/dproni/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 08:30:12.902664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-20 08:30:14.331538 -No vulnerabilities found. - - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-20 08:30:14.831763 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kishorekdty/paint_using_flask -https://github.com/kishorekdty/paint_using_flask -Entry file: None -Scanned: 2016-10-20 08:30:15.324795 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kishorekdty/paint_using_flask. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-20 08:30:17.847002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Heroku-Paint-Using-Flask -https://github.com/rasheedh/Heroku-Paint-Using-Flask -Entry file: None -Scanned: 2016-10-20 08:30:19.346813 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Heroku-Paint-Using-Flask. - -sreekanthkaralmanna/heroku-paint-app-using-flask -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask -Entry file: None -Scanned: 2016-10-20 08:30:19.850489 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask. - -mikewallace1979/milk -https://github.com/mikewallace1979/milk -Entry file: milk/milk.py -Scanned: 2016-10-20 08:30:23.211434 -No vulnerabilities found. - - -goonpug/goonpug-stats -https://github.com/goonpug/goonpug-stats -Entry file: goonpug-stats/goonpug/__init__.py -Scanned: 2016-10-20 08:30:24.936581 -No vulnerabilities found. - - -clly/blog.md -https://github.com/clly/blog.md -Entry file: blog/flaskr.py -Scanned: 2016-10-20 08:30:25.432035 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simplyluke/dothis -https://github.com/simplyluke/dothis -Entry file: dothis/dothis.py -Scanned: 2016-10-20 08:30:26.681107 -No vulnerabilities found. - - -oberkowitz/improv -https://github.com/oberkowitz/improv -Entry file: improv/mytest/app.py -Scanned: 2016-10-20 08:30:27.272117 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: improv/mytest/venv/lib/python2.7/genericpath.py - -mikeboers/Flask-Images -https://github.com/mikeboers/Flask-Images -Entry file: Flask-Images/tests/__init__.py -Scanned: 2016-10-20 08:30:29.702913 -No vulnerabilities found. - - -berlotto/flask-app-template -https://github.com/berlotto/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-20 08:30:35.695807 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/flask-jsonpify -https://github.com/corydolphin/flask-jsonpify -Entry file: flask-jsonpify/test.py -Scanned: 2016-10-20 08:30:38.084229 -No vulnerabilities found. - - -eadmundo/flask-static-blog -https://github.com/eadmundo/flask-static-blog -Entry file: flask-static-blog/app/__init__.py -Scanned: 2016-10-20 08:30:39.907747 -Vulnerability 1: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 17, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 30: pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - -Vulnerability 2: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 30, trigger word "get(": - pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - - - -0atman/flask-basic -https://github.com/0atman/flask-basic -Entry file: flask-basic/flask-basic.py -Scanned: 2016-10-20 08:30:41.633652 -No vulnerabilities found. - - -clmns/flasktest -https://github.com/clmns/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 08:30:42.639265 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zfdang/memcached-in-openshift -https://github.com/zfdang/memcached-in-openshift -Entry file: memcached-in-openshift/wsgi/main.py -Scanned: 2016-10-20 08:30:43.147278 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garethpaul/flask-sample -https://github.com/garethpaul/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 08:30:43.654669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -naveenpremchand02/flask_url -https://github.com/naveenpremchand02/flask_url -Entry file: flask_url/url.py -Scanned: 2016-10-20 08:30:45.129496 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/flask-oauth-tutorial -https://github.com/cpdean/flask-oauth-tutorial -Entry file: flask-oauth-tutorial/flaskr.py -Scanned: 2016-10-20 08:30:46.368707 -No vulnerabilities found. - - -xiechao06/Flask-NavBar -https://github.com/xiechao06/Flask-NavBar -Entry file: Flask-NavBar/flask_nav_bar.py -Scanned: 2016-10-20 08:30:46.917745 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nsfyn55/flask-mega-tutorial -https://github.com/nsfyn55/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 08:31:13.435892 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kshitizrimal/flaskr-modified -https://github.com/kshitizrimal/flaskr-modified -Entry file: flaskr-modified/flaskr.py -Scanned: 2016-10-20 08:31:14.002040 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prasanthkumara/Heroku-Paint-App-Using--Flask -https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask -Entry file: None -Scanned: 2016-10-20 08:31:15.971191 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask. - -pyxze/PyxzeCorpus -https://github.com/pyxze/PyxzeCorpus -Entry file: PyxzeCorpus/corpus.py -Scanned: 2016-10-20 08:31:19.216973 -No vulnerabilities found. - - -crcsmnky/thehotspot -https://github.com/crcsmnky/thehotspot -Entry file: thehotspot/v2/app.py -Scanned: 2016-10-20 08:31:20.770633 -Vulnerability 1: -File: thehotspot/v2/app.py - > User input at line 54, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('places.html',places=places, count=count, skip=checkins_skip) - -Vulnerability 2: -File: thehotspot/v2/app.py - > User input at line 64, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',users=users, count=count, skip=checkins_skip) - -Vulnerability 3: -File: thehotspot/v2/app.py - > User input at line 73, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('checkins.html',checkins=checkins, users=users, places=places, skip=checkins_skip, count=count) - -Vulnerability 4: -File: thehotspot/v2/app.py - > User input at line 103, trigger word "get(": - cats_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('categories.html',categories=categories, count=count, skip=cats_skip) - -Vulnerability 5: -File: thehotspot/v2/app.py - > User input at line 114, trigger word "get(": - places_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 118, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',category=cat, places=places, mapped=places.clone(), count=cat['count'], skip=places_skip) - - - -etscrivner/sovereign-states -https://github.com/etscrivner/sovereign-states -Entry file: sovereign-states/sovereign_states/api.py -Scanned: 2016-10-20 08:31:22.110989 -No vulnerabilities found. - - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-20 08:31:23.427324 -No vulnerabilities found. - - -sreedathns/paint-app-using-heroku-and-flask -https://github.com/sreedathns/paint-app-using-heroku-and-flask -Entry file: None -Scanned: 2016-10-20 08:31:23.931047 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreedathns/paint-app-using-heroku-and-flask. - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-20 08:31:26.431988 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -chadgh/chessy -https://github.com/chadgh/chessy -Entry file: None -Scanned: 2016-10-20 08:31:26.934297 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wowo/pithermo -https://github.com/wowo/pithermo -Entry file: pithermo/pithermo.py -Scanned: 2016-10-20 08:31:27.897604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aranasaurus/android-demo-server -https://github.com/aranasaurus/android-demo-server -Entry file: android-demo-server/app.py -Scanned: 2016-10-20 08:31:30.325568 -Vulnerability 1: -File: android-demo-server/app.py - > User input at line 21, trigger word "get(": - r = requests.get(url.format(query)) -Reassigned in: - File: android-demo-server/app.py - > Line 22: images = [(i, json.dumps(i)) for i in json.loads(r.text)['responseData']['results']] -File: android-demo-server/app.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',images=images) - - - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 08:31:36.742021 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deepgully/me -https://github.com/deepgully/me -Entry file: me/settings.py -Scanned: 2016-10-20 08:31:37.325218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mickey06/Flask-principal-example -https://github.com/mickey06/Flask-principal-example -Entry file: Flask-principal-example/FPrincipals.py -Scanned: 2016-10-20 08:31:39.836691 -No vulnerabilities found. - - -crazygit/flask -https://github.com/crazygit/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 08:31:40.450727 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wingu/flask_filters -https://github.com/wingu/flask_filters -Entry file: flask_filters/test_flask_filters.py -Scanned: 2016-10-20 08:31:41.828215 -No vulnerabilities found. - - -BuongiornoMIP/Reding -https://github.com/BuongiornoMIP/Reding -Entry file: Reding/reding/app.py -Scanned: 2016-10-20 08:31:44.159601 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-20 08:31:45.978108 -No vulnerabilities found. - - -colwilson/flask-lazyapi -https://github.com/colwilson/flask-lazyapi -Entry file: flask-lazyapi/demo_server.py -Scanned: 2016-10-20 08:31:46.496254 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-DataBrowser -https://github.com/xiechao06/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-20 08:31:47.025495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-20 08:31:48.521348 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Masagin/FlaskCelery -https://github.com/Masagin/FlaskCelery -Entry file: FlaskCelery/flask.py -Scanned: 2016-10-20 08:31:49.025942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-20 08:32:14.973962 -No vulnerabilities found. - - -EvilDmitri/flask-mikroblog -https://github.com/EvilDmitri/flask-mikroblog -Entry file: flask-mikroblog/app/__init__.py -Scanned: 2016-10-20 08:32:16.313061 -No vulnerabilities found. - - -maxcnunes/flask_bravi -https://github.com/maxcnunes/flask_bravi -Entry file: flask_bravi/braviapp/__init__.py -Scanned: 2016-10-20 08:32:17.762431 -No vulnerabilities found. - - -zhemao/flask_demo -https://github.com/zhemao/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 08:32:18.738841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SalemHarrache-Archive/flask_chat_eventsource -https://github.com/SalemHarrache-Archive/flask_chat_eventsource -Entry file: flask_chat_eventsource/server.py -Scanned: 2016-10-20 08:32:20.232309 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-20 08:32:22.706877 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-20 08:32:23.238477 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -texuf/myflaskproject -https://github.com/texuf/myflaskproject -Entry file: myflaskproject/hello.py -Scanned: 2016-10-20 08:32:25.463433 -No vulnerabilities found. - - -csesoc/bark-core -https://github.com/csesoc/bark-core -Entry file: bark-core/bark/__init__.py -Scanned: 2016-10-20 08:32:27.478583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-20 08:32:28.835400 -No vulnerabilities found. - - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-20 08:32:29.326263 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -lee212/fg-ws -https://github.com/lee212/fg-ws -Entry file: fg-ws/fgws/ws/FGWSApps.py -Scanned: 2016-10-20 08:32:29.842297 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brunsgaard/qwablog -https://github.com/brunsgaard/qwablog -Entry file: qwablog/qwablog.py -Scanned: 2016-10-20 08:32:36.114588 -No vulnerabilities found. - - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-20 08:32:38.465847 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -rubinovitz/fourequality -https://github.com/rubinovitz/fourequality -Entry file: fourequality/app.py -Scanned: 2016-10-20 08:32:40.963293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darylchang/Hacker-Viz -https://github.com/darylchang/Hacker-Viz -Entry file: Hacker-Viz/flaskDir.py -Scanned: 2016-10-20 08:32:41.484879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexlod/movielist -https://github.com/alexlod/movielist -Entry file: movielist/movielist.py -Scanned: 2016-10-20 08:32:42.993093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhumbert/literable -https://github.com/dhumbert/literable -Entry file: None -Scanned: 2016-10-20 08:32:43.518401 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dhumbert/literable. - -ArcTanSusan/Task_List -https://github.com/ArcTanSusan/Task_List -Entry file: Task_List/tipsy/tipsy.py -Scanned: 2016-10-20 08:32:45.025600 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbuysse/url_shortener -https://github.com/rbuysse/url_shortener -Entry file: url_shortener/url.py -Scanned: 2016-10-20 08:32:46.546443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 08:32:47.708920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanrose/box-arcade -https://github.com/seanrose/box-arcade -Entry file: box-arcade/app/__init__.py -Scanned: 2016-10-20 08:32:48.692860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-20 08:32:49.930092 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-20 08:32:52.314153 -No vulnerabilities found. - - -theho/flask-wsgi -https://github.com/theho/flask-wsgi -Entry file: flask-wsgi/wsgi.py -Scanned: 2016-10-20 08:33:17.060308 -No vulnerabilities found. - - -adityaathalye/flaskr -https://github.com/adityaathalye/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:33:17.562104 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-20 08:33:19.060440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-20 08:33:19.572848 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-20 08:33:21.948100 -No vulnerabilities found. - - -ekfriis/flask-mbtiles -https://github.com/ekfriis/flask-mbtiles -Entry file: flask-mbtiles/mbtileserver.py -Scanned: 2016-10-20 08:33:23.218498 -No vulnerabilities found. - - -hyaticua/flask-blog -https://github.com/hyaticua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 08:33:23.842718 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -thearchduke/flask-boiler -https://github.com/thearchduke/flask-boiler -Entry file: None -Scanned: 2016-10-20 08:33:25.367778 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StefanKjartansson/bower-flask -https://github.com/StefanKjartansson/bower-flask -Entry file: bower-flask/server.py -Scanned: 2016-10-20 08:33:28.604043 -No vulnerabilities found. - - -tanayseven/Voix -https://github.com/tanayseven/Voix -Entry file: None -Scanned: 2016-10-20 08:33:29.124726 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gatesphere/flaskr-flask-tutorial -https://github.com/gatesphere/flaskr-flask-tutorial -Entry file: flaskr-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-20 08:33:30.738879 -No vulnerabilities found. - - -bazerk/baz-flask-base -https://github.com/bazerk/baz-flask-base -Entry file: baz-flask-base/app/app.py -Scanned: 2016-10-20 08:33:32.673810 -Vulnerability 1: -File: baz-flask-base/app/frontend/views.py - > User input at line 26, trigger word "get(": - form = RegisterForm(username=request.args.get('username', twitter_name), password=request.args.get('password', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 30: err = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 30: user = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('frontend.login')) -File: baz-flask-base/app/frontend/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/register.html',form=form, twitter_name=twitter_name) - -Vulnerability 2: -File: baz-flask-base/app/frontend/views.py - > User input at line 48, trigger word "get(": - form = LoginForm(login=request.args.get('login', None), next=request.args.get('next', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 52: user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id - File: baz-flask-base/app/frontend/views.py - > Line 61: ret_MAYBE_FUNCTION_NAME = redirect('') -File: baz-flask-base/app/frontend/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/login.html',form=form) - - - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-20 08:33:34.148424 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-20 08:33:35.662927 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Andrey-Khobnya/flask-sessions-mongo -https://github.com/Andrey-Khobnya/flask-sessions-mongo -Entry file: flask-sessions-mongo/flask-sessions-mongo/examples/loginsession.py -Scanned: 2016-10-20 08:33:38.930583 -No vulnerabilities found. - - -igrishaev/youtube-python-api-sample -https://github.com/igrishaev/youtube-python-api-sample -Entry file: youtube-python-api-sample/app.py -Scanned: 2016-10-20 08:33:39.994550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-20 08:33:42.317885 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -kfr2/pynances -https://github.com/kfr2/pynances -Entry file: pynances/pynances/pynances.py -Scanned: 2016-10-20 08:33:43.659230 -No vulnerabilities found. - - -WilliamMayor/geoffrey -https://github.com/WilliamMayor/geoffrey -Entry file: geoffrey/geoffrey.py -Scanned: 2016-10-20 08:33:44.896867 -No vulnerabilities found. - - -Timothee/Passerelle -https://github.com/Timothee/Passerelle -Entry file: Passerelle/passerelle.py -Scanned: 2016-10-20 08:33:46.159828 -No vulnerabilities found. - - -fusic-com/flask-todo -https://github.com/fusic-com/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-20 08:33:47.555795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bkabrda/flask-whooshee -https://github.com/bkabrda/flask-whooshee -Entry file: flask-whooshee/test.py -Scanned: 2016-10-20 08:33:49.156897 -No vulnerabilities found. - - -DavidWittman/csrgenerator.com -https://github.com/DavidWittman/csrgenerator.com -Entry file: None -Scanned: 2016-10-20 08:33:50.136787 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-20 08:33:51.471794 -No vulnerabilities found. - - -1000ch/flask-handson -https://github.com/1000ch/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-20 08:33:52.007182 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-20 08:33:52.508448 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -jishnujagajeeve/Flaskr -https://github.com/jishnujagajeeve/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 08:34:15.045759 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Basher51/Flaskr -https://github.com/Basher51/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 08:34:16.542711 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-20 08:34:18.044340 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-20 08:34:19.560275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaste/FlaskDeferredHandler -https://github.com/kaste/FlaskDeferredHandler -Entry file: FlaskDeferredHandler/flask_handler_test.py -Scanned: 2016-10-20 08:34:20.827930 -No vulnerabilities found. - - -adityaathalye/flaskr2 -https://github.com/adityaathalye/flaskr2 -Entry file: flaskr2/app.py -Scanned: 2016-10-20 08:34:22.068069 -No vulnerabilities found. - - -ConceptPending/flaskTemplate -https://github.com/ConceptPending/flaskTemplate -Entry file: flaskTemplate/server.py -Scanned: 2016-10-20 08:34:24.070642 -No vulnerabilities found. - - -AlexMost/Flask-starter -https://github.com/AlexMost/Flask-starter -Entry file: Flask-starter/app.py -Scanned: 2016-10-20 08:34:25.340728 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-20 08:34:25.840825 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jonomillin/learning-flask -https://github.com/jonomillin/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 08:34:28.399735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-20 08:34:31.024300 -No vulnerabilities found. - - -nthfloor/Flask_learn -https://github.com/nthfloor/Flask_learn -Entry file: Flask_learn/login_system/flskr.py -Scanned: 2016-10-20 08:34:35.044846 -Vulnerability 1: -File: Flask_learn/login_system/flskr.py - > User input at line 116, trigger word "get(": - username = request.form.get('username') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - -Vulnerability 2: -File: Flask_learn/login_system/flskr.py - > User input at line 117, trigger word "get(": - password = request.form.get('password') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - - - -mmcgahan/flask-labs-bb -https://github.com/mmcgahan/flask-labs-bb -Entry file: flask-labs-bb/flask_labs/__init__.py -Scanned: 2016-10-20 08:34:37.124124 -Vulnerability 1: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 2: -File: flask-labs-bb/flask_labs/views.py - > User input at line 29, trigger word ".data": - user = db.session.query(User).filter(User.username == login_form.username.data).first() -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 3: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 4: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 5: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',login_form=login_form) - - - -daisuzu/flask-app-sample -https://github.com/daisuzu/flask-app-sample -Entry file: flask-app-sample/db.py -Scanned: 2016-10-20 08:34:38.388078 -No vulnerabilities found. - - -penpyt/flask-couchdb-auth -https://github.com/penpyt/flask-couchdb-auth -Entry file: flask-couchdb-auth/example/guestbook.py -Scanned: 2016-10-20 08:34:39.725213 -Vulnerability 1: -File: flask-couchdb-auth/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-auth/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-20 08:34:40.249067 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:34:40.796581 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-20 08:34:42.473482 -No vulnerabilities found. - - -honestappalachia/honest_site -https://github.com/honestappalachia/honest_site -Entry file: honest_site/run.py -Scanned: 2016-10-20 08:34:43.812614 -Vulnerability 1: -File: honest_site/run.py - > User input at line 36, trigger word "get(": - template = page.meta.get('template', 'default.html') -File: honest_site/run.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -daikeshi/one-dollar-metasearch-engine -https://github.com/daikeshi/one-dollar-metasearch-engine -Entry file: one-dollar-metasearch-engine/app/__init__.py -Scanned: 2016-10-20 08:34:44.314769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msalahi/art-party -https://github.com/msalahi/art-party -Entry file: art-party/app.py -Scanned: 2016-10-20 08:34:54.027236 -No vulnerabilities found. - - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-20 08:34:54.542168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saltire/artpubpy -https://github.com/saltire/artpubpy -Entry file: artpubpy/artpubpy.py -Scanned: 2016-10-20 08:34:55.069042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcniac/simple-blog -https://github.com/mcniac/simple-blog -Entry file: simple-blog/tumblelog/__init__.py -Scanned: 2016-10-20 08:35:00.983920 -No vulnerabilities found. - - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-20 08:35:02.293795 -No vulnerabilities found. - - -fusic-com/flask-webcache -https://github.com/fusic-com/flask-webcache -Entry file: flask-webcache/contrib/sleepycalc/app.py -Scanned: 2016-10-20 08:35:08.594266 -No vulnerabilities found. - - -rehandalal/flask-mobility -https://github.com/rehandalal/flask-mobility -Entry file: flask-mobility/flask_mobility/tests/test_decorators.py -Scanned: 2016-10-20 08:35:16.971818 -Vulnerability 1: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 48, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 2: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 51, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 3: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 69, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 4: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 72, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 5: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 36, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 6: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 40, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'off') - - - -kelp404/Flask-GAE -https://github.com/kelp404/Flask-GAE -Entry file: None -Scanned: 2016-10-20 08:35:17.476297 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jaysonsantos/jinja-assets-compressor -https://github.com/jaysonsantos/jinja-assets-compressor -Entry file: jinja-assets-compressor/jac/contrib/flask.py -Scanned: 2016-10-20 08:35:20.286992 -No vulnerabilities found. - - -nabetama/flaskr -https://github.com/nabetama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:35:21.275190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-20 08:35:21.776187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-20 08:35:28.018545 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-20 08:35:28.517624 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shunyata/flask-helloworld -https://github.com/shunyata/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-20 08:35:30.421189 -No vulnerabilities found. - - -stephen-allison/basic-flask -https://github.com/stephen-allison/basic-flask -Entry file: None -Scanned: 2016-10-20 08:35:30.938896 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stephen-allison/basic-flask. - -bollwyvl/flask-reloaded -https://github.com/bollwyvl/flask-reloaded -Entry file: None -Scanned: 2016-10-20 08:35:32.451322 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bollwyvl/flask-reloaded. - -kitanata/flask-demo -https://github.com/kitanata/flask-demo -Entry file: None -Scanned: 2016-10-20 08:35:35.983512 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kitanata/flask-demo. - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-20 08:35:39.258200 -No vulnerabilities found. - - -flyingsparx/MongoFlask -https://github.com/flyingsparx/MongoFlask -Entry file: MongoFlask/application.py -Scanned: 2016-10-20 08:35:40.577096 -Vulnerability 1: -File: MongoFlask/application.py - > User input at line 39, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -File: MongoFlask/application.py - > reaches line 39, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - -Vulnerability 2: -File: MongoFlask/application.py - > User input at line 64, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -Reassigned in: - File: MongoFlask/application.py - > Line 67: session['id'] = person.id -File: MongoFlask/application.py - > reaches line 64, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - - - -DanAlbert/flask-guestbook -https://github.com/DanAlbert/flask-guestbook -Entry file: flask-guestbook/guestbook.py -Scanned: 2016-10-20 08:35:41.898141 -No vulnerabilities found. - - -kirkeby/empty-flask -https://github.com/kirkeby/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-20 08:35:42.884859 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rehandalal/buchner -https://github.com/rehandalal/buchner -Entry file: buchner/buchner/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-20 08:35:46.558238 -No vulnerabilities found. - - -vitalk/flask-staticutils -https://github.com/vitalk/flask-staticutils -Entry file: flask-staticutils/tests/test_app/__init__.py -Scanned: 2016-10-20 08:35:47.939310 -No vulnerabilities found. - - -chiwong/flask_quickstart -https://github.com/chiwong/flask_quickstart -Entry file: flask_quickstart/hello.py -Scanned: 2016-10-20 08:35:48.578620 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_quickstart/venv_hello/lib/python2.6/genericpath.py - -archieyang/flask_app -https://github.com/archieyang/flask_app -Entry file: None -Scanned: 2016-10-20 08:35:49.097427 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/archieyang/flask_app. - -ipfans/openshift-flask-template -https://github.com/ipfans/openshift-flask-template -Entry file: openshift-flask-template/wsgi/mainapp.py -Scanned: 2016-10-20 08:35:50.422537 -No vulnerabilities found. - - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-20 08:35:55.656122 -No vulnerabilities found. - - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:35:56.170394 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -philangist/url-shorten -https://github.com/philangist/url-shorten -Entry file: url-shorten/shorten.py -Scanned: 2016-10-20 08:35:56.674473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabionatali/DigiWebStats -https://github.com/fabionatali/DigiWebStats -Entry file: DigiWebStats/app.py -Scanned: 2016-10-20 08:35:58.239175 -Vulnerability 1: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 2: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 3: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - -Vulnerability 4: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - - - -confessin/addressbook -https://github.com/confessin/addressbook -Entry file: addressbook/addressbook.py -Scanned: 2016-10-20 08:36:02.465399 -No vulnerabilities found. - - -nafur/flmpc -https://github.com/nafur/flmpc -Entry file: flmpc/main.py -Scanned: 2016-10-20 08:36:03.836749 -No vulnerabilities found. - - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-20 08:36:04.331522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kvalle/greetr -https://github.com/kvalle/greetr -Entry file: greetr/greetr/__init__.py -Scanned: 2016-10-20 08:36:16.733368 -No vulnerabilities found. - - -dan-v/crossfitboxreview -https://github.com/dan-v/crossfitboxreview -Entry file: crossfitboxreview/seed_affiliates.py -Scanned: 2016-10-20 08:36:18.450346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/brew -https://github.com/mjhea0/brew -Entry file: brew/app.py -Scanned: 2016-10-20 08:36:24.528189 -No vulnerabilities found. - - -DoctorMalboro/leandropoblet.com -https://github.com/DoctorMalboro/leandropoblet.com -Entry file: None -Scanned: 2016-10-20 08:36:25.027321 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-20 08:36:26.277398 -No vulnerabilities found. - - -danielholmstrom/flask-alchemyview -https://github.com/danielholmstrom/flask-alchemyview -Entry file: flask-alchemyview/tests/test_with_flask_sqlalchemy.py -Scanned: 2016-10-20 08:36:30.249395 -Vulnerability 1: -File: flask-alchemyview/tests/test_view.py - > User input at line 150, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 150, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) - -Vulnerability 2: -File: flask-alchemyview/tests/test_view.py - > User input at line 154, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 154, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 3: -File: flask-alchemyview/tests/test_view.py - > User input at line 181, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 174: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 177: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 178, trigger word "url_for(": - response = self.json_put(url_for('SimpleModelView:put',id=model_id), 'name''new name') - -Vulnerability 4: -File: flask-alchemyview/tests/test_view.py - > User input at line 197, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 197, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) - -Vulnerability 5: -File: flask-alchemyview/tests/test_view.py - > User input at line 209, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 202: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 205: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 206, trigger word "url_for(": - response = self.json_delete(url_for('SimpleModelView:put',id=model_id)) - -Vulnerability 6: -File: flask-alchemyview/tests/test_view.py - > User input at line 236, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) -File: flask-alchemyview/tests/test_view.py - > reaches line 236, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) - -Vulnerability 7: -File: flask-alchemyview/tests/test_view.py - > User input at line 246, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 246, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 8: -File: flask-alchemyview/tests/test_view.py - > User input at line 251, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 251, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 9: -File: flask-alchemyview/tests/test_view.py - > User input at line 258, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) -File: flask-alchemyview/tests/test_view.py - > reaches line 258, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) - -Vulnerability 10: -File: flask-alchemyview/tests/test_view.py - > User input at line 266, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index')) -File: flask-alchemyview/tests/test_view.py - > reaches line 266, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index')) - -Vulnerability 11: -File: flask-alchemyview/tests/test_view.py - > User input at line 279, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 279, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 12: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 13: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - -Vulnerability 14: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 15: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - - - -vovantics/flask-bluebone -https://github.com/vovantics/flask-bluebone -Entry file: flask-bluebone/app/app.py -Scanned: 2016-10-20 08:36:30.854530 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-20 08:36:40.284296 -No vulnerabilities found. - - -abulte/flask-arduino-websocket-sqlite -https://github.com/abulte/flask-arduino-websocket-sqlite -Entry file: flask-arduino-websocket-sqlite/app.py -Scanned: 2016-10-20 08:36:41.646582 -No vulnerabilities found. - - -futuregrid/flask_cm -https://github.com/futuregrid/flask_cm -Entry file: flask_cm/examples/forms/app.py -Scanned: 2016-10-20 08:36:47.301047 -Vulnerability 1: -File: flask_cm/examples/forms/app.py - > User input at line 24, trigger word "get(": - comments = session.get('comments', []) -File: flask_cm/examples/forms/app.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',comments=comments, form=form) - - - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-20 08:36:48.596224 -No vulnerabilities found. - - -mozillazg/flask-demo -https://github.com/mozillazg/flask-demo -Entry file: None -Scanned: 2016-10-20 08:36:49.122429 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mozillazg/flask-demo. - -toastercup/flask-social -https://github.com/toastercup/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-20 08:36:49.627585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-20 08:36:50.890242 -No vulnerabilities found. - - -danillosouza/flask-boilerplate -https://github.com/danillosouza/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 08:36:51.398960 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danillosouza/flask-boilerplate. - -dogrdon/flask-map -https://github.com/dogrdon/flask-map -Entry file: None -Scanned: 2016-10-20 08:36:51.919498 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sapid/Flask-Community -https://github.com/sapid/Flask-Community -Entry file: None -Scanned: 2016-10-20 08:36:52.431645 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sapid/Flask-Community. - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-20 08:36:56.413107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-20 08:36:57.651777 -No vulnerabilities found. - - -garbados/flask-the-gauntlet -https://github.com/garbados/flask-the-gauntlet -Entry file: flask-the-gauntlet/app.py -Scanned: 2016-10-20 08:37:03.320137 -No vulnerabilities found. - - -NoxDineen/microblog -https://github.com/NoxDineen/microblog -Entry file: None -Scanned: 2016-10-20 08:37:03.833773 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kaibin/Condom_Data_Server -https://github.com/Kaibin/Condom_Data_Server -Entry file: Condom_Data_Server/app.py -Scanned: 2016-10-20 08:37:05.358711 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-20 08:39:27.898151 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-20 08:39:28.400384 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -jdiez17/flask-paypal -https://github.com/jdiez17/flask-paypal -Entry file: flask-paypal/app.py -Scanned: 2016-10-20 08:39:29.673455 -Vulnerability 1: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 33, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Everything looks good!
- Click here to complete the payment. - ' % url_for('paypal_do',token=getexp_response['TOKEN']) - -Vulnerability 2: -File: flask-paypal/app.py - > User input at line 30, trigger word "get(": - getexp_response = interface.get_express_checkout_details(token=request.args.get('token', '')) -File: flask-paypal/app.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = ' - Oh noes! PayPal returned an error code.
-
-                %s
-            
- Click here to try again. - ' % (getexp_response['ACK'], url_for('index')) - - - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 08:39:31.399898 -No vulnerabilities found. - - -tarbell-project/tarbell -https://github.com/tarbell-project/tarbell -Entry file: tarbell/tarbell/app.py -Scanned: 2016-10-20 08:39:40.009835 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 08:39:40.507083 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becdot/adventures-in-text -https://github.com/becdot/adventures-in-text -Entry file: adventures-in-text/db_methods.py -Scanned: 2016-10-20 08:39:41.009209 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dirn/Flask-Simon -https://github.com/dirn/Flask-Simon -Entry file: Flask-Simon/examples/flaskr/flaskr.py -Scanned: 2016-10-20 08:39:42.503193 -No vulnerabilities found. - - -caub/flask-geo -https://github.com/caub/flask-geo -Entry file: flask-geo/myMap.py -Scanned: 2016-10-20 08:39:43.016259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -masayang/flask_dev -https://github.com/masayang/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 08:39:43.515684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 08:39:44.835817 -No vulnerabilities found. - - -ffiiccuuss/torouterui -https://github.com/ffiiccuuss/torouterui -Entry file: torouterui/torouterui/__init__.py -Scanned: 2016-10-20 08:39:45.337145 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marsella/andrea -https://github.com/marsella/andrea -Entry file: andrea/init.py -Scanned: 2016-10-20 08:39:46.367404 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: andrea/venv/lib/python2.7/genericpath.py - -embr/multithon -https://github.com/embr/multithon -Entry file: multithon/multithon.py -Scanned: 2016-10-20 08:39:48.125448 -No vulnerabilities found. - - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 08:39:48.634254 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 08:39:49.134194 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 08:39:52.390983 -No vulnerabilities found. - - -MaxPresman/tempymail -https://github.com/MaxPresman/tempymail -Entry file: tempymail/flask_frontend.py -Scanned: 2016-10-20 08:39:52.895976 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregorynicholas/flask-xsrf -https://github.com/gregorynicholas/flask-xsrf -Entry file: flask-xsrf/flask_xsrf.py -Scanned: 2016-10-20 08:39:54.886314 -No vulnerabilities found. - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 08:39:56.591554 -No vulnerabilities found. - - -Blender3D/Flask-LESS -https://github.com/Blender3D/Flask-LESS -Entry file: Flask-LESS/flask_less.py -Scanned: 2016-10-20 08:39:58.923912 -No vulnerabilities found. - - -hex/flaskr -https://github.com/hex/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:39:59.475347 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 08:40:00.456941 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cheesysam/flaskDemo -https://github.com/cheesysam/flaskDemo -Entry file: flaskDemo/flaskDemo.py -Scanned: 2016-10-20 08:40:00.940365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -parryjacob/flask-boilerplate -https://github.com/parryjacob/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 08:41:26.975374 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/parryjacob/flask-boilerplate. - -jpercent/flask-control -https://github.com/jpercent/flask-control -Entry file: flask-control/example.py -Scanned: 2016-10-20 08:41:27.475999 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ceasar/pocket_flask -https://github.com/Ceasar/pocket_flask -Entry file: pocket_flask/app/__init__.py -Scanned: 2016-10-20 08:41:29.251792 -No vulnerabilities found. - - -CMGS/poll -https://github.com/CMGS/poll -Entry file: poll/app.py -Scanned: 2016-10-20 08:41:35.933139 -Vulnerability 1: -File: poll/app.py - > User input at line 31, trigger word "get(": - q = request.args.get('q', '') -File: poll/app.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user=g.user, subjects=get_subjects(q), groups=get_groups(), group=get_group(q)) - -Vulnerability 2: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - -Vulnerability 3: -File: poll/app.py - > User input at line 59, trigger word "get(": - group = request.form.get('group') -Reassigned in: - File: poll/app.py - > Line 56: ret_MAYBE_FUNCTION_NAME = render_template('write.html',user=g.user, groups=get_groups()) -File: poll/app.py - > reaches line 64, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',q=group)) - - - -hoh/perfume -https://github.com/hoh/perfume -Entry file: perfume/perfume/__init__.py -Scanned: 2016-10-20 08:41:37.296284 -No vulnerabilities found. - - -dogrdon/txtr -https://github.com/dogrdon/txtr -Entry file: txtr/txtr.py -Scanned: 2016-10-20 08:41:37.810549 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattoufoutu/TrendnetStalker -https://github.com/mattoufoutu/TrendnetStalker -Entry file: TrendnetStalker/TrendnetStalker/__init__.py -Scanned: 2016-10-20 08:41:38.299944 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-20 08:41:42.486274 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -cyrilaub/myMap_python -https://github.com/cyrilaub/myMap_python -Entry file: myMap_python/myMap.py -Scanned: 2016-10-20 08:41:42.995675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sburns/switchboard -https://github.com/sburns/switchboard -Entry file: switchboard/sample_app.py -Scanned: 2016-10-20 08:41:43.498294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-20 08:41:43.998601 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -sysr-q/phi -https://github.com/sysr-q/phi -Entry file: phi/phi/phi.py -Scanned: 2016-10-20 08:41:47.425334 -No vulnerabilities found. - - -bogdan-kulynych/cloudlectures -https://github.com/bogdan-kulynych/cloudlectures -Entry file: cloudlectures/flask/sessions.py -Scanned: 2016-10-20 08:41:47.950235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanielleSucher/BookQueue -https://github.com/DanielleSucher/BookQueue -Entry file: BookQueue/app.py -Scanned: 2016-10-20 08:41:49.343095 -Vulnerability 1: -File: BookQueue/app.py - > User input at line 145, trigger word "form[": - from_email = request.form['sender'].lower() -File: BookQueue/app.py - > reaches line 146, trigger word "filter(": - query = User.query.filter(User.email == from_email) - - - -allanlei/flask-email -https://github.com/allanlei/flask-email -Entry file: flask-email/tests/__init__.py -Scanned: 2016-10-20 08:41:52.321427 -No vulnerabilities found. - - -maxcnunes/flaskgaedemo -https://github.com/maxcnunes/flaskgaedemo -Entry file: flaskgaedemo/main.py -Scanned: 2016-10-20 08:41:53.404232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -domenicosolazzo/flask_examples -https://github.com/domenicosolazzo/flask_examples -Entry file: flask_examples/logger_example.py -Scanned: 2016-10-20 08:41:54.712064 -No vulnerabilities found. - - -akostyuk/flask-dbmigrate -https://github.com/akostyuk/flask-dbmigrate -Entry file: flask-dbmigrate/tests.py -Scanned: 2016-10-20 08:41:55.233508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -50onRed/phillypug-flask -https://github.com/50onRed/phillypug-flask -Entry file: phillypug-flask/phillypug/app.py -Scanned: 2016-10-20 08:41:56.470275 -Vulnerability 1: -File: phillypug-flask/phillypug/views.py - > User input at line 19, trigger word "get(": - repos = redis_client.get(repos_key) -Reassigned in: - File: phillypug-flask/phillypug/views.py - > Line 21: repos = json.loads(repos) -File: phillypug-flask/phillypug/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',repos=repos) - - - -booo/flask-gtfs -https://github.com/booo/flask-gtfs -Entry file: None -Scanned: 2016-10-20 08:41:56.977347 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/booo/flask-gtfs. - -faruken/flask-web.py-jvm -https://github.com/faruken/flask-web.py-jvm -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 08:41:57.466034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nerevu/prometheus -https://github.com/nerevu/prometheus -Entry file: prometheus/app/__init__.py -Scanned: 2016-10-20 08:41:57.968249 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottdnz/flask_skeleton -https://github.com/scottdnz/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 08:41:58.471957 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -pavlenko-volodymyr/flask-study -https://github.com/pavlenko-volodymyr/flask-study -Entry file: flask-study/hello.py -Scanned: 2016-10-20 08:41:59.000605 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slizadel/flask-gitrcv -https://github.com/slizadel/flask-gitrcv -Entry file: flask-gitrcv/flask-gitrcv/gitrcv.py -Scanned: 2016-10-20 08:42:00.303873 -No vulnerabilities found. - - -apjd/flask-heroku -https://github.com/apjd/flask-heroku -Entry file: flask-heroku/flasky.py -Scanned: 2016-10-20 08:42:01.570546 -No vulnerabilities found. - - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-20 08:42:02.960656 -No vulnerabilities found. - - -JunilJacob/Paint-app-using-Flask -https://github.com/JunilJacob/Paint-app-using-Flask -Entry file: Paint-app-using-Flask/hello.py -Scanned: 2016-10-20 08:42:28.726667 -Vulnerability 1: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 18, trigger word "execute(": - c.execute('DELETE FROM Image WHERE file=?', iname) - -Vulnerability 2: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 3: -File: Paint-app-using-Flask/hello.py - > User input at line 12, trigger word "form[": - name = request.form['pname'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 16: iname = (name) -File: Paint-app-using-Flask/hello.py - > reaches line 19, trigger word "execute(": - c.execute('INSERT INTO Image VALUES (?,?)', image) - -Vulnerability 4: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 34, trigger word "execute(": - for row in c.execute('SELECT * FROM Image WHERE file=?', filename): - -Vulnerability 5: -File: Paint-app-using-Flask/hello.py - > User input at line 11, trigger word "form[": - data = request.form['pdata'] -Reassigned in: - File: Paint-app-using-Flask/hello.py - > Line 15: image = (name, data) - File: Paint-app-using-Flask/hello.py - > Line 33: data = '' - File: Paint-app-using-Flask/hello.py - > Line 37: ret_MAYBE_FUNCTION_NAME = resp - File: Paint-app-using-Flask/hello.py - > Line 39: ret_MAYBE_FUNCTION_NAME = 'Image not Found' - File: Paint-app-using-Flask/hello.py - > Line 42: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') -File: Paint-app-using-Flask/hello.py - > reaches line 36, trigger word "render_template(": - resp = Response('' + render_template('paint.html'),status=200, mimetype='html') - - - -dimfox/flask-mega-tutorial -https://github.com/dimfox/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 08:42:29.227048 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-20 08:42:37.200092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-20 08:42:38.721279 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshkurz/exi -https://github.com/joshkurz/exi -Entry file: exi/exi/tests/security/test_app/__init__.py -Scanned: 2016-10-20 08:42:41.078902 -No vulnerabilities found. - - -booo/baedproject -https://github.com/booo/baedproject -Entry file: baedproject/app.py -Scanned: 2016-10-20 08:42:42.312265 -No vulnerabilities found. - - -kalimatas/herokuflask -https://github.com/kalimatas/herokuflask -Entry file: herokuflask/app.py -Scanned: 2016-10-20 08:42:44.560846 -No vulnerabilities found. - - -norbert/helloflask -https://github.com/norbert/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-20 08:42:45.087441 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -perjo927/Portfolio -https://github.com/perjo927/Portfolio -Entry file: Portfolio/server.py -Scanned: 2016-10-20 08:42:49.294374 -Vulnerability 1: -File: Portfolio/server.py - > User input at line 96, trigger word "form[": - search_string = request.form['key'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 2: -File: Portfolio/server.py - > User input at line 99, trigger word "form[": - sort_order = request.form['sort_order'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - -Vulnerability 3: -File: Portfolio/server.py - > User input at line 100, trigger word "form[": - sort_by = request.form['sort_by'] -Reassigned in: - File: Portfolio/server.py - > Line 103: search_res = data.search(db,search=search_string, sort_order=sort_order, sort_by=sort_by, techniques=techs, search_fields=search_fields) -File: Portfolio/server.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',search_res=search_res, db=db, search=search_string) - - - -Pusungwi/lobotomizer -https://github.com/Pusungwi/lobotomizer -Entry file: None -Scanned: 2016-10-20 08:42:49.790022 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pusungwi/lobotomizer. - -ahawker/jpool -https://github.com/ahawker/jpool -Entry file: None -Scanned: 2016-10-20 08:42:50.283080 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ahawker/jpool. - -takosuke/pizzasuicideclub -https://github.com/takosuke/pizzasuicideclub -Entry file: pizzasuicideclub/psc_app/__init__.py -Scanned: 2016-10-20 08:42:58.613059 -Vulnerability 1: -File: pizzasuicideclub/psc_app/filters.py - > User input at line 15, trigger word "Markup(": - result = Markup(result) -Reassigned in: - File: pizzasuicideclub/psc_app/filters.py - > Line 16: ret_MAYBE_FUNCTION_NAME = result -File: pizzasuicideclub/psc_app/filters.py - > reaches line 12, trigger word "replace(": - result = ' - -'.join(('

%s

' % p.replace(' -', '
-') for p in _paragraph_re.split(escape(value)))) -This vulnerability is potentially sanitised by: ['escape'] - -Vulnerability 2: -File: pizzasuicideclub/psc_app/pages/views.py - > User input at line 35, trigger word "get(": - post = Post.query.get(postId) -Reassigned in: - File: pizzasuicideclub/psc_app/pages/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('404.html',user=user) -File: pizzasuicideclub/psc_app/pages/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pages/permalink.html',title=post.title, post=post, user=user) - -Vulnerability 3: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 31, trigger word "get(": - profile = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('pages.userlist')) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/profile.html',profile=profile, user=user, form=form) - -Vulnerability 4: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 54, trigger word "flash(": - flash('You are logged in %s' % user.username) - -Vulnerability 5: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 6: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(username=form.username.data).first() -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 52: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 53: session['username'] = user.username - File: pizzasuicideclub/psc_app/users/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('users/login.html',form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 49: session['remember_me'] = form.remember_me.data -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 55, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 7: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 8: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 9: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 79, trigger word ".data": - file = form.image.data -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 80: profile_pic = utilities.file_save(file, 'profilepics') - File: pizzasuicideclub/psc_app/users/views.py - > Line 81: user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 10: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 81, trigger word ".data": - user = User(username=form.username.data, email=form.email.data, password=generate_password_hash(form.password.data), description=form.description.data, profile_pic=profile_pic, homepage=form.homepage.data, role=form.role.data, zodiac=form.zodiac.data) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 84: session['user_id'] = user.id - File: pizzasuicideclub/psc_app/users/views.py - > Line 87: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.home')) - File: pizzasuicideclub/psc_app/users/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) - File: pizzasuicideclub/psc_app/users/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('users/register.html',title='register', form=form) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 86, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=user.id)) - -Vulnerability 11: -File: pizzasuicideclub/psc_app/users/views.py - > User input at line 140, trigger word "get(": - user = User.query.get(userId) -Reassigned in: - File: pizzasuicideclub/psc_app/users/views.py - > Line 134: user = g.user - File: pizzasuicideclub/psc_app/users/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('users.profile',userId=userId)) -File: pizzasuicideclub/psc_app/users/views.py - > reaches line 145, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users/modify_password.html',form=form, user=user) - - - -neilduncan/FlickrPlaceholders -https://github.com/neilduncan/FlickrPlaceholders -Entry file: FlickrPlaceholders/main.py -Scanned: 2016-10-20 08:42:59.894866 -No vulnerabilities found. - - -amaterasu-/placeholder -https://github.com/amaterasu-/placeholder -Entry file: placeholder/image.py -Scanned: 2016-10-20 08:43:01.137334 -No vulnerabilities found. - - -koon-kai/kiblog -https://github.com/koon-kai/kiblog -Entry file: kiblog/app.py -Scanned: 2016-10-20 08:43:02.274226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joelrojo/flask -https://github.com/joelrojo/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 08:43:02.834546 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -asgoel/Merge-flask -https://github.com/asgoel/Merge-flask -Entry file: Merge-flask/app.py -Scanned: 2016-10-20 08:43:03.817977 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gregimba/Vodka -https://github.com/gregimba/Vodka -Entry file: Vodka/app.py -Scanned: 2016-10-20 08:43:06.346362 -No vulnerabilities found. - - -corydolphin/flask-olinauth -https://github.com/corydolphin/flask-olinauth -Entry file: flask-olinauth/example.py -Scanned: 2016-10-20 08:43:07.746642 -No vulnerabilities found. - - -danielestevez/flasktutorial -https://github.com/danielestevez/flasktutorial -Entry file: None -Scanned: 2016-10-20 08:43:09.252066 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pityonline/flaskr -https://github.com/pityonline/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:43:09.755460 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Studentapp-Flask -https://github.com/prabeesh/Studentapp-Flask -Entry file: Studentapp-Flask/test.py -Scanned: 2016-10-20 08:43:10.716458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dproni/flask_test -https://github.com/dproni/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 08:43:27.811935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scardine/flask-locale -https://github.com/scardine/flask-locale -Entry file: flask-locale/tests/__init__.py -Scanned: 2016-10-20 08:43:29.168445 -No vulnerabilities found. - - -callahad/temp-flask-persona-demo -https://github.com/callahad/temp-flask-persona-demo -Entry file: temp-flask-persona-demo/example.py -Scanned: 2016-10-20 08:43:29.749296 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kishorekdty/paint_using_flask -https://github.com/kishorekdty/paint_using_flask -Entry file: None -Scanned: 2016-10-20 08:43:31.239792 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kishorekdty/paint_using_flask. - -joshsee/GAE-flask-cms -https://github.com/joshsee/GAE-flask-cms -Entry file: GAE-flask-cms/flask/sessions.py -Scanned: 2016-10-20 08:43:37.765289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasheedh/Heroku-Paint-Using-Flask -https://github.com/rasheedh/Heroku-Paint-Using-Flask -Entry file: None -Scanned: 2016-10-20 08:43:39.274675 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Heroku-Paint-Using-Flask. - -sreekanthkaralmanna/heroku-paint-app-using-flask -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask -Entry file: None -Scanned: 2016-10-20 08:43:39.774949 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask. - -mikewallace1979/milk -https://github.com/mikewallace1979/milk -Entry file: milk/milk.py -Scanned: 2016-10-20 08:43:43.038322 -No vulnerabilities found. - - -goonpug/goonpug-stats -https://github.com/goonpug/goonpug-stats -Entry file: goonpug-stats/goonpug/__init__.py -Scanned: 2016-10-20 08:43:46.394545 -No vulnerabilities found. - - -clly/blog.md -https://github.com/clly/blog.md -Entry file: blog/flaskr.py -Scanned: 2016-10-20 08:43:46.920117 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simplyluke/dothis -https://github.com/simplyluke/dothis -Entry file: dothis/dothis.py -Scanned: 2016-10-20 08:43:48.149067 -No vulnerabilities found. - - -oberkowitz/improv -https://github.com/oberkowitz/improv -Entry file: improv/mytest/app.py -Scanned: 2016-10-20 08:43:50.696310 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: improv/mytest/venv/lib/python2.7/genericpath.py - -mikeboers/Flask-Images -https://github.com/mikeboers/Flask-Images -Entry file: Flask-Images/tests/__init__.py -Scanned: 2016-10-20 08:43:53.644568 -No vulnerabilities found. - - -berlotto/flask-app-template -https://github.com/berlotto/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-20 08:44:00.635610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/flask-jsonpify -https://github.com/corydolphin/flask-jsonpify -Entry file: flask-jsonpify/test.py -Scanned: 2016-10-20 08:44:03.053101 -No vulnerabilities found. - - -eadmundo/flask-static-blog -https://github.com/eadmundo/flask-static-blog -Entry file: flask-static-blog/app/__init__.py -Scanned: 2016-10-20 08:44:04.990840 -Vulnerability 1: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 17, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 30: pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - -Vulnerability 2: -File: flask-static-blog/app/blueprints/blog/views.py - > User input at line 30, trigger word "get(": - pagination = query.paginate(page, current_app.config.get('BLOG_POSTS_PER_PAGE', 10)) -Reassigned in: - File: flask-static-blog/app/blueprints/blog/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('single_post.jinja',post=query.all()[0]) -File: flask-static-blog/app/blueprints/blog/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('posts.jinja',pagination=pagination, endpoint=request.endpoint, view_args=request.view_args) - - - -0atman/flask-basic -https://github.com/0atman/flask-basic -Entry file: flask-basic/flask-basic.py -Scanned: 2016-10-20 08:44:06.691395 -No vulnerabilities found. - - -clmns/flasktest -https://github.com/clmns/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 08:44:07.711630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zfdang/memcached-in-openshift -https://github.com/zfdang/memcached-in-openshift -Entry file: memcached-in-openshift/wsgi/main.py -Scanned: 2016-10-20 08:44:09.202481 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garethpaul/flask-sample -https://github.com/garethpaul/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 08:44:10.199095 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -naveenpremchand02/flask_url -https://github.com/naveenpremchand02/flask_url -Entry file: flask_url/url.py -Scanned: 2016-10-20 08:44:10.696020 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-NavBar -https://github.com/xiechao06/Flask-NavBar -Entry file: Flask-NavBar/flask_nav_bar.py -Scanned: 2016-10-20 08:44:11.669858 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpdean/flask-oauth-tutorial -https://github.com/cpdean/flask-oauth-tutorial -Entry file: flask-oauth-tutorial/flaskr.py -Scanned: 2016-10-20 08:44:12.937681 -No vulnerabilities found. - - -nsfyn55/flask-mega-tutorial -https://github.com/nsfyn55/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 08:44:28.510435 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kshitizrimal/flaskr-modified -https://github.com/kshitizrimal/flaskr-modified -Entry file: flaskr-modified/flaskr.py -Scanned: 2016-10-20 08:44:29.087524 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prasanthkumara/Heroku-Paint-App-Using--Flask -https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask -Entry file: None -Scanned: 2016-10-20 08:44:32.063644 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prasanthkumara/Heroku-Paint-App-Using--Flask. - -pyxze/PyxzeCorpus -https://github.com/pyxze/PyxzeCorpus -Entry file: PyxzeCorpus/corpus.py -Scanned: 2016-10-20 08:44:39.299261 -No vulnerabilities found. - - -crcsmnky/thehotspot -https://github.com/crcsmnky/thehotspot -Entry file: thehotspot/v2/app.py -Scanned: 2016-10-20 08:44:41.332880 -Vulnerability 1: -File: thehotspot/v2/app.py - > User input at line 54, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('places.html',places=places, count=count, skip=checkins_skip) - -Vulnerability 2: -File: thehotspot/v2/app.py - > User input at line 64, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',users=users, count=count, skip=checkins_skip) - -Vulnerability 3: -File: thehotspot/v2/app.py - > User input at line 73, trigger word "get(": - checkins_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('checkins.html',checkins=checkins, users=users, places=places, skip=checkins_skip, count=count) - -Vulnerability 4: -File: thehotspot/v2/app.py - > User input at line 103, trigger word "get(": - cats_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('categories.html',categories=categories, count=count, skip=cats_skip) - -Vulnerability 5: -File: thehotspot/v2/app.py - > User input at line 114, trigger word "get(": - places_skip = int(request.args.get('skip', 0)) -File: thehotspot/v2/app.py - > reaches line 118, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',category=cat, places=places, mapped=places.clone(), count=cat['count'], skip=places_skip) - - - -etscrivner/sovereign-states -https://github.com/etscrivner/sovereign-states -Entry file: sovereign-states/sovereign_states/api.py -Scanned: 2016-10-20 08:44:42.717027 -No vulnerabilities found. - - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-20 08:44:44.089649 -No vulnerabilities found. - - -sreedathns/paint-app-using-heroku-and-flask -https://github.com/sreedathns/paint-app-using-heroku-and-flask -Entry file: None -Scanned: 2016-10-20 08:44:44.601452 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreedathns/paint-app-using-heroku-and-flask. - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-20 08:44:47.099087 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -chadgh/chessy -https://github.com/chadgh/chessy -Entry file: None -Scanned: 2016-10-20 08:44:47.616697 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wowo/pithermo -https://github.com/wowo/pithermo -Entry file: pithermo/pithermo.py -Scanned: 2016-10-20 08:44:51.581577 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aranasaurus/android-demo-server -https://github.com/aranasaurus/android-demo-server -Entry file: android-demo-server/app.py -Scanned: 2016-10-20 08:44:52.855867 -Vulnerability 1: -File: android-demo-server/app.py - > User input at line 21, trigger word "get(": - r = requests.get(url.format(query)) -Reassigned in: - File: android-demo-server/app.py - > Line 22: images = [(i, json.dumps(i)) for i in json.loads(r.text)['responseData']['results']] -File: android-demo-server/app.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',images=images) - - - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 08:45:01.317195 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deepgully/me -https://github.com/deepgully/me -Entry file: me/settings.py -Scanned: 2016-10-20 08:45:02.865850 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mickey06/Flask-principal-example -https://github.com/mickey06/Flask-principal-example -Entry file: Flask-principal-example/FPrincipals.py -Scanned: 2016-10-20 08:45:05.237206 -No vulnerabilities found. - - -crazygit/flask -https://github.com/crazygit/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 08:45:05.811223 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wingu/flask_filters -https://github.com/wingu/flask_filters -Entry file: flask_filters/test_flask_filters.py -Scanned: 2016-10-20 08:45:07.141889 -No vulnerabilities found. - - -BuongiornoMIP/Reding -https://github.com/BuongiornoMIP/Reding -Entry file: Reding/reding/app.py -Scanned: 2016-10-20 08:45:10.712742 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-20 08:45:13.545427 -No vulnerabilities found. - - -colwilson/flask-lazyapi -https://github.com/colwilson/flask-lazyapi -Entry file: flask-lazyapi/demo_server.py -Scanned: 2016-10-20 08:45:14.047065 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiechao06/Flask-DataBrowser -https://github.com/xiechao06/Flask-DataBrowser -Entry file: Flask-DataBrowser/flask_databrowser/test/basetest.py -Scanned: 2016-10-20 08:45:14.563417 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-20 08:45:16.032041 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Masagin/FlaskCelery -https://github.com/Masagin/FlaskCelery -Entry file: FlaskCelery/flask.py -Scanned: 2016-10-20 08:45:16.523810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-20 08:45:29.452653 -No vulnerabilities found. - - -EvilDmitri/flask-mikroblog -https://github.com/EvilDmitri/flask-mikroblog -Entry file: flask-mikroblog/app/__init__.py -Scanned: 2016-10-20 08:45:31.158848 -No vulnerabilities found. - - -maxcnunes/flask_bravi -https://github.com/maxcnunes/flask_bravi -Entry file: flask_bravi/braviapp/__init__.py -Scanned: 2016-10-20 08:45:32.654585 -No vulnerabilities found. - - -zhemao/flask_demo -https://github.com/zhemao/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 08:45:38.667858 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SalemHarrache-Archive/flask_chat_eventsource -https://github.com/SalemHarrache-Archive/flask_chat_eventsource -Entry file: flask_chat_eventsource/server.py -Scanned: 2016-10-20 08:45:40.176919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-20 08:45:43.792239 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-20 08:45:44.312857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -texuf/myflaskproject -https://github.com/texuf/myflaskproject -Entry file: myflaskproject/hello.py -Scanned: 2016-10-20 08:45:45.557042 -No vulnerabilities found. - - -csesoc/bark-core -https://github.com/csesoc/bark-core -Entry file: bark-core/bark/__init__.py -Scanned: 2016-10-20 08:45:48.562772 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -croach/cheap-and-scalable-webistes-with-flask-code -https://github.com/croach/cheap-and-scalable-webistes-with-flask-code -Entry file: cheap-and-scalable-webistes-with-flask-code/generator.py -Scanned: 2016-10-20 08:45:52.987577 -No vulnerabilities found. - - -nesv/cask -https://github.com/nesv/cask -Entry file: None -Scanned: 2016-10-20 08:45:53.490281 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nesv/cask. - -lee212/fg-ws -https://github.com/lee212/fg-ws -Entry file: fg-ws/fgws/ws/FGWSApps.py -Scanned: 2016-10-20 08:45:53.991681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brunsgaard/qwablog -https://github.com/brunsgaard/qwablog -Entry file: qwablog/qwablog.py -Scanned: 2016-10-20 08:46:00.382068 -No vulnerabilities found. - - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-20 08:46:02.775127 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -rubinovitz/fourequality -https://github.com/rubinovitz/fourequality -Entry file: fourequality/app.py -Scanned: 2016-10-20 08:46:06.275026 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darylchang/Hacker-Viz -https://github.com/darylchang/Hacker-Viz -Entry file: Hacker-Viz/flaskDir.py -Scanned: 2016-10-20 08:46:06.776841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexlod/movielist -https://github.com/alexlod/movielist -Entry file: movielist/movielist.py -Scanned: 2016-10-20 08:46:08.288717 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhumbert/literable -https://github.com/dhumbert/literable -Entry file: None -Scanned: 2016-10-20 08:46:08.792966 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dhumbert/literable. - -ArcTanSusan/Task_List -https://github.com/ArcTanSusan/Task_List -Entry file: Task_List/tipsy/tipsy.py -Scanned: 2016-10-20 08:46:11.311379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbuysse/url_shortener -https://github.com/rbuysse/url_shortener -Entry file: url_shortener/url.py -Scanned: 2016-10-20 08:46:14.818411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mjhea0/flask-intro -https://github.com/mjhea0/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 08:46:16.025217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seanrose/box-arcade -https://github.com/seanrose/box-arcade -Entry file: box-arcade/app/__init__.py -Scanned: 2016-10-20 08:46:17.019268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-20 08:46:18.340439 -No vulnerabilities found. - - -mphuie/flask_base -https://github.com/mphuie/flask_base -Entry file: flask_base/myapp/__init__.py -Scanned: 2016-10-20 08:46:21.291568 -No vulnerabilities found. - - -theho/flask-wsgi -https://github.com/theho/flask-wsgi -Entry file: flask-wsgi/wsgi.py -Scanned: 2016-10-20 08:46:31.319172 -No vulnerabilities found. - - -adityaathalye/flaskr -https://github.com/adityaathalye/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:46:31.856619 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knowshan/flaskey -https://github.com/knowshan/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-20 08:46:33.391809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-20 08:46:38.904887 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -denz/flask_introspect -https://github.com/denz/flask_introspect -Entry file: flask_introspect/test/test_blueprint.py -Scanned: 2016-10-20 08:46:41.308778 -No vulnerabilities found. - - -ekfriis/flask-mbtiles -https://github.com/ekfriis/flask-mbtiles -Entry file: flask-mbtiles/mbtileserver.py -Scanned: 2016-10-20 08:46:43.571932 -No vulnerabilities found. - - -hyaticua/flask-blog -https://github.com/hyaticua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 08:46:45.131515 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -thearchduke/flask-boiler -https://github.com/thearchduke/flask-boiler -Entry file: None -Scanned: 2016-10-20 08:46:45.651951 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -StefanKjartansson/bower-flask -https://github.com/StefanKjartansson/bower-flask -Entry file: bower-flask/server.py -Scanned: 2016-10-20 08:46:48.952042 -No vulnerabilities found. - - -tanayseven/Voix -https://github.com/tanayseven/Voix -Entry file: None -Scanned: 2016-10-20 08:46:49.477207 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gatesphere/flaskr-flask-tutorial -https://github.com/gatesphere/flaskr-flask-tutorial -Entry file: flaskr-flask-tutorial/flaskr/flaskr.py -Scanned: 2016-10-20 08:46:53.748084 -No vulnerabilities found. - - -bazerk/baz-flask-base -https://github.com/bazerk/baz-flask-base -Entry file: baz-flask-base/app/app.py -Scanned: 2016-10-20 08:46:55.636538 -Vulnerability 1: -File: baz-flask-base/app/frontend/views.py - > User input at line 26, trigger word "get(": - form = RegisterForm(username=request.args.get('username', twitter_name), password=request.args.get('password', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 30: err = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 30: user = User.create(form.username.data, form.email.data, bcrypt.generate_password_hash(form.password.data),twitter_deets=twitter_deets) - File: baz-flask-base/app/frontend/views.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('frontend.login')) -File: baz-flask-base/app/frontend/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/register.html',form=form, twitter_name=twitter_name) - -Vulnerability 2: -File: baz-flask-base/app/frontend/views.py - > User input at line 48, trigger word "get(": - form = LoginForm(login=request.args.get('login', None), next=request.args.get('next', None)) -Reassigned in: - File: baz-flask-base/app/frontend/views.py - > Line 52: user = User.authenticate(form.login.data, form.password.data, bcrypt.check_password_hash) - File: baz-flask-base/app/frontend/views.py - > Line 57: session['user_id'] = user.id - File: baz-flask-base/app/frontend/views.py - > Line 61: ret_MAYBE_FUNCTION_NAME = redirect('') -File: baz-flask-base/app/frontend/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('frontend/login.html',form=form) - - - -ryanolson/flask-couchdb-schematics -https://github.com/ryanolson/flask-couchdb-schematics -Entry file: flask-couchdb-schematics/example/guestbook.py -Scanned: 2016-10-20 08:46:57.177170 -Vulnerability 1: -File: flask-couchdb-schematics/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-schematics/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -pouyan-ghasemi/flask-sql-cms -https://github.com/pouyan-ghasemi/flask-sql-cms -Entry file: flask-sql-cms/app.py -Scanned: 2016-10-20 08:46:59.693036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Andrey-Khobnya/flask-sessions-mongo -https://github.com/Andrey-Khobnya/flask-sessions-mongo -Entry file: flask-sessions-mongo/flask-sessions-mongo/examples/loginsession.py -Scanned: 2016-10-20 08:47:03.056073 -No vulnerabilities found. - - -igrishaev/youtube-python-api-sample -https://github.com/igrishaev/youtube-python-api-sample -Entry file: youtube-python-api-sample/app.py -Scanned: 2016-10-20 08:47:05.096357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nutrislice/mandrill-webhook-redirector -https://github.com/nutrislice/mandrill-webhook-redirector -Entry file: mandrill-webhook-redirector/webhook-router.py -Scanned: 2016-10-20 08:47:07.373261 -Vulnerability 1: -File: mandrill-webhook-redirector/webhook-router.py - > User input at line 13, trigger word "form[": - mandrill_event = json.loads(request.form['mandrill_events']) -Reassigned in: - File: mandrill-webhook-redirector/webhook-router.py - > Line 14: metadata = mandrill_event[0]['msg']['metadata'] - File: mandrill-webhook-redirector/webhook-router.py - > Line 15: domain = metadata['domain'] -File: mandrill-webhook-redirector/webhook-router.py - > reaches line 16, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(domain.rstrip('/') + '/menu/autounsub/') - - - -kfr2/pynances -https://github.com/kfr2/pynances -Entry file: pynances/pynances/pynances.py -Scanned: 2016-10-20 08:47:08.776599 -No vulnerabilities found. - - -WilliamMayor/geoffrey -https://github.com/WilliamMayor/geoffrey -Entry file: geoffrey/geoffrey.py -Scanned: 2016-10-20 08:47:10.046483 -No vulnerabilities found. - - -Timothee/Passerelle -https://github.com/Timothee/Passerelle -Entry file: Passerelle/passerelle.py -Scanned: 2016-10-20 08:47:11.419110 -No vulnerabilities found. - - -fusic-com/flask-todo -https://github.com/fusic-com/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-20 08:47:15.756147 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bkabrda/flask-whooshee -https://github.com/bkabrda/flask-whooshee -Entry file: flask-whooshee/test.py -Scanned: 2016-10-20 08:47:17.463765 -No vulnerabilities found. - - -DavidWittman/csrgenerator.com -https://github.com/DavidWittman/csrgenerator.com -Entry file: None -Scanned: 2016-10-20 08:47:18.455989 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -techniq/flask-wdb -https://github.com/techniq/flask-wdb -Entry file: flask-wdb/example.py -Scanned: 2016-10-20 08:47:19.722180 -No vulnerabilities found. - - -1000ch/flask-handson -https://github.com/1000ch/flask-handson -Entry file: flask-handson/flaskr/__init__.py -Scanned: 2016-10-20 08:47:20.239632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajuna/car-registration -https://github.com/ajuna/car-registration -Entry file: None -Scanned: 2016-10-20 08:47:20.738370 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ajuna/car-registration. - -jishnujagajeeve/Flaskr -https://github.com/jishnujagajeeve/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 08:47:29.280696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Basher51/Flaskr -https://github.com/Basher51/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 08:47:30.791935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyr/flaskapp -https://github.com/andyr/flaskapp -Entry file: None -Scanned: 2016-10-20 08:47:32.298682 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/andyr/flaskapp. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-20 08:47:33.828298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaste/FlaskDeferredHandler -https://github.com/kaste/FlaskDeferredHandler -Entry file: FlaskDeferredHandler/flask_handler_test.py -Scanned: 2016-10-20 08:47:40.122682 -No vulnerabilities found. - - -adityaathalye/flaskr2 -https://github.com/adityaathalye/flaskr2 -Entry file: flaskr2/app.py -Scanned: 2016-10-20 08:47:41.372411 -No vulnerabilities found. - - -ConceptPending/flaskTemplate -https://github.com/ConceptPending/flaskTemplate -Entry file: flaskTemplate/server.py -Scanned: 2016-10-20 08:47:46.636042 -No vulnerabilities found. - - -AlexMost/Flask-starter -https://github.com/AlexMost/Flask-starter -Entry file: Flask-starter/app.py -Scanned: 2016-10-20 08:47:47.930948 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-20 08:47:48.440913 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jonomillin/learning-flask -https://github.com/jonomillin/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 08:47:48.999270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-20 08:47:50.374245 -No vulnerabilities found. - - -nthfloor/Flask_learn -https://github.com/nthfloor/Flask_learn -Entry file: Flask_learn/login_system/flskr.py -Scanned: 2016-10-20 08:48:00.491753 -Vulnerability 1: -File: Flask_learn/login_system/flskr.py - > User input at line 116, trigger word "get(": - username = request.form.get('username') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - -Vulnerability 2: -File: Flask_learn/login_system/flskr.py - > User input at line 117, trigger word "get(": - password = request.form.get('password') -File: Flask_learn/login_system/flskr.py - > reaches line 119, trigger word "filter(": - user = User.query.filter(User.name == username and User.password == password).first() - - - -mmcgahan/flask-labs-bb -https://github.com/mmcgahan/flask-labs-bb -Entry file: flask-labs-bb/flask_labs/__init__.py -Scanned: 2016-10-20 08:48:04.971032 -Vulnerability 1: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 2: -File: flask-labs-bb/flask_labs/views.py - > User input at line 29, trigger word ".data": - user = db.session.query(User).filter(User.username == login_form.username.data).first() -File: flask-labs-bb/flask_labs/views.py - > reaches line 29, trigger word "filter(": - user = db.session.query(User).filter(User.username == login_form.username.data).first() - -Vulnerability 3: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 4: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(login_form.next.data or url_for('index')) - -Vulnerability 5: -File: flask-labs-bb/flask_labs/views.py - > User input at line 27, trigger word "get(": - login_form = LoginForm(request.form,next=request.args.get('next')) -Reassigned in: - File: flask-labs-bb/flask_labs/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(request.referrer) -File: flask-labs-bb/flask_labs/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',login_form=login_form) - - - -daisuzu/flask-app-sample -https://github.com/daisuzu/flask-app-sample -Entry file: flask-app-sample/db.py -Scanned: 2016-10-20 08:48:06.301189 -No vulnerabilities found. - - -penpyt/flask-couchdb-auth -https://github.com/penpyt/flask-couchdb-auth -Entry file: flask-couchdb-auth/example/guestbook.py -Scanned: 2016-10-20 08:48:07.785898 -Vulnerability 1: -File: flask-couchdb-auth/example/guestbook.py - > User input at line 53, trigger word "get(": - page = paginate(Signature.all(), 5, request.args.get('start')) -File: flask-couchdb-auth/example/guestbook.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('display.html',page=page) - - - -rodreegez/flask-twitter-auth -https://github.com/rodreegez/flask-twitter-auth -Entry file: None -Scanned: 2016-10-20 08:48:08.305451 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rodreegez/flask-twitter-auth. - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:48:08.843770 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ariamoraine/kitten-generator -https://github.com/ariamoraine/kitten-generator -Entry file: kitten-generator/flaskhello.py -Scanned: 2016-10-20 08:48:10.605778 -No vulnerabilities found. - - -honestappalachia/honest_site -https://github.com/honestappalachia/honest_site -Entry file: honest_site/run.py -Scanned: 2016-10-20 08:48:11.967503 -Vulnerability 1: -File: honest_site/run.py - > User input at line 36, trigger word "get(": - template = page.meta.get('template', 'default.html') -File: honest_site/run.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -daikeshi/one-dollar-metasearch-engine -https://github.com/daikeshi/one-dollar-metasearch-engine -Entry file: one-dollar-metasearch-engine/app/__init__.py -Scanned: 2016-10-20 08:48:12.468636 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msalahi/art-party -https://github.com/msalahi/art-party -Entry file: art-party/app.py -Scanned: 2016-10-20 08:48:18.817291 -No vulnerabilities found. - - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-20 08:48:19.332967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saltire/artpubpy -https://github.com/saltire/artpubpy -Entry file: artpubpy/artpubpy.py -Scanned: 2016-10-20 08:48:19.838529 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcniac/simple-blog -https://github.com/mcniac/simple-blog -Entry file: simple-blog/tumblelog/__init__.py -Scanned: 2016-10-20 08:48:25.837053 -No vulnerabilities found. - - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-20 08:48:27.135968 -No vulnerabilities found. - - -fusic-com/flask-webcache -https://github.com/fusic-com/flask-webcache -Entry file: flask-webcache/contrib/sleepycalc/app.py -Scanned: 2016-10-20 08:48:29.483504 -No vulnerabilities found. - - -rehandalal/flask-mobility -https://github.com/rehandalal/flask-mobility -Entry file: flask-mobility/flask_mobility/tests/test_decorators.py -Scanned: 2016-10-20 08:48:31.694444 -Vulnerability 1: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 48, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 2: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 46, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 51, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 3: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 69, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 4: -File: flask-mobility/flask_mobility/tests/test_decorators.py - > User input at line 67, trigger word "get(": - MOBILE_COOKIE = self.app.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_decorators.py - > reaches line 72, trigger word "set_cookie(": - self.client.set_cookie('localhost', MOBILE_COOKIE, 'off') - -Vulnerability 5: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 36, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'on') - -Vulnerability 6: -File: flask-mobility/flask_mobility/tests/test_mobility.py - > User input at line 33, trigger word "get(": - MOBILE_COOKIE = self.config.get('MOBILE_COOKIE') -File: flask-mobility/flask_mobility/tests/test_mobility.py - > reaches line 40, trigger word "set_cookie(": - self.app.set_cookie('localhost', MOBILE_COOKIE, 'off') - - - -kelp404/Flask-GAE -https://github.com/kelp404/Flask-GAE -Entry file: None -Scanned: 2016-10-20 08:48:32.199729 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jaysonsantos/jinja-assets-compressor -https://github.com/jaysonsantos/jinja-assets-compressor -Entry file: jinja-assets-compressor/jac/contrib/flask.py -Scanned: 2016-10-20 08:48:34.037894 -No vulnerabilities found. - - -nabetama/flaskr -https://github.com/nabetama/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:48:40.043998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagnew/Prank-Roulette -https://github.com/sagnew/Prank-Roulette -Entry file: Prank-Roulette/app.py -Scanned: 2016-10-20 08:48:41.550959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-20 08:48:47.745519 -No vulnerabilities found. - - -samgclarke/flask-microblog -https://github.com/samgclarke/flask-microblog -Entry file: None -Scanned: 2016-10-20 08:48:48.732799 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shunyata/flask-helloworld -https://github.com/shunyata/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-20 08:48:50.006192 -No vulnerabilities found. - - -stephen-allison/basic-flask -https://github.com/stephen-allison/basic-flask -Entry file: None -Scanned: 2016-10-20 08:48:50.513513 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stephen-allison/basic-flask. - -bollwyvl/flask-reloaded -https://github.com/bollwyvl/flask-reloaded -Entry file: None -Scanned: 2016-10-20 08:48:54.017752 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bollwyvl/flask-reloaded. - -kitanata/flask-demo -https://github.com/kitanata/flask-demo -Entry file: None -Scanned: 2016-10-20 08:49:01.544824 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kitanata/flask-demo. - -berlotto/hero-flask -https://github.com/berlotto/hero-flask -Entry file: hero-flask/hero/__init__.py -Scanned: 2016-10-20 08:49:06.912299 -No vulnerabilities found. - - -flyingsparx/MongoFlask -https://github.com/flyingsparx/MongoFlask -Entry file: MongoFlask/application.py -Scanned: 2016-10-20 08:49:08.209674 -Vulnerability 1: -File: MongoFlask/application.py - > User input at line 39, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -File: MongoFlask/application.py - > reaches line 39, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - -Vulnerability 2: -File: MongoFlask/application.py - > User input at line 64, trigger word "form[": - person = User.query.filter(User.name == request.form['username']).first() -Reassigned in: - File: MongoFlask/application.py - > Line 67: session['id'] = person.id -File: MongoFlask/application.py - > reaches line 64, trigger word "filter(": - person = User.query.filter(User.name == request.form['username']).first() - - - -DanAlbert/flask-guestbook -https://github.com/DanAlbert/flask-guestbook -Entry file: flask-guestbook/guestbook.py -Scanned: 2016-10-20 08:49:09.492858 -No vulnerabilities found. - - -kirkeby/empty-flask -https://github.com/kirkeby/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-20 08:49:10.497664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rehandalal/buchner -https://github.com/rehandalal/buchner -Entry file: buchner/buchner/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-20 08:49:14.127244 -No vulnerabilities found. - - -vitalk/flask-staticutils -https://github.com/vitalk/flask-staticutils -Entry file: flask-staticutils/tests/test_app/__init__.py -Scanned: 2016-10-20 08:49:15.508610 -No vulnerabilities found. - - -chiwong/flask_quickstart -https://github.com/chiwong/flask_quickstart -Entry file: flask_quickstart/hello.py -Scanned: 2016-10-20 08:49:16.115118 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_quickstart/venv_hello/lib/python2.6/genericpath.py - -archieyang/flask_app -https://github.com/archieyang/flask_app -Entry file: None -Scanned: 2016-10-20 08:49:16.618051 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/archieyang/flask_app. - -ipfans/openshift-flask-template -https://github.com/ipfans/openshift-flask-template -Entry file: openshift-flask-template/wsgi/mainapp.py -Scanned: 2016-10-20 08:49:17.981618 -No vulnerabilities found. - - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-20 08:49:20.263237 -No vulnerabilities found. - - -DamnedFacts/flask-hello-world -https://github.com/DamnedFacts/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:49:20.810466 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -philangist/url-shorten -https://github.com/philangist/url-shorten -Entry file: url-shorten/shorten.py -Scanned: 2016-10-20 08:49:21.314895 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabionatali/DigiWebStats -https://github.com/fabionatali/DigiWebStats -Entry file: DigiWebStats/app.py -Scanned: 2016-10-20 08:49:22.928634 -Vulnerability 1: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 2: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 47, trigger word "execute(": - data = engine.execute(query).fetchall() - -Vulnerability 3: -File: DigiWebStats/app.py - > User input at line 31, trigger word "get(": - start_date = request.args.get('start_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 41: start_date = datetime.strptime(start_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - -Vulnerability 4: -File: DigiWebStats/app.py - > User input at line 32, trigger word "get(": - end_date = request.args.get('end_date', None) -Reassigned in: - File: DigiWebStats/app.py - > Line 42: end_date = datetime.strptime(end_date, DATE_FORMAT).date() - File: DigiWebStats/app.py - > Line 46: query = settings.DB_QUERY % (start_date, end_date) - File: DigiWebStats/app.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: DigiWebStats/app.py - > Line 37: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index',start_date=today, end_date=today)) -File: DigiWebStats/app.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',start_date=start_date, end_date=end_date, data=data) - - - -confessin/addressbook -https://github.com/confessin/addressbook -Entry file: addressbook/addressbook.py -Scanned: 2016-10-20 08:49:27.301515 -No vulnerabilities found. - - -nafur/flmpc -https://github.com/nafur/flmpc -Entry file: flmpc/main.py -Scanned: 2016-10-20 08:49:28.716368 -No vulnerabilities found. - - -honestappalachia/honest_hiddenservice -https://github.com/honestappalachia/honest_hiddenservice -Entry file: honest_hiddenservice/run.py -Scanned: 2016-10-20 08:49:29.238538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kvalle/greetr -https://github.com/kvalle/greetr -Entry file: greetr/greetr/__init__.py -Scanned: 2016-10-20 08:49:31.916979 -No vulnerabilities found. - - -mjhea0/brew -https://github.com/mjhea0/brew -Entry file: brew/app.py -Scanned: 2016-10-20 08:49:36.960780 -No vulnerabilities found. - - -dan-v/crossfitboxreview -https://github.com/dan-v/crossfitboxreview -Entry file: crossfitboxreview/seed_affiliates.py -Scanned: 2016-10-20 08:49:37.640637 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoctorMalboro/leandropoblet.com -https://github.com/DoctorMalboro/leandropoblet.com -Entry file: None -Scanned: 2016-10-20 08:49:38.140652 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ryanrdetzel/blimp-commit -https://github.com/ryanrdetzel/blimp-commit -Entry file: blimp-commit/blimp_commit.py -Scanned: 2016-10-20 08:49:41.409666 -No vulnerabilities found. - - -danielholmstrom/flask-alchemyview -https://github.com/danielholmstrom/flask-alchemyview -Entry file: flask-alchemyview/tests/test_with_flask_sqlalchemy.py -Scanned: 2016-10-20 08:49:50.421483 -Vulnerability 1: -File: flask-alchemyview/tests/test_view.py - > User input at line 150, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 150, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id=model_id)) - -Vulnerability 2: -File: flask-alchemyview/tests/test_view.py - > User input at line 154, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 154, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 3: -File: flask-alchemyview/tests/test_view.py - > User input at line 181, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 174: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 177: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 178, trigger word "url_for(": - response = self.json_put(url_for('SimpleModelView:put',id=model_id), 'name''new name') - -Vulnerability 4: -File: flask-alchemyview/tests/test_view.py - > User input at line 197, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 197, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:delete',id=model_id)) - -Vulnerability 5: -File: flask-alchemyview/tests/test_view.py - > User input at line 209, trigger word "get(": - m = self.session.query(SimpleModel).get(model_id) -Reassigned in: - File: flask-alchemyview/tests/test_view.py - > Line 202: m = SimpleModel('name') - File: flask-alchemyview/tests/test_view.py - > Line 205: model_id = m.id -File: flask-alchemyview/tests/test_view.py - > reaches line 206, trigger word "url_for(": - response = self.json_delete(url_for('SimpleModelView:put',id=model_id)) - -Vulnerability 6: -File: flask-alchemyview/tests/test_view.py - > User input at line 236, trigger word "get(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) -File: flask-alchemyview/tests/test_view.py - > reaches line 236, trigger word "url_for(": - response = self.json_get(url_for('SimpleModelView:index',sortby='id', offset=10)) - -Vulnerability 7: -File: flask-alchemyview/tests/test_view.py - > User input at line 246, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 246, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 8: -File: flask-alchemyview/tests/test_view.py - > User input at line 251, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) -File: flask-alchemyview/tests/test_view.py - > reaches line 251, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id='a string')) - -Vulnerability 9: -File: flask-alchemyview/tests/test_view.py - > User input at line 258, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) -File: flask-alchemyview/tests/test_view.py - > reaches line 258, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index',sortby='id', offset='invalid')) - -Vulnerability 10: -File: flask-alchemyview/tests/test_view.py - > User input at line 266, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:index')) -File: flask-alchemyview/tests/test_view.py - > reaches line 266, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:index')) - -Vulnerability 11: -File: flask-alchemyview/tests/test_view.py - > User input at line 279, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) -File: flask-alchemyview/tests/test_view.py - > reaches line 279, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=m.id)) - -Vulnerability 12: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 13: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - -Vulnerability 14: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 56, trigger word "url_for(": - response = self.client.post(url_for('SimpleModelView:post'),content_type='application/json', headers=[('Accept', 'application/json')], data=json.dumps('name''a name'), follow_redirects=False) - -Vulnerability 15: -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > User input at line 67, trigger word "get(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') -File: flask-alchemyview/tests/test_with_flask_sqlalchemy_session.py - > reaches line 67, trigger word "url_for(": - response = self.client.get(url_for('SimpleModelView:get',id=model_id),headers=[('Accept', 'application/json')], content_type='application/json') - - - -vovantics/flask-bluebone -https://github.com/vovantics/flask-bluebone -Entry file: flask-bluebone/app/app.py -Scanned: 2016-10-20 08:49:50.976247 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jpscaletti/authcode -https://github.com/jpscaletti/authcode -Entry file: authcode/examples/default/app.py -Scanned: 2016-10-20 08:49:56.675841 -No vulnerabilities found. - - -abulte/flask-arduino-websocket-sqlite -https://github.com/abulte/flask-arduino-websocket-sqlite -Entry file: flask-arduino-websocket-sqlite/app.py -Scanned: 2016-10-20 08:49:58.069765 -No vulnerabilities found. - - -futuregrid/flask_cm -https://github.com/futuregrid/flask_cm -Entry file: flask_cm/examples/forms/app.py -Scanned: 2016-10-20 08:50:09.835073 -Vulnerability 1: -File: flask_cm/examples/forms/app.py - > User input at line 24, trigger word "get(": - comments = session.get('comments', []) -File: flask_cm/examples/forms/app.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',comments=comments, form=form) - - - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-20 08:50:12.128815 -No vulnerabilities found. - - -mozillazg/flask-demo -https://github.com/mozillazg/flask-demo -Entry file: None -Scanned: 2016-10-20 08:50:12.631626 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mozillazg/flask-demo. - -toastercup/flask-social -https://github.com/toastercup/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-20 08:50:13.127639 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-20 08:50:16.387546 -No vulnerabilities found. - - -danillosouza/flask-boilerplate -https://github.com/danillosouza/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 08:50:16.885384 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danillosouza/flask-boilerplate. - -dogrdon/flask-map -https://github.com/dogrdon/flask-map -Entry file: None -Scanned: 2016-10-20 08:50:17.409474 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sapid/Flask-Community -https://github.com/sapid/Flask-Community -Entry file: None -Scanned: 2016-10-20 08:50:17.918542 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sapid/Flask-Community. - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-20 08:50:20.905155 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minhtuev/flask-google-map-example -https://github.com/minhtuev/flask-google-map-example -Entry file: flask-google-map-example/server.py -Scanned: 2016-10-20 08:50:22.209332 -No vulnerabilities found. - - -garbados/flask-the-gauntlet -https://github.com/garbados/flask-the-gauntlet -Entry file: flask-the-gauntlet/app.py -Scanned: 2016-10-20 08:50:28.007021 -No vulnerabilities found. - - -NoxDineen/microblog -https://github.com/NoxDineen/microblog -Entry file: None -Scanned: 2016-10-20 08:50:28.506145 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kaibin/Condom_Data_Server -https://github.com/Kaibin/Condom_Data_Server -Entry file: Condom_Data_Server/app.py -Scanned: 2016-10-20 08:50:30.033560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nathanrosspowell/frozenboots -https://github.com/nathanrosspowell/frozenboots -Entry file: None -Scanned: 2016-10-20 08:50:33.032355 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nathanrosspowell/frozenboots. - -craneon/debutante -https://github.com/craneon/debutante -Entry file: debutante/app.py -Scanned: 2016-10-20 08:50:38.563463 -Vulnerability 1: -File: debutante/app.py - > User input at line 14, trigger word "form[": - name1 = request.form['name1'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - -Vulnerability 2: -File: debutante/app.py - > User input at line 15, trigger word "form[": - name2 = request.form['name2'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - -Vulnerability 3: -File: debutante/app.py - > User input at line 16, trigger word "form[": - age = request.form['age'] -File: debutante/app.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('submit.html',name1=name1, name2=name2, bio=biogenerate(name1, name2, age)) - - - -kljensen/async-flask-sqlalchemy-example -https://github.com/kljensen/async-flask-sqlalchemy-example -Entry file: async-flask-sqlalchemy-example/server.py -Scanned: 2016-10-20 08:50:40.754991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kommmy/Flask -https://github.com/kommmy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 08:50:42.273357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rbika/flaskm -https://github.com/rbika/flaskm -Entry file: flaskm/flaskm.py -Scanned: 2016-10-20 08:50:52.738317 -No vulnerabilities found. - - -catfive/flaskr -https://github.com/catfive/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:50:53.248788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikedll/flasksqlitedemo -https://github.com/mikedll/flasksqlitedemo -Entry file: flasksqlitedemo/app.py -Scanned: 2016-10-20 08:50:53.762549 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GerardoGR/flask-boilerplate -https://github.com/GerardoGR/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 08:50:57.278466 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/GerardoGR/flask-boilerplate. - -edouardswiac/linkstash-flask -https://github.com/edouardswiac/linkstash-flask -Entry file: linkstash-flask/app.py -Scanned: 2016-10-20 08:51:01.789354 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mies/flask-heroku -https://github.com/mies/flask-heroku -Entry file: flask-heroku/main.py -Scanned: 2016-10-20 08:51:07.098615 -No vulnerabilities found. - - -mattolsen1/flask_tumblelog -https://github.com/mattolsen1/flask_tumblelog -Entry file: flask_tumblelog/tumblelog/__init__.py -Scanned: 2016-10-20 08:51:11.582373 -No vulnerabilities found. - - -hoest/flask-bardienst -https://github.com/hoest/flask-bardienst -Entry file: flask-bardienst/bardienst/__init__.py -Scanned: 2016-10-20 08:51:12.845235 -No vulnerabilities found. - - -eudaimonious/HangmanWebsite -https://github.com/eudaimonious/HangmanWebsite -Entry file: HangmanWebsite/application_hangman.py -Scanned: 2016-10-20 08:51:13.991638 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bracken1983/flaskBlogDemo -https://github.com/bracken1983/flaskBlogDemo -Entry file: flaskBlogDemo/flask-sqlalchemy-test.py -Scanned: 2016-10-20 08:51:14.602329 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaseemkp/flask-students-app -https://github.com/jaseemkp/flask-students-app -Entry file: flask-students-app/students.py -Scanned: 2016-10-20 08:51:16.101517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pinchsoft/flask-newrelic-dotcloud -https://github.com/pinchsoft/flask-newrelic-dotcloud -Entry file: flask-newrelic-dotcloud/app.py -Scanned: 2016-10-20 08:51:18.365101 -No vulnerabilities found. - - -PurplePilot/zanzeeba -https://github.com/PurplePilot/zanzeeba -Entry file: zanzeeba/appstd.py -Scanned: 2016-10-20 08:51:18.959152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hit9/flask-sign-in-with-github.py -https://github.com/hit9/flask-sign-in-with-github.py -Entry file: None -Scanned: 2016-10-20 08:51:19.460709 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bscarlett/personal-site -https://github.com/bscarlett/personal-site -Entry file: personal-site/PersonalSite/__init__.py -Scanned: 2016-10-20 08:51:22.721865 -No vulnerabilities found. - - -cypx/trocr -https://github.com/cypx/trocr -Entry file: trocr/trocr.py -Scanned: 2016-10-20 08:51:23.731086 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ungarst/p4p_svr -https://github.com/ungarst/p4p_svr -Entry file: p4p_svr/server/__init__.py -Scanned: 2016-10-20 08:51:27.258907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -koordinates/py-pubtkt -https://github.com/koordinates/py-pubtkt -Entry file: py-pubtkt/app.py -Scanned: 2016-10-20 08:51:28.751464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-20 08:51:33.392285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wbolster/flask-uuid -https://github.com/wbolster/flask-uuid -Entry file: flask-uuid/test_flask_uuid.py -Scanned: 2016-10-20 08:51:38.816627 -No vulnerabilities found. - - -pyr/url-shortener -https://github.com/pyr/url-shortener -Entry file: url-shortener/url_shortener.py -Scanned: 2016-10-20 08:51:39.340815 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmi356/filemanager -https://github.com/vmi356/filemanager -Entry file: filemanager/manager.py -Scanned: 2016-10-20 08:51:40.882414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-20 08:51:50.375362 -No vulnerabilities found. - - -cratejoy/flask-experiment -https://github.com/cratejoy/flask-experiment -Entry file: flask-experiment/test/test.py -Scanned: 2016-10-20 08:51:51.887404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -openfree/flaskr -https://github.com/openfree/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:51:53.391917 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulthrissur/Flask_app -https://github.com/rahulthrissur/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-20 08:51:57.394468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcerise/flask-photos -https://github.com/jcerise/flask-photos -Entry file: flask-photos/app.py -Scanned: 2016-10-20 08:52:02.696926 -No vulnerabilities found. - - -grimkeke/miniblog -https://github.com/grimkeke/miniblog -Entry file: miniblog/app/__init__.py -Scanned: 2016-10-20 08:52:12.499359 -No vulnerabilities found. - - -rasheedh/Paint-Using-Flask---Mongodb- -https://github.com/rasheedh/Paint-Using-Flask---Mongodb- -Entry file: None -Scanned: 2016-10-20 08:52:13.515585 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rasheedh/Paint-Using-Flask---Mongodb-. - -Pitxon/sivir -https://github.com/Pitxon/sivir -Entry file: sivir/app.py -Scanned: 2016-10-20 08:52:14.760628 -No vulnerabilities found. - - -sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB -https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB -Entry file: None -Scanned: 2016-10-20 08:52:15.274761 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sreekanthkaralmanna/heroku-paint-app-using-flask-and-mongoDB. - -ssidorenko/twisker -https://github.com/ssidorenko/twisker -Entry file: twisker/flask/sessions.py -Scanned: 2016-10-20 08:52:16.822052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gabriele91/rss-soap-server -https://github.com/Gabriele91/rss-soap-server -Entry file: rss-soap-server/app.py -Scanned: 2016-10-20 08:52:24.669525 -No vulnerabilities found. - - -einashaddad/follow_app -https://github.com/einashaddad/follow_app -Entry file: follow_app/web_button.py -Scanned: 2016-10-20 08:52:25.185931 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cypx/trocr -https://github.com/cypx/trocr -Entry file: trocr/trocr.py -Scanned: 2016-10-20 08:52:25.679682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haizaar/microtweet -https://github.com/haizaar/microtweet -Entry file: microtweet/server.py -Scanned: 2016-10-20 08:52:26.198686 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jawr/flask-contact -https://github.com/jawr/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-20 08:52:27.524275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulkmr/flask-bigapp-template -https://github.com/rahulkmr/flask-bigapp-template -Entry file: flask-bigapp-template/main.py -Scanned: 2016-10-20 08:52:28.053345 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/flask-tlsauth -https://github.com/stef/flask-tlsauth -Entry file: flask-tlsauth/demo/webapp.py -Scanned: 2016-10-20 08:52:29.385416 -No vulnerabilities found. - - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-20 08:52:29.983517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stef/tlsauth -https://github.com/stef/tlsauth -Entry file: tlsauth/flask-demo/webapp.py -Scanned: 2016-10-20 08:52:32.960884 -No vulnerabilities found. - - -topherjaynes/flasktut -https://github.com/topherjaynes/flasktut -Entry file: flasktut/app/__init__.py -Scanned: 2016-10-20 08:52:35.081531 -No vulnerabilities found. - - -elboby/flask-config-override -https://github.com/elboby/flask-config-override -Entry file: flask-config-override/tests/basic_flask_test.py -Scanned: 2016-10-20 08:52:38.595072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sherzberg/flask-native-package -https://github.com/sherzberg/flask-native-package -Entry file: flask-native-package/application.py -Scanned: 2016-10-20 08:52:40.912949 -No vulnerabilities found. - - -McrCoderDojo/Flask-Webapps -https://github.com/McrCoderDojo/Flask-Webapps -Entry file: Flask-Webapps/flask1.py -Scanned: 2016-10-20 08:52:42.217861 -No vulnerabilities found. - - -xrefor/flask_tut -https://github.com/xrefor/flask_tut -Entry file: flask_tut/flaskr.py -Scanned: 2016-10-20 08:52:43.493034 -No vulnerabilities found. - - -xrefor/flask_stuff -https://github.com/xrefor/flask_stuff -Entry file: flask_stuff/main.py -Scanned: 2016-10-20 08:52:44.771262 -No vulnerabilities found. - - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-20 08:52:50.294725 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adesst/flask-blog -https://github.com/adesst/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 08:52:52.840742 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -gourneau/anode -https://github.com/gourneau/anode -Entry file: anode/app.py -Scanned: 2016-10-20 08:52:58.335735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmahnken/Flask_to_do_list -https://github.com/mmahnken/Flask_to_do_list -Entry file: Flask_to_do_list/tipsy.py -Scanned: 2016-10-20 08:53:02.860857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask -Entry file: Paintapp-Javascript-Canvas-Flask/test.py -Scanned: 2016-10-20 08:53:08.161732 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 19, trigger word "execute(": - cur.execute('SELECT * FROM Image WHERE imgname=?', imgname) - -Vulnerability 2: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - -Vulnerability 3: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 34, trigger word "form[": - imgname = request.form['imagename'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 16: imgname = (imagename) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 23: imgname = row[0] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - -Vulnerability 4: -File: Paintapp-Javascript-Canvas-Flask/test.py - > User input at line 35, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 24: imgdata = row[1] - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 28: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 37: data = (imgname, imgdata) - File: Paintapp-Javascript-Canvas-Flask/test.py - > Line 46: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask/test.py - > reaches line 42, trigger word "execute(": - cur.execute('INSERT INTO Image VALUES(?, ?)', data) - - - -godber/flask-mobile-switch -https://github.com/godber/flask-mobile-switch -Entry file: flask-mobile-switch/missionops/missionops/__init__.py -Scanned: 2016-10-20 08:53:12.767148 -Vulnerability 1: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 29, trigger word "form[": - title = config_form['title'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 33: config_title.value = title - File: flask-mobile-switch/missionops/missionops/views.py - > Line 43: title = title.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 45: title = 'Mission Ops' -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 41, trigger word "filter(": - title = Config.query.filter(Config.key == 'title').first() - -Vulnerability 2: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 30, trigger word "form[": - image_url = config_form['url'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 37: config_url.value = image_url - File: flask-mobile-switch/missionops/missionops/views.py - > Line 49: image_url = image_url.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 51: image_url = '../static/Mars.jpg' - File: flask-mobile-switch/missionops/missionops/views.py - > Line 52: ysize = image_size(image_url) - File: flask-mobile-switch/missionops/missionops/views.py - > Line 24: ysize = 0 -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 47, trigger word "filter(": - image_url = Config.query.filter(Config.key == 'url').first() - -Vulnerability 3: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 29, trigger word "form[": - title = config_form['title'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 33: config_title.value = title - File: flask-mobile-switch/missionops/missionops/views.py - > Line 43: title = title.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 45: title = 'Mission Ops' -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('app.html',switch=switch, title=title, image_url=image_url, ysize=ysize) - -Vulnerability 4: -File: flask-mobile-switch/missionops/missionops/views.py - > User input at line 30, trigger word "form[": - image_url = config_form['url'] -Reassigned in: - File: flask-mobile-switch/missionops/missionops/views.py - > Line 37: config_url.value = image_url - File: flask-mobile-switch/missionops/missionops/views.py - > Line 49: image_url = image_url.value - File: flask-mobile-switch/missionops/missionops/views.py - > Line 51: image_url = '../static/Mars.jpg' - File: flask-mobile-switch/missionops/missionops/views.py - > Line 52: ysize = image_size(image_url) - File: flask-mobile-switch/missionops/missionops/views.py - > Line 24: ysize = 0 -File: flask-mobile-switch/missionops/missionops/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('app.html',switch=switch, title=title, image_url=image_url, ysize=ysize) - - - -naveenpremchand02/paintapp-using-Flask -https://github.com/naveenpremchand02/paintapp-using-Flask -Entry file: None -Scanned: 2016-10-20 08:53:13.286974 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/naveenpremchand02/paintapp-using-Flask. - -orkunozbek/deploy_test -https://github.com/orkunozbek/deploy_test -Entry file: deploy_test/app_pack/__init__.py -Scanned: 2016-10-20 08:53:14.548741 -No vulnerabilities found. - - -y2bishop2y/microengine -https://github.com/y2bishop2y/microengine -Entry file: microengine/lib/flask_sqlalchemy.py -Scanned: 2016-10-20 08:53:15.199897 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -Entry file: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -Scanned: 2016-10-20 08:53:18.030744 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > User input at line 34, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 22: imgdata = row['imgdata'] - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 38: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - - - -popeliao/FlavorPlusServer -https://github.com/popeliao/FlavorPlusServer -Entry file: FlavorPlusServer/app.py -Scanned: 2016-10-20 08:53:18.578768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tatertot/tipsy -https://github.com/tatertot/tipsy -Entry file: tipsy/tipsy.py -Scanned: 2016-10-20 08:53:26.100284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ssidorenko/twisker -https://github.com/ssidorenko/twisker -Entry file: twisker/flask/sessions.py -Scanned: 2016-10-20 08:53:26.621436 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -einashaddad/follow_app -https://github.com/einashaddad/follow_app -Entry file: follow_app/web_button.py -Scanned: 2016-10-20 08:53:27.122551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joepetrini/dayuntil -https://github.com/joepetrini/dayuntil -Entry file: dayuntil/app/__init__.py -Scanned: 2016-10-20 08:53:27.638950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soniacs/mockup-boot -https://github.com/soniacs/mockup-boot -Entry file: mockup-boot/build.py -Scanned: 2016-10-20 08:53:29.065044 -Vulnerability 1: -File: mockup-boot/build.py - > User input at line 33, trigger word "get(": - template = page.meta.get('template', 'page.html') -File: mockup-boot/build.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,page=page) - - - -Liquix/microblog -https://github.com/Liquix/microblog -Entry file: None -Scanned: 2016-10-20 08:53:29.631479 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mvader/Quickflask -https://github.com/mvader/Quickflask -Entry file: Quickflask/quickflask/app.py -Scanned: 2016-10-20 08:53:31.751591 -No vulnerabilities found. - - -dnet/wsfacade -https://github.com/dnet/wsfacade -Entry file: wsfacade/wsfacade.py -Scanned: 2016-10-20 08:53:32.277375 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kylemarsh/recipelister -https://github.com/kylemarsh/recipelister -Entry file: recipelister/recipelister/__init__.py -Scanned: 2016-10-20 08:53:32.791224 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -croach/cheap-and-scalable-websites-code -https://github.com/croach/cheap-and-scalable-websites-code -Entry file: cheap-and-scalable-websites-code/generator.py -Scanned: 2016-10-20 08:53:33.299286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jimpurbrick/hackinabox -https://github.com/jimpurbrick/hackinabox -Entry file: hackinabox/app.py -Scanned: 2016-10-20 08:53:34.611506 -No vulnerabilities found. - - -thegeekchick/converter -https://github.com/thegeekchick/converter -Entry file: None -Scanned: 2016-10-20 08:53:39.153301 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -angstwad/linky -https://github.com/angstwad/linky -Entry file: linky/linky/__init__.py -Scanned: 2016-10-20 08:53:43.555399 -No vulnerabilities found. - - -pysgf/GeoPhotoPy -https://github.com/pysgf/GeoPhotoPy -Entry file: GeoPhotoPy/GeoPhotoPy/__init__.py -Scanned: 2016-10-20 08:53:58.961338 -No vulnerabilities found. - - -GradySimon/RoommateDishes -https://github.com/GradySimon/RoommateDishes -Entry file: RoommateDishes/dishes.py -Scanned: 2016-10-20 08:54:00.273028 -No vulnerabilities found. - - -the-gigi/cloud_state -https://github.com/the-gigi/cloud_state -Entry file: cloud_state/CloudState.py -Scanned: 2016-10-20 08:54:01.766052 -No vulnerabilities found. - - -xiyoulaoyuanjia/flaskapp -https://github.com/xiyoulaoyuanjia/flaskapp -Entry file: None -Scanned: 2016-10-20 08:54:03.160234 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiyoulaoyuanjia/flaskapp. - -trustrachel/Flask-FeatureFlags -https://github.com/trustrachel/Flask-FeatureFlags -Entry file: Flask-FeatureFlags/tests/fixtures.py -Scanned: 2016-10-20 08:54:05.081983 -Vulnerability 1: -File: Flask-FeatureFlags/tests/test_core_function.py - > User input at line 55, trigger word "get(": - response = self.test_client.get(url) -File: Flask-FeatureFlags/tests/test_core_function.py - > reaches line 57, trigger word "url_for(": - response.location == url_for('redirect_destination',_external=True) - -Vulnerability 2: -File: Flask-FeatureFlags/tests/test_core_function.py - > User input at line 66, trigger word "get(": - response = self.test_client.get(url) -File: Flask-FeatureFlags/tests/test_core_function.py - > reaches line 68, trigger word "url_for(": - response.location == url_for('redirect_destination',_external=True) - - - -aahluwal/flask -https://github.com/aahluwal/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 08:54:05.662241 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -kennethreitz/elephant -https://github.com/kennethreitz/elephant -Entry file: elephant/elephant.py -Scanned: 2016-10-20 08:54:06.157572 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clef/sample-flask -https://github.com/clef/sample-flask -Entry file: sample-flask/app.py -Scanned: 2016-10-20 08:54:07.539084 -No vulnerabilities found. - - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-20 08:54:15.590159 -No vulnerabilities found. - - -jonascj/flaskr -https://github.com/jonascj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:54:16.088673 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thinboy92/flasktuts -https://github.com/thinboy92/flasktuts -Entry file: flasktuts/app/__init__.py -Scanned: 2016-10-20 08:54:17.653688 -No vulnerabilities found. - - -guilhermecomum/FlaskTutorial -https://github.com/guilhermecomum/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 08:54:18.171668 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-20 08:54:20.247472 -Vulnerability 1: -File: squeak/app.py - > User input at line 73, trigger word "form[": - search_term = request.form['term'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 2: -File: squeak/app.py - > User input at line 74, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 3: -File: squeak/app.py - > User input at line 83, trigger word "get(": - response = requests.get(signed_url) -Reassigned in: - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - - - -xjdrew/flask-demo -https://github.com/xjdrew/flask-demo -Entry file: None -Scanned: 2016-10-20 08:54:20.783937 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xjdrew/flask-demo. - -aerialdomo/flask_microblog -https://github.com/aerialdomo/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 08:54:26.310795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akbarovs/flask-sandbox -https://github.com/akbarovs/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-20 08:54:26.813660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jinzhangg/flask-helloworld -https://github.com/jinzhangg/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-20 08:54:28.616634 -No vulnerabilities found. - - -hardez/Flask-Skeleton -https://github.com/hardez/Flask-Skeleton -Entry file: None -Scanned: 2016-10-20 08:54:29.640339 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hardez/Flask-Skeleton. - -stfy86/pruebitasFlask -https://github.com/stfy86/pruebitasFlask -Entry file: pruebitasFlask/practica4/src/app/__init__.py -Scanned: 2016-10-20 08:54:32.022348 -No vulnerabilities found. - - -kracekumar/test-flask -https://github.com/kracekumar/test-flask -Entry file: test-flask/app.py -Scanned: 2016-10-20 08:54:33.895678 -No vulnerabilities found. - - -charliecrissman/microblog -https://github.com/charliecrissman/microblog -Entry file: None -Scanned: 2016-10-20 08:54:34.401273 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -abulte/Flask-Bootstrap-Fanstatic -https://github.com/abulte/Flask-Bootstrap-Fanstatic -Entry file: Flask-Bootstrap-Fanstatic/application/__init__.py -Scanned: 2016-10-20 08:54:35.600917 -No vulnerabilities found. - - -jennyferpinto/Flask_Part_1 -https://github.com/jennyferpinto/Flask_Part_1 -Entry file: Flask_Part_1/tipsy.py -Scanned: 2016-10-20 08:54:36.129343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-20 08:54:44.613519 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -isms/flask-phonebank-dashboard -https://github.com/isms/flask-phonebank-dashboard -Entry file: flask-phonebank-dashboard/app.py -Scanned: 2016-10-20 08:55:00.134754 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jpanganiban/flask-heroku-kickstart -https://github.com/jpanganiban/flask-heroku-kickstart -Entry file: None -Scanned: 2016-10-20 08:55:01.638095 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jpanganiban/flask-heroku-kickstart. - -justinxreese/ajax-calculator-flask -https://github.com/justinxreese/ajax-calculator-flask -Entry file: None -Scanned: 2016-10-20 08:55:03.150078 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-20 08:55:03.681342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soniacs/cabinet -https://github.com/soniacs/cabinet -Entry file: cabinet/app/__init__.py -Scanned: 2016-10-20 08:55:05.361288 -Vulnerability 1: -File: cabinet/app/views/clients.py - > User input at line 18, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/clients.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/view.html',title=client.name, client=client, projects=projects, invoices=invoices) - -Vulnerability 2: -File: cabinet/app/views/clients.py - > User input at line 33, trigger word "form[": - client = Client(name=request.form['name'], company=request.form['company'], website=request.form['website'], twitter=request.form['twitter'], email=request.form['email'], telephone=request.form['telephone'], skype=request.form['skype'], street=request.form['street'], street_2=request.form['street_2'], city=request.form['city'], state=request.form['state'], postcode=request.form['postcode'], country=request.form['country'], notes=request.form['notes']) -File: cabinet/app/views/clients.py - > reaches line 50, trigger word "flash(": - flash('Client '%s' was added.' % client.name) - -Vulnerability 3: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 78, trigger word "flash(": - flash('Client '%s' has been updated.' % client.name) - -Vulnerability 4: -File: cabinet/app/views/clients.py - > User input at line 60, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 84: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/edit.html',title='Edit %s' % client.name, client=client) - -Vulnerability 5: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 93, trigger word "flash(": - flash('Client '%s' has been deleted.' % client.name) - -Vulnerability 6: -File: cabinet/app/views/clients.py - > User input at line 89, trigger word "get(": - client = Client.query.get(client_id) -Reassigned in: - File: cabinet/app/views/clients.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/clients.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('clients')) -File: cabinet/app/views/clients.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('clients/delete.html',title='Delete %s' % client.name, client=client) - -Vulnerability 7: -File: cabinet/app/views/invoices.py - > User input at line 18, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/invoices.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/view.html',title=invoice.name, invoice=invoice) - -Vulnerability 8: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 9: -File: cabinet/app/views/invoices.py - > User input at line 31, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 10: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "get(": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 11: -File: cabinet/app/views/invoices.py - > User input at line 32, trigger word "form[": - project = Project.query.get(request.form['project']) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 33: invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 12: -File: cabinet/app/views/invoices.py - > User input at line 33, trigger word "form[": - invoice = Invoice(name=request.form['name'], currency=request.form['currency'], status=request.form['status'], notes=request.form['notes'], payment=request.form['payment'], internal_notes=request.form['internal_notes'], client=client, project=project) -File: cabinet/app/views/invoices.py - > reaches line 47, trigger word "flash(": - flash('Invoice '%s' was added.' % invoice.name) - -Vulnerability 13: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 78, trigger word "flash(": - flash('Invoice '%s' has been updated.' % invoice.name) - -Vulnerability 14: -File: cabinet/app/views/invoices.py - > User input at line 59, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 79: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/edit.html',title='Edit Invoice %s' % invoice.name, invoice=invoice, clients=clients, projects=projects) - -Vulnerability 15: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 95, trigger word "flash(": - flash('Invoice '%s' has been deleted.' % invoice.name) - -Vulnerability 16: -File: cabinet/app/views/invoices.py - > User input at line 91, trigger word "get(": - invoice = Invoice.query.get(invoice_id) -Reassigned in: - File: cabinet/app/views/invoices.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/invoices.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('invoices')) -File: cabinet/app/views/invoices.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('invoices/delete.html',title='Delete Invoice %s' % invoice.name, invoice=invoice) - -Vulnerability 17: -File: cabinet/app/views/projects.py - > User input at line 18, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: cabinet/app/views/projects.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/view.html',title=project.name, project=project) - -Vulnerability 18: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "get(": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 19: -File: cabinet/app/views/projects.py - > User input at line 30, trigger word "form[": - client = Client.query.get(request.form['client']) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 31: project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 20: -File: cabinet/app/views/projects.py - > User input at line 31, trigger word "form[": - project = Project(name=request.form['name'], description=request.form['description'], status=request.form['status'], hourly_rate=request.form['hourly_rate'], quote=request.form['quote'], notes=request.form['notes'], client=client) -File: cabinet/app/views/projects.py - > reaches line 43, trigger word "flash(": - flash('Project '%s' was added.' % project.name) - -Vulnerability 21: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 69, trigger word "flash(": - flash('Project '%s' has been updated.' % project.name) - -Vulnerability 22: -File: cabinet/app/views/projects.py - > User input at line 54, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 76: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 70: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/edit.html',title='Edit %s' % project.name, project=project, clients=clients) - -Vulnerability 23: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 85, trigger word "flash(": - flash('Project '%s' has been deleted.' % project.name) - -Vulnerability 24: -File: cabinet/app/views/projects.py - > User input at line 81, trigger word "get(": - project = Project.query.get(project_id) -Reassigned in: - File: cabinet/app/views/projects.py - > Line 91: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: cabinet/app/views/projects.py - > Line 86: ret_MAYBE_FUNCTION_NAME = redirect(url_for('projects')) -File: cabinet/app/views/projects.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('projects/delete.html',title='Delete %s' % project.name, project=project) - - - -MattStockton/manpage -https://github.com/MattStockton/manpage -Entry file: manpage/app.py -Scanned: 2016-10-20 08:55:05.903907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qzio/tododis -https://github.com/qzio/tododis -Entry file: tododis/app.py -Scanned: 2016-10-20 08:55:06.439779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-20 08:55:06.953730 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB -Entry file: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -Scanned: 2016-10-20 08:55:13.663557 -Vulnerability 1: -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > User input at line 34, trigger word "form[": - imgdata = request.form['string'] -Reassigned in: - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 22: imgdata = row['imgdata'] - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = resp - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('paint.html') - File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > Line 38: ret_MAYBE_FUNCTION_NAME = resp -File: Paintapp-Javascript-Canvas-Flask-MongoDB/test.py - > reaches line 24, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('paint.html',saved=imgdata) - - - -mmahnken/Flask-To-Do-List-with-updates- -https://github.com/mmahnken/Flask-To-Do-List-with-updates- -Entry file: Flask-To-Do-List-with-updates-/tipsy.py -Scanned: 2016-10-20 08:55:17.056541 -No vulnerabilities found. - - -samgclarke/sms_sender -https://github.com/samgclarke/sms_sender -Entry file: sms_sender/application.py -Scanned: 2016-10-20 08:55:18.285943 -No vulnerabilities found. - - -Liquix/microblog -https://github.com/Liquix/microblog -Entry file: None -Scanned: 2016-10-20 08:55:18.790556 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -deegill/tipsytasklist -https://github.com/deegill/tipsytasklist -Entry file: tipsytasklist/tipsy.py -Scanned: 2016-10-20 08:55:19.309993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dnet/wsfacade -https://github.com/dnet/wsfacade -Entry file: wsfacade/wsfacade.py -Scanned: 2016-10-20 08:55:19.805852 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdjhny/OilPainter -https://github.com/mdjhny/OilPainter -Entry file: OilPainter/app/app.py -Scanned: 2016-10-20 08:55:21.323042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yeradis/sizing -https://github.com/yeradis/sizing -Entry file: sizing/sizing.py -Scanned: 2016-10-20 08:55:26.831268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-social -https://github.com/mattupstate/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-20 08:55:28.129491 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-20 08:55:29.417148 -No vulnerabilities found. - - -whtsky/Flask-WeRoBot -https://github.com/whtsky/Flask-WeRoBot -Entry file: Flask-WeRoBot/flask_werobot.py -Scanned: 2016-10-20 08:55:31.087200 -No vulnerabilities found. - - -OpenTechSchool/python-flask-code -https://github.com/OpenTechSchool/python-flask-code -Entry file: python-flask-code/core/files-templates/catseverywhere.py -Scanned: 2016-10-20 08:55:32.341612 -No vulnerabilities found. - - -rollbar/rollbar-flask-example -https://github.com/rollbar/rollbar-flask-example -Entry file: rollbar-flask-example/hello.py -Scanned: 2016-10-20 08:55:32.866198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lqez/flasky -https://github.com/lqez/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 08:55:33.380101 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jd007/flask-rest -https://github.com/Jd007/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-20 08:55:34.879226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simonvc/rover-wasd-server -https://github.com/simonvc/rover-wasd-server -Entry file: rover-wasd-server/wasd_server.py -Scanned: 2016-10-20 08:55:38.494605 -No vulnerabilities found. - - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel.py -Scanned: 2016-10-20 08:55:40.493488 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -aerialdomo/flaskblog -https://github.com/aerialdomo/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 08:55:42.037645 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -pinoytech/flaskapp -https://github.com/pinoytech/flaskapp -Entry file: None -Scanned: 2016-10-20 08:55:45.534265 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pinoytech/flaskapp. - -aahluwal/flaskagain -https://github.com/aahluwal/flaskagain -Entry file: flaskagain/judgement.py -Scanned: 2016-10-20 08:56:01.172275 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskagain/renv/lib/python2.7/genericpath.py - -landakram/squeak -https://github.com/landakram/squeak -Entry file: squeak/app.py -Scanned: 2016-10-20 08:56:02.732380 -Vulnerability 1: -File: squeak/app.py - > User input at line 73, trigger word "form[": - search_term = request.form['term'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 2: -File: squeak/app.py - > User input at line 74, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: squeak/app.py - > Line 76: data = 'term''location'search_termlocation - File: squeak/app.py - > Line 80: query_string = urllib.urlencode(data) - File: squeak/app.py - > Line 81: api_url = '%s?%s' % (app.config['YELP_SEARCH_URL'], query_string) - File: squeak/app.py - > Line 82: signed_url = sign_url(api_url) - File: squeak/app.py - > Line 83: response = requests.get(signed_url) - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - -Vulnerability 3: -File: squeak/app.py - > User input at line 83, trigger word "get(": - response = requests.get(signed_url) -Reassigned in: - File: squeak/app.py - > Line 84: json_response = json.loads(response.text) -File: squeak/app.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',search_term=search_term, location=location, businesses=json_response['businesses']) - - - -y2bishop2y/vagrant.flask -https://github.com/y2bishop2y/vagrant.flask -Entry file: None -Scanned: 2016-10-20 08:56:03.251747 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -markchadwick/flask-empty -https://github.com/markchadwick/flask-empty -Entry file: flask-empty/main.py -Scanned: 2016-10-20 08:56:04.458412 -No vulnerabilities found. - - -Hardtack/Flask-Router -https://github.com/Hardtack/Flask-Router -Entry file: Flask-Router/flask_router/tests.py -Scanned: 2016-10-20 08:56:07.233293 -No vulnerabilities found. - - -mwmeyer/minimal-flask-socketserver -https://github.com/mwmeyer/minimal-flask-socketserver -Entry file: minimal-flask-socketserver/flash_socket.py -Scanned: 2016-10-20 08:56:08.704892 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elboby/flask-test-template -https://github.com/elboby/flask-test-template -Entry file: None -Scanned: 2016-10-20 08:56:13.197781 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/elboby/flask-test-template. - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-20 08:56:17.429548 -No vulnerabilities found. - - -emi1337/movie_rater -https://github.com/emi1337/movie_rater -Entry file: movie_rater/judgement.py -Scanned: 2016-10-20 08:56:18.186954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrismeono1022/movie-ratings -https://github.com/chrismeono1022/movie-ratings -Entry file: movie-ratings/judgement.py -Scanned: 2016-10-20 08:56:19.682154 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ternup/caddisfly-heroku -https://github.com/ternup/caddisfly-heroku -Entry file: caddisfly-heroku/app.py -Scanned: 2016-10-20 08:56:20.174558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thrisp/flacro -https://github.com/thrisp/flacro -Entry file: flacro/tests/conftest.py -Scanned: 2016-10-20 08:56:20.712271 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -aksiksi/aflam -https://github.com/aksiksi/aflam -Entry file: aflam/views.py -Scanned: 2016-10-20 08:56:22.241070 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kjudd/ratings_app -https://github.com/kjudd/ratings_app -Entry file: ratings_app/judgement.py -Scanned: 2016-10-20 08:56:27.859120 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: ratings_app/env/lib/python2.7/genericpath.py - -samgclarke/sms_sender -https://github.com/samgclarke/sms_sender -Entry file: sms_sender/application.py -Scanned: 2016-10-20 08:56:29.106256 -No vulnerabilities found. - - -Max00355/FileUpload -https://github.com/Max00355/FileUpload -Entry file: FileUpload/main.py -Scanned: 2016-10-20 08:56:30.658463 -No vulnerabilities found. - - -joel-briggs/microblog -https://github.com/joel-briggs/microblog -Entry file: None -Scanned: 2016-10-20 08:56:31.219925 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gonewandering/TwitterLogin -https://github.com/gonewandering/TwitterLogin -Entry file: TwitterLogin/app.py -Scanned: 2016-10-20 08:56:32.460938 -No vulnerabilities found. - - -flebel/yt-redirector -https://github.com/flebel/yt-redirector -Entry file: yt-redirector/yt-redirector.py -Scanned: 2016-10-20 08:56:33.784116 -Vulnerability 1: -File: yt-redirector/yt-redirector.py - > User input at line 17, trigger word "get(": - video_id = requests.get(video_url).json()['items'][0]['id']['videoId'] -Reassigned in: - File: yt-redirector/yt-redirector.py - > Line 18: player_url = 'https://www.youtube.com/watch?v=%s' % (video_id) -File: yt-redirector/yt-redirector.py - > reaches line 19, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(player_url, 301) - - - -mattupstate/flask-jsonschema -https://github.com/mattupstate/flask-jsonschema -Entry file: flask-jsonschema/tests.py -Scanned: 2016-10-20 08:56:36.338889 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 08:56:36.890216 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kienpham2000/airbrake-flask -https://github.com/kienpham2000/airbrake-flask -Entry file: airbrake-flask/setup.py -Scanned: 2016-10-20 08:56:39.390321 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florapdx/My-Blog -https://github.com/florapdx/My-Blog -Entry file: My-Blog/sitebuilder.py -Scanned: 2016-10-20 08:56:49.290262 -No vulnerabilities found. - - -zeuxisoo/python-flask-social-oauth-facebook -https://github.com/zeuxisoo/python-flask-social-oauth-facebook -Entry file: None -Scanned: 2016-10-20 08:56:49.801346 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeuxisoo/python-flask-social-oauth-facebook. - -lpolepeddi/sightings -https://github.com/lpolepeddi/sightings -Entry file: sightings/routes.py -Scanned: 2016-10-20 08:57:12.309412 -No vulnerabilities found. - - -sholsapp/flask-skeleton -https://github.com/sholsapp/flask-skeleton -Entry file: None -Scanned: 2016-10-20 08:57:13.326720 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sholsapp/flask-skeleton. - -adatlabor/soa-demo -https://github.com/adatlabor/soa-demo -Entry file: soa-demo/service.py -Scanned: 2016-10-20 08:57:14.679916 -No vulnerabilities found. - - -speakingcode/pres-soa-flask-backbone -https://github.com/speakingcode/pres-soa-flask-backbone -Entry file: pres-soa-flask-backbone/notes.py -Scanned: 2016-10-20 08:57:18.457273 -No vulnerabilities found. - - -kirang89/flask-boiler -https://github.com/kirang89/flask-boiler -Entry file: None -Scanned: 2016-10-20 08:57:18.964284 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -microamp/flaskel -https://github.com/microamp/flaskel -Entry file: flaskel/flaskel.py -Scanned: 2016-10-20 08:57:19.979124 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -a2lin/flaskapp -https://github.com/a2lin/flaskapp -Entry file: None -Scanned: 2016-10-20 08:57:20.508271 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/a2lin/flaskapp. - -MrFichter/flask1 -https://github.com/MrFichter/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 08:57:21.140160 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-20 08:57:21.728656 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smdmustaffa/PythonFlask -https://github.com/smdmustaffa/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 08:57:27.588163 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -bogavante/mitsuhiko-flask -https://github.com/bogavante/mitsuhiko-flask -Entry file: mitsuhiko-flask/setup.py -Scanned: 2016-10-20 08:57:28.164945 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephanienkram/Flask-Log-Tracker -https://github.com/stephanienkram/Flask-Log-Tracker -Entry file: Flask-Log-Tracker/main.py -Scanned: 2016-10-20 08:57:29.820975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:57:30.363988 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ndrwdn/flat_flask_layout -https://github.com/ndrwdn/flat_flask_layout -Entry file: flat_flask_layout/sitebuilder.py -Scanned: 2016-10-20 08:57:31.851154 -No vulnerabilities found. - - -akshar-raaj/flaks -https://github.com/akshar-raaj/flaks -Entry file: flaks/hello.py -Scanned: 2016-10-20 08:57:33.150548 -No vulnerabilities found. - - -ajith-herga/searchflask -https://github.com/ajith-herga/searchflask -Entry file: searchflask/new_world.py -Scanned: 2016-10-20 08:57:33.694162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willmcmain/blag -https://github.com/willmcmain/blag -Entry file: blag/blag/__init__.py -Scanned: 2016-10-20 08:57:34.964357 -No vulnerabilities found. - - -mihneasim/iphy -https://github.com/mihneasim/iphy -Entry file: None -Scanned: 2016-10-20 08:57:35.488055 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mihneasim/iphy. - -dnajd/pyrest -https://github.com/dnajd/pyrest -Entry file: pyrest/src/main/rest_test.py -Scanned: 2016-10-20 08:57:36.008818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MinnPost/jsonproxy -https://github.com/MinnPost/jsonproxy -Entry file: jsonproxy/app.py -Scanned: 2016-10-20 08:57:36.535666 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BigBlueHat/recshackday -https://github.com/BigBlueHat/recshackday -Entry file: recshackday/app.py -Scanned: 2016-10-20 08:57:37.811918 -No vulnerabilities found. - - -capellayee/remake -https://github.com/capellayee/remake -Entry file: remake/Flasktest/__init__.py -Scanned: 2016-10-20 08:57:40.332539 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -corydolphin/ifighthunger -https://github.com/corydolphin/ifighthunger -Entry file: ifighthunger/ifighthunger/__init__.py -Scanned: 2016-10-20 08:57:41.853190 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zoowii/VerySimpleBlog -https://github.com/zoowii/VerySimpleBlog -Entry file: VerySimpleBlog/main.py -Scanned: 2016-10-20 08:57:44.138995 -No vulnerabilities found. - - -lxchavez/CSULB-Confessions -https://github.com/lxchavez/CSULB-Confessions -Entry file: CSULB-Confessions/confessions_app/__init__.py -Scanned: 2016-10-20 08:57:55.789336 -No vulnerabilities found. - - -ashcrow/flask-track-usage -https://github.com/ashcrow/flask-track-usage -Entry file: flask-track-usage/test/__init__.py -Scanned: 2016-10-20 08:58:13.670676 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lepture/flask-shorturl -https://github.com/lepture/flask-shorturl -Entry file: flask-shorturl/test_shorturl.py -Scanned: 2016-10-20 08:58:15.062283 -No vulnerabilities found. - - -mharrys/flask-blog -https://github.com/mharrys/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 08:58:15.600129 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-20 08:58:19.602585 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -krushton/flask-api-example -https://github.com/krushton/flask-api-example -Entry file: flask-api-example/app.py -Scanned: 2016-10-20 08:58:20.984316 -No vulnerabilities found. - - -jph98/flaskdmg -https://github.com/jph98/flaskdmg -Entry file: flaskdmg/flaskexample.py -Scanned: 2016-10-20 08:58:22.293729 -No vulnerabilities found. - - -roshow/flasktutorial -https://github.com/roshow/flasktutorial -Entry file: None -Scanned: 2016-10-20 08:58:22.865929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -akshar-raaj/flaskr -https://github.com/akshar-raaj/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 08:58:23.370886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codergirl/flaskbabar -https://github.com/codergirl/flaskbabar -Entry file: flaskbabar/hello.py -Scanned: 2016-10-20 08:58:24.766295 -Vulnerability 1: -File: flaskbabar/hello.py - > User input at line 44, trigger word "get(": - new_user = BabarUser(request.args.get('username'), request.args.get('email')) -Reassigned in: - File: flaskbabar/hello.py - > Line 47: json = new_user.id'username''email'new_user.namenew_user.email -File: flaskbabar/hello.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 2: -File: flaskbabar/hello.py - > User input at line 61, trigger word "get(": - the_user = db.session.query(BabarUser).filter_by(id=request.args.get('user_id')).first() -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 3: -File: flaskbabar/hello.py - > User input at line 62, trigger word "get(": - task_name = request.args.get('name') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 4: -File: flaskbabar/hello.py - > User input at line 63, trigger word "get(": - task_description = request.args.get('description') -Reassigned in: - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 5: -File: flaskbabar/hello.py - > User input at line 64, trigger word "get(": - dismissable = request.args.get('dismissable') -Reassigned in: - File: flaskbabar/hello.py - > Line 66: dismissable = True - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - -Vulnerability 6: -File: flaskbabar/hello.py - > User input at line 67, trigger word "get(": - due_date = request.args.get('due_date') -Reassigned in: - File: flaskbabar/hello.py - > Line 69: due_date = datetime.datetime.fromtimestamp(float(due_date)) - File: flaskbabar/hello.py - > Line 70: new_task = Task(user_id=the_user.id, name=task_name, description=task_description, dismissable=dismissable, due_date=due_date, active=True) - File: flaskbabar/hello.py - > Line 73: json = new_task.idget_task_view(new_task) -File: flaskbabar/hello.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(json) - - - -rajendrakrp/GAE-Flask-OpenID -https://github.com/rajendrakrp/GAE-Flask-OpenID -Entry file: GAE-Flask-OpenID/flask/sessions.py -Scanned: 2016-10-20 08:58:25.335857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bob-Thomas/webshopFlask -https://github.com/Bob-Thomas/webshopFlask -Entry file: webshopFlask/webshop.py -Scanned: 2016-10-20 08:58:28.959521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haburibe/flask-myapps -https://github.com/haburibe/flask-myapps -Entry file: flask-myapps/todos/todos.py -Scanned: 2016-10-20 08:58:30.702175 -No vulnerabilities found. - - -mykolasmith/flask-leaderboard -https://github.com/mykolasmith/flask-leaderboard -Entry file: flask-leaderboard/leaderboard/__init__.py -Scanned: 2016-10-20 08:58:33.263218 -Vulnerability 1: -File: flask-leaderboard/leaderboard/endpoints/login.py - > User input at line 13, trigger word "form[": - user = User.query.filter(User.name == request.form['username']).first() -Reassigned in: - File: flask-leaderboard/leaderboard/endpoints/login.py - > Line 19: session['user_id'] = user.id -File: flask-leaderboard/leaderboard/endpoints/login.py - > reaches line 13, trigger word "filter(": - user = User.query.filter(User.name == request.form['username']).first() - - - -betobaz/app_flask -https://github.com/betobaz/app_flask -Entry file: app_flask/app/routes.py -Scanned: 2016-10-20 08:58:34.550354 -No vulnerabilities found. - - -elimgoodman/Personnel-Flask -https://github.com/elimgoodman/Personnel-Flask -Entry file: Personnel-Flask/app/__init__.py -Scanned: 2016-10-20 08:58:37.089685 -Vulnerability 1: -File: Personnel-Flask/app/users/views.py - > User input at line 68, trigger word "get(": - salt = app.config.get('PW_SALT') -Reassigned in: - File: Personnel-Flask/app/users/views.py - > Line 69: password_hash = bcrypt.hashpw(form.password.data, salt) - File: Personnel-Flask/app/users/views.py - > Line 71: clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - -Vulnerability 2: -File: Personnel-Flask/app/users/views.py - > User input at line 69, trigger word ".data": - password_hash = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: Personnel-Flask/app/users/views.py - > Line 71: clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - -Vulnerability 3: -File: Personnel-Flask/app/users/views.py - > User input at line 71, trigger word ".data": - clause = and_(User.email == form.email.data, User.password_hash == password_hash) -File: Personnel-Flask/app/users/views.py - > reaches line 74, trigger word "filter(": - user = User.query.filter(clause).one() - - - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-20 08:58:38.108384 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -Duelist/ianb-flask -https://github.com/Duelist/ianb-flask -Entry file: ianb-flask/ianb/__init__.py -Scanned: 2016-10-20 08:58:39.498942 -No vulnerabilities found. - - -jonascj/flask_logger_test -https://github.com/jonascj/flask_logger_test -Entry file: flask_logger_test/flask_logger_test.py -Scanned: 2016-10-20 08:58:41.267859 -No vulnerabilities found. - - -stephanienkram/Flask-Money-Tracker -https://github.com/stephanienkram/Flask-Money-Tracker -Entry file: Flask-Money-Tracker/main.py -Scanned: 2016-10-20 08:58:41.858633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cismet/sqlparse-flask-webservice -https://github.com/cismet/sqlparse-flask-webservice -Entry file: sqlparse-flask-webservice/sqlparse_webservice.py -Scanned: 2016-10-20 08:58:42.374225 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luckypool/flask-blueprints-template -https://github.com/luckypool/flask-blueprints-template -Entry file: flask-blueprints-template/hello/__init__.py -Scanned: 2016-10-20 08:58:43.653505 -No vulnerabilities found. - - -dylanvee/flask-hello-world -https://github.com/dylanvee/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 08:58:44.174711 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -adamjmarkham/flask-micro-blog -https://github.com/adamjmarkham/flask-micro-blog -Entry file: flask-micro-blog/micro_blog_flask.py -Scanned: 2016-10-20 08:58:45.541556 -No vulnerabilities found. - - -chrismeono1022/microblog_flask_tutorial -https://github.com/chrismeono1022/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 08:58:52.866998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jsutterfield/flaskr-buildout -https://github.com/jsutterfield/flaskr-buildout -Entry file: flaskr-buildout/src/flaskr/flaskr.py -Scanned: 2016-10-20 08:59:07.715110 -No vulnerabilities found. - - -corydolphin/boilerflask-facebook -https://github.com/corydolphin/boilerflask-facebook -Entry file: boilerflask-facebook/boilerflask/__init__.py -Scanned: 2016-10-20 08:59:13.261551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -subdesign/temp_Flaskblog -https://github.com/subdesign/temp_Flaskblog -Entry file: temp_Flaskblog/app.py -Scanned: 2016-10-20 08:59:14.839433 -Vulnerability 1: -File: temp_Flaskblog/app.py - > User input at line 107, trigger word ".data": - cur = g.db.execute('INSERT INTO fblog (title, content, date, status) VALUES (?, ?, ?, 1)', [form.title.data, form.content.data, d]) -File: temp_Flaskblog/app.py - > reaches line 107, trigger word "execute(": - cur = g.db.execute('INSERT INTO fblog (title, content, date, status) VALUES (?, ?, ?, 1)', [form.title.data, form.content.data, d]) - -Vulnerability 2: -File: temp_Flaskblog/app.py - > User input at line 129, trigger word ".data": - cur = g.db.execute('UPDATE fblog SET title =' + form.title.data + ', content =' + form.content.data + ' WHERE blog_id=' + str(blog_id)) -File: temp_Flaskblog/app.py - > reaches line 129, trigger word "execute(": - cur = g.db.execute('UPDATE fblog SET title =' + form.title.data + ', content =' + form.content.data + ' WHERE blog_id=' + str(blog_id)) - - - -farresmoidu/weather -https://github.com/farresmoidu/weather -Entry file: weather/weather.py -Scanned: 2016-10-20 08:59:15.355989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thensgens/vvs -https://github.com/thensgens/vvs -Entry file: vvs/src/flask/sessions.py -Scanned: 2016-10-20 08:59:15.887712 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwieler/soccer -https://github.com/mwieler/soccer -Entry file: soccer/soccer/main.py -Scanned: 2016-10-20 08:59:19.398668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shiroyuki/tori-sample-blog -https://github.com/shiroyuki/tori-sample-blog -Entry file: tori-sample-blog/main.py -Scanned: 2016-10-20 08:59:20.666950 -No vulnerabilities found. - - -jackvnimble/jackvnimble -https://github.com/jackvnimble/jackvnimble -Entry file: jackvnimble/flaskblog.py -Scanned: 2016-10-20 08:59:23.940236 -No vulnerabilities found. - - -micahwalter/hello-mysql -https://github.com/micahwalter/hello-mysql -Entry file: hello-mysql/hello-mysql.py -Scanned: 2016-10-20 08:59:25.675035 -No vulnerabilities found. - - -itsme300/assignment -https://github.com/itsme300/assignment -Entry file: assignment/iptables.py -Scanned: 2016-10-20 08:59:26.201575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yhyap/lipsum -https://github.com/yhyap/lipsum -Entry file: lipsum/flask/app.py -Scanned: 2016-10-20 08:59:29.769243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lxchavez/CSULB-Confessions -https://github.com/lxchavez/CSULB-Confessions -Entry file: CSULB-Confessions/confessions_app/__init__.py -Scanned: 2016-10-20 08:59:36.810532 -No vulnerabilities found. - - -tornado-utils/tornado-restless -https://github.com/tornado-utils/tornado-restless -Entry file: tornado-restless/tests/base.py -Scanned: 2016-10-20 08:59:41.362339 -No vulnerabilities found. - - -btomashvili/flasb -https://github.com/btomashvili/flasb -Entry file: None -Scanned: 2016-10-20 08:59:41.859801 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/btomashvili/flasb. - -maxcountryman/flask-simpleoauth -https://github.com/maxcountryman/flask-simpleoauth -Entry file: flask-simpleoauth/flask_simpleoauth/app.py -Scanned: 2016-10-20 08:59:43.207447 -Vulnerability 1: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 30, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.index')) - -Vulnerability 2: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 30, trigger word "get(": - next_url = request.args.get('next_url', url_for('.index')) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 42, trigger word "url_for(": - next_url = request.args.get('next_url', url_for('.login')) - -Vulnerability 4: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 42, trigger word "get(": - next_url = request.args.get('next_url', url_for('.login')) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 44, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 5: -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > User input at line 53, trigger word ".data": - consumer = Consumer(name=form.name.data, callback_uri=form.callback_uri.data) -Reassigned in: - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 58: args = 'key''secret'consumer.keyconsumer.secret - File: flask-simpleoauth/flask_simpleoauth/frontend.py - > Line 62: consumer = Consumer.objects.with_id(consumer_id) -File: flask-simpleoauth/flask_simpleoauth/frontend.py - > reaches line 59, trigger word "flash(": - flash('Consumer created. Key {key} Secret {secret}'.format(args)) - - - -bayazee/flask-mosession -https://github.com/bayazee/flask-mosession -Entry file: flask-mosession/example/example.py -Scanned: 2016-10-20 08:59:44.558642 -No vulnerabilities found. - - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 08:59:45.056202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dorajistyle/proposal_center_python_flask_sqlalchemy_jade -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade -Entry file: proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -Scanned: 2016-10-20 08:59:47.148735 -Vulnerability 1: -File: proposal_center_python_flask_sqlalchemy_jade/application/manager.py - > User input at line 58, trigger word "get(": - feedback = Feedback.query.get(feedback_id) -File: proposal_center_python_flask_sqlalchemy_jade/application/manager.py - > reaches line 59, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(feedback_id=feedback_id, vote_count=feedback.vote_count()) - - - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-20 08:59:48.478760 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -gabrielengel/learn-flask -https://github.com/gabrielengel/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 08:59:49.205014 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mutaku/alfred_flask -https://github.com/mutaku/alfred_flask -Entry file: alfred_flask/alfred.py -Scanned: 2016-10-20 08:59:49.737468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erikgrueter/flask_app -https://github.com/erikgrueter/flask_app -Entry file: None -Scanned: 2016-10-20 08:59:50.226379 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/erikgrueter/flask_app. - -marksteve/flask-nsq -https://github.com/marksteve/flask-nsq -Entry file: flask-nsq/test.py -Scanned: 2016-10-20 08:59:51.753391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luxuia/gene_designer -https://github.com/luxuia/gene_designer -Entry file: gene_designer/geneDesigne.py -Scanned: 2016-10-20 09:00:13.768626 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rubinovitz/flask-gevent-boiler -https://github.com/rubinovitz/flask-gevent-boiler -Entry file: flask-gevent-boiler/app.py -Scanned: 2016-10-20 09:00:14.269785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andyhmltn/stripe-flask-test -https://github.com/andyhmltn/stripe-flask-test -Entry file: stripe-flask-test/main.py -Scanned: 2016-10-20 09:00:15.781765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -manuclementz/shrt -https://github.com/manuclementz/shrt -Entry file: shrt/app.py -Scanned: 2016-10-20 09:00:17.174104 -Vulnerability 1: -File: shrt/app.py - > User input at line 46, trigger word "form[": - link = ShortLink(request.form['url']) -Reassigned in: - File: shrt/app.py - > Line 49: link.encoded_id = encode_id(link.id) - File: shrt/app.py - > Line 53: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: shrt/app.py - > reaches line 52, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('link_info',link_id=link.encoded_id)) - -Vulnerability 2: -File: shrt/app.py - > User input at line 46, trigger word "form[": - link = ShortLink(request.form['url']) -Reassigned in: - File: shrt/app.py - > Line 49: link.encoded_id = encode_id(link.id) - File: shrt/app.py - > Line 53: ret_MAYBE_FUNCTION_NAME = render_template('index.html') -File: shrt/app.py - > reaches line 52, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('link_info',link_id=link.encoded_id)) - - - -liontree/lemonbook -https://github.com/liontree/lemonbook -Entry file: lemonbook/__init__.py -Scanned: 2016-10-20 09:00:25.036200 -Vulnerability 1: -File: lemonbook/common/flask_login.py - > User input at line 227, trigger word "get(": - cookie_name = config.get('REMEMBER_COOKIE_NAME', COOKIE_NAME) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 2: -File: lemonbook/common/flask_login.py - > User input at line 228, trigger word "get(": - duration = config.get('REMEMBER_COOKIE_DURATION', COOKIE_DURATION) -Reassigned in: - File: lemonbook/common/flask_login.py - > Line 235: expires = datetime.utcnow() + duration -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 3: -File: lemonbook/common/flask_login.py - > User input at line 229, trigger word "get(": - domain = config.get('REMEMBER_COOKIE_DOMAIN', None) -File: lemonbook/common/flask_login.py - > reaches line 237, trigger word "set_cookie(": - response.set_cookie(cookie_name, data,expires=expires, domain=domain) - -Vulnerability 4: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 55, trigger word "replace(": - date = date.replace('/', '') - -Vulnerability 5: -File: lemonbook/views/notes.py - > User input at line 50, trigger word "form[": - date = request.form['date'].strip() -Reassigned in: - File: lemonbook/views/notes.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('latest.html',contents=contents) - File: lemonbook/views/notes.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(url_for('latest')) -File: lemonbook/views/notes.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('date',id=user_id, date=date)) - - - -willkg/fredrik -https://github.com/willkg/fredrik -Entry file: fredrik/fredrik/project-template/PROJECTMODULE/main.py -Scanned: 2016-10-20 09:00:25.538473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scotfu/gae-twitter -https://github.com/scotfu/gae-twitter -Entry file: gae-twitter/lib/flask/sessions.py -Scanned: 2016-10-20 09:00:26.534716 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardmonette/webremote -https://github.com/richardmonette/webremote -Entry file: webremote/app.py -Scanned: 2016-10-20 09:00:27.532709 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -micahwalter/hello-mysql -https://github.com/micahwalter/hello-mysql -Entry file: hello-mysql/hello-mysql.py -Scanned: 2016-10-20 09:00:28.785003 -No vulnerabilities found. - - -joshsee/GAE-Online-Apparel-Survey-Form -https://github.com/joshsee/GAE-Online-Apparel-Survey-Form -Entry file: GAE-Online-Apparel-Survey-Form/flask/sessions.py -Scanned: 2016-10-20 09:00:30.329360 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samsolariusleo/Flask -https://github.com/samsolariusleo/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 09:00:38.045975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adamgreenhall/flask-haml-sass-coffee-template -https://github.com/adamgreenhall/flask-haml-sass-coffee-template -Entry file: flask-haml-sass-coffee-template/app.py -Scanned: 2016-10-20 09:00:39.801311 -No vulnerabilities found. - - -prakhar1989/flask-tuts -https://github.com/prakhar1989/flask-tuts -Entry file: flask-tuts/lesson-2/blogs/__init__.py -Scanned: 2016-10-20 09:00:43.755590 -No vulnerabilities found. - - -damour/flaskr -https://github.com/damour/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 09:00:44.736072 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fabin/Flaskr -https://github.com/fabin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 09:00:45.234308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aussiroth/FlaskPractical -https://github.com/Aussiroth/FlaskPractical -Entry file: FlaskPractical/flask/routes.py -Scanned: 2016-10-20 09:00:46.031165 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fabin/Flask-Upload -https://github.com/fabin/Flask-Upload -Entry file: Flask-Upload/upload/__init__.py -Scanned: 2016-10-20 09:00:49.277374 -Vulnerability 1: -File: Flask-Upload/upload/__init__.py - > User input at line 24, trigger word "files[": - uploadedFile = request.files['file'] -Reassigned in: - File: Flask-Upload/upload/__init__.py - > Line 26: filename = uploadedFile.filename - File: Flask-Upload/upload/__init__.py - > Line 36: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File (in package)

-
-

- -

- ' -File: Flask-Upload/upload/__init__.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(s.put(DOMAIN_NAME, filename, ob)) - - - -lachezar/tada_backend -https://github.com/lachezar/tada_backend -Entry file: tada_backend/todo.py -Scanned: 2016-10-20 09:00:51.567788 -No vulnerabilities found. - - -krushton/flask-location-example -https://github.com/krushton/flask-location-example -Entry file: flask-location-example/app.py -Scanned: 2016-10-20 09:00:53.282269 -No vulnerabilities found. - - -david-torres/flask-rest-quickstart -https://github.com/david-torres/flask-rest-quickstart -Entry file: flask-rest-quickstart/application/__init__.py -Scanned: 2016-10-20 09:01:04.543134 -No vulnerabilities found. - - -Syerram/maintenance-server -https://github.com/Syerram/maintenance-server -Entry file: maintenance-server/run.py -Scanned: 2016-10-20 09:01:14.053499 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-20 09:01:14.806865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abhiomkar/contacts-rest -https://github.com/abhiomkar/contacts-rest -Entry file: contacts-rest/contacts.py -Scanned: 2016-10-20 09:01:16.312680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Giorgix/thor -https://github.com/Giorgix/thor -Entry file: thor/thor.py -Scanned: 2016-10-20 09:01:17.554587 -No vulnerabilities found. - - -dyim42/wiki -https://github.com/dyim42/wiki -Entry file: None -Scanned: 2016-10-20 09:01:20.549371 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aromanovich/flask-webtest -https://github.com/aromanovich/flask-webtest -Entry file: flask-webtest/tests/core.py -Scanned: 2016-10-20 09:01:29.227628 -No vulnerabilities found. - - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 09:01:30.285993 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wangzexin/flask -https://github.com/wangzexin/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 09:01:30.843059 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Treeki/bitBoard -https://github.com/Treeki/bitBoard -Entry file: bitBoard/bitBoard/__init__.py -Scanned: 2016-10-20 09:01:33.249825 -Vulnerability 1: -File: bitBoard/bitBoard/views/board.py - > User input at line 173, trigger word "get(": - pagenum = int(request.args.get('page', 1)) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 175: pagination = query.paginate(pagenum, THREADS_PER_PAGE,error_out=False) - File: bitBoard/bitBoard/views/board.py - > Line 180: pagination.items = add_null_entities(pagination.items) -File: bitBoard/bitBoard/views/board.py - > reaches line 183, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('thread_list.html',mode='forum', forum=forum, stickies=stickies, threads=pagination.items, pagination=pagination) - -Vulnerability 2: -File: bitBoard/bitBoard/views/board.py - > User input at line 210, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 219: ret_MAYBE_FUNCTION_NAME = _base_view_thread(thread) -File: bitBoard/bitBoard/views/board.py - > reaches line 218, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=301) - -Vulnerability 3: -File: bitBoard/bitBoard/views/board.py - > User input at line 224, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 233: ret_MAYBE_FUNCTION_NAME = _base_view_thread(thread) -File: bitBoard/bitBoard/views/board.py - > reaches line 232, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=301) - -Vulnerability 4: -File: bitBoard/bitBoard/views/board.py - > User input at line 239, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 291: user = post.creator - File: bitBoard/bitBoard/views/board.py - > Line 296: ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) -File: bitBoard/bitBoard/views/board.py - > reaches line 250, trigger word "filter(": - post = Post.query.filter(Post.thread == thread, Post.created_at > timestamp).order_by(db.asc(Post.created_at)).first() - -Vulnerability 5: -File: bitBoard/bitBoard/views/board.py - > User input at line 239, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) - File: bitBoard/bitBoard/views/board.py - > Line 291: user = post.creator - File: bitBoard/bitBoard/views/board.py - > Line 296: ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) -File: bitBoard/bitBoard/views/board.py - > reaches line 255, trigger word "filter(": - post = Post.query.filter(Post.thread == thread).order_by(db.asc(Post.created_at)).first() - -Vulnerability 6: -File: bitBoard/bitBoard/views/board.py - > User input at line 286, trigger word "get(": - pagenum = int(request.args.get('page', 1)) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 287: pagination = query.paginate(pagenum, POSTS_PER_PAGE,error_out=False) - File: bitBoard/bitBoard/views/board.py - > Line 244: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 260: ret_MAYBE_FUNCTION_NAME = redirect_to_post(thread, post) - File: bitBoard/bitBoard/views/board.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url,code=303) -File: bitBoard/bitBoard/views/board.py - > reaches line 296, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('view_thread.html',forum=thread.forum, thread=thread, posts=pagination.items, pagination=pagination, qr_form=quick_reply) - -Vulnerability 7: -File: bitBoard/bitBoard/views/board.py - > User input at line 366, trigger word ".data": - thread = Thread(title=form.title.data, subtitle=form.subtitle.data, forum=forum, creator=g.user, type=is_privateThread.PRIVATEThread.BASIC_THREAD, post_count=1) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 382: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 400: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 407: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 412: notify = Notification(thread=thread, recipient=user, type=Notification.NEW_PRIVATE_THREAD) - File: bitBoard/bitBoard/views/board.py - > Line 422: ret_MAYBE_FUNCTION_NAME = render_template('post.html',is_thread=True, is_private=is_private, recipient_errors=recipient_errors, form=form, forum=forum, pm_recipient_limit=PM_RECIPIENT_LIMIT, url=url) -File: bitBoard/bitBoard/views/board.py - > reaches line 420, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - -Vulnerability 8: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 459, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.reply_url,code=301) - -Vulnerability 9: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 504, trigger word "filter(": - notify_which = db.session.query(u_table.c.user_id, Notification.id).filter(u_table.c.thread_id == thread.id).filter(u_table.c.user_id != g.user.id).outerjoin(Notification, notify_join) - -Vulnerability 10: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 534, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 11: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 536, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=True, post_id=post.id, post_html=render_template('post_box.html',post=post, postNumber=thread.post_count), layout_extra=get_layout_extra(post)) - -Vulnerability 12: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 536, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=True, post_id=post.id, post_html=render_template('post_box.html',post=post, postNumber=thread.post_count), layout_extra=get_layout_extra(post)) - -Vulnerability 13: -File: bitBoard/bitBoard/views/board.py - > User input at line 443, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 471: post = Post(thread=thread, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr, version_count=1, number=post_number) - File: bitBoard/bitBoard/views/board.py - > Line 480: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 487: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 552: ret_MAYBE_FUNCTION_NAME = jsonify(was_posted=False, errors=jsonify_errors(form)) -File: bitBoard/bitBoard/views/board.py - > reaches line 546, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, thread=thread, forum=thread.forum, url=thread.reply_url) - -Vulnerability 14: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 577, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.edit_url,code=301) - -Vulnerability 15: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 579, trigger word "filter(": - posts_before = Post.query.filter(Post.thread == thread, Post.id < post.id).count() - -Vulnerability 16: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 595, trigger word "render_template(": - html = render_template('inline_edit.html',post=post, is_thread=edits_thread, form=form, url=post.edit_url) - -Vulnerability 17: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 627, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 18: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 629, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=True, post_html=escape(parse_text(version.content))) - -Vulnerability 19: -File: bitBoard/bitBoard/views/board.py - > User input at line 604, trigger word ".data": - version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 635: ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, is_thread=edits_thread, is_edit=True, thread=thread, forum=thread.forum, url=post.edit_url) - File: bitBoard/bitBoard/views/board.py - > Line 643: ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=False, errors=jsonify_errors(form)) - File: bitBoard/bitBoard/views/board.py - > Line 577: ret_MAYBE_FUNCTION_NAME = redirect(post.edit_url,code=301) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 627: ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) -File: bitBoard/bitBoard/views/board.py - > reaches line 629, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=True, post_html=escape(parse_text(version.content))) - -Vulnerability 20: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 635, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',form=form, is_thread=edits_thread, is_edit=True, thread=thread, forum=thread.forum, url=post.edit_url) - -Vulnerability 21: -File: bitBoard/bitBoard/views/board.py - > User input at line 564, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 568: thread = post.thread - File: bitBoard/bitBoard/views/board.py - > Line 583: edits_thread = thread.is_basic_thread and posts_before == 0 - File: bitBoard/bitBoard/views/board.py - > Line 587: cur_version = post.current_version - File: bitBoard/bitBoard/views/board.py - > Line 588: form_cls = edits_threadThreadFormPostForm - File: bitBoard/bitBoard/views/board.py - > Line 589: form = form_cls(obj=post, content=cur_version.content, title=thread.title, subtitle=thread.subtitle) - File: bitBoard/bitBoard/views/board.py - > Line 600: ret_MAYBE_FUNCTION_NAME = jsonify(form_html=html) - File: bitBoard/bitBoard/views/board.py - > Line 604: version = PostVersion(content=form.content.data, post=post, creator=g.user, created_at=datetime.datetime.now(), created_ip=request.remote_addr) - File: bitBoard/bitBoard/views/board.py - > Line 613: post.current_version = version - File: bitBoard/bitBoard/views/board.py - > Line 616: version = cur_version - File: bitBoard/bitBoard/views/board.py - > Line 619: thread.title = form.title.data - File: bitBoard/bitBoard/views/board.py - > Line 620: thread.subtitle = form.subtitle.data - File: bitBoard/bitBoard/views/board.py - > Line 621: thread.slug = slugify(thread.title) -File: bitBoard/bitBoard/views/board.py - > reaches line 643, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_edited=False, errors=jsonify_errors(form)) - -Vulnerability 22: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 669, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.delete_url,code=301) - -Vulnerability 23: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 679, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(post.url,code=303) - -Vulnerability 24: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 681, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_deleted=True, post_html=render_template('post_box.html',post=post)) - -Vulnerability 25: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 681, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(was_deleted=True, post_html=render_template('post_box.html',post=post)) - -Vulnerability 26: -File: bitBoard/bitBoard/views/board.py - > User input at line 656, trigger word "get(": - post = Post.query.get(post_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 660: thread = post.thread -File: bitBoard/bitBoard/views/board.py - > reaches line 686, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirm_post_delete.html',post=post, thread=post.thread, forum=post.thread.forum, url=post.delete_url) - -Vulnerability 27: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 710, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 28: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 757, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(thread.url,code=303) - -Vulnerability 29: -File: bitBoard/bitBoard/views/board.py - > User input at line 696, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 703: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 704: url = thread.move_url - File: bitBoard/bitBoard/views/board.py - > Line 730: form = MoveThreadForm(destforum=thread.forum_id) - File: bitBoard/bitBoard/views/board.py - > Line 734: new_forum_id = form.destforum.data - File: bitBoard/bitBoard/views/board.py - > Line 741: old_forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 743: old_forum.post_count -= thread.post_count - File: bitBoard/bitBoard/views/board.py - > Line 745: thread.forum_id = new_forum_id - File: bitBoard/bitBoard/views/board.py - > Line 749: new_forum.post_count += thread.post_count -File: bitBoard/bitBoard/views/board.py - > reaches line 760, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('move_thread.html',form=form, forum=forum, thread=thread, url=url) - -Vulnerability 30: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 802, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url,code=301) - -Vulnerability 31: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 869, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = form.redirect(url=thread.url) - -Vulnerability 32: -File: bitBoard/bitBoard/views/board.py - > User input at line 775, trigger word "get(": - thread = Thread.query.get(thread_id) -Reassigned in: - File: bitBoard/bitBoard/views/board.py - > Line 782: forum = thread.forum - File: bitBoard/bitBoard/views/board.py - > Line 785: url = thread.sticky_url - File: bitBoard/bitBoard/views/board.py - > Line 787: url = thread.lock_url - File: bitBoard/bitBoard/views/board.py - > Line 791: url = thread.follow_url - File: bitBoard/bitBoard/views/board.py - > Line 808: old_value = thread.is_stickied - File: bitBoard/bitBoard/views/board.py - > Line 822: old_value = thread.is_locked - File: bitBoard/bitBoard/views/board.py - > Line 836: old_value = thread.is_followed_by(g.user) - File: bitBoard/bitBoard/views/board.py - > Line 866: ret_MAYBE_FUNCTION_NAME = jsonify(toast=msg, link_title=link_title) -File: bitBoard/bitBoard/views/board.py - > reaches line 871, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirm.html',form=form, crumbs_type='thread', forum=forum, thread=thread, final_crumb='%s Thread' % cap_verb, message=message, url=url) - -Vulnerability 33: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 34: -File: bitBoard/bitBoard/views/base.py - > User input at line 49, trigger word "get(": - target = get_redirect_target() or url -Reassigned in: - File: bitBoard/bitBoard/views/base.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: bitBoard/bitBoard/views/base.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values),code=303) - -Vulnerability 35: -File: bitBoard/bitBoard/views/wiki.py - > User input at line 31, trigger word "get(": - revision = WikiRevision.query.get(revision_id) -Reassigned in: - File: bitBoard/bitBoard/views/wiki.py - > Line 29: ret_MAYBE_FUNCTION_NAME = redirect(page.url,code=303) -File: bitBoard/bitBoard/views/wiki.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('wiki_page.html',is_old_revision=True, page=page, revision=revision) - -Vulnerability 36: -File: bitBoard/bitBoard/views/user.py - > User input at line 36, trigger word ".data": - user = User.query.filter(db.func.lower(User.name) == db.func.lower(self.name.data)).first() -Reassigned in: - File: bitBoard/bitBoard/views/user.py - > Line 44: self.user = user -File: bitBoard/bitBoard/views/user.py - > reaches line 36, trigger word "filter(": - user = User.query.filter(db.func.lower(User.name) == db.func.lower(self.name.data)).first() - -Vulnerability 37: -File: bitBoard/bitBoard/views/user.py - > User input at line 124, trigger word "get(": - user = User.query.get(id) -File: bitBoard/bitBoard/views/user.py - > reaches line 128, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(user.url,code=301) - -Vulnerability 38: -File: bitBoard/bitBoard/views/user.py - > User input at line 124, trigger word "get(": - user = User.query.get(id) -File: bitBoard/bitBoard/views/user.py - > reaches line 129, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('profile.html',user=user) - - - -byu-osl/familytree-sample-app -https://github.com/byu-osl/familytree-sample-app -Entry file: familytree-sample-app/app.py -Scanned: 2016-10-20 09:01:33.767461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmiasko/flask-barcode -https://github.com/kmiasko/flask-barcode -Entry file: flask-barcode/wsgi.py -Scanned: 2016-10-20 09:01:35.260714 -No vulnerabilities found. - - -jayzcode/helloflask -https://github.com/jayzcode/helloflask -Entry file: helloflask/hello.py -Scanned: 2016-10-20 09:01:38.785491 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: helloflask/vene/lib/python2.6/genericpath.py - -bootandy/flask-sample -https://github.com/bootandy/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 09:01:39.276175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 09:01:39.777898 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JLtheking/FlaskExample -https://github.com/JLtheking/FlaskExample -Entry file: FlaskExample/routes.py -Scanned: 2016-10-20 09:01:41.299086 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -redfive/python-flask -https://github.com/redfive/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 09:01:44.317486 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atbaker/flask-tutorial -https://github.com/atbaker/flask-tutorial -Entry file: None -Scanned: 2016-10-20 09:01:45.321600 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bradmerlin/porty_flask -https://github.com/bradmerlin/porty_flask -Entry file: porty_flask/app.py -Scanned: 2016-10-20 09:01:45.853882 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcilioleite/flask-saude -https://github.com/marcilioleite/flask-saude -Entry file: flask-saude/app/__init__.py -Scanned: 2016-10-20 09:01:52.424237 -Vulnerability 1: -File: flask-saude/app/views.py - > User input at line 11, trigger word "get(": - m = Medico.query.get(1) -File: flask-saude/app/views.py - > reaches line 12, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('medico.html',medico=m) - - - -asap/watchman.flask -https://github.com/asap/watchman.flask -Entry file: None -Scanned: 2016-10-20 09:01:52.947430 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bradmerlin/mxit-spock_flask -https://github.com/bradmerlin/mxit-spock_flask -Entry file: mxit-spock_flask/app.py -Scanned: 2016-10-20 09:01:53.454498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rartavia/flask-babel-example -https://github.com/rartavia/flask-babel-example -Entry file: flask-babel-example/flask-babel-example.py -Scanned: 2016-10-20 09:01:54.748600 -No vulnerabilities found. - - -elidickinson/flask-proxy-demo -https://github.com/elidickinson/flask-proxy-demo -Entry file: flask-proxy-demo/hello.py -Scanned: 2016-10-20 09:02:04.993893 -No vulnerabilities found. - - -bradmerlin/mxit-blackjack_flask -https://github.com/bradmerlin/mxit-blackjack_flask -Entry file: mxit-blackjack_flask/app.py -Scanned: 2016-10-20 09:02:15.037901 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-20 09:02:17.322723 -No vulnerabilities found. - - -wangxiaoxiao88/python-bookmanager -https://github.com/wangxiaoxiao88/python-bookmanager -Entry file: python-bookmanager/app.py -Scanned: 2016-10-20 09:02:18.696106 -No vulnerabilities found. - - -bettertest-org/flask_app_skeleton_on_gae -https://github.com/bettertest-org/flask_app_skeleton_on_gae -Entry file: flask_app_skeleton_on_gae/lib/flask/sessions.py -Scanned: 2016-10-20 09:02:20.265786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChannelIQ/redis-explorer -https://github.com/ChannelIQ/redis-explorer -Entry file: redis-explorer/redis_explorer/__init__.py -Scanned: 2016-10-20 09:02:20.786498 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -dougdragon/fuckyeanouns.com -https://github.com/dougdragon/fuckyeanouns.com -Entry file: None -Scanned: 2016-10-20 09:02:26.296281 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brocksamson/minesweeper -https://github.com/brocksamson/minesweeper -Entry file: minesweeper/minesweeper/__init__.py -Scanned: 2016-10-20 09:02:27.532099 -No vulnerabilities found. - - -Sadhanandh/Chat-thumbnailer -https://github.com/Sadhanandh/Chat-thumbnailer -Entry file: Chat-thumbnailer/urllib2-enabled/flask_app.py -Scanned: 2016-10-20 09:02:28.029803 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -znewman01/creepy -https://github.com/znewman01/creepy -Entry file: creepy/creepy/app.py -Scanned: 2016-10-20 09:02:30.528388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aliismayilov/microblog -https://github.com/aliismayilov/microblog -Entry file: None -Scanned: 2016-10-20 09:02:31.058045 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -konrad/annotation_helper_web_app -https://github.com/konrad/annotation_helper_web_app -Entry file: annotation_helper_web_app/annotate.py -Scanned: 2016-10-20 09:02:32.425187 -No vulnerabilities found. - - -smerritt/tempurl-signer -https://github.com/smerritt/tempurl-signer -Entry file: tempurl-signer/app.py -Scanned: 2016-10-20 09:02:33.687137 -No vulnerabilities found. - - -laiqing/crossFireWall-Search -https://github.com/laiqing/crossFireWall-Search -Entry file: crossFireWall-Search/google-enchance.py -Scanned: 2016-10-20 09:02:35.260947 -No vulnerabilities found. - - -lepture/flask-oauthlib -https://github.com/lepture/flask-oauthlib -Entry file: flask-oauthlib/flask_oauthlib/provider/oauth1.py -Scanned: 2016-10-20 09:02:43.121433 -Vulnerability 1: -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > User input at line 87, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH1_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 90: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > Line 86: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth1.py - > reaches line 89, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 2: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 104, trigger word "get(": - error_endpoint = self.app.config.get('OAUTH2_PROVIDER_ERROR_ENDPOINT') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 107: ret_MAYBE_FUNCTION_NAME = '/oauth/errors' - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 103: ret_MAYBE_FUNCTION_NAME = error_uri -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 106, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = url_for(error_endpoint) - -Vulnerability 3: -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > User input at line 447, trigger word "get(": - redirect_uri = credentials.get('redirect_uri') -Reassigned in: - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 464: ret_MAYBE_FUNCTION_NAME = redirect(add_params_to_uri(self.error_uri, 'error'str(e))) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 455: ret_MAYBE_FUNCTION_NAME = create_response(ret) - File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > Line 458: ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(self.error_uri)) -File: flask-oauthlib/flask_oauthlib/provider/oauth2.py - > reaches line 461, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(e.in_uri(redirect_uri or self.error_uri)) - - - -miguelgrinberg/Flask-HTTPAuth -https://github.com/miguelgrinberg/Flask-HTTPAuth -Entry file: Flask-HTTPAuth/examples/basic_auth.py -Scanned: 2016-10-20 09:02:45.031833 -No vulnerabilities found. - - -plastboks/Flaskmarks -https://github.com/plastboks/Flaskmarks -Entry file: Flaskmarks/flaskmarks/__init__.py -Scanned: 2016-10-20 09:02:49.648228 -Vulnerability 1: -File: Flaskmarks/flaskmarks/views/marks.py - > User input at line 92, trigger word "get(": - q = request.args.get('q') -Reassigned in: - File: Flaskmarks/flaskmarks/views/marks.py - > Line 98: m = g.user.q_marks_by_string(page, q, t) - File: Flaskmarks/flaskmarks/views/marks.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('marks.allmarks')) -File: Flaskmarks/flaskmarks/views/marks.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mark/index.html',title='Search results for: %s' % q, header='Search results for: '%s'' % q, marks=m) - -Vulnerability 2: -File: Flaskmarks/flaskmarks/views/marks.py - > User input at line 93, trigger word "get(": - t = request.args.get('type') -Reassigned in: - File: Flaskmarks/flaskmarks/views/marks.py - > Line 98: m = g.user.q_marks_by_string(page, q, t) - File: Flaskmarks/flaskmarks/views/marks.py - > Line 96: ret_MAYBE_FUNCTION_NAME = redirect(url_for('marks.allmarks')) -File: Flaskmarks/flaskmarks/views/marks.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mark/index.html',title='Search results for: %s' % q, header='Search results for: '%s'' % q, marks=m) - -Vulnerability 3: -File: Flaskmarks/flaskmarks/views/auth.py - > User input at line 33, trigger word ".data": - u = User.by_uname_or_email(form.username.data) -File: Flaskmarks/flaskmarks/views/auth.py - > reaches line 38, trigger word "flash(": - flash('Welcome %s.' % u.username,category='success') - - - -sintezcs/flask -https://github.com/sintezcs/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 09:02:50.208050 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -klen/mixer -https://github.com/klen/mixer -Entry file: mixer/tests/test_flask.py -Scanned: 2016-10-20 09:02:54.381461 -No vulnerabilities found. - - -fedenusy/flaskr -https://github.com/fedenusy/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 09:02:55.359682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lee814/flaskr -https://github.com/lee814/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 09:02:55.854231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paraboul/FlaskPress -https://github.com/paraboul/FlaskPress -Entry file: None -Scanned: 2016-10-20 09:02:56.366792 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/paraboul/FlaskPress. - -AlexeyMK/gglto_flask -https://github.com/AlexeyMK/gglto_flask -Entry file: gglto_flask/gglto.py -Scanned: 2016-10-20 09:02:57.583570 -Vulnerability 1: -File: gglto_flask/gglto.py - > User input at line 27, trigger word "get(": - base_path = domain_to_redirect_url.get(request.headers['Host'], 'http://google.com/search?q={}') -File: gglto_flask/gglto.py - > reaches line 30, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(base_path.format(query_escaped)) - - - -DamnedFacts/flask-contact -https://github.com/DamnedFacts/flask-contact -Entry file: flask-contact/main.py -Scanned: 2016-10-20 09:02:58.087657 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxbucknell/vanilla_flask -https://github.com/maxbucknell/vanilla_flask -Entry file: vanilla_flask/vanilla/__init__.py -Scanned: 2016-10-20 09:02:59.978826 -No vulnerabilities found. - - -sammyrulez/flask-grolla -https://github.com/sammyrulez/flask-grolla -Entry file: flask-grolla/tests.py -Scanned: 2016-10-20 09:03:02.747870 -Vulnerability 1: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 22, trigger word "url_for(": - next_url = request.args.get('next') or url_for('index') - -Vulnerability 2: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 25, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - -Vulnerability 3: -File: flask-grolla/flask_grolla.py - > User input at line 22, trigger word "get(": - next_url = request.args.get('next') or url_for('index') -File: flask-grolla/flask_grolla.py - > reaches line 32, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url) - - - -duffy25/sample_flask -https://github.com/duffy25/sample_flask -Entry file: sample_flask/sample_flask.py -Scanned: 2016-10-20 09:03:05.255718 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Joinhack/agent -https://github.com/Joinhack/agent -Entry file: agent/flask_sqlalchemy.py -Scanned: 2016-10-20 09:03:16.580430 -Vulnerability 1: -File: agent/agent/views/user.py - > User input at line 14, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/user.py - > Line 17: user = um.getByLoginId(loginid) - File: agent/agent/views/user.py - > Line 18: company = um.getUserCompany(user) - File: agent/agent/views/user.py - > Line 19: region = user.department.region - File: agent/agent/views/user.py - > Line 20: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/user.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user=user, company=company, region=region, cities=cities) - -Vulnerability 2: -File: agent/agent/views/user.py - > User input at line 44, trigger word "form[": - area = request.form['area'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 3: -File: agent/agent/views/user.py - > User input at line 45, trigger word "form[": - name = request.form['section'] -Reassigned in: - File: agent/agent/views/user.py - > Line 46: reg = Region(type=3, name=name, parent_id=area) - File: agent/agent/views/user.py - > Line 49: data = 'value''content''selected'reg.idreg.nameTrue -File: agent/agent/views/user.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0data) - -Vulnerability 4: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 5: -File: agent/agent/views/house.py - > User input at line 12, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 15: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 16: company = um.getUserCompany(user) - File: agent/agent/views/house.py - > Line 17: cities = dm.getCitiesOfCompany(company) -File: agent/agent/views/house.py - > reaches line 18, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''content'0render_template('/house/community_add.html',cities=cities)) - -Vulnerability 6: -File: agent/agent/views/house.py - > User input at line 34, trigger word "get(": - loginid = session.get(LOGINID) -Reassigned in: - File: agent/agent/views/house.py - > Line 36: user = um.getByLoginId(loginid) - File: agent/agent/views/house.py - > Line 38: data = cmgmt.queryCommunitiesByUserId(user, q) - File: agent/agent/views/house.py - > Line 33: ret_MAYBE_FUNCTION_NAME = jsonify('code''msg'-1'unkown query') -File: agent/agent/views/house.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0toselect(data)) - -Vulnerability 7: -File: agent/agent/views/house.py - > User input at line 45, trigger word "form[": - community_name = request.form['community'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - -Vulnerability 8: -File: agent/agent/views/house.py - > User input at line 46, trigger word "form[": - location = request.form['location'] -Reassigned in: - File: agent/agent/views/house.py - > Line 55: community = Community(name=community_name, location=location) -File: agent/agent/views/house.py - > reaches line 67, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('code''data'0'value''content'community.idcommunity.name) - - - -vasnake/mapfeatureserver -https://github.com/vasnake/mapfeatureserver -Entry file: None -Scanned: 2016-10-20 09:03:17.102371 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vasnake/mapfeatureserver. - -cldershem/WebFlask-CleanTemplate -https://github.com/cldershem/WebFlask-CleanTemplate -Entry file: None -Scanned: 2016-10-20 09:03:17.643554 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tonilxm/1stFlask -https://github.com/tonilxm/1stFlask -Entry file: 1stFlask/src/lib/flask/sessions.py -Scanned: 2016-10-20 09:03:18.167505 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brooks/python-flask-sample -https://github.com/brooks/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-20 09:03:20.764503 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -palei/Just-Another-Flask-App -https://github.com/palei/Just-Another-Flask-App -Entry file: Just-Another-Flask-App/app/__init__.py -Scanned: 2016-10-20 09:03:21.275967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FriendCode/python-flask-sample -https://github.com/FriendCode/python-flask-sample -Entry file: python-flask-sample/hello.py -Scanned: 2016-10-20 09:03:26.802653 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-flask-sample/venv/lib/python2.7/genericpath.py - -thrisp/flarf -https://github.com/thrisp/flarf -Entry file: flarf/examples/example.py -Scanned: 2016-10-20 09:03:29.857642 -No vulnerabilities found. - - -geunieve/ratemyfirefart -https://github.com/geunieve/ratemyfirefart -Entry file: ratemyfirefart/views.py -Scanned: 2016-10-20 09:03:32.175274 -No vulnerabilities found. - - -lhr530124/nozomiServer -https://github.com/lhr530124/nozomiServer -Entry file: None -Scanned: 2016-10-20 09:13:35.307126 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ChannelIQ/redis-explorer -https://github.com/ChannelIQ/redis-explorer -Entry file: redis-explorer/redis_explorer/__init__.py -Scanned: 2016-10-20 09:13:35.859960 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sangallimarco/arduino_raspberry_garden_ui -https://github.com/sangallimarco/arduino_raspberry_garden_ui -Entry file: arduino_raspberry_garden_ui/main.py -Scanned: 2016-10-20 09:13:36.402188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -carlosvin/cmsflask -https://github.com/carlosvin/cmsflask -Entry file: None -Scanned: 2016-10-20 09:15:44.201132 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lpolepeddi/intro-to-flask -https://github.com/lpolepeddi/intro-to-flask -Entry file: intro-to-flask/intro_to_flask/__init__.py -Scanned: 2016-10-20 09:44:07.174301 -No vulnerabilities found. - - -saltycrane/flask-jquery-ajax-example -https://github.com/saltycrane/flask-jquery-ajax-example -Entry file: None -Scanned: 2016-10-20 09:44:07.670867 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saltycrane/flask-jquery-ajax-example. - -bh45k4r/flask -https://github.com/bh45k4r/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:55:49.015185 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gd452/flask -https://github.com/gd452/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:55:49.570463 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -llh335/flask -https://github.com/llh335/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:55:50.153913 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -paulmin55/flask -https://github.com/paulmin55/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:55:50.694965 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -CarlEkerot/flask-orm -https://github.com/CarlEkerot/flask-orm -Entry file: flask-orm/webapp/__init__.py -Scanned: 2016-10-20 10:55:52.080810 -No vulnerabilities found. - - -ibininja/upload_file_python -https://github.com/ibininja/upload_file_python -Entry file: upload_file_python/src/app.py -Scanned: 2016-10-20 10:55:53.354691 -No vulnerabilities found. - - -fraoustin/flaskserver -https://github.com/fraoustin/flaskserver -Entry file: None -Scanned: 2016-10-20 10:55:53.872570 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fraoustin/flaskserver. - -ecerami/hello_flask -https://github.com/ecerami/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 10:55:54.747922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -milinbhakta/flaskmaterialdesign -https://github.com/milinbhakta/flaskmaterialdesign -Entry file: flaskmaterialdesign/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-20 10:56:03.323562 -No vulnerabilities found. - - -Hellemos/flaskapp -https://github.com/Hellemos/flaskapp -Entry file: None -Scanned: 2016-10-20 10:56:04.396691 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Hellemos/flaskapp. - -ssssergey/flaskengine -https://github.com/ssssergey/flaskengine -Entry file: flaskengine/flaskengine/__init__.py -Scanned: 2016-10-20 10:56:04.913875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kai1/flasktest -https://github.com/kai1/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 10:56:05.428965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 10:56:05.954757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -StuartChristie/Flasky -https://github.com/StuartChristie/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 10:56:06.462159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -milinbhakta/flaskjinja -https://github.com/milinbhakta/flaskjinja -Entry file: flaskjinja/hello.py -Scanned: 2016-10-20 10:56:10.521454 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -saucecode/flaskcat -https://github.com/saucecode/flaskcat -Entry file: flaskcat/flaskcat.py -Scanned: 2016-10-20 10:56:11.033738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-20 10:56:11.545912 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ashishkx/Flaskr -https://github.com/ashishkx/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 10:56:12.057025 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jward1/flasktaskr -https://github.com/jward1/flasktaskr -Entry file: None -Scanned: 2016-10-20 10:56:12.549536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -schoolofcode-me/web_blog -https://github.com/schoolofcode-me/web_blog -Entry file: web_blog/src/app.py -Scanned: 2016-10-20 10:56:14.281493 -No vulnerabilities found. - - -iKalin/flask1 -https://github.com/iKalin/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 10:56:15.069575 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -iamrajhans/FlaskPYDemo -https://github.com/iamrajhans/FlaskPYDemo -Entry file: None -Scanned: 2016-10-20 10:56:15.583376 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/iamrajhans/FlaskPYDemo. - -arpm/FlaskTaskr -https://github.com/arpm/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 10:56:16.269829 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -MortalCatalyst/flaskTR -https://github.com/MortalCatalyst/flaskTR -Entry file: flaskTR/flasktaskr/views.py -Scanned: 2016-10-20 10:56:16.793705 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QuadPiece/Quad-Devices-Two -https://github.com/QuadPiece/Quad-Devices-Two -Entry file: Quad-Devices-Two/run.py -Scanned: 2016-10-20 10:56:18.079191 -No vulnerabilities found. - - -dbunker/Flask-Tread -https://github.com/dbunker/Flask-Tread -Entry file: Flask-Tread/examples/blog/app/mainapp/__init__.py -Scanned: 2016-10-20 10:56:18.591907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -martincalvert/GAE-Flask -https://github.com/martincalvert/GAE-Flask -Entry file: GAE-Flask/routes.py -Scanned: 2016-10-20 10:56:19.906197 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fergyfresh/flask-staysafe -https://github.com/fergyfresh/flask-staysafe -Entry file: None -Scanned: 2016-10-20 10:56:48.471433 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arvelt/hello-flask -https://github.com/arvelt/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 10:56:49.056844 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -andrewheekin/flask-metatag -https://github.com/andrewheekin/flask-metatag -Entry file: flask-metatag/app.py -Scanned: 2016-10-20 10:56:50.332891 -No vulnerabilities found. - - -Seneckiy/workwithFlask -https://github.com/Seneckiy/workwithFlask -Entry file: workwithFlask/hello.py -Scanned: 2016-10-20 10:56:52.503267 -No vulnerabilities found. - - -xuefeng-huang/flask_task -https://github.com/xuefeng-huang/flask_task -Entry file: flask_task/__init__.py -Scanned: 2016-10-20 10:56:53.744348 -No vulnerabilities found. - - -ichy-wayland/flask-temp -https://github.com/ichy-wayland/flask-temp -Entry file: flask-temp/main.py -Scanned: 2016-10-20 10:56:54.984922 -No vulnerabilities found. - - -RodrigoVillatoro/flask_blog -https://github.com/RodrigoVillatoro/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 10:56:55.507052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -patrickyoung/simple-flask -https://github.com/patrickyoung/simple-flask -Entry file: simple-flask/hello.py -Scanned: 2016-10-20 10:56:56.730523 -No vulnerabilities found. - - -sancarbar/flask-auth -https://github.com/sancarbar/flask-auth -Entry file: flask-auth/example.py -Scanned: 2016-10-20 10:56:57.271162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lifayi2008/my_flask -https://github.com/lifayi2008/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 10:57:04.904797 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -staticor/learnFlask -https://github.com/staticor/learnFlask -Entry file: None -Scanned: 2016-10-20 10:57:05.392341 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/staticor/learnFlask. - -mehmettaskiner/flask-skeleton -https://github.com/mehmettaskiner/flask-skeleton -Entry file: None -Scanned: 2016-10-20 10:57:05.899871 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mehmettaskiner/flask-skeleton. - -robin-lee/flask-tutorial -https://github.com/robin-lee/flask-tutorial -Entry file: None -Scanned: 2016-10-20 10:57:06.419845 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zonzpoo/blog-flask -https://github.com/zonzpoo/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-20 10:57:07.108245 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arpm/flask-blog -https://github.com/arpm/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 10:57:07.694027 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -raejoon/lype-flask -https://github.com/raejoon/lype-flask -Entry file: lype-flask/lyre.py -Scanned: 2016-10-20 10:57:09.060936 -Vulnerability 1: -File: lype-flask/lyre.py - > User input at line 239, trigger word "get(": - splid = request.args.get('spl', None) -Reassigned in: - File: lype-flask/lyre.py - > Line 252: plid = splid - File: lype-flask/lyre.py - > Line 256: videos = serv.get_videos(youtube, plid) - File: lype-flask/lyre.py - > Line 257: session['playq'] = videos - File: lype-flask/lyre.py - > Line 258: session['nowplaying'] = -1 - File: lype-flask/lyre.py - > Line 267: title = serv.get_title_from_plid(playlists, plid) - File: lype-flask/lyre.py - > Line 269: title = serv.get_title_from_plid(searched_playlists, plid) - File: lype-flask/lyre.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 231: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 240: plid = request.args.get('pl', None) - File: lype-flask/lyre.py - > Line 244: videos = None - File: lype-flask/lyre.py - > Line 246: session['shuffle'] = False - File: lype-flask/lyre.py - > Line 249: session['nowplaying'] = -1 -File: lype-flask/lyre.py - > reaches line 271, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show_player.html',isMine=isMine, playlists=playlists, spls=searched_playlists, pltitle=title, videos=videos) - -Vulnerability 2: -File: lype-flask/lyre.py - > User input at line 240, trigger word "get(": - plid = request.args.get('pl', None) -Reassigned in: - File: lype-flask/lyre.py - > Line 252: plid = splid - File: lype-flask/lyre.py - > Line 256: videos = serv.get_videos(youtube, plid) - File: lype-flask/lyre.py - > Line 257: session['playq'] = videos - File: lype-flask/lyre.py - > Line 258: session['nowplaying'] = -1 - File: lype-flask/lyre.py - > Line 267: title = serv.get_title_from_plid(playlists, plid) - File: lype-flask/lyre.py - > Line 269: title = serv.get_title_from_plid(searched_playlists, plid) - File: lype-flask/lyre.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 231: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 244: videos = None - File: lype-flask/lyre.py - > Line 246: session['shuffle'] = False - File: lype-flask/lyre.py - > Line 249: session['nowplaying'] = -1 -File: lype-flask/lyre.py - > reaches line 271, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show_player.html',isMine=isMine, playlists=playlists, spls=searched_playlists, pltitle=title, videos=videos) - - - -ayusharma/flask-mysql -https://github.com/ayusharma/flask-mysql -Entry file: flask-mysql/app.py -Scanned: 2016-10-20 10:57:11.681919 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-mysql/venv/lib/python2.7/genericpath.py - -zolaneta/hello_flask -https://github.com/zolaneta/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 10:57:12.198768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-20 10:57:12.705770 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -zhaojf85/docker-flask -https://github.com/zhaojf85/docker-flask -Entry file: docker-flask/hello-flask/app.py -Scanned: 2016-10-20 10:57:13.907090 -No vulnerabilities found. - - -higoreduardo/flask-blog -https://github.com/higoreduardo/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 10:57:14.442018 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sholsapp/flask-science -https://github.com/sholsapp/flask-science -Entry file: flask-science/flaskscience/__init__.py -Scanned: 2016-10-20 10:57:15.670472 -No vulnerabilities found. - - -luoluohang/flask_blog -https://github.com/luoluohang/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 10:57:16.160029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mnzr/MegaFlask -https://github.com/mnzr/MegaFlask -Entry file: MegaFlask/app/__init__.py -Scanned: 2016-10-20 10:57:17.517410 -No vulnerabilities found. - - -rchibana/MicroBlog -https://github.com/rchibana/MicroBlog -Entry file: None -Scanned: 2016-10-20 10:57:18.021064 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -damstrom/flask-hello-world -https://github.com/damstrom/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 10:57:18.574565 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -atf1999/Flask-Mega-Tutorial -https://github.com/atf1999/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/app/__init__.py -Scanned: 2016-10-20 10:57:19.071686 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-20 10:57:20.394033 -No vulnerabilities found. - - -apeete/flaskHelloWorld -https://github.com/apeete/flaskHelloWorld -Entry file: flaskHelloWorld/app.py -Scanned: 2016-10-20 10:57:49.021814 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lucidfrontier45/FlaskRethinkDBProject -https://github.com/lucidfrontier45/FlaskRethinkDBProject -Entry file: FlaskRethinkDBProject/webapp/factory.py -Scanned: 2016-10-20 10:57:50.324977 -No vulnerabilities found. - - -jwnwilson/flask_gae_example -https://github.com/jwnwilson/flask_gae_example -Entry file: flask_gae_example/hello_world.py -Scanned: 2016-10-20 10:57:51.966468 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-20 10:57:53.443771 -No vulnerabilities found. - - -Hyvjan/flask-hello-world -https://github.com/Hyvjan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 10:57:54.045921 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -auslander70/flask_hello_world -https://github.com/auslander70/flask_hello_world -Entry file: None -Scanned: 2016-10-20 10:57:54.567598 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/auslander70/flask_hello_world. - -BugisDev/AppSurvey-Flask -https://github.com/BugisDev/AppSurvey-Flask -Entry file: AppSurvey-Flask/app.py -Scanned: 2016-10-20 10:57:55.925873 -No vulnerabilities found. - - -purpleP/flask_alchemy_rest -https://github.com/purpleP/flask_alchemy_rest -Entry file: flask_alchemy_rest/tests/test_endpoints.py -Scanned: 2016-10-20 10:57:58.175913 -No vulnerabilities found. - - -yueyehm/flask_hello_world -https://github.com/yueyehm/flask_hello_world -Entry file: None -Scanned: 2016-10-20 10:57:58.665885 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yueyehm/flask_hello_world. - -lhr0916/flask_redis_task_q -https://github.com/lhr0916/flask_redis_task_q -Entry file: flask_redis_task_q/web/app.py -Scanned: 2016-10-20 10:57:59.905967 -No vulnerabilities found. - - -PrettyPrinted/flask-request-decorators -https://github.com/PrettyPrinted/flask-request-decorators -Entry file: flask-request-decorators/request_decorators.py -Scanned: 2016-10-20 10:58:01.125636 -No vulnerabilities found. - - -ics/Flask-GnuPG -https://github.com/ics/Flask-GnuPG -Entry file: Flask-GnuPG/test_flask_gnupg.py -Scanned: 2016-10-20 10:58:06.351273 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-20 10:58:07.559735 -No vulnerabilities found. - - -leitu/netscaler-flask-api -https://github.com/leitu/netscaler-flask-api -Entry file: netscaler-flask-api/netscaler_api/__init__.py -Scanned: 2016-10-20 10:58:08.895558 -No vulnerabilities found. - - -shilpasanthosh/flask-user-login-app -https://github.com/shilpasanthosh/flask-user-login-app -Entry file: flask-user-login-app/loginapp/__init__.py -Scanned: 2016-10-20 10:58:09.530108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rasselpratomo/simple_flask_restful -https://github.com/rasselpratomo/simple_flask_restful -Entry file: simple_flask_restful/app/__init__.py -Scanned: 2016-10-20 10:58:10.030809 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PrettyPrinted/flask-uploads-intro -https://github.com/PrettyPrinted/flask-uploads-intro -Entry file: flask-uploads-intro/upload.py -Scanned: 2016-10-20 10:58:11.539158 -No vulnerabilities found. - - -kojoidrissa/flask_intro_video -https://github.com/kojoidrissa/flask_intro_video -Entry file: flask_intro_video/8c/app/__init__.py -Scanned: 2016-10-20 10:58:12.936812 -No vulnerabilities found. - - -joe8767/flask-restful-example -https://github.com/joe8767/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-20 10:58:13.477499 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 10:58:13.995889 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -jmsalcido/python-flask-microblog -https://github.com/jmsalcido/python-flask-microblog -Entry file: python-flask-microblog/microblog/app/__init__.py -Scanned: 2016-10-20 10:58:15.668284 -Vulnerability 1: -File: python-flask-microblog/microblog/app/views.py - > User input at line 107, trigger word ".data": - username = form.username.data -Reassigned in: - File: python-flask-microblog/microblog/app/views.py - > Line 108: g.user.username = username - File: python-flask-microblog/microblog/app/views.py - > Line 115: ret_MAYBE_FUNCTION_NAME = render_template('user/edit_user.html',user=user, form=form) -File: python-flask-microblog/microblog/app/views.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_profile',username=username)) - -Vulnerability 2: -File: python-flask-microblog/microblog/app/views.py - > User input at line 107, trigger word ".data": - username = form.username.data -Reassigned in: - File: python-flask-microblog/microblog/app/views.py - > Line 108: g.user.username = username - File: python-flask-microblog/microblog/app/views.py - > Line 115: ret_MAYBE_FUNCTION_NAME = render_template('user/edit_user.html',user=user, form=form) -File: python-flask-microblog/microblog/app/views.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_profile',username=username)) - -Vulnerability 3: -File: python-flask-microblog/microblog/app/forms.py - > User input at line 34, trigger word ".data": - users = User.query.filter(or_(User.username == self.username.data, User.email == self.email.data)).all() -File: python-flask-microblog/microblog/app/forms.py - > reaches line 34, trigger word "filter(": - users = User.query.filter(or_(User.username == self.username.data, User.email == self.email.data)).all() - - - -ettanany/flask-angular-contact-manager -https://github.com/ettanany/flask-angular-contact-manager -Entry file: flask-angular-contact-manager/server/app/__init__.py -Scanned: 2016-10-20 10:58:17.453918 -No vulnerabilities found. - - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-20 10:58:18.760912 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 35, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) - File: WebAppWithFlask/controller.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) -File: WebAppWithFlask/controller.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('update.html',post=post) - -Vulnerability 3: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -marcfilba/videoStreamingFlask -https://github.com/marcfilba/videoStreamingFlask -Entry file: videoStreamingFlask/main.py -Scanned: 2016-10-20 10:58:19.972577 -No vulnerabilities found. - - -Jacob234/Flask-hello-world -https://github.com/Jacob234/Flask-hello-world -Entry file: Flask-hello-world/hello_world.py -Scanned: 2016-10-20 10:58:21.179666 -No vulnerabilities found. - - -PrettyPrinted/flask-restless-post -https://github.com/PrettyPrinted/flask-restless-post -Entry file: flask-restless-post/restless.py -Scanned: 2016-10-20 10:58:22.377693 -No vulnerabilities found. - - -austindavid/flasktaskr-cont -https://github.com/austindavid/flasktaskr-cont -Entry file: flasktaskr-cont/project/__init__.py -Scanned: 2016-10-20 10:58:23.718432 -No vulnerabilities found. - - -RicoChou/MyFlasky -https://github.com/RicoChou/MyFlasky -Entry file: MyFlasky/app/__init__.py -Scanned: 2016-10-20 10:58:25.496222 -Vulnerability 1: -File: MyFlasky/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 55: posts = pagination.items - File: MyFlasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: MyFlasky/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 45: show_followed = False - File: MyFlasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: MyFlasky/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 67: posts = pagination.items -File: MyFlasky/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: MyFlasky/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: MyFlasky/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 134: comments = pagination.items - File: MyFlasky/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: MyFlasky/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: MyFlasky/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: MyFlasky/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: MyFlasky/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: MyFlasky/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: MyFlasky/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 246: comments = pagination.items -File: MyFlasky/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-20 10:58:25.997341 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tdvtoan/scorecard-recognition -https://github.com/tdvtoan/scorecard-recognition -Entry file: scorecard-recognition/project/__init__.py -Scanned: 2016-10-20 10:58:49.530298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -quiqua/docker-flask-celery-redis-example -https://github.com/quiqua/docker-flask-celery-redis-example -Entry file: docker-flask-celery-redis-example/src/myapp/app.py -Scanned: 2016-10-20 10:58:50.783375 -No vulnerabilities found. - - -saichandra286/Complete-Angularjs-Flask-Todo-App -https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App -Entry file: None -Scanned: 2016-10-20 10:58:51.295246 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App. - -MakeSchool-17/trip-planner-flask-backend-thetopplayer -https://github.com/MakeSchool-17/trip-planner-flask-backend-thetopplayer -Entry file: trip-planner-flask-backend-thetopplayer/server.py -Scanned: 2016-10-20 10:58:55.010978 -No vulnerabilities found. - - -MacHu-GWU/flask-restless-api-client-project -https://github.com/MacHu-GWU/flask-restless-api-client-project -Entry file: flask-restless-api-client-project/tests/CustomizeSerialization/run_server.py -Scanned: 2016-10-20 10:58:56.330703 -No vulnerabilities found. - - -whiskeyromeo/bucketlist -https://github.com/whiskeyromeo/bucketlist -Entry file: None -Scanned: 2016-10-20 10:58:56.876870 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CHHLeo/foruV1home_flask_pycharm_practice -https://github.com/CHHLeo/foruV1home_flask_pycharm_practice -Entry file: foruV1home_flask_pycharm_practice/flask_pycharm_practice.py -Scanned: 2016-10-20 10:58:57.402374 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -heamon7/learn-restful -https://github.com/heamon7/learn-restful -Entry file: learn-restful/app.py -Scanned: 2016-10-20 10:59:00.110986 -Vulnerability 1: -File: learn-restful/app.py - > User input at line 82, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: learn-restful/app.py - > reaches line 89, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -goodyvn/flask -https://github.com/goodyvn/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:59:07.655912 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -stevebannon/flask -https://github.com/stevebannon/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 10:59:08.210127 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sebkouba/dynamic-flask-form -https://github.com/sebkouba/dynamic-flask-form -Entry file: dynamic-flask-form/multimodel.py -Scanned: 2016-10-20 10:59:10.530727 -No vulnerabilities found. - - -solutionspecialist/flaskr -https://github.com/solutionspecialist/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 10:59:11.030515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -XingxinLi/flaskr -https://github.com/XingxinLi/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 10:59:11.546821 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 10:59:12.068445 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-20 10:59:13.558691 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mg6/flaskr -https://github.com/mg6/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 10:59:14.067582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourHobbes/flaskdemo -https://github.com/sourHobbes/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 10:59:14.588130 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-20 10:59:17.088401 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 10:59:17.609978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -metakermit/resin-home-automator -https://github.com/metakermit/resin-home-automator -Entry file: resin-home-automator/src/main.py -Scanned: 2016-10-20 10:59:20.474699 -No vulnerabilities found. - - -zerodaemon/flask1 -https://github.com/zerodaemon/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 10:59:21.079309 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -guiti1/FlaskAp -https://github.com/guiti1/FlaskAp -Entry file: FlaskAp/FlaskApp/__init__.py -Scanned: 2016-10-20 10:59:21.731888 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskAp/FlaskApp/venv/lib/python2.7/genericpath.py - -JoshLandry/FlaskBlog -https://github.com/JoshLandry/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 10:59:22.373948 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Bayaz/FlaskBlog -https://github.com/Bayaz/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 10:59:23.964001 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -colindjk/flaskTest -https://github.com/colindjk/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-20 10:59:24.481758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Arsh23/random-crossword-generater -https://github.com/Arsh23/random-crossword-generater -Entry file: random-crossword-generater/app.py -Scanned: 2016-10-20 10:59:26.978459 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 10:59:51.000834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-20 10:59:53.995983 -Vulnerability 1: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 93, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 96, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -petrgru/flask-remenarna -https://github.com/petrgru/flask-remenarna -Entry file: flask-remenarna/app/__init__.py -Scanned: 2016-10-20 10:59:54.983466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spark0128/flask-intro -https://github.com/spark0128/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 10:59:55.505414 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bcb/flask-uploads -https://github.com/bcb/flask-uploads -Entry file: flask-uploads/tests/test-uploads.py -Scanned: 2016-10-20 10:59:57.056671 -No vulnerabilities found. - - -kumaraswins/flask-angular -https://github.com/kumaraswins/flask-angular -Entry file: None -Scanned: 2016-10-20 10:59:57.593387 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rookiebulls/flask-learn -https://github.com/rookiebulls/flask-learn -Entry file: flask-learn/app/__init__.py -Scanned: 2016-10-20 11:00:05.385465 -Vulnerability 1: -File: flask-learn/app/main/views.py - > User input at line 65, trigger word "get(": - post = Post.query.get(post_id) -File: flask-learn/app/main/views.py - > reaches line 67, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('main/article.html',post=post, catergories=catergories) - - - -climberwb/flask-blog -https://github.com/climberwb/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:00:05.963154 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Hyvjan/flask-blog -https://github.com/Hyvjan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:00:06.508123 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -xingyz/flask_thebutton -https://github.com/xingyz/flask_thebutton -Entry file: flask_thebutton/app/__init__.py -Scanned: 2016-10-20 11:00:07.004023 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brittanymcgarr/learningFlask -https://github.com/brittanymcgarr/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-20 11:00:07.647075 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -PrettyPrinted/flask-sessions -https://github.com/PrettyPrinted/flask-sessions -Entry file: flask-sessions/web.py -Scanned: 2016-10-20 11:00:08.142637 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-20 11:00:09.476480 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: None -Scanned: 2016-10-20 11:00:10.002753 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-20 11:00:12.319799 -No vulnerabilities found. - - -evansa/flask-sqlalchemy -https://github.com/evansa/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-20 11:00:12.855935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kajvdh/nao-flask -https://github.com/Kajvdh/nao-flask -Entry file: nao-flask/app.py -Scanned: 2016-10-20 11:00:13.371529 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-20 11:00:13.903864 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -androidzhibinw/Flask-reg -https://github.com/androidzhibinw/Flask-reg -Entry file: Flask-reg/app.py -Scanned: 2016-10-20 11:00:14.432786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-20 11:00:14.923937 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -vrokida/demo-flask -https://github.com/vrokida/demo-flask -Entry file: demo-flask/app.py -Scanned: 2016-10-20 11:00:17.427583 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Clarity-89/server_flask -https://github.com/Clarity-89/server_flask -Entry file: server_flask/Flask Test.py -Scanned: 2016-10-20 11:00:19.256246 -No vulnerabilities found. - - -jcmflenso/flask-udemy -https://github.com/jcmflenso/flask-udemy -Entry file: flask-udemy/hello.py -Scanned: 2016-10-20 11:00:22.484160 -No vulnerabilities found. - - -schakalakka/flask-project -https://github.com/schakalakka/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 11:00:29.565816 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -simongareste/flask-dummy -https://github.com/simongareste/flask-dummy -Entry file: flask-dummy/flask_dummy/__init__.py -Scanned: 2016-10-20 11:00:31.237080 -No vulnerabilities found. - - -liu1020269358/learn-flask -https://github.com/liu1020269358/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 11:00:31.958188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -foobaar/flask-expt -https://github.com/foobaar/flask-expt -Entry file: flask-expt/flask-experiment.py -Scanned: 2016-10-20 11:00:33.311517 -No vulnerabilities found. - - -lucafaggianelli/flask-skeleton -https://github.com/lucafaggianelli/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:00:33.826345 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lucafaggianelli/flask-skeleton. - -econne01/flask_blog -https://github.com/econne01/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:00:51.318768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdeamon/flask_app -https://github.com/mdeamon/flask_app -Entry file: None -Scanned: 2016-10-20 11:00:51.839532 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mdeamon/flask_app. - -dlrice/hello-flask -https://github.com/dlrice/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 11:00:52.388936 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:00:54.929858 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -devyash/Intelligent-Public-Grievance-System -https://github.com/devyash/Intelligent-Public-Grievance-System -Entry file: Intelligent-Public-Grievance-System/app.py -Scanned: 2016-10-20 11:00:56.439036 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/__init__.py -Scanned: 2016-10-20 11:00:56.966226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -afaki077/minitweet -https://github.com/afaki077/minitweet -Entry file: None -Scanned: 2016-10-20 11:00:58.505841 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/afaki077/minitweet. - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-20 11:00:59.844969 -No vulnerabilities found. - - -sbm367/flaskTest2 -https://github.com/sbm367/flaskTest2 -Entry file: flaskTest2/flaskTest.py -Scanned: 2016-10-20 11:01:07.127606 -No vulnerabilities found. - - -emil-k/climate-compare_FlaskApp -https://github.com/emil-k/climate-compare_FlaskApp -Entry file: climate-compare_FlaskApp/__init__.py -Scanned: 2016-10-20 11:01:07.707101 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: climate-compare_FlaskApp/venv/lib/python2.7/genericpath.py - -daytonight/Flask-Web-Development-code -https://github.com/daytonight/Flask-Web-Development-code -Entry file: Flask-Web-Development-code/venv/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-20 11:01:16.245093 -No vulnerabilities found. - - -lkpanganiban/flask-mega-tutorial -https://github.com/lkpanganiban/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 11:01:16.820083 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-20 11:01:23.675689 -No vulnerabilities found. - - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-20 11:01:25.222899 -No vulnerabilities found. - - -afborodin/simple-mysql-flask-app -https://github.com/afborodin/simple-mysql-flask-app -Entry file: simple-mysql-flask-app/app/__init__.py -Scanned: 2016-10-20 11:01:25.759343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dternyak/my-react-flask-blog -https://github.com/dternyak/my-react-flask-blog -Entry file: my-react-flask-blog/index.py -Scanned: 2016-10-20 11:01:27.039595 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -skriems/flask-cherrypy-dockerized -https://github.com/skriems/flask-cherrypy-dockerized -Entry file: flask-cherrypy-dockerized/app.py -Scanned: 2016-10-20 11:01:28.339505 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-20 11:01:29.635216 -No vulnerabilities found. - - -broak/flask-hello-world -https://github.com/broak/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:01:30.285760 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ABaldwinHunter/flask-clone-classic -https://github.com/ABaldwinHunter/flask-clone-classic -Entry file: flask-clone-classic/setup.py -Scanned: 2016-10-20 11:01:31.914127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ldrunner100/flask_hello_world -https://github.com/ldrunner100/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:01:32.435897 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ldrunner100/flask_hello_world. - -FinleySmile/flask_blog_demo -https://github.com/FinleySmile/flask_blog_demo -Entry file: flask_blog_demo/flask_blog_demo.py -Scanned: 2016-10-20 11:01:35.119831 -Vulnerability 1: -File: flask_blog_demo/flask_blog_demo.py - > User input at line 63, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flask_blog_demo/flask_blog_demo.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_entries')) -File: flask_blog_demo/flask_blog_demo.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',username=username, error=error) - - - -quandrei/godzilla-foxfire-flask -https://github.com/quandrei/godzilla-foxfire-flask -Entry file: godzilla-foxfire-flask/app/__init__.py -Scanned: 2016-10-20 11:01:37.808537 -No vulnerabilities found. - - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-20 11:01:38.508220 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/genericpath.py - -RodrigoVillatoro/flask_social_network -https://github.com/RodrigoVillatoro/flask_social_network -Entry file: flask_social_network/app/__init__.py -Scanned: 2016-10-20 11:01:41.577372 -Vulnerability 1: -File: flask_social_network/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 56: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 61: posts = pagination.items - File: flask_social_network/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 62, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask_social_network/app/main/views.py - > User input at line 50, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 48: show_followed = False - File: flask_social_network/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 62, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask_social_network/app/main/views.py - > User input at line 74, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 75: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 80: posts = pagination.items -File: flask_social_network/app/main/views.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_social_network/app/main/views.py - > User input at line 146, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 148: page = post.comments.count() - 1 // current_app.config['APP_COMMENTS_PER_PAGE'] + 1 - File: flask_social_network/app/main/views.py - > Line 150: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 155: comments = pagination.items - File: flask_social_network/app/main/views.py - > Line 145: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.post',id=post.id, page=-1)) -File: flask_social_network/app/main/views.py - > reaches line 156, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask_social_network/app/main/views.py - > User input at line 220, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 221: pagination = user.followers.paginate(page,per_page=current_app.config['APP_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 226: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_social_network/app/main/views.py - > Line 219: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 228, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='main.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask_social_network/app/main/views.py - > User input at line 244, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 245: pagination = user.followed.paginate(page,per_page=current_app.config['APP_FOLLOWING_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 250: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_social_network/app/main/views.py - > Line 243: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 252, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='main.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask_social_network/app/main/views.py - > User input at line 282, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 283: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 288: comments = pagination.items -File: flask_social_network/app/main/views.py - > reaches line 289, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 24, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 27, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 11: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 51, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 14: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 23, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 17: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 19, trigger word "url_for(": - prev_page = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 22, trigger word "url_for(": - next_page = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - -Vulnerability 20: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 47, trigger word "url_for(": - prev_page = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 50, trigger word "url_for(": - next_page = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - - - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-20 11:01:42.116729 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -p00gz/flask-imdbratings-app-backend -https://github.com/p00gz/flask-imdbratings-app-backend -Entry file: flask-imdbratings-app-backend/imdbRatings/__init__.py -Scanned: 2016-10-20 11:01:42.661494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -moonlitesolutions/flask_rest_template -https://github.com/moonlitesolutions/flask_rest_template -Entry file: flask_rest_template/flask_rest/api/api.py -Scanned: 2016-10-20 11:01:55.959618 -No vulnerabilities found. - - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:01:56.530915 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -wasw100/flask-sqlalchemy-demo2 -https://github.com/wasw100/flask-sqlalchemy-demo2 -Entry file: flask-sqlalchemy-demo2/hello.py -Scanned: 2016-10-20 11:01:57.050868 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -artisanofcode/flask-generic-views -https://github.com/artisanofcode/flask-generic-views -Entry file: flask-generic-views/tests/__init__.py -Scanned: 2016-10-20 11:01:57.564714 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -mekanix/flask-bootstrap-sql-rest -https://github.com/mekanix/flask-bootstrap-sql-rest -Entry file: flask-bootstrap-sql-rest/manage.py -Scanned: 2016-10-20 11:01:58.923293 -No vulnerabilities found. - - -ayesandarmoe/microblog_flask_tutorial -https://github.com/ayesandarmoe/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 11:02:00.799597 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexwilkerson/flask-hello-world -https://github.com/alexwilkerson/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:02:01.351327 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-20 11:02:02.750852 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 35, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) - File: WebAppWithFlask/controller.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) -File: WebAppWithFlask/controller.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('update.html',post=post) - -Vulnerability 3: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -yaoelvon/flask-uwsgi-demo -https://github.com/yaoelvon/flask-uwsgi-demo -Entry file: flask-uwsgi-demo/DeployingFlask/myflaskapp.py -Scanned: 2016-10-20 11:02:08.070493 -No vulnerabilities found. - - -Owen-Gillespie/FeatureLabsFlaskDemo -https://github.com/Owen-Gillespie/FeatureLabsFlaskDemo -Entry file: FeatureLabsFlaskDemo/main.py -Scanned: 2016-10-20 11:02:08.775452 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sheldonsmickley/flaskemail_app -https://github.com/sheldonsmickley/flaskemail_app -Entry file: flaskemail_app/emails.py -Scanned: 2016-10-20 11:02:10.195218 -Vulnerability 1: -File: flaskemail_app/emails.py - > User input at line 57, trigger word "form[": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) -Reassigned in: - File: flaskemail_app/emails.py - > Line 58: url = url.fetchall()[0][0] -File: flaskemail_app/emails.py - > reaches line 57, trigger word "execute(": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) - -Vulnerability 2: -File: flaskemail_app/emails.py - > User input at line 57, trigger word "form[": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) -Reassigned in: - File: flaskemail_app/emails.py - > Line 58: url = url.fetchall()[0][0] -File: flaskemail_app/emails.py - > reaches line 59, trigger word "execute(": - c.execute('INSERT into emails (company_name, email, url) values (?, ?, ?)', (request.form['existing_company'], request.form['email'], url)) - - - -tianxie/my_flasky -https://github.com/tianxie/my_flasky -Entry file: None -Scanned: 2016-10-20 11:02:10.725620 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tianxie/my_flasky. - -richardsop/REST-API -https://github.com/richardsop/REST-API -Entry file: REST-API/app.py -Scanned: 2016-10-20 11:02:17.247589 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shas15/Betting-Chips -https://github.com/shas15/Betting-Chips -Entry file: Betting-Chips/test.py -Scanned: 2016-10-20 11:02:18.669321 -Vulnerability 1: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 22, trigger word "filter(": - found = User.query.filter(User.id == login_id, User.password == login_password).first() - -Vulnerability 2: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 22, trigger word "filter(": - found = User.query.filter(User.id == login_id, User.password == login_password).first() - -Vulnerability 3: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 27, trigger word "jsonify(": - print(jsonify('id''password''stats'login_idlogin_password'success').get_data(as_text=True)) - -Vulnerability 4: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 27, trigger word "jsonify(": - print(jsonify('id''password''stats'login_idlogin_password'success').get_data(as_text=True)) - -Vulnerability 5: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 6: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 7: -File: Betting-Chips/Models/User.py - > User input at line 45, trigger word "form[": - signup_name = request.form['name'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 49: user.name = signup_name -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 8: -File: Betting-Chips/Models/User.py - > User input at line 46, trigger word "form[": - signup_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 50: user.id = signup_id -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 9: -File: Betting-Chips/Models/User.py - > User input at line 47, trigger word "form[": - signup_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 51: user.password = signup_password -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 10: -File: Betting-Chips/Models/User.py - > User input at line 45, trigger word "form[": - signup_name = request.form['name'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 49: user.name = signup_name -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 11: -File: Betting-Chips/Models/User.py - > User input at line 46, trigger word "form[": - signup_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 50: user.id = signup_id -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 12: -File: Betting-Chips/Models/User.py - > User input at line 47, trigger word "form[": - signup_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 51: user.password = signup_password -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - - - -malong5219/SampleBlog -https://github.com/malong5219/SampleBlog -Entry file: SampleBlog/app/__init__.py -Scanned: 2016-10-20 11:02:25.209943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-20 11:02:26.709360 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tusharpawar/Agrostar_Flaskr -https://github.com/tusharpawar/Agrostar_Flaskr -Entry file: None -Scanned: 2016-10-20 11:02:27.218902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -eunseo9808/fakeArtist -https://github.com/eunseo9808/fakeArtist -Entry file: fakeArtist/test.py -Scanned: 2016-10-20 11:02:28.620461 -No vulnerabilities found. - - -semonalbertyeah/quickflask -https://github.com/semonalbertyeah/quickflask -Entry file: quickflask/app.py -Scanned: 2016-10-20 11:02:29.143921 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jyang22/Flasky_blog -https://github.com/jyang22/Flasky_blog -Entry file: Flasky_blog/app/__init__.py -Scanned: 2016-10-20 11:02:30.706141 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aceokay/microblog -https://github.com/aceokay/microblog -Entry file: None -Scanned: 2016-10-20 11:02:31.278943 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dantin/microblog -https://github.com/dantin/microblog -Entry file: None -Scanned: 2016-10-20 11:02:32.771549 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -suzf/Flask -https://github.com/suzf/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:02:39.133029 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -buntyke/Flask -https://github.com/buntyke/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:02:39.676361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nowaja/flask -https://github.com/nowaja/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:02:40.210528 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -b-e/flask -https://github.com/b-e/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:02:42.808229 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -psuong/FlaskWorkshop -https://github.com/psuong/FlaskWorkshop -Entry file: FlaskWorkshop/jinja-templating/app.py -Scanned: 2016-10-20 11:02:45.550825 -No vulnerabilities found. - - -BLKStone/flask_image_search -https://github.com/BLKStone/flask_image_search -Entry file: flask_image_search/app/app.py -Scanned: 2016-10-20 11:03:02.139799 -No vulnerabilities found. - - -yj0914/flask- -https://github.com/yj0914/flask- -Entry file: flask-/num1.py -Scanned: 2016-10-20 11:03:03.397646 -No vulnerabilities found. - - -Bleezworld/flask_skeleton -https://github.com/Bleezworld/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 11:03:03.900960 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -TwilioDevEd/lead-alerts-flask -https://github.com/TwilioDevEd/lead-alerts-flask -Entry file: None -Scanned: 2016-10-20 11:03:04.398207 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TwilioDevEd/lead-alerts-flask. - -soasme/flask-perm -https://github.com/soasme/flask-perm -Entry file: flask-perm/example.py -Scanned: 2016-10-20 11:03:09.093476 -Vulnerability 1: -File: flask-perm/tests/test_blueprint.py - > User input at line 68, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions')) -File: flask-perm/tests/test_blueprint.py - > reaches line 68, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions')) - -Vulnerability 2: -File: flask-perm/tests/test_blueprint.py - > User input at line 73, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') -File: flask-perm/tests/test_blueprint.py - > reaches line 73, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') - -Vulnerability 3: -File: flask-perm/tests/test_blueprint.py - > User input at line 80, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 80, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) - -Vulnerability 4: -File: flask-perm/tests/test_blueprint.py - > User input at line 87, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 87, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 5: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 114, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_permission',permission_id=permission['id'])) - -Vulnerability 6: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 121, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 7: -File: flask-perm/tests/test_blueprint.py - > User input at line 172, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 171: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 173, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_permission',user_permission_id=id)) - -Vulnerability 8: -File: flask-perm/tests/test_blueprint.py - > User input at line 188, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 187: resp = add_user_group_permission(client, user_group['id'], permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 189, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_group_permission',user_group_permission_id=id)) - -Vulnerability 9: -File: flask-perm/tests/test_blueprint.py - > User input at line 199, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 198: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 199, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') - -Vulnerability 10: -File: flask-perm/tests/test_blueprint.py - > User input at line 210, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 209: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 210, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 11: -File: flask-perm/tests/test_blueprint.py - > User input at line 221, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 220: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 221, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') - -Vulnerability 12: -File: flask-perm/tests/test_blueprint.py - > User input at line 232, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 231: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 232, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 13: -File: flask-perm/tests/test_blueprint.py - > User input at line 245, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) -File: flask-perm/tests/test_blueprint.py - > reaches line 245, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) - -Vulnerability 14: -File: flask-perm/tests/test_blueprint.py - > User input at line 280, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 279: resp = add_user_group_member(client, 1, user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 281, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_user_from_user_group',user_group_member_id=id)) - -Vulnerability 15: -File: flask-perm/tests/test_blueprint.py - > User input at line 291, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 291, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) - -Vulnerability 16: -File: flask-perm/tests/test_blueprint.py - > User input at line 304, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_users')) -File: flask-perm/tests/test_blueprint.py - > reaches line 304, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_users')) - -Vulnerability 17: -File: flask-perm/tests/test_blueprint.py - > User input at line 309, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) -File: flask-perm/tests/test_blueprint.py - > reaches line 309, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) - -Vulnerability 18: -File: flask-perm/flask_perm/admin.py - > User input at line 12, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERM_ADMIN_PREFIX') + '/api'current_app.config.get('PERM_ADMIN_PREFIX')current_app.config.get('DEBUG') -Reassigned in: - File: flask-perm/flask_perm/admin.py - > Line 10: ret_MAYBE_FUNCTION_NAME = redirect(url_for('perm-admin.login')) -File: flask-perm/flask_perm/admin.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/perm-admin/index.html',render_data) - - - -rishipuri/flasktodo -https://github.com/rishipuri/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-20 11:03:09.870651 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Hyvjan/flasktaskr -https://github.com/Hyvjan/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:03:10.390175 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zachary-russell/Flaskr -https://github.com/zachary-russell/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 11:03:10.898877 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -storress/Flaskserver -https://github.com/storress/Flaskserver -Entry file: Flaskserver/main.py -Scanned: 2016-10-20 11:03:12.169068 -No vulnerabilities found. - - -dadasoz-cuelogic/flaskapp -https://github.com/dadasoz-cuelogic/flaskapp -Entry file: None -Scanned: 2016-10-20 11:03:12.671520 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dadasoz-cuelogic/flaskapp. - -expersso/flaskr -https://github.com/expersso/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:03:13.174881 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 11:03:17.691102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:03:18.196905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nickaustinlee/flasktaskr -https://github.com/nickaustinlee/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:03:25.713359 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:03:27.231580 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xavinso/flasktaskr -https://github.com/xavinso/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:03:27.742252 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CharlieWinters/flaskapi -https://github.com/CharlieWinters/flaskapi -Entry file: flaskapi/aydaapi3.py -Scanned: 2016-10-20 11:03:28.439607 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapi/flaskenv/lib/python2.7/genericpath.py - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:03:30.004358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 11:03:31.652181 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -apeete/flaskBlog -https://github.com/apeete/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 11:03:32.266429 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-20 11:03:34.026898 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/genericpath.py - -cyan-blue/my_flask -https://github.com/cyan-blue/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 11:03:34.675208 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -zachary-russell/Flask-Microblog -https://github.com/zachary-russell/Flask-Microblog -Entry file: Flask-Microblog/microblog/app/__init__.py -Scanned: 2016-10-20 11:03:37.744200 -No vulnerabilities found. - - -samwuu/flask_demo -https://github.com/samwuu/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 11:03:39.273335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hnb2/flask-customers -https://github.com/hnb2/flask-customers -Entry file: flask-customers/customers/__init__.py -Scanned: 2016-10-20 11:03:40.716385 -Vulnerability 1: -File: flask-customers/customers/front/view.py - > User input at line 32, trigger word ".data": - customer = Customer(email=form.email.data, password=form.password.data) -Reassigned in: - File: flask-customers/customers/front/view.py - > Line 30: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/front/view.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(id=customer.id) - -Vulnerability 2: -File: flask-customers/customers/back/view.py - > User input at line 71, trigger word ".data": - customer = Customer(email=form.email.data, password=AdminCustomer._generate_password()) -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 69: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(customer=customer.json) - -Vulnerability 3: -File: flask-customers/customers/back/view.py - > User input at line 147, trigger word ".data": - page = form.page.data -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 151: start = page * CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 152: stop = start + CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 154: raw_customers = CustomerService.get_customers(start=start, stop=stop) - File: flask-customers/customers/back/view.py - > Line 145: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 159, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(current_page=page, total_pages=int(total_pages), customers=[customer.json for customer in raw_customers]) - - - -LeonNie52/Learn_Flask -https://github.com/LeonNie52/Learn_Flask -Entry file: Learn_Flask/hello.py -Scanned: 2016-10-20 11:03:45.511261 -Vulnerability 1: -File: Learn_Flask/app/main/views.py - > User input at line 42, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 50: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 52: posts = pagination.items - File: Learn_Flask/app/main/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.blog')) -File: Learn_Flask/app/main/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Learn_Flask/app/main/views.py - > User input at line 45, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 43: show_followed = False - File: Learn_Flask/app/main/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.blog')) -File: Learn_Flask/app/main/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Learn_Flask/app/main/views.py - > User input at line 68, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 70: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Learn_Flask/app/main/views.py - > Line 72: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 75: comments = pagination.items - File: Learn_Flask/app/main/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Learn_Flask/app/main/views.py - > reaches line 76, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: Learn_Flask/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Learn_Flask/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Learn_Flask/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: Learn_Flask/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Learn_Flask/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Learn_Flask/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Learn_Flask/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 246: comments = pagination.items -File: Learn_Flask/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -penguin-penpen/learnFlask -https://github.com/penguin-penpen/learnFlask -Entry file: None -Scanned: 2016-10-20 11:03:46.038397 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/penguin-penpen/learnFlask. - -raindrop4steven/tornadoFlask -https://github.com/raindrop4steven/tornadoFlask -Entry file: tornadoFlask/hello.py -Scanned: 2016-10-20 11:03:47.596642 -No vulnerabilities found. - - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-20 11:03:50.800664 -Vulnerability 1: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 93, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 96, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -cjmochrie/Flask-Demo -https://github.com/cjmochrie/Flask-Demo -Entry file: None -Scanned: 2016-10-20 11:03:53.344614 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cjmochrie/Flask-Demo. - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 11:03:57.894288 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-20 11:04:04.238747 -No vulnerabilities found. - - -olive42/moz-flask -https://github.com/olive42/moz-flask -Entry file: moz-flask/hello.py -Scanned: 2016-10-20 11:04:05.449054 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: None -Scanned: 2016-10-20 11:04:05.987176 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-20 11:04:07.199061 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-20 11:04:09.740035 -Vulnerability 1: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 162, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit.html',categories=categories, category_id=category.id, item=item, login=login_session.get('username')) - -Vulnerability 2: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - -Vulnerability 3: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - - - -jaramago/flask-basic -https://github.com/jaramago/flask-basic -Entry file: flask-basic/app/__init__.py -Scanned: 2016-10-20 11:04:12.109939 -No vulnerabilities found. - - -valdemarpereira/flask_tutorial -https://github.com/valdemarpereira/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:04:13.095709 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jit-1/flask-microblog -https://github.com/jit-1/flask-microblog -Entry file: None -Scanned: 2016-10-20 11:04:13.595072 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nof4444/Flask-mongodb -https://github.com/nof4444/Flask-mongodb -Entry file: Flask-mongodb/app.py -Scanned: 2016-10-20 11:04:14.162063 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-mongodb/env/lib/python2.7/genericpath.py - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-20 11:04:18.719888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VictorDMor/flask-app -https://github.com/VictorDMor/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 11:04:19.260403 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunway1988/MyFlask -https://github.com/sunway1988/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-20 11:04:26.547461 -No vulnerabilities found. - - -setiaji/learn_flask -https://github.com/setiaji/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:04:28.094279 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -catcoderphp/flask-test -https://github.com/catcoderphp/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:04:28.629584 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -ottoman91/flask_tutorial -https://github.com/ottoman91/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:04:30.632594 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HiagoMayk/projetoFlask -https://github.com/HiagoMayk/projetoFlask -Entry file: projetoFlask/routes.py -Scanned: 2016-10-20 11:04:32.944866 -No vulnerabilities found. - - -nimeshkverma/Versioned_Flask -https://github.com/nimeshkverma/Versioned_Flask -Entry file: Versioned_Flask/app/__init__.py -Scanned: 2016-10-20 11:04:34.705666 -No vulnerabilities found. - - -huyquyet/flask-demo -https://github.com/huyquyet/flask-demo -Entry file: None -Scanned: 2016-10-20 11:04:36.758928 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/huyquyet/flask-demo. - -seonhyeshin/flask-mysql -https://github.com/seonhyeshin/flask-mysql -Entry file: flask-mysql/app.py -Scanned: 2016-10-20 11:04:40.857329 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-mysql/venv/lib/python2.7/genericpath.py - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:04:41.342685 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PhilipGough/flask_api -https://github.com/PhilipGough/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 11:04:46.883426 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-20 11:04:55.288310 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-20 11:04:56.554635 -No vulnerabilities found. - - -mburke05/flask_tutorial -https://github.com/mburke05/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:04:57.067163 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/__init__.py -Scanned: 2016-10-20 11:04:58.607363 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjuppa/microblog -https://github.com/rjuppa/microblog -Entry file: None -Scanned: 2016-10-20 11:05:04.123185 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -depaoli/FlaskAppSample -https://github.com/depaoli/FlaskAppSample -Entry file: FlaskAppSample/flask_app_sample/__init__.py -Scanned: 2016-10-20 11:05:06.390674 -No vulnerabilities found. - - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-20 11:05:06.931366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AlexProv/flaskRestApiSkeleton -https://github.com/AlexProv/flaskRestApiSkeleton -Entry file: flaskRestApiSkeleton/flaskServer.py -Scanned: 2016-10-20 11:05:09.910773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xavinso/flask_hello_world -https://github.com/xavinso/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:05:11.454022 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xavinso/flask_hello_world. - -aetherwu/Flask-Docker-Template -https://github.com/aetherwu/Flask-Docker-Template -Entry file: Flask-Docker-Template/flask/web/__init__.py -Scanned: 2016-10-20 11:05:21.733159 -Vulnerability 1: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 234, trigger word ".data": - kw = form.name.data -File: Flask-Docker-Template/flask/web/views.py - > reaches line 236, trigger word "filter(": - user = User.query.filter(User.nickname == kw).first() - -Vulnerability 2: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 562, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Docker-Template/flask/web/views.py - > Line 550: user = User.query.filter_by(email=user_email).first() - File: Flask-Docker-Template/flask/web/views.py - > Line 552: current_user.id = user.id - File: Flask-Docker-Template/flask/web/views.py - > Line 577: current_user.id = user.id -File: Flask-Docker-Template/flask/web/views.py - > reaches line 554, trigger word "set_cookie(": - response.set_cookie('user_email', str(user.email),expires=time.time() + 6000 * 60) - -Vulnerability 3: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 562, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Docker-Template/flask/web/views.py - > Line 550: user = User.query.filter_by(email=user_email).first() - File: Flask-Docker-Template/flask/web/views.py - > Line 552: current_user.id = user.id - File: Flask-Docker-Template/flask/web/views.py - > Line 577: current_user.id = user.id -File: Flask-Docker-Template/flask/web/views.py - > reaches line 587, trigger word "set_cookie(": - response.set_cookie('user_email', str(user.email),expires=time.time() + 6000 * 60) - - - -tommyblue/flask-react-blog -https://github.com/tommyblue/flask-react-blog -Entry file: flask-react-blog/initializer.py -Scanned: 2016-10-20 11:05:23.175997 -No vulnerabilities found. - - -MikeHannon/python_flask_teams -https://github.com/MikeHannon/python_flask_teams -Entry file: python_flask_teams/server.py -Scanned: 2016-10-20 11:05:23.702892 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomquirk/js-flavoured-flask -https://github.com/tomquirk/js-flavoured-flask -Entry file: js-flavoured-flask/app/__init__.py -Scanned: 2016-10-20 11:05:25.731113 -No vulnerabilities found. - - -gtlambert/first_flask_app -https://github.com/gtlambert/first_flask_app -Entry file: first_flask_app/project.py -Scanned: 2016-10-20 11:05:26.293844 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-20 11:05:27.569922 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-20 11:05:34.367679 -No vulnerabilities found. - - -Ryanglambert/playing_with_flask -https://github.com/Ryanglambert/playing_with_flask -Entry file: playing_with_flask/hello.py -Scanned: 2016-10-20 11:05:34.903661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-20 11:05:35.492857 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/genericpath.py - -orjanv/ESVtoLeetFlaskApp -https://github.com/orjanv/ESVtoLeetFlaskApp -Entry file: ESVtoLeetFlaskApp/app.py -Scanned: 2016-10-20 11:05:36.016780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ptmccarthy/flask-microblog-tutorial -https://github.com/ptmccarthy/flask-microblog-tutorial -Entry file: flask-microblog-tutorial/app/__init__.py -Scanned: 2016-10-20 11:05:37.398746 -No vulnerabilities found. - - -bronka/flask-hello-world -https://github.com/bronka/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:05:37.939188 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -sidthakur/docker-single-nginx-flask -https://github.com/sidthakur/docker-single-nginx-flask -Entry file: docker-single-nginx-flask/app/app.py -Scanned: 2016-10-20 11:05:39.271672 -No vulnerabilities found. - - -mbreisch/flask-hello-world -https://github.com/mbreisch/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:05:39.832591 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -zxqwerxz/test_flask_deploy -https://github.com/zxqwerxz/test_flask_deploy -Entry file: test_flask_deploy/hello.py -Scanned: 2016-10-20 11:05:41.112805 -No vulnerabilities found. - - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-20 11:05:41.647652 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lwjones/flask-hello-world -https://github.com/lwjones/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:05:42.196677 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Pensu/flask-ppc64le -https://github.com/Pensu/flask-ppc64le -Entry file: flask-ppc64le/app.py -Scanned: 2016-10-20 11:05:42.710805 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leonidas/flask-spa-routing-example -https://github.com/leonidas/flask-spa-routing-example -Entry file: None -Scanned: 2016-10-20 11:05:43.210173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leonidas/flask-spa-routing-example. - -renmmotp/Ren_Learns_Flask -https://github.com/renmmotp/Ren_Learns_Flask -Entry file: Ren_Learns_Flask/flaskr/flaskr.py -Scanned: 2016-10-20 11:05:48.704096 -No vulnerabilities found. - - -posenberg/Flask-Kickstarter-Clone -https://github.com/posenberg/Flask-Kickstarter-Clone -Entry file: Flask-Kickstarter-Clone/punchstarter/__init__.py -Scanned: 2016-10-20 11:05:57.805257 -Vulnerability 1: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 42, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 43: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 46, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 47: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=600, height=550) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 53: image_filename = uploaded_image['public_id'] - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 56, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 42, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 43: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 46, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 47: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=600, height=550) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 53: image_filename = uploaded_image['public_id'] - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 6: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 56, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 7: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 81, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 8: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 9: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 10: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 11: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 115, trigger word "get(": - query = request.args.get('q') or '' -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 124: query_text = query != ''query'all projects' -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 116, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 12: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 115, trigger word "get(": - query = request.args.get('q') or '' -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 124: query_text = query != ''query'all projects' -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 126, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query_text, projects=projects, project_count=project_count) - - - -pythonvietnam/meetup01-flask -https://github.com/pythonvietnam/meetup01-flask -Entry file: meetup01-flask/hello_world.py -Scanned: 2016-10-20 11:05:59.395980 -Vulnerability 1: -File: meetup01-flask/template.py - > User input at line 9, trigger word "get(": - name = request.args.get('name', 'guy') -File: meetup01-flask/template.py - > reaches line 10, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',name=name) - - - -palden/flask-hello-world -https://github.com/palden/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:05:59.961548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -shane-kercheval/flask-postgresql-template -https://github.com/shane-kercheval/flask-postgresql-template -Entry file: flask-postgresql-template/app_factory.py -Scanned: 2016-10-20 11:06:07.534640 -Vulnerability 1: -File: flask-postgresql-template/app.py - > User input at line 49, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-postgresql-template/app.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-postgresql-template/app.py - > reaches line 53, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('app_default')) - -Vulnerability 2: -File: flask-postgresql-template/app.py - > User input at line 49, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-postgresql-template/app.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-postgresql-template/app.py - > reaches line 53, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('app_default')) - - - -charanjp/flask -https://github.com/charanjp/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:06:09.595587 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -yasskh/flask -https://github.com/yasskh/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:06:10.129787 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -poxstone/flask -https://github.com/poxstone/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:06:10.666448 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -FlaskTutorial/Flask -https://github.com/FlaskTutorial/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:06:12.351812 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OnlySHI/flask -https://github.com/OnlySHI/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:06:13.927225 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jvuori/flask-uwsgi-nginx-haproxy-docker -https://github.com/jvuori/flask-uwsgi-nginx-haproxy-docker -Entry file: flask-uwsgi-nginx-haproxy-docker/web/app.py -Scanned: 2016-10-20 11:06:23.186644 -No vulnerabilities found. - - -akupara/flask_inspector -https://github.com/akupara/flask_inspector -Entry file: flask_inspector/example/app.py -Scanned: 2016-10-20 11:06:25.732937 -No vulnerabilities found. - - -soasme/flask-personal-access-token -https://github.com/soasme/flask-personal-access-token -Entry file: flask-personal-access-token/example.py -Scanned: 2016-10-20 11:06:29.826455 -Vulnerability 1: -File: flask-personal-access-token/flask_personal_access_token/admin.py - > User input at line 18, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_API_PREFIX')current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_PREFIX')current_app.config.get('DEBUG') -File: flask-personal-access-token/flask_personal_access_token/admin.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/personal_access_token/index.html',render_data) - - - -shinycoo/flaskmvcsample -https://github.com/shinycoo/flaskmvcsample -Entry file: flaskmvcsample/app.py -Scanned: 2016-10-20 11:06:31.413031 -No vulnerabilities found. - - -alexwilkerson/flasktaskr -https://github.com/alexwilkerson/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:06:31.918707 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 11:06:32.434402 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apeete/flasktaskr -https://github.com/apeete/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:06:34.960300 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:06:35.459488 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slippers/flasksec -https://github.com/slippers/flasksec -Entry file: flasksec/main/__init__.py -Scanned: 2016-10-20 11:06:38.782669 -No vulnerabilities found. - - -rui7157/Flask-NvRay-Blog -https://github.com/rui7157/Flask-NvRay-Blog -Entry file: Flask-NvRay-Blog/vendor/flask/sessions.py -Scanned: 2016-10-20 11:06:47.198129 -No vulnerabilities found. - - -Ineeza/FlaskAppBuilder -https://github.com/Ineeza/FlaskAppBuilder -Entry file: FlaskAppBuilder/src/classes/__init__.py -Scanned: 2016-10-20 11:06:47.771574 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-20 11:06:48.445175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DamithaPerera/FlaskApp -https://github.com/DamithaPerera/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 11:06:49.056793 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dreammis/Flask02 -https://github.com/dreammis/Flask02 -Entry file: Flask02/app/__init__.py -Scanned: 2016-10-20 11:06:50.341616 -No vulnerabilities found. - - -junniepat/FlaskApp -https://github.com/junniepat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 11:06:50.924494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YoungGer/FlaskApps -https://github.com/YoungGer/FlaskApps -Entry file: FlaskApps/pdClassifier/app.py -Scanned: 2016-10-20 11:06:53.289213 -Vulnerability 1: -File: FlaskApps/pdClassifier/app.py - > User input at line 81, trigger word "form[": - review = request.form['pdreview'] -Reassigned in: - File: FlaskApps/pdClassifier/app.py - > Line 82: y = classify(review) - File: FlaskApps/pdClassifier/app.py - > Line 82: proba = classify(review) - File: FlaskApps/pdClassifier/app.py - > Line 84: ret_MAYBE_FUNCTION_NAME = render_template('reviewform.html',form=form) -File: FlaskApps/pdClassifier/app.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',content=review, prediction=y, probability=round(proba * 100, 2)) - - - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 11:06:53.861785 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -deyoppe/FlaskFire -https://github.com/deyoppe/FlaskFire -Entry file: FlaskFire/core/system/app.py -Scanned: 2016-10-20 11:06:55.230452 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-20 11:06:55.766640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-20 11:06:56.374085 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/genericpath.py - -allianRoman/flask-intro -https://github.com/allianRoman/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:06:56.868991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hunt3ri/temp-flask -https://github.com/hunt3ri/temp-flask -Entry file: temp-flask/app/__init__.py -Scanned: 2016-10-20 11:06:59.309816 -No vulnerabilities found. - - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:07:00.948603 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Jiezhi/HelloFlask -https://github.com/Jiezhi/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-20 11:07:05.465364 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -szhjia/flask-blog -https://github.com/szhjia/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:07:09.013401 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -amybethx/flask-intro -https://github.com/amybethx/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:10.528649 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -terriwong/flask-intro -https://github.com/terriwong/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:11.026892 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arkenidar/flask-example -https://github.com/arkenidar/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-20 11:07:11.544532 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ztomazin/flask_exp -https://github.com/ztomazin/flask_exp -Entry file: None -Scanned: 2016-10-20 11:07:13.080863 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ltaziri/Flask-Intro -https://github.com/ltaziri/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 11:07:14.612018 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alitsiya/flask-intro -https://github.com/alitsiya/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:23.124461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-20 11:07:25.551932 -No vulnerabilities found. - - -sandiego206/flask_microblog -https://github.com/sandiego206/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 11:07:27.091944 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Odava/flask-jwt -https://github.com/Odava/flask-jwt -Entry file: flask-jwt/tests/conftest.py -Scanned: 2016-10-20 11:07:32.133128 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-20 11:07:38.932854 -Vulnerability 1: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 162, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit.html',categories=categories, category_id=category.id, item=item, login=login_session.get('username')) - -Vulnerability 2: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - -Vulnerability 3: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - - - -ajoshdee/flask-test -https://github.com/ajoshdee/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:07:40.396912 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -palden/flask-blog -https://github.com/palden/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:07:40.930796 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -humaneu/flask_app -https://github.com/humaneu/flask_app -Entry file: None -Scanned: 2016-10-20 11:07:41.461935 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/humaneu/flask_app. - -cclittle13/flask-intro -https://github.com/cclittle13/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:47.983099 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -emlam/flask-intro -https://github.com/emlam/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:48.492405 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spyapali/Flask-intro -https://github.com/spyapali/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-20 11:07:49.006630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -celiawaggoner/flask-intro -https://github.com/celiawaggoner/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:50.502431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cachar/flask-intro -https://github.com/cachar/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:50.998164 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KTAtkinson/flask-intro -https://github.com/KTAtkinson/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:51.495743 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pasysxa/flask-mall -https://github.com/pasysxa/flask-mall -Entry file: flask-mall/myapp/__init__.py -Scanned: 2016-10-20 11:07:54.704296 -No vulnerabilities found. - - -fendouai/venv_flask -https://github.com/fendouai/venv_flask -Entry file: venv_flask/cookie.py -Scanned: 2016-10-20 11:07:55.310031 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: venv_flask/venv/lib/python2.7/genericpath.py - -bekkam/flask-intro -https://github.com/bekkam/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:55.834054 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anniehe/flask-intro -https://github.com/anniehe/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:56.327002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vianey81/flask-intro -https://github.com/Vianey81/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:57.854801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcbishop/flask-intro -https://github.com/mcbishop/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:07:59.359731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alenakruchkova/flask-intro -https://github.com/alenakruchkova/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:00.858473 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -florenceloi/flask-intro -https://github.com/florenceloi/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:06.396263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoriRunyon/flask-intro -https://github.com/DoriRunyon/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:09.935062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kooder18/flask_Ecommerce -https://github.com/kooder18/flask_Ecommerce -Entry file: flask_Ecommerce/project.py -Scanned: 2016-10-20 11:08:11.918919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leiyue/learning_flask -https://github.com/leiyue/learning_flask -Entry file: learning_flask/miniblog/miniblog.py -Scanned: 2016-10-20 11:08:13.191597 -No vulnerabilities found. - - -qistchan/WebhookFlask -https://github.com/qistchan/WebhookFlask -Entry file: WebhookFlask/WebHook_Listener.py -Scanned: 2016-10-20 11:08:14.474611 -No vulnerabilities found. - - -Bandurin/Test-flask -https://github.com/Bandurin/Test-flask -Entry file: Test-flask/db_app.py -Scanned: 2016-10-20 11:08:24.403095 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: Flask_intro/flask_app/__init__.py -Scanned: 2016-10-20 11:08:24.924920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -0phelia/flask-app -https://github.com/0phelia/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 11:08:27.434306 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-20 11:08:39.498388 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-20 11:08:40.795774 -No vulnerabilities found. - - -ssam123/flask-tutorial -https://github.com/ssam123/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:08:41.311838 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ziyoung/learningFlask -https://github.com/ziyoung/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-20 11:08:42.494115 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -karayount/flask-intro -https://github.com/karayount/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:42.991471 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -go-bears/flask-intro -https://github.com/go-bears/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:43.509443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mlpeters12/flask-intro -https://github.com/mlpeters12/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:48.036504 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arbonap/flask-intro -https://github.com/arbonap/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:08:48.560273 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nimeshkverma/SolrFlask -https://github.com/nimeshkverma/SolrFlask -Entry file: SolrFlask/app/app_config.py -Scanned: 2016-10-20 11:08:49.073064 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gaozhidf/flask_websocket -https://github.com/gaozhidf/flask_websocket -Entry file: flask_websocket/websocket_py3/manage.py -Scanned: 2016-10-20 11:08:51.428366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hilyas/flask-blog -https://github.com/hilyas/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:08:51.995771 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dimy407/NBC_Flask -https://github.com/dimy407/NBC_Flask -Entry file: NBC_Flask/flask_app.py -Scanned: 2016-10-20 11:08:52.508727 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ltaziri/Flask-Shopping -https://github.com/ltaziri/Flask-Shopping -Entry file: Flask-Shopping/shoppingsite.py -Scanned: 2016-10-20 11:08:54.033822 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jefersondaniel/notebook-api -https://github.com/jefersondaniel/notebook-api -Entry file: notebook-api/app/__init__.py -Scanned: 2016-10-20 11:08:56.459704 -No vulnerabilities found. - - -ddrsmile/flask-hello-world -https://github.com/ddrsmile/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:08:56.995713 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -saviour123/flaskStudentData -https://github.com/saviour123/flaskStudentData -Entry file: flaskStudentData/app.py -Scanned: 2016-10-20 11:08:58.267309 -Vulnerability 1: -File: flaskStudentData/app.py - > User input at line 29, trigger word "form[": - name = request.form['nm'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 2: -File: flaskStudentData/app.py - > User input at line 30, trigger word "form[": - addr = request.form['add'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 3: -File: flaskStudentData/app.py - > User input at line 31, trigger word "form[": - city = request.form['city'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 4: -File: flaskStudentData/app.py - > User input at line 32, trigger word "form[": - pin = request.form['pin'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - - - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-20 11:08:58.808865 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -QLGu/flask-zhihu-demo -https://github.com/QLGu/flask-zhihu-demo -Entry file: flask-zhihu-demo/www/__init__.py -Scanned: 2016-10-20 11:09:06.898485 -Vulnerability 1: -File: flask-zhihu-demo/www/main/views.py - > User input at line 35, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 33: show_followed = False - File: flask-zhihu-demo/www/main/views.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.signin')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',show_followed=show_followed, quoras=quoras, users=users) - -Vulnerability 2: -File: flask-zhihu-demo/www/main/views.py - > User input at line 312, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 313: pagination = user.followed.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 314: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 311: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 316, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注的人', endpoint='main.followed_by', pagination=pagination, follows=follows) - -Vulnerability 3: -File: flask-zhihu-demo/www/main/views.py - > User input at line 327, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 328: pagination = user.followers.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 329: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 326: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 331, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='的关注者', endpoint='main.followers', pagination=pagination, follows=follows) - -Vulnerability 4: -File: flask-zhihu-demo/www/main/views.py - > User input at line 430, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 431: pagination = user.tags.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 432: following_tags = ['tag'item.tag_set for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 429: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 433, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_topics.html',user=user, title='关注的话题', endpoint='main.following_tag', pagination=pagination, following_tags=following_tags) - -Vulnerability 5: -File: flask-zhihu-demo/www/main/views.py - > User input at line 444, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 445: pagination = topic.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 446: tag_followers = ['user'item.user_set for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 443: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 447, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('topic_followers.html',topic=topic, title='人关注了该话题', endpoint='main.tag_followers', pagination=pagination, tag_followers=tag_followers) - -Vulnerability 6: -File: flask-zhihu-demo/www/main/views.py - > User input at line 500, trigger word ".data": - question = Question(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 523: ret_MAYBE_FUNCTION_NAME = render_template('question_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 522, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.question',id=question.id)) - -Vulnerability 7: -File: flask-zhihu-demo/www/main/views.py - > User input at line 500, trigger word ".data": - question = Question(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 523: ret_MAYBE_FUNCTION_NAME = render_template('question_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 522, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.question',id=question.id)) - -Vulnerability 8: -File: flask-zhihu-demo/www/main/views.py - > User input at line 563, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 564: pagination = user.user_questions.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 565: questions = pagination.items - File: flask-zhihu-demo/www/main/views.py - > Line 569: questions[j] = questions[j + 1] - File: flask-zhihu-demo/www/main/views.py - > Line 569: questions[j + 1] = questions[j] - File: flask-zhihu-demo/www/main/views.py - > Line 562: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 570, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_questions.html',user=user, endpoint='main.people_questions', pagination=pagination, questions=questions) - -Vulnerability 9: -File: flask-zhihu-demo/www/main/views.py - > User input at line 617, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 618: pagination = question.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 619: question_followers = ['user'item.q_user for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 616: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 620, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('question_followers.html',question=question, endpoint='main.question_followers', pagination=pagination, question_followers=question_followers) - -Vulnerability 10: -File: flask-zhihu-demo/www/main/views.py - > User input at line 705, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 706: pagination = user.user_answers.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 707: answers = pagination.items - File: flask-zhihu-demo/www/main/views.py - > Line 711: answers[j] = answers[j + 1] - File: flask-zhihu-demo/www/main/views.py - > Line 711: answers[j + 1] = answers[j] - File: flask-zhihu-demo/www/main/views.py - > Line 704: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 712, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_answers.html',user=user, endpoint='main.people_answers', pagination=pagination, answers=answers) - -Vulnerability 11: -File: flask-zhihu-demo/www/main/views.py - > User input at line 791, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 792: pagination = answer.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 793: answer_followers = ['user'item.a_user for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 790: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 794, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('answer_followers.html',answer=answer, endpoint='main.answer_followers', pagination=pagination, answer_followers=answer_followers) - -Vulnerability 12: -File: flask-zhihu-demo/www/main/views.py - > User input at line 855, trigger word ".data": - collection = Collection(title=form.title.data, desc=form.desc.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 865: ret_MAYBE_FUNCTION_NAME = render_template('collection_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 864, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.collection',id=collection.id)) - -Vulnerability 13: -File: flask-zhihu-demo/www/main/views.py - > User input at line 855, trigger word ".data": - collection = Collection(title=form.title.data, desc=form.desc.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 865: ret_MAYBE_FUNCTION_NAME = render_template('collection_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 864, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.collection',id=collection.id)) - - - -AndyMcLEOD/PythonFlaskApp -https://github.com/AndyMcLEOD/PythonFlaskApp -Entry file: PythonFlaskApp/app.py -Scanned: 2016-10-20 11:10:08.053571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mlsh2387/Ex_20160119_Flask-Intro -https://github.com/mlsh2387/Ex_20160119_Flask-Intro -Entry file: Ex_20160119_Flask-Intro/nice.py -Scanned: 2016-10-20 11:10:08.568863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jkravanja/paypal_flask_payment -https://github.com/jkravanja/paypal_flask_payment -Entry file: paypal_flask_payment/payment.py -Scanned: 2016-10-20 11:10:09.077119 -Vulnerability 1: -File: paypal_flask_payment/payment.py - > User input at line 36, trigger word "get(": - paymentId = request.args.get('paymentId') -Reassigned in: - File: paypal_flask_payment/payment.py - > Line 40: payment = paypalrestsdk.Payment.find(paymentId) - File: paypal_flask_payment/payment.py - > Line 42: ret_MAYBE_FUNCTION_NAME = 'OK
paymentId: {}
PayerID: {}
'.format(paymentId, PayerID) - File: paypal_flask_payment/payment.py - > Line 45: ret_MAYBE_FUNCTION_NAME = payment.error -File: paypal_flask_payment/payment.py - > reaches line 41, trigger word "execute(": - if payment.execute('payer_id'PayerID): - -Vulnerability 2: -File: paypal_flask_payment/payment.py - > User input at line 37, trigger word "get(": - PayerID = request.args.get('PayerID') -Reassigned in: - File: paypal_flask_payment/payment.py - > Line 42: ret_MAYBE_FUNCTION_NAME = 'OK
paymentId: {}
PayerID: {}
'.format(paymentId, PayerID) - File: paypal_flask_payment/payment.py - > Line 45: ret_MAYBE_FUNCTION_NAME = payment.error -File: paypal_flask_payment/payment.py - > reaches line 41, trigger word "execute(": - if payment.execute('payer_id'PayerID): - - - -yalove/flask-nginx-gunicorn -https://github.com/yalove/flask-nginx-gunicorn -Entry file: flask-nginx-gunicorn/app/hello.py -Scanned: 2016-10-20 11:10:10.350239 -No vulnerabilities found. - - -tolmun/flask-ng-sample -https://github.com/tolmun/flask-ng-sample -Entry file: flask-ng-sample/project/__init__.py -Scanned: 2016-10-20 11:10:12.290598 -Vulnerability 1: -File: flask-ng-sample/project/api/views.py - > User input at line 132, trigger word ".data": - users = schema.dump(results,many=True).data -File: flask-ng-sample/project/api/views.py - > reaches line 133, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'users) - -Vulnerability 2: -File: flask-ng-sample/project/api/views.py - > User input at line 154, trigger word ".data": - user = schema.dump(results).data -File: flask-ng-sample/project/api/views.py - > reaches line 155, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('user'user) - - - -Michotastico/NetworkInformationFlaskServer -https://github.com/Michotastico/NetworkInformationFlaskServer -Entry file: NetworkInformationFlaskServer/main.py -Scanned: 2016-10-20 11:10:12.829215 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tjhakseth/Nice-Flask-Intro -https://github.com/tjhakseth/Nice-Flask-Intro -Entry file: Nice-Flask-Intro/nice.py -Scanned: 2016-10-20 11:10:14.123900 -No vulnerabilities found. - - -adamphillips/pi-flask-video-streaming -https://github.com/adamphillips/pi-flask-video-streaming -Entry file: pi-flask-video-streaming/app/main.py -Scanned: 2016-10-20 11:10:15.492768 -No vulnerabilities found. - - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-20 11:10:16.761278 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -SeventhResolve/Flask-Intro-Nice-File -https://github.com/SeventhResolve/Flask-Intro-Nice-File -Entry file: Flask-Intro-Nice-File/nice.py -Scanned: 2016-10-20 11:10:18.055733 -No vulnerabilities found. - - -torykit/docker-flask-console -https://github.com/torykit/docker-flask-console -Entry file: docker-flask-console/start.py -Scanned: 2016-10-20 11:10:19.428362 -No vulnerabilities found. - - -koulanurag/Simple-Flask-Application -https://github.com/koulanurag/Simple-Flask-Application -Entry file: Simple-Flask-Application/app.py -Scanned: 2016-10-20 11:10:19.946219 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -graphql-python/flask-graphql -https://github.com/graphql-python/flask-graphql -Entry file: flask-graphql/tests/app.py -Scanned: 2016-10-20 11:10:24.719723 -Vulnerability 1: -File: flask-graphql/tests/test_graphiqlview.py - > User input at line 13, trigger word "get(": - response = client.get(url_for('graphql'),headers='Accept''text/html') -File: flask-graphql/tests/test_graphiqlview.py - > reaches line 13, trigger word "url_for(": - response = client.get(url_for('graphql'),headers='Accept''text/html') - - - -hhstore/flask-annotated -https://github.com/hhstore/flask-annotated -Entry file: flask-annotated/flask-0.5/flask/app.py -Scanned: 2016-10-20 11:10:25.267917 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prakxys/flask -https://github.com/prakxys/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:10:25.859854 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:10:26.540918 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -zhiliang729/flask -https://github.com/zhiliang729/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:10:27.117791 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -iFe1er/flask -https://github.com/iFe1er/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:10:27.699284 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jarogers095/flask-hello-world -https://github.com/jarogers095/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:10:28.265877 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -alex-paterson/Barebones-Flask-and-Caffe-Classifier -https://github.com/alex-paterson/Barebones-Flask-and-Caffe-Classifier -Entry file: Barebones-Flask-and-Caffe-Classifier/app.py -Scanned: 2016-10-20 11:10:28.779275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-20 11:10:30.269827 -No vulnerabilities found. - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-20 11:10:30.813771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fengyc/flasky -https://github.com/fengyc/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:10:31.335400 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshimp/flasktaskr -https://github.com/sshimp/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:10:31.840363 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sharma-abhi/flaskr -https://github.com/sharma-abhi/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:10:32.359348 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kwikiel/flaskr -https://github.com/kwikiel/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:10:32.858557 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tehasdf/flaskexample -https://github.com/tehasdf/flaskexample -Entry file: flaskexample/flaskexample/app.py -Scanned: 2016-10-20 11:10:34.633711 -No vulnerabilities found. - - -sanghyunjooPurdue/flaskr -https://github.com/sanghyunjooPurdue/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:10:35.142257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -becsully/flasktest -https://github.com/becsully/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 11:11:08.714737 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SFurnace/flaskr -https://github.com/SFurnace/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:11:09.227578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:11:09.728109 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AxoSal/GAE-Flask-React-skeleton -https://github.com/AxoSal/GAE-Flask-React-skeleton -Entry file: GAE-Flask-React-skeleton/main.py -Scanned: 2016-10-20 11:11:11.108715 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-20 11:11:11.729581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 11:11:13.348685 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -AnshuOnGit/FlaskServices -https://github.com/AnshuOnGit/FlaskServices -Entry file: FlaskServices/read_file.py -Scanned: 2016-10-20 11:11:19.649770 -Vulnerability 1: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 3: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 4: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -ftanevski4/FlaskPycharm -https://github.com/ftanevski4/FlaskPycharm -Entry file: FlaskPycharm/FlaskPycharm.py -Scanned: 2016-10-20 11:11:20.945320 -No vulnerabilities found. - - -yukoga/flasksample1 -https://github.com/yukoga/flasksample1 -Entry file: flasksample1/hello.py -Scanned: 2016-10-20 11:11:22.174677 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-20 11:11:22.691963 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:11:23.227323 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ddrsmile/flask-blog -https://github.com/ddrsmile/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:11:23.769882 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dasdachs/flask-blog -https://github.com/dasdachs/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:11:24.324139 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yuz989/uwsgi-flask -https://github.com/yuz989/uwsgi-flask -Entry file: uwsgi-flask/main.py -Scanned: 2016-10-20 11:11:25.569163 -No vulnerabilities found. - - -hugoren/flask_login -https://github.com/hugoren/flask_login -Entry file: None -Scanned: 2016-10-20 11:11:26.091742 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hugoren/flask_login. - -jlents/discover-flask -https://github.com/jlents/discover-flask -Entry file: discover-flask/project/__init__.py -Scanned: 2016-10-20 11:11:27.704308 -No vulnerabilities found. - - -jaleskinen/PythonFlask -https://github.com/jaleskinen/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:11:34.305679 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -mhgit1/PythonFlask -https://github.com/mhgit1/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:11:39.729221 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -maukka76/PythonFlask -https://github.com/maukka76/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:11:45.702611 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Namelessi/PythonFlask -https://github.com/Namelessi/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:11:51.578427 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -nimeshkverma/BootstrapFlask -https://github.com/nimeshkverma/BootstrapFlask -Entry file: BootstrapFlask/chehra/test_server/driver.py -Scanned: 2016-10-20 11:11:52.130620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feeman1989/backstage_flask -https://github.com/feeman1989/backstage_flask -Entry file: backstage_flask/app.py -Scanned: 2016-10-20 11:11:52.677259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charanjp/flask_blog -https://github.com/charanjp/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:11:53.209517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-20 11:11:54.592051 -No vulnerabilities found. - - -ddrsmile/flask-taskr -https://github.com/ddrsmile/flask-taskr -Entry file: flask-taskr/views.py -Scanned: 2016-10-20 11:11:55.330117 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-taskr/env/lib/python2.7/genericpath.py - -Roconda/flask-bootstrap -https://github.com/Roconda/flask-bootstrap -Entry file: flask-bootstrap/src/api/__init__.py -Scanned: 2016-10-20 11:11:56.536997 -No vulnerabilities found. - - -maxcell/flask-workshop -https://github.com/maxcell/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-20 11:11:57.535949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sshimp/flask-blog -https://github.com/sshimp/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:11:58.086254 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -PavelMPD/flask_auth -https://github.com/PavelMPD/flask_auth -Entry file: flask_auth/web/server.py -Scanned: 2016-10-20 11:12:00.645618 -No vulnerabilities found. - - -seanwbarry/thinkful_flask -https://github.com/seanwbarry/thinkful_flask -Entry file: thinkful_flask/hello_world_original.py -Scanned: 2016-10-20 11:12:09.362032 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -OrionsSuspenders/flask-blog -https://github.com/OrionsSuspenders/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:12:09.927468 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -DaTimsta/flask-test -https://github.com/DaTimsta/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:12:10.457002 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -sstriatlon/PyFlask -https://github.com/sstriatlon/PyFlask -Entry file: PyFlask/app.py -Scanned: 2016-10-20 11:12:11.094908 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: PyFlask/venv/lib/python2.7/genericpath.py - -Vianey81/Flask-sql -https://github.com/Vianey81/Flask-sql -Entry file: Flask-sql/hackbright.py -Scanned: 2016-10-20 11:12:14.101997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timoparv65/PythonFlask -https://github.com/timoparv65/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:20.144226 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -JRaisala/PythonFlask -https://github.com/JRaisala/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:25.891879 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jraappan/PythonFlask -https://github.com/jraappan/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:31.162227 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -hannu78/PythonFlask -https://github.com/hannu78/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:37.012193 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -marcosf63/flask_app -https://github.com/marcosf63/flask_app -Entry file: None -Scanned: 2016-10-20 11:12:37.539124 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcosf63/flask_app. - -maratkanov-a/flask_project -https://github.com/maratkanov-a/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 11:12:39.126957 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bellcliff/practice-flask -https://github.com/bellcliff/practice-flask -Entry file: practice-flask/hello.py -Scanned: 2016-10-20 11:12:42.377012 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: Flask_intro/flask_app/__init__.py -Scanned: 2016-10-20 11:12:42.906726 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -changddcn/dd-flask -https://github.com/changddcn/dd-flask -Entry file: None -Scanned: 2016-10-20 11:12:43.451205 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/changddcn/dd-flask. - -Decus12/PythonFlask -https://github.com/Decus12/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:48.910465 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -thiltunen78/PythonFlask -https://github.com/thiltunen78/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:12:55.235650 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -tere15/PythonFlask -https://github.com/tere15/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:13:01.124491 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ttakkula/flask_example -https://github.com/ttakkula/flask_example -Entry file: None -Scanned: 2016-10-20 11:13:01.689751 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -satyadevi-nyros/werckers_flask -https://github.com/satyadevi-nyros/werckers_flask -Entry file: werckers_flask/app.py -Scanned: 2016-10-20 11:13:02.996252 -No vulnerabilities found. - - -ltaziri/SQL-Flask -https://github.com/ltaziri/SQL-Flask -Entry file: SQL-Flask/hackbright.py -Scanned: 2016-10-20 11:13:03.518095 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -psavela/PythonFlask -https://github.com/psavela/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:13:08.898810 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -KariR61/PythonFlask -https://github.com/KariR61/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:13:14.765847 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -dhruvsrivastava/flask-intro -https://github.com/dhruvsrivastava/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:13:15.289912 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cjohns38/flask-intro -https://github.com/cjohns38/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:13:15.823098 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -notaweelos/openshift_flask -https://github.com/notaweelos/openshift_flask -Entry file: openshift_flask/helloflask.py -Scanned: 2016-10-20 11:13:17.131147 -No vulnerabilities found. - - -jkeung/flask_microblog -https://github.com/jkeung/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 11:13:17.680117 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shank7485/Flask-APIs -https://github.com/shank7485/Flask-APIs -Entry file: Flask-APIs/APIs/__init__.py -Scanned: 2016-10-20 11:13:19.092280 -Vulnerability 1: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 49, trigger word "get(": - from_address = request.args.get('f_addr') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 52: comp = comparer_address(from_address, to_address, geo_api_key, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 2: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 50, trigger word "get(": - to_address = request.args.get('t_addr') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 52: comp = comparer_address(from_address, to_address, geo_api_key, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 3: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 58, trigger word "get(": - from_latitude = request.args.get('f_lat') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 4: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 59, trigger word "get(": - from_longitude = request.args.get('f_long') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 5: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 60, trigger word "get(": - to_latitude = request.args.get('t_lat') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 6: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 61, trigger word "get(": - to_longitude = request.args.get('t_long') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-20 11:13:20.483247 -Vulnerability 1: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 2: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 3: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 73, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 4: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 78, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 5: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 6: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 7: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 8: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - - - -nntndfrk/untitled -https://github.com/nntndfrk/untitled -Entry file: untitled/untitled.py -Scanned: 2016-10-20 11:13:21.768369 -No vulnerabilities found. - - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-20 11:13:23.068861 -No vulnerabilities found. - - -jgabrielfreitas/FlaskAndParse -https://github.com/jgabrielfreitas/FlaskAndParse -Entry file: FlaskAndParse/hello_flask.py -Scanned: 2016-10-20 11:13:23.604274 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Buuntu/TicTacToe-Flask -https://github.com/Buuntu/TicTacToe-Flask -Entry file: TicTacToe-Flask/tictactoe.py -Scanned: 2016-10-20 11:13:25.035270 -No vulnerabilities found. - - -emlam/project-tracker-flask -https://github.com/emlam/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 11:13:25.616303 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-20 11:13:26.923622 -No vulnerabilities found. - - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-20 11:13:28.783441 -No vulnerabilities found. - - -julyano/MiniCursoFlaskPETCC -https://github.com/julyano/MiniCursoFlaskPETCC -Entry file: MiniCursoFlaskPETCC/routes.py -Scanned: 2016-10-20 11:13:30.484412 -No vulnerabilities found. - - -go-bears/sql-with-flask -https://github.com/go-bears/sql-with-flask -Entry file: sql-with-flask/hackbright.py -Scanned: 2016-10-20 11:13:31.061525 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anniehe/project-tracker-flask -https://github.com/anniehe/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 11:13:31.574476 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neonbadger/project-tracker-flask -https://github.com/neonbadger/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 11:13:32.140985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DoriRunyon/Project-tracker-flask -https://github.com/DoriRunyon/Project-tracker-flask -Entry file: Project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 11:13:37.676722 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EdilvoLima/CursoPythonFlask -https://github.com/EdilvoLima/CursoPythonFlask -Entry file: CursoPythonFlask/routes.py -Scanned: 2016-10-20 11:13:39.143848 -No vulnerabilities found. - - -dternyak/Flask-Postgres-Docker -https://github.com/dternyak/Flask-Postgres-Docker -Entry file: Flask-Postgres-Docker/web/index.py -Scanned: 2016-10-20 11:13:42.463868 -No vulnerabilities found. - - -info3180/python-flask-example -https://github.com/info3180/python-flask-example -Entry file: python-flask-example/hello.py -Scanned: 2016-10-20 11:13:43.739415 -Vulnerability 1: -File: python-flask-example/hello.py - > User input at line 17, trigger word "get(": - name = request.args.get('name') -File: python-flask-example/hello.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('process.html',name=name) - - - -janeygak/Hackbright--SQL-with-Flask -https://github.com/janeygak/Hackbright--SQL-with-Flask -Entry file: Hackbright--SQL-with-Flask/hackbright-web.py -Scanned: 2016-10-20 11:13:44.268592 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SeventhResolve/Project-Tracker-Flask -https://github.com/SeventhResolve/Project-Tracker-Flask -Entry file: Project-Tracker-Flask/hackbright-web.py -Scanned: 2016-10-20 11:13:44.789875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alitsiya/project-tracker-flask -https://github.com/alitsiya/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 11:13:50.337965 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ThomasMarcel/gae-tomalcala-flask -https://github.com/ThomasMarcel/gae-tomalcala-flask -Entry file: gae-tomalcala-flask/main.py -Scanned: 2016-10-20 11:13:56.836530 -No vulnerabilities found. - - -ContinuumIO/flask-kerberos-login -https://github.com/ContinuumIO/flask-kerberos-login -Entry file: flask-kerberos-login/examples/simple.py -Scanned: 2016-10-20 11:14:03.377601 -No vulnerabilities found. - - -badspelr/flask-hello-world -https://github.com/badspelr/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:14:04.046818 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -yoophi/flask-appointment-peewee -https://github.com/yoophi/flask-appointment-peewee -Entry file: flask-appointment-peewee/sched/app.py -Scanned: 2016-10-20 11:14:04.552768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -c1rno/Flask_auth_example -https://github.com/c1rno/Flask_auth_example -Entry file: Flask_auth_example/app/__init__.py -Scanned: 2016-10-20 11:14:10.400808 -No vulnerabilities found. - - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:14:18.084578 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prakxys/flask -https://github.com/prakxys/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:14:18.703674 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:14:19.357953 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -https://github.com/OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -Entry file: Office365-SharePoint-Python-Flask-Sample/src/Python.Office365.AppAuthentication/app.py -Scanned: 2016-10-20 11:14:21.534353 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:14:22.052495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -imperio-wxm/flask-learn -https://github.com/imperio-wxm/flask-learn -Entry file: flask-learn/app/myapp/__init__.py -Scanned: 2016-10-20 11:14:23.815155 -Vulnerability 1: -File: flask-learn/app/myapp/main/views.py - > User input at line 21, trigger word "get(": - page_index = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-learn/app/myapp/main/views.py - > Line 25: pagination = query.paginate(page_index,per_page=20, error_out=False) - File: flask-learn/app/myapp/main/views.py - > Line 27: posts = pagination.items -File: flask-learn/app/myapp/main/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title=_('欢迎来到Ray的博客'), posts=posts, pagination=pagination) - - - -ptrierweiler/myblog -https://github.com/ptrierweiler/myblog -Entry file: None -Scanned: 2016-10-20 11:14:24.361558 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-20 11:14:25.629851 -No vulnerabilities found. - - -msopentechcn/aad-graphapi-flask-demo -https://github.com/msopentechcn/aad-graphapi-flask-demo -Entry file: aad-graphapi-flask-demo/app.py -Scanned: 2016-10-20 11:14:26.953804 -Vulnerability 1: -File: aad-graphapi-flask-demo/app.py - > User input at line 100, trigger word "get(": - error_code = messages.get('error_code') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 2: -File: aad-graphapi-flask-demo/app.py - > User input at line 101, trigger word "get(": - error_message = messages.get('error_message') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 3: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 4: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 5: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 6: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-20 11:14:27.462148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -menglong81/flaskr -https://github.com/menglong81/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:14:27.973789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:14:29.533883 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kmosho/flaskr -https://github.com/kmosho/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:14:31.051200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SticksInHand/flaskr -https://github.com/SticksInHand/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:14:32.572784 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jayShepard/Flasky -https://github.com/jayShepard/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 11:14:33.081860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vineethtw/flaskexamples -https://github.com/vineethtw/flaskexamples -Entry file: flaskexamples/api/simulation.py -Scanned: 2016-10-20 11:14:38.620665 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Duncodes/flasky -https://github.com/Duncodes/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:14:39.140798 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -diegogslomp/flaskr -https://github.com/diegogslomp/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:14:43.137758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Lazyppl/Flaskblog -https://github.com/Lazyppl/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-20 11:14:45.438119 -No vulnerabilities found. - - -playgrdstar/flasktaskr -https://github.com/playgrdstar/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:14:45.975311 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -toricor/flaskr -https://github.com/toricor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:14:50.497693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:14:56.052110 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zeratullich/flaskr -https://github.com/zeratullich/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:15:02.580874 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:15:04.089941 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arose13/HerokuCondaScipyFlaskApp -https://github.com/arose13/HerokuCondaScipyFlaskApp -Entry file: HerokuCondaScipyFlaskApp/Web/app.py -Scanned: 2016-10-20 11:15:05.442648 -No vulnerabilities found. - - -awind/FlaskRestful -https://github.com/awind/FlaskRestful -Entry file: FlaskRestful/app/__init__.py -Scanned: 2016-10-20 11:15:06.861324 -Vulnerability 1: -File: FlaskRestful/app/apis.py - > User input at line 48, trigger word "get(": - user = User.query.get(userid) -File: FlaskRestful/app/apis.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = user_schema.jsonify(user) - - - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 11:15:10.537811 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-20 11:15:16.850326 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-20 11:15:18.509681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aetherwu/FlaskDocker -https://github.com/aetherwu/FlaskDocker -Entry file: FlaskDocker/app/app.py -Scanned: 2016-10-20 11:15:19.816350 -No vulnerabilities found. - - -anniee/flask-intro -https://github.com/anniee/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:15:20.329673 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -angeloski/flask-sandbox -https://github.com/angeloski/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-20 11:15:20.840325 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jonnybazookatone/flask-watchman -https://github.com/jonnybazookatone/flask-watchman -Entry file: None -Scanned: 2016-10-20 11:15:21.356497 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jonnybazookatone/flask-watchman. - -dritux/flask-spark -https://github.com/dritux/flask-spark -Entry file: flask-spark/spark/__init__.py -Scanned: 2016-10-20 11:15:23.661590 -No vulnerabilities found. - - -arvind-iyer/flask-101 -https://github.com/arvind-iyer/flask-101 -Entry file: flask-101/app/__init__.py -Scanned: 2016-10-20 11:15:25.072321 -No vulnerabilities found. - - -vbalien/flask-skeleton -https://github.com/vbalien/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:15:25.586808 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vbalien/flask-skeleton. - -robbintt/flask-template -https://github.com/robbintt/flask-template -Entry file: None -Scanned: 2016-10-20 11:15:26.126881 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/robbintt/flask-template. - -Lucky0604/flask-blog -https://github.com/Lucky0604/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:15:26.714662 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -felipemfp/flask-microblog -https://github.com/felipemfp/flask-microblog -Entry file: None -Scanned: 2016-10-20 11:15:28.227092 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bronka/flask-blog -https://github.com/bronka/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:15:28.772141 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -genagain/learning-flask -https://github.com/genagain/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 11:15:33.380878 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -acknowledge/flask-api -https://github.com/acknowledge/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 11:15:39.398480 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunQian-Andy/flask_mail -https://github.com/JunQian-Andy/flask_mail -Entry file: flask_mail/app/__init__.py -Scanned: 2016-10-20 11:15:40.740412 -No vulnerabilities found. - - -fabricekwizera/flask_intro -https://github.com/fabricekwizera/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-20 11:15:41.266320 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -relman/flask-srv -https://github.com/relman/flask-srv -Entry file: flask-srv/service.py -Scanned: 2016-10-20 11:15:44.940798 -No vulnerabilities found. - - -volgoweb/flask_api -https://github.com/volgoweb/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 11:15:45.464797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leiyue/tutorial_flask -https://github.com/leiyue/tutorial_flask -Entry file: tutorial_flask/base/app.py -Scanned: 2016-10-20 11:15:46.001539 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 11:15:57.074643 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -samgclarke/flask-starter -https://github.com/samgclarke/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 11:16:02.609789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tmingh/learn_flask -https://github.com/Tmingh/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:16:04.117361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-20 11:16:05.418462 -No vulnerabilities found. - - -qiuhaoling/my_flask -https://github.com/qiuhaoling/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 11:16:07.058553 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -ahsanwtc/flask-project -https://github.com/ahsanwtc/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 11:16:16.514362 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -dfitzgerald3/sg_flask -https://github.com/dfitzgerald3/sg_flask -Entry file: sg_flask/__init__.py -Scanned: 2016-10-20 11:16:17.299726 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: sg_flask/venv/lib/python2.7/genericpath.py - -hbldh/flask-pybankid -https://github.com/hbldh/flask-pybankid -Entry file: flask-pybankid/flask_pybankid.py -Scanned: 2016-10-20 11:16:18.807469 -Vulnerability 1: -File: flask-pybankid/flask_pybankid.py - > User input at line 130, trigger word "get(": - text_to_sign = request.args.get('userVisibleData', '') -Reassigned in: - File: flask-pybankid/flask_pybankid.py - > Line 132: response = self.client.sign(text_to_sign, personal_number) - File: flask-pybankid/flask_pybankid.py - > Line 134: ret_MAYBE_FUNCTION_NAME = self.handle_exception(FlaskPyBankIDError.create_from_pybankid_exception(e)) - File: flask-pybankid/flask_pybankid.py - > Line 136: ret_MAYBE_FUNCTION_NAME = self.handle_exception(FlaskPyBankIDError(str(e), 500)) -File: flask-pybankid/flask_pybankid.py - > reaches line 138, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -krlex/flask-resume -https://github.com/krlex/flask-resume -Entry file: flask-resume/manage.py -Scanned: 2016-10-20 11:16:20.136357 -No vulnerabilities found. - - -chadelder/flask-blog -https://github.com/chadelder/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:16:20.717123 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rdrsh/flask-hello -https://github.com/rdrsh/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 11:16:21.249304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Forumouth/flask-simple -https://github.com/Forumouth/flask-simple -Entry file: flask-simple/tests/data/testapp.py -Scanned: 2016-10-20 11:16:22.663100 -No vulnerabilities found. - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-20 11:16:24.069175 -Vulnerability 1: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 2: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 3: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 73, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 4: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 78, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 5: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 6: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 7: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 8: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - - - -playgrdstar/flask-blog -https://github.com/playgrdstar/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:16:24.656357 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rx3bp/flask-freeze -https://github.com/rx3bp/flask-freeze -Entry file: flask-freeze/app.py -Scanned: 2016-10-20 11:16:28.789475 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-20 11:16:30.937643 -No vulnerabilities found. - - -NaoYamaguchi/flask_login -https://github.com/NaoYamaguchi/flask_login -Entry file: None -Scanned: 2016-10-20 11:16:31.441201 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NaoYamaguchi/flask_login. - -njnr/onece -https://github.com/njnr/onece -Entry file: onece/app/__init__.py -Scanned: 2016-10-20 11:16:33.170991 -Vulnerability 1: -File: onece/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 26: posts = pagination.items - File: onece/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: onece/app/main/views.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 43: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: onece/app/main/views.py - > Line 45: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 48: comments = pagination.items - File: onece/app/main/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: onece/app/main/views.py - > reaches line 49, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 3: -File: onece/app/main/views.py - > User input at line 54, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 55: pagination = Location.query.order_by(Location.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 58: locations = pagination.items -File: onece/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('locations.html',locations=locations, pagination=pagination) - -Vulnerability 4: -File: onece/app/main/views.py - > User input at line 117, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 118: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 121: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: onece/app/main/views.py - > Line 116: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 123, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: onece/app/main/views.py - > User input at line 134, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 135: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 138: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: onece/app/main/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -rmaheshkumarblr/FlaskTestingApp -https://github.com/rmaheshkumarblr/FlaskTestingApp -Entry file: FlaskTestingApp/testingFlaskScript.py -Scanned: 2016-10-20 11:16:33.809681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-20 11:16:35.073354 -No vulnerabilities found. - - -joyzhaoyang/FlaskDirectUploader -https://github.com/joyzhaoyang/FlaskDirectUploader -Entry file: FlaskDirectUploader/application.py -Scanned: 2016-10-20 11:16:37.122917 -No vulnerabilities found. - - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-20 11:16:37.769715 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/genericpath.py - -astianseb/flask-simple-distributed-applicaiton -https://github.com/astianseb/flask-simple-distributed-applicaiton -Entry file: flask-simple-distributed-applicaiton/Flasktest/__init__.py -Scanned: 2016-10-20 11:16:40.307648 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-20 11:16:41.587460 -No vulnerabilities found. - - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-20 11:16:42.876349 -No vulnerabilities found. - - -mhgit1/PythonFlask_oma -https://github.com/mhgit1/PythonFlask_oma -Entry file: PythonFlask_oma/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:16:50.394323 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -IvanBodnar/fromzero_flask_blog -https://github.com/IvanBodnar/fromzero_flask_blog -Entry file: fromzero_flask_blog/__init__.py -Scanned: 2016-10-20 11:16:51.865659 -Vulnerability 1: -File: fromzero_flask_blog/author/views.py - > User input at line 27, trigger word "get(": - next = session.get('next') -Reassigned in: - File: fromzero_flask_blog/author/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: fromzero_flask_blog/author/views.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: fromzero_flask_blog/author/views.py - > reaches line 29, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 2: -File: fromzero_flask_blog/blog/views.py - > User input at line 100, trigger word ".data": - title = form.title.data -Reassigned in: - File: fromzero_flask_blog/blog/views.py - > Line 102: slug = slugify(title) - File: fromzero_flask_blog/blog/views.py - > Line 103: post = Post(blog, author, title, body, category, filename, slug) - File: fromzero_flask_blog/blog/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: fromzero_flask_blog/blog/views.py - > reaches line 108, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - -Vulnerability 3: -File: fromzero_flask_blog/blog/views.py - > User input at line 100, trigger word ".data": - title = form.title.data -Reassigned in: - File: fromzero_flask_blog/blog/views.py - > Line 102: slug = slugify(title) - File: fromzero_flask_blog/blog/views.py - > Line 103: post = Post(blog, author, title, body, category, filename, slug) - File: fromzero_flask_blog/blog/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: fromzero_flask_blog/blog/views.py - > reaches line 108, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - - - -alexarnautu/simple-flask-blog -https://github.com/alexarnautu/simple-flask-blog -Entry file: simple-flask-blog/blog.py -Scanned: 2016-10-20 11:16:54.146397 -No vulnerabilities found. - - -apiarian/RPi-GPIO-flask -https://github.com/apiarian/RPi-GPIO-flask -Entry file: RPi-GPIO-flask/server.py -Scanned: 2016-10-20 11:16:55.443851 -No vulnerabilities found. - - -tomov/flask-heroku-backend -https://github.com/tomov/flask-heroku-backend -Entry file: flask-heroku-backend/app/__init__.py -Scanned: 2016-10-20 11:16:58.760874 -No vulnerabilities found. - - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-20 11:17:03.311071 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -akaak/flask-mega-tutorial -https://github.com/akaak/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 11:17:04.838424 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thechad12/Flask-Item-Catalog -https://github.com/thechad12/Flask-Item-Catalog -Entry file: Flask-Item-Catalog/application.py -Scanned: 2016-10-20 11:17:05.382863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -javicacheiro/rest_api_flask -https://github.com/javicacheiro/rest_api_flask -Entry file: rest_api_flask/rest/app/__init__.py -Scanned: 2016-10-20 11:17:12.340264 -No vulnerabilities found. - - -florenceloi/flask-intro-redo -https://github.com/florenceloi/flask-intro-redo -Entry file: flask-intro-redo/nice.py -Scanned: 2016-10-20 11:17:19.128515 -No vulnerabilities found. - - -eric-boone/python-flask-round1 -https://github.com/eric-boone/python-flask-round1 -Entry file: python-flask-round1/app/__init__.py -Scanned: 2016-10-20 11:17:20.439741 -No vulnerabilities found. - - -ddrsmile/flask-taskr-with-blueprint -https://github.com/ddrsmile/flask-taskr-with-blueprint -Entry file: flask-taskr-with-blueprint/project/__init__.py -Scanned: 2016-10-20 11:17:22.707274 -No vulnerabilities found. - - -austinbrovick/flask-book_review_website -https://github.com/austinbrovick/flask-book_review_website -Entry file: flask-book_review_website/app/models/User.py -Scanned: 2016-10-20 11:17:23.720632 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apiaas/gae-flask-base -https://github.com/apiaas/gae-flask-base -Entry file: gae-flask-base/src/main.py -Scanned: 2016-10-20 11:17:26.047607 -No vulnerabilities found. - - -playgrdstar/flask-hello-world -https://github.com/playgrdstar/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:17:26.620938 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -iceskel/flask-restful-api -https://github.com/iceskel/flask-restful-api -Entry file: flask-restful-api/restful/api.py -Scanned: 2016-10-20 11:17:30.157298 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarvazquez/flask_mysql_migrations -https://github.com/oscarvazquez/flask_mysql_migrations -Entry file: None -Scanned: 2016-10-20 11:17:30.725085 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bethesdamd/python_flask_pharma -https://github.com/bethesdamd/python_flask_pharma -Entry file: python_flask_pharma/app.py -Scanned: 2016-10-20 11:17:35.455399 -No vulnerabilities found. - - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:17:37.431215 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:17:38.007948 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ccapudev/flask -https://github.com/ccapudev/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:17:39.110209 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -hezx/flask -https://github.com/hezx/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:17:40.685110 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -its-dirg/Flask-pyoidc -https://github.com/its-dirg/Flask-pyoidc -Entry file: Flask-pyoidc/tests/test_flask_pyoidc.py -Scanned: 2016-10-20 11:17:42.232614 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:17:42.746848 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -karanj112294/flasktutorial -https://github.com/karanj112294/flasktutorial -Entry file: None -Scanned: 2016-10-20 11:17:45.280212 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:17:51.777536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jocelynaladin/flaskworkspace -https://github.com/jocelynaladin/flaskworkspace -Entry file: flaskworkspace/__init__.py -Scanned: 2016-10-20 11:17:53.430203 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KDmytro/flasktaskr -https://github.com/KDmytro/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:17:54.949479 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dreamtiger2016/flaskr -https://github.com/dreamtiger2016/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:17:58.463257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davetromp/flasksqlapi -https://github.com/davetromp/flasksqlapi -Entry file: flasksqlapi/runapi.py -Scanned: 2016-10-20 11:18:04.030838 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:18:05.531237 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:18:06.039865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -psykos/flaskloginskeleton -https://github.com/psykos/flaskloginskeleton -Entry file: flaskloginskeleton/app/__init__.py -Scanned: 2016-10-20 11:18:09.337607 -No vulnerabilities found. - - -AndrewGoldstein/flaskapp -https://github.com/AndrewGoldstein/flaskapp -Entry file: None -Scanned: 2016-10-20 11:18:11.875993 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewGoldstein/flaskapp. - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-20 11:18:18.398507 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nescode/punchstarter -https://github.com/nescode/punchstarter -Entry file: punchstarter/punchstarter/__init__.py -Scanned: 2016-10-20 11:18:19.810943 -Vulnerability 1: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 6: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 7: -File: punchstarter/punchstarter/__init__.py - > User input at line 64, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 8: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 9: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 10: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 11: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 98, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 12: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query, projects=projects, project_count=project_count) - - - -edwardszczepanski/FlaskApplication -https://github.com/edwardszczepanski/FlaskApplication -Entry file: FlaskApplication/app.py -Scanned: 2016-10-20 11:18:20.443063 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskApplication/venv/lib/python2.7/genericpath.py - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-20 11:18:23.372931 -Vulnerability 1: -File: flaskyDeb/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 55: posts = pagination.items - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskyDeb/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 45: show_followed = False - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskyDeb/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 67: posts = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskyDeb/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskyDeb/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 134: comments = pagination.items - File: flaskyDeb/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskyDeb/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskyDeb/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskyDeb/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskyDeb/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 246: comments = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-20 11:18:24.670349 -No vulnerabilities found. - - -chrismontone/flasktaskr2 -https://github.com/chrismontone/flasktaskr2 -Entry file: flasktaskr2/project/__init__.py -Scanned: 2016-10-20 11:18:26.841565 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/runServer.py -Scanned: 2016-10-20 11:18:27.573857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -musicalfish/FlaskApp -https://github.com/musicalfish/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 11:18:28.185775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarmeanwell/FlaskMusic -https://github.com/oscarmeanwell/FlaskMusic -Entry file: FlaskMusic/app/routesun.py -Scanned: 2016-10-20 11:18:28.865823 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TwilioDevEd/eta-notifications-flask -https://github.com/TwilioDevEd/eta-notifications-flask -Entry file: eta-notifications-flask/eta_notifications_flask/__init__.py -Scanned: 2016-10-20 11:18:30.440840 -Vulnerability 1: -File: eta-notifications-flask/eta_notifications_flask/views.py - > User input at line 29, trigger word "get(": - order = Order.query.get(order_id) -File: eta-notifications-flask/eta_notifications_flask/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',order=order) - -Vulnerability 2: -File: eta-notifications-flask/eta_notifications_flask/views.py - > User input at line 63, trigger word "get(": - order = Order.query.get(order_id) -File: eta-notifications-flask/eta_notifications_flask/views.py - > reaches line 67, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',order=order) - - - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-20 11:18:32.179547 -No vulnerabilities found. - - -QsBBQ/flask_test -https://github.com/QsBBQ/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:18:32.805115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pedrocarvalhodev/flask-intro -https://github.com/pedrocarvalhodev/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:18:36.340104 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lawrencexia/flask_notecards -https://github.com/lawrencexia/flask_notecards -Entry file: flask_notecards/app/__init__.py -Scanned: 2016-10-20 11:18:38.756781 -No vulnerabilities found. - - -ameya0909/Flask-Blog -https://github.com/ameya0909/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 11:18:39.278929 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chrismontone/flask-blog -https://github.com/chrismontone/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:18:39.817880 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ziggear/wechat-flask -https://github.com/ziggear/wechat-flask -Entry file: wechat-flask/src/myapp.py -Scanned: 2016-10-20 11:18:41.282666 -No vulnerabilities found. - - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-20 11:18:42.703340 -Vulnerability 1: -File: flask-usages/application/controllers/todo.py - > User input at line 12, trigger word "get(": - todo_id = request.args.get('todo_id') -Reassigned in: - File: flask-usages/application/controllers/todo.py - > Line 17: ret_MAYBE_FUNCTION_NAME = jsonify() -File: flask-usages/application/controllers/todo.py - > reaches line 15, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_idtodo.content) - -Vulnerability 2: -File: flask-usages/application/controllers/todo.py - > User input at line 21, trigger word "get(": - todo = Todo(content=data.get('content')) -File: flask-usages/application/controllers/todo.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_id=todo.id, content=todo.content) - - - -drmalex07/flask-helloworld -https://github.com/drmalex07/flask-helloworld -Entry file: flask-helloworld/helloworld/app.py -Scanned: 2016-10-20 11:18:44.448935 -No vulnerabilities found. - - -Oracleli/flask-try -https://github.com/Oracleli/flask-try -Entry file: None -Scanned: 2016-10-20 11:18:44.969687 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Oracleli/flask-try. - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/test_tokenauth.py -Scanned: 2016-10-20 11:18:46.288086 -No vulnerabilities found. - - -marcosomma/first_flask -https://github.com/marcosomma/first_flask -Entry file: first_flask/app/__init__.py -Scanned: 2016-10-20 11:18:56.692231 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-20 11:18:59.372011 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -meyersj/bootstrap-flask -https://github.com/meyersj/bootstrap-flask -Entry file: bootstrap-flask/app/__init__.py -Scanned: 2016-10-20 11:19:05.678725 -No vulnerabilities found. - - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 11:19:06.674688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jarogers095/flask-blog -https://github.com/jarogers095/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:19:09.241372 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Jelly-Yu/learningFlask -https://github.com/Jelly-Yu/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-20 11:19:12.913575 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -ratherbsurfing/flask-cms -https://github.com/ratherbsurfing/flask-cms -Entry file: flask-cms/flaskCMS/flaskCMS/__init__.py -Scanned: 2016-10-20 11:19:18.491674 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -philtrep/Flask-Skeleton -https://github.com/philtrep/Flask-Skeleton -Entry file: None -Scanned: 2016-10-20 11:19:19.026972 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/philtrep/Flask-Skeleton. - -cynrick/kickstarter-flask -https://github.com/cynrick/kickstarter-flask -Entry file: kickstarter-flask/kickstarter/__init__.py -Scanned: 2016-10-20 11:19:21.465604 -Vulnerability 1: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 29, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 30: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: kickstarter-flask/kickstarter/__init__.py - > Line 32: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 32, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 29, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 30: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: kickstarter-flask/kickstarter/__init__.py - > Line 32: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 32, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 50, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 6: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 7: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 79, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 8: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 79, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 9: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 83, trigger word "get(": - query = request.args.get('q') or '' -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 84, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 10: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 83, trigger word "get(": - query = request.args.get('q') or '' -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 92, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query, projects=projects, project_count=project_count) - - - -kessiacastro/flask-blog -https://github.com/kessiacastro/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:19:22.023121 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-20 11:19:25.429704 -No vulnerabilities found. - - -rjturek/flask-etf -https://github.com/rjturek/flask-etf -Entry file: flask-etf/flask_etf_main.py -Scanned: 2016-10-20 11:19:26.751142 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-20 11:19:29.056467 -No vulnerabilities found. - - -axontrust/alexa-flask -https://github.com/axontrust/alexa-flask -Entry file: alexa-flask/app/__init__.py -Scanned: 2016-10-20 11:19:29.607860 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asjedh/flask_tutorial -https://github.com/asjedh/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:19:30.171324 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -robb216/MyFlask -https://github.com/robb216/MyFlask -Entry file: MyFlask/MyFlask.py -Scanned: 2016-10-20 11:19:31.868917 -No vulnerabilities found. - - -rogerpence/flask-blueprint -https://github.com/rogerpence/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 11:19:32.404991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -androidzhibinw/flask-bootstrap -https://github.com/androidzhibinw/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-20 11:19:34.598340 -No vulnerabilities found. - - -ytanno/PlotFlask -https://github.com/ytanno/PlotFlask -Entry file: PlotFlask/FlaskTest1/FlaskTest1/__init__.py -Scanned: 2016-10-20 11:19:44.575262 -No vulnerabilities found. - - -psykos/psilex-flask -https://github.com/psykos/psilex-flask -Entry file: psilex-flask/app/__init__.py -Scanned: 2016-10-20 11:19:46.034554 -No vulnerabilities found. - - -Hank02/flask_example -https://github.com/Hank02/flask_example -Entry file: None -Scanned: 2016-10-20 11:19:46.565586 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -VerdigrisReader/flask-workshop -https://github.com/VerdigrisReader/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-20 11:19:47.077172 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:19:47.586966 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rogerpence/flask-skeleton. - -rodcox89/FlaskDynamoStarterKit -https://github.com/rodcox89/FlaskDynamoStarterKit -Entry file: FlaskDynamoStarterKit/main.py -Scanned: 2016-10-20 11:19:48.355102 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskDynamoStarterKit/venv/lib/python2.7/genericpath.py - -pulysak/FlaskServer-Tests -https://github.com/pulysak/FlaskServer-Tests -Entry file: FlaskServer-Tests/server.py -Scanned: 2016-10-20 11:19:49.012026 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskServer-Tests/flask_env/lib/python2.7/genericpath.py - -rbtoner/FlaskWebApp -https://github.com/rbtoner/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-20 11:19:49.527067 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-20 11:19:52.625665 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/genericpath.py - -MGago/flaskBasicApp1 -https://github.com/MGago/flaskBasicApp1 -Entry file: None -Scanned: 2016-10-20 11:19:54.159370 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -skpdvidby0/Flask-Python-App -https://github.com/skpdvidby0/Flask-Python-App -Entry file: Flask-Python-App/flaskapp.py -Scanned: 2016-10-20 11:19:56.745267 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Python-App/virtenv/lib/python2.7/genericpath.py - -sindhus/flask-mega-tutorial -https://github.com/sindhus/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 11:20:05.753403 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mbreisch/real-python-flask-bdd -https://github.com/mbreisch/real-python-flask-bdd -Entry file: real-python-flask-bdd/flaskr.py -Scanned: 2016-10-20 11:20:07.595124 -No vulnerabilities found. - - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-20 11:20:10.098614 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PiyushGoyal443/studentLogin_API_Flask -https://github.com/PiyushGoyal443/studentLogin_API_Flask -Entry file: studentLogin_API_Flask/server.py -Scanned: 2016-10-20 11:20:13.656785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GertjanvanhetHof/helloworld_with_flask -https://github.com/GertjanvanhetHof/helloworld_with_flask -Entry file: helloworld_with_flask/mypython.py -Scanned: 2016-10-20 11:20:19.960756 -No vulnerabilities found. - - -taromurao/flask-python-logger-experiment -https://github.com/taromurao/flask-python-logger-experiment -Entry file: flask-python-logger-experiment/app.py -Scanned: 2016-10-20 11:20:21.286981 -No vulnerabilities found. - - -mikicaivosevic/flask-simple-todo -https://github.com/mikicaivosevic/flask-simple-todo -Entry file: flask-simple-todo/app.py -Scanned: 2016-10-20 11:20:22.572308 -No vulnerabilities found. - - -KDmytro/flask-hello-world -https://github.com/KDmytro/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:20:23.134313 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -bepetersn/flask-permissions-ex -https://github.com/bepetersn/flask-permissions-ex -Entry file: flask-permissions-ex/ex/__init__.py -Scanned: 2016-10-20 11:20:27.048775 -No vulnerabilities found. - - -EricSchles/db_migrations_flask -https://github.com/EricSchles/db_migrations_flask -Entry file: db_migrations_flask/app/__init__.py -Scanned: 2016-10-20 11:20:31.183354 -No vulnerabilities found. - - -yyssjj33/flask-menu-application -https://github.com/yyssjj33/flask-menu-application -Entry file: flask-menu-application/project.py -Scanned: 2016-10-20 11:20:31.712003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kessiacastro/flask-hello-world -https://github.com/kessiacastro/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:20:32.303209 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -androidzhibinw/flask-app-builder-example -https://github.com/androidzhibinw/flask-app-builder-example -Entry file: flask-app-builder-example/myapp/app/__init__.py -Scanned: 2016-10-20 11:20:33.668029 -No vulnerabilities found. - - -tim1978/flask-hello-world -https://github.com/tim1978/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:20:34.228467 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -jmcevoy1984/Flask-Restful-Tutorial -https://github.com/jmcevoy1984/Flask-Restful-Tutorial -Entry file: Flask-Restful-Tutorial/app.py -Scanned: 2016-10-20 11:20:38.587452 -No vulnerabilities found. - - -jigen7/python_flask_tutorial -https://github.com/jigen7/python_flask_tutorial -Entry file: python_flask_tutorial/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 11:20:53.290818 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -danieltl/python_flask_final -https://github.com/danieltl/python_flask_final -Entry file: python_flask_final/application.py -Scanned: 2016-10-20 11:20:55.202602 -No vulnerabilities found. - - -devizier/flask-hello-world -https://github.com/devizier/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:20:55.778429 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -tomov/flask-location-survey-psych -https://github.com/tomov/flask-location-survey-psych -Entry file: flask-location-survey-psych/app/__init__.py -Scanned: 2016-10-20 11:20:56.313332 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rakou1986/flask-mvt-min -https://github.com/rakou1986/flask-mvt-min -Entry file: flask-mvt-min/webapp/app.py -Scanned: 2016-10-20 11:20:57.630869 -No vulnerabilities found. - - -mbreisch/real-python-reverse-flask -https://github.com/mbreisch/real-python-reverse-flask -Entry file: None -Scanned: 2016-10-20 11:20:58.148620 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mbreisch/real-python-reverse-flask. - -jeet4320/PythonFlask-IBMBluemix -https://github.com/jeet4320/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-20 11:20:58.678771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -junniepat/Python-flask-app -https://github.com/junniepat/Python-flask-app -Entry file: Python-flask-app/app.py -Scanned: 2016-10-20 11:20:59.972317 -No vulnerabilities found. - - -Kwpolska/flask-demo-app -https://github.com/Kwpolska/flask-demo-app -Entry file: flask-demo-app/app.py -Scanned: 2016-10-20 11:21:00.510871 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tiangolo/uwsgi-nginx-flask-docker -https://github.com/tiangolo/uwsgi-nginx-flask-docker -Entry file: uwsgi-nginx-flask-docker/example-flask-python3.5-upload/app/main.py -Scanned: 2016-10-20 11:21:03.539046 -No vulnerabilities found. - - -bobdorff/flask -https://github.com/bobdorff/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:21:06.656305 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -chrisvasey/flask -https://github.com/chrisvasey/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:21:07.226514 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wildjan/Flask -https://github.com/wildjan/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:21:10.792255 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smltc/Flask -https://github.com/smltc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:21:14.321192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:21:19.878389 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -mikelkl/flasky -https://github.com/mikelkl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:21:21.375354 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -besimaltnok/Flask-Examples -https://github.com/besimaltnok/Flask-Examples -Entry file: Flask-Examples/helloworld.py -Scanned: 2016-10-20 11:21:23.390742 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -luo-jialin/flask- -https://github.com/luo-jialin/flask- -Entry file: flask-/flaskr.py -Scanned: 2016-10-20 11:21:25.714212 -No vulnerabilities found. - - -ubbochum/hb2_flask -https://github.com/ubbochum/hb2_flask -Entry file: hb2_flask/hb2_flask.py -Scanned: 2016-10-20 11:21:32.897326 -Vulnerability 1: -File: hb2_flask/hb2_flask.py - > User input at line 362, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 369: index_solr = Solr(start=page - 1 * 10, query=current_user.email, facet='false') - File: hb2_flask/hb2_flask.py - > Line 372: records = index_solr.results - File: hb2_flask/hb2_flask.py - > Line 376: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 379: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 361: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 363: records = [] - File: hb2_flask/hb2_flask.py - > Line 365: index_solr = '' - File: hb2_flask/hb2_flask.py - > Line 366: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 380, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',header=lazy_gettext('Home'), site=theme(request.access_route), numFound=num_found, records=records, pagination=pagination, offset=mystart - 1) - -Vulnerability 2: -File: hb2_flask/hb2_flask.py - > User input at line 416, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 417: duplicates_solr = Solr(start=page - 1 * 10, fquery=['dedupid:[* TO *]'], group='true', group_field='dedupid', group_limit=100, facet='false') - File: hb2_flask/hb2_flask.py - > Line 424: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('duplicate groups'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 427: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 415: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 423: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 428, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('duplicates.html',groups=duplicates_solr.results, pagination=pagination, header=lazy_gettext('Duplicates'), site=theme(request.access_route), offset=mystart - 1) - -Vulnerability 3: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 446, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 4: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 455, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), del_redirect='persons') - -Vulnerability 5: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 6: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 7: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 8: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 9: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 10: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 11: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 12: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 13: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 14: -File: hb2_flask/hb2_flask.py - > User input at line 742, trigger word "get(": - bio = requests.get('https://pub.orcid.org/%s/orcid-bio/' % orcid_id,headers='Accept''application/json').json() -File: hb2_flask/hb2_flask.py - > reaches line 744, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''%s, %s' % (bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('family-name').get('value'), bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('given-names').get('value'))) - -Vulnerability 15: -File: hb2_flask/hb2_flask.py - > User input at line 749, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 787: dashboard_solr = Solr(start=page - 1 * 10, query=query, sort='recordCreationDate asc', json_facet=DASHBOARD_FACETS, fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 795: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 798: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 750: mystart = 0 - File: hb2_flask/hb2_flask.py - > Line 791: pagination = '' -File: hb2_flask/hb2_flask.py - > reaches line 801, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dashboard.html',records=dashboard_solr.results, facet_data=dashboard_solr.facets, header=lazy_gettext('Dashboard'), site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), target='dashboard', del_redirect='dashboard') - -Vulnerability 16: -File: hb2_flask/hb2_flask.py - > User input at line 826, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 827: locked_solr = Solr(core='hb2', fquery=['locked:true', 'recordChangeDate:[* TO NOW-1HOUR]'], sort='recordChangeDate asc', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 831: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('records'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 834: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 824: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 841, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('superadmin.html',locked_records=locked_solr.results, header=lazy_gettext('Superadmin Board'), import_records=solr_dumps.results, offset=mystart - 1, pagination=pagination, del_redirect='superadmin', form=form, site=theme(request.access_route)) - -Vulnerability 17: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 925, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 18: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 933, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now()) - -Vulnerability 19: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1110, trigger word "replace(": - solr_data.setdefault('recordCreationDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 20: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1112, trigger word "replace(": - solr_data.setdefault('recordChangeDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 21: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), action='create', pubtype=pubtype) - -Vulnerability 22: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1160, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), pubtype=pubtype, action='create', record_id=form.id.data) - -Vulnerability 23: -File: hb2_flask/hb2_flask.py - > User input at line 1167, trigger word "get(": - is_part_of = show_record_solr.results[0].get('is_part_of') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 24: -File: hb2_flask/hb2_flask.py - > User input at line 1168, trigger word "get(": - has_part = show_record_solr.results[0].get('has_part') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 25: -File: hb2_flask/hb2_flask.py - > User input at line 1169, trigger word "get(": - other_version = show_record_solr.results[0].get('other_version') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 26: -File: hb2_flask/hb2_flask.py - > User input at line 1171, trigger word "get(": - thedata = json.loads(show_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1173: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 27: -File: hb2_flask/hb2_flask.py - > User input at line 1172, trigger word "get(": - locked = show_record_solr.results[0].get('locked') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 28: -File: hb2_flask/hb2_flask.py - > User input at line 1173, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 29: -File: hb2_flask/hb2_flask.py - > User input at line 1189, trigger word "get(": - thedata = json.loads(show_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1190: form = PersonAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1192, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('name'), site=theme(request.access_route), action='retrieve', record_id=person_id, pubtype='person', del_redirect='persons') - -Vulnerability 30: -File: hb2_flask/hb2_flask.py - > User input at line 1200, trigger word "get(": - thedata = json.loads(show_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1201: form = OrgaAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1203, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('pref_label'), site=theme(request.access_route), action='retrieve', record_id=orga_id, pubtype='organisation', del_redirect='organisations') - -Vulnerability 31: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1223, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 32: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1231, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(orga)s',orga=form.data.get('pref_label')), site=theme(request.access_route), action='update', pubtype='organisation') - -Vulnerability 33: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1253, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 34: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1261, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(person)s',person=form.data.get('name')), site=theme(request.access_route), action='update', pubtype='person') - -Vulnerability 35: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 36: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 37: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 38: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 39: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 40: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 41: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 42: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 43: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 44: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1493, trigger word "url_for(": - target = url_for(endpoint,values) - -Vulnerability 45: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1494, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target) - -Vulnerability 46: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 47: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 48: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 49: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 50: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 51: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 52: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 53: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 54: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 55: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 56: -File: hb2_flask/hb2_flask.py - > User input at line 1627, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1628: solr_dumps = Solr(core='hb2_users', query='id:*.json', facet='false', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 1631: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('dumps'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 1634: mystart = 1 + pagination.page - 1 * pagination.per_page -File: hb2_flask/hb2_flask.py - > reaches line 1636, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('solr_dumps.html',records=solr_dumps.results, offset=mystart - 1, pagination=pagination, header=lazy_gettext('Import Dump'), del_redirect='import/solr_dumps', form=form) - -Vulnerability 57: -File: hb2_flask/hb2_flask.py - > User input at line 1652, trigger word "get(": - thedata = json.loads(import_solr.results[0].get('dump')[0]) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1656: thedata = json.loads(form.file.data.stream.read()) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 58: -File: hb2_flask/hb2_flask.py - > User input at line 1656, trigger word ".data": - thedata = json.loads(form.file.data.stream.read()) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1652: thedata = json.loads(import_solr.results[0].get('dump')[0]) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 59: -File: hb2_flask/processors/mods_parser.py - > User input at line 123, trigger word "get(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') -Reassigned in: - File: hb2_flask/processors/mods_parser.py - > Line 120: pnd = '' -File: hb2_flask/processors/mods_parser.py - > reaches line 123, trigger word "replace(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') - - - -Vertabelo/flask-oauth-demo-app -https://github.com/Vertabelo/flask-oauth-demo-app -Entry file: flask-oauth-demo-app/models.py -Scanned: 2016-10-20 11:21:33.425035 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -waharnum/inlibraries.com -https://github.com/waharnum/inlibraries.com -Entry file: None -Scanned: 2016-10-20 11:21:33.960525 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-20 11:21:35.282945 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 41, trigger word "form[": - url_to_parse = request.form['input-url'] -Reassigned in: - File: flask_shortener/app.py - > Line 42: parts = urlparse.urlparse(url_to_parse) - File: flask_shortener/app.py - > Line 47: short_id = shorten(url_to_parse) -File: flask_shortener/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',short_id=short_id) - -Vulnerability 2: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - -Vulnerability 3: -File: flask_shortener/app.py - > User input at line 60, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - -Vulnerability 4: -File: flask_shortener/app.py - > User input at line 63, trigger word "get(": - click_count = int(redis.get('click-count:' + short_id) or 0) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-20 11:21:37.100262 -No vulnerabilities found. - - -hammygoonan/Flaskify -https://github.com/hammygoonan/Flaskify -Entry file: Flaskify/project/__init__.py -Scanned: 2016-10-20 11:21:38.636443 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anujspatel/flaskr -https://github.com/anujspatel/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:21:46.166468 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -williamcaban/flaskrcloud -https://github.com/williamcaban/flaskrcloud -Entry file: flaskrcloud/flaskr.py -Scanned: 2016-10-20 11:21:54.692978 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crazyqipython/flaskdemo -https://github.com/crazyqipython/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 11:21:55.211099 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pythondude325/flaskr -https://github.com/pythondude325/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:21:55.711450 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fenske/flasky -https://github.com/fenske/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:21:57.222534 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fakegit/flasky -https://github.com/fakegit/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:21:57.729938 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Anddor/flaskr -https://github.com/Anddor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:21:59.201376 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jarogers095/flasktaskr -https://github.com/jarogers095/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:22:00.752901 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:22:01.258671 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johnpwillman/flasktest -https://github.com/johnpwillman/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 11:22:02.762846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 11:22:06.276852 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-20 11:22:06.783358 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-20 11:22:07.298810 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-20 11:22:12.138821 -Vulnerability 1: -File: flaskyDeb/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 55: posts = pagination.items - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskyDeb/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 45: show_followed = False - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskyDeb/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 67: posts = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskyDeb/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskyDeb/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 134: comments = pagination.items - File: flaskyDeb/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskyDeb/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskyDeb/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskyDeb/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskyDeb/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 246: comments = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jmcerv/FlaskTutorial -https://github.com/jmcerv/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 11:22:14.711520 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LaRueGT/FlaskBlog -https://github.com/LaRueGT/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 11:22:20.361160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhou18520786640/FlaskWeb -https://github.com/zhou18520786640/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 11:22:22.041228 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -ethanphunter/FlaskExperiment -https://github.com/ethanphunter/FlaskExperiment -Entry file: FlaskExperiment/main.py -Scanned: 2016-10-20 11:22:22.623467 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -asimonia/FlaskJeopardy -https://github.com/asimonia/FlaskJeopardy -Entry file: FlaskJeopardy/app/__init__.py -Scanned: 2016-10-20 11:22:33.385203 -Vulnerability 1: -File: FlaskJeopardy/app/main/views.py - > User input at line 17, trigger word ".data": - show_number = form.show_number.data -Reassigned in: - File: FlaskJeopardy/app/main/views.py - > Line 32: questions = Questionbank.objects(show_number=show_number, current_round='Jeopardy!') - File: FlaskJeopardy/app/main/views.py - > Line 33: init_game = Game(state='playing', show_number=show_number, current_round='Jeopardy!') - File: FlaskJeopardy/app/main/views.py - > Line 12: ret_MAYBE_FUNCTION_NAME = render_template('questions/index.html',form=form) -File: FlaskJeopardy/app/main/views.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('questions/game_board.html',game=init_game) - - - -motleytech/flaskPlate -https://github.com/motleytech/flaskPlate -Entry file: flaskPlate/app/app.py -Scanned: 2016-10-20 11:22:35.756640 -No vulnerabilities found. - - -ciricihq/wkhtmltopdf-flask-aas -https://github.com/ciricihq/wkhtmltopdf-flask-aas -Entry file: wkhtmltopdf-flask-aas/app.py -Scanned: 2016-10-20 11:22:37.416509 -No vulnerabilities found. - - -cr8ivecodesmith/save22-flask-course-src -https://github.com/cr8ivecodesmith/save22-flask-course-src -Entry file: save22-flask-course-src/01-hello/app2_1.py -Scanned: 2016-10-20 11:22:38.865248 -No vulnerabilities found. - - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-20 11:22:40.150068 -No vulnerabilities found. - - -swkaen/Flask_LED -https://github.com/swkaen/Flask_LED -Entry file: Flask_LED/hello.py -Scanned: 2016-10-20 11:22:41.449700 -No vulnerabilities found. - - -johnsliao/flask-bp -https://github.com/johnsliao/flask-bp -Entry file: flask-bp/flaskApp.py -Scanned: 2016-10-20 11:22:42.721023 -No vulnerabilities found. - - -MaximeGir/flask_skeleton -https://github.com/MaximeGir/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 11:22:43.233614 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -devmtnaing/python_flask -https://github.com/devmtnaing/python_flask -Entry file: None -Scanned: 2016-10-20 11:22:43.764745 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/devmtnaing/python_flask. - -josepablob/flask-blog -https://github.com/josepablob/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:22:44.333083 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -faraday-effect/spectacle-flask -https://github.com/faraday-effect/spectacle-flask -Entry file: spectacle-flask/app/__init__.py -Scanned: 2016-10-20 11:22:47.749863 -No vulnerabilities found. - - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-20 11:22:56.236937 -Vulnerability 1: -File: flask-usages/application/controllers/todo.py - > User input at line 12, trigger word "get(": - todo_id = request.args.get('todo_id') -Reassigned in: - File: flask-usages/application/controllers/todo.py - > Line 17: ret_MAYBE_FUNCTION_NAME = jsonify() -File: flask-usages/application/controllers/todo.py - > reaches line 15, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_idtodo.content) - -Vulnerability 2: -File: flask-usages/application/controllers/todo.py - > User input at line 21, trigger word "get(": - todo = Todo(content=data.get('content')) -File: flask-usages/application/controllers/todo.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_id=todo.id, content=todo.content) - - - -raticate/flask-tutorial -https://github.com/raticate/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:22:56.747378 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cnds/flask_web -https://github.com/cnds/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-20 11:22:57.357072 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/test_tokenauth.py -Scanned: 2016-10-20 11:22:58.667142 -No vulnerabilities found. - - -jgoret/flask-dataset -https://github.com/jgoret/flask-dataset -Entry file: flask-dataset/flask_dataset/__init__.py -Scanned: 2016-10-20 11:23:01.827284 -No vulnerabilities found. - - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:23:02.415836 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danjamin/flask-guide -https://github.com/danjamin/flask-guide -Entry file: flask-guide/app/server.py -Scanned: 2016-10-20 11:23:03.680944 -No vulnerabilities found. - - -stevejgoodman/flask-app -https://github.com/stevejgoodman/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 11:23:04.188886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devizier/flask-blog -https://github.com/devizier/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:23:04.766885 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rafaelgotts/flask_rest -https://github.com/rafaelgotts/flask_rest -Entry file: None -Scanned: 2016-10-20 11:23:05.275223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rafaelgotts/flask_rest. - -Orlandohub/flask-tutorial -https://github.com/Orlandohub/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:23:05.783877 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -python-0/flask_blog -https://github.com/python-0/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:23:06.290195 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bdero/flask-sleep -https://github.com/bdero/flask-sleep -Entry file: flask-sleep/flasksleep.py -Scanned: 2016-10-20 11:23:07.593992 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-20 11:23:08.251062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -IvanBodnar/flask_relevamientos -https://github.com/IvanBodnar/flask_relevamientos -Entry file: flask_relevamientos/app.py -Scanned: 2016-10-20 11:23:12.944875 -No vulnerabilities found. - - -ravivooda/flask-server -https://github.com/ravivooda/flask-server -Entry file: None -Scanned: 2016-10-20 11:23:15.471930 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ravivooda/flask-server. - -wipatrick/flask-restapi -https://github.com/wipatrick/flask-restapi -Entry file: flask-restapi/api.py -Scanned: 2016-10-20 11:23:21.922128 -No vulnerabilities found. - - -yogeshralhan/flask_1 -https://github.com/yogeshralhan/flask_1 -Entry file: flask_1/2.py -Scanned: 2016-10-20 11:23:23.730387 -No vulnerabilities found. - - -YeWang0/Flask_Blog -https://github.com/YeWang0/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 11:23:24.663675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -windery/flask-blog -https://github.com/windery/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:23:34.241393 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -chuan137/flask_bess -https://github.com/chuan137/flask_bess -Entry file: flask_bess/main.py -Scanned: 2016-10-20 11:23:38.275385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kgandhi37/flask_blog -https://github.com/kgandhi37/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:23:39.926973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krol3/python-flask -https://github.com/krol3/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 11:23:41.441934 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramhiser/flask-docker -https://github.com/ramhiser/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-20 11:23:43.817332 -No vulnerabilities found. - - -ialamin/flask_hello -https://github.com/ialamin/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-20 11:23:44.492299 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vasiliy-tech/flask_httpserver -https://github.com/Vasiliy-tech/flask_httpserver -Entry file: flask_httpserver/simple_http.py -Scanned: 2016-10-20 11:23:46.315942 -No vulnerabilities found. - - -jyameo/Flask-Blog -https://github.com/jyameo/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 11:23:47.836668 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-20 11:23:56.140898 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-20 11:23:58.555832 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-20 11:24:00.001973 -No vulnerabilities found. - - -timotk/flask-login -https://github.com/timotk/flask-login -Entry file: flask-login/app/__init__.py -Scanned: 2016-10-20 11:24:01.376474 -No vulnerabilities found. - - -johnsliao/flask-toy -https://github.com/johnsliao/flask-toy -Entry file: flask-toy/flaskr/flaskr.py -Scanned: 2016-10-20 11:24:01.901189 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jan26th/flask_test -https://github.com/jan26th/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:24:02.524513 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dawran6/flask-blog -https://github.com/dawran6/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:24:03.069644 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -msapkota/Flask_Blog -https://github.com/msapkota/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 11:24:04.936519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wish007/MyFlask -https://github.com/wish007/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-20 11:24:06.332753 -No vulnerabilities found. - - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:24:06.864146 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rogerpence/flask-skeleton. - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-20 11:24:10.028777 -No vulnerabilities found. - - -zachbpd/microblog -https://github.com/zachbpd/microblog -Entry file: None -Scanned: 2016-10-20 11:24:10.599349 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josepablob/flask-hello-world -https://github.com/josepablob/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:24:11.157107 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ipsha21/My-flask-application -https://github.com/ipsha21/My-flask-application -Entry file: My-flask-application/app.py -Scanned: 2016-10-20 11:24:11.670556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tribe216/microblog -https://github.com/Tribe216/microblog -Entry file: None -Scanned: 2016-10-20 11:24:12.162818 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: FlaskWebProject2/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-20 11:24:15.697178 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laaroussiBadr/FlaskWebProject -https://github.com/laaroussiBadr/FlaskWebProject -Entry file: FlaskWebProject/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-20 11:24:21.230915 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mad1331/FlaskMessageBoard -https://github.com/Mad1331/FlaskMessageBoard -Entry file: FlaskMessageBoard/server.py -Scanned: 2016-10-20 11:24:23.234206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sasha-ruby/flask2spark -https://github.com/sasha-ruby/flask2spark -Entry file: flask2spark/flask2spark.py -Scanned: 2016-10-20 11:24:25.554907 -No vulnerabilities found. - - -damionlowers/flask -https://github.com/damionlowers/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:24:37.622000 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -smltc/Flask -https://github.com/smltc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:24:39.131357 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -embasa/FLASK -https://github.com/embasa/FLASK -Entry file: FLASK/app.py -Scanned: 2016-10-20 11:24:41.448546 -No vulnerabilities found. - - -rakeshhegishte/Flask -https://github.com/rakeshhegishte/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:24:41.964700 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RayneHwang/Flask -https://github.com/RayneHwang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:24:43.489856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RoseOu/flasky -https://github.com/RoseOu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:24:45.049243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -materialsvirtuallab/flamyngo -https://github.com/materialsvirtuallab/flamyngo -Entry file: flamyngo/flamyngo/app.py -Scanned: 2016-10-20 11:24:48.446516 -Vulnerability 1: -File: flamyngo/flamyngo/views.py - > User input at line 95, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 96: settings = CSETTINGS[cname] - File: flamyngo/flamyngo/views.py - > Line 98: projection = [t[0] for t in settings['summary']] - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 2: -File: flamyngo/flamyngo/views.py - > User input at line 97, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 3: -File: flamyngo/flamyngo/views.py - > User input at line 142, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 4: -File: flamyngo/flamyngo/views.py - > User input at line 145, trigger word "get(": - plot_type = request.args.get('plot_type') or 'scatter' -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 5: -File: flamyngo/flamyngo/views.py - > User input at line 146, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 6: -File: flamyngo/flamyngo/views.py - > User input at line 147, trigger word "get(": - xaxis = request.args.get('xaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 7: -File: flamyngo/flamyngo/views.py - > User input at line 148, trigger word "get(": - yaxis = request.args.get('yaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - - - -jonafato/Flask-Copilot -https://github.com/jonafato/Flask-Copilot -Entry file: Flask-Copilot/example/app.py -Scanned: 2016-10-20 11:24:49.835602 -No vulnerabilities found. - - -Upflask/Upflask -https://github.com/Upflask/Upflask -Entry file: Upflask/server.py -Scanned: 2016-10-20 11:24:51.996189 -Vulnerability 1: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -PrettyPrinted/flask-wtforms -https://github.com/PrettyPrinted/flask-wtforms -Entry file: flask-wtforms/main.py -Scanned: 2016-10-20 11:24:56.331643 -No vulnerabilities found. - - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-20 11:24:58.641433 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 41, trigger word "form[": - url_to_parse = request.form['input-url'] -Reassigned in: - File: flask_shortener/app.py - > Line 42: parts = urlparse.urlparse(url_to_parse) - File: flask_shortener/app.py - > Line 47: short_id = shorten(url_to_parse) -File: flask_shortener/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',short_id=short_id) - -Vulnerability 2: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - -Vulnerability 3: -File: flask_shortener/app.py - > User input at line 60, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - -Vulnerability 4: -File: flask_shortener/app.py - > User input at line 63, trigger word "get(": - click_count = int(redis.get('click-count:' + short_id) or 0) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-20 11:24:59.964323 -No vulnerabilities found. - - -boydjohnson/flasktwilio -https://github.com/boydjohnson/flasktwilio -Entry file: flasktwilio/app.py -Scanned: 2016-10-20 11:25:02.255720 -Vulnerability 1: -File: flasktwilio/app.py - > User input at line 14, trigger word "form[": - number = request.form['number'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 2: -File: flasktwilio/app.py - > User input at line 15, trigger word "form[": - lat = request.form['latitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 3: -File: flasktwilio/app.py - > User input at line 16, trigger word "form[": - lon = request.form['longitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - - - -yizhianiu/flasky -https://github.com/yizhianiu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:25:02.771480 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-20 11:25:04.100318 -No vulnerabilities found. - - -wdxfairy/flaskblog -https://github.com/wdxfairy/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:25:04.660259 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -Narcissist1/flasktest -https://github.com/Narcissist1/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 11:25:05.162392 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -msapkota/flasktaskr -https://github.com/msapkota/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:25:05.684870 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -super452/flasky -https://github.com/super452/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:25:07.189752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wish007/flasktest -https://github.com/wish007/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 11:25:07.707610 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wildjan/Flaskr -https://github.com/wildjan/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 11:25:11.235463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pnilan/flaskr -https://github.com/pnilan/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:25:11.746671 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 11:25:12.261027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cutedogspark/Flask-SocketIO -https://github.com/cutedogspark/Flask-SocketIO -Entry file: None -Scanned: 2016-10-20 11:25:12.781412 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-20 11:25:16.318920 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -VitPN/FlaskRPi -https://github.com/VitPN/FlaskRPi -Entry file: FlaskRPi/go.py -Scanned: 2016-10-20 11:25:21.861615 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EvenYan/FlaskTest -https://github.com/EvenYan/FlaskTest -Entry file: None -Scanned: 2016-10-20 11:25:23.376242 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/EvenYan/FlaskTest. - -jll90/flaskAng -https://github.com/jll90/flaskAng -Entry file: flaskAng/app.py -Scanned: 2016-10-20 11:25:24.051166 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskAng/lib/python2.7/genericpath.py - -edgewood/webfaction-flask0.10-boilerplate -https://github.com/edgewood/webfaction-flask0.10-boilerplate -Entry file: None -Scanned: 2016-10-20 11:25:37.557472 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -garderobin/HelloFlask -https://github.com/garderobin/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-20 11:25:40.077240 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shidante/notes-flask -https://github.com/shidante/notes-flask -Entry file: notes-flask/hello.py -Scanned: 2016-10-20 11:25:42.529004 -No vulnerabilities found. - - -maixianyu/flask_tennis -https://github.com/maixianyu/flask_tennis -Entry file: flask_tennis/app/__init__.py -Scanned: 2016-10-20 11:25:43.106415 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saalmerol/cds-flask -https://github.com/saalmerol/cds-flask -Entry file: None -Scanned: 2016-10-20 11:25:43.614853 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -trileg/HelloFlask -https://github.com/trileg/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-20 11:25:45.121631 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -M1lan/flask_helloworld -https://github.com/M1lan/flask_helloworld -Entry file: flask_helloworld/flask_helloworld.py -Scanned: 2016-10-20 11:25:45.660620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codybousc/flask_practice- -https://github.com/codybousc/flask_practice- -Entry file: flask_practice-/app.py -Scanned: 2016-10-20 11:25:49.331544 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_practice-/venv/lib/python2.7/genericpath.py - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-20 11:25:51.810044 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -xpleaf/flask_catalog -https://github.com/xpleaf/flask_catalog -Entry file: flask_catalog/my_app/__init__.py -Scanned: 2016-10-20 11:25:59.773274 -Vulnerability 1: -File: flask_catalog/my_app/catalog/views.py - > User input at line 41, trigger word "get(": - products = [redis.get(k) for k in keys_alive] -File: flask_catalog/my_app/catalog/views.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('products'products) - -Vulnerability 2: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 79, trigger word "flash(": - flash('The product %s has been created' % name, 'success') - -Vulnerability 3: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 4: -File: flask_catalog/my_app/catalog/views.py - > User input at line 67, trigger word ".data": - price = form.price.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 5: -File: flask_catalog/my_app/catalog/views.py - > User input at line 68, trigger word ".data": - category = Category.query.get_or_404(form.category.data) -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 6: -File: flask_catalog/my_app/catalog/views.py - > User input at line 71, trigger word "files[": - image = request.files['image'] -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 74: filename = secure_filename(image.filename) - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) - File: flask_catalog/my_app/catalog/views.py - > Line 72: filename = '' -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 7: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 8: -File: flask_catalog/my_app/catalog/views.py - > User input at line 67, trigger word ".data": - price = form.price.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 9: -File: flask_catalog/my_app/catalog/views.py - > User input at line 68, trigger word ".data": - category = Category.query.get_or_404(form.category.data) -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 10: -File: flask_catalog/my_app/catalog/views.py - > User input at line 71, trigger word "files[": - image = request.files['image'] -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 74: filename = secure_filename(image.filename) - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) - File: flask_catalog/my_app/catalog/views.py - > Line 72: filename = '' -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 11: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 97, trigger word "flash(": - flash('The category %s has been created' % name, 'success') - -Vulnerability 12: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 99, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.create_category',id=category.id)) - -Vulnerability 13: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 99, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.create_category',id=category.id)) - -Vulnerability 14: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 15: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 16: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 17: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 18: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 19: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 20: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 21: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 22: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 23: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 24: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 25: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 26: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 27: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 28: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 29: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 30: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 31: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 32: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 33: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - - - -yizhianiu/flask-blog -https://github.com/yizhianiu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:26:00.331772 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -zhuwei05/flask-blog -https://github.com/zhuwei05/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:26:00.890406 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:26:02.481571 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:26:03.050714 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -junhl/Flask_Test -https://github.com/junhl/Flask_Test -Entry file: None -Scanned: 2016-10-20 11:26:03.711051 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -anupam0601/flask_off -https://github.com/anupam0601/flask_off -Entry file: flask_off/app.py -Scanned: 2016-10-20 11:26:05.493900 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdhop/flask_exercises -https://github.com/cdhop/flask_exercises -Entry file: flask_exercises/hello.py -Scanned: 2016-10-20 11:26:06.138044 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_exercises/venv/lib/python2.7/genericpath.py - -AmeetSM/AngularFlask -https://github.com/AmeetSM/AngularFlask -Entry file: AngularFlask/app.py -Scanned: 2016-10-20 11:26:08.931270 -No vulnerabilities found. - - -a358003542/flask-examples -https://github.com/a358003542/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 11:26:09.443735 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slacksec/flask_blog -https://github.com/slacksec/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:26:11.962094 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seabrookmx/flask-demo -https://github.com/seabrookmx/flask-demo -Entry file: None -Scanned: 2016-10-20 11:26:12.478839 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/seabrookmx/flask-demo. - -Desmonddai583/flask-blog -https://github.com/Desmonddai583/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:26:13.030240 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-20 11:26:14.452750 -No vulnerabilities found. - - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 11:26:17.020169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-20 11:26:23.348597 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-20 11:26:24.659424 -No vulnerabilities found. - - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-20 11:26:25.172340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ykchat/gundam-flask -https://github.com/ykchat/gundam-flask -Entry file: gundam-flask/server.py -Scanned: 2016-10-20 11:26:26.562996 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-20 11:26:37.017797 -No vulnerabilities found. - - -eltonto187/learn_flask -https://github.com/eltonto187/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:26:37.562460 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:26:40.088247 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -netkicorp/flask-jwe -https://github.com/netkicorp/flask-jwe -Entry file: flask-jwe/server.py -Scanned: 2016-10-20 11:26:41.624251 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-20 11:26:46.093969 -No vulnerabilities found. - - -dengshilong/flask_example -https://github.com/dengshilong/flask_example -Entry file: None -Scanned: 2016-10-20 11:26:46.639828 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nathanielcompton/flask-tutorial -https://github.com/nathanielcompton/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:26:47.156300 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 11:26:47.731788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leon740gk/flask_quick_start -https://github.com/leon740gk/flask_quick_start -Entry file: flask_quick_start/hello.py -Scanned: 2016-10-20 11:26:50.034326 -No vulnerabilities found. - - -dommert/test.dommert.xyz -https://github.com/dommert/test.dommert.xyz -Entry file: None -Scanned: 2016-10-20 11:26:51.569086 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: FlaskWebProject2/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-20 11:26:57.096752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -poppuyo/FlaskUrlShortener -https://github.com/poppuyo/FlaskUrlShortener -Entry file: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py -Scanned: 2016-10-20 11:27:00.640319 -Vulnerability 1: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 95, trigger word "replace(": - requested_shortened = requested_shortened.replace(request.url_root, '') - -Vulnerability 2: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 98, trigger word "execute(": - cur.execute('SELECT url FROM urls where shortened=%s', [requested_shortened]) - -Vulnerability 3: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 100, trigger word "execute(": - cur = g.db.execute('SELECT url FROM urls where shortened=?', [requested_shortened]) - -Vulnerability 4: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 104, trigger word "url_for(": - short_url = request.url_root.rstrip('/') + url_for('find_shortened',shortened=requested_shortened) - -Vulnerability 5: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 149, trigger word "execute(": - cur.execute('WITH new_values (url, shortened) as ( values (%s, %s) ), ' + 'upsert as ' + '( update urls u set url = nv.url, shortened = nv.shortened ' + ' FROM new_values nv WHERE u.url = nv.url RETURNING u.* )' + ' INSERT INTO urls (url, shortened) ' + ' SELECT url, shortened FROM new_values WHERE NOT EXISTS ' + ' (SELECT 1 FROM upsert up WHERE up.url = new_values.url)', [stripped_url, untrimmed_shortened[leftstring_length]]) - -Vulnerability 6: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 160, trigger word "execute(": - g.db.execute('UPDATE urls SET url=?, shortened=? WHERE url=?', [stripped_url, untrimmed_shortened[leftstring_length], stripped_url]) - -Vulnerability 7: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 162, trigger word "execute(": - g.db.execute('INSERT OR IGNORE INTO urls (url, shortened) VALUES (?, ?)', [stripped_url, untrimmed_shortened[leftstring_length]]) - -Vulnerability 8: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 166, trigger word "flash(": - flash(Markup('' + short_url + '' + ' now redirects to the following URL: ' + '' + stripped_url + '')) - - - -j1wu/wechat-enterprise-bot -https://github.com/j1wu/wechat-enterprise-bot -Entry file: None -Scanned: 2016-10-20 11:27:02.650821 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/j1wu/wechat-enterprise-bot. - -chamambom/flask_sqlalchemy_crud -https://github.com/chamambom/flask_sqlalchemy_crud -Entry file: flask_sqlalchemy_crud/sqlcrud.py -Scanned: 2016-10-20 11:27:03.167962 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pyd-testing/flask-docker-workflow -https://github.com/pyd-testing/flask-docker-workflow -Entry file: flask-docker-workflow/app/app.py -Scanned: 2016-10-20 11:27:03.675234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EsmondMoe/flask-globalcache-http-api -https://github.com/EsmondMoe/flask-globalcache-http-api -Entry file: flask-globalcache-http-api/app.py -Scanned: 2016-10-20 11:27:06.214137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gr8shivam/Flask---Handling-File-Uploads -https://github.com/gr8shivam/Flask---Handling-File-Uploads -Entry file: Flask---Handling-File-Uploads/app/__init__.py -Scanned: 2016-10-20 11:27:07.546298 -No vulnerabilities found. - - -pbsugg/flask_testbed_server -https://github.com/pbsugg/flask_testbed_server -Entry file: flask_testbed_server/main.py -Scanned: 2016-10-20 11:27:08.553344 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HYL13/flask_project_0 -https://github.com/HYL13/flask_project_0 -Entry file: flask_project_0/app/__init__.py -Scanned: 2016-10-20 11:27:11.376893 -Vulnerability 1: -File: flask_project_0/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 55: posts = pagination.items - File: flask_project_0/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask_project_0/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 45: show_followed = False - File: flask_project_0/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask_project_0/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 67: posts = pagination.items -File: flask_project_0/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_project_0/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_project_0/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 134: comments = pagination.items - File: flask_project_0/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_project_0/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask_project_0/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_project_0/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask_project_0/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_project_0/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask_project_0/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 246: comments = pagination.items -File: flask_project_0/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -anthonybrown/Flask-web-API-demo -https://github.com/anthonybrown/Flask-web-API-demo -Entry file: Flask-web-API-demo/app.py -Scanned: 2016-10-20 11:27:13.034385 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-web-API-demo/venv/lib/python2.7/genericpath.py - -myCSprojects/PythonFlask-IBMBluemix -https://github.com/myCSprojects/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-20 11:27:13.550477 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kriordan/flask-hello-world -https://github.com/Kriordan/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:27:14.104129 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: None -Scanned: 2016-10-20 11:27:14.637628 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dwisulfahnur/My-flask-app -https://github.com/dwisulfahnur/My-flask-app -Entry file: None -Scanned: 2016-10-20 11:27:17.180064 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dwisulfahnur/My-flask-app. - -andreffs18/flask-template-project -https://github.com/andreffs18/flask-template-project -Entry file: flask-template-project/project/__init__.py -Scanned: 2016-10-20 11:27:24.035205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valexandersaulys/flask_microblog_tutorial -https://github.com/valexandersaulys/flask_microblog_tutorial -Entry file: flask_microblog_tutorial/app/__init__.py -Scanned: 2016-10-20 11:27:25.480869 -No vulnerabilities found. - - -wenzhihong2003/awesome-flask-todo -https://github.com/wenzhihong2003/awesome-flask-todo -Entry file: None -Scanned: 2016-10-20 11:27:26.006223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wenzhihong2003/awesome-flask-todo. - -kfiras/cloudfoundry-flask-webservice -https://github.com/kfiras/cloudfoundry-flask-webservice -Entry file: cloudfoundry-flask-webservice/app.py -Scanned: 2016-10-20 11:27:27.448435 -Vulnerability 1: -File: cloudfoundry-flask-webservice/app.py - > User input at line 80, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: cloudfoundry-flask-webservice/app.py - > reaches line 87, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -ssam123/flask-blog-tutorial -https://github.com/ssam123/flask-blog-tutorial -Entry file: flask-blog-tutorial/__init__.py -Scanned: 2016-10-20 11:27:38.180346 -Vulnerability 1: -File: flask-blog-tutorial/author/views.py - > User input at line 31, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flask-blog-tutorial/author/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: flask-blog-tutorial/author/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: flask-blog-tutorial/author/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 2: -File: flask-blog-tutorial/blog/views.py - > User input at line 127, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask-blog-tutorial/blog/views.py - > Line 129: slug = slugify(title) - File: flask-blog-tutorial/blog/views.py - > Line 130: post = Post(blog, author, title, body, category, filename, slug) - File: flask-blog-tutorial/blog/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask-blog-tutorial/blog/views.py - > reaches line 133, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - -Vulnerability 3: -File: flask-blog-tutorial/blog/views.py - > User input at line 127, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask-blog-tutorial/blog/views.py - > Line 129: slug = slugify(title) - File: flask-blog-tutorial/blog/views.py - > Line 130: post = Post(blog, author, title, body, category, filename, slug) - File: flask-blog-tutorial/blog/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask-blog-tutorial/blog/views.py - > reaches line 133, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - - - -MrLeeh/flask-mega-tutorial -https://github.com/MrLeeh/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 11:27:38.697796 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MatthewHodgson/flask-by-example -https://github.com/MatthewHodgson/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:27:40.465158 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yun70/flask-rest-api -https://github.com/yun70/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-20 11:27:41.995799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kevinlondon/flask-hello-world -https://github.com/kevinlondon/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:27:43.585754 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -viney-shih/Flask_App_Template -https://github.com/viney-shih/Flask_App_Template -Entry file: Flask_App_Template/app/__init__.py -Scanned: 2016-10-20 11:27:47.113368 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davehalladay/openr-flask-api -https://github.com/davehalladay/openr-flask-api -Entry file: openr-flask-api/main.py -Scanned: 2016-10-20 11:27:48.555764 -No vulnerabilities found. - - -momotaro98/flask-for-test -https://github.com/momotaro98/flask-for-test -Entry file: flask-for-test/app.py -Scanned: 2016-10-20 11:27:49.844749 -No vulnerabilities found. - - -andela-mochieng/flask-practice-tutorial -https://github.com/andela-mochieng/flask-practice-tutorial -Entry file: flask-practice-tutorial/app/__init__.py -Scanned: 2016-10-20 11:27:51.216947 -No vulnerabilities found. - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-20 11:27:52.619053 -No vulnerabilities found. - - -mahfuzsust/flask-heroku-intro -https://github.com/mahfuzsust/flask-heroku-intro -Entry file: flask-heroku-intro/app.py -Scanned: 2016-10-20 11:27:58.051856 -No vulnerabilities found. - - -MoodyLyrics/flask -https://github.com/MoodyLyrics/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:28:03.258154 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sunshine-sjd/Flask -https://github.com/sunshine-sjd/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:28:03.781367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -unikatsieben/flask -https://github.com/unikatsieben/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:28:04.373687 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Mei-Lin-Chen/Flask -https://github.com/Mei-Lin-Chen/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:28:04.873159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dannyec/flask -https://github.com/dannyec/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:28:06.482437 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -kakshi3242/Flask -https://github.com/kakshi3242/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:28:06.989361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Abirdcfly/flask-blog -https://github.com/Abirdcfly/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:28:09.013795 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rainyear/MathModeBot -https://github.com/rainyear/MathModeBot -Entry file: MathModeBot/main.py -Scanned: 2016-10-20 11:28:11.487001 -No vulnerabilities found. - - -jrhuerta/flask-api -https://github.com/jrhuerta/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 11:28:13.008620 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huachen0216/flaskdemo -https://github.com/huachen0216/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 11:28:14.521727 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -MrLokans/flaskr -https://github.com/MrLokans/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:28:15.041054 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -citizen-stig/flaskone -https://github.com/citizen-stig/flaskone -Entry file: flaskone/flask_one.py -Scanned: 2016-10-20 11:28:16.339887 -No vulnerabilities found. - - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-20 11:28:18.772978 -No vulnerabilities found. - - -Robotwing/flaskweb -https://github.com/Robotwing/flaskweb -Entry file: None -Scanned: 2016-10-20 11:28:23.314263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -super452/flasky -https://github.com/super452/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:28:24.833279 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -srbhtest/flaskwebsite -https://github.com/srbhtest/flaskwebsite -Entry file: flaskwebsite/__init__.py -Scanned: 2016-10-20 11:28:27.131060 -No vulnerabilities found. - - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:28:27.660261 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:28:39.694741 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neo1218/m2m -https://github.com/neo1218/m2m -Entry file: m2m/m2m/app/__init__.py -Scanned: 2016-10-20 11:28:42.264379 -No vulnerabilities found. - - -fhamami/flaskone -https://github.com/fhamami/flaskone -Entry file: flaskone/app/__init__.py -Scanned: 2016-10-20 11:28:43.992240 -No vulnerabilities found. - - -windery/flasky -https://github.com/windery/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:28:44.538056 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kcunning/flask-class-c9 -https://github.com/kcunning/flask-class-c9 -Entry file: flask-class-c9/flaskclass/app/__init__.py -Scanned: 2016-10-20 11:28:49.150238 -Vulnerability 1: -File: flask-class-c9/flaskclass/app/views.py - > User input at line 38, trigger word ".data": - numbers = form.numbers.data -Reassigned in: - File: flask-class-c9/flaskclass/app/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) - File: flask-class-c9/flaskclass/app/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) -File: flask-class-c9/flaskclass/app/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('game.html',game_nums=game_nums, player_nums=numbers, wins=wins) - - - -tangza/FlaskAPP -https://github.com/tangza/FlaskAPP -Entry file: FlaskAPP/myblog/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-20 11:28:57.063715 -No vulnerabilities found. - - -MarHelen/FlaskLogin -https://github.com/MarHelen/FlaskLogin -Entry file: FlaskLogin/sql_declarative.py -Scanned: 2016-10-20 11:29:04.753985 -Vulnerability 1: -File: FlaskLogin/first.py - > User input at line 63, trigger word "get(": - email = request.form.get('email') -Reassigned in: - File: FlaskLogin/first.py - > Line 70: user = User(email, request.form.get('pw')) -File: FlaskLogin/first.py - > reaches line 65, trigger word "filter(": - temp_user_set = User.query.filter(User.email == email).first() - - - -louiskun/flaskGIT -https://github.com/louiskun/flaskGIT -Entry file: flaskGIT/sessionmail.py -Scanned: 2016-10-20 11:29:05.540902 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskGIT/venv/lib/python2.7/genericpath.py - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 11:29:06.068893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sethblack/python-flask-pixel-tracking -https://github.com/sethblack/python-flask-pixel-tracking -Entry file: python-flask-pixel-tracking/pfpt/main.py -Scanned: 2016-10-20 11:29:07.538330 -No vulnerabilities found. - - -kloudsec/py-webkit2png-flask-api -https://github.com/kloudsec/py-webkit2png-flask-api -Entry file: py-webkit2png-flask-api/api/app.py -Scanned: 2016-10-20 11:29:09.490537 -Vulnerability 1: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 2: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 3: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 4: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 5: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 6: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 7: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 8: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - - - -Karambir-K/Flask-Intro -https://github.com/Karambir-K/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 11:29:10.017774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-20 11:29:11.603547 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -logicalicy/flask_boostrap -https://github.com/logicalicy/flask_boostrap -Entry file: flask_boostrap/app/__init__.py -Scanned: 2016-10-20 11:29:13.016612 -No vulnerabilities found. - - -jeffreybergman/flask-blog -https://github.com/jeffreybergman/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:29:13.576835 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -MrLokans/discover_flask -https://github.com/MrLokans/discover_flask -Entry file: discover_flask/app.py -Scanned: 2016-10-20 11:29:15.123894 -No vulnerabilities found. - - -xiazhe/flask-demo -https://github.com/xiazhe/flask-demo -Entry file: None -Scanned: 2016-10-20 11:29:15.649241 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiazhe/flask-demo. - -nikoheikkila/flask-blog -https://github.com/nikoheikkila/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:29:16.200193 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Vatsalgame/flask-try -https://github.com/Vatsalgame/flask-try -Entry file: None -Scanned: 2016-10-20 11:29:16.900513 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Vatsalgame/flask-try. - -bbozhev/flask-test -https://github.com/bbozhev/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:29:17.464919 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:29:18.541706 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -danielcodes/flask-practice -https://github.com/danielcodes/flask-practice -Entry file: None -Scanned: 2016-10-20 11:29:19.068750 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danielcodes/flask-practice. - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 11:29:19.587202 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-20 11:29:25.039838 -No vulnerabilities found. - - -keithleit/flask-demo -https://github.com/keithleit/flask-demo -Entry file: None -Scanned: 2016-10-20 11:29:25.570197 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/keithleit/flask-demo. - -wstcpyt/flask-demo -https://github.com/wstcpyt/flask-demo -Entry file: None -Scanned: 2016-10-20 11:29:27.096606 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wstcpyt/flask-demo. - -geraldmc/flask-template -https://github.com/geraldmc/flask-template -Entry file: None -Scanned: 2016-10-20 11:29:28.621645 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/geraldmc/flask-template. - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-20 11:29:39.087735 -No vulnerabilities found. - - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 11:29:40.637159 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-20 11:29:43.939182 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ktomlee/flask_init -https://github.com/ktomlee/flask_init -Entry file: None -Scanned: 2016-10-20 11:29:44.468047 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ktomlee/flask_init. - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: flask_experiments/main.py -Scanned: 2016-10-20 11:29:48.469140 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Joryang/flask_videos -https://github.com/Joryang/flask_videos -Entry file: flask_videos/videos.py -Scanned: 2016-10-20 11:29:49.993244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AvijitGhosh82/appengine_flask -https://github.com/AvijitGhosh82/appengine_flask -Entry file: appengine_flask/main.py -Scanned: 2016-10-20 11:29:59.111152 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sadev1/flask-demo -https://github.com/sadev1/flask-demo -Entry file: None -Scanned: 2016-10-20 11:30:05.623829 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sadev1/flask-demo. - -markleung1969/flask-base -https://github.com/markleung1969/flask-base -Entry file: None -Scanned: 2016-10-20 11:30:06.145568 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/markleung1969/flask-base. - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:30:06.667816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zmrfzn/Flask_Sample -https://github.com/zmrfzn/Flask_Sample -Entry file: Flask_Sample/app.py -Scanned: 2016-10-20 11:30:08.264379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 11:30:08.791910 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -butovichev/flask-blog -https://github.com/butovichev/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:30:10.331258 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-20 11:30:12.523214 -No vulnerabilities found. - - -rholmes69/flasky2_1 -https://github.com/rholmes69/flasky2_1 -Entry file: flasky2_1/app/__init__.py -Scanned: 2016-10-20 11:30:16.063752 -Vulnerability 1: -File: flasky2_1/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 55: posts = pagination.items - File: flasky2_1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flasky2_1/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 45: show_followed = False - File: flasky2_1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flasky2_1/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 67: posts = pagination.items -File: flasky2_1/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flasky2_1/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky2_1/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 134: comments = pagination.items - File: flasky2_1/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky2_1/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flasky2_1/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky2_1/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flasky2_1/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky2_1/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flasky2_1/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 246: comments = pagination.items -File: flasky2_1/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-20 11:30:18.045844 -Vulnerability 1: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 31, trigger word "get(": - name = session.get('name', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - -Vulnerability 2: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 32, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - - - -jcerise/openspacesboard-python -https://github.com/jcerise/openspacesboard-python -Entry file: openspacesboard-python/osbp_app/__init__.py -Scanned: 2016-10-20 11:30:20.621628 -Vulnerability 1: -File: openspacesboard-python/osbp_app/openspacesboard.py - > User input at line 44, trigger word "get(": - me = github.get('user') -Reassigned in: - File: openspacesboard-python/osbp_app/openspacesboard.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: openspacesboard-python/osbp_app/openspacesboard.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(me.data) - -Vulnerability 2: -File: openspacesboard-python/osbp_app/openspacesboard.py - > User input at line 69, trigger word "get(": - me = github.get('user') -Reassigned in: - File: openspacesboard-python/osbp_app/openspacesboard.py - > Line 64: ret_MAYBE_FUNCTION_NAME = 'Access denied: reason=%s error=%s' % (request.args['error'], request.args['error_description']) -File: openspacesboard-python/osbp_app/openspacesboard.py - > reaches line 70, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(me.data) - -Vulnerability 3: -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > User input at line 29, trigger word "get(": - space = ConferenceSpace.query.get(space_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > Line 32: space = dict(id=space.id, space_name=space.space_name, location_id=space.location_id, event_date=space.event_date, start_time=space.start_time, end_time=space.end_time) -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('space'space) - -Vulnerability 4: -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > User input at line 39, trigger word "get(": - session = ConferenceSession.query.get(session_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 42: session_space = session.space - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 43: session_location = session_space.location - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 44: timespan = 'start_time''end_time'session_space.start_timesession_space.end_time - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 45: session = dict(id=session.id, title=session.title, description=session.description, convener=session.convener, space_name=session_space.space_name, location=session_location.name, date=session_space.event_date, timespan=timespan) -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('session'session) - -Vulnerability 5: -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > User input at line 27, trigger word "get(": - location = ConferenceLocation.query.get(location_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > Line 30: location = dict(id=location.id, name=location.name) -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > reaches line 31, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('location'location) - - - -icecraft/ZhiHuDaemon -https://github.com/icecraft/ZhiHuDaemon -Entry file: ZhiHuDaemon/app/__init__.py -Scanned: 2016-10-20 11:30:22.296293 -Vulnerability 1: -File: ZhiHuDaemon/app/main/views.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 16: pagination = Question.query.order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 19: questions = pagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',questions=questions, pagination=pagination) - -Vulnerability 2: -File: ZhiHuDaemon/app/main/views.py - > User input at line 26, trigger word "form[": - keyword = '%' + request.form['search'] + '%' -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 30, trigger word "filter(": - pagination = Question.query.filter(Question.title.like(keyword)).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - -Vulnerability 3: -File: ZhiHuDaemon/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 33: questions = pagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 30, trigger word "filter(": - pagination = Question.query.filter(Question.title.like(keyword)).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - -Vulnerability 4: -File: ZhiHuDaemon/app/main/views.py - > User input at line 26, trigger word "form[": - keyword = '%' + request.form['search'] + '%' -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',questions=questions, pagination=pagination, keyword=keyword[1-1]) - -Vulnerability 5: -File: ZhiHuDaemon/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 33: questions = pagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',questions=questions, pagination=pagination, keyword=keyword[1-1]) - -Vulnerability 6: -File: ZhiHuDaemon/app/main/views.py - > User input at line 100, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 101: askpagination = Question.query.filter_by(author_id=user.id).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 104: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 105: page = request.args.get('page', 1,type=int) - File: ZhiHuDaemon/app/main/views.py - > Line 106: anspagination = Answer.query.filter_by(author_id=user.id).order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 109: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 110: answers = anspagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, questions=questions, answers=answers, askpagination=askpagination, anspagination=anspagination) - -Vulnerability 7: -File: ZhiHuDaemon/app/main/views.py - > User input at line 105, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 100: page = request.args.get('page', 1,type=int) - File: ZhiHuDaemon/app/main/views.py - > Line 101: askpagination = Question.query.filter_by(author_id=user.id).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 104: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 106: anspagination = Answer.query.filter_by(author_id=user.id).order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 109: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 110: answers = anspagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, questions=questions, answers=answers, askpagination=askpagination, anspagination=anspagination) - -Vulnerability 8: -File: ZhiHuDaemon/app/main/views.py - > User input at line 145, trigger word "get(": - answer_id = request.args.get('answer_id', -1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 147: answer = Answer.query.filter_by(id=answer_id) - File: ZhiHuDaemon/app/main/views.py - > Line 150: answer = Answer(answer=answerForm.body.data, author=current_user._get_current_object(), authorname=current_user.username, question=question) - File: ZhiHuDaemon/app/main/views.py - > Line 159: comment = Comment(comment=commentForm.body.data, author=current_user._get_current_object(), authorname=current_user.username, answer=answer) - File: ZhiHuDaemon/app/main/views.py - > Line 155: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.question',id=id)) - File: ZhiHuDaemon/app/main/views.py - > Line 164: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.question',id=id)) -File: ZhiHuDaemon/app/main/views.py - > reaches line 168, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('question.html',question=question, asker=asker, answerForm=answerForm, answers=answers, comments=comments, commentForm=commentForm, answer_id=answer_id) - - - -AntonisFK/Login_registration_Flask -https://github.com/AntonisFK/Login_registration_Flask -Entry file: None -Scanned: 2016-10-20 11:30:23.309841 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AntonisFK/Login_registration_Flask. - -jeseon/flask-by-example -https://github.com/jeseon/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:30:24.482230 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-20 11:30:26.028966 -Vulnerability 1: -File: micro-flask-blog/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 18: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 19: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 2: -File: micro-flask-blog/app/main/views.py - > User input at line 124, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 125: pagination = Post.query.filter_by(category_id=category_id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 126: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 127, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',posts=posts, pagination=pagination, username=username, category_id=category_id) - - - -maxidrum/Flask_and_Mongo -https://github.com/maxidrum/Flask_and_Mongo -Entry file: Flask_and_Mongo/application/__init__.py -Scanned: 2016-10-20 11:30:26.552250 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: None -Scanned: 2016-10-20 11:30:28.081121 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -keimos/flask-rest-sql -https://github.com/keimos/flask-rest-sql -Entry file: flask-rest-sql/app.py -Scanned: 2016-10-20 11:30:30.577361 -No vulnerabilities found. - - -jeffreybergman/flask-hello-world -https://github.com/jeffreybergman/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:30:39.139076 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -zolaneta/todo_flask_application -https://github.com/zolaneta/todo_flask_application -Entry file: None -Scanned: 2016-10-20 11:30:40.678968 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/todo_flask_application. - -baskervilski/flask-hello-world -https://github.com/baskervilski/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:30:42.253347 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -Bbouley/flask-by-example -https://github.com/Bbouley/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:30:44.914213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wilbert-abreu/realtime_slack_flask_app -https://github.com/wilbert-abreu/realtime_slack_flask_app -Entry file: None -Scanned: 2016-10-20 11:30:45.417335 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ellachao/Flask_GmailAPI_Example -https://github.com/ellachao/Flask_GmailAPI_Example -Entry file: Flask_GmailAPI_Example/main.py -Scanned: 2016-10-20 11:30:48.936294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NJIT-SIG-WEBDEV/Flask-URL-Shortner -https://github.com/NJIT-SIG-WEBDEV/Flask-URL-Shortner -Entry file: Flask-URL-Shortner/app.py -Scanned: 2016-10-20 11:30:52.043852 -Vulnerability 1: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "url_for(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - -Vulnerability 2: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "flash(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - - - -hilmarh/island-python-flask-example -https://github.com/hilmarh/island-python-flask-example -Entry file: island-python-flask-example/app/__init__.py -Scanned: 2016-10-20 11:30:59.617350 -No vulnerabilities found. - - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-20 11:31:06.149270 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-20 11:31:07.458041 -No vulnerabilities found. - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-20 11:31:07.985795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marcabomb/flask_hello_world -https://github.com/marcabomb/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:31:09.003945 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/marcabomb/flask_hello_world. - -kevin-js/azure-flask-tutorial -https://github.com/kevin-js/azure-flask-tutorial -Entry file: azure-flask-tutorial/run.py -Scanned: 2016-10-20 11:31:11.314240 -No vulnerabilities found. - - -ShawnPengxy/Flask-madeBlog -https://github.com/ShawnPengxy/Flask-madeBlog -Entry file: Flask-madeBlog/site-packages/flask/sessions.py -Scanned: 2016-10-20 11:31:21.628231 -No vulnerabilities found. - - -vinayraghavan/pyacacemy-flask-workshop -https://github.com/vinayraghavan/pyacacemy-flask-workshop -Entry file: pyacacemy-flask-workshop/bookmarks.py -Scanned: 2016-10-20 11:31:23.009081 -No vulnerabilities found. - - -drbrightside/first-flask-app -https://github.com/drbrightside/first-flask-app -Entry file: None -Scanned: 2016-10-20 11:31:23.526823 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -D10221/gae_flask_ndb_test -https://github.com/D10221/gae_flask_ndb_test -Entry file: gae_flask_ndb_test/main.py -Scanned: 2016-10-20 11:31:24.939739 -No vulnerabilities found. - - -micahcourey/FirstFlaskApp -https://github.com/micahcourey/FirstFlaskApp -Entry file: FirstFlaskApp/flask_app.py -Scanned: 2016-10-20 11:31:26.221159 -No vulnerabilities found. - - -commandknight/cs125-fooddy-flask -https://github.com/commandknight/cs125-fooddy-flask -Entry file: cs125-fooddy-flask/fooddy2.py -Scanned: 2016-10-20 11:31:32.182950 -Vulnerability 1: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 177, trigger word "get(": - long = request.form.get('current_location_longitude') -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 195: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 185, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) - -Vulnerability 2: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 178, trigger word "get(": - lat = request.form.get('current_location_latitude') -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 195: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 185, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) - -Vulnerability 3: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 191, trigger word "form[": - a1 = request.form['addressline1'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - -Vulnerability 4: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 192, trigger word "form[": - city = request.form['addresscity'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - -Vulnerability 5: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 193, trigger word "form[": - state = request.form['addressstate'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-20 11:31:33.633115 -No vulnerabilities found. - - -rfmapp/TheFlaskMegaTutorial -https://github.com/rfmapp/TheFlaskMegaTutorial -Entry file: None -Scanned: 2016-10-20 11:31:34.183319 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -candyer/Flask -https://github.com/candyer/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:31:36.339790 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scripterkaran/flask -https://github.com/scripterkaran/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:31:36.922014 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -JadyLiu/flask -https://github.com/JadyLiu/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:31:37.512160 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -itsrifat/flask-celery-docker-scale -https://github.com/itsrifat/flask-celery-docker-scale -Entry file: flask-celery-docker-scale/flask-app/app.py -Scanned: 2016-10-20 11:31:38.807388 -No vulnerabilities found. - - -sinscary/Flask-Social-Networking -https://github.com/sinscary/Flask-Social-Networking -Entry file: Flask-Social-Networking/app.py -Scanned: 2016-10-20 11:31:40.714757 -Vulnerability 1: -File: Flask-Social-Networking/app.py - > User input at line 111, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: Flask-Social-Networking/app.py - > Line 118: user = current_user -File: Flask-Social-Networking/app.py - > reaches line 121, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 146, trigger word "flash(": - flash('You are now following {}'.format(to_user.username), 'success') - -Vulnerability 3: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 165, trigger word "flash(": - flash('You have unfollowed {}'.format(to_user.username), 'success') - -Vulnerability 6: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -osuosl/timesync-frontend-flask -https://github.com/osuosl/timesync-frontend-flask -Entry file: None -Scanned: 2016-10-20 11:31:41.272318 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/osuosl/timesync-frontend-flask. - -CBR09/flaskapp -https://github.com/CBR09/flaskapp -Entry file: None -Scanned: 2016-10-20 11:31:41.785892 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CBR09/flaskapp. - -narakai/flaskblog -https://github.com/narakai/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:31:42.310753 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:31:42.821776 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:31:45.340998 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:31:45.849505 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darrenhankins/flaskr -https://github.com/darrenhankins/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:31:49.367979 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:31:50.879918 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Looncall/Flaskr -https://github.com/Looncall/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 11:31:59.393682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeffreybergman/flasktaskr -https://github.com/jeffreybergman/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:32:06.902508 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marcabomb/flasktaskr -https://github.com/marcabomb/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:32:07.417916 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -czy1238677/flasky -https://github.com/czy1238677/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:32:08.934428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Pink-Moon/flaskr -https://github.com/Pink-Moon/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:32:09.454304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexGrek/FlaskLib -https://github.com/AlexGrek/FlaskLib -Entry file: None -Scanned: 2016-10-20 11:32:09.976409 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -daveweber/FlaskBar -https://github.com/daveweber/FlaskBar -Entry file: FlaskBar/index.py -Scanned: 2016-10-20 11:32:11.489396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flaskMe -https://github.com/danleyb2/flaskMe -Entry file: flaskMe/flaskREST.py -Scanned: 2016-10-20 11:32:12.840981 -Vulnerability 1: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 2: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 3: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - -Vulnerability 4: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - - - -Rikka-chan/flaskCharts -https://github.com/Rikka-chan/flaskCharts -Entry file: None -Scanned: 2016-10-20 11:32:22.423328 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mcmcgonagle/flasktaskr2 -https://github.com/mcmcgonagle/flasktaskr2 -Entry file: flasktaskr2/project/views.py -Scanned: 2016-10-20 11:32:24.792754 -No vulnerabilities found. - - -AlexFransis/FlaskyProject -https://github.com/AlexFransis/FlaskyProject -Entry file: FlaskyProject/app/__init__.py -Scanned: 2016-10-20 11:32:26.660184 -No vulnerabilities found. - - -bunkdeath/FlaskTemplate -https://github.com/bunkdeath/FlaskTemplate -Entry file: FlaskTemplate/application.py -Scanned: 2016-10-20 11:32:27.957444 -No vulnerabilities found. - - -zding5/FlaskDemo -https://github.com/zding5/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 11:32:28.476896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -diggzhang/flaskMaze -https://github.com/diggzhang/flaskMaze -Entry file: None -Scanned: 2016-10-20 11:32:33.022765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/diggzhang/flaskMaze. - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 11:32:34.542909 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deanmax/FlaskAPP -https://github.com/deanmax/FlaskAPP -Entry file: FlaskAPP/app/__init__.py -Scanned: 2016-10-20 11:32:41.372486 -No vulnerabilities found. - - -hugoantunes/base-flask -https://github.com/hugoantunes/base-flask -Entry file: base-flask/service/__init__.py -Scanned: 2016-10-20 11:32:43.163571 -No vulnerabilities found. - - -haburibe/docker-flask -https://github.com/haburibe/docker-flask -Entry file: docker-flask/main.py -Scanned: 2016-10-20 11:32:44.454578 -No vulnerabilities found. - - -timyi1212/flask-demo -https://github.com/timyi1212/flask-demo -Entry file: None -Scanned: 2016-10-20 11:32:44.973146 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/timyi1212/flask-demo. - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:32:45.513597 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -namickey/hello-flask -https://github.com/namickey/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 11:32:46.106239 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-20 11:32:47.731228 -No vulnerabilities found. - - -krisekenes/flask_deployment -https://github.com/krisekenes/flask_deployment -Entry file: flask_deployment/server.py -Scanned: 2016-10-20 11:32:49.043036 -No vulnerabilities found. - - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-20 11:32:50.835814 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-20 11:32:51.414483 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-20 11:32:53.300673 -Vulnerability 1: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - -Vulnerability 2: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - - - -honmaple/flask-word -https://github.com/honmaple/flask-word -Entry file: flask-word/app/__init__.py -Scanned: 2016-10-20 11:32:56.483608 -Vulnerability 1: -File: flask-word/app/paginate/views.py - > User input at line 42, trigger word "get(": - page = is_num(request.args.get('page')) -Reassigned in: - File: flask-word/app/paginate/views.py - > Line 43: topics = Topic.query.paginate(page, app.config['PER_PAGE'],error_out=True) -File: flask-word/app/paginate/views.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('page/page.html',topics=topics) - -Vulnerability 2: -File: flask-word/app/count/views.py - > User input at line 17, trigger word "cookies[": - count = int(request.cookies['count']) + 1 -Reassigned in: - File: flask-word/app/count/views.py - > Line 19: count = 0 - File: flask-word/app/count/views.py - > Line 20: response = make_response(str(count)) - File: flask-word/app/count/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = response -File: flask-word/app/count/views.py - > reaches line 21, trigger word "set_cookie(": - response.set_cookie('count',value=str(count), max_age=1800) - -Vulnerability 3: -File: flask-word/app/chat/views.py - > User input at line 38, trigger word "get(": - username = session.get('username', '') -Reassigned in: - File: flask-word/app/chat/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-word/app/chat/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat/chat.html',username=username, room=room) - -Vulnerability 4: -File: flask-word/app/chat/views.py - > User input at line 39, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: flask-word/app/chat/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-word/app/chat/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat/chat.html',username=username, room=room) - - - -marcabomb/flask-blog -https://github.com/marcabomb/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:32:57.071474 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -studiomezklador/flask_api -https://github.com/studiomezklador/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 11:32:59.612666 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rinechran/flask-tutorial -https://github.com/rinechran/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:33:07.149002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Savvis/flask-phonebook -https://github.com/Savvis/flask-phonebook -Entry file: flask-phonebook/app/__init__.py -Scanned: 2016-10-20 11:33:10.132579 -No vulnerabilities found. - - -a-r-g-v/flask-template -https://github.com/a-r-g-v/flask-template -Entry file: None -Scanned: 2016-10-20 11:33:10.650112 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/a-r-g-v/flask-template. - -aksareen/Flask-learn -https://github.com/aksareen/Flask-learn -Entry file: Flask-learn/app.py -Scanned: 2016-10-20 11:33:11.186462 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aqisnotliquid/flask_rpg -https://github.com/aqisnotliquid/flask_rpg -Entry file: flask_rpg/app/__init__.py -Scanned: 2016-10-20 11:33:12.664554 -No vulnerabilities found. - - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-20 11:33:14.064492 -No vulnerabilities found. - - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 11:33:22.615350 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-20 11:33:25.357385 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Kriordan/flask-blog -https://github.com/Kriordan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:33:25.906311 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -textbook/flask-forecaster -https://github.com/textbook/flask-forecaster -Entry file: flask-forecaster/flask_forecaster/flask_app.py -Scanned: 2016-10-20 11:33:28.678890 -Vulnerability 1: -File: flask-forecaster/flask_forecaster/flask_app.py - > User input at line 34, trigger word ".data": - token = form.token.data -Reassigned in: - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 36: projects = Tracker.validate_token(token) - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 38: session['token'] = token - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, version=__version__) -File: flask-forecaster/flask_forecaster/flask_app.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, projects=projects, version=__version__) - -Vulnerability 2: -File: flask-forecaster/flask_forecaster/flask_app.py - > User input at line 52, trigger word "get(": - token = session.get('token') -Reassigned in: - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 55: api = Tracker(token) -File: flask-forecaster/flask_forecaster/flask_app.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project.html',project=api.get_project(project_id)) - - - -nava45/flask-routelogger -https://github.com/nava45/flask-routelogger -Entry file: flask-routelogger/flask_app_example.py -Scanned: 2016-10-20 11:33:29.220522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MattHealy/flask-skeleton -https://github.com/MattHealy/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:33:33.747285 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MattHealy/flask-skeleton. - -Xavier-Lam/flask-wechat -https://github.com/Xavier-Lam/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-20 11:33:35.276935 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Ty-WDFW/Flask-Tickets -https://github.com/Ty-WDFW/Flask-Tickets -Entry file: Flask-Tickets/main.py -Scanned: 2016-10-20 11:33:36.613595 -Vulnerability 1: -File: Flask-Tickets/main.py - > User input at line 15, trigger word "form[": - fishticket = request.form['text'] -Reassigned in: - File: Flask-Tickets/main.py - > Line 16: response = get_fish_ticket(fishticket) -File: Flask-Tickets/main.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bioinfo.html',entries=response, ticket=fishticket) - - - -makudesu/flask-thesis -https://github.com/makudesu/flask-thesis -Entry file: flask-thesis/bnhs.py -Scanned: 2016-10-20 11:33:42.137409 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivanenko/flask-webcrawler -https://github.com/ivanenko/flask-webcrawler -Entry file: flask-webcrawler/ww2.py -Scanned: 2016-10-20 11:33:42.663527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-20 11:33:45.835218 -No vulnerabilities found. - - -kubabu/flask_blog -https://github.com/kubabu/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:33:46.830692 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MichaelDaniello/LearnFlask -https://github.com/MichaelDaniello/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-20 11:33:47.378193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bplabombarda/fdr -https://github.com/bplabombarda/fdr -Entry file: fdr/server/__init__.py -Scanned: 2016-10-20 11:33:51.260658 -No vulnerabilities found. - - -gzxultra/FlaskLoginManagement -https://github.com/gzxultra/FlaskLoginManagement -Entry file: FlaskLoginManagement/app/__init__.py -Scanned: 2016-10-20 11:33:51.806615 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -metajemo/testapp -https://github.com/metajemo/testapp -Entry file: testapp/testapp.py -Scanned: 2016-10-20 11:33:52.335630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -victorcuervo/FlaskMongoDB -https://github.com/victorcuervo/FlaskMongoDB -Entry file: FlaskMongoDB/welcome.py -Scanned: 2016-10-20 11:33:53.738447 -No vulnerabilities found. - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-20 11:33:55.673233 -Vulnerability 1: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 31, trigger word "get(": - name = session.get('name', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - -Vulnerability 2: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 32, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - - - -sasha42/Mailchimp-utility -https://github.com/sasha42/Mailchimp-utility -Entry file: None -Scanned: 2016-10-20 11:33:56.191789 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sasha42/Mailchimp-utility. - -auliude/flask_hello_world -https://github.com/auliude/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:33:56.699940 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/auliude/flask_hello_world. - -yogeshdixit41/PyFlaskWebApp -https://github.com/yogeshdixit41/PyFlaskWebApp -Entry file: PyFlaskWebApp/hello.py -Scanned: 2016-10-20 11:33:57.347146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-20 11:34:00.858228 -Vulnerability 1: -File: micro-flask-blog/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 18: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 19: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 2: -File: micro-flask-blog/app/main/views.py - > User input at line 124, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 125: pagination = Post.query.filter_by(category_id=category_id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 126: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 127, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',posts=posts, pagination=pagination, username=username, category_id=category_id) - - - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-20 11:34:08.243303 -No vulnerabilities found. - - -rtorres90/rest-flask-tutorial -https://github.com/rtorres90/rest-flask-tutorial -Entry file: rest-flask-tutorial/rest_flask/endpoints_project2sol.py -Scanned: 2016-10-20 11:34:08.944756 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jz314/flask-demo-copy -https://github.com/jz314/flask-demo-copy -Entry file: None -Scanned: 2016-10-20 11:34:09.461886 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jz314/flask-demo-copy. - -willelson/flask-app-template -https://github.com/willelson/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-20 11:34:11.007553 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -acbart/lti-flask-skeleton -https://github.com/acbart/lti-flask-skeleton -Entry file: lti-flask-skeleton/main.py -Scanned: 2016-10-20 11:34:11.548788 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GreatBedAwake/flask_lab_web -https://github.com/GreatBedAwake/flask_lab_web -Entry file: flask_lab_web/app/__init__.py -Scanned: 2016-10-20 11:34:13.131349 -Vulnerability 1: -File: flask_lab_web/app/views.py - > User input at line 46, trigger word "form[": - find_component = request.form['find_component'] -Reassigned in: - File: flask_lab_web/app/views.py - > Line 47: dates = select_where_db(find_component) - File: flask_lab_web/app/views.py - > Line 54: dates = select_data() - File: flask_lab_web/app/views.py - > Line 56: dates = select_data() -File: flask_lab_web/app/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',component=dates) - - - -Derfirm/hello-docker-flask -https://github.com/Derfirm/hello-docker-flask -Entry file: hello-docker-flask/app.py -Scanned: 2016-10-20 11:34:14.424947 -No vulnerabilities found. - - -arvvvs/Flask-Practice-Metis-Delivery -https://github.com/arvvvs/Flask-Practice-Metis-Delivery -Entry file: Flask-Practice-Metis-Delivery/app.py -Scanned: 2016-10-20 11:34:25.607792 -Vulnerability 1: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 30, trigger word "form(": - form = request_phone_form() -Reassigned in: - File: Flask-Practice-Metis-Delivery/app.py - > Line 32: session['phone'] = form.phone.data - File: Flask-Practice-Metis-Delivery/app.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('lookup')) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) - -Vulnerability 2: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 57, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 3: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 59, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 4: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 127, trigger word "form[": - _phone = request.form['submitPhone'] -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 128, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('lookup.html',phone=_phone) - -Vulnerability 5: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 148, trigger word "get(": - phone = request.args.get('phone', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 6: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 149, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 7: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 150, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 8: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 151, trigger word "get(": - phone_value = request.args.get('phone_value', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - - - -nosuchip/flask-video-streaming -https://github.com/nosuchip/flask-video-streaming -Entry file: flask-video-streaming/main.py -Scanned: 2016-10-20 11:34:29.153655 -No vulnerabilities found. - - -VistaarJ/REST-API-Using-Flask- -https://github.com/VistaarJ/REST-API-Using-Flask- -Entry file: REST-API-Using-Flask-/app.py -Scanned: 2016-10-20 11:34:37.600063 -No vulnerabilities found. - - -n-batalha/flask-api-template -https://github.com/n-batalha/flask-api-template -Entry file: flask-api-template/web/journey_predict/__init__.py -Scanned: 2016-10-20 11:34:39.042547 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-20 11:34:39.631672 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-20 11:34:40.167600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -blackmad/flask-google-login-example -https://github.com/blackmad/flask-google-login-example -Entry file: flask-google-login-example/main.py -Scanned: 2016-10-20 11:34:40.686808 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DEV3L/openshift-python-flask-example -https://github.com/DEV3L/openshift-python-flask-example -Entry file: openshift-python-flask-example/wsgi/run.py -Scanned: 2016-10-20 11:34:43.084094 -No vulnerabilities found. - - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-20 11:34:44.382890 -No vulnerabilities found. - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-20 11:34:44.903432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tim9Liu9/Flask_Bootstrap_Blog -https://github.com/Tim9Liu9/Flask_Bootstrap_Blog -Entry file: Flask_Bootstrap_Blog/doc/app.py -Scanned: 2016-10-20 11:34:48.101899 -No vulnerabilities found. - - -cerealcake/flask-ldap3 -https://github.com/cerealcake/flask-ldap3 -Entry file: flask-ldap3/app.py -Scanned: 2016-10-20 11:34:49.498520 -No vulnerabilities found. - - -willelson/flask-login-template -https://github.com/willelson/flask-login-template -Entry file: None -Scanned: 2016-10-20 11:34:50.143051 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zolaneta/books_flask_app -https://github.com/zolaneta/books_flask_app -Entry file: None -Scanned: 2016-10-20 11:34:50.652801 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/books_flask_app. - -Anivarth/quiz-python-flask -https://github.com/Anivarth/quiz-python-flask -Entry file: quiz-python-flask/quiz.py -Scanned: 2016-10-20 11:34:52.986579 -No vulnerabilities found. - - -richyvk/flask-url-shortener -https://github.com/richyvk/flask-url-shortener -Entry file: flask-url-shortener/app.py -Scanned: 2016-10-20 11:34:53.523031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -susantshrestha/flask -https://github.com/susantshrestha/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:34:57.058970 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -SunchunZhou/flask -https://github.com/SunchunZhou/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:34:57.659551 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -zbc/Flask -https://github.com/zbc/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:34:58.168746 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cobra0914/flask -https://github.com/cobra0914/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:35:00.751420 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -k-hung/FlaskApp -https://github.com/k-hung/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 11:35:09.827157 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-20 11:35:13.944967 -No vulnerabilities found. - - -yoshiya0503/Flask-Best-Practices -https://github.com/yoshiya0503/Flask-Best-Practices -Entry file: Flask-Best-Practices/methodview.py -Scanned: 2016-10-20 11:35:15.334768 -No vulnerabilities found. - - -ThunderousFigs/Genomes -https://github.com/ThunderousFigs/Genomes -Entry file: Genomes/server.py -Scanned: 2016-10-20 11:35:15.887293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Python-Project-Simple/flask-blog -https://github.com/Python-Project-Simple/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:35:23.458210 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -keer2345/flasky -https://github.com/keer2345/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:35:24.973993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PansFortress/flasktasker -https://github.com/PansFortress/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-20 11:35:27.585828 -No vulnerabilities found. - - -olegzhoglo/flasktaskr -https://github.com/olegzhoglo/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:35:30.100612 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:35:38.618411 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:35:40.129488 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -schen2011/flaskandazure -https://github.com/schen2011/flaskandazure -Entry file: None -Scanned: 2016-10-20 11:35:40.687123 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DXZ/flaskr -https://github.com/DXZ/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:35:41.196421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tim1978/flasktaskr -https://github.com/tim1978/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:35:42.716224 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kriordan/flasktaskr -https://github.com/Kriordan/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:35:44.228825 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 11:35:45.795865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-20 11:35:47.459911 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liteng123/flaskr -https://github.com/liteng123/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:35:48.972461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -salazar35/FlaskWeb -https://github.com/salazar35/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 11:35:51.044898 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -pchartrand/FlaskTemp -https://github.com/pchartrand/FlaskTemp -Entry file: FlaskTemp/tempreport.py -Scanned: 2016-10-20 11:35:52.676838 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hattwick/flask2 -https://github.com/hattwick/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-20 11:35:54.236313 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -narakai/FlaskServer -https://github.com/narakai/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-20 11:35:54.757284 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 11:35:55.365431 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -julywoo/flaskWeb -https://github.com/julywoo/flaskWeb -Entry file: flaskWeb/flaskWeb.py -Scanned: 2016-10-20 11:36:00.994465 -No vulnerabilities found. - - -tmlima/flask-intro -https://github.com/tmlima/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:36:01.505715 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 11:36:02.011612 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:36:02.553660 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-20 11:36:10.240229 -No vulnerabilities found. - - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-20 11:36:11.567392 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: flask-scaffold/[appname].py -Scanned: 2016-10-20 11:36:12.082429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-20 11:36:15.988580 -Vulnerability 1: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - -Vulnerability 2: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - - - -amitbn/flask-docker -https://github.com/amitbn/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-20 11:36:17.879228 -No vulnerabilities found. - - -julywoo/flask_login -https://github.com/julywoo/flask_login -Entry file: None -Scanned: 2016-10-20 11:36:23.900560 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/julywoo/flask_login. - -LovroM/Flask-test -https://github.com/LovroM/Flask-test -Entry file: Flask-test/webserver.py -Scanned: 2016-10-20 11:36:26.914428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-20 11:36:30.482977 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -OpenTrons/labsuite_flask -https://github.com/OpenTrons/labsuite_flask -Entry file: labsuite_flask/app.py -Scanned: 2016-10-20 11:36:40.192357 -No vulnerabilities found. - - -YaGiNA/study-flask -https://github.com/YaGiNA/study-flask -Entry file: study-flask/flaskr/__init__.py -Scanned: 2016-10-20 11:36:45.564050 -No vulnerabilities found. - - -seanhelm/flask-test -https://github.com/seanhelm/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:36:46.121439 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -Viredery/python_flask -https://github.com/Viredery/python_flask -Entry file: None -Scanned: 2016-10-20 11:36:46.637300 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Viredery/python_flask. - -josanabr/flask-vbox -https://github.com/josanabr/flask-vbox -Entry file: flask-vbox/flask-vbox.py -Scanned: 2016-10-20 11:36:47.934870 -No vulnerabilities found. - - -simeon-xx/simeon-flask -https://github.com/simeon-xx/simeon-flask -Entry file: simeon-flask/app/init.py -Scanned: 2016-10-20 11:36:49.257613 -No vulnerabilities found. - - -cherry-hyx/flask_t -https://github.com/cherry-hyx/flask_t -Entry file: None -Scanned: 2016-10-20 11:36:49.798994 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cherry-hyx/flask_t. - -abcsds/flask-tests -https://github.com/abcsds/flask-tests -Entry file: flask-tests/streaming/stream.py -Scanned: 2016-10-20 11:36:51.625066 -No vulnerabilities found. - - -tanzhixu/Flask-oauth -https://github.com/tanzhixu/Flask-oauth -Entry file: Flask-oauth/app/__init__.py -Scanned: 2016-10-20 11:36:52.923422 -Vulnerability 1: -File: Flask-oauth/app/user_manager_views.py - > User input at line 32, trigger word "get(": - password = request.json.get('password', None) -Reassigned in: - File: Flask-oauth/app/user_manager_views.py - > Line 38: newpasswd = pwd_context.encrypt(password) -File: Flask-oauth/app/user_manager_views.py - > reaches line 41, trigger word "filter(": - query.filter(User.id == userid).update(User.password_hashnewpasswd) - - - -brandonfujii/flask-microblog -https://github.com/brandonfujii/flask-microblog -Entry file: None -Scanned: 2016-10-20 11:36:53.438971 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dylannnnn/flask_study -https://github.com/dylannnnn/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-20 11:36:53.977739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huasu/InstantFlask -https://github.com/huasu/InstantFlask -Entry file: InstantFlask/app_return_values.py -Scanned: 2016-10-20 11:36:55.722233 -No vulnerabilities found. - - -maricante/flask-blog -https://github.com/maricante/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:36:56.295426 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-20 11:36:57.587372 -No vulnerabilities found. - - -ysicing/Pangu -https://github.com/ysicing/Pangu -Entry file: Pangu/Pangu.py -Scanned: 2016-10-20 11:36:59.668319 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -rbcolson9/flask4kids -https://github.com/rbcolson9/flask4kids -Entry file: flask4kids/hello.py -Scanned: 2016-10-20 11:37:00.921290 -No vulnerabilities found. - - -charlestondance/FlaskStartUp -https://github.com/charlestondance/FlaskStartUp -Entry file: FlaskStartUp/app/__init__.py -Scanned: 2016-10-20 11:37:03.444248 -No vulnerabilities found. - - -erik-farmer/flask-auth-wysiwyg-blog -https://github.com/erik-farmer/flask-auth-wysiwyg-blog -Entry file: flask-auth-wysiwyg-blog/app.py -Scanned: 2016-10-20 11:37:04.731128 -No vulnerabilities found. - - -guilleJB/flask-web-book -https://github.com/guilleJB/flask-web-book -Entry file: flask-web-book/hello.py -Scanned: 2016-10-20 11:37:06.259783 -Vulnerability 1: -File: flask-web-book/hello.py - > User input at line 120, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask-web-book/hello.py - > Line 117: name = None -File: flask-web-book/hello.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('boots.html',name=name, form=form) - - - -dongheelee1/simple_flask_wall -https://github.com/dongheelee1/simple_flask_wall -Entry file: simple_flask_wall/server.py -Scanned: 2016-10-20 11:37:09.799085 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ynifamily3/CRUD-with-Flask-MVC -https://github.com/ynifamily3/CRUD-with-Flask-MVC -Entry file: CRUD-with-Flask-MVC/test.py -Scanned: 2016-10-20 11:37:11.333805 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-20 11:37:13.757529 -No vulnerabilities found. - - -mnzr/Flask-Blueprint-test -https://github.com/mnzr/Flask-Blueprint-test -Entry file: Flask-Blueprint-test/app/__init__.py -Scanned: 2016-10-20 11:37:16.232985 -Vulnerability 1: -File: Flask-Blueprint-test/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprint-test/app/users/views.py - > Line 38: session['user_id'] = user.id -File: Flask-Blueprint-test/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-20 11:37:18.362398 -No vulnerabilities found. - - -aquang9124/flask_semi_restful_routes -https://github.com/aquang9124/flask_semi_restful_routes -Entry file: flask_semi_restful_routes/server.py -Scanned: 2016-10-20 11:37:19.750386 -No vulnerabilities found. - - -PeggyZWY/blog-with-flask -https://github.com/PeggyZWY/blog-with-flask -Entry file: blog-with-flask/app/__init__.py -Scanned: 2016-10-20 11:37:23.636159 -Vulnerability 1: -File: blog-with-flask/app/main/views.py - > User input at line 186, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 189: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: blog-with-flask/app/main/views.py - > Line 192: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 195: comments = pagination.items - File: blog-with-flask/app/main/views.py - > Line 184: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) -File: blog-with-flask/app/main/views.py - > reaches line 204, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, categories=category, comments=comments, pagination=pagination) - -Vulnerability 2: -File: blog-with-flask/app/main/views.py - > User input at line 293, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 294: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 298: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: blog-with-flask/app/main/views.py - > Line 291: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: blog-with-flask/app/main/views.py - > reaches line 301, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='他们关注了', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 3: -File: blog-with-flask/app/main/views.py - > User input at line 311, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 312: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 315: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: blog-with-flask/app/main/views.py - > Line 310: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: blog-with-flask/app/main/views.py - > reaches line 317, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注了他们', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 4: -File: blog-with-flask/app/main/views.py - > User input at line 349, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 350: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 353: comments = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 354, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 5: -File: blog-with-flask/app/main/views.py - > User input at line 431, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 452: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 456: posts = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 460, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('article.html',posts=posts, categories=category, show_followed=show_followed, pagination=pagination) - -Vulnerability 6: -File: blog-with-flask/app/main/views.py - > User input at line 471, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 475: pagination = Post.query.filter_by(category_id=_category.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 478: posts = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 482, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('article.html',posts=posts, categories=category, show_followed=show_followed, pagination=pagination) - - - -TwilioDevEd/browser-calls-flask -https://github.com/TwilioDevEd/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-20 11:37:29.187629 -No vulnerabilities found. - - -terryllowery/flask-hello-world -https://github.com/terryllowery/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:37:30.310578 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -aquang9124/flask_wall_test -https://github.com/aquang9124/flask_wall_test -Entry file: flask_wall_test/server.py -Scanned: 2016-10-20 11:37:31.772202 -No vulnerabilities found. - - -ynejati/MyFlaskApp -https://github.com/ynejati/MyFlaskApp -Entry file: MyFlaskApp/MyFlaskWebApp.py -Scanned: 2016-10-20 11:37:40.254943 -No vulnerabilities found. - - -TheCypher/flask-boiler-plate -https://github.com/TheCypher/flask-boiler-plate -Entry file: flask-boiler-plate/app/__init__.py -Scanned: 2016-10-20 11:37:41.670580 -Vulnerability 1: -File: flask-boiler-plate/app/module_one/views.py - > User input at line 30, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-boiler-plate/app/module_one/views.py - > Line 34: session['user_id'] = user.id -File: flask-boiler-plate/app/module_one/views.py - > reaches line 36, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -TheCypher/flask-api-test -https://github.com/TheCypher/flask-api-test -Entry file: flask-api-test/api.py -Scanned: 2016-10-20 11:37:46.334714 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-api-test/lib/python2.7/genericpath.py - -vstanev1/heroku-flask-app -https://github.com/vstanev1/heroku-flask-app -Entry file: heroku-flask-app/app.py -Scanned: 2016-10-20 11:37:50.249744 -No vulnerabilities found. - - -bellcodo/bellcodo-flask-microblog -https://github.com/bellcodo/bellcodo-flask-microblog -Entry file: bellcodo-flask-microblog/app/__init__.py -Scanned: 2016-10-20 11:37:52.909174 -No vulnerabilities found. - - -megrela/python-flask-skeleton -https://github.com/megrela/python-flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:37:53.440480 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/megrela/python-flask-skeleton. - -plablo09/minimal-flask-dev -https://github.com/plablo09/minimal-flask-dev -Entry file: minimal-flask-dev/hello.py -Scanned: 2016-10-20 11:37:54.840875 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-20 11:37:55.908867 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shyba/browser-calls-flask -https://github.com/shyba/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-20 11:37:57.206539 -No vulnerabilities found. - - -jdgramajo/LearningFlaskFramework -https://github.com/jdgramajo/LearningFlaskFramework -Entry file: LearningFlaskFramework/blog/app/app.py -Scanned: 2016-10-20 11:37:58.502240 -No vulnerabilities found. - - -liuer99cn/awesome-flask-todo -https://github.com/liuer99cn/awesome-flask-todo -Entry file: None -Scanned: 2016-10-20 11:37:59.017809 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/liuer99cn/awesome-flask-todo. - -seiya-tsukada/instant_flask_server -https://github.com/seiya-tsukada/instant_flask_server -Entry file: instant_flask_server/main.py -Scanned: 2016-10-20 11:38:00.352736 -No vulnerabilities found. - - -Journo-App/flask-by-example -https://github.com/Journo-App/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:38:01.071485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bobquest33/testRestFlask -https://github.com/bobquest33/testRestFlask -Entry file: testRestFlask/testRestFlask/testRestFlask/apps/testRest/models.py -Scanned: 2016-10-20 11:38:01.566921 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jjapp/flask-hello-world -https://github.com/jjapp/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:38:02.118148 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -snehasankavaram/donorRegistryFlask -https://github.com/snehasankavaram/donorRegistryFlask -Entry file: donorRegistryFlask/run.py -Scanned: 2016-10-20 11:38:03.410718 -No vulnerabilities found. - - -ayusharma/Drug-discovery-flask -https://github.com/ayusharma/Drug-discovery-flask -Entry file: Drug-discovery-flask/app.py -Scanned: 2016-10-20 11:38:04.924702 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vishaljain3991/flask_oauth_example_template -https://github.com/vishaljain3991/flask_oauth_example_template -Entry file: flask_oauth_example_template/app/__init__.py -Scanned: 2016-10-20 11:38:11.376760 -No vulnerabilities found. - - -F483/flask-data-migration-example -https://github.com/F483/flask-data-migration-example -Entry file: flask-data-migration-example/app.py -Scanned: 2016-10-20 11:38:12.702610 -No vulnerabilities found. - - -studiomezklador/flask_api_2 -https://github.com/studiomezklador/flask_api_2 -Entry file: flask_api_2/__init__.py -Scanned: 2016-10-20 11:38:14.151695 -No vulnerabilities found. - - -SarthakS93/Flask-WebApp -https://github.com/SarthakS93/Flask-WebApp -Entry file: Flask-WebApp/app/__init__.py -Scanned: 2016-10-20 11:38:15.510910 -No vulnerabilities found. - - -dorneanu/flask-app-template -https://github.com/dorneanu/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-20 11:38:16.037519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aquang9124/flask_friends_full -https://github.com/aquang9124/flask_friends_full -Entry file: flask_friends_full/server.py -Scanned: 2016-10-20 11:38:18.377680 -No vulnerabilities found. - - -huasu/LearningFlaskFramework -https://github.com/huasu/LearningFlaskFramework -Entry file: LearningFlaskFramework/hello.py -Scanned: 2016-10-20 11:38:19.672901 -No vulnerabilities found. - - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-20 11:38:25.351778 -No vulnerabilities found. - - -pavelrib/flask -https://github.com/pavelrib/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:38:29.987058 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -octt/flask -https://github.com/octt/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:38:30.696123 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Bwooklyn/flask -https://github.com/Bwooklyn/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:38:31.314747 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:38:39.918533 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ZhenghaoZhu/Flask -https://github.com/ZhenghaoZhu/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:38:41.454437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SeanVaysburd/flask -https://github.com/SeanVaysburd/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:38:47.041288 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -kartheek3011/Flask -https://github.com/kartheek3011/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:38:47.551603 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TerbiumLabs/flask-developer-challenge -https://github.com/TerbiumLabs/flask-developer-challenge -Entry file: flask-developer-challenge/gistapi/gistapi.py -Scanned: 2016-10-20 11:38:51.997913 -No vulnerabilities found. - - -sunscrapers/flask-boilerplate -https://github.com/sunscrapers/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 11:38:53.529269 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sunscrapers/flask-boilerplate. - -jabbalaci/DigitalOceanFlask -https://github.com/jabbalaci/DigitalOceanFlask -Entry file: DigitalOceanFlask/home/demo/projects/ave_caesar/main.py -Scanned: 2016-10-20 11:38:55.172479 -No vulnerabilities found. - - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-20 11:38:59.268325 -No vulnerabilities found. - - -pyx/flask-diced -https://github.com/pyx/flask-diced -Entry file: flask-diced/examples/simple/app.py -Scanned: 2016-10-20 11:39:00.774987 -No vulnerabilities found. - - -basco-johnkevin/note-taking-app -https://github.com/basco-johnkevin/note-taking-app -Entry file: note-taking-app/part1/main.py -Scanned: 2016-10-20 11:39:02.055846 -No vulnerabilities found. - - -Miserlou/serverless-imagehost -https://github.com/Miserlou/serverless-imagehost -Entry file: serverless-imagehost/my_app.py -Scanned: 2016-10-20 11:39:03.358797 -No vulnerabilities found. - - -MRamakri/flaskworkshop -https://github.com/MRamakri/flaskworkshop -Entry file: flaskworkshop/app.py -Scanned: 2016-10-20 11:39:04.646332 -No vulnerabilities found. - - -imhuwq/flasky -https://github.com/imhuwq/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:39:05.161341 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coolmile23/flaskr -https://github.com/coolmile23/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:39:05.669974 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hellohuangjin/flaskblog -https://github.com/hellohuangjin/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:39:06.226518 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -zhangyuhaomei/flasky -https://github.com/zhangyuhaomei/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:39:06.740540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -antonsoroko/flaskapimongo -https://github.com/antonsoroko/flaskapimongo -Entry file: flaskapimongo/flaskapimongo/__init__.py -Scanned: 2016-10-20 11:39:08.255445 -No vulnerabilities found. - - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 11:39:08.784891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-20 11:39:09.385818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhkmxx9302013/flaskmysql -https://github.com/zhkmxx9302013/flaskmysql -Entry file: flaskmysql/flaskmysql.py -Scanned: 2016-10-20 11:39:12.808164 -No vulnerabilities found. - - -xiaomao361/flaskr -https://github.com/xiaomao361/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:39:13.331346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alvaro893/flaskcinemaapp -https://github.com/alvaro893/flaskcinemaapp -Entry file: flaskcinemaapp/FlaskWebProject/__init__.py -Scanned: 2016-10-20 11:39:17.776452 -No vulnerabilities found. - - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:39:18.309805 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -retozero/FlaskDemo -https://github.com/retozero/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 11:39:19.329887 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saurabh1e/FlaskStructure -https://github.com/saurabh1e/FlaskStructure -Entry file: FlaskStructure/src/utils/__init__.py -Scanned: 2016-10-20 11:39:22.765540 -No vulnerabilities found. - - -uklineale/flaskTut -https://github.com/uklineale/flaskTut -Entry file: None -Scanned: 2016-10-20 11:39:25.355045 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zupeiza/FlaskTaskr -https://github.com/zupeiza/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 11:39:30.987945 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -yxun/FlaskSample -https://github.com/yxun/FlaskSample -Entry file: FlaskSample/hello.py -Scanned: 2016-10-20 11:39:32.327253 -No vulnerabilities found. - - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 11:39:32.953832 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DearX-dlx/FlaskBlog -https://github.com/DearX-dlx/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 11:39:40.573139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tahoe/flask-restless -https://github.com/tahoe/flask-restless -Entry file: flask-restless/examples/clients/jquery/__main__.py -Scanned: 2016-10-20 11:39:42.154780 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhkmxx9302013/RPiFlask -https://github.com/zhkmxx9302013/RPiFlask -Entry file: RPiFlask/main.py -Scanned: 2016-10-20 11:39:47.706193 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mkubaczyk/flask-structure -https://github.com/mkubaczyk/flask-structure -Entry file: flask-structure/apps/__init__.py -Scanned: 2016-10-20 11:39:49.164470 -No vulnerabilities found. - - -PavelMPD/flask_oauth -https://github.com/PavelMPD/flask_oauth -Entry file: flask_oauth/server.py -Scanned: 2016-10-20 11:39:52.467569 -No vulnerabilities found. - - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 11:39:53.993532 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -doubtingben/flask-mongo -https://github.com/doubtingben/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 11:39:54.514558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -farridav/flask_friends -https://github.com/farridav/flask_friends -Entry file: flask_friends/src/friends/__init__.py -Scanned: 2016-10-20 11:39:57.159395 -No vulnerabilities found. - - -doubtingben/flask-jobs -https://github.com/doubtingben/flask-jobs -Entry file: flask-jobs/code/web.py -Scanned: 2016-10-20 11:40:01.515824 -No vulnerabilities found. - - -gh-tcbd/flask-test -https://github.com/gh-tcbd/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:40:02.048756 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -askewseth/StatsFlask -https://github.com/askewseth/StatsFlask -Entry file: StatsFlask/run.py -Scanned: 2016-10-20 11:40:03.583503 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bzerroug/flask_appbuilder -https://github.com/bzerroug/flask_appbuilder -Entry file: flask_appbuilder/meteo/__init__.py -Scanned: 2016-10-20 11:40:04.099379 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BlackMud/flask_blog -https://github.com/BlackMud/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:40:05.614832 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sohje/__flask_psgr -https://github.com/sohje/__flask_psgr -Entry file: __flask_psgr/app.py -Scanned: 2016-10-20 11:40:06.146520 -No vulnerabilities found. - - -hoikin-yiu/flask-blog -https://github.com/hoikin-yiu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:40:06.709505 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Cloudwick-BT/flask_project -https://github.com/Cloudwick-BT/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 11:40:07.509454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:40:08.065690 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -g-rich/flask-blog -https://github.com/g-rich/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:40:09.622956 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 11:40:10.149945 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chensdream/learn-flask -https://github.com/chensdream/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 11:40:12.826891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coolmile23/flask_practice -https://github.com/coolmile23/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 11:40:13.371097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k9luo/Flask-Tutorial -https://github.com/k9luo/Flask-Tutorial -Entry file: Flask-Tutorial/microblog-version-0.2/app/__init__.py -Scanned: 2016-10-20 11:40:23.994155 -No vulnerabilities found. - - -Harry-Yao/learn-flask -https://github.com/Harry-Yao/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 11:40:24.758180 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-20 11:40:25.274956 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -juan-castano/todo-flask -https://github.com/juan-castano/todo-flask -Entry file: None -Scanned: 2016-10-20 11:40:25.795726 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/juan-castano/todo-flask. - -mullaned/Flask-Test -https://github.com/mullaned/Flask-Test -Entry file: Flask-Test/flask_test.py -Scanned: 2016-10-20 11:40:27.148708 -Vulnerability 1: -File: Flask-Test/flask_test.py - > User input at line 13, trigger word "get(": - age = ages.get(user) -File: Flask-Test/flask_test.py - > reaches line 14, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',user=user, age=age) - - - -zupeiza/flask-blog -https://github.com/zupeiza/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:40:27.708882 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -shopetan/flask-api -https://github.com/shopetan/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 11:40:31.225451 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jungkoo/flask-dmango -https://github.com/jungkoo/flask-dmango -Entry file: flask-dmango/sample/blueprint_find.py -Scanned: 2016-10-20 11:40:31.769506 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -raghureddyram/flask-hello -https://github.com/raghureddyram/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 11:40:33.288028 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hrushikesh198/flask-server -https://github.com/hrushikesh198/flask-server -Entry file: None -Scanned: 2016-10-20 11:40:40.802901 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hrushikesh198/flask-server. - -omarkurt/flask-injection -https://github.com/omarkurt/flask-injection -Entry file: flask-injection/index.py -Scanned: 2016-10-20 11:40:49.188963 -No vulnerabilities found. - - -Datalker/Flask_sandbox -https://github.com/Datalker/Flask_sandbox -Entry file: Flask_sandbox/hello.py -Scanned: 2016-10-20 11:40:52.637251 -No vulnerabilities found. - - -getsentry/demo-flask -https://github.com/getsentry/demo-flask -Entry file: demo-flask/app.py -Scanned: 2016-10-20 11:40:56.142184 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -technocake/flask-eksempel -https://github.com/technocake/flask-eksempel -Entry file: flask-eksempel/webserver.py -Scanned: 2016-10-20 11:41:01.676051 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wkzhu/flask_example -https://github.com/wkzhu/flask_example -Entry file: None -Scanned: 2016-10-20 11:41:02.174980 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rgsingh/flask-timetrack -https://github.com/rgsingh/flask-timetrack -Entry file: flask-timetrack/app/__init__.py -Scanned: 2016-10-20 11:41:04.640149 -Vulnerability 1: -File: flask-timetrack/app/views.py - > User input at line 29, trigger word "get(": - taskid = request.args.get('id') -Reassigned in: - File: flask-timetrack/app/views.py - > Line 33: filtered_task = [x for x in tasks_file] - File: flask-timetrack/app/views.py - > Line 35: task = json.dumps(filtered_task) -File: flask-timetrack/app/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edittask.html',taskid=taskid, task=task) - - - -pultitom/study-flask -https://github.com/pultitom/study-flask -Entry file: study-flask/microblog/app/__init__.py -Scanned: 2016-10-20 11:41:05.982453 -No vulnerabilities found. - - -StarsHu/ll-flask -https://github.com/StarsHu/ll-flask -Entry file: ll-flask/LikeLines/server.py -Scanned: 2016-10-20 11:41:06.501490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-20 11:41:07.026270 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wumb0/flask-examples -https://github.com/wumb0/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 11:41:07.539731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vladimirdotk/flask-boilerplate -https://github.com/vladimirdotk/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 11:41:08.524372 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vladimirdotk/flask-boilerplate. - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-20 11:41:10.045188 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramwin/flask_tutorial -https://github.com/ramwin/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:41:13.069654 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -f-guitart/progcoms3-flask -https://github.com/f-guitart/progcoms3-flask -Entry file: progcoms3-flask/app.py -Scanned: 2016-10-20 11:41:18.417432 -Vulnerability 1: -File: progcoms3-flask/app.py - > User input at line 73, trigger word "get(": - zone = request.form.get('area') -Reassigned in: - File: progcoms3-flask/app.py - > Line 75: zone_data = get_zone_data(zone) - File: progcoms3-flask/app.py - > Line 71: zone_data = [] -File: progcoms3-flask/app.py - > reaches line 76, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('zone_data_table.html',zone_data=zone_data, zones=zones) - - - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-20 11:41:19.776909 -No vulnerabilities found. - - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-20 11:41:25.556291 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/genericpath.py - -jackeylu/microblog -https://github.com/jackeylu/microblog -Entry file: None -Scanned: 2016-10-20 11:41:26.067743 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -garaud/pyris -https://github.com/garaud/pyris -Entry file: pyris/pyris/api/__init__.py -Scanned: 2016-10-20 11:41:27.752192 -No vulnerabilities found. - - -nicc777/flask-webservice-wsgi-python3-demo -https://github.com/nicc777/flask-webservice-wsgi-python3-demo -Entry file: flask-webservice-wsgi-python3-demo/fwsdemo/app.py -Scanned: 2016-10-20 11:41:29.193298 -No vulnerabilities found. - - -MicahSteinbrecher/mini-blog -https://github.com/MicahSteinbrecher/mini-blog -Entry file: mini-blog/flaskr.py -Scanned: 2016-10-20 11:41:33.539641 -No vulnerabilities found. - - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:41:34.094671 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -remarcbalisi/rest-demo-flask- -https://github.com/remarcbalisi/rest-demo-flask- -Entry file: rest-demo-flask-/app.py -Scanned: 2016-10-20 11:41:44.051097 -No vulnerabilities found. - - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-20 11:41:45.489908 -No vulnerabilities found. - - -merryHunter/chat-flask-socketio -https://github.com/merryHunter/chat-flask-socketio -Entry file: chat-flask-socketio/chat.py -Scanned: 2016-10-20 11:41:48.257880 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mattvisco/flask_test_2 -https://github.com/mattvisco/flask_test_2 -Entry file: flask_test_2/insta.py -Scanned: 2016-10-20 11:41:49.669630 -No vulnerabilities found. - - -pavelchalyk/blackjack_on_flask -https://github.com/pavelchalyk/blackjack_on_flask -Entry file: blackjack_on_flask/blackjack.py -Scanned: 2016-10-20 11:41:52.200761 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-20 11:41:57.640853 -No vulnerabilities found. - - -bsteinberg/flask -https://github.com/bsteinberg/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:42:02.236063 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:42:02.829790 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ninadmhatre/zual -https://github.com/ninadmhatre/zual -Entry file: zual/local_mods/flask-blogging/test/__init__.py -Scanned: 2016-10-20 11:42:10.326700 -No vulnerabilities found. - - -taogeT/flask-celery -https://github.com/taogeT/flask-celery -Entry file: flask-celery/example/app/__init__.py -Scanned: 2016-10-20 11:42:11.759248 -No vulnerabilities found. - - -frankV/flask-sendgrid -https://github.com/frankV/flask-sendgrid -Entry file: flask-sendgrid/setup.py -Scanned: 2016-10-20 11:42:13.055097 -No vulnerabilities found. - - -islandev/flaskweb -https://github.com/islandev/flaskweb -Entry file: None -Scanned: 2016-10-20 11:42:13.588101 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gyonghua/flasktaskr -https://github.com/gyonghua/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:42:14.110540 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Rothschild0120/flaskyblog -https://github.com/Rothschild0120/flaskyblog -Entry file: flaskyblog/app/__init__.py -Scanned: 2016-10-20 11:42:14.643065 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:42:15.146924 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stalwart201/flaskimgupload -https://github.com/stalwart201/flaskimgupload -Entry file: flaskimgupload/upload.py -Scanned: 2016-10-20 11:42:16.453545 -Vulnerability 1: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -zixuzhang/flasky -https://github.com/zixuzhang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:42:16.990342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 11:42:17.507432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -azureappserviceoss/FlaskAzure -https://github.com/azureappserviceoss/FlaskAzure -Entry file: FlaskAzure/FlaskWebProject1/__init__.py -Scanned: 2016-10-20 11:42:25.809379 -No vulnerabilities found. - - -yhappy/FlaskProjects -https://github.com/yhappy/FlaskProjects -Entry file: FlaskProjects/FlaskProjects.py -Scanned: 2016-10-20 11:42:27.164442 -No vulnerabilities found. - - -tajihiro/FlaskBluemix -https://github.com/tajihiro/FlaskBluemix -Entry file: FlaskBluemix/index.py -Scanned: 2016-10-20 11:42:28.455911 -No vulnerabilities found. - - -Leyawiin/FlaskDemo -https://github.com/Leyawiin/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 11:42:28.978432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KotiyaSenya/FlaskLearn -https://github.com/KotiyaSenya/FlaskLearn -Entry file: FlaskLearn/flask_learn/__init__.py -Scanned: 2016-10-20 11:42:30.889857 -Vulnerability 1: -File: FlaskLearn/flask_learn/main/views/index.py - > User input at line 10, trigger word "get(": - user_agent = request.headers.get('User-Agent') -File: FlaskLearn/flask_learn/main/views/index.py - > reaches line 11, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user_agent=user_agent, current_time=datetime.utcnow()) - - - -Patreon/cartographer -https://github.com/Patreon/cartographer -Entry file: cartographer/example/generic_social_network/app/__init__.py -Scanned: 2016-10-20 11:42:33.231775 -No vulnerabilities found. - - -Ketouem/flask-boto3 -https://github.com/Ketouem/flask-boto3 -Entry file: flask-boto3/example.py -Scanned: 2016-10-20 11:42:34.644460 -No vulnerabilities found. - - -Pushould/pushould-flask-sample -https://github.com/Pushould/pushould-flask-sample -Entry file: pushould-flask-sample/app.py -Scanned: 2016-10-20 11:42:36.031438 -No vulnerabilities found. - - -miaoihan/qulook_flask -https://github.com/miaoihan/qulook_flask -Entry file: qulook_flask/qulook.py -Scanned: 2016-10-20 11:42:36.752748 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: qulook_flask/ENV/lib/python2.7/genericpath.py - -rogerpence/Flask-App -https://github.com/rogerpence/Flask-App -Entry file: Flask-App/app/__init__.py -Scanned: 2016-10-20 11:42:44.162963 -No vulnerabilities found. - - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:42:44.772439 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-20 11:42:49.252517 -No vulnerabilities found. - - -kessiacastro/flask-hello -https://github.com/kessiacastro/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 11:42:52.292766 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -renaldopringle/flask_heroku -https://github.com/renaldopringle/flask_heroku -Entry file: flask_heroku/app.py -Scanned: 2016-10-20 11:42:54.921421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunhughees/flask-blog -https://github.com/sunhughees/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:42:56.962399 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:43:02.495338 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uyoaix/learn-flask -https://github.com/uyoaix/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 11:43:03.177321 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -frenos/flask-sample -https://github.com/frenos/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 11:43:04.704587 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:43:11.246233 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 11:43:12.764152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangcheng/flask-example -https://github.com/zhangcheng/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-20 11:43:14.324737 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gemimarosier/flask_project -https://github.com/gemimarosier/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 11:43:15.772340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gchange/flask_server -https://github.com/gchange/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 11:43:16.300772 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nickyzj/flask-first -https://github.com/Nickyzj/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-20 11:43:16.842429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -propupul/Flask_app -https://github.com/propupul/Flask_app -Entry file: Flask_app/test.py -Scanned: 2016-10-20 11:43:17.352520 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -m18664319351/Blog_Flask -https://github.com/m18664319351/Blog_Flask -Entry file: Blog_Flask/app.py -Scanned: 2016-10-20 11:43:17.978567 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Blog_Flask/lib/python2.7/genericpath.py - -testforvln/flask-learning -https://github.com/testforvln/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-20 11:43:19.308869 -No vulnerabilities found. - - -Unicomcat/flask_test -https://github.com/Unicomcat/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:43:19.912842 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jidn/flask-obscure -https://github.com/jidn/flask-obscure -Entry file: flask-obscure/tests/test_url.py -Scanned: 2016-10-20 11:43:21.344947 -No vulnerabilities found. - - -cdaidone/small_flask -https://github.com/cdaidone/small_flask -Entry file: small_flask/small_flask.py -Scanned: 2016-10-20 11:43:26.995469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-20 11:43:28.537194 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pedrogaudencio/refunite-flask -https://github.com/pedrogaudencio/refunite-flask -Entry file: refunite-flask/app.py -Scanned: 2016-10-20 11:43:30.546724 -No vulnerabilities found. - - -master105/flask_server -https://github.com/master105/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 11:43:31.095205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -d3prof3t/flask-intro -https://github.com/d3prof3t/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:43:31.666811 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-20 11:43:34.185234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shinstev/flask_server -https://github.com/shinstev/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 11:43:35.744813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vramakin/LearnFlask -https://github.com/vramakin/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-20 11:43:37.274951 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nbeede/docker-flask -https://github.com/nbeede/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-20 11:43:43.697848 -No vulnerabilities found. - - -runningstrawberry/microblog -https://github.com/runningstrawberry/microblog -Entry file: None -Scanned: 2016-10-20 11:43:45.260862 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-20 11:43:48.939579 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/genericpath.py - -B2Crypt/Random-Gamemode- -https://github.com/B2Crypt/Random-Gamemode- -Entry file: Random-Gamemode-/FLASK/__init__.py -Scanned: 2016-10-20 11:43:52.987832 -No vulnerabilities found. - - -Lich2013/learnflask -https://github.com/Lich2013/learnflask -Entry file: None -Scanned: 2016-10-20 11:43:53.524509 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Lich2013/learnflask. - -jbisasky/flaskProtoBuffer -https://github.com/jbisasky/flaskProtoBuffer -Entry file: flaskProtoBuffer/flaskHello.py -Scanned: 2016-10-20 11:43:55.207861 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WangShengguang/FlaskWebDevelopment -https://github.com/WangShengguang/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/Full_Stack_Foundations/finalproject.py -Scanned: 2016-10-20 11:43:55.742422 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JunliuHub/FlaskWebDevelopment -https://github.com/JunliuHub/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/Full_Stack_Foundations/finalproject.py -Scanned: 2016-10-20 11:43:57.261239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adrianomaringolo/py-flask-tuts -https://github.com/adrianomaringolo/py-flask-tuts -Entry file: None -Scanned: 2016-10-20 11:44:02.796365 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:44:03.338480 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -ishwarya-iyer/nuage_proj_flask_app -https://github.com/ishwarya-iyer/nuage_proj_flask_app -Entry file: nuage_proj_flask_app/app.py -Scanned: 2016-10-20 11:44:04.882144 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SamirKanaan/PlantillaFlaskREST1 -https://github.com/SamirKanaan/PlantillaFlaskREST1 -Entry file: PlantillaFlaskREST1/plantilla1.py -Scanned: 2016-10-20 11:44:13.793613 -No vulnerabilities found. - - -remarcbalisi/flask-angular-auth -https://github.com/remarcbalisi/flask-angular-auth -Entry file: flask-angular-auth/project/__init__.py -Scanned: 2016-10-20 11:44:15.100738 -No vulnerabilities found. - - -jarosenb/flask_ionratio_V2 -https://github.com/jarosenb/flask_ionratio_V2 -Entry file: flask_ionratio_V2/hello.py -Scanned: 2016-10-20 11:44:16.545428 -No vulnerabilities found. - - -themuppet2/flask-hello-world -https://github.com/themuppet2/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:44:17.112377 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -kindoprec/Flask-SecureHeaders -https://github.com/kindoprec/Flask-SecureHeaders -Entry file: Flask-SecureHeaders/tests/core_test.py -Scanned: 2016-10-20 11:44:18.443412 -No vulnerabilities found. - - -ishwarya-iyer/nuage_flask_app -https://github.com/ishwarya-iyer/nuage_flask_app -Entry file: nuage_flask_app/app.py -Scanned: 2016-10-20 11:44:19.071057 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Christomas/flask_project_skeleton -https://github.com/Christomas/flask_project_skeleton -Entry file: flask_project_skeleton/app/__init__.py -Scanned: 2016-10-20 11:44:20.475278 -No vulnerabilities found. - - -pranavn-cuelogic/flask_video_conference_room -https://github.com/pranavn-cuelogic/flask_video_conference_room -Entry file: flask_video_conference_room/video_conf/main.py -Scanned: 2016-10-20 11:44:20.991214 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -llxxee/A-website-by-Flask -https://github.com/llxxee/A-website-by-Flask -Entry file: None -Scanned: 2016-10-20 11:44:21.508392 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/llxxee/A-website-by-Flask. - -micah-cal-sandbox/flask-heroku-sandbox -https://github.com/micah-cal-sandbox/flask-heroku-sandbox -Entry file: flask-heroku-sandbox/app.py -Scanned: 2016-10-20 11:44:22.800189 -No vulnerabilities found. - - -lkpanganiban/flask-rest-example -https://github.com/lkpanganiban/flask-rest-example -Entry file: flask-rest-example/app.py -Scanned: 2016-10-20 11:44:28.224403 -Vulnerability 1: -File: flask-rest-example/app.py - > User input at line 48, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-rest-example/app.py - > reaches line 55, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -rodcox89/flask-restful-blueprint-boilerplate -https://github.com/rodcox89/flask-restful-blueprint-boilerplate -Entry file: flask-restful-blueprint-boilerplate/main.py -Scanned: 2016-10-20 11:44:29.900339 -No vulnerabilities found. - - -bellkev/docker-flask-browserify -https://github.com/bellkev/docker-flask-browserify -Entry file: docker-flask-browserify/src/python/hello.py -Scanned: 2016-10-20 11:44:31.367934 -No vulnerabilities found. - - -braddmiller/flask-by-example -https://github.com/braddmiller/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:44:32.043229 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tych0/flask-demo-app -https://github.com/tych0/flask-demo-app -Entry file: flask-demo-app/app.py -Scanned: 2016-10-20 11:44:35.062633 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -technocake/flask-user-profiles-example -https://github.com/technocake/flask-user-profiles-example -Entry file: flask-user-profiles-example/pyhtml.py -Scanned: 2016-10-20 11:44:37.384821 -No vulnerabilities found. - - -Christomas/i_dev_flask -https://github.com/Christomas/i_dev_flask -Entry file: i_dev_flask/app/__init__.py -Scanned: 2016-10-20 11:44:38.927593 -Vulnerability 1: -File: i_dev_flask/app/auth/views.py - > User input at line 121, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: i_dev_flask/app/auth/views.py - > Line 123: token = options.dump_token('reset_password', user.id) -File: i_dev_flask/app/auth/views.py - > reaches line 124, trigger word "url_for(": - options.send_email(user.email, '重置密码', 'auth/mail/reset_password',user=user, url=url_for('auth.reset_confirm',token=token, _external=True)) - -Vulnerability 2: -File: i_dev_flask/app/auth/views.py - > User input at line 139, trigger word "get(": - user = models.User.query.get(user_id) -Reassigned in: - File: i_dev_flask/app/auth/views.py - > Line 143: form = forms.ResetPasswordForm(email=user.email) - File: i_dev_flask/app/auth/views.py - > Line 147: user.password = form.password.data - File: i_dev_flask/app/auth/views.py - > Line 138: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.login')) - File: i_dev_flask/app/auth/views.py - > Line 142: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.lgoin')) - File: i_dev_flask/app/auth/views.py - > Line 150: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.login')) -File: i_dev_flask/app/auth/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('auth/reset_confirm.html',form=form) - - - -paulsavala/flask_aws_demo -https://github.com/paulsavala/flask_aws_demo -Entry file: None -Scanned: 2016-10-20 11:44:43.475119 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -udpcloud/flask-rest-api -https://github.com/udpcloud/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-20 11:44:46.043627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AndersonQ/appengine-flask-contacts-api -https://github.com/AndersonQ/appengine-flask-contacts-api -Entry file: appengine-flask-contacts-api/application/__init__.py -Scanned: 2016-10-20 11:44:51.472941 -No vulnerabilities found. - - -dhiraka/flask_basic_app -https://github.com/dhiraka/flask_basic_app -Entry file: flask_basic_app/test_rest_app.py -Scanned: 2016-10-20 11:44:52.794835 -No vulnerabilities found. - - -aaronja38/assignment10-flask -https://github.com/aaronja38/assignment10-flask -Entry file: assignment10-flask/winners.py -Scanned: 2016-10-20 11:44:54.441241 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: assignment10-flask/env/lib/python2.7/genericpath.py - -avikantz/Flask-API-Demo -https://github.com/avikantz/Flask-API-Demo -Entry file: Flask-API-Demo/app/__init__.py -Scanned: 2016-10-20 11:44:57.756482 -No vulnerabilities found. - - -deenaacree/flask_app1 -https://github.com/deenaacree/flask_app1 -Entry file: flask_app1/songsapp.py -Scanned: 2016-10-20 11:44:58.403494 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_app1/env/lib/python2.7/genericpath.py - -AMontalva/flask_hello_world -https://github.com/AMontalva/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:44:58.914686 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AMontalva/flask_hello_world. - -xiewenlongs/Flask-CacheOBJ -https://github.com/xiewenlongs/Flask-CacheOBJ -Entry file: Flask-CacheOBJ/tests.py -Scanned: 2016-10-20 11:45:04.652870 -No vulnerabilities found. - - -thefunkjunky/python-flask-boilerplate -https://github.com/thefunkjunky/python-flask-boilerplate -Entry file: python-flask-boilerplate/mainapp/__init__.py -Scanned: 2016-10-20 11:45:06.055657 -No vulnerabilities found. - - -harryoh/flask-rest-api -https://github.com/harryoh/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-20 11:45:06.585333 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DanBlakeman/flask-deploy-practice -https://github.com/DanBlakeman/flask-deploy-practice -Entry file: flask-deploy-practice/src/app.py -Scanned: 2016-10-20 11:45:12.945361 -No vulnerabilities found. - - -MoxmiNu/flask-mongo-test -https://github.com/MoxmiNu/flask-mongo-test -Entry file: flask-mongo-test/provisioning/files/dr-app.py -Scanned: 2016-10-20 11:45:30.163768 -No vulnerabilities found. - - -medev21/Social-Network---Flask -https://github.com/medev21/Social-Network---Flask -Entry file: Social-Network---Flask/app.py -Scanned: 2016-10-20 11:45:31.738882 -No vulnerabilities found. - - -sealzjh/flask-celery-test -https://github.com/sealzjh/flask-celery-test -Entry file: None -Scanned: 2016-10-20 11:45:32.276707 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sealzjh/flask-celery-test. - -Glaun/flask-hello-world -https://github.com/Glaun/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:45:32.819936 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -PushpakPati/flask-by-example -https://github.com/PushpakPati/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:45:33.505594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aintmetho/flask -https://github.com/aintmetho/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:45:35.492073 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -acouderc/flask -https://github.com/acouderc/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:45:36.077047 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -MapEntryManagement/flask -https://github.com/MapEntryManagement/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:45:36.647749 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -klen/flask-pw -https://github.com/klen/flask-pw -Entry file: flask-pw/tests.py -Scanned: 2016-10-20 11:45:38.228035 -No vulnerabilities found. - - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-20 11:45:39.766944 -No vulnerabilities found. - - -colingorrie/flask-boilerplate -https://github.com/colingorrie/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 11:45:40.288712 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/colingorrie/flask-boilerplate. - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-20 11:45:45.550497 -No vulnerabilities found. - - -wangxuan007/flasky -https://github.com/wangxuan007/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:45:46.112520 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lambdaplus/flasko -https://github.com/lambdaplus/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-20 11:45:46.840921 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -xiaohu2015/Flasky -https://github.com/xiaohu2015/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 11:45:47.355217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yu66s/flaskr -https://github.com/yu66s/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:45:47.874416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cwywang/flasky -https://github.com/cwywang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:45:48.399399 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gene1wood/flaskoktaapp -https://github.com/gene1wood/flaskoktaapp -Entry file: flaskoktaapp/flaskoktaapp/__init__.py -Scanned: 2016-10-20 11:45:49.945351 -Vulnerability 1: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 196, trigger word "url_for(": - url = url_for('user') - -Vulnerability 2: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 204, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -SSUHan/flasktutorial -https://github.com/SSUHan/flasktutorial -Entry file: None -Scanned: 2016-10-20 11:45:50.469065 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ma53192190/flaskwork -https://github.com/ma53192190/flaskwork -Entry file: flaskwork/flaskwork.py -Scanned: 2016-10-20 11:45:51.895729 -No vulnerabilities found. - - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 11:45:52.410678 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 11:45:54.983868 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -zhouyang2640/FlaskInit -https://github.com/zhouyang2640/FlaskInit -Entry file: FlaskInit/hello.py -Scanned: 2016-10-20 11:45:57.416953 -No vulnerabilities found. - - -s3c0nDD/FlaskTutorial -https://github.com/s3c0nDD/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 11:45:58.937711 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ZaighumRajput/flaskPractice -https://github.com/ZaighumRajput/flaskPractice -Entry file: flaskPractice/chapter3/hello.py -Scanned: 2016-10-20 11:46:00.400868 -No vulnerabilities found. - - -rmotr/flask-api-example -https://github.com/rmotr/flask-api-example -Entry file: flask-api-example/api/_04_delete_method.py -Scanned: 2016-10-20 11:46:06.242501 -No vulnerabilities found. - - -frankpiva/mastering-flask -https://github.com/frankpiva/mastering-flask -Entry file: mastering-flask/main.py -Scanned: 2016-10-20 11:46:13.058826 -No vulnerabilities found. - - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:46:13.669869 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-20 11:46:32.210770 -No vulnerabilities found. - - -kosen10spajam/f-flask -https://github.com/kosen10spajam/f-flask -Entry file: f-flask/main.py -Scanned: 2016-10-20 11:46:33.643798 -Vulnerability 1: -File: f-flask/main.py - > User input at line 132, trigger word "get(": - since = int(request.args.get('since')) -File: f-flask/main.py - > reaches line 134, trigger word "execute(": - sql.execute('SELECT time, animal, message FROM messages WHERE time >= %d' % since) - -Vulnerability 2: -File: f-flask/main.py - > User input at line 142, trigger word "get(": - animal = request.values.get('animal') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 3: -File: f-flask/main.py - > User input at line 143, trigger word "get(": - message = request.values.get('message') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 4: -File: f-flask/main.py - > User input at line 144, trigger word "get(": - time = int(request.values.get('time')) -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - - - -jjapp/flask-blog -https://github.com/jjapp/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:46:34.224348 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -engfilipe/curso_flask -https://github.com/engfilipe/curso_flask -Entry file: curso_flask/photolog/__init__.py -Scanned: 2016-10-20 11:46:43.022211 -Vulnerability 1: -File: curso_flask/photolog/login_view.py - > User input at line 39, trigger word "get(": - next_ = request.args.get('next') -Reassigned in: - File: curso_flask/photolog/login_view.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect('/index') - File: curso_flask/photolog/login_view.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Autenticação', form=form) - File: curso_flask/photolog/login_view.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: curso_flask/photolog/login_view.py - > reaches line 40, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_ or url_for('lista')) - -Vulnerability 2: -File: curso_flask/photolog/login_view.py - > User input at line 39, trigger word "get(": - next_ = request.args.get('next') -Reassigned in: - File: curso_flask/photolog/login_view.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect('/index') - File: curso_flask/photolog/login_view.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Autenticação', form=form) - File: curso_flask/photolog/login_view.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: curso_flask/photolog/login_view.py - > reaches line 40, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next_ or url_for('lista')) - - - -zhang-zhang/learning-flask -https://github.com/zhang-zhang/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 11:46:43.674059 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mihai011/flask_server -https://github.com/mihai011/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 11:46:44.184170 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -morganvdavis/boilerplate-flask -https://github.com/morganvdavis/boilerplate-flask -Entry file: None -Scanned: 2016-10-20 11:46:44.693651 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morganvdavis/boilerplate-flask. - -jwg4/flask_converter -https://github.com/jwg4/flask_converter -Entry file: flask_converter/examples/app_with_constructor.py -Scanned: 2016-10-20 11:46:46.156503 -No vulnerabilities found. - - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:46:46.688693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Davidthecoolsmartguy/weasyprint-Flask -https://github.com/Davidthecoolsmartguy/weasyprint-Flask -Entry file: weasyprint-Flask/app.py -Scanned: 2016-10-20 11:46:47.998172 -No vulnerabilities found. - - -rajdeepd/flask-helloworld -https://github.com/rajdeepd/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-20 11:46:55.613529 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-helloworld/venv/lib/python2.7/genericpath.py - -honeeWong/Flask-Blog -https://github.com/honeeWong/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 11:46:56.590231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -frenos/flask-sample -https://github.com/frenos/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 11:46:57.114142 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lockie/flask_ldap -https://github.com/lockie/flask_ldap -Entry file: flask_ldap/index.py -Scanned: 2016-10-20 11:46:58.501002 -Vulnerability 1: -File: flask_ldap/index.py - > User input at line 28, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask_ldap/index.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask_ldap/index.py - > reaches line 29, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 2: -File: flask_ldap/index.py - > User input at line 28, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask_ldap/index.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask_ldap/index.py - > reaches line 29, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - - - -AndreyBalandin/flask-test -https://github.com/AndreyBalandin/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:46:59.034904 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -kessiacastro/imdb-flask -https://github.com/kessiacastro/imdb-flask -Entry file: imdb-flask/app.py -Scanned: 2016-10-20 11:47:06.609505 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Y-Rookie/flask_blog -https://github.com/Y-Rookie/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:47:07.757330 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lizmeister321/flask_practice -https://github.com/lizmeister321/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 11:47:08.286756 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AmI-2016/python-Flask -https://github.com/AmI-2016/python-Flask -Entry file: python-Flask/PYTHON_FLASK/friends/server.py -Scanned: 2016-10-20 11:47:08.883472 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-Flask/PYTHON_FLASK/friends/venv/lib/python2.7/genericpath.py - -phillip-hopper/flask-test -https://github.com/phillip-hopper/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:47:09.409155 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -thewhitedingo/MenuFlask -https://github.com/thewhitedingo/MenuFlask -Entry file: MenuFlask/flaskserver.py -Scanned: 2016-10-20 11:47:11.453803 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -anazard/zardify_flask -https://github.com/anazard/zardify_flask -Entry file: zardify_flask/main/__init__.py -Scanned: 2016-10-20 11:47:19.599543 -No vulnerabilities found. - - -anazard/flask_project -https://github.com/anazard/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 11:47:20.411781 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -buckeye76guy/learning-flask -https://github.com/buckeye76guy/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 11:47:20.989097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wkqzxh/flask_leaklib -https://github.com/wkqzxh/flask_leaklib -Entry file: flask_leaklib/flask_leaklib/leaklib_app/__init__.py -Scanned: 2016-10-20 11:47:22.441753 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brightforme/flask-sqlalchemy -https://github.com/brightforme/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-20 11:47:23.449132 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pedrogaudencio/refunite-flask -https://github.com/pedrogaudencio/refunite-flask -Entry file: refunite-flask/app.py -Scanned: 2016-10-20 11:47:33.447613 -No vulnerabilities found. - - -holmandw/flask-arduino -https://github.com/holmandw/flask-arduino -Entry file: flask-arduino/app/__init__.py -Scanned: 2016-10-20 11:47:35.395762 -No vulnerabilities found. - - -zenyui/flask-test -https://github.com/zenyui/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:47:35.957299 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -vobine/JobFlask -https://github.com/vobine/JobFlask -Entry file: None -Scanned: 2016-10-20 11:47:37.594739 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vobine/JobFlask. - -Lobster1991/learn_flask -https://github.com/Lobster1991/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:47:44.119361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SarahJaine/flask-tutorial -https://github.com/SarahJaine/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:47:44.626875 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vatseek/flask_lessons -https://github.com/vatseek/flask_lessons -Entry file: flask_lessons/app/__init__.py -Scanned: 2016-10-20 11:47:46.064443 -No vulnerabilities found. - - -Michael-F-Bryan/flask_template -https://github.com/Michael-F-Bryan/flask_template -Entry file: None -Scanned: 2016-10-20 11:47:46.585388 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Michael-F-Bryan/flask_template. - -ol3j/azureday-flask -https://github.com/ol3j/azureday-flask -Entry file: azureday-flask/FlaskWebProject/__init__.py -Scanned: 2016-10-20 11:47:49.945825 -Vulnerability 1: -File: azureday-flask/FlaskWebProject/views.py - > User input at line 57, trigger word "form[": - mobile = request.form['yourmobile'] -Reassigned in: - File: azureday-flask/FlaskWebProject/views.py - > Line 74: task = 'PartitionKey''RowKey''mobile''file''tasksPoznan'suffixmobilefilename - File: azureday-flask/FlaskWebProject/views.py - > Line 77: new = db.Log(suffix=suffix, mobile=mobile, image=filename) -File: azureday-flask/FlaskWebProject/views.py - > reaches line 86, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',mobile=mobile, url=url, important_metric=important_metric) - -Vulnerability 2: -File: azureday-flask/FlaskWebProject/views.py - > User input at line 58, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: azureday-flask/FlaskWebProject/views.py - > Line 59: basename = file.filename - File: azureday-flask/FlaskWebProject/views.py - > Line 61: filename = '_'.join([suffix, basename]) - File: azureday-flask/FlaskWebProject/views.py - > Line 68: url = blob_service.make_blob_url(container_name='images', blob_name=filename) - File: azureday-flask/FlaskWebProject/views.py - > Line 72: body = json.dumps('suffix''image'str(suffix)str(url)) - File: azureday-flask/FlaskWebProject/views.py - > Line 74: task = 'PartitionKey''RowKey''mobile''file''tasksPoznan'suffixmobilefilename - File: azureday-flask/FlaskWebProject/views.py - > Line 77: new = db.Log(suffix=suffix, mobile=mobile, image=filename) -File: azureday-flask/FlaskWebProject/views.py - > reaches line 86, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',mobile=mobile, url=url, important_metric=important_metric) - - - -runningstrawberry/microblog -https://github.com/runningstrawberry/microblog -Entry file: None -Scanned: 2016-10-20 11:47:50.468265 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ShivamMahajan/my_first_flask_project -https://github.com/ShivamMahajan/my_first_flask_project -Entry file: my_first_flask_project/hello.py -Scanned: 2016-10-20 11:48:04.411840 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_first_flask_project/venv/lib/python2.7/genericpath.py - -sakib3/flask_Cartridge_openshift -https://github.com/sakib3/flask_Cartridge_openshift -Entry file: flask_Cartridge_openshift/flaskapp.py -Scanned: 2016-10-20 11:48:05.745820 -No vulnerabilities found. - - -AdamHumphrey/housing2016flask -https://github.com/AdamHumphrey/housing2016flask -Entry file: None -Scanned: 2016-10-20 11:48:07.590194 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AdamHumphrey/housing2016flask. - -sakib3/flask_cartridge_Heroku -https://github.com/sakib3/flask_cartridge_Heroku -Entry file: flask_cartridge_Heroku/app.py -Scanned: 2016-10-20 11:48:08.896464 -No vulnerabilities found. - - -gclabon/Twilio-Flask-CSV -https://github.com/gclabon/Twilio-Flask-CSV -Entry file: Twilio-Flask-CSV/twilioFlaskBasic/twilioFlaskBasic.py -Scanned: 2016-10-20 11:48:10.343014 -No vulnerabilities found. - - -mfyock/flask_hello_world -https://github.com/mfyock/flask_hello_world -Entry file: None -Scanned: 2016-10-20 11:48:10.874759 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mfyock/flask_hello_world. - -SamirKanaan/PlantillaFlaskREST2 -https://github.com/SamirKanaan/PlantillaFlaskREST2 -Entry file: PlantillaFlaskREST2/inicia.py -Scanned: 2016-10-20 11:48:12.311389 -No vulnerabilities found. - - -3130000547/musicbox-base-on-flask -https://github.com/3130000547/musicbox-base-on-flask -Entry file: musicbox-base-on-flask/musicbox.py -Scanned: 2016-10-20 11:48:13.860956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AjithPanneerselvam/my_flask_project -https://github.com/AjithPanneerselvam/my_flask_project -Entry file: my_flask_project/project.py -Scanned: 2016-10-20 11:48:15.281538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pravinthsam/MnistFlaskKeras -https://github.com/pravinthsam/MnistFlaskKeras -Entry file: MnistFlaskKeras/flaskserver.py -Scanned: 2016-10-20 11:48:16.699129 -No vulnerabilities found. - - -rfmapp/flask-by-example -https://github.com/rfmapp/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 11:48:17.384554 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -macloo/flask_project1 -https://github.com/macloo/flask_project1 -Entry file: flask_project1/winners_BAK.py -Scanned: 2016-10-20 11:48:18.797894 -No vulnerabilities found. - - -dschuler36/SimpleFlaskBlog -https://github.com/dschuler36/SimpleFlaskBlog -Entry file: SimpleFlaskBlog/main.py -Scanned: 2016-10-20 11:48:27.960722 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -avikantz/Flask-API-Demo -https://github.com/avikantz/Flask-API-Demo -Entry file: Flask-API-Demo/app/__init__.py -Scanned: 2016-10-20 11:48:30.248494 -No vulnerabilities found. - - -dengjonathan/flask_first_project -https://github.com/dengjonathan/flask_first_project -Entry file: flask_first_project/final_project.py -Scanned: 2016-10-20 11:48:34.038717 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -boyombo/asterisk-pycall-flask -https://github.com/boyombo/asterisk-pycall-flask -Entry file: asterisk-pycall-flask/calldemo/app.py -Scanned: 2016-10-20 11:48:35.436761 -No vulnerabilities found. - - -kaslemr/sample_flask_project -https://github.com/kaslemr/sample_flask_project -Entry file: sample_flask_project/app2.py -Scanned: 2016-10-20 11:48:36.919097 -Vulnerability 1: -File: sample_flask_project/app.py - > User input at line 81, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: sample_flask_project/app.py - > reaches line 88, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - -Vulnerability 2: -File: sample_flask_project/app2.py - > User input at line 129, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: sample_flask_project/app2.py - > Line 135: user = User(username=username) -File: sample_flask_project/app2.py - > reaches line 139, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: sample_flask_project/app2.py - > User input at line 129, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: sample_flask_project/app2.py - > Line 135: user = User(username=username) -File: sample_flask_project/app2.py - > reaches line 139, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 4: -File: sample_flask_project/app2.py - > User input at line 145, trigger word "get(": - user = User.query.get(id) -File: sample_flask_project/app2.py - > reaches line 148, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -mapingfan/Flask-Mail-Test -https://github.com/mapingfan/Flask-Mail-Test -Entry file: Flask-Mail-Test/Mail-Test.py -Scanned: 2016-10-20 11:48:39.306433 -No vulnerabilities found. - - -4Catalyzer/flask-resty-tenants -https://github.com/4Catalyzer/flask-resty-tenants -Entry file: flask-resty-tenants/tests/conftest.py -Scanned: 2016-10-20 11:48:40.977661 -No vulnerabilities found. - - -lucaswadedavis/iguanodon -https://github.com/lucaswadedavis/iguanodon -Entry file: iguanodon/server.py -Scanned: 2016-10-20 11:48:43.165765 -No vulnerabilities found. - - -ederavilaprado/paas-app-example-python-flask -https://github.com/ederavilaprado/paas-app-example-python-flask -Entry file: paas-app-example-python-flask/app.py -Scanned: 2016-10-20 11:48:45.958243 -No vulnerabilities found. - - -afh/yabab -https://github.com/afh/yabab -Entry file: yabab/yabab/__init__.py -Scanned: 2016-10-20 11:48:47.848623 -No vulnerabilities found. - - -Michael-F-Bryan/mfb_website -https://github.com/Michael-F-Bryan/mfb_website -Entry file: mfb_website/app/__init__.py -Scanned: 2016-10-20 11:48:49.271442 -No vulnerabilities found. - - -Yelloworking/SlackWebservice -https://github.com/Yelloworking/SlackWebservice -Entry file: None -Scanned: 2016-10-20 11:48:51.543547 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Yelloworking/SlackWebservice. - -TrailBlazerZ/imgaptcha--api -https://github.com/TrailBlazerZ/imgaptcha--api -Entry file: imgaptcha--api/app.py -Scanned: 2016-10-20 11:48:54.286516 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NSBum/AnkiStatsServer -https://github.com/NSBum/AnkiStatsServer -Entry file: AnkiStatsServer/app.py -Scanned: 2016-10-20 11:48:58.241346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yobuntu/laboratory -https://github.com/yobuntu/laboratory -Entry file: laboratory/laboratory/fooflask.py -Scanned: 2016-10-20 11:49:06.663150 -Vulnerability 1: -File: laboratory/laboratory/tests/test_base.py - > User input at line 5, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 5, trigger word "url_for(": - response = client.get(url_for('hello')) - -Vulnerability 2: -File: laboratory/laboratory/tests/test_base.py - > User input at line 11, trigger word "get(": - r = client.get(url_for('add',name='test')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 11, trigger word "url_for(": - r = client.get(url_for('add',name='test')) - -Vulnerability 3: -File: laboratory/laboratory/tests/test_base.py - > User input at line 12, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 11, trigger word "url_for(": - r = client.get(url_for('add',name='test')) - -Vulnerability 4: -File: laboratory/laboratory/tests/test_base.py - > User input at line 11, trigger word "get(": - r = client.get(url_for('add',name='test')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 12, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 5: -File: laboratory/laboratory/tests/test_base.py - > User input at line 12, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 12, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 6: -File: laboratory/laboratory/tests/test_base.py - > User input at line 19, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 19, trigger word "url_for(": - response = client.get(url_for('hello')) - -Vulnerability 7: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 8: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 9: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 10: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 11: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 12: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 13: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 14: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 15: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 16: -File: laboratory/laboratory/tests/test_base.py - > User input at line 36, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 36, trigger word "url_for(": - response = client.get(url_for('hello')) - - - -hkalexling/Twitter-Like-Count -https://github.com/hkalexling/Twitter-Like-Count -Entry file: Twitter-Like-Count/__init__.py -Scanned: 2016-10-20 11:49:08.474805 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ljxxcaijing/flask -https://github.com/ljxxcaijing/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:49:10.393134 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -migrateup/flaskr -https://github.com/migrateup/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:49:10.901974 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PacktPublishing/Mastering-Flask -https://github.com/PacktPublishing/Mastering-Flask -Entry file: Mastering-Flask/Chapter 4_Code/chapter_4/main.py -Scanned: 2016-10-20 11:49:14.729167 -No vulnerabilities found. - - -reparadocs/Flask-HelloWorldBot -https://github.com/reparadocs/Flask-HelloWorldBot -Entry file: Flask-HelloWorldBot/HelloWorldBot.py -Scanned: 2016-10-20 11:49:16.060135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -singingwolfboy/flask-sse -https://github.com/singingwolfboy/flask-sse -Entry file: flask-sse/tests/conftest.py -Scanned: 2016-10-20 11:49:17.573778 -No vulnerabilities found. - - -pankajpant22/flask -https://github.com/pankajpant22/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:49:18.168127 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -underdogio/flask-graylog -https://github.com/underdogio/flask-graylog -Entry file: flask-graylog/example/app.py -Scanned: 2016-10-20 11:49:19.465636 -No vulnerabilities found. - - -adyouri/flask-basics -https://github.com/adyouri/flask-basics -Entry file: flask-basics/hello.py -Scanned: 2016-10-20 11:49:20.011116 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-20 11:49:21.549470 -No vulnerabilities found. - - -gucxufangling/flask-- -https://github.com/gucxufangling/flask-- -Entry file: flask--/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 11:49:37.592631 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-20 11:49:42.810311 -No vulnerabilities found. - - -pragmaticcoders/flask-react-seed -https://github.com/pragmaticcoders/flask-react-seed -Entry file: None -Scanned: 2016-10-20 11:49:44.355024 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pragmaticcoders/flask-react-seed. - -jinxiaoyuan/flaskr -https://github.com/jinxiaoyuan/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:49:44.865187 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fkirwin/flaskhelloworld -https://github.com/fkirwin/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-20 11:49:51.600904 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wang7lu6qiang5/flasky -https://github.com/wang7lu6qiang5/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:49:52.106237 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ak042/flasktaskr -https://github.com/ak042/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:49:52.619167 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ailtoncsf/flasklearn -https://github.com/ailtoncsf/flasklearn -Entry file: flasklearn/flask-basics/app.py -Scanned: 2016-10-20 11:50:02.026335 -No vulnerabilities found. - - -VimDong/flaskme -https://github.com/VimDong/flaskme -Entry file: flaskme/app/__init__.py -Scanned: 2016-10-20 11:50:03.794710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -annoys-parrot/flaskbook -https://github.com/annoys-parrot/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 11:50:04.342924 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -axavio/flasky -https://github.com/axavio/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:50:04.869110 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -danil3d/flaskblog -https://github.com/danil3d/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:50:05.632994 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -wanghaa/flasky -https://github.com/wanghaa/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:50:06.144498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -omshankar1/flaskapp -https://github.com/omshankar1/flaskapp -Entry file: None -Scanned: 2016-10-20 11:50:06.648732 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/omshankar1/flaskapp. - -maxwang051/flasktaskr -https://github.com/maxwang051/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:50:07.147439 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 11:50:07.720508 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -joanna-solomiewicz/FlaskWorkshop -https://github.com/joanna-solomiewicz/FlaskWorkshop -Entry file: FlaskWorkshop/app.py -Scanned: 2016-10-20 11:50:14.481640 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWorkshop/venv/lib/python3.5/struct.py - -rmGuarachi/flaskTutorial -https://github.com/rmGuarachi/flaskTutorial -Entry file: flaskTutorial/flaskr.py -Scanned: 2016-10-20 11:50:15.102868 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskTutorial/venv/lib/python2.7/genericpath.py - -mion00/flaskSQLAlchemy -https://github.com/mion00/flaskSQLAlchemy -Entry file: flaskSQLAlchemy/app.py -Scanned: 2016-10-20 11:50:16.875812 -Vulnerability 1: -File: flaskSQLAlchemy/app.py - > User input at line 32, trigger word "get(": - service = request.args.get('service') -File: flaskSQLAlchemy/app.py - > reaches line 34, trigger word "filter(": - users = User.query.filter(User.json.has_key(service)).all() - - - -GriMel/FlaskFirst -https://github.com/GriMel/FlaskFirst -Entry file: FlaskFirst/app/__init__.py -Scanned: 2016-10-20 11:50:18.198775 -No vulnerabilities found. - - -Pazoles/Geocoder -https://github.com/Pazoles/Geocoder -Entry file: Geocoder/app.py -Scanned: 2016-10-20 11:50:25.371265 -No vulnerabilities found. - - -NixonInnes/Flask-Blueprints -https://github.com/NixonInnes/Flask-Blueprints -Entry file: Flask-Blueprints/app/__init__.py -Scanned: 2016-10-20 11:50:27.986451 -No vulnerabilities found. - - -isichkodmitry/flask-caesar -https://github.com/isichkodmitry/flask-caesar -Entry file: flask-caesar/app/__init__.py -Scanned: 2016-10-20 11:50:29.582582 -No vulnerabilities found. - - -zhang-zhang/learning-flask -https://github.com/zhang-zhang/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 11:50:30.174261 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tyrelsouza/flask_vagrant -https://github.com/tyrelsouza/flask_vagrant -Entry file: flask_vagrant/code/src/app.py -Scanned: 2016-10-20 11:50:31.750130 -No vulnerabilities found. - - -SShayashi/flask-test -https://github.com/SShayashi/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:50:32.335556 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -ak042/flask-blog -https://github.com/ak042/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:50:32.886171 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -and3rson/flask-testsite -https://github.com/and3rson/flask-testsite -Entry file: flask-testsite/app.py -Scanned: 2016-10-20 11:50:34.171562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spring3th/flask-blogdemo -https://github.com/spring3th/flask-blogdemo -Entry file: flask-blogdemo/app/__init__.py -Scanned: 2016-10-20 11:50:36.544923 -Vulnerability 1: -File: flask-blogdemo/app/main/views.py - > User input at line 27, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 35: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['SIKA_POSTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 38: posts = pagination.items - File: flask-blogdemo/app/main/views.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask-blogdemo/app/main/views.py - > User input at line 30, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 28: show_followed = False - File: flask-blogdemo/app/main/views.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask-blogdemo/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 45: pagination = User.query.order_by(User.member_since.desc()).paginate(page,per_page=current_app.config['SIKA_USERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 46: alluser = pagination.items -File: flask-blogdemo/app/main/views.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alluser.html',alluser=alluser, pagination=pagination, page=page) - -Vulnerability 4: -File: flask-blogdemo/app/main/views.py - > User input at line 106, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 108: page = post.comments.count() - 1 // current_app.config['SIKA_COMMENTS_PER_PAGE'] + 1 - File: flask-blogdemo/app/main/views.py - > Line 110: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['SIKA_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 111: comments = pagination.items - File: flask-blogdemo/app/main/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-blogdemo/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask-blogdemo/app/main/views.py - > User input at line 184, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 185: pagination = user.followers.paginate(page,per_page=current_app.config['SIKA_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 188: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-blogdemo/app/main/views.py - > Line 183: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 190, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-blogdemo/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 202: pagination = user.followed.paginate(page,per_page=current_app.config['SIKA_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-blogdemo/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask-blogdemo/app/main/views.py - > User input at line 230, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 231: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['SIKA_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 232: comments = pagination.items -File: flask-blogdemo/app/main/views.py - > reaches line 233, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -syniuhin/storyteller-flask -https://github.com/syniuhin/storyteller-flask -Entry file: storyteller-flask/app/__init__.py -Scanned: 2016-10-20 11:50:38.700123 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arushijain/flask_tutorial -https://github.com/arushijain/flask_tutorial -Entry file: None -Scanned: 2016-10-20 11:50:39.276000 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -iooop/flask-blog -https://github.com/iooop/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:50:43.827708 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -AndreyBalandin/flask-test -https://github.com/AndreyBalandin/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:50:45.357784 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -mastershao/lening-flask -https://github.com/mastershao/lening-flask -Entry file: None -Scanned: 2016-10-20 11:50:53.274447 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mastershao/lening-flask. - -markchodges/mastering-flask -https://github.com/markchodges/mastering-flask -Entry file: mastering-flask/webapp/__init__.py -Scanned: 2016-10-20 11:51:00.407518 -Vulnerability 1: -File: mastering-flask/webapp/controllers/blog.py - > User input at line 71, trigger word ".data": - filename = secure_filename(form.photo.data.filename) -Reassigned in: - File: mastering-flask/webapp/controllers/blog.py - > Line 74: filename = None -File: mastering-flask/webapp/controllers/blog.py - > reaches line 75, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('upload.html',form=form, filename=filename) - - - -keeleys/flask_RESTful -https://github.com/keeleys/flask_RESTful -Entry file: flask_RESTful/api/__init__.py -Scanned: 2016-10-20 11:51:01.740495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AmI-2016/python-Flask -https://github.com/AmI-2016/python-Flask -Entry file: python-Flask/PYTHON_FLASK/friends/server.py -Scanned: 2016-10-20 11:51:04.794935 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-Flask/PYTHON_FLASK/friends/venv/lib/python2.7/genericpath.py - -SorenPeterson/flask-intro -https://github.com/SorenPeterson/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:51:05.341200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -an5rag/flask-tutorial -https://github.com/an5rag/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:51:05.845480 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sugarguo/Flask_Blog -https://github.com/sugarguo/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 11:51:08.011946 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andresgariglio/poc-flask -https://github.com/andresgariglio/poc-flask -Entry file: poc-flask/poc-flask/flask_rest_service/__init__.py -Scanned: 2016-10-20 11:51:09.317331 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Datamine/PokerTexter -https://github.com/Datamine/PokerTexter -Entry file: PokerTexter/run-pokertexter.py -Scanned: 2016-10-20 11:51:11.588921 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stuncyilmaz/flask_init -https://github.com/stuncyilmaz/flask_init -Entry file: None -Scanned: 2016-10-20 11:51:12.093597 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stuncyilmaz/flask_init. - -mrpatiwi/flask-starter -https://github.com/mrpatiwi/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 11:51:15.601579 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jmccutchan/raspi_flask -https://github.com/jmccutchan/raspi_flask -Entry file: raspi_flask/app.py -Scanned: 2016-10-20 11:51:23.503423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -priyankt68/flask_example -https://github.com/priyankt68/flask_example -Entry file: None -Scanned: 2016-10-20 11:51:23.995704 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zeratullich/flask_maizi -https://github.com/zeratullich/flask_maizi -Entry file: flask_maizi/app/__init__.py -Scanned: 2016-10-20 11:51:29.742515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mtimebombm/python-flask -https://github.com/mtimebombm/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 11:51:30.258566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Lobster1991/learn_flask -https://github.com/Lobster1991/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:51:30.767375 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JessyHurbain/Flask_test -https://github.com/JessyHurbain/Flask_test -Entry file: Flask_test/coucou.py -Scanned: 2016-10-20 11:51:32.104940 -No vulnerabilities found. - - -achinnac/microblog-flask -https://github.com/achinnac/microblog-flask -Entry file: None -Scanned: 2016-10-20 11:51:32.639952 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jpirih/Flask-Blog -https://github.com/jpirih/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 11:51:33.178510 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhaokefei/web_flask -https://github.com/zhaokefei/web_flask -Entry file: web_flask/app/__init__.py -Scanned: 2016-10-20 11:51:35.543871 -Vulnerability 1: -File: web_flask/app/main/views.py - > User input at line 24, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: web_flask/app/main/views.py - > Line 25: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: web_flask/app/main/views.py - > Line 28: posts = pagination.items - File: web_flask/app/main/views.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: web_flask/app/main/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - - - -BaichuanWu/Blog_flask -https://github.com/BaichuanWu/Blog_flask -Entry file: Blog_flask/flaskpractise.py -Scanned: 2016-10-20 11:51:36.843515 -No vulnerabilities found. - - -sreyemnayr/jss-flask -https://github.com/sreyemnayr/jss-flask -Entry file: jss-flask/jss-flask.py -Scanned: 2016-10-20 11:51:38.146292 -No vulnerabilities found. - - -hectorip/TinyFlaskExperiment -https://github.com/hectorip/TinyFlaskExperiment -Entry file: TinyFlaskExperiment/hello.py -Scanned: 2016-10-20 11:51:39.420072 -No vulnerabilities found. - - -WhiteShirts/windowsflask -https://github.com/WhiteShirts/windowsflask -Entry file: windowsflask/flasky/app/__init__.py -Scanned: 2016-10-20 11:51:42.313259 -Vulnerability 1: -File: windowsflask/flasky/app/main/views.py - > User input at line 27, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 37: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 40: posts = pagination.items - File: windowsflask/flasky/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: windowsflask/flasky/app/main/views.py - > User input at line 32, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 30: show_followed = False - File: windowsflask/flasky/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: windowsflask/flasky/app/main/views.py - > User input at line 67, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 68: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 71: posts = pagination.items -File: windowsflask/flasky/app/main/views.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: windowsflask/flasky/app/main/views.py - > User input at line 135, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 137: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: windowsflask/flasky/app/main/views.py - > Line 139: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 142: comments = pagination.items - File: windowsflask/flasky/app/main/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: windowsflask/flasky/app/main/views.py - > reaches line 143, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: windowsflask/flasky/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 202: pagination = user.followers.paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: windowsflask/flasky/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of ', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: windowsflask/flasky/app/main/views.py - > User input at line 217, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 218: pagination = user.followed.paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 221: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: windowsflask/flasky/app/main/views.py - > Line 216: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 223, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: windowsflask/flasky/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 235: comments = pagination.items -File: windowsflask/flasky/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -ptomelle/appflask -https://github.com/ptomelle/appflask -Entry file: appflask/wsgi/myflaskapp.py -Scanned: 2016-10-20 11:51:44.270870 -No vulnerabilities found. - - -globocom/gbix -https://github.com/globocom/gbix -Entry file: gbix/src/server_jsonrpc.py -Scanned: 2016-10-20 11:51:45.691916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -martinpeck/bedlam-slack -https://github.com/martinpeck/bedlam-slack -Entry file: bedlam-slack/bedlam_slack/__init__.py -Scanned: 2016-10-20 11:51:47.202666 -Vulnerability 1: -File: bedlam-slack/bedlam_slack/ud.py - > User input at line 11, trigger word "get(": - phrase = parse.quote_plus(request.values.get('text').strip()) -Reassigned in: - File: bedlam-slack/bedlam_slack/ud.py - > Line 13: response = 'response_type''text''unfurl_links''in_channel''http://www.urbandictionary.com/define.php?term=' + phrase'true' -File: bedlam-slack/bedlam_slack/ud.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -kud-i/FlaskRestAPI -https://github.com/kud-i/FlaskRestAPI -Entry file: FlaskRestAPI/REST_API.py -Scanned: 2016-10-20 11:51:48.502881 -Vulnerability 1: -File: FlaskRestAPI/REST_API.py - > User input at line 75, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: FlaskRestAPI/REST_API.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -kriesbeck/flask_heroku_practice -https://github.com/kriesbeck/flask_heroku_practice -Entry file: flask_heroku_practice/app/__init__.py -Scanned: 2016-10-20 11:51:55.879031 -No vulnerabilities found. - - -opendatakosovo/flask-app-framework -https://github.com/opendatakosovo/flask-app-framework -Entry file: flask-app-framework/app/__init__.py -Scanned: 2016-10-20 11:52:02.316292 -No vulnerabilities found. - - -ZAGJAB/Flask_OAuth2 -https://github.com/ZAGJAB/Flask_OAuth2 -Entry file: Flask_OAuth2/app.py -Scanned: 2016-10-20 11:52:04.656150 -Vulnerability 1: -File: Flask_OAuth2/app.py - > User input at line 75, trigger word "get(": - code = request.args.get('code') -Reassigned in: - File: Flask_OAuth2/app.py - > Line 76: uri = 'http://localhost:5000/oauth?response_type=%s&client_id=%s&redirect_uri=%s' % (code, client_id, redirect_uri) -File: Flask_OAuth2/app.py - > reaches line 77, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(uri) - - - -k-funk/flask-bower-bootstrap-compass -https://github.com/k-funk/flask-bower-bootstrap-compass -Entry file: flask-bower-bootstrap-compass/app_name/__init__.py -Scanned: 2016-10-20 11:52:05.939330 -No vulnerabilities found. - - -cbeasley92/Flask-REST-API-Testing -https://github.com/cbeasley92/Flask-REST-API-Testing -Entry file: Flask-REST-API-Testing/rest_api.py -Scanned: 2016-10-20 11:52:07.371735 -Vulnerability 1: -File: Flask-REST-API-Testing/rest_api.py - > User input at line 88, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: Flask-REST-API-Testing/rest_api.py - > reaches line 95, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -cruor99/heartbeat-flask-app -https://github.com/cruor99/heartbeat-flask-app -Entry file: heartbeat-flask-app/flaskheartbeat/__init__.py -Scanned: 2016-10-20 11:52:09.812045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sakib3/flask_cartridge_Heroku -https://github.com/sakib3/flask_cartridge_Heroku -Entry file: flask_cartridge_Heroku/app.py -Scanned: 2016-10-20 11:52:11.073371 -No vulnerabilities found. - - -SamirKanaan/PlantillaFlaskREST3 -https://github.com/SamirKanaan/PlantillaFlaskREST3 -Entry file: PlantillaFlaskREST3/inicia.py -Scanned: 2016-10-20 11:52:12.472564 -No vulnerabilities found. - - -zelinlee0303/python-flask-mysql -https://github.com/zelinlee0303/python-flask-mysql -Entry file: python-flask-mysql/app/__init__.py -Scanned: 2016-10-20 11:52:14.279039 -Vulnerability 1: -File: python-flask-mysql/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 26: posts = pagination.items - File: python-flask-mysql/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: python-flask-mysql/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: python-flask-mysql/app/main/views.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 42: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 45: posts = pagination.items - File: python-flask-mysql/app/main/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mindtrace.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 3: -File: python-flask-mysql/app/main/views.py - > User input at line 118, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 119: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 122: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: python-flask-mysql/app/main/views.py - > Line 117: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 124, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='被', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 4: -File: python-flask-mysql/app/main/views.py - > User input at line 135, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 136: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 139: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: python-flask-mysql/app/main/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 5: -File: python-flask-mysql/app/main/views.py - > User input at line 154, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 155: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 158: posts = pagination.items -File: python-flask-mysql/app/main/views.py - > reaches line 159, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -mapingfan/Flask-Web-Dev -https://github.com/mapingfan/Flask-Web-Dev -Entry file: Flask-Web-Dev/app.py -Scanned: 2016-10-20 11:52:20.515317 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gclabon/Twilio-Flask-CSV -https://github.com/gclabon/Twilio-Flask-CSV -Entry file: Twilio-Flask-CSV/twilioFlaskBasic/twilioFlaskBasic.py -Scanned: 2016-10-20 11:52:22.078796 -No vulnerabilities found. - - -ak042/flask-hello-world -https://github.com/ak042/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 11:52:22.643328 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -king100/Flask-Hello-World- -https://github.com/king100/Flask-Hello-World- -Entry file: Flask-Hello-World-/app.py -Scanned: 2016-10-20 11:52:30.382493 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Hello-World-/flask/lib/python2.7/genericpath.py - -MMohan1/Flask_with_celery -https://github.com/MMohan1/Flask_with_celery -Entry file: Flask_with_celery/flask_app/edge/__init__.py -Scanned: 2016-10-20 11:52:31.912291 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jhelgren/flask_movie_reviews -https://github.com/jhelgren/flask_movie_reviews -Entry file: flask_movie_reviews/server.py -Scanned: 2016-10-20 11:52:33.220884 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NixonInnes/Flask-Blueprints-Logins -https://github.com/NixonInnes/Flask-Blueprints-Logins -Entry file: Flask-Blueprints-Logins/app/__init__.py -Scanned: 2016-10-20 11:52:35.936361 -No vulnerabilities found. - - -nejohnson2/flask-template-app -https://github.com/nejohnson2/flask-template-app -Entry file: flask-template-app/app.py -Scanned: 2016-10-20 11:52:37.277181 -No vulnerabilities found. - - -xlmn/DiplomFlaskAngular -https://github.com/xlmn/DiplomFlaskAngular -Entry file: DiplomFlaskAngular/app/__init__.py -Scanned: 2016-10-20 11:52:40.654728 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AMontalva/flask-thinkful-api -https://github.com/AMontalva/flask-thinkful-api -Entry file: flask-thinkful-api/posts/__init__.py -Scanned: 2016-10-20 11:52:42.019591 -Vulnerability 1: -File: flask-thinkful-api/posts/api.py - > User input at line 16, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: flask-thinkful-api/posts/api.py - > Line 22: posts = posts.order_by(models.Post.id) - File: flask-thinkful-api/posts/api.py - > Line 25: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask-thinkful-api/posts/api.py - > Line 26: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask-thinkful-api/posts/api.py - > Line 19: posts = session.query(models.Post) -File: flask-thinkful-api/posts/api.py - > reaches line 21, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - - - -davidnuon/flask-falcon-example -https://github.com/davidnuon/flask-falcon-example -Entry file: flask-falcon-example/flask-demo.py -Scanned: 2016-10-20 11:52:43.440970 -No vulnerabilities found. - - -genedex/flask-neo4j -https://github.com/genedex/flask-neo4j -Entry file: flask-neo4j/blog/views.py -Scanned: 2016-10-20 11:52:44.757242 -No vulnerabilities found. - - -yazquez/example-rest-flask.python -https://github.com/yazquez/example-rest-flask.python -Entry file: None -Scanned: 2016-10-20 11:52:46.677229 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yazquez/example-rest-flask.python. - -sceene/test-flask-app -https://github.com/sceene/test-flask-app -Entry file: None -Scanned: 2016-10-20 11:52:48.108165 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sceene/test-flask-app. - -mtnriver/docker-flask-app -https://github.com/mtnriver/docker-flask-app -Entry file: docker-flask-app/app.py -Scanned: 2016-10-20 11:52:49.395505 -No vulnerabilities found. - - -josephmuli/Flask -https://github.com/josephmuli/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:52:51.321361 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -janukobytsch/flask-autofixture -https://github.com/janukobytsch/flask-autofixture -Entry file: flask-autofixture/tests/conftest.py -Scanned: 2016-10-20 11:52:53.462001 -No vulnerabilities found. - - -paceko/shopping-site -https://github.com/paceko/shopping-site -Entry file: shopping-site/shoppingsite.py -Scanned: 2016-10-20 11:52:57.541038 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pragmaticcoders/flask-react-seed -https://github.com/pragmaticcoders/flask-react-seed -Entry file: None -Scanned: 2016-10-20 11:53:02.060839 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pragmaticcoders/flask-react-seed. - -fkirwin/flaskhelloworld -https://github.com/fkirwin/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-20 11:53:04.758311 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thedrew82/flaskr -https://github.com/thedrew82/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:53:05.264088 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulballal/flasktemplate -https://github.com/rahulballal/flasktemplate -Entry file: flasktemplate/app.py -Scanned: 2016-10-20 11:53:07.687364 -No vulnerabilities found. - - -dimdal/flasktutorial -https://github.com/dimdal/flasktutorial -Entry file: None -Scanned: 2016-10-20 11:53:08.198692 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -axavio/flasky -https://github.com/axavio/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:53:10.698115 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bspaans/flaskal -https://github.com/bspaans/flaskal -Entry file: flaskal/flaskal/imports.py -Scanned: 2016-10-20 11:53:13.137742 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stoodsteal/flasky -https://github.com/stoodsteal/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:53:13.645121 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -allergier/flaskr -https://github.com/allergier/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:53:15.155249 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shenmj053/flaskr -https://github.com/shenmj053/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:53:21.673437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zverxw13/flaskr -https://github.com/zverxw13/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:53:23.211160 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liuhuai0217/flasky -https://github.com/liuhuai0217/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:53:23.740769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -erk52/FlaskDynamics -https://github.com/erk52/FlaskDynamics -Entry file: FlaskDynamics/view.py -Scanned: 2016-10-20 11:53:32.346688 -Vulnerability 1: -File: FlaskDynamics/view.py - > User input at line 18, trigger word ".data": - result = phasePlot(form.XPrime.data, form.YPrime.data) -Reassigned in: - File: FlaskDynamics/view.py - > Line 20: result = None -File: FlaskDynamics/view.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new_view.html',form=form, result=result) - - - -KentaYamada/flaskr2 -https://github.com/KentaYamada/flaskr2 -Entry file: flaskr2/__init__.py -Scanned: 2016-10-20 11:53:33.651387 -No vulnerabilities found. - - -HaarisKhan/FlaskDemos -https://github.com/HaarisKhan/FlaskDemos -Entry file: None -Scanned: 2016-10-20 11:53:41.027686 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gnu4cn/flaskLearnings -https://github.com/gnu4cn/flaskLearnings -Entry file: flaskLearnings/demos/sessions.py -Scanned: 2016-10-20 11:53:50.525062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pepemontana7/flaskFinal -https://github.com/pepemontana7/flaskFinal -Entry file: flaskFinal/firstapp/hello.py -Scanned: 2016-10-20 11:53:51.839875 -No vulnerabilities found. - - -marvelaz/Flask_python -https://github.com/marvelaz/Flask_python -Entry file: Flask_python/app.py -Scanned: 2016-10-20 11:53:53.126402 -Vulnerability 1: -File: Flask_python/app.py - > User input at line 30, trigger word ".data": - url = form.url.data -File: Flask_python/app.py - > reaches line 33, trigger word "flash(": - flash('Stored bookmark '{}''.format(url)) - - - -rishilification/Flask_Sql -https://github.com/rishilification/Flask_Sql -Entry file: Flask_Sql/app.py -Scanned: 2016-10-20 11:53:55.178060 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -filiplasak/flask-skeleton -https://github.com/filiplasak/flask-skeleton -Entry file: None -Scanned: 2016-10-20 11:53:55.688105 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/filiplasak/flask-skeleton. - -groovycol/flask-intro -https://github.com/groovycol/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:53:56.196640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lyoness1/flask-intro -https://github.com/lyoness1/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:53:56.722655 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kelseyoo14/flask-intro -https://github.com/kelseyoo14/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:53:57.232371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Topytops/nice-flask -https://github.com/Topytops/nice-flask -Entry file: nice-flask/nice.py -Scanned: 2016-10-20 11:53:58.529319 -No vulnerabilities found. - - -Bluepig/flask-blog -https://github.com/Bluepig/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:53:59.087646 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -HBKO/flask-test -https://github.com/HBKO/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:53:59.631835 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -tyrelsouza/flask_vagrant -https://github.com/tyrelsouza/flask_vagrant -Entry file: flask_vagrant/code/src/app.py -Scanned: 2016-10-20 11:54:01.033836 -No vulnerabilities found. - - -wolfram74/flask_exploration -https://github.com/wolfram74/flask_exploration -Entry file: flask_exploration/app2.py -Scanned: 2016-10-20 11:54:07.780864 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HDking/flask-blog -https://github.com/HDking/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:54:08.354250 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -CrustyBarnacle/flask_app -https://github.com/CrustyBarnacle/flask_app -Entry file: None -Scanned: 2016-10-20 11:54:08.850914 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CrustyBarnacle/flask_app. - -Weilor/learn_flask -https://github.com/Weilor/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:54:09.350729 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cristinamclarkin/flask-intro -https://github.com/cristinamclarkin/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:09.865259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -emilydowgialo/flask-intro -https://github.com/emilydowgialo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:10.366562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -roboticmonkey/flask-intro -https://github.com/roboticmonkey/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:10.884904 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sarahcstringer/flask-intro -https://github.com/sarahcstringer/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:11.392442 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -askiefer/flask-intro -https://github.com/askiefer/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:11.898287 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lachilles/flask-intro -https://github.com/lachilles/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:12.408645 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dencynluv/Flask--Intro -https://github.com/dencynluv/Flask--Intro -Entry file: Flask--Intro/nice.py -Scanned: 2016-10-20 11:54:14.745432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -holmandw/flask-pi -https://github.com/holmandw/flask-pi -Entry file: flask-pi/app/__init__.py -Scanned: 2016-10-20 11:54:16.722628 -No vulnerabilities found. - - -amiceli/flask-blog -https://github.com/amiceli/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:54:22.295979 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kellyhiggins/flask-intro -https://github.com/kellyhiggins/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:23.819990 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hollywoodno/flask-intro -https://github.com/hollywoodno/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:24.322521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k-hub/flask-intro -https://github.com/k-hub/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:31.848169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunshine-water/Flask_Exercise -https://github.com/sunshine-water/Flask_Exercise -Entry file: Flask_Exercise/nice.py -Scanned: 2016-10-20 11:54:34.175064 -No vulnerabilities found. - - -loopDelicious/flask-intro -https://github.com/loopDelicious/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:54:34.689666 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mastershao/lening-flask -https://github.com/mastershao/lening-flask -Entry file: None -Scanned: 2016-10-20 11:54:42.275952 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mastershao/lening-flask. - -bulain/flask-demo -https://github.com/bulain/flask-demo -Entry file: None -Scanned: 2016-10-20 11:54:51.793848 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bulain/flask-demo. - -diannaowa/flask-blog -https://github.com/diannaowa/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:54:53.359084 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -hyhlinux/stu_flask -https://github.com/hyhlinux/stu_flask -Entry file: None -Scanned: 2016-10-20 11:55:02.605172 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wOstensen/flask-first -https://github.com/wOstensen/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-20 11:55:03.148816 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tacolizard/flask-kott -https://github.com/Tacolizard/flask-kott -Entry file: flask-kott/kott.py -Scanned: 2016-10-20 11:55:04.452257 -No vulnerabilities found. - - -yaoice/flask-micblog -https://github.com/yaoice/flask-micblog -Entry file: flask-micblog/micblog/app/__init__.py -Scanned: 2016-10-20 11:55:05.898586 -Vulnerability 1: -File: flask-micblog/micblog/app/views.py - > User input at line 92, trigger word "get(": - user_name = request.form.get('user_name') -Reassigned in: - File: flask-micblog/micblog/app/views.py - > Line 102: user.nickname = user_name -File: flask-micblog/micblog/app/views.py - > reaches line 95, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - -Vulnerability 2: -File: flask-micblog/micblog/app/views.py - > User input at line 93, trigger word "get(": - user_email = request.form.get('user_email') -Reassigned in: - File: flask-micblog/micblog/app/views.py - > Line 103: user.email = user_email -File: flask-micblog/micblog/app/views.py - > reaches line 95, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - - - -an5rag/flask-tutorial -https://github.com/an5rag/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:55:06.415041 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sugarguo/Flask_Blog -https://github.com/sugarguo/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 11:55:08.027738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glasses4days/flask-intro -https://github.com/glasses4days/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:08.586887 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kjlundsgaard/flask-intro -https://github.com/kjlundsgaard/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:09.087810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurensila/flask-intro -https://github.com/laurensila/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:09.598540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tlwlmy/flask_base -https://github.com/tlwlmy/flask_base -Entry file: flask_base/app/__init__.py -Scanned: 2016-10-20 11:55:11.163021 -No vulnerabilities found. - - -maheskett/flask-intro -https://github.com/maheskett/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:11.672527 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kelly4strength/flask-lab -https://github.com/kelly4strength/flask-lab -Entry file: flask-lab/nice.py -Scanned: 2016-10-20 11:55:12.954382 -No vulnerabilities found. - - -themuppet2/flask-blog -https://github.com/themuppet2/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:55:13.558905 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Aaver69/Python-Flask -https://github.com/Aaver69/Python-Flask -Entry file: None -Scanned: 2016-10-20 11:55:16.356358 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Aaver69/Python-Flask. - -ak042/flask-bdd -https://github.com/ak042/flask-bdd -Entry file: flask-bdd/flaskr.py -Scanned: 2016-10-20 11:55:17.691327 -No vulnerabilities found. - - -nanoha25/flask_local -https://github.com/nanoha25/flask_local -Entry file: flask_local/setup.py -Scanned: 2016-10-20 11:55:24.759385 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dflee/flask-intro -https://github.com/dflee/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:25.276727 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wattanar/flask-sample -https://github.com/wattanar/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 11:55:25.785882 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aperyon/flask-base -https://github.com/Aperyon/flask-base -Entry file: None -Scanned: 2016-10-20 11:55:26.296879 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Aperyon/flask-base. - -rpalo/flask-headlines -https://github.com/rpalo/flask-headlines -Entry file: flask-headlines/headlines.py -Scanned: 2016-10-20 11:55:28.588873 -No vulnerabilities found. - - -stanliski/flask_dev -https://github.com/stanliski/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 11:55:29.163698 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k-wiz/flask-intro -https://github.com/k-wiz/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:29.704774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Munnu/flask-intro -https://github.com/Munnu/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:32.215544 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wynndow/flask_skeleton -https://github.com/Wynndow/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 11:55:33.729072 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -chiubaca/flask-app -https://github.com/chiubaca/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 11:55:35.272966 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -afarges/flask-intro -https://github.com/afarges/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:42.816218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paceko/flask-intro -https://github.com/paceko/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:55:52.334540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ucgyyf/yaoke-flask -https://github.com/ucgyyf/yaoke-flask -Entry file: yaoke-flask/app/__init__.py -Scanned: 2016-10-20 11:55:54.763108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SethHWeidman/flask-test -https://github.com/SethHWeidman/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:56:03.775237 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -rpalo/flask-firstapp -https://github.com/rpalo/flask-firstapp -Entry file: flask-firstapp/hello.py -Scanned: 2016-10-20 11:56:05.101450 -No vulnerabilities found. - - -Jar-win/Flask-Pratice -https://github.com/Jar-win/Flask-Pratice -Entry file: Flask-Pratice/4c-flashing/hello.py -Scanned: 2016-10-20 11:56:06.684818 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stuncyilmaz/flask_init -https://github.com/stuncyilmaz/flask_init -Entry file: None -Scanned: 2016-10-20 11:56:07.181075 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stuncyilmaz/flask_init. - -tageee/test_Flask -https://github.com/tageee/test_Flask -Entry file: test_Flask/hello.py -Scanned: 2016-10-20 11:56:10.037077 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Aisling-Dempsey/flask-intro -https://github.com/Aisling-Dempsey/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:56:10.554281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tkahnhau/flask-intro -https://github.com/tkahnhau/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:56:11.064192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ubermelon/Flask_exercise -https://github.com/ubermelon/Flask_exercise -Entry file: Flask_exercise/nice.py -Scanned: 2016-10-20 11:56:12.355346 -No vulnerabilities found. - - -lsylk/flask-intro -https://github.com/lsylk/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:56:12.902508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minyisme/flask-intro -https://github.com/minyisme/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 11:56:13.406776 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -allisonscofield/flask-lab -https://github.com/allisonscofield/flask-lab -Entry file: flask-lab/nice.py -Scanned: 2016-10-20 11:56:14.694918 -No vulnerabilities found. - - -TiyaBelay/Flask-intro -https://github.com/TiyaBelay/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-20 11:56:15.215687 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chck/flask-sandbox -https://github.com/chck/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-20 11:56:15.738405 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NixonInnes/Flask-Calendar -https://github.com/NixonInnes/Flask-Calendar -Entry file: Flask-Calendar/app/__init__.py -Scanned: 2016-10-20 11:56:19.607683 -Vulnerability 1: -File: Flask-Calendar/app/blueprints/calendar/views.py - > User input at line 30, trigger word ".data": - calendar = Calendar(author_id=current_user.id, name=form.name.data) -Reassigned in: - File: Flask-Calendar/app/blueprints/calendar/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = render_template('calendar/calendar_form.html',form=form) -File: Flask-Calendar/app/blueprints/calendar/views.py - > reaches line 37, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('calendar.get',id=calendar.id)) - -Vulnerability 2: -File: Flask-Calendar/app/blueprints/calendar/views.py - > User input at line 30, trigger word ".data": - calendar = Calendar(author_id=current_user.id, name=form.name.data) -Reassigned in: - File: Flask-Calendar/app/blueprints/calendar/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = render_template('calendar/calendar_form.html',form=form) -File: Flask-Calendar/app/blueprints/calendar/views.py - > reaches line 37, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('calendar.get',id=calendar.id)) - - - -aurigadl/flask-base -https://github.com/aurigadl/flask-base -Entry file: None -Scanned: 2016-10-20 11:56:20.122739 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aurigadl/flask-base. - -tageee/Blog -https://github.com/tageee/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-20 11:56:28.236811 -Vulnerability 1: -File: Blog/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 33: posts = pagination.items - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Blog/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Blog/app/main/views.py - > Line 23: show_followed = False - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Blog/app/main/views.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 60: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 63: posts = pagination.items -File: Blog/app/main/views.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Blog/app/main/views.py - > User input at line 122, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 124: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Blog/app/main/views.py - > Line 126: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 129: comments = pagination.items - File: Blog/app/main/views.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Blog/app/main/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Blog/app/main/views.py - > User input at line 189, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 190: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 193: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 188: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Blog/app/main/views.py - > User input at line 206, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 207: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 210: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 205: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 212, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Blog/app/main/views.py - > User input at line 221, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 222: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 225: comments = pagination.items -File: Blog/app/main/views.py - > reaches line 226, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -od210291jpv/flask -https://github.com/od210291jpv/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:30.412997 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Goomah/flask -https://github.com/Goomah/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:31.008192 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ultramarine7/flask -https://github.com/ultramarine7/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:31.561569 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -amateurPotato/flask -https://github.com/amateurPotato/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:32.173894 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ahdrage/flask -https://github.com/ahdrage/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:32.774281 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -MonPower/Flask -https://github.com/MonPower/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 11:56:33.325861 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wenzi0595/flask -https://github.com/wenzi0595/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 11:56:33.909400 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -singingwolfboy/build-a-flask-api -https://github.com/singingwolfboy/build-a-flask-api -Entry file: build-a-flask-api/step11/puppy.py -Scanned: 2016-10-20 11:56:38.599669 -No vulnerabilities found. - - -sunary/flask-optimize -https://github.com/sunary/flask-optimize -Entry file: flask-optimize/tests/flask_app.py -Scanned: 2016-10-20 11:56:40.013781 -No vulnerabilities found. - - -kashyap32/flask-REST -https://github.com/kashyap32/flask-REST -Entry file: None -Scanned: 2016-10-20 11:56:53.863961 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kashyap32/flask-REST. - -baloo98/flasky -https://github.com/baloo98/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:56:55.863027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sanketg10/flaskapp -https://github.com/sanketg10/flaskapp -Entry file: None -Scanned: 2016-10-20 11:57:04.414192 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanketg10/flaskapp. - -Julzmbugua/flasky -https://github.com/Julzmbugua/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:57:04.942840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rsk7/flaskapp -https://github.com/rsk7/flaskapp -Entry file: None -Scanned: 2016-10-20 11:57:06.461916 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rsk7/flaskapp. - -Sarmacid/flaskr -https://github.com/Sarmacid/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 11:57:07.970764 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skhe/flasky -https://github.com/skhe/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 11:57:08.473197 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neotrinity/flaskavro -https://github.com/neotrinity/flaskavro -Entry file: flaskavro/main.py -Scanned: 2016-10-20 11:57:11.899427 -No vulnerabilities found. - - -zeroisme/flaskblog -https://github.com/zeroisme/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:57:12.427267 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -Mendurim/flasktut -https://github.com/Mendurim/flasktut -Entry file: flasktut/hello.py -Scanned: 2016-10-20 11:57:13.758196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HDking/flasktaskr -https://github.com/HDking/flasktaskr -Entry file: None -Scanned: 2016-10-20 11:57:14.305902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gjcooper/flaskprac -https://github.com/gjcooper/flaskprac -Entry file: flaskprac/app/__init__.py -Scanned: 2016-10-20 11:57:15.716479 -No vulnerabilities found. - - -deliveryyyyguy/flaskapp -https://github.com/deliveryyyyguy/flaskapp -Entry file: None -Scanned: 2016-10-20 11:57:16.229830 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/deliveryyyyguy/flaskapp. - -aaron077/flaskblog -https://github.com/aaron077/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 11:57:16.803453 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -DaBaiLi/FlaskBlog -https://github.com/DaBaiLi/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 11:57:17.430582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cs207-project/FlaskAPI -https://github.com/cs207-project/FlaskAPI -Entry file: None -Scanned: 2016-10-20 11:57:17.935850 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cs207-project/FlaskAPI. - -Thetides/FlaskyTut -https://github.com/Thetides/FlaskyTut -Entry file: FlaskyTut/app.py -Scanned: 2016-10-20 11:57:21.289929 -No vulnerabilities found. - - -prrateekk/FlaskTesting -https://github.com/prrateekk/FlaskTesting -Entry file: FlaskTesting/hello.py -Scanned: 2016-10-20 11:57:31.888189 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTesting/venv/lib/python2.7/genericpath.py - -kolapapa/flasky2 -https://github.com/kolapapa/flasky2 -Entry file: flasky2/app/__init__.py -Scanned: 2016-10-20 11:57:33.363567 -No vulnerabilities found. - - -argenis2021/FlaskTutorial -https://github.com/argenis2021/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 11:57:33.891295 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -konglx90/flask_study -https://github.com/konglx90/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-20 11:57:34.410582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -datademofun/congress-flask -https://github.com/datademofun/congress-flask -Entry file: congress-flask/app.py -Scanned: 2016-10-20 11:57:37.427969 -No vulnerabilities found. - - -ifwenvlook/flask-celery -https://github.com/ifwenvlook/flask-celery -Entry file: flask-celery/app.py -Scanned: 2016-10-20 11:57:38.835558 -Vulnerability 1: -File: flask-celery/app.py - > User input at line 66, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/app.py - > Line 67: session['email'] = email -File: flask-celery/app.py - > reaches line 76, trigger word "flash(": - flash('Sending email to {0}'.format(email)) - -Vulnerability 2: -File: flask-celery/app.py - > User input at line 66, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/app.py - > Line 67: session['email'] = email -File: flask-celery/app.py - > reaches line 80, trigger word "flash(": - flash('An email will be sent to {0} in one minute'.format(email)) - -Vulnerability 3: -File: flask-celery/app.py - > User input at line 103, trigger word "get(": - response = 'state''current''total''status'task.statetask.info.get('current', 0)task.info.get('total', 1)task.info.get('status', '') -Reassigned in: - File: flask-celery/app.py - > Line 96: response = 'state''current''total''status'task.state01'Pending...' - File: flask-celery/app.py - > Line 113: response = 'state''current''total''status'task.state11str(task.info) -File: flask-celery/app.py - > reaches line 119, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -jonalligood/flask-diary -https://github.com/jonalligood/flask-diary -Entry file: flask-diary/flask/lib/python3.5/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 11:57:56.328018 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -HDking/flask-blog -https://github.com/HDking/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:57:56.938577 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sugarguo/flask-login -https://github.com/sugarguo/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-20 11:58:05.922335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Afghary/bloggingFlask -https://github.com/Afghary/bloggingFlask -Entry file: bloggingFlask/src/app.py -Scanned: 2016-10-20 11:58:07.259621 -No vulnerabilities found. - - -abaratif/flask_sms -https://github.com/abaratif/flask_sms -Entry file: flask_sms/app.py -Scanned: 2016-10-20 11:58:08.555222 -No vulnerabilities found. - - -full-stakk/flask-rest -https://github.com/full-stakk/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-20 11:58:09.075670 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ikolito/flask-yahoomarket -https://github.com/ikolito/flask-yahoomarket -Entry file: None -Scanned: 2016-10-20 11:58:10.351797 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ikolito/flask-yahoomarket. - -kunalj101/flask-blog -https://github.com/kunalj101/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 11:58:10.915548 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -RiverAge/flask-mongodb -https://github.com/RiverAge/flask-mongodb -Entry file: flask-mongodb/app/__init__.py -Scanned: 2016-10-20 11:58:12.231064 -No vulnerabilities found. - - -natedoyle/flask-cyoa -https://github.com/natedoyle/flask-cyoa -Entry file: flask-cyoa/src/app.py -Scanned: 2016-10-20 11:58:13.524233 -No vulnerabilities found. - - -ShakedFadi/flask_blog -https://github.com/ShakedFadi/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:58:14.041854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -makensy/flask_alchemy -https://github.com/makensy/flask_alchemy -Entry file: flask_alchemy/app/__init__.py -Scanned: 2016-10-20 11:58:15.433916 -No vulnerabilities found. - - -28sui/dao-flask -https://github.com/28sui/dao-flask -Entry file: dao-flask/app.py -Scanned: 2016-10-20 11:58:16.777536 -No vulnerabilities found. - - -quvide/docker-flask -https://github.com/quvide/docker-flask -Entry file: docker-flask/flask/app/main.py -Scanned: 2016-10-20 11:58:18.213408 -No vulnerabilities found. - - -carlsagan21/flask-crawler -https://github.com/carlsagan21/flask-crawler -Entry file: flask-crawler/flask-crawler.py -Scanned: 2016-10-20 11:58:19.531198 -No vulnerabilities found. - - -Ouro130Ros/LearningFlask -https://github.com/Ouro130Ros/LearningFlask -Entry file: LearningFlask/1-HelloWorld/helloWorld.py -Scanned: 2016-10-20 11:58:20.843855 -No vulnerabilities found. - - -mandshaw/flask_microbrewery -https://github.com/mandshaw/flask_microbrewery -Entry file: flask_microbrewery/flask_microbrewery/run.py -Scanned: 2016-10-20 11:58:22.353389 -No vulnerabilities found. - - -kindoprec/flask-boot -https://github.com/kindoprec/flask-boot -Entry file: flask-boot/app.py -Scanned: 2016-10-20 11:58:23.672093 -Vulnerability 1: -File: flask-boot/app.py - > User input at line 15, trigger word "get(": - out = 'Hello ' + request.args.get('name', '') -File: flask-boot/app.py - > reaches line 16, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(output=out) - - - -liuyun90/learn_flask -https://github.com/liuyun90/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 11:58:24.187768 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardqlin/flask_app -https://github.com/richardqlin/flask_app -Entry file: None -Scanned: 2016-10-20 11:58:24.700789 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flask_app. - -blarneyosullivan/flask_blog -https://github.com/blarneyosullivan/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 11:58:25.231281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MUICProgrammingClub/flask-tutorial -https://github.com/MUICProgrammingClub/flask-tutorial -Entry file: None -Scanned: 2016-10-20 11:58:25.759264 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AuthentiqID/examples-flask -https://github.com/AuthentiqID/examples-flask -Entry file: examples-flask/example_basic.py -Scanned: 2016-10-20 11:58:27.231327 -Vulnerability 1: -File: examples-flask/example_basic.py - > User input at line 135, trigger word "get(": - userinfo = authentiq.get(USERINFO_URL).json() -File: examples-flask/example_basic.py - > reaches line 149, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(userinfo) - -Vulnerability 2: -File: examples-flask/test_example_basic.py - > User input at line 71, trigger word "get(": - res = test_app.get(url_for('index')) -Reassigned in: - File: examples-flask/test_example_basic.py - > Line 76: res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 3: -File: examples-flask/test_example_basic.py - > User input at line 75, trigger word "get(": - url = res.headers.get('Location') -Reassigned in: - File: examples-flask/test_example_basic.py - > Line 76: res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 4: -File: examples-flask/test_example_basic.py - > User input at line 76, trigger word "get(": - res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 5: -File: examples-flask/example_2fa.py - > User input at line 159, trigger word "get(": - userinfo = authentiq.get(USERINFO_URL).json() -File: examples-flask/example_2fa.py - > reaches line 173, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(userinfo) - - - -rpalo/flask-headlines -https://github.com/rpalo/flask-headlines -Entry file: flask-headlines/headlines.py -Scanned: 2016-10-20 11:58:33.906966 -No vulnerabilities found. - - -stanliski/flask_dev -https://github.com/stanliski/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 11:58:34.472465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -s4ayub/FirstFlask -https://github.com/s4ayub/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-20 11:58:35.070614 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -emilydowgialo/skills-flask -https://github.com/emilydowgialo/skills-flask -Entry file: skills-flask/application.py -Scanned: 2016-10-20 11:58:42.209792 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: skills-flask/env/lib/python2.7/genericpath.py - -condemnedbachelor/flask-skills -https://github.com/condemnedbachelor/flask-skills -Entry file: flask-skills/application.py -Scanned: 2016-10-20 11:58:49.666012 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'ingoing' - -jimlambrt-roadscholar/udemy-flask -https://github.com/jimlambrt-roadscholar/udemy-flask -Entry file: udemy-flask/hello.py -Scanned: 2016-10-20 11:58:51.063123 -No vulnerabilities found. - - -CharAct3/flask_test -https://github.com/CharAct3/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 11:58:51.764728 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jlberzal/Flask-User -https://github.com/jlberzal/Flask-User -Entry file: Flask-User/example_apps/multi_email_app.py -Scanned: 2016-10-20 11:58:56.715481 -Vulnerability 1: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 90: db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 2: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 90, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 83: db_adapter = SQLAlchemyAdapter(db, User) - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 4: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 83, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 5: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 92: db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - -Vulnerability 6: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 92, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - - - -kstripp/flask-crud -https://github.com/kstripp/flask-crud -Entry file: flask-crud/app/__init__.py -Scanned: 2016-10-20 11:58:58.213275 -Vulnerability 1: -File: flask-crud/app/views.py - > User input at line 25, trigger word "get(": - post = models.Post.query.get(id) -File: flask-crud/app/views.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',post=post) - - - -iceihehe/flask-test -https://github.com/iceihehe/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 11:58:58.765617 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -gonza-peralta/flask-celery -https://github.com/gonza-peralta/flask-celery -Entry file: flask-celery/app/factory.py -Scanned: 2016-10-20 11:59:08.355608 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -girishramnani/flask-facebookbot -https://github.com/girishramnani/flask-facebookbot -Entry file: flask-facebookbot/app.py -Scanned: 2016-10-20 11:59:09.661372 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Master-Yan/flask_template -https://github.com/Master-Yan/flask_template -Entry file: None -Scanned: 2016-10-20 11:59:10.190348 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Master-Yan/flask_template. - -zjqzero/flask_migrate -https://github.com/zjqzero/flask_migrate -Entry file: flask_migrate/add_index/test.py -Scanned: 2016-10-20 11:59:11.614088 -No vulnerabilities found. - - -nanoha25/flask_local -https://github.com/nanoha25/flask_local -Entry file: flask_local/setup.py -Scanned: 2016-10-20 11:59:12.802674 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wynndow/flask_skeleton -https://github.com/Wynndow/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 11:59:13.300202 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -chiubaca/flask-app -https://github.com/chiubaca/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 11:59:14.819305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bdhammel/asteroid-flask -https://github.com/bdhammel/asteroid-flask -Entry file: asteroid-flask/game.py -Scanned: 2016-10-20 11:59:25.026957 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FizLBQ/Flask_fiz -https://github.com/FizLBQ/Flask_fiz -Entry file: Flask_fiz/demo.py -Scanned: 2016-10-20 11:59:26.362718 -No vulnerabilities found. - - -rpalo/flask-firstapp -https://github.com/rpalo/flask-firstapp -Entry file: flask-firstapp/hello.py -Scanned: 2016-10-20 11:59:27.664931 -No vulnerabilities found. - - -rpalo/flask-crimemap -https://github.com/rpalo/flask-crimemap -Entry file: flask-crimemap/crimemap.py -Scanned: 2016-10-20 11:59:28.973062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -singleyoungtao/myblog-flask -https://github.com/singleyoungtao/myblog-flask -Entry file: myblog-flask/app/__init__.py -Scanned: 2016-10-20 11:59:31.015218 -Vulnerability 1: -File: myblog-flask/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 55: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 58: posts = pagination.items - File: myblog-flask/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: myblog-flask/app/main/views.py - > User input at line 50, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 48: show_followed = False - File: myblog-flask/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: myblog-flask/app/main/views.py - > User input at line 66, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 67: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 70: posts = pagination.items -File: myblog-flask/app/main/views.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: myblog-flask/app/main/views.py - > User input at line 133, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 135: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: myblog-flask/app/main/views.py - > Line 137: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 140: comments = pagination.items - File: myblog-flask/app/main/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: myblog-flask/app/main/views.py - > reaches line 141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: myblog-flask/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 202: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: myblog-flask/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: myblog-flask/app/main/views.py - > User input at line 218, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 219: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 222: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: myblog-flask/app/main/views.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: myblog-flask/app/main/views.py - > User input at line 249, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 250: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 253: comments = pagination.items -File: myblog-flask/app/main/views.py - > reaches line 254, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -rpalo/flask-waitercaller -https://github.com/rpalo/flask-waitercaller -Entry file: flask-waitercaller/waitercaller.py -Scanned: 2016-10-20 11:59:32.315556 -No vulnerabilities found. - - -NJUPole/Flask_tickets -https://github.com/NJUPole/Flask_tickets -Entry file: Flask_tickets/tickets.py -Scanned: 2016-10-20 11:59:34.288158 -Vulnerability 1: -File: Flask_tickets/tickets.py - > User input at line 62, trigger word "get(": - movieDate = request.args.get('date') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 70, trigger word "filter(": - queryRes = queryRes.filter(data.cinemaName.like('%{}%'.format(searchWords))) - -Vulnerability 2: -File: Flask_tickets/tickets.py - > User input at line 63, trigger word "get(": - searchWords = request.args.get('search') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 70, trigger word "filter(": - queryRes = queryRes.filter(data.cinemaName.like('%{}%'.format(searchWords))) - -Vulnerability 3: -File: Flask_tickets/tickets.py - > User input at line 61, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 68: page = pageint(page) - 10 -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - -Vulnerability 4: -File: Flask_tickets/tickets.py - > User input at line 62, trigger word "get(": - movieDate = request.args.get('date') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - -Vulnerability 5: -File: Flask_tickets/tickets.py - > User input at line 63, trigger word "get(": - searchWords = request.args.get('search') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - - - -Mingz2013/demo.flasky -https://github.com/Mingz2013/demo.flasky -Entry file: None -Scanned: 2016-10-20 11:59:35.703073 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Mingz2013/demo.flasky. - -LaundryOrder/Backend -https://github.com/LaundryOrder/Backend -Entry file: Backend/app.py -Scanned: 2016-10-20 11:59:37.148953 -No vulnerabilities found. - - -tageee/Blog -https://github.com/tageee/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-20 11:59:40.279256 -Vulnerability 1: -File: Blog/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 33: posts = pagination.items - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Blog/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Blog/app/main/views.py - > Line 23: show_followed = False - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Blog/app/main/views.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 60: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 63: posts = pagination.items -File: Blog/app/main/views.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Blog/app/main/views.py - > User input at line 122, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 124: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Blog/app/main/views.py - > Line 126: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 129: comments = pagination.items - File: Blog/app/main/views.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Blog/app/main/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Blog/app/main/views.py - > User input at line 189, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 190: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 193: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 188: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Blog/app/main/views.py - > User input at line 206, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 207: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 210: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 205: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 212, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Blog/app/main/views.py - > User input at line 221, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 222: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 225: comments = pagination.items -File: Blog/app/main/views.py - > reaches line 226, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -ahumeijun/RestfulTest -https://github.com/ahumeijun/RestfulTest -Entry file: RestfulTest/app/__init__.py -Scanned: 2016-10-20 11:59:42.102646 -No vulnerabilities found. - - -jlberzal/my_app -https://github.com/jlberzal/my_app -Entry file: my_app/app/__init__.py -Scanned: 2016-10-20 11:59:44.075823 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zzq2015/myFirstWeb -https://github.com/zzq2015/myFirstWeb -Entry file: myFirstWeb/hello/app/__init__.py -Scanned: 2016-10-20 11:59:52.443776 -Vulnerability 1: -File: myFirstWeb/hello/app/views.py - > User input at line 16, trigger word ".data": - name = form.name.data -Reassigned in: - File: myFirstWeb/hello/app/views.py - > Line 13: name = None -File: myFirstWeb/hello/app/views.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name) - -Vulnerability 2: -File: myFirstWeb/hello/app/main/views.py - > User input at line 17, trigger word ".data": - name = form.name.data -Reassigned in: - File: myFirstWeb/hello/app/main/views.py - > Line 14: name = None -File: myFirstWeb/hello/app/main/views.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name) - - - -thomasroulin/SpreadPoll -https://github.com/thomasroulin/SpreadPoll -Entry file: SpreadPoll/SpreadPoll.py -Scanned: 2016-10-20 11:59:53.868311 -No vulnerabilities found. - - -vincentdnl/flask-facebook-messenger-bot-boilerplate -https://github.com/vincentdnl/flask-facebook-messenger-bot-boilerplate -Entry file: flask-facebook-messenger-bot-boilerplate/app.py -Scanned: 2016-10-20 11:59:55.181699 -No vulnerabilities found. - - -GrantJamesPowell/FlaskRaffleApp -https://github.com/GrantJamesPowell/FlaskRaffleApp -Entry file: FlaskRaffleApp/raffleapp.py -Scanned: 2016-10-20 11:59:57.036838 -No vulnerabilities found. - - -vishwanath79/FlaskRestAPI -https://github.com/vishwanath79/FlaskRestAPI -Entry file: FlaskRestAPI/rest.py -Scanned: 2016-10-20 11:59:58.673827 -Vulnerability 1: -File: FlaskRestAPI/rest.py - > User input at line 41, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: FlaskRestAPI/rest.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -catmin/flask49erStore -https://github.com/catmin/flask49erStore -Entry file: flask49erStore/flask49erStore.py -Scanned: 2016-10-20 12:00:00.460479 -Vulnerability 1: -File: flask49erStore/flask49erStore.py - > User input at line 253, trigger word "get(": - offer = Offer.query.get(id) -Reassigned in: - File: flask49erStore/flask49erStore.py - > Line 254: hulls = Hull.query.filter_by(offer_id=offer.id) - File: flask49erStore/flask49erStore.py - > Line 255: masts = Mast.query.filter_by(offer_id=offer.id) - File: flask49erStore/flask49erStore.py - > Line 256: sails = Sail.query.filter_by(offer_id=offer.id) -File: flask49erStore/flask49erStore.py - > reaches line 261, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('offer_details.html',offer=offer, sails=sails, hulls=hulls, masts=masts) - - - -leavyli/flaskWebDevelopment -https://github.com/leavyli/flaskWebDevelopment -Entry file: flaskWebDevelopment/hello/hello.py -Scanned: 2016-10-20 12:00:01.774262 -No vulnerabilities found. - - -thedod/boilerplate-peewee-flask -https://github.com/thedod/boilerplate-peewee-flask -Entry file: None -Scanned: 2016-10-20 12:00:08.776745 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thedod/boilerplate-peewee-flask. - -shn7798/FlaskZhihu -https://github.com/shn7798/FlaskZhihu -Entry file: FlaskZhihu/tests/test_orm.py -Scanned: 2016-10-20 12:00:12.374637 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -syntaxSizer/flask -https://github.com/syntaxSizer/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:12.969227 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gabrielecker/Flask -https://github.com/gabrielecker/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:00:13.475302 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dianalim209/flask -https://github.com/Dianalim209/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:14.092387 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -luojiyin1987/flask -https://github.com/luojiyin1987/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:14.664824 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -chrislinan/flask -https://github.com/chrislinan/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:15.252739 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -lagougou/flask -https://github.com/lagougou/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:15.828838 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tkirkland/Flask -https://github.com/tkirkland/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:00:26.373327 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ooohiroyukiooo/flask -https://github.com/ooohiroyukiooo/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:00:26.959200 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -RoseOu/Flask-learning -https://github.com/RoseOu/Flask-learning -Entry file: Flask-learning/flaskblog/app/__init__.py -Scanned: 2016-10-20 12:00:35.813224 -No vulnerabilities found. - - -yassipo/webservice -https://github.com/yassipo/webservice -Entry file: webservice/app.py -Scanned: 2016-10-20 12:00:37.752278 -No vulnerabilities found. - - -amey-sam/Flask-MailGun -https://github.com/amey-sam/Flask-MailGun -Entry file: None -Scanned: 2016-10-20 12:00:39.513578 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amey-sam/Flask-MailGun. - -yoophi/flaskygram -https://github.com/yoophi/flaskygram -Entry file: None -Scanned: 2016-10-20 12:00:41.634321 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yoophi/flaskygram. - -Ifresher/Flaskr -https://github.com/Ifresher/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:00:42.163031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -efrainmunoz/flasktaskr -https://github.com/efrainmunoz/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:00:42.663534 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HansKramer/flaskr -https://github.com/HansKramer/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:00:43.176514 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shorian/flaskr -https://github.com/shorian/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:00:43.702517 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mmoran0032/flaskwork -https://github.com/mmoran0032/flaskwork -Entry file: flaskwork/hello.py -Scanned: 2016-10-20 12:00:45.028750 -No vulnerabilities found. - - -Maxwell-Ying/flaskbook -https://github.com/Maxwell-Ying/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:00:45.624949 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -ansel333/flaskr -https://github.com/ansel333/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:00:55.149388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ojgoyal/flaskr -https://github.com/ojgoyal/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:00:56.677774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hoorn91/flaskproject -https://github.com/hoorn91/flaskproject -Entry file: None -Scanned: 2016-10-20 12:00:58.219688 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hongmaoxiao/flasky -https://github.com/hongmaoxiao/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:00:59.719314 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jiuhuandao/Flaskr -https://github.com/jiuhuandao/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:01:00.231676 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardqlin/flaskralchemy -https://github.com/richardqlin/flaskralchemy -Entry file: None -Scanned: 2016-10-20 12:01:09.095662 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flaskralchemy. - -thunn/Flaskr1 -https://github.com/thunn/Flaskr1 -Entry file: Flaskr1/flaskr.py -Scanned: 2016-10-20 12:01:10.499500 -No vulnerabilities found. - - -thejojo87/FlaskBlog -https://github.com/thejojo87/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:01:11.112541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shen5630/FlaskProject -https://github.com/shen5630/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-20 12:01:13.752323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -viprs/FlaskyBlog -https://github.com/viprs/FlaskyBlog -Entry file: FlaskyBlog/app/__init__.py -Scanned: 2016-10-20 12:01:17.119655 -Vulnerability 1: -File: FlaskyBlog/app/main/views.py - > User input at line 26, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 27: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 31: posts = pagination.items - File: FlaskyBlog/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: FlaskyBlog/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 50: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: FlaskyBlog/app/main/views.py - > Line 52: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 55: comments = pagination.items - File: FlaskyBlog/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskyBlog/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 3: -File: FlaskyBlog/app/main/views.py - > User input at line 170, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 171: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskyBlog/app/main/views.py - > Line 169: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 4: -File: FlaskyBlog/app/main/views.py - > User input at line 187, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 188: pagination = user.follower.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskyBlog/app/main/views.py - > Line 186: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: FlaskyBlog/app/main/views.py - > User input at line 203, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 204: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 207: comments = pagination.items -File: FlaskyBlog/app/main/views.py - > reaches line 208, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 6: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 18, trigger word "url_for(": - prev_page = url_for('api.get_users',page=page - 1, _external=True) - -Vulnerability 7: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 21, trigger word "url_for(": - next_page = url_for('api.get_users',page=page + 1, _external=True) - -Vulnerability 8: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users''prev_page''next_page''total_count''page_count'user_listprev_pagenext_pagepagination.totaluser_list.__len__()) - -Vulnerability 9: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 10: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 51, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 11: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev_page''next_page''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 12: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 13: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 24, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 14: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev_page''next_page''total_count''page_count'post_listprev_pagenext_pagepagination.totalpost_list.__len__()) - - - -PaperAndColours/flaskImage -https://github.com/PaperAndColours/flaskImage -Entry file: flaskImage/app.py -Scanned: 2016-10-20 12:01:23.398524 -No vulnerabilities found. - - -er3456qi/FlaskTutorial -https://github.com/er3456qi/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 12:01:23.905888 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hamartia0/FlaskWeb -https://github.com/hamartia0/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 12:01:24.561977 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -rmGuarachi/flask2 -https://github.com/rmGuarachi/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-20 12:01:25.069943 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maheskett/flask-testing -https://github.com/maheskett/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:01:29.516065 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kellyhiggins/Flask-testing -https://github.com/kellyhiggins/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-20 12:01:33.296992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurensila/flask-testing -https://github.com/laurensila/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:01:33.833773 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sugarguo/flask-login -https://github.com/sugarguo/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-20 12:01:37.455418 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Afghary/bloggingFlask -https://github.com/Afghary/bloggingFlask -Entry file: bloggingFlask/src/app.py -Scanned: 2016-10-20 12:01:38.845584 -No vulnerabilities found. - - -DANWINS-LLC/flask-starter -https://github.com/DANWINS-LLC/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 12:01:39.361087 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coffee-world/flask_wd -https://github.com/coffee-world/flask_wd -Entry file: flask_wd/hello.py -Scanned: 2016-10-20 12:01:42.137485 -No vulnerabilities found. - - -jiang2/flask-rest -https://github.com/jiang2/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-20 12:01:43.133731 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -progBill/flask_blueprint -https://github.com/progBill/flask_blueprint -Entry file: flask_blueprint/__init__.py -Scanned: 2016-10-20 12:01:44.425707 -No vulnerabilities found. - - -carlsagan21/flask-crawler -https://github.com/carlsagan21/flask-crawler -Entry file: flask-crawler/flask-crawler.py -Scanned: 2016-10-20 12:01:45.689604 -No vulnerabilities found. - - -jdesilvio/flask-deploy -https://github.com/jdesilvio/flask-deploy -Entry file: flask-deploy/template.py -Scanned: 2016-10-20 12:01:46.231346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stanliski/flask-dev -https://github.com/stanliski/flask-dev -Entry file: flask-dev/app/__init__.py -Scanned: 2016-10-20 12:01:53.224216 -No vulnerabilities found. - - -paceko/testing-flask -https://github.com/paceko/testing-flask -Entry file: None -Scanned: 2016-10-20 12:01:53.763718 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minyisme/flask-testing -https://github.com/minyisme/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:01:54.272378 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cristinamclarkin/Flask-testing -https://github.com/cristinamclarkin/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-20 12:01:55.818234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kindoprec/flask-boot -https://github.com/kindoprec/flask-boot -Entry file: flask-boot/app.py -Scanned: 2016-10-20 12:01:58.143751 -Vulnerability 1: -File: flask-boot/app.py - > User input at line 15, trigger word "get(": - out = 'Hello ' + request.args.get('name', '') -File: flask-boot/app.py - > reaches line 16, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(output=out) - - - -enlacee/appFlask -https://github.com/enlacee/appFlask -Entry file: appFlask/web/hello.py -Scanned: 2016-10-20 12:01:59.539362 -No vulnerabilities found. - - -shuangfu/learnFlask -https://github.com/shuangfu/learnFlask -Entry file: None -Scanned: 2016-10-20 12:02:00.521739 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shuangfu/learnFlask. - -tnygren/flask-testing -https://github.com/tnygren/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:02:08.527693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eduardoferrandezr/flask-bokeh -https://github.com/eduardoferrandezr/flask-bokeh -Entry file: flask-bokeh/app.py -Scanned: 2016-10-20 12:02:10.875689 -No vulnerabilities found. - - -rd82/flask-tute -https://github.com/rd82/flask-tute -Entry file: flask-tute/app/__init__.py -Scanned: 2016-10-20 12:02:12.333470 -No vulnerabilities found. - - -jlberzal/Flask-User -https://github.com/jlberzal/Flask-User -Entry file: Flask-User/example_apps/multi_email_app.py -Scanned: 2016-10-20 12:02:18.293987 -Vulnerability 1: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 90: db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 2: -File: Flask-User/example_apps/user_profile_app.py - > User input at line 90, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserProfileClass=UserProfile) -Reassigned in: - File: Flask-User/example_apps/user_profile_app.py - > Line 91: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_profile_app.py - > reaches line 94, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 83: db_adapter = SQLAlchemyAdapter(db, User) - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 4: -File: Flask-User/example_apps/roles_required_app.py - > User input at line 83, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User) -Reassigned in: - File: Flask-User/example_apps/roles_required_app.py - > Line 84: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/roles_required_app.py - > reaches line 87, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 5: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 44, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 92: db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - -Vulnerability 6: -File: Flask-User/example_apps/user_auth_app.py - > User input at line 92, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserAuthClass=UserAuth) -Reassigned in: - File: Flask-User/example_apps/user_auth_app.py - > Line 93: user_manager = UserManager(db_adapter, app) -File: Flask-User/example_apps/user_auth_app.py - > reaches line 96, trigger word "filter(": - if not UserAuth.query.filter(UserAuth.username == 'user007').first(): - - - -saampandit/flask-intro -https://github.com/saampandit/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:02:18.820881 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Danielyao0312/flask-intro -https://github.com/Danielyao0312/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:02:19.335347 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zachwooddoughty/flask-tester -https://github.com/zachwooddoughty/flask-tester -Entry file: flask-tester/hello.py -Scanned: 2016-10-20 12:02:25.679930 -No vulnerabilities found. - - -licsh/flask_app -https://github.com/licsh/flask_app -Entry file: None -Scanned: 2016-10-20 12:02:26.214355 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/licsh/flask_app. - -andresmguk/flask-blog -https://github.com/andresmguk/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:02:26.809504 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -dencynluv/testing-flask -https://github.com/dencynluv/testing-flask -Entry file: None -Scanned: 2016-10-20 12:02:27.314576 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -efrainmunoz/flask-blog -https://github.com/efrainmunoz/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:02:30.883217 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bdhammel/asteroid-flask -https://github.com/bdhammel/asteroid-flask -Entry file: asteroid-flask/game.py -Scanned: 2016-10-20 12:02:34.391289 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dflee/testing-flask -https://github.com/dflee/testing-flask -Entry file: None -Scanned: 2016-10-20 12:02:37.899053 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Ihyatt/testing-flask -https://github.com/Ihyatt/testing-flask -Entry file: None -Scanned: 2016-10-20 12:02:38.411728 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gyermolenko/flask-modelhistory -https://github.com/gyermolenko/flask-modelhistory -Entry file: flask-modelhistory/example/app/__init__.py -Scanned: 2016-10-20 12:02:40.777652 -No vulnerabilities found. - - -hiro93n/sample_flask -https://github.com/hiro93n/sample_flask -Entry file: sample_flask/sample_flask.py -Scanned: 2016-10-20 12:02:41.348560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DraZoro/flask_learning -https://github.com/DraZoro/flask_learning -Entry file: flask_learning/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 12:02:43.034090 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skols/flask_blog -https://github.com/skols/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:02:43.541618 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mingz2013/demo.flasky -https://github.com/Mingz2013/demo.flasky -Entry file: None -Scanned: 2016-10-20 12:02:45.568389 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ahumeijun/RestfulTest -https://github.com/ahumeijun/RestfulTest -Entry file: RestfulTest/app/__init__.py -Scanned: 2016-10-20 12:02:47.885895 -No vulnerabilities found. - - -jlberzal/my_app -https://github.com/jlberzal/my_app -Entry file: my_app/app/__init__.py -Scanned: 2016-10-20 12:02:48.749830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kathure/microblg -https://github.com/Kathure/microblg -Entry file: None -Scanned: 2016-10-20 12:03:04.522923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hufan-Akari/BookLibrary -https://github.com/hufan-Akari/BookLibrary -Entry file: BookLibrary/app/__init__.py -Scanned: 2016-10-20 12:03:09.320044 -Vulnerability 1: -File: BookLibrary/app/main/auth/views.py - > User input at line 14, trigger word ".data": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() -File: BookLibrary/app/main/auth/views.py - > reaches line 14, trigger word "filter(": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() - -Vulnerability 2: -File: BookLibrary/app/main/auth/views.py - > User input at line 14, trigger word ".data": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() -File: BookLibrary/app/main/auth/views.py - > reaches line 17, trigger word "flash(": - flash('登录成功! 欢迎您 %s!' % the_user.name, 'success') - -Vulnerability 3: -File: BookLibrary/app/main/book/views.py - > User input at line 14, trigger word "get(": - search_word = request.args.get('search', None) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 23: search_word = search_word.strip() - File: BookLibrary/app/main/book/views.py - > Line 28: search_form.search.data = search_word -File: BookLibrary/app/main/book/views.py - > reaches line 24, trigger word "filter(": - the_books = the_books.filter(db.or_(Book.title.ilike('%%%s%%' % search_word), Book.author.ilike('%%%s%%' % search_word), Book.isbn.ilike('%%%s%%' % search_word), Book.tags.any(Tag.name.ilike('%%%s%%' % search_word)), Book.subtitle.ilike('%%%s%%' % search_word))).outerjoin(Log).group_by(Book.id).order_by(db.func.count(Log.id).desc()) - -Vulnerability 4: -File: BookLibrary/app/main/book/views.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 32: pagination = the_books.paginate(page,per_page=8) - File: BookLibrary/app/main/book/views.py - > Line 33: result_books = pagination.items -File: BookLibrary/app/main/book/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',books=result_books, pagination=pagination, search_form=search_form, title='书籍清单') - -Vulnerability 5: -File: BookLibrary/app/main/book/views.py - > User input at line 46, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 50: pagination = the_book.logs.filter_by(returned=show - 1).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/book/views.py - > Line 53: pagination = the_book.comments.filter_by(deleted=0).order_by(Comment.edit_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/book/views.py - > Line 56: data = pagination.items -File: BookLibrary/app/main/book/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book_detail.html',book=the_book, data=data, pagination=pagination, form=form, title=the_book.title) - -Vulnerability 6: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 131, trigger word "flash(": - flash('书籍 %s 已添加至图书馆!' % new_book.title, 'success') - -Vulnerability 7: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 132, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book.detail',book_id=new_book.id)) - -Vulnerability 8: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 132, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book.detail',book_id=new_book.id)) - -Vulnerability 9: -File: BookLibrary/app/main/book/views.py - > User input at line 161, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 179: pagination = the_books.paginate(page,per_page=8) - File: BookLibrary/app/main/book/views.py - > Line 180: data = pagination.items - File: BookLibrary/app/main/book/views.py - > Line 167: data = None - File: BookLibrary/app/main/book/views.py - > Line 168: pagination = None -File: BookLibrary/app/main/book/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book_tag.html',tags=the_tags, title='Tags', search_form=search_form, books=data, pagination=pagination) - -Vulnerability 10: -File: BookLibrary/app/main/user/views.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/user/views.py - > Line 15: pagination = User.query.order_by(User.id.desc()).paginate(page,per_page=10) - File: BookLibrary/app/main/user/views.py - > Line 16: users = pagination.items -File: BookLibrary/app/main/user/views.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',users=users, pagination=pagination, title='已注册用户') - -Vulnerability 11: -File: BookLibrary/app/main/user/views.py - > User input at line 28, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/user/views.py - > Line 29: pagination = the_user.logs.filter_by(returned=show).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/user/views.py - > Line 31: logs = pagination.items -File: BookLibrary/app/main/user/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user_detail.html',user=the_user, logs=logs, pagination=pagination, title='用户: ' + the_user.name) - -Vulnerability 12: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 20, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 13: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 22, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=book_id)) - -Vulnerability 14: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 22, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=book_id)) - -Vulnerability 15: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 40, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 16: -File: BookLibrary/app/main/log/views.py - > User input at line 33, trigger word "get(": - the_log = Log.query.get(log_id) -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) -File: BookLibrary/app/main/log/views.py - > reaches line 40, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 17: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 42, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=log_id)) - -Vulnerability 18: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 42, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=log_id)) - -Vulnerability 19: -File: BookLibrary/app/main/log/views.py - > User input at line 52, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 53: pagination = Log.query.filter_by(returned=show).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=10) - File: BookLibrary/app/main/log/views.py - > Line 54: logs = pagination.items -File: BookLibrary/app/main/log/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('logs_info.html',logs=logs, pagination=pagination, title='借阅信息') - - - -katietarng/hb-testing-flask -https://github.com/katietarng/hb-testing-flask -Entry file: hb-testing-flask/party.py -Scanned: 2016-10-20 12:03:12.825549 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lkpanganiban/flask-restful-example -https://github.com/lkpanganiban/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-20 12:03:13.370675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qefir/Black-Jack-Flask-game -https://github.com/qefir/Black-Jack-Flask-game -Entry file: Black-Jack-Flask-game/BJenv/lib/python3.4/site-packages/flask_openid.py -Scanned: 2016-10-20 12:03:23.134826 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -p00gz/OLD-flask-imdbratings-app -https://github.com/p00gz/OLD-flask-imdbratings-app -Entry file: OLD-flask-imdbratings-app/imdbRatings/__init__.py -Scanned: 2016-10-20 12:03:30.419891 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lysdexia/flask-svg-barcode -https://github.com/lysdexia/flask-svg-barcode -Entry file: None -Scanned: 2016-10-20 12:03:32.286626 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lysdexia/flask-svg-barcode. - -Tiago-Lira/cookiecutter-flask-websocket -https://github.com/Tiago-Lira/cookiecutter-flask-websocket -Entry file: None -Scanned: 2016-10-20 12:03:33.738923 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Tiago-Lira/cookiecutter-flask-websocket. - -davejonesbkk/flask_by_example -https://github.com/davejonesbkk/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-20 12:03:43.690560 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_by_example/venv/lib/python3.5/struct.py - -efrainmunoz/flask-hello-world -https://github.com/efrainmunoz/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:03:44.235227 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -beckman16/flask-video-stream -https://github.com/beckman16/flask-video-stream -Entry file: flask-video-stream/app.py -Scanned: 2016-10-20 12:03:46.960118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -askiefer/flask-testing-2 -https://github.com/askiefer/flask-testing-2 -Entry file: flask-testing-2/party.py -Scanned: 2016-10-20 12:03:49.886969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apaoing/apaoing-one-flask -https://github.com/apaoing/apaoing-one-flask -Entry file: apaoing-one-flask/hello.py -Scanned: 2016-10-20 12:03:51.296538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -njurgens/cookbook-api-flask -https://github.com/njurgens/cookbook-api-flask -Entry file: cookbook-api-flask/cookbook_api/app.py -Scanned: 2016-10-20 12:03:53.200912 -No vulnerabilities found. - - -jestoc01/flask-hello-world -https://github.com/jestoc01/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:03:53.757917 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -responsible/Flask-Restful-Role-Auth -https://github.com/responsible/Flask-Restful-Role-Auth -Entry file: Flask-Restful-Role-Auth/App/__init__.py -Scanned: 2016-10-20 12:03:55.088770 -Vulnerability 1: -File: Flask-Restful-Role-Auth/App/__init__.py - > User input at line 9, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-Restful-Role-Auth/App/__init__.py - > Line 15: user_datastore = SQLAlchemyUserDatastore(db, User, Role) - File: Flask-Restful-Role-Auth/App/__init__.py - > Line 16: security = Security().init_app(app, user_datastore,register_blueprint=False) -File: Flask-Restful-Role-Auth/App/__init__.py - > reaches line 25, trigger word "execute(": - db.engine.execute(roles_users.insert(),user_id=1, role_id=1) - - - -dyllanwli/MyFlaskProject -https://github.com/dyllanwli/MyFlaskProject -Entry file: MyFlaskProject/hello.py -Scanned: 2016-10-20 12:03:56.388375 -No vulnerabilities found. - - -rcuevass/Simple_Flask_App -https://github.com/rcuevass/Simple_Flask_App -Entry file: None -Scanned: 2016-10-20 12:03:57.781227 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rcuevass/Simple_Flask_App. - -susantshrestha/flask-by-example -https://github.com/susantshrestha/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:03:58.469798 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -johnwheeler/flask-ask -https://github.com/johnwheeler/flask-ask -Entry file: flask-ask/server.py -Scanned: 2016-10-20 12:04:00.338916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxweiber/flask -https://github.com/maxweiber/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:04:00.919409 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -syntaxSizer/flask -https://github.com/syntaxSizer/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:04:01.525716 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gabrielecker/Flask -https://github.com/gabrielecker/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:04:02.013581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ryanmthompson/flask -https://github.com/ryanmthompson/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:04:02.598186 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -parampara/flask -https://github.com/parampara/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:04:03.188165 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -miguelgrinberg/flack -https://github.com/miguelgrinberg/flack -Entry file: flack/flack/__init__.py -Scanned: 2016-10-20 12:04:05.018054 -Vulnerability 1: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 2: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 3: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - -Vulnerability 4: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - -Vulnerability 5: -File: flack/flack/api/messages.py - > User input at line 36, trigger word "get(": - since = int(request.args.get('updated_since', '0')) -Reassigned in: - File: flack/flack/api/messages.py - > Line 40: since = day_ago -File: flack/flack/api/messages.py - > reaches line 41, trigger word "filter(": - msgs = Message.query.filter(Message.updated_at > since).order_by(Message.updated_at) - - - -TwilioDevEd/sms2fa-flask -https://github.com/TwilioDevEd/sms2fa-flask -Entry file: sms2fa-flask/sms2fa_flask/__init__.py -Scanned: 2016-10-20 12:04:10.196637 -Vulnerability 1: -File: sms2fa-flask/sms2fa_flask/views.py - > User input at line 51, trigger word "get(": - user = User.query.get(session.get('user_email', '')) or abort(401) -Reassigned in: - File: sms2fa-flask/sms2fa_flask/views.py - > Line 56: ret_MAYBE_FUNCTION_NAME = redirect(url_for('secret_page')) -File: sms2fa-flask/sms2fa_flask/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirmation.html',user=user) - - - -RoseOu/Flask-learning -https://github.com/RoseOu/Flask-learning -Entry file: Flask-learning/flaskblog/app/__init__.py -Scanned: 2016-10-20 12:04:17.730323 -No vulnerabilities found. - - -YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -https://github.com/YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -Entry file: uwsgi-nginx-flask-docker-for-sinaimg/flask/app/main.py -Scanned: 2016-10-20 12:04:21.347401 -No vulnerabilities found. - - -datademofun/heroku-basic-flask -https://github.com/datademofun/heroku-basic-flask -Entry file: heroku-basic-flask/app.py -Scanned: 2016-10-20 12:04:26.090256 -No vulnerabilities found. - - -amey-sam/Flask-MailGun -https://github.com/amey-sam/Flask-MailGun -Entry file: None -Scanned: 2016-10-20 12:04:26.601531 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amey-sam/Flask-MailGun. - -DullSmile/flasky -https://github.com/DullSmile/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:04:27.106496 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andresmguk/flasktaskr -https://github.com/andresmguk/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:04:27.629372 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minc-yang/flaskdemo -https://github.com/minc-yang/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 12:04:28.155493 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -efrainmunoz/flasktaskr -https://github.com/efrainmunoz/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:04:31.696897 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zjl1110/flaskdemo -https://github.com/zjl1110/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 12:04:34.764946 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yvonnendutaw/flaskbook -https://github.com/yvonnendutaw/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:04:44.317966 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -chestnutme/flaskie -https://github.com/chestnutme/flaskie -Entry file: flaskie/app/__init__.py -Scanned: 2016-10-20 12:04:46.061338 -Vulnerability 1: -File: flaskie/app/main/views.py - > User input at line 18, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 26: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 29: posts = pagination.items - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskie/app/main/views.py - > User input at line 21, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskie/app/main/views.py - > Line 19: show_followed = False - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskie/app/main/views.py - > User input at line 36, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 37: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 39: posts = pagination.items -File: flaskie/app/main/views.py - > reaches line 40, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskie/app/main/views.py - > User input at line 95, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 97: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskie/app/main/views.py - > Line 99: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 102: comments = pagination.items - File: flaskie/app/main/views.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskie/app/main/views.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskie/app/main/views.py - > User input at line 158, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 159: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 162: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 157: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 164, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskie/app/main/views.py - > User input at line 174, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 175: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE']) - File: flaskie/app/main/views.py - > Line 177: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 173: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -fengyu225/flaskr -https://github.com/fengyu225/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:04:47.579404 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jbussdieker/flaskr -https://github.com/jbussdieker/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:04:51.093993 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardqlin/flaskralchemy -https://github.com/richardqlin/flaskralchemy -Entry file: None -Scanned: 2016-10-20 12:04:52.589103 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flaskralchemy. - -garaud/flask-restplus-meetup -https://github.com/garaud/flask-restplus-meetup -Entry file: flask-restplus-meetup/simple_app.py -Scanned: 2016-10-20 12:04:54.031913 -No vulnerabilities found. - - -ibrahimirdem/flask-numaradan-isim -https://github.com/ibrahimirdem/flask-numaradan-isim -Entry file: flask-numaradan-isim/app.py -Scanned: 2016-10-20 12:04:55.356058 -Vulnerability 1: -File: flask-numaradan-isim/app.py - > User input at line 18, trigger word "form[": - gelen = request.form['numara'] -Reassigned in: - File: flask-numaradan-isim/app.py - > Line 22: sonuc = fonksiyonlar.numara_denetim(gelen) - File: flask-numaradan-isim/app.py - > Line 29: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home')) - File: flask-numaradan-isim/app.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home')) -File: flask-numaradan-isim/app.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sonuc.html',dogruluk=sonuc[0], isim=sonuc[1], id=sonuc[2]) - - - -belljustin/FlaskDeploy -https://github.com/belljustin/FlaskDeploy -Entry file: FlaskDeploy/deploy.py -Scanned: 2016-10-20 12:04:56.668272 -No vulnerabilities found. - - -ArvidQuarshie/FlaskAuthentication -https://github.com/ArvidQuarshie/FlaskAuthentication -Entry file: None -Scanned: 2016-10-20 12:05:02.060528 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ArvidQuarshie/FlaskAuthentication. - -andresmguk/flasktaskr1 -https://github.com/andresmguk/flasktaskr1 -Entry file: flasktaskr1/views.py -Scanned: 2016-10-20 12:05:09.412152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andresmguk/flasktaskr2 -https://github.com/andresmguk/flasktaskr2 -Entry file: flasktaskr2/views.py -Scanned: 2016-10-20 12:05:16.653239 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zjyExcelsior/FlaskSkeleton -https://github.com/zjyExcelsior/FlaskSkeleton -Entry file: FlaskSkeleton/myapp/__init__.py -Scanned: 2016-10-20 12:05:18.042523 -No vulnerabilities found. - - -er3456qi/FlaskTutorial -https://github.com/er3456qi/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 12:05:18.551981 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kelvinmuchui/flaskApp -https://github.com/kelvinmuchui/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-20 12:05:19.075342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ptomelle/flaskNew -https://github.com/ptomelle/flaskNew -Entry file: flaskNew/wsgi/myflaskapp.py -Scanned: 2016-10-20 12:05:22.510251 -No vulnerabilities found. - - -sr77/Restaurant-Web-Application -https://github.com/sr77/Restaurant-Web-Application -Entry file: Restaurant-Web-Application/project.py -Scanned: 2016-10-20 12:05:23.939181 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Almazi/Flask_Project_RealPython -https://github.com/Almazi/Flask_Project_RealPython -Entry file: Flask_Project_RealPython/app.py -Scanned: 2016-10-20 12:05:27.401463 -No vulnerabilities found. - - -hamidfzm/Rest-in-Flask -https://github.com/hamidfzm/Rest-in-Flask -Entry file: Rest-in-Flask/application/__init__.py -Scanned: 2016-10-20 12:05:28.842748 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhujinliang/flask-based-web-framework -https://github.com/zhujinliang/flask-based-web-framework -Entry file: flask-based-web-framework/core/__init__.py -Scanned: 2016-10-20 12:05:30.477628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lipemorais/todo-flask -https://github.com/lipemorais/todo-flask -Entry file: None -Scanned: 2016-10-20 12:05:30.987138 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lipemorais/todo-flask. - -tonuidavies/Blog-flask -https://github.com/tonuidavies/Blog-flask -Entry file: None -Scanned: 2016-10-20 12:05:40.815107 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LpanatoPlanzi/flask-app -https://github.com/LpanatoPlanzi/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:05:41.332465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ksripathi/flask-app -https://github.com/ksripathi/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:05:41.836831 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maheskett/flask-testing -https://github.com/maheskett/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:05:42.340584 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kellyhiggins/Flask-testing -https://github.com/kellyhiggins/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-20 12:05:42.840343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurensila/flask-testing -https://github.com/laurensila/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:05:43.336760 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaronoff97/Flask-Boilerplate -https://github.com/jaronoff97/Flask-Boilerplate -Entry file: Flask-Boilerplate/flaskapp.py -Scanned: 2016-10-20 12:05:44.854528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zjl1110/flask-demo -https://github.com/zjl1110/flask-demo -Entry file: None -Scanned: 2016-10-20 12:05:45.446661 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zjl1110/flask-demo. - -hadesong/Flask_Issues -https://github.com/hadesong/Flask_Issues -Entry file: None -Scanned: 2016-10-20 12:05:46.841576 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hadesong/Flask_Issues. - -jayanth2810/Heroku_Flask -https://github.com/jayanth2810/Heroku_Flask -Entry file: Heroku_Flask/app/app.py -Scanned: 2016-10-20 12:05:48.137369 -No vulnerabilities found. - - -ArvidQuarshie/DiscoverFlask -https://github.com/ArvidQuarshie/DiscoverFlask -Entry file: None -Scanned: 2016-10-20 12:05:56.186746 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kosma24/labrat-flask -https://github.com/kosma24/labrat-flask -Entry file: labrat-flask/lab.py -Scanned: 2016-10-20 12:05:59.061520 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paceko/testing-flask -https://github.com/paceko/testing-flask -Entry file: None -Scanned: 2016-10-20 12:05:59.567572 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minyisme/flask-testing -https://github.com/minyisme/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:06:00.060830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cristinamclarkin/Flask-testing -https://github.com/cristinamclarkin/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-20 12:06:00.549945 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sangqt/learn-flask -https://github.com/sangqt/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 12:06:01.228232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nathanism/flask-app -https://github.com/nathanism/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:06:02.212490 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iuhsihsow/hello_flask -https://github.com/iuhsihsow/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 12:06:02.721366 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amsuny/flask-site -https://github.com/amsuny/flask-site -Entry file: None -Scanned: 2016-10-20 12:06:10.258822 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bigzhao/Flask-Tasks -https://github.com/bigzhao/Flask-Tasks -Entry file: Flask-Tasks/flasktask/app/__init__.py -Scanned: 2016-10-20 12:06:22.893656 -Vulnerability 1: -File: Flask-Tasks/flasktask/app/auth/views.py - > User input at line 124, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Flask-Tasks/flasktask/app/auth/views.py - > Line 129: filename = secure_filename(file.filename) -File: Flask-Tasks/flasktask/app/auth/views.py - > reaches line 131, trigger word "url_for(": - current_user.image_url = url_for('auth.static',filename='%s/%s' % ('avatar', filename)) - -Vulnerability 2: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 26, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 28: pagination = current_user.circles[-1].tasks.order_by(Task.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/main/views.py - > Line 31: tasks = pagination.items - File: Flask-Tasks/flasktask/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 3: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 33, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 4: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 53, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 57: pagination = c.tasks.order_by(Task.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/main/views.py - > Line 60: tasks = pagination.items - File: Flask-Tasks/flasktask/app/main/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=c.id)) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 5: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 62, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=c.id)) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 6: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 167, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 168, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('circle.html',new_messages=int(new_messages)) - -Vulnerability 7: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 189, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.circle')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 190, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('create_circle.html',new_messages=int(new_messages), form=form) - -Vulnerability 8: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 196, trigger word "get(": - message = request.form.get('message') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 200, trigger word "filter(": - c = db.session.query(Circle).filter(Circle.name.like('%' + message + '%')).all() - -Vulnerability 9: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 202, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 203, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_circle.html',new_messages=int(new_messages), circles=c) - -Vulnerability 10: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 11: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 12: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 13: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 14: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 15: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 16: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 17: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 18: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 19: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 16, trigger word "url_for(": - prev = url_for('api.get_tasks',page=page - 1, _external=True) - -Vulnerability 20: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 19, trigger word "url_for(": - next = url_for('api.get_tasks',page=page + 1, _external=True) - -Vulnerability 21: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('tasks''prev''next''count'[task.to_json() for task in tasks]prevnextpagination.total) - -Vulnerability 22: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 23: pagination = current_user.circles[-1].posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 26: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 23: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 28, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 24: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 45, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 46: pagination = c.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 49: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=circle_id)) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 25: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 51, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=circle_id)) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 26: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 94, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 95: pagination = user.posts.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 98: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 100: posts = [] - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 101: posts = pagination.items -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 104, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/user_blogs.html',user=user, posts=posts, pagination=pagination, new_messages=int(new_messages)) - -Vulnerability 27: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 103, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 104, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/user_blogs.html',user=user, posts=posts, pagination=pagination, new_messages=int(new_messages)) - - - -gpgomes/pyFlask -https://github.com/gpgomes/pyFlask -Entry file: pyFlask/server.py -Scanned: 2016-10-20 12:06:24.208604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -M4riacg/api-flask -https://github.com/M4riacg/api-flask -Entry file: api-flask/api_flask.py -Scanned: 2016-10-20 12:06:25.506418 -No vulnerabilities found. - - -9217392354A/flask-stuff -https://github.com/9217392354A/flask-stuff -Entry file: flask-stuff/__init__.py -Scanned: 2016-10-20 12:06:32.464751 -No vulnerabilities found. - - -mprather1/flask_hello -https://github.com/mprather1/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-20 12:06:33.138299 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nana2mini/Flask-Blog -https://github.com/Nana2mini/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 12:06:34.252758 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dencynluv/testing-flask -https://github.com/dencynluv/testing-flask -Entry file: None -Scanned: 2016-10-20 12:06:34.749149 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -efrainmunoz/flask-blog -https://github.com/efrainmunoz/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:06:35.288492 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -linked0/first-flask -https://github.com/linked0/first-flask -Entry file: None -Scanned: 2016-10-20 12:06:35.820144 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nlesc-sherlock/spark-flask -https://github.com/nlesc-sherlock/spark-flask -Entry file: spark-flask/app.py -Scanned: 2016-10-20 12:06:42.151450 -No vulnerabilities found. - - -BethMwangi/flask-intro -https://github.com/BethMwangi/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:06:42.681570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zjl1110/flask-blogmy -https://github.com/zjl1110/flask-blogmy -Entry file: None -Scanned: 2016-10-20 12:06:50.782738 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -skrillex581/flask-insight -https://github.com/skrillex581/flask-insight -Entry file: flask-insight/app/__init__.py -Scanned: 2016-10-20 12:06:52.339666 -No vulnerabilities found. - - -balalay12/flask-cachlka -https://github.com/balalay12/flask-cachlka -Entry file: flask-cachlka/app/__init__.py -Scanned: 2016-10-20 12:06:54.137843 -Vulnerability 1: -File: flask-cachlka/app/views.py - > User input at line 230, trigger word "get(": - repeat = Repeats.query.get(int(id)) -Reassigned in: - File: flask-cachlka/app/views.py - > Line 231: s = Sets.query.get(repeat.set_id) - File: flask-cachlka/app/views.py - > Line 233: ret_MAYBE_FUNCTION_NAME = return_response(404, jsonify(error='Отказано в доступе')) - File: flask-cachlka/app/views.py - > Line 235: ret_MAYBE_FUNCTION_NAME = return_response(500, jsonify(error='Произошлка ошибка во время запроса.')) -File: flask-cachlka/app/views.py - > reaches line 236, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(repeat=repeat.serialize) - -Vulnerability 2: -File: flask-cachlka/app/views.py - > User input at line 293, trigger word "get(": - category = Categories.query.get(int(id)) -File: flask-cachlka/app/views.py - > reaches line 294, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(exercises=[exercise.serialize for exercise in category.exercises.all()]) - -Vulnerability 3: -File: flask-cachlka/app/views.py - > User input at line 312, trigger word "get(": - body_size = BodySize.query.get(int(id)) -Reassigned in: - File: flask-cachlka/app/views.py - > Line 314: ret_MAYBE_FUNCTION_NAME = return_response(404, jsonify(error='Отказано в доступе')) - File: flask-cachlka/app/views.py - > Line 316: ret_MAYBE_FUNCTION_NAME = return_response(500, jsonify(error='Произошлка ошибка во время запроса.')) -File: flask-cachlka/app/views.py - > reaches line 317, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(body_size=body_size.serialize) - - - -mythreyaraj/python-flask -https://github.com/mythreyaraj/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 12:06:54.668071 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Lypzero/flask_studing -https://github.com/Lypzero/flask_studing -Entry file: flask_studing/app/__init__.py -Scanned: 2016-10-20 12:06:56.334647 -Vulnerability 1: -File: flask_studing/app/main/views.py - > User input at line 20, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 28: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 29: posts = pagination.items - File: flask_studing/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 2: -File: flask_studing/app/main/views.py - > User input at line 23, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 21: show_followed = False - File: flask_studing/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 3: -File: flask_studing/app/main/views.py - > User input at line 42, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 43: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 46: posts = pagination.items -File: flask_studing/app/main/views.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_studing/app/main/views.py - > User input at line 108, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 109: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 110: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_studing/app/main/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: flask_studing/app/main/views.py - > User input at line 119, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 120: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 123: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_studing/app/main/views.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 125, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -dflee/testing-flask -https://github.com/dflee/testing-flask -Entry file: None -Scanned: 2016-10-20 12:06:56.841357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Ihyatt/testing-flask -https://github.com/Ihyatt/testing-flask -Entry file: None -Scanned: 2016-10-20 12:06:57.341782 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stefanbro/flask-circle -https://github.com/stefanbro/flask-circle -Entry file: flask-circle/app/__init__.py -Scanned: 2016-10-20 12:07:00.462356 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Clemenshemmerling/flask-docker -https://github.com/Clemenshemmerling/flask-docker -Entry file: flask-docker/compose/app.py -Scanned: 2016-10-20 12:07:01.752755 -No vulnerabilities found. - - -rajatgermany/Rajat5 -https://github.com/rajatgermany/Rajat5 -Entry file: Rajat5/forms.py -Scanned: 2016-10-20 12:07:03.088040 -No vulnerabilities found. - - -amirthn/irpycoderzz -https://github.com/amirthn/irpycoderzz -Entry file: irpycoderzz/app.py -Scanned: 2016-10-20 12:07:04.378554 -No vulnerabilities found. - - -chxy325/studyflask -https://github.com/chxy325/studyflask -Entry file: studyflask/hello.py -Scanned: 2016-10-20 12:07:05.675973 -No vulnerabilities found. - - -moling3650/microblog -https://github.com/moling3650/microblog -Entry file: None -Scanned: 2016-10-20 12:07:06.224044 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gekorob/liebraryrest -https://github.com/gekorob/liebraryrest -Entry file: liebraryrest/liebraryrest/app.py -Scanned: 2016-10-20 12:07:07.901499 -Vulnerability 1: -File: liebraryrest/liebraryrest/api/authors.py - > User input at line 14, trigger word "get(": - qry = qry.filter(Author.name.contains(request.args.get('name'))) -Reassigned in: - File: liebraryrest/liebraryrest/api/authors.py - > Line 11: qry = Author.query -File: liebraryrest/liebraryrest/api/authors.py - > reaches line 14, trigger word "filter(": - qry = qry.filter(Author.name.contains(request.args.get('name'))) - - - -jlanio/Flask-RestlessLoginToken -https://github.com/jlanio/Flask-RestlessLoginToken -Entry file: Flask-RestlessLoginToken/models.py -Scanned: 2016-10-20 12:07:10.260163 -No vulnerabilities found. - - -vibhor1510/COMS-6156-Flask-App -https://github.com/vibhor1510/COMS-6156-Flask-App -Entry file: None -Scanned: 2016-10-20 12:07:17.191490 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vibhor1510/COMS-6156-Flask-App. - -azedlee/flask_hello_world -https://github.com/azedlee/flask_hello_world -Entry file: None -Scanned: 2016-10-20 12:07:18.741953 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/azedlee/flask_hello_world. - -BeenzSyed/flask-random-quote -https://github.com/BeenzSyed/flask-random-quote -Entry file: flask-random-quote/app.py -Scanned: 2016-10-20 12:07:25.097804 -No vulnerabilities found. - - -Firdaus1/Hello_world_Flask -https://github.com/Firdaus1/Hello_world_Flask -Entry file: Hello_world_Flask/FirdausCS3320.py -Scanned: 2016-10-20 12:07:26.413512 -No vulnerabilities found. - - -JesseE/flask-demo-viewer -https://github.com/JesseE/flask-demo-viewer -Entry file: flask-demo-viewer/app.py -Scanned: 2016-10-20 12:07:34.479407 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-demo-viewer/venv/lib/python2.7/genericpath.py - -katietarng/hb-testing-flask -https://github.com/katietarng/hb-testing-flask -Entry file: hb-testing-flask/party.py -Scanned: 2016-10-20 12:07:34.986814 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stack-templates/cde-flask-init-project -https://github.com/stack-templates/cde-flask-init-project -Entry file: cde-flask-init-project/main.py -Scanned: 2016-10-20 12:07:36.335152 -No vulnerabilities found. - - -HenryZivers/Flask-Microblog-App -https://github.com/HenryZivers/Flask-Microblog-App -Entry file: Flask-Microblog-App/app/__init__.py -Scanned: 2016-10-20 12:07:37.787537 -No vulnerabilities found. - - -Skycker/lsa-flask-preview -https://github.com/Skycker/lsa-flask-preview -Entry file: lsa-flask-preview/lsa-flask-preview.py -Scanned: 2016-10-20 12:07:39.355640 -Vulnerability 1: -File: lsa-flask-preview/lsa-flask-preview.py - > User input at line 88, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: lsa-flask-preview/lsa-flask-preview.py - > Line 92: semantic_results = search_by_lsa(query) - File: lsa-flask-preview/lsa-flask-preview.py - > Line 93: sphinx_results = search_by_sphinx(query) - File: lsa-flask-preview/lsa-flask-preview.py - > Line 89: semantic_results = list() - File: lsa-flask-preview/lsa-flask-preview.py - > Line 90: sphinx_results = list() -File: lsa-flask-preview/lsa-flask-preview.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('news.html',semantic_results=semantic_results, compare_results=sphinx_results, query=query) - - - -aurora71/flask-Smart-seat-realtime -https://github.com/aurora71/flask-Smart-seat-realtime -Entry file: None -Scanned: 2016-10-20 12:07:40.768256 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aurora71/flask-Smart-seat-realtime. - -s4swadhin/flask-hello-world -https://github.com/s4swadhin/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:07:41.349328 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -matthewR1993/flask-gant-fun -https://github.com/matthewR1993/flask-gant-fun -Entry file: flask-gant-fun/run.py -Scanned: 2016-10-20 12:07:42.879710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glrh111/flask -https://github.com/glrh111/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:07:51.402510 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -parampara/flask -https://github.com/parampara/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:07:52.990603 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -zhangsen1992/flask -https://github.com/zhangsen1992/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:07:55.551175 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Mufflerman/Flask -https://github.com/Mufflerman/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:07:56.050588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rakeshkirola/Flask -https://github.com/rakeshkirola/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:07:57.557605 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caibitim/Flask -https://github.com/caibitim/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:07:58.068274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rockaja/flask -https://github.com/rockaja/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:07:58.640251 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bhops/flask -https://github.com/bhops/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:08:01.227405 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -enginebai/PyMessager -https://github.com/enginebai/PyMessager -Entry file: PyMessager/api.py -Scanned: 2016-10-20 12:08:03.681430 -No vulnerabilities found. - - -YUX-IO/gossl -https://github.com/YUX-IO/gossl -Entry file: gossl/app.py -Scanned: 2016-10-20 12:08:12.321941 -No vulnerabilities found. - - -yetship/the-way-to-flask -https://github.com/yetship/the-way-to-flask -Entry file: the-way-to-flask/code/application/__init__.py -Scanned: 2016-10-20 12:08:16.307118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JoshData/parsey-mcparseface-server -https://github.com/JoshData/parsey-mcparseface-server -Entry file: parsey-mcparseface-server/server.py -Scanned: 2016-10-20 12:08:17.693961 -No vulnerabilities found. - - -geochilmaru/flaskr -https://github.com/geochilmaru/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:08:18.691232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hejiangping/flaskr -https://github.com/hejiangping/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:08:19.198920 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zmrow/flasktaskr -https://github.com/zmrow/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:08:19.704258 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jpatcourtney/flasktasker -https://github.com/Jpatcourtney/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-20 12:08:21.275496 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liyocee/flaskr -https://github.com/liyocee/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:08:21.784321 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yanni-zhang/flaskweb -https://github.com/yanni-zhang/flaskweb -Entry file: None -Scanned: 2016-10-20 12:08:25.780610 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -googoos/flasktaskr -https://github.com/googoos/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:08:27.289609 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jpatcourtney/flasktaskr -https://github.com/Jpatcourtney/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:08:35.840710 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -janejin8829/flaskangular- -https://github.com/janejin8829/flaskangular- -Entry file: None -Scanned: 2016-10-20 12:08:37.173772 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janejin8829/flaskangular-. - -ljxxcaijing/flaskblog -https://github.com/ljxxcaijing/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:08:37.731763 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ordenador/flaskrestful -https://github.com/ordenador/flaskrestful -Entry file: flaskrestful/flaskrestful.py -Scanned: 2016-10-20 12:08:43.575688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangjiewang/flasky -https://github.com/zhangjiewang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:08:44.102545 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kathure/flasky -https://github.com/Kathure/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:08:44.603257 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -maxweiber/flaskr -https://github.com/maxweiber/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:08:45.123896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrdrms/flaskr -https://github.com/mrdrms/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:08:45.637763 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fburkitt/flasktaskr -https://github.com/fburkitt/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:08:46.141693 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -asimonia/flasktaskr -https://github.com/asimonia/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:08:51.650721 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sisyphus1993/flaskreview -https://github.com/sisyphus1993/flaskreview -Entry file: flaskreview/app/__init__.py -Scanned: 2016-10-20 12:08:54.742423 -Vulnerability 1: -File: flaskreview/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 31: posts = pagination.items - File: flaskreview/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskreview/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 22: show_followed = False - File: flaskreview/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskreview/app/main/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 40: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 42: posts = pagination.items -File: flaskreview/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskreview/app/main/views.py - > User input at line 102, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 104: page = post.comments.count() - 1 // 20 + 1 - File: flaskreview/app/main/views.py - > Line 105: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 107: comments = pagination.items - File: flaskreview/app/main/views.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskreview/app/main/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskreview/app/main/views.py - > User input at line 167, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 168: pagination = user.followers.paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 170: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskreview/app/main/views.py - > Line 166: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 172, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskreview/app/main/views.py - > User input at line 183, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 184: pagination = user.followed.paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 186: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskreview/app/main/views.py - > Line 182: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 188, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskreview/app/main/views.py - > User input at line 213, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 214: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 217: comments = pagination.items -File: flaskreview/app/main/views.py - > reaches line 218, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -rakeshkirola/FlaskTaskr -https://github.com/rakeshkirola/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 12:08:56.899542 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -demoleas21/FlaskHW -https://github.com/demoleas21/FlaskHW -Entry file: FlaskHW/app.py -Scanned: 2016-10-20 12:08:59.240645 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andresmguk/FlaskApp -https://github.com/andresmguk/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:09:00.370777 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonuidavies/flask1 -https://github.com/tonuidavies/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 12:09:01.064884 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -andresmguk/flasktaskr4 -https://github.com/andresmguk/flasktaskr4 -Entry file: flasktaskr4/views.py -Scanned: 2016-10-20 12:09:08.344806 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mzfenng/flaskBlog -https://github.com/mzfenng/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 12:09:08.951807 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -coding-happily/FlaskTest -https://github.com/coding-happily/FlaskTest -Entry file: None -Scanned: 2016-10-20 12:09:09.481087 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/coding-happily/FlaskTest. - -sajjadAI/FlaskSocial -https://github.com/sajjadAI/FlaskSocial -Entry file: FlaskSocial/app.py -Scanned: 2016-10-20 12:09:14.280189 -Vulnerability 1: -File: FlaskSocial/app.py - > User input at line 92, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: FlaskSocial/app.py - > Line 99: user = current_user -File: FlaskSocial/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: FlaskSocial/app.py - > User input at line 197, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 209, trigger word "flash(": - flash('You're now following {}!'.format(to_user.username), 'success') - -Vulnerability 3: -File: FlaskSocial/app.py - > User input at line 197, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 210, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: FlaskSocial/app.py - > User input at line 197, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 210, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: FlaskSocial/app.py - > User input at line 217, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 229, trigger word "flash(": - flash('You're now unfollowed {}!'.format(to_user.username), 'success') - -Vulnerability 6: -File: FlaskSocial/app.py - > User input at line 217, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 230, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: FlaskSocial/app.py - > User input at line 217, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: FlaskSocial/app.py - > reaches line 230, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -sr77/Restaurant-Web-Application -https://github.com/sr77/Restaurant-Web-Application -Entry file: Restaurant-Web-Application/project.py -Scanned: 2016-10-20 12:09:17.793985 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GalaIO/template-for-flask -https://github.com/GalaIO/template-for-flask -Entry file: template-for-flask/app/__init__.py -Scanned: 2016-10-20 12:09:19.245267 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kua-hosi-GRUp/Flask-Bones -https://github.com/kua-hosi-GRUp/Flask-Bones -Entry file: Flask-Bones/app/__init__.py -Scanned: 2016-10-20 12:09:25.883251 -Vulnerability 1: -File: Flask-Bones/app/auth/views.py - > User input at line 46, trigger word ".data": - group = Group.create(nazev=form.data['nazev']) -File: Flask-Bones/app/auth/views.py - > reaches line 48, trigger word "flash(": - flash(gettext('Group {name} created').format(name=group.nazev), 'success') - -Vulnerability 2: -File: Flask-Bones/app/auth/views.py - > User input at line 58, trigger word ".data": - firma = Firma.create(nazev=form.data['nazev'], state=form.data['state'], address=form.data['address'], phone_number=form.data['phone_number'], contact_person=form.data['contact_person'], website=form.data['website']) -File: Flask-Bones/app/auth/views.py - > reaches line 65, trigger word "flash(": - flash(gettext('Organization {name} created').format(name=firma.nazev), 'success') - -Vulnerability 3: -File: Flask-Bones/app/public/views.py - > User input at line 37, trigger word ".data": - user = User.create(username=form.data['username'], email=form.data['email'], password=form.data['password'], remote_addr=request.remote_addr, jmeno=form.data['jmeno'], prijmeni=form.data['prijmeni']) -Reassigned in: - File: Flask-Bones/app/public/views.py - > Line 47: token = s.dumps(user.id) -File: Flask-Bones/app/public/views.py - > reaches line 51, trigger word "flash(": - flash(gettext('Sent verification email to {email}').format(email=user.email), 'success') - - - -orizohar/flask-app -https://github.com/orizohar/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:09:26.412919 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gwong89/flask-ci -https://github.com/gwong89/flask-ci -Entry file: flask-ci/app.py -Scanned: 2016-10-20 12:09:35.531109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zmrow/flask-blog -https://github.com/zmrow/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:09:36.087807 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -joelcolucci/scaffold-flask -https://github.com/joelcolucci/scaffold-flask -Entry file: None -Scanned: 2016-10-20 12:09:37.439776 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joelcolucci/scaffold-flask. - -apighi/NewFlask -https://github.com/apighi/NewFlask -Entry file: NewFlask/wsgi/myflaskapp.py -Scanned: 2016-10-20 12:09:40.882795 -No vulnerabilities found. - - -PaperAndColours/flask_base -https://github.com/PaperAndColours/flask_base -Entry file: flask_base/app.py -Scanned: 2016-10-20 12:09:43.518398 -No vulnerabilities found. - - -richardqlin/flask_class -https://github.com/richardqlin/flask_class -Entry file: flask_class/url_for.py -Scanned: 2016-10-20 12:09:47.534538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rakeshkirola/Flask-Blog -https://github.com/rakeshkirola/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 12:09:48.053752 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ripitrust/flask_react -https://github.com/ripitrust/flask_react -Entry file: flask_react/flask_react/worker.py -Scanned: 2016-10-20 12:09:49.557434 -No vulnerabilities found. - - -db521/sendmail_flask -https://github.com/db521/sendmail_flask -Entry file: sendmail_flask/study/view.py -Scanned: 2016-10-20 12:09:56.718985 -No vulnerabilities found. - - -joelcolucci/flask-responseext -https://github.com/joelcolucci/flask-responseext -Entry file: flask-responseext/tests/mock_app.py -Scanned: 2016-10-20 12:09:58.192223 -No vulnerabilities found. - - -hadesong/Flask_Issues -https://github.com/hadesong/Flask_Issues -Entry file: None -Scanned: 2016-10-20 12:09:58.695138 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hadesong/Flask_Issues. - -jayanth2810/Heroku_Flask -https://github.com/jayanth2810/Heroku_Flask -Entry file: Heroku_Flask/app/app.py -Scanned: 2016-10-20 12:10:00.021903 -No vulnerabilities found. - - -hubert-lee/study_flask -https://github.com/hubert-lee/study_flask -Entry file: None -Scanned: 2016-10-20 12:10:09.724936 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -liyocee/flask_biggy -https://github.com/liyocee/flask_biggy -Entry file: flask_biggy/app/__init__.py -Scanned: 2016-10-20 12:10:11.053363 -Vulnerability 1: -File: flask_biggy/app/auth/controllers.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask_biggy/app/auth/controllers.py - > Line 37: session['user_id'] = user.id -File: flask_biggy/app/auth/controllers.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -mjdough/learning-flask -https://github.com/mjdough/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 12:10:11.705157 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -branweb1/flask_todo -https://github.com/branweb1/flask_todo -Entry file: None -Scanned: 2016-10-20 12:10:12.230972 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Aelmgren/flask-app -https://github.com/Aelmgren/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:10:12.760205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sjb9774/empty-flask -https://github.com/sjb9774/empty-flask -Entry file: empty-flask/app/app.py -Scanned: 2016-10-20 12:10:13.298389 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Tartarus7/microblogFlask -https://github.com/Tartarus7/microblogFlask -Entry file: None -Scanned: 2016-10-20 12:10:23.020525 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mrparvinsmith/flask-tutorial -https://github.com/mrparvinsmith/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:10:23.565287 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Tizeen/flask-microblog -https://github.com/Tizeen/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:10:24.071800 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Chary0917/Flask-app -https://github.com/Chary0917/Flask-app -Entry file: Flask-app/app.py -Scanned: 2016-10-20 12:10:25.377912 -No vulnerabilities found. - - -nimeshkverma/Flask-Params -https://github.com/nimeshkverma/Flask-Params -Entry file: Flask-Params/tests/test.py -Scanned: 2016-10-20 12:10:28.597640 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexurquhart/flask-webapp -https://github.com/alexurquhart/flask-webapp -Entry file: flask-webapp/app/__init__.py -Scanned: 2016-10-20 12:10:30.119728 -No vulnerabilities found. - - -mirrorsysu/aboutFlask -https://github.com/mirrorsysu/aboutFlask -Entry file: aboutFlask/flaskr.py -Scanned: 2016-10-20 12:10:31.892367 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rug3y/flask_example -https://github.com/rug3y/flask_example -Entry file: None -Scanned: 2016-10-20 12:10:32.417449 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rug3y/flask_todo -https://github.com/rug3y/flask_todo -Entry file: None -Scanned: 2016-10-20 12:10:32.935863 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SiQLuxe/flask_session -https://github.com/SiQLuxe/flask_session -Entry file: flask_session/flask_session/__init__.py -Scanned: 2016-10-20 12:10:34.386620 -No vulnerabilities found. - - -devtronics/flask_tut -https://github.com/devtronics/flask_tut -Entry file: flask_tut/microblog/app/__init__.py -Scanned: 2016-10-20 12:10:40.657556 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NatuMyers/Flask-Blog -https://github.com/NatuMyers/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 12:10:41.177591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -9217392354A/flask-stuff -https://github.com/9217392354A/flask-stuff -Entry file: flask-stuff/__init__.py -Scanned: 2016-10-20 12:10:48.288064 -No vulnerabilities found. - - -szamani20/flask_test -https://github.com/szamani20/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:10:48.866394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yshen47/flask-blog -https://github.com/yshen47/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:10:49.904697 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -tonestrike/flask-practice -https://github.com/tonestrike/flask-practice -Entry file: None -Scanned: 2016-10-20 12:10:50.456414 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tonestrike/flask-practice. - -sarasunsh/CP-flask -https://github.com/sarasunsh/CP-flask -Entry file: CP-flask/app.py -Scanned: 2016-10-20 12:10:52.673150 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibaf001/learning-flask -https://github.com/ibaf001/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 12:10:58.236876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Moxikai/my_flask -https://github.com/Moxikai/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 12:10:58.886862 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -LiangXunfly/microblog_flask -https://github.com/LiangXunfly/microblog_flask -Entry file: microblog_flask/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:10:59.594946 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jolly23/PythonFlask -https://github.com/Jolly23/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 12:11:07.500702 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -obi23lipnik/roli-flask -https://github.com/obi23lipnik/roli-flask -Entry file: None -Scanned: 2016-10-20 12:11:18.246843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jcadruvi/DockerFlask -https://github.com/jcadruvi/DockerFlask -Entry file: DockerFlask/app.py -Scanned: 2016-10-20 12:11:19.691892 -No vulnerabilities found. - - -schulzsebastian/flask_firststeps -https://github.com/schulzsebastian/flask_firststeps -Entry file: flask_firststeps/main.py -Scanned: 2016-10-20 12:11:21.226137 -No vulnerabilities found. - - -cholpona/flask_tutorial -https://github.com/cholpona/flask_tutorial -Entry file: None -Scanned: 2016-10-20 12:11:21.754247 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -garedrag/flask_opencv -https://github.com/garedrag/flask_opencv -Entry file: flask_opencv/app.py -Scanned: 2016-10-20 12:11:23.083804 -No vulnerabilities found. - - -aparecidoSilvano/estudando-flask -https://github.com/aparecidoSilvano/estudando-flask -Entry file: None -Scanned: 2016-10-20 12:11:31.868473 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Klimatomas/GifTV -https://github.com/Klimatomas/GifTV -Entry file: GifTV/GTVapi.py -Scanned: 2016-10-20 12:11:33.304403 -No vulnerabilities found. - - -jeffchanjunwei/FlaskWebDemo -https://github.com/jeffchanjunwei/FlaskWebDemo -Entry file: FlaskWebDemo/app.py -Scanned: 2016-10-20 12:11:43.332244 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daniloBlera/FlaskWebServer -https://github.com/daniloBlera/FlaskWebServer -Entry file: FlaskWebServer/FlaskWebServer/src/cloftstill/frontend/serverfront.py -Scanned: 2016-10-20 12:11:45.742256 -No vulnerabilities found. - - -AnkleLiu/FlaskWorkShop -https://github.com/AnkleLiu/FlaskWorkShop -Entry file: FlaskWorkShop/app.py -Scanned: 2016-10-20 12:11:47.173778 -No vulnerabilities found. - - -mrffrm1234/flask -https://github.com/mrffrm1234/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:11:49.129078 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ekusy/flask -https://github.com/ekusy/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:11:49.720021 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -moonoroman/flask -https://github.com/moonoroman/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:11:50.306420 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bhops/flask -https://github.com/bhops/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:11:50.876615 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tweddielin/flask-imsearch -https://github.com/tweddielin/flask-imsearch -Entry file: None -Scanned: 2016-10-20 12:14:05.828540 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tweddielin/flask-imsearch. - -simonbilskyrollins/Flask-Workshop -https://github.com/simonbilskyrollins/Flask-Workshop -Entry file: Flask-Workshop/step3.py -Scanned: 2016-10-20 12:14:07.209829 -No vulnerabilities found. - - -hadesong/flask_weather -https://github.com/hadesong/flask_weather -Entry file: flask_weather/app_package/__init__.py -Scanned: 2016-10-20 12:14:10.292465 -No vulnerabilities found. - - -ealesid/flaskbook -https://github.com/ealesid/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:14:10.849154 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -jake-bladt/flasksandbox -https://github.com/jake-bladt/flasksandbox -Entry file: flasksandbox/app/app.py -Scanned: 2016-10-20 12:14:12.502205 -Vulnerability 1: -File: flasksandbox/app/helpers.py - > User input at line 4, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flasksandbox/app/helpers.py - > Line 6: page = int(page) - File: flasksandbox/app/helpers.py - > Line 8: page = 1 - File: flasksandbox/app/helpers.py - > Line 9: object_list = query.paginate(page, paginate_by) -File: flasksandbox/app/helpers.py - > reaches line 10, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template_name,object_list=object_list, context) - - - -AliceLanniste/Flasky -https://github.com/AliceLanniste/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 12:14:13.036459 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lg31415/flaskr -https://github.com/lg31415/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:14:13.541169 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bewithgaurav/flaskmap -https://github.com/bewithgaurav/flaskmap -Entry file: flaskmap/__init__.py -Scanned: 2016-10-20 12:14:24.454064 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ljxxcaijing/flaskblog -https://github.com/ljxxcaijing/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:14:24.987282 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -fromzeroedu/flaskbook -https://github.com/fromzeroedu/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:14:25.534673 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -nrugas/flasky -https://github.com/nrugas/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:14:26.045538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pcpianobar/flaskr -https://github.com/pcpianobar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:14:26.554022 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mikomwang/flaskr -https://github.com/mikomwang/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:14:27.050102 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xdoyfforai/flaskblog -https://github.com/xdoyfforai/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:14:27.579123 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -anngle/flaskweb -https://github.com/anngle/flaskweb -Entry file: None -Scanned: 2016-10-20 12:14:28.095511 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Aprimus1/flasktaskr -https://github.com/Aprimus1/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:14:28.614498 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -s4swadhin/flasktaskr -https://github.com/s4swadhin/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:14:29.163267 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AnkleLiu/flasky -https://github.com/AnkleLiu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:14:29.672002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -demoleas21/FlaskHW -https://github.com/demoleas21/FlaskHW -Entry file: FlaskHW/app.py -Scanned: 2016-10-20 12:14:30.190673 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulvisen/FlaskServer -https://github.com/paulvisen/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-20 12:14:30.742929 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PicAlert/FlaskApi -https://github.com/PicAlert/FlaskApi -Entry file: FlaskApi/server.py -Scanned: 2016-10-20 12:14:32.115803 -No vulnerabilities found. - - -alexwidener/flaskStuff -https://github.com/alexwidener/flaskStuff -Entry file: flaskStuff/headlines/headlines.py -Scanned: 2016-10-20 12:14:33.441910 -No vulnerabilities found. - - -andresmguk/FlaskApp -https://github.com/andresmguk/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:14:34.049885 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaychia/flasktut1 -https://github.com/jaychia/flasktut1 -Entry file: None -Scanned: 2016-10-20 12:14:40.702413 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stitch001/flaskerMysql -https://github.com/stitch001/flaskerMysql -Entry file: flaskerMysql/mysqlFlask/__init__.py -Scanned: 2016-10-20 12:14:43.740031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -er3456qi/FlaskPolls -https://github.com/er3456qi/FlaskPolls -Entry file: FlaskPolls/polls/__init__.py -Scanned: 2016-10-20 12:14:45.139686 -Vulnerability 1: -File: FlaskPolls/polls/views.py - > User input at line 16, trigger word "get(": - question = Question.query.get(question_id) -File: FlaskPolls/polls/views.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',question=question) - -Vulnerability 2: -File: FlaskPolls/polls/views.py - > User input at line 24, trigger word "get(": - question = Question.query.get(question_id) -File: FlaskPolls/polls/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',question=question) - -Vulnerability 3: -File: FlaskPolls/polls/views.py - > User input at line 32, trigger word "get(": - question = Question.query.get(question_id) -Reassigned in: - File: FlaskPolls/polls/views.py - > Line 35: selected_choice = [c for c in question.choice_set][0] -File: FlaskPolls/polls/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',question=question, error_message='you didn't select a choice.') - -Vulnerability 4: -File: FlaskPolls/polls/views.py - > User input at line 32, trigger word "get(": - question = Question.query.get(question_id) -Reassigned in: - File: FlaskPolls/polls/views.py - > Line 35: selected_choice = [c for c in question.choice_set][0] -File: FlaskPolls/polls/views.py - > reaches line 45, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('results',question_id=question.id)) - -Vulnerability 5: -File: FlaskPolls/polls/views.py - > User input at line 32, trigger word "get(": - question = Question.query.get(question_id) -Reassigned in: - File: FlaskPolls/polls/views.py - > Line 35: selected_choice = [c for c in question.choice_set][0] -File: FlaskPolls/polls/views.py - > reaches line 45, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('results',question_id=question.id)) - - - -GalaIO/template-for-flask -https://github.com/GalaIO/template-for-flask -Entry file: template-for-flask/app/__init__.py -Scanned: 2016-10-20 12:14:45.648383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nad2000/Flask-Timesheets -https://github.com/nad2000/Flask-Timesheets -Entry file: Flask-Timesheets/__init__.py -Scanned: 2016-10-20 12:14:49.474093 -Vulnerability 1: -File: Flask-Timesheets/views.py - > User input at line 157, trigger word "get(": - selected_user = usernameUser.get(User.username == username)None -Reassigned in: - File: Flask-Timesheets/views.py - > Line 160: timesheet = TimeSheet(user=selected_user, week_ending_date=week_ending_date) - File: Flask-Timesheets/views.py - > Line 148: ret_MAYBE_FUNCTION_NAME = redirect(url_for('approve',username=username, week_ending_date=week_ending_date)) -File: Flask-Timesheets/views.py - > reaches line 168, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('approve.html',timesheet=timesheet, form=form, breaks=breaks, selected_user=selected_user, users=users, week_ending_date=week_ending_date, week_ending_dates=week_ending_dates()) - -Vulnerability 2: -File: Flask-Timesheets/views.py - > User input at line 185, trigger word "get(": - include_unapproved = request.args.get('include_unapproved') is not None -File: Flask-Timesheets/views.py - > reaches line 209, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('report.html',include_unapproved=include_unapproved, entries=entries, from_date=from_date, to_date=to_date, selected_company=selected_company, companies=companies, week_ending_dates=week_ending_dates(), week_start_dates=week_start_dates) - -Vulnerability 3: -File: Flask-Timesheets/views.py - > User input at line 187, trigger word "get(": - selected_company = company_codeCompany.get(code=company_code)None -File: Flask-Timesheets/views.py - > reaches line 209, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('report.html',include_unapproved=include_unapproved, entries=entries, from_date=from_date, to_date=to_date, selected_company=selected_company, companies=companies, week_ending_dates=week_ending_dates(), week_start_dates=week_start_dates) - - - -mturnshek/flask-demo -https://github.com/mturnshek/flask-demo -Entry file: None -Scanned: 2016-10-20 12:14:49.979451 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mturnshek/flask-demo. - -ripitrust/flask_react -https://github.com/ripitrust/flask_react -Entry file: flask_react/flask_react/worker.py -Scanned: 2016-10-20 12:14:51.495994 -No vulnerabilities found. - - -zykNet/myFlask -https://github.com/zykNet/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 12:14:52.031658 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bstadt/learningFlask -https://github.com/bstadt/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-20 12:15:06.777903 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -hansenrl/learning_flask -https://github.com/hansenrl/learning_flask -Entry file: learning_flask/app/__init__.py -Scanned: 2016-10-20 12:15:09.105674 -No vulnerabilities found. - - -garyhurtz/Flask-Locales -https://github.com/garyhurtz/Flask-Locales -Entry file: None -Scanned: 2016-10-20 12:15:12.694261 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/garyhurtz/Flask-Locales. - -mpatrone/flask-demo -https://github.com/mpatrone/flask-demo -Entry file: None -Scanned: 2016-10-20 12:15:13.203610 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mpatrone/flask-demo. - -s4swadhin/flask-blog -https://github.com/s4swadhin/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:15:13.775427 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Ceejimus/flask-auth -https://github.com/Ceejimus/flask-auth -Entry file: flask-auth/example.py -Scanned: 2016-10-20 12:15:14.328149 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -db521/sendmail_flask -https://github.com/db521/sendmail_flask -Entry file: sendmail_flask/study/view.py -Scanned: 2016-10-20 12:15:21.377935 -No vulnerabilities found. - - -gwong89/flask-ci -https://github.com/gwong89/flask-ci -Entry file: flask-ci/app.py -Scanned: 2016-10-20 12:15:26.019393 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yitingfan/flask-adminlte -https://github.com/yitingfan/flask-adminlte -Entry file: flask-adminlte/app/__init__.py -Scanned: 2016-10-20 12:15:33.698263 -Vulnerability 1: -File: flask-adminlte/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 55: posts = pagination.items - File: flask-adminlte/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask-adminlte/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 45: show_followed = False - File: flask-adminlte/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask-adminlte/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 67: posts = pagination.items -File: flask-adminlte/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask-adminlte/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-adminlte/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 134: comments = pagination.items - File: flask-adminlte/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-adminlte/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask-adminlte/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-adminlte/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-adminlte/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-adminlte/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask-adminlte/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 246: comments = pagination.items -File: flask-adminlte/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -smailk/flask-workshop -https://github.com/smailk/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-20 12:15:34.240201 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -comdotlinux/first-flask -https://github.com/comdotlinux/first-flask -Entry file: None -Scanned: 2016-10-20 12:15:34.752855 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ByakuyaKuchiki/firstFlask -https://github.com/ByakuyaKuchiki/firstFlask -Entry file: firstFlask/app/__init__.py -Scanned: 2016-10-20 12:15:36.835666 -Vulnerability 1: -File: firstFlask/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 55: posts = pagination.items - File: firstFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: firstFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: firstFlask/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 45: show_followed = False - File: firstFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: firstFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: firstFlask/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 67: posts = pagination.items -File: firstFlask/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: firstFlask/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: firstFlask/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 134: comments = pagination.items - File: firstFlask/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: firstFlask/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: firstFlask/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: firstFlask/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: firstFlask/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: firstFlask/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: firstFlask/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: firstFlask/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: firstFlask/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/main/views.py - > Line 246: comments = pagination.items -File: firstFlask/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: firstFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 20: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 23: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: firstFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 20: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 23: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: firstFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 20: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 23: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: firstFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 42: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 45: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: firstFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 42: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 45: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: firstFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: firstFlask/app/api_1_0/users.py - > Line 42: prev = None - File: firstFlask/app/api_1_0/users.py - > Line 45: next = None -File: firstFlask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: firstFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: firstFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: firstFlask/app/api_1_0/posts.py - > Line 19: next = None -File: firstFlask/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: firstFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: firstFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: firstFlask/app/api_1_0/posts.py - > Line 19: next = None -File: firstFlask/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: firstFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: firstFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: firstFlask/app/api_1_0/posts.py - > Line 19: next = None -File: firstFlask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: firstFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 18: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: firstFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 18: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: firstFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 18: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: firstFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 46: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: firstFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 46: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: firstFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: firstFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: firstFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: firstFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: firstFlask/app/api_1_0/comments.py - > Line 46: next = None -File: firstFlask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -sarosicami/ReviewerFlask -https://github.com/sarosicami/ReviewerFlask -Entry file: ReviewerFlask/rest_server.py -Scanned: 2016-10-20 12:15:39.930939 -Vulnerability 1: -File: ReviewerFlask/rest_server.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: ReviewerFlask/rest_server.py - > User input at line 29, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: ReviewerFlask/rest_server.py - > User input at line 30, trigger word "get(": - country = request.json.get('country') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 4: -File: ReviewerFlask/rest_server.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 5: -File: ReviewerFlask/rest_server.py - > User input at line 29, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 6: -File: ReviewerFlask/rest_server.py - > User input at line 30, trigger word "get(": - country = request.json.get('country') -Reassigned in: - File: ReviewerFlask/rest_server.py - > Line 34: user = models.User(username=username, email=email, country=country) - File: ReviewerFlask/rest_server.py - > Line 32: ret_MAYBE_FUNCTION_NAME = jsonify('error''The username already exists') -File: ReviewerFlask/rest_server.py - > reaches line 38, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('error''username''email''country'''user.usernameuser.emailuser.country), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 7: -File: ReviewerFlask/rest_server.py - > User input at line 53, trigger word "get(": - user = models.User.query.get(id) -File: ReviewerFlask/rest_server.py - > reaches line 56, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username''email''country'user.usernameuser.emailuser.country) - -Vulnerability 8: -File: ReviewerFlask/app/views.py - > User input at line 53, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: ReviewerFlask/app/views.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -xinganng/hello-flask -https://github.com/xinganng/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:15:40.549573 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -pettek/flask_app -https://github.com/pettek/flask_app -Entry file: None -Scanned: 2016-10-20 12:15:41.073644 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pettek/flask_app. - -SeoDongMyeong/Simple-Flask -https://github.com/SeoDongMyeong/Simple-Flask -Entry file: Simple-Flask/application.py -Scanned: 2016-10-20 12:15:42.382609 -No vulnerabilities found. - - -sebastiken/flask-miot -https://github.com/sebastiken/flask-miot -Entry file: flask-miot/app/__init__.py -Scanned: 2016-10-20 12:15:43.659594 -No vulnerabilities found. - - -dreamvx7/Flask-todo -https://github.com/dreamvx7/Flask-todo -Entry file: Flask-todo/app/__init__.py -Scanned: 2016-10-20 12:15:45.008470 -No vulnerabilities found. - - -masaki-y/hello-flask -https://github.com/masaki-y/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:15:45.597967 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -eelkevdbos/microservices-flask -https://github.com/eelkevdbos/microservices-flask -Entry file: microservices-flask/hello/hello.py -Scanned: 2016-10-20 12:15:51.091392 -No vulnerabilities found. - - -daivq/Flask_Basic -https://github.com/daivq/Flask_Basic -Entry file: Flask_Basic/flaskr.py -Scanned: 2016-10-20 12:15:52.514910 -No vulnerabilities found. - - -bbein/flask-demo -https://github.com/bbein/flask-demo -Entry file: None -Scanned: 2016-10-20 12:15:53.076949 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bbein/flask-demo. - -flyhigher139/flask_example -https://github.com/flyhigher139/flask_example -Entry file: None -Scanned: 2016-10-20 12:15:53.581330 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -flaviomicheletti/flask-collection -https://github.com/flaviomicheletti/flask-collection -Entry file: flask-collection/blueprintexample/blueprintexample.py -Scanned: 2016-10-20 12:15:57.972509 -No vulnerabilities found. - - -dhamaresh1/docker-flask -https://github.com/dhamaresh1/docker-flask -Entry file: None -Scanned: 2016-10-20 12:15:59.523592 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dhamaresh1/docker-flask. - -bmw9t/flask_test -https://github.com/bmw9t/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:16:00.078109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ansrivas/flask-alpine -https://github.com/ansrivas/flask-alpine -Entry file: flask-alpine/main.py -Scanned: 2016-10-20 12:16:02.361232 -No vulnerabilities found. - - -hgodinez/flask-demo -https://github.com/hgodinez/flask-demo -Entry file: None -Scanned: 2016-10-20 12:16:02.870652 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hgodinez/flask-demo. - -ThinkerQAQ/flask-learn -https://github.com/ThinkerQAQ/flask-learn -Entry file: flask-learn/app.py -Scanned: 2016-10-20 12:16:08.237993 -No vulnerabilities found. - - -weyoni2/flask_mongo -https://github.com/weyoni2/flask_mongo -Entry file: flask_mongo/app.py -Scanned: 2016-10-20 12:16:09.642041 -No vulnerabilities found. - - -Mr-Bruno/flask-service -https://github.com/Mr-Bruno/flask-service -Entry file: flask-service/service.py -Scanned: 2016-10-20 12:16:12.987627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Theviajerock/mvaFlask -https://github.com/Theviajerock/mvaFlask -Entry file: mvaFlask/app.py -Scanned: 2016-10-20 12:16:14.292841 -Vulnerability 1: -File: mvaFlask/route.py - > User input at line 28, trigger word "form[": - question = request.form['question'] -Reassigned in: - File: mvaFlask/route.py - > Line 33: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: mvaFlask/route.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('CreateQuestion.html') -File: mvaFlask/route.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('CreatedQuestion.html',question=question) - -Vulnerability 2: -File: mvaFlask/route.py - > User input at line 43, trigger word "form[": - submittedAnswer = request.form['submittedAnswer'] -Reassigned in: - File: mvaFlask/route.py - > Line 52: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: mvaFlask/route.py - > Line 41: ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question) - File: mvaFlask/route.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html') -File: mvaFlask/route.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('Incorrect',submittedAnswer=submittedAnswer, answer=answer) - - - -Us3l3ss/flask-test -https://github.com/Us3l3ss/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:16:14.826085 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -shakusi2009/1flask -https://github.com/shakusi2009/1flask -Entry file: 1flask/flaskr.py -Scanned: 2016-10-20 12:16:16.108443 -No vulnerabilities found. - - -renejahn/flask-fastbill -https://github.com/renejahn/flask-fastbill -Entry file: flask-fastbill/test_basics.py -Scanned: 2016-10-20 12:16:17.522608 -Vulnerability 1: -File: flask-fastbill/example/app.py - > User input at line 30, trigger word "get(": - customers_response = fb.customer.get() -Reassigned in: - File: flask-fastbill/example/app.py - > Line 31: customers = customers_response.response.customers -File: flask-fastbill/example/app.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('object_list.html',customers=customers) - -Vulnerability 2: -File: flask-fastbill/example/app.py - > User input at line 38, trigger word "get(": - articles_response = fb.article.get() -Reassigned in: - File: flask-fastbill/example/app.py - > Line 39: articles = articles_response.response.articles -File: flask-fastbill/example/app.py - > reaches line 40, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('object_list.html',articles=articles) - -Vulnerability 3: -File: flask-fastbill/example/app.py - > User input at line 46, trigger word "get(": - invoices_response = fb.invoice.get() -Reassigned in: - File: flask-fastbill/example/app.py - > Line 47: invoices = invoices_response.response.invoices -File: flask-fastbill/example/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('object_list.html',invoices=invoices) - - - -thanhan312/test_flask -https://github.com/thanhan312/test_flask -Entry file: test_flask/app.py -Scanned: 2016-10-20 12:16:26.975381 -No vulnerabilities found. - - -charup/Python_Flask -https://github.com/charup/Python_Flask -Entry file: Python_Flask/hello_dynamicVar.py -Scanned: 2016-10-20 12:16:31.892640 -Vulnerability 1: -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > User input at line 23, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 30: filename = secure_filename(file.filename) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 34: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > reaches line 32, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > User input at line 23, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 30: filename = secure_filename(file.filename) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 34: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > reaches line 32, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -blabaj/Flask_microblog -https://github.com/blabaj/Flask_microblog -Entry file: Flask_microblog/app/__init__.py -Scanned: 2016-10-20 12:16:35.319781 -No vulnerabilities found. - - -aparecidoSilvano/estudando-flask -https://github.com/aparecidoSilvano/estudando-flask -Entry file: None -Scanned: 2016-10-20 12:16:35.853317 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -danfujita/flask-tutorial -https://github.com/danfujita/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:16:36.375242 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -linzeming/flask_project -https://github.com/linzeming/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 12:16:39.335975 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sethbergman/flask-social -https://github.com/sethbergman/flask-social -Entry file: flask-social/app.py -Scanned: 2016-10-20 12:16:40.864259 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cnds/FlaskWithMongo -https://github.com/cnds/FlaskWithMongo -Entry file: FlaskWithMongo/tumblelog/__init__.py -Scanned: 2016-10-20 12:16:42.822787 -No vulnerabilities found. - - -gaomingnudt/gm-flask2.0 -https://github.com/gaomingnudt/gm-flask2.0 -Entry file: None -Scanned: 2016-10-20 12:16:48.820024 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gaomingnudt/gm-flask2.0. - -Amertz08/FlaskWebBook -https://github.com/Amertz08/FlaskWebBook -Entry file: FlaskWebBook/app/__init__.py -Scanned: 2016-10-20 12:16:50.256634 -No vulnerabilities found. - - -ChaitanyaChannella/FlaskHelloWorld -https://github.com/ChaitanyaChannella/FlaskHelloWorld -Entry file: FlaskHelloWorld/hello.py -Scanned: 2016-10-20 12:16:51.554896 -No vulnerabilities found. - - -nmaas87/resin-openwrt-flask-app -https://github.com/nmaas87/resin-openwrt-flask-app -Entry file: resin-openwrt-flask-app/app.py -Scanned: 2016-10-20 12:16:52.878590 -No vulnerabilities found. - - -pazzo83/restaurant_reservation_flask -https://github.com/pazzo83/restaurant_reservation_flask -Entry file: restaurant_reservation_flask/app/__init__.py -Scanned: 2016-10-20 12:16:54.412631 -Vulnerability 1: -File: restaurant_reservation_flask/app/views.py - > User input at line 59, trigger word ".data": - res_date = datetime.datetime.strftime(form.reservation_date.data, '%Y-%m-%d') -Reassigned in: - File: restaurant_reservation_flask/app/views.py - > Line 61: res_date = datetime.datetime.strptime(reservation_date, '%Y-%m-%d') - File: restaurant_reservation_flask/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('show_reservations.html',title='Reservations', reservations=reservations, form=form, total_slots=total_slots, utilization=util) -File: restaurant_reservation_flask/app/views.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect('/show_reservations/' + res_date) - -Vulnerability 2: -File: restaurant_reservation_flask/app/views.py - > User input at line 59, trigger word ".data": - res_date = datetime.datetime.strftime(form.reservation_date.data, '%Y-%m-%d') -Reassigned in: - File: restaurant_reservation_flask/app/views.py - > Line 61: res_date = datetime.datetime.strptime(reservation_date, '%Y-%m-%d') - File: restaurant_reservation_flask/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('show_reservations.html',title='Reservations', reservations=reservations, form=form, total_slots=total_slots, utilization=util) -File: restaurant_reservation_flask/app/views.py - > reaches line 62, trigger word "filter(": - reservations = Reservation.query.filter(Reservation.reservation_time >= res_date, Reservation.reservation_time < res_date + datetime.timedelta(days=1)).all() - -Vulnerability 3: -File: restaurant_reservation_flask/app/controller.py - > User input at line 14, trigger word ".data": - capacity = int(form_data.num_guests.data) -Reassigned in: - File: restaurant_reservation_flask/app/controller.py - > Line 37: reservation = Reservation(guest=guest, table=Table.query.get(int(table_id)), num_guests=capacity, reservation_time=form_data.reservation_datetime.data) - File: restaurant_reservation_flask/app/controller.py - > Line 41: reservation = Reservation(guest=guest, table=Table.query.get(int(t_ids[0])), num_guests=capacity, reservation_time=form_data.reservation_datetime.data) - File: restaurant_reservation_flask/app/controller.py - > Line 45: ret_MAYBE_FUNCTION_NAME = reservation - File: restaurant_reservation_flask/app/controller.py - > Line 19: ret_MAYBE_FUNCTION_NAME = False - File: restaurant_reservation_flask/app/controller.py - > Line 33: ret_MAYBE_FUNCTION_NAME = False -File: restaurant_reservation_flask/app/controller.py - > reaches line 15, trigger word "filter(": - tables = Table.query.filter(Table.capacity >= capacity).order_by(Table.capacity.desc()).all() - -Vulnerability 4: -File: restaurant_reservation_flask/app/controller.py - > User input at line 22, trigger word ".data": - begin_range = form_data.reservation_datetime.data - datetime.timedelta(hours=DEFAULT_RESERVATION_LENGTH) -File: restaurant_reservation_flask/app/controller.py - > reaches line 26, trigger word "filter(": - reservations = Reservation.query.join(Reservation.table).filter(Table.id.in_(t_ids), Reservation.reservation_time >= begin_range, Reservation.reservation_time <= end_range).order_by(Table.capacity.desc()).all() - -Vulnerability 5: -File: restaurant_reservation_flask/app/controller.py - > User input at line 23, trigger word ".data": - end_range = form_data.reservation_datetime.data + datetime.timedelta(hours=DEFAULT_RESERVATION_LENGTH) -File: restaurant_reservation_flask/app/controller.py - > reaches line 26, trigger word "filter(": - reservations = Reservation.query.join(Reservation.table).filter(Table.id.in_(t_ids), Reservation.reservation_time >= begin_range, Reservation.reservation_time <= end_range).order_by(Table.capacity.desc()).all() - - - -Ogma-Dev/Simple-Flask-Webhook -https://github.com/Ogma-Dev/Simple-Flask-Webhook -Entry file: Simple-Flask-Webhook/simple-webhook.py -Scanned: 2016-10-20 12:16:55.715992 -No vulnerabilities found. - - -MoxmiNu/flask-mongo-docker -https://github.com/MoxmiNu/flask-mongo-docker -Entry file: flask-mongo-docker/flask/dr-app.py -Scanned: 2016-10-20 12:16:57.005424 -No vulnerabilities found. - - -andela-mnzomo/flask-bucketlist-api -https://github.com/andela-mnzomo/flask-bucketlist-api -Entry file: flask-bucketlist-api/app/__init__.py -Scanned: 2016-10-20 12:17:01.796135 -No vulnerabilities found. - - -NatuMyers/flask-sql-practice -https://github.com/NatuMyers/flask-sql-practice -Entry file: flask-sql-practice/finalproject.py -Scanned: 2016-10-20 12:17:10.331834 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pjt3591oo/python-flask_test -https://github.com/pjt3591oo/python-flask_test -Entry file: python-flask_test/model.py -Scanned: 2016-10-20 12:17:18.093164 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yuta-hono/flask-cloudfoundry-sample -https://github.com/yuta-hono/flask-cloudfoundry-sample -Entry file: flask-cloudfoundry-sample/hello.py -Scanned: 2016-10-20 12:17:21.405397 -No vulnerabilities found. - - -zjyExcelsior/Flask-Login-examples -https://github.com/zjyExcelsior/Flask-Login-examples -Entry file: Flask-Login-examples/myapp/__init__.py -Scanned: 2016-10-20 12:17:23.084973 -Vulnerability 1: -File: Flask-Login-examples/myapp/views/auth.py - > User input at line 16, trigger word ".data": - user = User.query.filter(User.email == form.email.data).first() -File: Flask-Login-examples/myapp/views/auth.py - > reaches line 16, trigger word "filter(": - user = User.query.filter(User.email == form.email.data).first() - -Vulnerability 2: -File: Flask-Login-examples/myapp/views/auth.py - > User input at line 22, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: Flask-Login-examples/myapp/views/auth.py - > Line 25: ret_MAYBE_FUNCTION_NAME = render_template('auth/login.html',form=form) -File: Flask-Login-examples/myapp/views/auth.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('main.index')) - -Vulnerability 3: -File: Flask-Login-examples/myapp/views/auth.py - > User input at line 22, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: Flask-Login-examples/myapp/views/auth.py - > Line 25: ret_MAYBE_FUNCTION_NAME = render_template('auth/login.html',form=form) -File: Flask-Login-examples/myapp/views/auth.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('main.index')) - - - -robertkohl125/MathQuizerFlask -https://github.com/robertkohl125/MathQuizerFlask -Entry file: MathQuizerFlask/MathQuizer/__init__.py -Scanned: 2016-10-20 12:17:25.282042 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MickaelAmorim/flask-server-netacad -https://github.com/MickaelAmorim/flask-server-netacad -Entry file: flask-server-netacad/netacad.py -Scanned: 2016-10-20 12:17:26.642205 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tharinda221/simple-flask-web-application -https://github.com/tharinda221/simple-flask-web-application -Entry file: simple-flask-web-application/simple-flask-web-application.py -Scanned: 2016-10-20 12:17:28.037593 -No vulnerabilities found. - - -jiyeonseo/study_python_flask -https://github.com/jiyeonseo/study_python_flask -Entry file: study_python_flask/cheesetest.py -Scanned: 2016-10-20 12:17:29.378832 -No vulnerabilities found. - - -Blockshare/blockshare-flask-template -https://github.com/Blockshare/blockshare-flask-template -Entry file: blockshare-flask-template/app/__init__.py -Scanned: 2016-10-20 12:17:36.174929 -Vulnerability 1: -File: blockshare-flask-template/app/forms/user.py - > User input at line 25, trigger word ".data": - check = self.model.query.filter(self.field == field.data).first() -File: blockshare-flask-template/app/forms/user.py - > reaches line 25, trigger word "filter(": - check = self.model.query.filter(self.field == field.data).first() - -Vulnerability 2: -File: blockshare-flask-template/app/views/main.py - > User input at line 67, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: blockshare-flask-template/app/views/main.py - > Line 71: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 72, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 3: -File: blockshare-flask-template/app/views/main.py - > User input at line 71, trigger word ".data": - message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 72, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 4: -File: blockshare-flask-template/app/views/main.py - > User input at line 67, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: blockshare-flask-template/app/views/main.py - > Line 71: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 76, trigger word "flash(": - flash(tx['message'], 'negative') - -Vulnerability 5: -File: blockshare-flask-template/app/views/main.py - > User input at line 108, trigger word ".data": - message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 109, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 6: -File: blockshare-flask-template/app/views/main.py - > User input at line 120, trigger word "form(": - points = [(random.uniform(48.84341, 48.86341), random.uniform(2.3388, 2.3588)) for _ in range(random.randint(2, 9))] -File: blockshare-flask-template/app/views/main.py - > reaches line 123, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('points'points) - -Vulnerability 7: -File: blockshare-flask-template/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 41, trigger word "url_for(": - confirmUrl = url_for('userbp.confirm',token=token, _external=True) - -Vulnerability 8: -File: blockshare-flask-template/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 43, trigger word "render_template(": - html = render_template('email/confirm.html',confirm_url=confirmUrl) - -Vulnerability 9: -File: blockshare-flask-template/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 126, trigger word "url_for(": - resetUrl = url_for('userbp.reset',token=token, _external=True) - -Vulnerability 10: -File: blockshare-flask-template/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 128, trigger word "render_template(": - html = render_template('email/reset.html',reset_url=resetUrl) - - - -cuttlesoft/flask-bitmapist -https://github.com/cuttlesoft/flask-bitmapist -Entry file: flask-bitmapist/tests/conftest.py -Scanned: 2016-10-20 12:17:42.262349 -No vulnerabilities found. - - -dhaval38/Flask -https://github.com/dhaval38/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:17:42.797739 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrffrm1234/flask -https://github.com/mrffrm1234/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:17:43.376563 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gaurikatyagi/Flask -https://github.com/gaurikatyagi/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:17:43.902757 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TeamDroneFireman/Flask -https://github.com/TeamDroneFireman/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:17:44.416775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sloria/flask-konch -https://github.com/sloria/flask-konch -Entry file: flask-konch/example_app/hello.py -Scanned: 2016-10-20 12:17:45.841828 -No vulnerabilities found. - - -patternexon/hello -https://github.com/patternexon/hello -Entry file: hello/hello.py -Scanned: 2016-10-20 12:17:53.199421 -No vulnerabilities found. - - -YUX-IO/flask-python351 -https://github.com/YUX-IO/flask-python351 -Entry file: flask-python351/sample-app/app.py -Scanned: 2016-10-20 12:17:55.117246 -No vulnerabilities found. - - -saga92/flaskr -https://github.com/saga92/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:17:55.631255 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AliceLanniste/Flasky -https://github.com/AliceLanniste/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 12:17:56.132438 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -powerlanguage/flasktaskr -https://github.com/powerlanguage/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:17:56.635120 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bwghughes/flaskdev -https://github.com/bwghughes/flaskdev -Entry file: flaskdev/hello.py -Scanned: 2016-10-20 12:17:57.931729 -Vulnerability 1: -File: flaskdev/tests.py - > User input at line 10, trigger word "get(": - res = client.get(url_for('hello_world')) -File: flaskdev/tests.py - > reaches line 10, trigger word "url_for(": - res = client.get(url_for('hello_world')) - - - -fromzeroedu/flaskbook -https://github.com/fromzeroedu/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:17:58.490173 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -wrzto/flasky -https://github.com/wrzto/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:17:59.036567 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bhsantos11/flaskwebapp -https://github.com/bhsantos11/flaskwebapp -Entry file: flaskwebapp/flaskwebsite/__init__.py -Scanned: 2016-10-20 12:18:00.341516 -No vulnerabilities found. - - -EricGarza/flaskbyexample -https://github.com/EricGarza/flaskbyexample -Entry file: flaskbyexample/app.py -Scanned: 2016-10-20 12:18:09.759868 -No vulnerabilities found. - - -yanni-zh/flaskweb -https://github.com/yanni-zh/flaskweb -Entry file: None -Scanned: 2016-10-20 12:18:10.286803 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nrugas/flasky -https://github.com/nrugas/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:18:10.807097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -William0423/flaskylearn -https://github.com/William0423/flaskylearn -Entry file: flaskylearn/app/__init__.py -Scanned: 2016-10-20 12:18:12.267514 -No vulnerabilities found. - - -anngle/flaskweb -https://github.com/anngle/flaskweb -Entry file: None -Scanned: 2016-10-20 12:18:12.783061 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Aprimus1/flasktaskr -https://github.com/Aprimus1/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:18:19.302735 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -koool71/flaskr -https://github.com/koool71/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:18:22.830493 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mayreeh/Flasky -https://github.com/mayreeh/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 12:18:24.394485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -supor/flaskr -https://github.com/supor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:18:25.902015 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ridnarong/flasky -https://github.com/ridnarong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:18:27.425675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CharlieCheng2014/Flask-micro-flask -https://github.com/CharlieCheng2014/Flask-micro-flask -Entry file: Flask-micro-flask/app/__init__.py -Scanned: 2016-10-20 12:18:29.905933 -No vulnerabilities found. - - -Himenon/FlaskTutorial -https://github.com/Himenon/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 12:18:30.428137 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stitch001/flaskerMysql -https://github.com/stitch001/flaskerMysql -Entry file: flaskerMysql/mysqlFlask/__init__.py -Scanned: 2016-10-20 12:18:37.431108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wxkNeter/FlaskBlog -https://github.com/wxkNeter/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:18:39.062125 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -halilkaya/pymock -https://github.com/halilkaya/pymock -Entry file: pymock/app.py -Scanned: 2016-10-20 12:18:44.510204 -Vulnerability 1: -File: pymock/app.py - > User input at line 165, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: pymock/app.py - > Line 168: data = 'id''username''name''email'user.iduser.usernameuser.nameuser.email -File: pymock/app.py - > reaches line 174, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(data) - -Vulnerability 2: -File: pymock/app.py - > User input at line 183, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: pymock/app.py - > Line 191: user = User(username=username) -File: pymock/app.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: pymock/app.py - > User input at line 183, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: pymock/app.py - > Line 191: user = User(username=username) -File: pymock/app.py - > reaches line 197, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - - - -Jeimmi/HelloFlask -https://github.com/Jeimmi/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-20 12:18:45.031642 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chris-ritsen/flask-site -https://github.com/chris-ritsen/flask-site -Entry file: None -Scanned: 2016-10-20 12:18:45.535047 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mturnshek/flask-demo -https://github.com/mturnshek/flask-demo -Entry file: None -Scanned: 2016-10-20 12:18:46.035913 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mturnshek/flask-demo. - -kevinludwig/flask-template -https://github.com/kevinludwig/flask-template -Entry file: None -Scanned: 2016-10-20 12:18:54.585598 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kevinludwig/flask-template. - -LucasChenZQ/flask_learn -https://github.com/LucasChenZQ/flask_learn -Entry file: flask_learn/hello.py -Scanned: 2016-10-20 12:18:55.094509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -julienchurch/flask_austin -https://github.com/julienchurch/flask_austin -Entry file: None -Scanned: 2016-10-20 12:18:57.519916 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/julienchurch/flask_austin. - -CTiPKA/scikit-flask -https://github.com/CTiPKA/scikit-flask -Entry file: scikit-flask/app.py -Scanned: 2016-10-20 12:18:58.926971 -No vulnerabilities found. - - -Kecksdose/Flask_Tutorial -https://github.com/Kecksdose/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-20 12:18:59.632631 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorial/venv/lib/python2.7/genericpath.py - -kentaro0919/blog_flask -https://github.com/kentaro0919/blog_flask -Entry file: blog_flask/app/app.py -Scanned: 2016-10-20 12:19:00.888133 -No vulnerabilities found. - - -yitingfan/flask-adminlte -https://github.com/yitingfan/flask-adminlte -Entry file: flask-adminlte/app/__init__.py -Scanned: 2016-10-20 12:19:08.905763 -Vulnerability 1: -File: flask-adminlte/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 55: posts = pagination.items - File: flask-adminlte/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask-adminlte/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 45: show_followed = False - File: flask-adminlte/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask-adminlte/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 67: posts = pagination.items -File: flask-adminlte/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask-adminlte/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-adminlte/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 134: comments = pagination.items - File: flask-adminlte/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-adminlte/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask-adminlte/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-adminlte/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-adminlte/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-adminlte/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-adminlte/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask-adminlte/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/main/views.py - > Line 246: comments = pagination.items -File: flask-adminlte/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 20: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 23: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flask-adminlte/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask-adminlte/app/api_1_0/users.py - > Line 42: prev = None - File: flask-adminlte/app/api_1_0/users.py - > Line 45: next = None -File: flask-adminlte/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flask-adminlte/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask-adminlte/app/api_1_0/posts.py - > Line 16: prev = None - File: flask-adminlte/app/api_1_0/posts.py - > Line 19: next = None -File: flask-adminlte/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 15: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 18: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flask-adminlte/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-adminlte/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-adminlte/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask-adminlte/app/api_1_0/comments.py - > Line 43: prev = None - File: flask-adminlte/app/api_1_0/comments.py - > Line 46: next = None -File: flask-adminlte/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -daivq/Flask_Blog -https://github.com/daivq/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 12:19:09.845799 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spjoshi/Flask_ml -https://github.com/spjoshi/Flask_ml -Entry file: Flask_ml/api/__init__.py -Scanned: 2016-10-20 12:19:12.080698 -No vulnerabilities found. - - -SeoDongMyeong/Simple-Flask -https://github.com/SeoDongMyeong/Simple-Flask -Entry file: Simple-Flask/application.py -Scanned: 2016-10-20 12:19:13.443724 -No vulnerabilities found. - - -sebastiken/flask-miot -https://github.com/sebastiken/flask-miot -Entry file: flask-miot/app/__init__.py -Scanned: 2016-10-20 12:19:14.740986 -No vulnerabilities found. - - -Yichuans/flask-project -https://github.com/Yichuans/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 12:19:23.272346 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ugorbolsky/flask-demo -https://github.com/ugorbolsky/flask-demo -Entry file: None -Scanned: 2016-10-20 12:19:23.836766 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ugorbolsky/flask-demo. - -tjcim/flask_skeleton -https://github.com/tjcim/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 12:19:24.344875 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Jeimmi/UserFlask -https://github.com/Jeimmi/UserFlask -Entry file: UserFlask/User.py -Scanned: 2016-10-20 12:19:25.639951 -No vulnerabilities found. - - -chandureddys/Microblog-flask -https://github.com/chandureddys/Microblog-flask -Entry file: Microblog-flask/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 12:19:36.076815 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -daivq/Flask_Basic -https://github.com/daivq/Flask_Basic -Entry file: Flask_Basic/flaskr.py -Scanned: 2016-10-20 12:19:37.508190 -No vulnerabilities found. - - -vikingspy/flask-taskr -https://github.com/vikingspy/flask-taskr -Entry file: flask-taskr/views.py -Scanned: 2016-10-20 12:19:38.326814 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-taskr/env/lib/python2.7/genericpath.py - -lessons-of-k4zzk/lessons-flask -https://github.com/lessons-of-k4zzk/lessons-flask -Entry file: lessons-flask/app.py -Scanned: 2016-10-20 12:19:39.640229 -No vulnerabilities found. - - -smirnov-am/flask-ablog -https://github.com/smirnov-am/flask-ablog -Entry file: flask-ablog/app/__init__.py -Scanned: 2016-10-20 12:19:41.319942 -Vulnerability 1: -File: flask-ablog/app/main/views.py - > User input at line 113, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-ablog/app/main/views.py - > Line 115: offset = page - 1 * per_page - File: flask-ablog/app/main/views.py - > Line 127: pagination = 'has_prev''prev_num''page''has_next''pages'page > 1TrueFalsepage - 1pagepost_count > offset + len(posts)TrueFalse[i for i in range(1, 1 + post_count + per_page - 1 // per_page)] -File: flask-ablog/app/main/views.py - > reaches line 138, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination, tags=tags, tag_cloud=tag_cloud) - -Vulnerability 2: -File: flask-ablog/app/main/views.py - > User input at line 266, trigger word "get(": - slug = request.args.get('post') -Reassigned in: - File: flask-ablog/app/main/views.py - > Line 268: post = Post.objects.get_or_404(slug=slug) -File: flask-ablog/app/main/views.py - > reaches line 277, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',slug=post.slug)) - -Vulnerability 3: -File: flask-ablog/app/main/views.py - > User input at line 266, trigger word "get(": - slug = request.args.get('post') -Reassigned in: - File: flask-ablog/app/main/views.py - > Line 268: post = Post.objects.get_or_404(slug=slug) -File: flask-ablog/app/main/views.py - > reaches line 277, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',slug=post.slug)) - - - -Himenon/SampleFlask -https://github.com/Himenon/SampleFlask -Entry file: SampleFlask/SampleFlask.py -Scanned: 2016-10-20 12:19:42.601510 -No vulnerabilities found. - - -timrichardson/growthpath_flask -https://github.com/timrichardson/growthpath_flask -Entry file: growthpath_flask/app/__init__.py -Scanned: 2016-10-20 12:19:44.579824 -No vulnerabilities found. - - -frombegin/flask-first -https://github.com/frombegin/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-20 12:19:45.105068 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bmw9t/flask_test -https://github.com/bmw9t/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:19:45.707464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vikingspy/flask-blog -https://github.com/vikingspy/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:19:46.328490 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -searene/flask-chat -https://github.com/searene/flask-chat -Entry file: flask-chat/chat.py -Scanned: 2016-10-20 12:19:46.838981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -virtowlee/flask-work -https://github.com/virtowlee/flask-work -Entry file: flask-work/work/env/lib/python2.7/site-packages/Flask-0.10.1-py2.7.egg/flask/sessions.py -Scanned: 2016-10-20 12:19:54.870106 -No vulnerabilities found. - - -DmytroKaminskiy/flask_skeleton -https://github.com/DmytroKaminskiy/flask_skeleton -Entry file: flask_skeleton/flask_skeleton/config.py -Scanned: 2016-10-20 12:19:55.418378 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jwh5566/flask_blog -https://github.com/jwh5566/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:19:55.938956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thanhan312/test_flask -https://github.com/thanhan312/test_flask -Entry file: test_flask/app.py -Scanned: 2016-10-20 12:19:57.368703 -No vulnerabilities found. - - -charup/Python_Flask -https://github.com/charup/Python_Flask -Entry file: Python_Flask/hello_dynamicVar.py -Scanned: 2016-10-20 12:20:02.370134 -Vulnerability 1: -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > User input at line 23, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 30: filename = secure_filename(file.filename) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 34: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > reaches line 32, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > User input at line 23, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 30: filename = secure_filename(file.filename) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 34: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: Python_Flask/uploadFileToFolder_DisplayFile.py - > Line 28: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: Python_Flask/uploadFileToFolder_DisplayFile.py - > reaches line 32, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -vishalggrc/flask-demo -https://github.com/vishalggrc/flask-demo -Entry file: None -Scanned: 2016-10-20 12:20:02.887239 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vishalggrc/flask-demo. - -jiyeonseo/start_flask -https://github.com/jiyeonseo/start_flask -Entry file: start_flask/start_flask.py -Scanned: 2016-10-20 12:20:04.207102 -No vulnerabilities found. - - -emrahayanoglu/Flask-Skeleton -https://github.com/emrahayanoglu/Flask-Skeleton -Entry file: None -Scanned: 2016-10-20 12:20:04.737915 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/emrahayanoglu/Flask-Skeleton. - -vanstinger/Flask-Projects -https://github.com/vanstinger/Flask-Projects -Entry file: Flask-Projects/hello.py -Scanned: 2016-10-20 12:20:06.058743 -No vulnerabilities found. - - -chenminhua/flask-boilerplate -https://github.com/chenminhua/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 12:20:06.612796 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chenminhua/flask-boilerplate. - -easydaniel/flask-base -https://github.com/easydaniel/flask-base -Entry file: None -Scanned: 2016-10-20 12:20:07.139907 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/easydaniel/flask-base. - -piyush121/Python-Flask -https://github.com/piyush121/Python-Flask -Entry file: None -Scanned: 2016-10-20 12:20:09.650721 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/piyush121/Python-Flask. - -tianmaxingkonggrant/tianmaflaskblog -https://github.com/tianmaxingkonggrant/tianmaflaskblog -Entry file: tianmaflaskblog/app/__init__.py -Scanned: 2016-10-20 12:20:13.315969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -DeeeFOX/Flaxample -https://github.com/DeeeFOX/Flaxample -Entry file: Flaxample/gocon_monitor/__init__.py -Scanned: 2016-10-20 12:20:21.133700 -No vulnerabilities found. - - -HenryZivers/flablo -https://github.com/HenryZivers/flablo -Entry file: flablo/flablo/__init__.py -Scanned: 2016-10-20 12:20:24.262515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -devyul/Python-Flask-WeChat-BAE -https://github.com/devyul/Python-Flask-WeChat-BAE -Entry file: Python-Flask-WeChat-BAE/index.py -Scanned: 2016-10-20 12:20:25.582032 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Panguins/FlaskByExample -https://github.com/Panguins/FlaskByExample -Entry file: FlaskByExample/app.py -Scanned: 2016-10-20 12:20:27.022163 -No vulnerabilities found. - - -yongli82/FlaskBookRead -https://github.com/yongli82/FlaskBookRead -Entry file: FlaskBookRead/application/__init__.py -Scanned: 2016-10-20 12:20:34.260323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oxa/flask_celery_redis -https://github.com/oxa/flask_celery_redis -Entry file: flask_celery_redis/redis_demo.py -Scanned: 2016-10-20 12:20:38.257890 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skols/flask-by-example -https://github.com/skols/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:20:39.942531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -slushkovsky/flask_email_auth -https://github.com/slushkovsky/flask_email_auth -Entry file: flask_email_auth/example/simple_app/run.py -Scanned: 2016-10-20 12:20:41.508402 -No vulnerabilities found. - - -xdanielsb/PersonalTrainer-Flask -https://github.com/xdanielsb/PersonalTrainer-Flask -Entry file: None -Scanned: 2016-10-20 12:20:49.423429 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -altipeak/safewalk-flask-integration -https://github.com/altipeak/safewalk-flask-integration -Entry file: safewalk-flask-integration/authentication_gateway.py -Scanned: 2016-10-20 12:20:50.778746 -No vulnerabilities found. - - -felipemfp/flask-by-example -https://github.com/felipemfp/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:20:51.455183 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Blockshare/blockshare-flask-template -https://github.com/Blockshare/blockshare-flask-template -Entry file: blockshare-flask-template/app/__init__.py -Scanned: 2016-10-20 12:20:57.423291 -Vulnerability 1: -File: blockshare-flask-template/app/forms/user.py - > User input at line 25, trigger word ".data": - check = self.model.query.filter(self.field == field.data).first() -File: blockshare-flask-template/app/forms/user.py - > reaches line 25, trigger word "filter(": - check = self.model.query.filter(self.field == field.data).first() - -Vulnerability 2: -File: blockshare-flask-template/app/views/main.py - > User input at line 67, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: blockshare-flask-template/app/views/main.py - > Line 71: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 72, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 3: -File: blockshare-flask-template/app/views/main.py - > User input at line 71, trigger word ".data": - message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 72, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 4: -File: blockshare-flask-template/app/views/main.py - > User input at line 67, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: blockshare-flask-template/app/views/main.py - > Line 71: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 76, trigger word "flash(": - flash(tx['message'], 'negative') - -Vulnerability 5: -File: blockshare-flask-template/app/views/main.py - > User input at line 108, trigger word ".data": - message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: blockshare-flask-template/app/views/main.py - > reaches line 109, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 6: -File: blockshare-flask-template/app/views/main.py - > User input at line 120, trigger word "form(": - points = [(random.uniform(48.84341, 48.86341), random.uniform(2.3388, 2.3588)) for _ in range(random.randint(2, 9))] -File: blockshare-flask-template/app/views/main.py - > reaches line 123, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('points'points) - -Vulnerability 7: -File: blockshare-flask-template/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 41, trigger word "url_for(": - confirmUrl = url_for('userbp.confirm',token=token, _external=True) - -Vulnerability 8: -File: blockshare-flask-template/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 43, trigger word "render_template(": - html = render_template('email/confirm.html',confirm_url=confirmUrl) - -Vulnerability 9: -File: blockshare-flask-template/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 126, trigger word "url_for(": - resetUrl = url_for('userbp.reset',token=token, _external=True) - -Vulnerability 10: -File: blockshare-flask-template/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: blockshare-flask-template/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: blockshare-flask-template/app/views/user.py - > reaches line 128, trigger word "render_template(": - html = render_template('email/reset.html',reset_url=resetUrl) - - - -lpty/a-web-use-flask -https://github.com/lpty/a-web-use-flask -Entry file: a-web-use-flask/app/__init__.py -Scanned: 2016-10-20 12:21:05.661417 -Vulnerability 1: -File: a-web-use-flask/app/main/views.py - > User input at line 18, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: a-web-use-flask/app/main/views.py - > Line 23: pagination = current_user.followed_posts.order_by(Post.timestamp).paginate(page,per_page=10, error_out=False) - File: a-web-use-flask/app/main/views.py - > Line 27: pagination = Post.query.order_by(Post.timestamp).paginate(page,per_page=10, error_out=False) - File: a-web-use-flask/app/main/views.py - > Line 30: posts = pagination.items - File: a-web-use-flask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: a-web-use-flask/app/main/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 2: -File: a-web-use-flask/app/main/views.py - > User input at line 21, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', ' ')) -Reassigned in: - File: a-web-use-flask/app/main/views.py - > Line 19: show_followed = False - File: a-web-use-flask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: a-web-use-flask/app/main/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 3: -File: a-web-use-flask/app/main/views.py - > User input at line 95, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: a-web-use-flask/app/main/views.py - > Line 96: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: a-web-use-flask/app/main/views.py - > Line 98: comments = pagination.items - File: a-web-use-flask/app/main/views.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.post',id=post.id)) -File: a-web-use-flask/app/main/views.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: a-web-use-flask/app/main/views.py - > User input at line 151, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: a-web-use-flask/app/main/views.py - > Line 152: pagination = user.follower.paginate(page,per_page=10, error_out=False) - File: a-web-use-flask/app/main/views.py - > Line 153: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: a-web-use-flask/app/main/views.py - > Line 150: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: a-web-use-flask/app/main/views.py - > reaches line 154, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('follower.html',user=user, title='Followers of', pagination=pagination, follows=follows) - - - -sean-lynch/flask-cli-issue -https://github.com/sean-lynch/flask-cli-issue -Entry file: flask-cli-issue/server/__init__.py -Scanned: 2016-10-20 12:21:07.036796 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cambers/ReallyRealFlask -https://github.com/cambers/ReallyRealFlask -Entry file: ReallyRealFlask/Hello_world/app.py -Scanned: 2016-10-20 12:21:15.414192 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lwalter/flask-react-musicshare -https://github.com/lwalter/flask-react-musicshare -Entry file: flask-react-musicshare/app/factory.py -Scanned: 2016-10-20 12:21:17.023814 -No vulnerabilities found. - - -yoophi/flask-sample-app -https://github.com/yoophi/flask-sample-app -Entry file: None -Scanned: 2016-10-20 12:21:18.991302 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yoophi/flask-sample-app. - -lixutang/Python_Web_Flask -https://github.com/lixutang/Python_Web_Flask -Entry file: Python_Web_Flask/app/__init__.py -Scanned: 2016-10-20 12:21:21.778946 -Vulnerability 1: -File: Python_Web_Flask/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 32: posts = pagination.items - File: Python_Web_Flask/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Python_Web_Flask/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Python_Web_Flask/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 22: show_followed = False - File: Python_Web_Flask/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Python_Web_Flask/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Python_Web_Flask/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 44: posts = pagination.items -File: Python_Web_Flask/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Python_Web_Flask/app/main/views.py - > User input at line 104, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 106: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Python_Web_Flask/app/main/views.py - > Line 108: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 111: comments = pagination.items - File: Python_Web_Flask/app/main/views.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Python_Web_Flask/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Python_Web_Flask/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 172: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Python_Web_Flask/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Python_Web_Flask/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Python_Web_Flask/app/main/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 189: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Python_Web_Flask/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Python_Web_Flask/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Python_Web_Flask/app/main/views.py - > User input at line 219, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Python_Web_Flask/app/main/views.py - > Line 220: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Python_Web_Flask/app/main/views.py - > Line 223: comments = pagination.items -File: Python_Web_Flask/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -paulgoblin/flask -https://github.com/paulgoblin/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:21:24.243042 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tayan-serna/flask -https://github.com/tayan-serna/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:21:24.821358 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -virtue1990/flask -https://github.com/virtue1990/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:21:25.396106 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sushmit86/Flask -https://github.com/sushmit86/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:21:25.916603 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vorkos/flask -https://github.com/vorkos/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:21:26.500475 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -mussaimo/auth-flask -https://github.com/mussaimo/auth-flask -Entry file: auth-flask/app.py -Scanned: 2016-10-20 12:21:31.461172 -No vulnerabilities found. - - -matinde/flasktaskr -https://github.com/matinde/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:21:32.003263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -William0423/flaskybooklearn -https://github.com/William0423/flaskybooklearn -Entry file: flaskybooklearn/app/__init__.py -Scanned: 2016-10-20 12:21:33.999781 -Vulnerability 1: -File: flaskybooklearn/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 32: posts = pagination.items - File: flaskybooklearn/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskybooklearn/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 22: show_followed = False - File: flaskybooklearn/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskybooklearn/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 44: posts = pagination.items -File: flaskybooklearn/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskybooklearn/app/main/views.py - > User input at line 104, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 106: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskybooklearn/app/main/views.py - > Line 108: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 111: comments = pagination.items - File: flaskybooklearn/app/main/views.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskybooklearn/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskybooklearn/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 172: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskybooklearn/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskybooklearn/app/main/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 189: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskybooklearn/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskybooklearn/app/main/views.py - > User input at line 219, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 220: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 223: comments = pagination.items -File: flaskybooklearn/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -powerlanguage/flasktaskr -https://github.com/powerlanguage/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:21:34.507669 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cmacro/flaskblog -https://github.com/cmacro/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:21:35.038686 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -vrofze/flasky -https://github.com/vrofze/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:21:35.544198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tuppa/flaskapp -https://github.com/tuppa/flaskapp -Entry file: None -Scanned: 2016-10-20 12:21:36.047725 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tuppa/flaskapp. - -quyip8818/flaskrestful -https://github.com/quyip8818/flaskrestful -Entry file: flaskrestful/flaskrestful.py -Scanned: 2016-10-20 12:21:36.587826 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gandhk/flasklearn -https://github.com/gandhk/flasklearn -Entry file: flasklearn/main.py -Scanned: 2016-10-20 12:21:37.871383 -No vulnerabilities found. - - -Apophus/flaskdb -https://github.com/Apophus/flaskdb -Entry file: flaskdb/fdb.py -Scanned: 2016-10-20 12:21:39.203906 -No vulnerabilities found. - - -William0423/flaskylearn -https://github.com/William0423/flaskylearn -Entry file: flaskylearn/app/__init__.py -Scanned: 2016-10-20 12:21:41.658935 -No vulnerabilities found. - - -jerodestapa/flasktodo -https://github.com/jerodestapa/flasktodo -Entry file: flasktodo/application.py -Scanned: 2016-10-20 12:21:42.389987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uptownjimmy/flasktaskr -https://github.com/uptownjimmy/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:21:42.896385 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -getser/flaskapiblog -https://github.com/getser/flaskapiblog -Entry file: flaskapiblog/__init__.py -Scanned: 2016-10-20 12:21:51.376913 -Vulnerability 1: -File: flaskapiblog/views.py - > User input at line 112, trigger word "get(": - post = Post.query.get(post_id) -File: flaskapiblog/views.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('post'post._asdict()) - -Vulnerability 2: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - -Vulnerability 3: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - - - -kirazz/flaskywebblog -https://github.com/kirazz/flaskywebblog -Entry file: flaskywebblog/PycharmProjects/webblog/app/__init__.py -Scanned: 2016-10-20 12:21:55.316832 -Vulnerability 1: -File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > User input at line 19, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 20: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=5, error_out=False) - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 22: posts = pagination.items - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > User input at line 91, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 93: page = post.comments.count() - 1 // 5 + 1 - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 95: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=5, error_out=False) - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 97: comments = pagination.items - File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > Line 90: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskywebblog/PycharmProjects/webblog/app/main/views.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - - - -caspii/flaskr -https://github.com/caspii/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:21:55.855365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ejakait/flaskpro -https://github.com/ejakait/flaskpro -Entry file: None -Scanned: 2016-10-20 12:22:07.519709 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tj621/flaskr -https://github.com/tj621/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:22:08.060394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LinMingjie/flaskr -https://github.com/LinMingjie/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:22:08.575388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -supor/flaskr -https://github.com/supor/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:22:16.125351 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ridnarong/flasky -https://github.com/ridnarong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:22:17.643507 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seangilleran/flasko -https://github.com/seangilleran/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-20 12:22:20.288071 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -weisongchen/flaskexercise -https://github.com/weisongchen/flaskexercise -Entry file: flaskexercise/hello.py -Scanned: 2016-10-20 12:22:28.187102 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskexercise/venv/lib/python2.7/genericpath.py - -weisongchen/flaskapp -https://github.com/weisongchen/flaskapp -Entry file: None -Scanned: 2016-10-20 12:22:28.771169 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/weisongchen/flaskapp. - -vmotto/FlaskBlog -https://github.com/vmotto/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:22:29.395432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiangzhuyuan/flaskdemo1 -https://github.com/xiangzhuyuan/flaskdemo1 -Entry file: flaskdemo1/flaskdemo1/flaskr.py -Scanned: 2016-10-20 12:22:31.166830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -whimian/flaskyKrig -https://github.com/whimian/flaskyKrig -Entry file: flaskyKrig/test.py -Scanned: 2016-10-20 12:22:36.878617 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keer2345/flaskMega -https://github.com/keer2345/flaskMega -Entry file: flaskMega/app/__init__.py -Scanned: 2016-10-20 12:22:38.196758 -No vulnerabilities found. - - -josh14668/flaskApp -https://github.com/josh14668/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-20 12:22:38.742734 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -er3456qi/FlaskBlog -https://github.com/er3456qi/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:22:39.357466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vishwanath79/FlaskURLAPI -https://github.com/vishwanath79/FlaskURLAPI -Entry file: FlaskURLAPI/app.py -Scanned: 2016-10-20 12:22:46.806831 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskURLAPI/hadoopify/lib/python2.7/genericpath.py - -krizo/flaskTutorial -https://github.com/krizo/flaskTutorial -Entry file: flaskTutorial/flaskr.py -Scanned: 2016-10-20 12:22:47.418409 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskTutorial/venv/lib/python2.7/genericpath.py - -vishalggrc/flask-blog -https://github.com/vishalggrc/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:22:47.952566 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nmartinez23/CRUD_flask -https://github.com/nmartinez23/CRUD_flask -Entry file: CRUD_flask/app.py -Scanned: 2016-10-20 12:22:49.297974 -No vulnerabilities found. - - -spot-test/flask_app -https://github.com/spot-test/flask_app -Entry file: None -Scanned: 2016-10-20 12:22:49.806465 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/spot-test/flask_app. - -brokenhd/flask-blog -https://github.com/brokenhd/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:22:50.839920 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -qingchn/flask-copy -https://github.com/qingchn/flask-copy -Entry file: flask-copy/app/__init__.py -Scanned: 2016-10-20 12:22:52.280511 -No vulnerabilities found. - - -pbabik/flask-lipsum -https://github.com/pbabik/flask-lipsum -Entry file: flask-lipsum/app.py -Scanned: 2016-10-20 12:22:53.594506 -Vulnerability 1: -File: flask-lipsum/app.py - > User input at line 51, trigger word "get(": - n_paragraphs = int(request.args.get('paragraphs', 5)) -Reassigned in: - File: flask-lipsum/app.py - > Line 52: content = get_paragraphs(n_paragraphs) -File: flask-lipsum/app.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'content) - - - -daivq/Flask_Blog -https://github.com/daivq/Flask_Blog -Entry file: Flask_Blog/Blog/blog.py -Scanned: 2016-10-20 12:22:54.443084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jnarayanam/flask-demo -https://github.com/jnarayanam/flask-demo -Entry file: None -Scanned: 2016-10-20 12:22:54.945946 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jnarayanam/flask-demo. - -kaymation/flask_plural -https://github.com/kaymation/flask_plural -Entry file: None -Scanned: 2016-10-20 12:23:02.311969 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -encima/flask-task -https://github.com/encima/flask-task -Entry file: flask-task/app/__init__.py -Scanned: 2016-10-20 12:23:04.951027 -Vulnerability 1: -File: flask-task/app/views.py - > User input at line 87, trigger word "form[": - task = twl.w.get_task(id=request.form['id']) -Reassigned in: - File: flask-task/app/views.py - > Line 90: project = task[1]['project'] - File: flask-task/app/views.py - > Line 84: project = 'unassigned' -File: flask-task/app/views.py - > reaches line 95, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('error''table''project'Falsemsgproject) - - - -nitin42/Flask-App -https://github.com/nitin42/Flask-App -Entry file: Flask-App/Flask-SQLAlchemy/app.py -Scanned: 2016-10-20 12:23:06.237821 -No vulnerabilities found. - - -DivisionMax/mover-flask -https://github.com/DivisionMax/mover-flask -Entry file: mover-flask/index.py -Scanned: 2016-10-20 12:23:07.777314 -Vulnerability 1: -File: mover-flask/index.py - > User input at line 41, trigger word "form[": - _email = request.form['email'] -File: mover-flask/index.py - > reaches line 48, trigger word "execute(": - cursor.execute('SELECT * FROM mobile_app_users WHERE emailAddress = %s', (_email)) - -Vulnerability 2: -File: mover-flask/index.py - > User input at line 90, trigger word "form[": - _email = request.form['email'] -File: mover-flask/index.py - > reaches line 96, trigger word "execute(": - cursor.execute('SELECT * FROM mobile_app_users WHERE emailAddress = %s', (_email)) - -Vulnerability 3: -File: mover-flask/index.py - > User input at line 90, trigger word "form[": - _email = request.form['email'] -File: mover-flask/index.py - > reaches line 104, trigger word "execute(": - cursor.execute('INSERT INTO mobile_app_users (emailAddress,password,username) values (%s,%s,%s)', (_email, password_hash, username)) - -Vulnerability 4: -File: mover-flask/index.py - > User input at line 92, trigger word "form[": - _password = request.form['password'] -Reassigned in: - File: mover-flask/index.py - > Line 103: password_hash = hash_password(_password) -File: mover-flask/index.py - > reaches line 104, trigger word "execute(": - cursor.execute('INSERT INTO mobile_app_users (emailAddress,password,username) values (%s,%s,%s)', (_email, password_hash, username)) - -Vulnerability 5: -File: mover-flask/index.py - > User input at line 129, trigger word "get(": - _userId = request.args.get('userId') -File: mover-flask/index.py - > reaches line 138, trigger word "execute(": - cursor.execute('SELECT accidentId as id, accidentTime as time,X(location) as x, Y(location) as y FROM simplerunningaccidents WHERE mobileAppUserId = %s', (_userId)) - -Vulnerability 6: -File: mover-flask/index.py - > User input at line 191, trigger word "form[": - _longitude = request.form['longitude'] -File: mover-flask/index.py - > reaches line 205, trigger word "execute(": - cursor.execute('INSERT INTO simpleRunningAccidents (accidentTime,location,mobileAppUserId) values (from_unixtime(%s),point(%s,%s),%s)', (_timeOfAccidentTimestamp, _longitude, _latitude, _userId)) - -Vulnerability 7: -File: mover-flask/index.py - > User input at line 192, trigger word "form[": - _latitude = request.form['latitude'] -File: mover-flask/index.py - > reaches line 205, trigger word "execute(": - cursor.execute('INSERT INTO simpleRunningAccidents (accidentTime,location,mobileAppUserId) values (from_unixtime(%s),point(%s,%s),%s)', (_timeOfAccidentTimestamp, _longitude, _latitude, _userId)) - -Vulnerability 8: -File: mover-flask/index.py - > User input at line 193, trigger word "form[": - _timeOfAccidentTimestamp = request.form['time-of-accident'] -File: mover-flask/index.py - > reaches line 205, trigger word "execute(": - cursor.execute('INSERT INTO simpleRunningAccidents (accidentTime,location,mobileAppUserId) values (from_unixtime(%s),point(%s,%s),%s)', (_timeOfAccidentTimestamp, _longitude, _latitude, _userId)) - -Vulnerability 9: -File: mover-flask/index.py - > User input at line 194, trigger word "form[": - _userId = request.form['userId'] -File: mover-flask/index.py - > reaches line 205, trigger word "execute(": - cursor.execute('INSERT INTO simpleRunningAccidents (accidentTime,location,mobileAppUserId) values (from_unixtime(%s),point(%s,%s),%s)', (_timeOfAccidentTimestamp, _longitude, _latitude, _userId)) - -Vulnerability 10: -File: mover-flask/index.py - > User input at line 191, trigger word "form[": - _longitude = request.form['longitude'] -File: mover-flask/index.py - > reaches line 217, trigger word "execute(": - cursor.execute('INSERT INTO car_accidents (accidentTime,latitude, longitude, acceleration,mobile_app_users_userId) values (from_unixtime(%s),%s,%s,%s,%s)', (_timeOfAccidentTimestamp, _latitude, _longitude, _acceleration, _userId)) - -Vulnerability 11: -File: mover-flask/index.py - > User input at line 192, trigger word "form[": - _latitude = request.form['latitude'] -File: mover-flask/index.py - > reaches line 217, trigger word "execute(": - cursor.execute('INSERT INTO car_accidents (accidentTime,latitude, longitude, acceleration,mobile_app_users_userId) values (from_unixtime(%s),%s,%s,%s,%s)', (_timeOfAccidentTimestamp, _latitude, _longitude, _acceleration, _userId)) - -Vulnerability 12: -File: mover-flask/index.py - > User input at line 193, trigger word "form[": - _timeOfAccidentTimestamp = request.form['time-of-accident'] -File: mover-flask/index.py - > reaches line 217, trigger word "execute(": - cursor.execute('INSERT INTO car_accidents (accidentTime,latitude, longitude, acceleration,mobile_app_users_userId) values (from_unixtime(%s),%s,%s,%s,%s)', (_timeOfAccidentTimestamp, _latitude, _longitude, _acceleration, _userId)) - -Vulnerability 13: -File: mover-flask/index.py - > User input at line 194, trigger word "form[": - _userId = request.form['userId'] -File: mover-flask/index.py - > reaches line 217, trigger word "execute(": - cursor.execute('INSERT INTO car_accidents (accidentTime,latitude, longitude, acceleration,mobile_app_users_userId) values (from_unixtime(%s),%s,%s,%s,%s)', (_timeOfAccidentTimestamp, _latitude, _longitude, _acceleration, _userId)) - -Vulnerability 14: -File: mover-flask/index.py - > User input at line 212, trigger word "form[": - _acceleration = request.form['acceleration'] -File: mover-flask/index.py - > reaches line 217, trigger word "execute(": - cursor.execute('INSERT INTO car_accidents (accidentTime,latitude, longitude, acceleration,mobile_app_users_userId) values (from_unixtime(%s),%s,%s,%s,%s)', (_timeOfAccidentTimestamp, _latitude, _longitude, _acceleration, _userId)) - - - -wyattkroemer/yFlask -https://github.com/wyattkroemer/yFlask -Entry file: yFlask/app/__init__.py -Scanned: 2016-10-20 12:23:09.061390 -No vulnerabilities found. - - -BethMwangi/Flask-social -https://github.com/BethMwangi/Flask-social -Entry file: None -Scanned: 2016-10-20 12:23:18.047864 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mistermocha/flask-lesson -https://github.com/mistermocha/flask-lesson -Entry file: flask-lesson/webapp.py -Scanned: 2016-10-20 12:23:18.594097 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Sustainabilist/Flask-tutorial -https://github.com/Sustainabilist/Flask-tutorial -Entry file: Flask-tutorial/flask_app.py -Scanned: 2016-10-20 12:23:19.102950 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sanchitgupta001/Basic_Flask -https://github.com/sanchitgupta001/Basic_Flask -Entry file: None -Scanned: 2016-10-20 12:23:26.189066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanchitgupta001/Basic_Flask. - -teeracy/Flask-Workshop -https://github.com/teeracy/Flask-Workshop -Entry file: Flask-Workshop/step3.py -Scanned: 2016-10-20 12:23:28.058413 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Stuj79/flask-test -https://github.com/Stuj79/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:23:28.585394 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -AdamWawrow/flask-blog -https://github.com/AdamWawrow/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:23:29.146157 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -xlliu/flask_celery -https://github.com/xlliu/flask_celery -Entry file: flask_celery/mongo2mysql.py -Scanned: 2016-10-20 12:23:31.165396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vero4karu/flask-examples -https://github.com/vero4karu/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 12:23:32.203362 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marikgoran/hello-flask -https://github.com/marikgoran/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:23:37.807607 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -JetPac33/simple_flask -https://github.com/JetPac33/simple_flask -Entry file: simple_flask/hello.py -Scanned: 2016-10-20 12:23:46.808856 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iamliamc/court_flask -https://github.com/iamliamc/court_flask -Entry file: court_flask/app/__init__.py -Scanned: 2016-10-20 12:23:56.047403 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -mikolajtr/flask_sample -https://github.com/mikolajtr/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-20 12:23:56.568716 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spotts-moz/flask_app -https://github.com/spotts-moz/flask_app -Entry file: None -Scanned: 2016-10-20 12:23:57.066173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/spotts-moz/flask_app. - -gmtprime/flask-microservices -https://github.com/gmtprime/flask-microservices -Entry file: flask-microservices/app.py -Scanned: 2016-10-20 12:23:58.394473 -No vulnerabilities found. - - -devops-life/flask-todo -https://github.com/devops-life/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-20 12:23:58.933164 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chedom/restaurants-flask -https://github.com/chedom/restaurants-flask -Entry file: restaurants-flask/app.py -Scanned: 2016-10-20 12:24:02.343601 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -newivan/flask_select -https://github.com/newivan/flask_select -Entry file: flask_select/app.py -Scanned: 2016-10-20 12:24:03.669332 -No vulnerabilities found. - - -vtrubets/flask-tutorial -https://github.com/vtrubets/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:24:04.182857 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nikolzp/Flask_mongo -https://github.com/nikolzp/Flask_mongo -Entry file: None -Scanned: 2016-10-20 12:24:11.018378 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kyokley/flask-scratch -https://github.com/kyokley/flask-scratch -Entry file: flask-scratch/app/__init__.py -Scanned: 2016-10-20 12:24:12.939428 -No vulnerabilities found. - - -wing3s/flask-chatterbot -https://github.com/wing3s/flask-chatterbot -Entry file: flask-chatterbot/flaskchatterbot/flaskchatterbot.py -Scanned: 2016-10-20 12:24:14.321918 -No vulnerabilities found. - - -stryjko/CV_Flask -https://github.com/stryjko/CV_Flask -Entry file: CV_Flask/app.py -Scanned: 2016-10-20 12:24:23.333135 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: CV_Flask/CV_Flask_Virtual/lib/python2.7/genericpath.py - -samuelcg/flask_stormpath -https://github.com/samuelcg/flask_stormpath -Entry file: flask_stormpath/flaskr.py -Scanned: 2016-10-20 12:24:24.713718 -No vulnerabilities found. - - -krishnaxv/flask-battlefield -https://github.com/krishnaxv/flask-battlefield -Entry file: None -Scanned: 2016-10-20 12:24:26.000474 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/krishnaxv/flask-battlefield. - -thechutrain/flask-microblog -https://github.com/thechutrain/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:24:26.537251 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sunyton/flask_ecard -https://github.com/sunyton/flask_ecard -Entry file: flask_ecard/app2.py -Scanned: 2016-10-20 12:24:27.831494 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ccsexyz/blog -https://github.com/ccsexyz/blog -Entry file: blog/flaskr.py -Scanned: 2016-10-20 12:24:28.362002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HenryZivers/flablo -https://github.com/HenryZivers/flablo -Entry file: flablo/flablo/__init__.py -Scanned: 2016-10-20 12:24:28.867727 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alannguyen90/FlaskCamServer -https://github.com/alannguyen90/FlaskCamServer -Entry file: FlaskCamServer/angular_flask/__init__.py -Scanned: 2016-10-20 12:24:32.221843 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shivam-maharshi/FlaskPythonTutorial -https://github.com/shivam-maharshi/FlaskPythonTutorial -Entry file: FlaskPythonTutorial/src/__init__.py -Scanned: 2016-10-20 12:24:33.674605 -No vulnerabilities found. - - -chengruilin/FlaskMobileApi -https://github.com/chengruilin/FlaskMobileApi -Entry file: FlaskMobileApi/main.py -Scanned: 2016-10-20 12:24:35.025122 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -deathanchor/flask_mongoengine_tutorial -https://github.com/deathanchor/flask_mongoengine_tutorial -Entry file: flask_mongoengine_tutorial/src/app/__init__.py -Scanned: 2016-10-20 12:24:36.339996 -No vulnerabilities found. - - -dzakok/Pemrograman-Web-Python-Flask -https://github.com/dzakok/Pemrograman-Web-Python-Flask -Entry file: Pemrograman-Web-Python-Flask/app.py -Scanned: 2016-10-20 12:24:44.538523 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RichardJTorres/flask-angular-wordcount -https://github.com/RichardJTorres/flask-angular-wordcount -Entry file: flask-angular-wordcount/app.py -Scanned: 2016-10-20 12:24:47.754522 -No vulnerabilities found. - - -MikeHannon/flask_quick_start -https://github.com/MikeHannon/flask_quick_start -Entry file: flask_quick_start/server.py -Scanned: 2016-10-20 12:24:49.563205 -No vulnerabilities found. - - -davidjb90/Introduction-to-Flask -https://github.com/davidjb90/Introduction-to-Flask -Entry file: Introduction-to-Flask/hello_world.py -Scanned: 2016-10-20 12:24:50.859557 -No vulnerabilities found. - - -g4b1s/RestfulAPI-with-flask -https://github.com/g4b1s/RestfulAPI-with-flask -Entry file: RestfulAPI-with-flask/app.py -Scanned: 2016-10-20 12:24:52.157684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xdanielsb/PersonalTrainer-Flask -https://github.com/xdanielsb/PersonalTrainer-Flask -Entry file: None -Scanned: 2016-10-20 12:24:52.671813 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TunedMystic/docker-flask-base -https://github.com/TunedMystic/docker-flask-base -Entry file: docker-flask-base/app/app.py -Scanned: 2016-10-20 12:24:54.052523 -Vulnerability 1: -File: docker-flask-base/app/app.py - > User input at line 54, trigger word "get(": - search_text = request.args.get('q', '').strip() -File: docker-flask-base/app/app.py - > reaches line 55, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = make_response(jsonify(message=search_text), 200, headers) - - - -cambers/ReallyRealFlask -https://github.com/cambers/ReallyRealFlask -Entry file: ReallyRealFlask/Hello_world/app.py -Scanned: 2016-10-20 12:24:56.698086 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Paopand1/flask-hello-world -https://github.com/Paopand1/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:24:57.252187 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -spot-test/flask_test_app -https://github.com/spot-test/flask_test_app -Entry file: flask_test_app/app.py -Scanned: 2016-10-20 12:24:58.576619 -No vulnerabilities found. - - -ghyoun/dojo_survey_flask -https://github.com/ghyoun/dojo_survey_flask -Entry file: dojo_survey_flask/survey.py -Scanned: 2016-10-20 12:25:06.358433 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marvinmarnold/flask-meet-instructors -https://github.com/marvinmarnold/flask-meet-instructors -Entry file: flask-meet-instructors/hello.py -Scanned: 2016-10-20 12:25:07.766340 -No vulnerabilities found. - - -meloalright/flask -https://github.com/meloalright/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:25:09.731229 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -paulgoblin/flask -https://github.com/paulgoblin/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:25:10.311030 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tayan-serna/flask -https://github.com/tayan-serna/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:25:11.897393 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gisumwa/Flask -https://github.com/gisumwa/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:25:12.421528 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhouleian/flask -https://github.com/zhouleian/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:25:14.020038 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -timmyreilly/intro-to-flask -https://github.com/timmyreilly/intro-to-flask -Entry file: intro-to-flask/hello.py -Scanned: 2016-10-20 12:25:18.796882 -No vulnerabilities found. - - -Revolution1/Flask-WhooshAlchemyPlus -https://github.com/Revolution1/Flask-WhooshAlchemyPlus -Entry file: Flask-WhooshAlchemyPlus/test/test_all.py -Scanned: 2016-10-20 12:25:25.840491 -No vulnerabilities found. - - -vrofze/flasky -https://github.com/vrofze/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:25:28.797669 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ccsaber/flasker -https://github.com/ccsaber/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 12:25:29.320967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Gre4tWhite/Flasknightmare -https://github.com/Gre4tWhite/Flasknightmare -Entry file: Flasknightmare/app/__init__.py -Scanned: 2016-10-20 12:25:35.899304 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gzeinieh/flaskr -https://github.com/gzeinieh/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:25:36.428242 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rhildreth/flaskbook -https://github.com/rhildreth/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:25:36.978412 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -TacticalGoat/flasktest -https://github.com/TacticalGoat/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:25:37.494323 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -getser/flaskapiblog -https://github.com/getser/flaskapiblog -Entry file: flaskapiblog/__init__.py -Scanned: 2016-10-20 12:25:46.338706 -Vulnerability 1: -File: flaskapiblog/views.py - > User input at line 112, trigger word "get(": - post = Post.query.get(post_id) -File: flaskapiblog/views.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('post'post._asdict()) - -Vulnerability 2: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - -Vulnerability 3: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - - - -Paopand1/flasktaskr -https://github.com/Paopand1/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:25:48.853210 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vnxichow/flaskapp -https://github.com/vnxichow/flaskapp -Entry file: None -Scanned: 2016-10-20 12:25:49.405359 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vnxichow/flaskapp. - -gabrielssilva/flasktasks -https://github.com/gabrielssilva/flasktasks -Entry file: flasktasks/flasktasks/__init__.py -Scanned: 2016-10-20 12:25:53.461541 -Vulnerability 1: -File: flasktasks/flasktasks/views.py - > User input at line 35, trigger word "get(": - mission = Mission.query.get_or_404(request.args.get('mission_id')) -Reassigned in: - File: flasktasks/flasktasks/views.py - > Line 33: mission = None -File: flasktasks/flasktasks/views.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('task/index.html',tasks=tasks_by_status, mission=mission) - -Vulnerability 2: -File: flasktasks/flasktasks/views.py - > User input at line 96, trigger word "get(": - color = Color(int(request.form.get('color_id'))) -Reassigned in: - File: flasktasks/flasktasks/views.py - > Line 99: tag = Tag(request.form.get('name'), color) - File: flasktasks/flasktasks/views.py - > Line 104: colors = {color.name : color.value for color in Color} - File: flasktasks/flasktasks/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('missions')) -File: flasktasks/flasktasks/views.py - > reaches line 105, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/new.html',colors=colors) - - - -cjfoster10/flasktaskr -https://github.com/cjfoster10/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:25:53.985796 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -weisongchen/flaskexercise -https://github.com/weisongchen/flaskexercise -Entry file: flaskexercise/hello.py -Scanned: 2016-10-20 12:25:54.590459 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskexercise/venv/lib/python2.7/genericpath.py - -weisongchen/flaskapp -https://github.com/weisongchen/flaskapp -Entry file: None -Scanned: 2016-10-20 12:25:55.118173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/weisongchen/flaskapp. - -Apophus/flaskR -https://github.com/Apophus/flaskR -Entry file: flaskR/flaskr/flaskr.py -Scanned: 2016-10-20 12:25:57.433707 -No vulnerabilities found. - - -mplessard/FlaskBoilerplate -https://github.com/mplessard/FlaskBoilerplate -Entry file: None -Scanned: 2016-10-20 12:25:57.987250 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mplessard/FlaskBoilerplate. - -microxuzh/FlaskTutorial -https://github.com/microxuzh/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 12:25:58.494809 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gitskim/FlaskAPI -https://github.com/gitskim/FlaskAPI -Entry file: None -Scanned: 2016-10-20 12:26:00.007375 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gitskim/FlaskAPI. - -er3456qi/FlaskBlog -https://github.com/er3456qi/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:26:07.609396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ivorivetta/FlaskTest -https://github.com/ivorivetta/FlaskTest -Entry file: None -Scanned: 2016-10-20 12:26:09.117380 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ivorivetta/FlaskTest. - -pkml/flaskHello -https://github.com/pkml/flaskHello -Entry file: flaskHello/app.py -Scanned: 2016-10-20 12:26:18.540592 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskHello/myEnv/lib/python2.7/genericpath.py - -xiechengsheng/FlaskApp -https://github.com/xiechengsheng/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:26:19.163760 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulhendricks/flasky2 -https://github.com/paulhendricks/flasky2 -Entry file: flasky2/app/__init__.py -Scanned: 2016-10-20 12:26:20.651738 -No vulnerabilities found. - - -nitin42/Flask-App -https://github.com/nitin42/Flask-App -Entry file: Flask-App/Flask-SQLAlchemy/app.py -Scanned: 2016-10-20 12:26:22.060817 -No vulnerabilities found. - - -milanoid/flask-playground -https://github.com/milanoid/flask-playground -Entry file: flask-playground/app/__init__.py -Scanned: 2016-10-20 12:26:22.563764 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kossman/flask_project -https://github.com/kossman/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 12:26:23.353973 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -woosungchu/flask-mongo -https://github.com/woosungchu/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-20 12:26:24.934234 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -holynova/flask_book -https://github.com/holynova/flask_book -Entry file: None -Scanned: 2016-10-20 12:26:33.613381 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -debuggermalhotra/Flask-projects -https://github.com/debuggermalhotra/Flask-projects -Entry file: Flask-projects/mr-echobot/mr-echobot.py -Scanned: 2016-10-20 12:26:34.903382 -No vulnerabilities found. - - -andrefaranha/flask-blog -https://github.com/andrefaranha/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:26:35.456709 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -CurataEng/flask-api -https://github.com/CurataEng/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 12:26:35.977148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ankurdh/Hello-Flask -https://github.com/ankurdh/Hello-Flask -Entry file: Hello-Flask/wamt/wamt.py -Scanned: 2016-10-20 12:26:37.305113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Isor/flask-view -https://github.com/Isor/flask-view -Entry file: flask-view/view.py -Scanned: 2016-10-20 12:26:38.654181 -No vulnerabilities found. - - -250lth/myFlask -https://github.com/250lth/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 12:26:39.212412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bernardoVale/flask-cloneme -https://github.com/bernardoVale/flask-cloneme -Entry file: flask-cloneme/app/__init__.py -Scanned: 2016-10-20 12:26:40.518903 -No vulnerabilities found. - - -yxzoro/Flask-SQLAlchemy -https://github.com/yxzoro/Flask-SQLAlchemy -Entry file: Flask-SQLAlchemy/app.py -Scanned: 2016-10-20 12:26:41.041647 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kamillacrozara/flask-base -https://github.com/kamillacrozara/flask-base -Entry file: None -Scanned: 2016-10-20 12:26:45.562754 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kamillacrozara/flask-base. - -songxiaowei112/flask-demo -https://github.com/songxiaowei112/flask-demo -Entry file: None -Scanned: 2016-10-20 12:26:49.117090 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/songxiaowei112/flask-demo. - -HyperJ/Flask-Demo -https://github.com/HyperJ/Flask-Demo -Entry file: None -Scanned: 2016-10-20 12:26:49.639484 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HyperJ/Flask-Demo. - -Sustainabilist/Flask-tutorial -https://github.com/Sustainabilist/Flask-tutorial -Entry file: Flask-tutorial/flask_app.py -Scanned: 2016-10-20 12:26:51.145295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joshphiggins/flask-blog -https://github.com/joshphiggins/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:26:54.687107 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -lnanhkhoa/WebFlask -https://github.com/lnanhkhoa/WebFlask -Entry file: WebFlask/server.py -Scanned: 2016-10-20 12:26:56.130771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sun3shines/ufs_flask -https://github.com/sun3shines/ufs_flask -Entry file: ufs_flask/flask_sqlalchemy.py -Scanned: 2016-10-20 12:26:59.940135 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ItEngine/flask-boilerplate -https://github.com/ItEngine/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 12:27:00.448104 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ItEngine/flask-boilerplate. - -kennly/flask-backend -https://github.com/kennly/flask-backend -Entry file: flask-backend/blog.py -Scanned: 2016-10-20 12:27:01.859043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cebartling/flask-spikes -https://github.com/cebartling/flask-spikes -Entry file: flask-spikes/hello-world/app.py -Scanned: 2016-10-20 12:27:03.155771 -No vulnerabilities found. - - -igneel64/flask-web -https://github.com/igneel64/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:27:03.729045 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lecamerone/flask_app -https://github.com/lecamerone/flask_app -Entry file: None -Scanned: 2016-10-20 12:27:08.245687 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lecamerone/flask_app. - -caelia/flask-gallery -https://github.com/caelia/flask-gallery -Entry file: flask-gallery/flask_gallery/gallery.py -Scanned: 2016-10-20 12:27:10.562736 -No vulnerabilities found. - - -dodoru/flask_bbs -https://github.com/dodoru/flask_bbs -Entry file: flask_bbs/src/app.py -Scanned: 2016-10-20 12:27:12.459300 -Vulnerability 1: -File: flask_bbs/src/views/channel.py - > User input at line 28, trigger word "get(": - channel = Channel.query.get(channel_id) -File: flask_bbs/src/views/channel.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('channel.html',channel=channel, topics=topics) - -Vulnerability 2: -File: flask_bbs/src/views/channel.py - > User input at line 41, trigger word "get(": - topic = Topic.query.get(topic_id) -File: flask_bbs/src/views/channel.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('topic.html',topic=topic, replies=replies) - -Vulnerability 3: -File: flask_bbs/src/views/channel.py - > User input at line 50, trigger word "get(": - channel_id = topic_dict.get('channel_id') -File: flask_bbs/src/views/channel.py - > reaches line 52, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.channel',channel_id=channel_id)) - -Vulnerability 4: -File: flask_bbs/src/views/channel.py - > User input at line 50, trigger word "get(": - channel_id = topic_dict.get('channel_id') -File: flask_bbs/src/views/channel.py - > reaches line 52, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.channel',channel_id=channel_id)) - -Vulnerability 5: -File: flask_bbs/src/views/channel.py - > User input at line 58, trigger word "get(": - topic_id = reply_dict.get('topic_id') -File: flask_bbs/src/views/channel.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.topic',topic_id=topic_id)) - -Vulnerability 6: -File: flask_bbs/src/views/channel.py - > User input at line 58, trigger word "get(": - topic_id = reply_dict.get('topic_id') -File: flask_bbs/src/views/channel.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.topic',topic_id=topic_id)) - - - -Omega0/dnd-flask -https://github.com/Omega0/dnd-flask -Entry file: dnd-flask/run.py -Scanned: 2016-10-20 12:27:28.333126 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Thorntan/flask_study -https://github.com/Thorntan/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-20 12:27:28.858428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -baor/flask_test -https://github.com/baor/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:27:29.447448 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BethMwangi/flask-app -https://github.com/BethMwangi/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:27:29.976839 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vero4karu/flask-examples -https://github.com/vero4karu/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 12:27:30.529179 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -marikgoran/hello-flask -https://github.com/marikgoran/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:27:31.133322 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -mkulinski/flask-blog -https://github.com/mkulinski/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:27:31.680539 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -shubhalasingh/flask-uploader -https://github.com/shubhalasingh/flask-uploader -Entry file: flask-uploader/flaskr.py -Scanned: 2016-10-20 12:27:32.967272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ohadcn/learnFlask -https://github.com/ohadcn/learnFlask -Entry file: None -Scanned: 2016-10-20 12:27:35.964239 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ohadcn/learnFlask. - -laozhizi/flask-test -https://github.com/laozhizi/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:27:36.494894 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -dogezhou/my_flask -https://github.com/dogezhou/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 12:27:37.147375 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -thechutrain/flask-microblog -https://github.com/thechutrain/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:27:38.649896 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sunyton/flask_ecard -https://github.com/sunyton/flask_ecard -Entry file: flask_ecard/app2.py -Scanned: 2016-10-20 12:27:40.149696 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mohapsat/flask-microblog -https://github.com/mohapsat/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:27:40.676838 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BethMwangi/flask-blog -https://github.com/BethMwangi/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:27:41.241042 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -RachelQ1103/flask-pattern -https://github.com/RachelQ1103/flask-pattern -Entry file: flask-pattern/problem.py -Scanned: 2016-10-20 12:27:46.679808 -No vulnerabilities found. - - -pkml/flask-blog -https://github.com/pkml/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:27:49.254433 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -polomlin/flask_demo -https://github.com/polomlin/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:27:49.811761 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LennyLeng/flask-base -https://github.com/LennyLeng/flask-base -Entry file: None -Scanned: 2016-10-20 12:27:51.330316 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/LennyLeng/flask-base. - -Junctionzc/flask-blog -https://github.com/Junctionzc/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:27:54.875522 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -RachelQ1103/flask-problem -https://github.com/RachelQ1103/flask-problem -Entry file: flask-problem/problem.py -Scanned: 2016-10-20 12:27:56.207891 -No vulnerabilities found. - - -bryancalupitan/flask_social -https://github.com/bryancalupitan/flask_social -Entry file: flask_social/app.py -Scanned: 2016-10-20 12:27:56.736732 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Han-Jiang/learn-flask -https://github.com/Han-Jiang/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 12:28:01.426588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iam24/flask-blog -https://github.com/iam24/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:28:01.977037 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -zhupr/myFlask -https://github.com/zhupr/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 12:28:02.481324 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hanmaslah/flask-tuts -https://github.com/hanmaslah/flask-tuts -Entry file: flask-tuts/creating-first-flask-app/flasktest/blog.py -Scanned: 2016-10-20 12:28:11.839571 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -nodroglegin/flask_udemy -https://github.com/nodroglegin/flask_udemy -Entry file: flask_udemy/hello.py -Scanned: 2016-10-20 12:28:13.138787 -No vulnerabilities found. - - -nicolaigj/flask-site -https://github.com/nicolaigj/flask-site -Entry file: None -Scanned: 2016-10-20 12:28:13.639464 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -loongfeng/firstapp -https://github.com/loongfeng/firstapp -Entry file: None -Scanned: 2016-10-20 12:28:14.909384 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/loongfeng/firstapp. - -silvia2013/firstapp -https://github.com/silvia2013/firstapp -Entry file: None -Scanned: 2016-10-20 12:28:20.445905 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/silvia2013/firstapp. - -lbatalha/imagething -https://github.com/lbatalha/imagething -Entry file: imagething/main.py -Scanned: 2016-10-20 12:28:35.051679 -Vulnerability 1: -File: imagething/main.py - > User input at line 28, trigger word "files[": - file = request.files['fileupload'] -Reassigned in: - File: imagething/main.py - > Line 29: file = request.files['fileupload'] - File: imagething/main.py - > Line 34: filename = secure_filename(file.filename) - File: imagething/main.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('newfile.html') - File: imagething/main.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'invalid method' - File: imagething/main.py - > Line 26: ret_MAYBE_FUNCTION_NAME = 'ya goofed -' - File: imagething/main.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: imagething/main.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: imagething/main.py - > User input at line 29, trigger word "files[": - file = request.files['fileupload'] -Reassigned in: - File: imagething/main.py - > Line 28: file = request.files['fileupload'] - File: imagething/main.py - > Line 34: filename = secure_filename(file.filename) - File: imagething/main.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('newfile.html') - File: imagething/main.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'invalid method' - File: imagething/main.py - > Line 26: ret_MAYBE_FUNCTION_NAME = 'ya goofed -' - File: imagething/main.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: imagething/main.py - > reaches line 36, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 3: -File: imagething/main.py - > User input at line 28, trigger word "files[": - file = request.files['fileupload'] -Reassigned in: - File: imagething/main.py - > Line 29: file = request.files['fileupload'] - File: imagething/main.py - > Line 34: filename = secure_filename(file.filename) - File: imagething/main.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('newfile.html') - File: imagething/main.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'invalid method' - File: imagething/main.py - > Line 26: ret_MAYBE_FUNCTION_NAME = 'ya goofed -' - File: imagething/main.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: imagething/main.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 4: -File: imagething/main.py - > User input at line 29, trigger word "files[": - file = request.files['fileupload'] -Reassigned in: - File: imagething/main.py - > Line 28: file = request.files['fileupload'] - File: imagething/main.py - > Line 34: filename = secure_filename(file.filename) - File: imagething/main.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('newfile.html') - File: imagething/main.py - > Line 41: ret_MAYBE_FUNCTION_NAME = 'invalid method' - File: imagething/main.py - > Line 26: ret_MAYBE_FUNCTION_NAME = 'ya goofed -' - File: imagething/main.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: imagething/main.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -n0x5/shitty_flask_website -https://github.com/n0x5/shitty_flask_website -Entry file: shitty_flask_website/app.py -Scanned: 2016-10-20 12:28:36.510345 -No vulnerabilities found. - - -kimjonathan1123/friendsgroup -https://github.com/kimjonathan1123/friendsgroup -Entry file: friendsgroup/server.py -Scanned: 2016-10-20 12:28:37.952594 -No vulnerabilities found. - - -joshphiggins/FlaskTaskr_py3 -https://github.com/joshphiggins/FlaskTaskr_py3 -Entry file: FlaskTaskr_py3/views.py -Scanned: 2016-10-20 12:28:39.401133 -No vulnerabilities found. - - -claudemuller/firstapp -https://github.com/claudemuller/firstapp -Entry file: None -Scanned: 2016-10-20 12:28:39.927236 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/claudemuller/firstapp. - -ArtemKran/site_on_flask -https://github.com/ArtemKran/site_on_flask -Entry file: site_on_flask/app/__init__.py -Scanned: 2016-10-20 12:28:41.663628 -Vulnerability 1: -File: site_on_flask/app/main/views.py - > User input at line 51, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 67: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: site_on_flask/app/main/views.py - > Line 70: posts = pagination.items - File: site_on_flask/app/main/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: site_on_flask/app/main/views.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: site_on_flask/app/main/views.py - > User input at line 59, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 57: show_followed = False - File: site_on_flask/app/main/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: site_on_flask/app/main/views.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: site_on_flask/app/main/views.py - > User input at line 79, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 83: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: site_on_flask/app/main/views.py - > Line 86: posts = pagination.items -File: site_on_flask/app/main/views.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: site_on_flask/app/main/views.py - > User input at line 151, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 155: page = post.comments.count() - 1 // 21 - File: site_on_flask/app/main/views.py - > Line 159: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=20, error_out=False) - File: site_on_flask/app/main/views.py - > Line 162: comments = pagination.items - File: site_on_flask/app/main/views.py - > Line 150: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: site_on_flask/app/main/views.py - > reaches line 163, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: site_on_flask/app/main/views.py - > User input at line 232, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 236: pagination = user.followers.paginate(page,per_page=20, error_out=False) - File: site_on_flask/app/main/views.py - > Line 239: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: site_on_flask/app/main/views.py - > Line 231: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: site_on_flask/app/main/views.py - > reaches line 242, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: site_on_flask/app/main/views.py - > User input at line 258, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 262: pagination = user.followed.paginate(page,per_page=20, error_out=False) - File: site_on_flask/app/main/views.py - > Line 265: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: site_on_flask/app/main/views.py - > Line 257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: site_on_flask/app/main/views.py - > reaches line 268, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: site_on_flask/app/main/views.py - > User input at line 297, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/main/views.py - > Line 298: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/main/views.py - > Line 301: comments = pagination.items -File: site_on_flask/app/main/views.py - > reaches line 302, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: site_on_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 20: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 23: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: site_on_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 20: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 23: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: site_on_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 20: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 23: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: site_on_flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 42: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 45: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: site_on_flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 42: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 45: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: site_on_flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: site_on_flask/app/api_1_0/users.py - > Line 42: prev = None - File: site_on_flask/app/api_1_0/users.py - > Line 45: next = None -File: site_on_flask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: site_on_flask/app/api_1_0/posts.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/posts.py - > Line 18: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/posts.py - > Line 21: posts = pagination.items - File: site_on_flask/app/api_1_0/posts.py - > Line 22: prev = None - File: site_on_flask/app/api_1_0/posts.py - > Line 25: next = None -File: site_on_flask/app/api_1_0/posts.py - > reaches line 24, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: site_on_flask/app/api_1_0/posts.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/posts.py - > Line 18: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/posts.py - > Line 21: posts = pagination.items - File: site_on_flask/app/api_1_0/posts.py - > Line 22: prev = None - File: site_on_flask/app/api_1_0/posts.py - > Line 25: next = None -File: site_on_flask/app/api_1_0/posts.py - > reaches line 27, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: site_on_flask/app/api_1_0/posts.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/posts.py - > Line 18: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/posts.py - > Line 21: posts = pagination.items - File: site_on_flask/app/api_1_0/posts.py - > Line 22: prev = None - File: site_on_flask/app/api_1_0/posts.py - > Line 25: next = None -File: site_on_flask/app/api_1_0/posts.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 15: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 18: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 15: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 18: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 15: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 18: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 43: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 46: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 43: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 46: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: site_on_flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: site_on_flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: site_on_flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: site_on_flask/app/api_1_0/comments.py - > Line 43: prev = None - File: site_on_flask/app/api_1_0/comments.py - > Line 46: next = None -File: site_on_flask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -passhole/flask-hello-world -https://github.com/passhole/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:28:42.228284 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -gabeibarra/docker-flask-bigger -https://github.com/gabeibarra/docker-flask-bigger -Entry file: docker-flask-bigger/app/__init__.py -Scanned: 2016-10-20 12:28:43.655933 -No vulnerabilities found. - - -dmitry-moroz/flask -https://github.com/dmitry-moroz/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:28:45.676860 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Aslkayn/flask -https://github.com/Aslkayn/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:28:46.248145 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -gisumwa/Flask -https://github.com/gisumwa/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:28:46.749838 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -timmyreilly/intro-to-flask -https://github.com/timmyreilly/intro-to-flask -Entry file: intro-to-flask/hello.py -Scanned: 2016-10-20 12:28:50.534679 -No vulnerabilities found. - - -postrational/rest_api_demo -https://github.com/postrational/rest_api_demo -Entry file: rest_api_demo/rest_api_demo/app.py -Scanned: 2016-10-20 12:28:51.991700 -Vulnerability 1: -File: rest_api_demo/rest_api_demo/api/blog/business.py - > User input at line 8, trigger word "get(": - category_id = data.get('category_id') -File: rest_api_demo/rest_api_demo/api/blog/business.py - > reaches line 9, trigger word "filter(": - category = Category.query.filter(Category.id == category_id).one() - -Vulnerability 2: -File: rest_api_demo/rest_api_demo/api/blog/business.py - > User input at line 19, trigger word "get(": - category_id = data.get('category_id') -File: rest_api_demo/rest_api_demo/api/blog/business.py - > reaches line 20, trigger word "filter(": - post.category = Category.query.filter(Category.id == category_id).one() - - - -DanceCats/DanceCat -https://github.com/DanceCats/DanceCat -Entry file: DanceCat/DanceCat/__init__.py -Scanned: 2016-10-20 12:28:59.901838 -Vulnerability 1: -File: DanceCat/DanceCat/Socket.py - > User input at line 45, trigger word "get(": - connection_id = received_data.get('connectionId', 0) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 55: running_connection = Connection.query.get(connection_id) - File: DanceCat/DanceCat/Socket.py - > Line 58: connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 2: -File: DanceCat/DanceCat/Socket.py - > User input at line 46, trigger word "get(": - query = received_data.get('query', '') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 3: -File: DanceCat/DanceCat/Socket.py - > User input at line 55, trigger word "get(": - running_connection = Connection.query.get(connection_id) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 58: connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 4: -File: DanceCat/DanceCat/Socket.py - > User input at line 58, trigger word "get(": - connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 5: -File: DanceCat/DanceCat/JobWorker.py - > User input at line 91, trigger word "get(": - job = QueryDataJob.query.get(job_id) -Reassigned in: - File: DanceCat/DanceCat/JobWorker.py - > Line 99: db_connector = DatabaseConnector(job.Connection.type, job.Connection.db_config_generator(),sql_data_style=False, dict_format=False, timeout=Constants.JOB_FEATURE_QUERY_TIME_OUT in jobjob[Constants.JOB_FEATURE_QUERY_TIME_OUT]config.get('DB_TIMEOUT', 0)) - File: DanceCat/DanceCat/JobWorker.py - > Line 111: results = 'header''rows'db_connector.columns_namedb_connector.fetch_all() - File: DanceCat/DanceCat/JobWorker.py - > Line 135: ret_MAYBE_FUNCTION_NAME = results - File: DanceCat/DanceCat/JobWorker.py - > Line 153: ret_MAYBE_FUNCTION_NAME = None -File: DanceCat/DanceCat/JobWorker.py - > reaches line 110, trigger word "execute(": - db_connector.execute(job.query_string) - -Vulnerability 6: -File: DanceCat/DanceCat/JobWorker.py - > User input at line 99, trigger word "get(": - db_connector = DatabaseConnector(job.Connection.type, job.Connection.db_config_generator(),sql_data_style=False, dict_format=False, timeout=Constants.JOB_FEATURE_QUERY_TIME_OUT in jobjob[Constants.JOB_FEATURE_QUERY_TIME_OUT]config.get('DB_TIMEOUT', 0)) -Reassigned in: - File: DanceCat/DanceCat/JobWorker.py - > Line 111: results = 'header''rows'db_connector.columns_namedb_connector.fetch_all() - File: DanceCat/DanceCat/JobWorker.py - > Line 135: ret_MAYBE_FUNCTION_NAME = results - File: DanceCat/DanceCat/JobWorker.py - > Line 153: ret_MAYBE_FUNCTION_NAME = None -File: DanceCat/DanceCat/JobWorker.py - > reaches line 110, trigger word "execute(": - db_connector.execute(job.query_string) - -Vulnerability 7: -File: DanceCat/DanceCat/Views.py - > User input at line 252, trigger word "form[": - triggered_job = QueryDataJob.query.get_or_404(request.form['id']) -Reassigned in: - File: DanceCat/DanceCat/Views.py - > Line 256: tracker = TrackJobRun(triggered_job.job_id) -File: DanceCat/DanceCat/Views.py - > reaches line 269, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('ack''tracker_id'Truetracker.track_job_run_id) - - - -menghao2015/flask_blog -https://github.com/menghao2015/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:29:00.402311 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AmarKalabic/Football-Stream-Finder--Flask- -https://github.com/AmarKalabic/Football-Stream-Finder--Flask- -Entry file: Football-Stream-Finder--Flask-/main.py -Scanned: 2016-10-20 12:29:01.837762 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -terryllowery/flasktaskr -https://github.com/terryllowery/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:29:02.357362 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -moerekh/flaskyflaskssy -https://github.com/moerekh/flaskyflaskssy -Entry file: flaskyflaskssy/flasky.py -Scanned: 2016-10-20 12:29:08.865864 -No vulnerabilities found. - - -vinay13/Flaskngular -https://github.com/vinay13/Flaskngular -Entry file: Flaskngular/flask_app.py -Scanned: 2016-10-20 12:29:10.314597 -No vulnerabilities found. - - -dribnet/flaskapp -https://github.com/dribnet/flaskapp -Entry file: None -Scanned: 2016-10-20 12:29:10.833180 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dribnet/flaskapp. - -rhildreth/flaskbook -https://github.com/rhildreth/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 12:29:11.382484 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -TacticalGoat/flasktest -https://github.com/TacticalGoat/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:29:11.900677 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -enricobacis/flaskey -https://github.com/enricobacis/flaskey -Entry file: flaskey/app/__init__.py -Scanned: 2016-10-20 12:29:12.406279 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nehamarne/flaskdemo -https://github.com/nehamarne/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 12:29:12.913375 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -playgrdstar/flaskapp -https://github.com/playgrdstar/flaskapp -Entry file: None -Scanned: 2016-10-20 12:29:14.435978 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playgrdstar/flaskapp. - -pkml/flasktaskr -https://github.com/pkml/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:29:14.963994 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -davidwangv5/flasky -https://github.com/davidwangv5/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:29:20.490596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QMickael/flaskBlog -https://github.com/QMickael/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 12:29:29.161763 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -CircaVictor/flaskTemplate -https://github.com/CircaVictor/flaskTemplate -Entry file: flaskTemplate/flask-app/app/__init__.py -Scanned: 2016-10-20 12:29:36.624792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jutreras/flaskTest -https://github.com/jutreras/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-20 12:29:37.187396 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minwoo-jewon/FlaskStudy -https://github.com/minwoo-jewon/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-20 12:29:40.197627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TheCulliganMan/reforestation-flask -https://github.com/TheCulliganMan/reforestation-flask -Entry file: reforestation-flask/lib/flask/sessions.py -Scanned: 2016-10-20 12:29:45.875747 -No vulnerabilities found. - - -vish-s/flask-sampleapp -https://github.com/vish-s/flask-sampleapp -Entry file: flask-sampleapp/main.py -Scanned: 2016-10-20 12:29:48.459612 -No vulnerabilities found. - - -opsolutely/flask-starter -https://github.com/opsolutely/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 12:29:49.467524 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mschenk42/flask-resteasy -https://github.com/mschenk42/flask-resteasy -Entry file: flask-resteasy/flask_resteasy.py -Scanned: 2016-10-20 12:29:50.029707 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -frederickOtus/copypaste_flask -https://github.com/frederickOtus/copypaste_flask -Entry file: copypaste_flask/server.py -Scanned: 2016-10-20 12:29:52.061668 -No vulnerabilities found. - - -ankurdh/Hello-Flask -https://github.com/ankurdh/Hello-Flask -Entry file: Hello-Flask/wamt/wamt.py -Scanned: 2016-10-20 12:29:52.564274 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amitkumarj441/Todo-Flask -https://github.com/amitkumarj441/Todo-Flask -Entry file: None -Scanned: 2016-10-20 12:29:57.916396 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amitkumarj441/Todo-Flask. - -juanferreira/social-flask -https://github.com/juanferreira/social-flask -Entry file: social-flask/app.py -Scanned: 2016-10-20 12:29:59.365686 -Vulnerability 1: -File: social-flask/app.py - > User input at line 113, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: social-flask/app.py - > Line 120: user = current_user -File: social-flask/app.py - > reaches line 125, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: social-flask/app.py - > User input at line 142, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 154, trigger word "flash(": - flash('You're now following {}!'.format(to_user.username), 'success') - -Vulnerability 3: -File: social-flask/app.py - > User input at line 142, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 156, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: social-flask/app.py - > User input at line 142, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 156, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: social-flask/app.py - > User input at line 163, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 175, trigger word "flash(": - flash('You've unfollowed {}!'.format(to_user.username), 'success') - -Vulnerability 6: -File: social-flask/app.py - > User input at line 163, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 177, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: social-flask/app.py - > User input at line 163, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-flask/app.py - > reaches line 177, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -kallolymess/discoverFlask -https://github.com/kallolymess/discoverFlask -Entry file: discoverFlask/project/__init__.py -Scanned: 2016-10-20 12:30:00.981942 -No vulnerabilities found. - - -yoophi/flask-dummyimage -https://github.com/yoophi/flask-dummyimage -Entry file: flask-dummyimage/flask_dummyimage/__init__.py -Scanned: 2016-10-20 12:30:02.957763 -No vulnerabilities found. - - -cebartling/flask-spikes -https://github.com/cebartling/flask-spikes -Entry file: flask-spikes/hello-world/app.py -Scanned: 2016-10-20 12:30:04.272785 -No vulnerabilities found. - - -JamesSkane/flask_ml -https://github.com/JamesSkane/flask_ml -Entry file: flask_ml/api/__init__.py -Scanned: 2016-10-20 12:30:07.122098 -No vulnerabilities found. - - -krpeacock/flask_intro -https://github.com/krpeacock/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-20 12:30:07.659378 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -sergiolucero/flask_psumplot -https://github.com/sergiolucero/flask_psumplot -Entry file: flask_psumplot/flask_app.py -Scanned: 2016-10-20 12:30:10.963125 -No vulnerabilities found. - - -rasmi/flask-toasty -https://github.com/rasmi/flask-toasty -Entry file: flask-toasty/app.py -Scanned: 2016-10-20 12:30:12.264575 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leonlcw92/flask_test -https://github.com/leonlcw92/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:30:12.847003 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dodoru/flask_bbs -https://github.com/dodoru/flask_bbs -Entry file: flask_bbs/src/app.py -Scanned: 2016-10-20 12:30:14.734240 -Vulnerability 1: -File: flask_bbs/src/views/channel.py - > User input at line 28, trigger word "get(": - channel = Channel.query.get(channel_id) -File: flask_bbs/src/views/channel.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('channel.html',channel=channel, topics=topics) - -Vulnerability 2: -File: flask_bbs/src/views/channel.py - > User input at line 41, trigger word "get(": - topic = Topic.query.get(topic_id) -File: flask_bbs/src/views/channel.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('topic.html',topic=topic, replies=replies) - -Vulnerability 3: -File: flask_bbs/src/views/channel.py - > User input at line 50, trigger word "get(": - channel_id = topic_dict.get('channel_id') -File: flask_bbs/src/views/channel.py - > reaches line 52, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.channel',channel_id=channel_id)) - -Vulnerability 4: -File: flask_bbs/src/views/channel.py - > User input at line 50, trigger word "get(": - channel_id = topic_dict.get('channel_id') -File: flask_bbs/src/views/channel.py - > reaches line 52, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.channel',channel_id=channel_id)) - -Vulnerability 5: -File: flask_bbs/src/views/channel.py - > User input at line 58, trigger word "get(": - topic_id = reply_dict.get('topic_id') -File: flask_bbs/src/views/channel.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.topic',topic_id=topic_id)) - -Vulnerability 6: -File: flask_bbs/src/views/channel.py - > User input at line 58, trigger word "get(": - topic_id = reply_dict.get('topic_id') -File: flask_bbs/src/views/channel.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.topic',topic_id=topic_id)) - - - -ibrahimGhailani/TodoFlask -https://github.com/ibrahimGhailani/TodoFlask -Entry file: TodoFlask/app/__init__.py -Scanned: 2016-10-20 12:30:16.013206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fanne/flask_ansible -https://github.com/fanne/flask_ansible -Entry file: flask_ansible/flask_ansible.py -Scanned: 2016-10-20 12:30:17.294616 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SohyunKate/Flask-Practice -https://github.com/SohyunKate/Flask-Practice -Entry file: Flask-Practice/hello.py -Scanned: 2016-10-20 12:30:18.598531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bruno78/flask-microblog -https://github.com/bruno78/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:30:19.109169 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pliyosenpai/flask-api -https://github.com/pliyosenpai/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 12:30:20.623654 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BethMwangi/flask-app -https://github.com/BethMwangi/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:30:29.174815 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MalhotraVijay/flask-boilerplate -https://github.com/MalhotraVijay/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 12:30:35.686988 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MalhotraVijay/flask-boilerplate. - -Mehdi-SIO/new_flask -https://github.com/Mehdi-SIO/new_flask -Entry file: new_flask/hello.py -Scanned: 2016-10-20 12:30:38.041693 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -SIJP-ORG/flask-demo -https://github.com/SIJP-ORG/flask-demo -Entry file: None -Scanned: 2016-10-20 12:30:39.567960 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SIJP-ORG/flask-demo. - -danchay/flask-blog -https://github.com/danchay/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:30:41.127290 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -wiki-ai/flask-wikimediaui -https://github.com/wiki-ai/flask-wikimediaui -Entry file: flask-wikimediaui/wsgi.py -Scanned: 2016-10-20 12:30:42.472038 -No vulnerabilities found. - - -luotigerlsx/flask_example -https://github.com/luotigerlsx/flask_example -Entry file: None -Scanned: 2016-10-20 12:30:47.054561 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -luqee/flask-demo -https://github.com/luqee/flask-demo -Entry file: None -Scanned: 2016-10-20 12:30:47.563108 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/luqee/flask-demo. - -PumOzenix/flask-sample -https://github.com/PumOzenix/flask-sample -Entry file: flask-sample/guild/app.py -Scanned: 2016-10-20 12:30:49.074412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AnandVetcha/Flask_App -https://github.com/AnandVetcha/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-20 12:30:49.592268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fulfilio/flask-fulfil -https://github.com/fulfilio/flask-fulfil -Entry file: flask-fulfil/flask_fulfil.py -Scanned: 2016-10-20 12:30:51.021328 -No vulnerabilities found. - - -zhupr/myFlask -https://github.com/zhupr/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 12:30:51.570212 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dsk0506/flask_demo -https://github.com/dsk0506/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:30:52.085688 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -curtis99877/flask-app -https://github.com/curtis99877/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 12:30:52.592137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bradkarels/restful-flask -https://github.com/bradkarels/restful-flask -Entry file: restful-flask/hello.py -Scanned: 2016-10-20 12:30:53.893777 -No vulnerabilities found. - - -silvia2013/firstapp -https://github.com/silvia2013/firstapp -Entry file: None -Scanned: 2016-10-20 12:30:59.409144 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/silvia2013/firstapp. - -n0x5/shitty_flask_website -https://github.com/n0x5/shitty_flask_website -Entry file: shitty_flask_website/app.py -Scanned: 2016-10-20 12:31:00.791968 -No vulnerabilities found. - - -decentfox/relask -https://github.com/decentfox/relask -Entry file: relask/example/sqlalchemy/relasksa/__init__.py -Scanned: 2016-10-20 12:31:04.836203 -Vulnerability 1: -File: relask/example/sqlalchemy/relasksa/schema.py - > User input at line 64, trigger word "get(": - user = models.db.session.query(models.User).filter(models.User.login == args.get('login')).first() -File: relask/example/sqlalchemy/relasksa/schema.py - > reaches line 64, trigger word "filter(": - user = models.db.session.query(models.User).filter(models.User.login == args.get('login')).first() - - - -rmed/akamatsu -https://github.com/rmed/akamatsu -Entry file: None -Scanned: 2016-10-20 12:31:11.781963 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rmed/akamatsu. - -herrjemand/flask-fido-u2f -https://github.com/herrjemand/flask-fido-u2f -Entry file: flask-fido-u2f/examples/server.py -Scanned: 2016-10-20 12:31:13.535039 -No vulnerabilities found. - - -janhak/flask-flasky-learning -https://github.com/janhak/flask-flasky-learning -Entry file: flask-flasky-learning/app/__init__.py -Scanned: 2016-10-20 12:31:15.621778 -No vulnerabilities found. - - -mr1holmes/planup-backend -https://github.com/mr1holmes/planup-backend -Entry file: planup-backend/flaskapp/__init__.py -Scanned: 2016-10-20 12:31:16.151598 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BoeingX/flask-restful-api -https://github.com/BoeingX/flask-restful-api -Entry file: flask-restful-api/restful/api.py -Scanned: 2016-10-20 12:31:16.658712 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -spenserhale/social-network-flask -https://github.com/spenserhale/social-network-flask -Entry file: social-network-flask/app.py -Scanned: 2016-10-20 12:31:18.203416 -Vulnerability 1: -File: social-network-flask/app.py - > User input at line 109, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: social-network-flask/app.py - > Line 117: user = current_user -File: social-network-flask/app.py - > reaches line 120, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: social-network-flask/app.py - > User input at line 135, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 147, trigger word "flash(": - flash('You're now following {}!'.format(to_user.username), 'success') - -Vulnerability 3: -File: social-network-flask/app.py - > User input at line 135, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 148, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: social-network-flask/app.py - > User input at line 135, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 148, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: social-network-flask/app.py - > User input at line 155, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 167, trigger word "flash(": - flash('You've unfollowed {}!'.format(to_user.username), 'success') - -Vulnerability 6: -File: social-network-flask/app.py - > User input at line 155, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 168, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: social-network-flask/app.py - > User input at line 155, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: social-network-flask/app.py - > reaches line 168, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -timlichen/pyFlaskLoginRegistration -https://github.com/timlichen/pyFlaskLoginRegistration -Entry file: pyFlaskLoginRegistration/server.py -Scanned: 2016-10-20 12:31:19.994747 -No vulnerabilities found. - - -linzhaolover/myFlaskWeb -https://github.com/linzhaolover/myFlaskWeb -Entry file: myFlaskWeb/myflask.py -Scanned: 2016-10-20 12:31:21.424933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prakharchoudhary/First_App_in_Flask -https://github.com/prakharchoudhary/First_App_in_Flask -Entry file: First_App_in_Flask/flask_project.py -Scanned: 2016-10-20 12:31:22.779246 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vmuguerzac/flask_by_example -https://github.com/vmuguerzac/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-20 12:31:29.502824 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_by_example/venv/lib/python3.5/struct.py - -solcis/flask-weather-app -https://github.com/solcis/flask-weather-app -Entry file: flask-weather-app/flask_weather_app.py -Scanned: 2016-10-20 12:31:42.740830 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arajago6/flask-json-api -https://github.com/arajago6/flask-json-api -Entry file: flask-json-api/app.py -Scanned: 2016-10-20 12:31:44.072076 -Vulnerability 1: -File: flask-json-api/app.py - > User input at line 36, trigger word "get(": - entity = 'id''title''description''installed'entities[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-json-api/app.py - > reaches line 43, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('entity'entity), 201) - - - -Edubya77/hellow_world_flask -https://github.com/Edubya77/hellow_world_flask -Entry file: hellow_world_flask/hello_world.py -Scanned: 2016-10-20 12:31:45.339922 -No vulnerabilities found. - - -kmalfatti/library-flask-app -https://github.com/kmalfatti/library-flask-app -Entry file: library-flask-app/app.py -Scanned: 2016-10-20 12:31:46.774757 -Vulnerability 1: -File: library-flask-app/app.py - > User input at line 63, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/index.html',author=found_author) - -Vulnerability 2: -File: library-flask-app/app.py - > User input at line 68, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/new.html',author=found_author) - - - -luhuisicnu/Flask_codeRepository -https://github.com/luhuisicnu/Flask_codeRepository -Entry file: Flask_codeRepository/code_repository/__init__.py -Scanned: 2016-10-20 12:31:48.323817 -No vulnerabilities found. - - -Myshj/SimpleBlogWithFlask -https://github.com/Myshj/SimpleBlogWithFlask -Entry file: SimpleBlogWithFlask/app/__init__.py -Scanned: 2016-10-20 12:31:49.773266 -No vulnerabilities found. - - -jcue/flask-hello-world -https://github.com/jcue/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:31:50.332855 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -spenserhale/treebook-python-flask -https://github.com/spenserhale/treebook-python-flask -Entry file: treebook-python-flask/Flask.py -Scanned: 2016-10-20 12:31:51.601826 -No vulnerabilities found. - - -Sachinmurari/python_flask_proj -https://github.com/Sachinmurari/python_flask_proj -Entry file: python_flask_proj/app.py -Scanned: 2016-10-20 12:31:52.921478 -No vulnerabilities found. - - -ophidianwang/flask_mongokat_exp -https://github.com/ophidianwang/flask_mongokat_exp -Entry file: flask_mongokat_exp/simple_run.py -Scanned: 2016-10-20 12:31:54.309576 -No vulnerabilities found. - - -rajdeepd/heroku-force-oauth-flask -https://github.com/rajdeepd/heroku-force-oauth-flask -Entry file: heroku-force-oauth-flask/app.py -Scanned: 2016-10-20 12:31:55.551349 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VikramDesai/Rest-Server-Flask -https://github.com/VikramDesai/Rest-Server-Flask -Entry file: None -Scanned: 2016-10-20 12:31:56.920370 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/VikramDesai/Rest-Server-Flask. - -roybayot/my-learning-flask -https://github.com/roybayot/my-learning-flask -Entry file: my-learning-flask/routes.py -Scanned: 2016-10-20 12:32:04.717844 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my-learning-flask/venv/lib/python2.7/genericpath.py - -joselevelsup/FastInventoryFlask -https://github.com/joselevelsup/FastInventoryFlask -Entry file: FastInventoryFlask/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-20 12:32:14.692411 -No vulnerabilities found. - - -ezirmusitua/my-blog-with-flask -https://github.com/ezirmusitua/my-blog-with-flask -Entry file: my-blog-with-flask/my_blog/__init__.py -Scanned: 2016-10-20 12:32:17.834621 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -Millyn/flask_py3_hr -https://github.com/Millyn/flask_py3_hr -Entry file: flask_py3_hr/app/__init__.py -Scanned: 2016-10-20 12:32:19.841177 -Vulnerability 1: -File: flask_py3_hr/app/user/views.py - > User input at line 47, trigger word ".data": - info = Info(realname=form.realname.data, id_care=form.id_care.data, birth=form.birth.data, tel=form.tel.data, work_status=1, group_id=str(form.group.data.id)) -File: flask_py3_hr/app/user/views.py - > reaches line 52, trigger word "filter(": - db.session.query(User).filter(User.id == current_user.id).update(User.info_idinfo.id) - - - -afurth89/python_flask_crudapp_booklist -https://github.com/afurth89/python_flask_crudapp_booklist -Entry file: python_flask_crudapp_booklist/app.py -Scanned: 2016-10-20 12:32:21.233369 -No vulnerabilities found. - - -Riffstation/flaskutilsexample -https://github.com/Riffstation/flaskutilsexample -Entry file: flaskutilsexample/src/app/__init__.py -Scanned: 2016-10-20 12:32:24.105995 -No vulnerabilities found. - - -dolv/Flask -https://github.com/dolv/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:32:25.124429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mamun-dueee/flask -https://github.com/Mamun-dueee/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:32:25.705955 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -nppat/Flask -https://github.com/nppat/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:32:26.292969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KyleSeem/Flask -https://github.com/KyleSeem/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:32:26.852349 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:32:27.364770 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cloverstd/flask-wechatpy -https://github.com/cloverstd/flask-wechatpy -Entry file: flask-wechatpy/demo.py -Scanned: 2016-10-20 12:32:28.803918 -No vulnerabilities found. - - -QuentinMoss/reimagined-computing-machine -https://github.com/QuentinMoss/reimagined-computing-machine -Entry file: reimagined-computing-machine/app/__init__.py -Scanned: 2016-10-20 12:32:31.059426 -No vulnerabilities found. - - -13923858795/Tutorial -https://github.com/13923858795/Tutorial -Entry file: Tutorial/my/app/__init__.py -Scanned: 2016-10-20 12:32:37.967455 -Vulnerability 1: -File: Tutorial/my/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 33: posts = pagination.items - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Tutorial/my/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 23: show_followed = False - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Tutorial/my/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 44: posts = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Tutorial/my/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 111: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Tutorial/my/app/main/views.py - > Line 113: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 116: comments = pagination.items - File: Tutorial/my/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Tutorial/my/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Tutorial/my/app/main/views.py - > User input at line 176, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 177: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 180: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 175: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Tutorial/my/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 194: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 197: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 192: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 199, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Tutorial/my/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 235: comments = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -szparag3/flask-hello-world -https://github.com/szparag3/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:32:38.523052 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: None -Scanned: 2016-10-20 12:32:44.042917 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:32:45.554220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -WayneChen1987/flasky -https://github.com/WayneChen1987/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:32:46.051208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -IronFist16/flasky -https://github.com/IronFist16/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:32:47.556969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bsdtux/flaskblog -https://github.com/bsdtux/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:32:49.070153 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -terryllowery/flasktaskr -https://github.com/terryllowery/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:32:50.597287 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:32:51.128576 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playgrdstar/flaskapp -https://github.com/playgrdstar/flaskapp -Entry file: None -Scanned: 2016-10-20 12:32:52.657227 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playgrdstar/flaskapp. - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 12:32:54.172647 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulmkumar/flaskapp -https://github.com/rahulmkumar/flaskapp -Entry file: None -Scanned: 2016-10-20 12:32:55.687833 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rahulmkumar/flaskapp. - -chenglinguang/flaskky -https://github.com/chenglinguang/flaskky -Entry file: flaskky/hello1.py -Scanned: 2016-10-20 12:32:57.309981 -No vulnerabilities found. - - -feocco/flaskLab -https://github.com/feocco/flaskLab -Entry file: flaskLab/app.py -Scanned: 2016-10-20 12:33:06.265305 -Vulnerability 1: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flaskLab/auth.py - > User input at line 26, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flaskLab/auth.py - > Line 32: user = User(username=username) -File: flaskLab/auth.py - > reaches line 36, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flaskLab/auth.py - > User input at line 42, trigger word "get(": - user = session.query(User).get(id) -File: flaskLab/auth.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - - - -sarahbees/FlaskHeroku -https://github.com/sarahbees/FlaskHeroku -Entry file: FlaskHeroku/hello.py -Scanned: 2016-10-20 12:33:07.547754 -No vulnerabilities found. - - -jutreras/flaskTest -https://github.com/jutreras/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-20 12:33:16.112232 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -954324919/FlaskDemo -https://github.com/954324919/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 12:33:18.659353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdagli/flask-restful-example -https://github.com/cdagli/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-20 12:33:21.158580 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pavelzamyatin/flask-mega-tutorial -https://github.com/pavelzamyatin/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-20 12:33:22.697942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alexeib2014/Flask-Android -https://github.com/alexeib2014/Flask-Android -Entry file: Flask-Android/flask_sqlalchemy.py -Scanned: 2016-10-20 12:33:23.337689 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jamesward/hello-flask -https://github.com/jamesward/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:33:24.903841 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -skinnyal/flask_tutorial -https://github.com/skinnyal/flask_tutorial -Entry file: None -Scanned: 2016-10-20 12:33:25.415139 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Steve-Duncan/Learning-Flask -https://github.com/Steve-Duncan/Learning-Flask -Entry file: Learning-Flask/friends/server.py -Scanned: 2016-10-20 12:33:28.931613 -No vulnerabilities found. - - -damyanbogoev/flask-cooking -https://github.com/damyanbogoev/flask-cooking -Entry file: flask-cooking/check.py -Scanned: 2016-10-20 12:33:30.889404 -No vulnerabilities found. - - -ylto/learningFlask -https://github.com/ylto/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-20 12:33:31.556580 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/genericpath.py - -yyoowwllgit/flask_pro -https://github.com/yyoowwllgit/flask_pro -Entry file: flask_pro/he.py -Scanned: 2016-10-20 12:33:32.108137 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egusahiroaki/flask_template -https://github.com/egusahiroaki/flask_template -Entry file: None -Scanned: 2016-10-20 12:33:32.621959 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/egusahiroaki/flask_template. - -frederickOtus/copypaste_flask -https://github.com/frederickOtus/copypaste_flask -Entry file: copypaste_flask/server.py -Scanned: 2016-10-20 12:33:34.158960 -No vulnerabilities found. - - -king100/flask-blog -https://github.com/king100/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:33:34.734221 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yyoowwllgit/flask_server -https://github.com/yyoowwllgit/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 12:33:35.263567 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -m4ra/flask-stripe -https://github.com/m4ra/flask-stripe -Entry file: flask-stripe/app/__init__.py -Scanned: 2016-10-20 12:33:38.791397 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rspears74/flask-intro -https://github.com/rspears74/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:33:44.430581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -richardtbell/flask-tutorial -https://github.com/richardtbell/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:33:45.982311 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -land-pack/flask-wordcounter -https://github.com/land-pack/flask-wordcounter -Entry file: flask-wordcounter/app.py -Scanned: 2016-10-20 12:33:46.593499 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-wordcounter/env/lib/python2.7/genericpath.py - -ibrahimirdem/flask-calisma -https://github.com/ibrahimirdem/flask-calisma -Entry file: flask-calisma/Hello.py -Scanned: 2016-10-20 12:33:48.107046 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -prodicus/docker-flask -https://github.com/prodicus/docker-flask -Entry file: None -Scanned: 2016-10-20 12:33:49.618109 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/prodicus/docker-flask. - -ItamarLevyOr/Flask_Tutorial -https://github.com/ItamarLevyOr/Flask_Tutorial -Entry file: Flask_Tutorial/flaskr.py -Scanned: 2016-10-20 12:33:51.286690 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorial/venv/lib/python2.7/genericpath.py - -kcamenzind/flask_opentracing -https://github.com/kcamenzind/flask_opentracing -Entry file: flask_opentracing/tests/test_flask_opentracing.py -Scanned: 2016-10-20 12:33:54.257230 -No vulnerabilities found. - - -monburan/learn_flask -https://github.com/monburan/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 12:33:54.774034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -plasx/flask-rest -https://github.com/plasx/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-20 12:33:55.760463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChrisXiongWHU/flask_test -https://github.com/ChrisXiongWHU/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:33:56.870765 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cdumay/flask-zookeeper -https://github.com/cdumay/flask-zookeeper -Entry file: flask-zookeeper/tests/test_blueprint.py -Scanned: 2016-10-20 12:33:59.305927 -No vulnerabilities found. - - -vaishakp9/flask-ask -https://github.com/vaishakp9/flask-ask -Entry file: flask-ask/server.py -Scanned: 2016-10-20 12:34:05.834266 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kflavin/flask-tutorial -https://github.com/kflavin/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:34:07.344706 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -umutcoskun/flask-ready -https://github.com/umutcoskun/flask-ready -Entry file: flask-ready/src/app/__init__.py -Scanned: 2016-10-20 12:34:23.430757 -Vulnerability 1: -File: flask-ready/src/app/auth/validators.py - > User input at line 15, trigger word ".data": - entity = self.model.query.filter(self.field == field.data).first() -File: flask-ready/src/app/auth/validators.py - > reaches line 15, trigger word "filter(": - entity = self.model.query.filter(self.field == field.data).first() - -Vulnerability 2: -File: flask-ready/src/app/auth/views.py - > User input at line 50, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -File: flask-ready/src/app/auth/views.py - > reaches line 58, trigger word "flash(": - flash('Welcome {}'.format(user.name), 'info') - - - -Amertz08/flask-docker -https://github.com/Amertz08/flask-docker -Entry file: flask-docker/app/setup.py -Scanned: 2016-10-20 12:34:24.869013 -No vulnerabilities found. - - -viniciusramos91/flask-skeleton -https://github.com/viniciusramos91/flask-skeleton -Entry file: None -Scanned: 2016-10-20 12:34:25.391186 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/viniciusramos91/flask-skeleton. - -pythonadventurer/flask-blog -https://github.com/pythonadventurer/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:34:25.932781 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -novking/Flask_AWS -https://github.com/novking/Flask_AWS -Entry file: Flask_AWS/PlagiarismDefender/home.py -Scanned: 2016-10-20 12:34:27.385934 -Vulnerability 1: -File: Flask_AWS/PlagiarismDefender/home.py - > User input at line 26, trigger word "form[": - text_to_filter = request.form['text_to_check'] -Reassigned in: - File: Flask_AWS/PlagiarismDefender/home.py - > Line 31: sentences = sentence_splitter.tokenize(text_to_filter) - File: Flask_AWS/PlagiarismDefender/home.py - > Line 40: is_it_plagiarized = str(probability_of_plagiarism / len(sentences) * 100) + '%' - File: Flask_AWS/PlagiarismDefender/home.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('plagiarizer-submit.html') -File: Flask_AWS/PlagiarismDefender/home.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('plagiarizer-results.html',text_to_filter=text_to_filter, is_it_plagiarized=is_it_plagiarized) - - - -smeggingsmegger/flask-cookiecutter -https://github.com/smeggingsmegger/flask-cookiecutter -Entry file: flask-cookiecutter/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/__init__.py -Scanned: 2016-10-20 12:34:27.913469 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lalvarezguillen/inmobiliaria_flask -https://github.com/lalvarezguillen/inmobiliaria_flask -Entry file: inmobiliaria_flask/web_stuff/web_app.py -Scanned: 2016-10-20 12:34:28.421449 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JW275/flask_study -https://github.com/JW275/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-20 12:34:28.993184 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -priteshgudge/django-flask -https://github.com/priteshgudge/django-flask -Entry file: django-flask/app.py -Scanned: 2016-10-20 12:34:29.542733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SIJP-ORG/flask-demo -https://github.com/SIJP-ORG/flask-demo -Entry file: None -Scanned: 2016-10-20 12:34:32.071605 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SIJP-ORG/flask-demo. - -MalhotraVijay/flask-boilerplate -https://github.com/MalhotraVijay/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 12:34:32.579776 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MalhotraVijay/flask-boilerplate. - -KOREAN139/flask-blog -https://github.com/KOREAN139/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:34:33.139681 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -sumni-park/flask_blog -https://github.com/sumni-park/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:34:33.653786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vesperalwall860/flask_blank -https://github.com/vesperalwall860/flask_blank -Entry file: flask_blank/project/__init__.py -Scanned: 2016-10-20 12:34:36.437859 -No vulnerabilities found. - - -natfoster82/flask-alcohol -https://github.com/natfoster82/flask-alcohol -Entry file: flask-alcohol/example/app.py -Scanned: 2016-10-20 12:34:39.992889 -Vulnerability 1: -File: flask-alcohol/example/app.py - > User input at line 138, trigger word "get(": - email = request.json.get('email') -File: flask-alcohol/example/app.py - > reaches line 139, trigger word "filter(": - user = cls.query.filter(db.func.lower(User.email) == db.func.lower(email)).first() - -Vulnerability 2: -File: flask-alcohol/example/app.py - > User input at line 279, trigger word "get(": - project_id = request.args.get('project_id') -Reassigned in: - File: flask-alcohol/example/app.py - > Line 282: ret_MAYBE_FUNCTION_NAME = query -File: flask-alcohol/example/app.py - > reaches line 278, trigger word "filter(": - query = query.filter(Post.last_published_at != None) - -Vulnerability 3: -File: flask-alcohol/example/app.py - > User input at line 279, trigger word "get(": - project_id = request.args.get('project_id') -Reassigned in: - File: flask-alcohol/example/app.py - > Line 282: ret_MAYBE_FUNCTION_NAME = query -File: flask-alcohol/example/app.py - > reaches line 281, trigger word "filter(": - query = query.filter(Post.project_id == project_id) - - - -liuzhangpei/myFlask -https://github.com/liuzhangpei/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 12:34:44.671916 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stevenzhang18/Indeed-Flask -https://github.com/stevenzhang18/Indeed-Flask -Entry file: Indeed-Flask/main.py -Scanned: 2016-10-20 12:34:46.292342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RAIRLab/Talos-Flask -https://github.com/RAIRLab/Talos-Flask -Entry file: None -Scanned: 2016-10-20 12:34:46.810649 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RAIRLab/Talos-Flask. - -stewill/flask_web -https://github.com/stewill/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-20 12:34:48.448190 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -bradkarels/restful-flask -https://github.com/bradkarels/restful-flask -Entry file: restful-flask/hello.py -Scanned: 2016-10-20 12:34:50.771210 -No vulnerabilities found. - - -linkcheng/flask_notes -https://github.com/linkcheng/flask_notes -Entry file: flask_notes/hello.py -Scanned: 2016-10-20 12:34:52.189905 -No vulnerabilities found. - - -Mamun-dueee/Flask-microblog -https://github.com/Mamun-dueee/Flask-microblog -Entry file: None -Scanned: 2016-10-20 12:34:55.244541 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -andrealmar/flask-microblog -https://github.com/andrealmar/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:34:55.746146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vdnhnguyen/flask-upload -https://github.com/vdnhnguyen/flask-upload -Entry file: flask-upload/index.py -Scanned: 2016-10-20 12:34:56.271918 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smrati/dockerize_flask -https://github.com/smrati/dockerize_flask -Entry file: dockerize_flask/app/__init__.py -Scanned: 2016-10-20 12:34:57.665508 -No vulnerabilities found. - - -cococohen/Microblog -https://github.com/cococohen/Microblog -Entry file: Microblog/flask/lib/python3.4/site-packages/flask_openid.py -Scanned: 2016-10-20 12:35:07.003013 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BeFunes/App-FlaskExercise -https://github.com/BeFunes/App-FlaskExercise -Entry file: App-FlaskExercise/app.py -Scanned: 2016-10-20 12:35:07.521908 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Nonja/FlaskArticleSearchNYT -https://github.com/Nonja/FlaskArticleSearchNYT -Entry file: FlaskArticleSearchNYT/app/__init__.py -Scanned: 2016-10-20 12:35:17.866694 -Vulnerability 1: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 23, trigger word "get(": - begindate = request.args.get('begindate', '').replace('-', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 23, trigger word "replace(": - begindate = request.args.get('begindate', '').replace('-', '') - -Vulnerability 2: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 24, trigger word "get(": - enddate = request.args.get('enddate', '').replace('-', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 24, trigger word "replace(": - enddate = request.args.get('enddate', '').replace('-', '') - -Vulnerability 3: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 22, trigger word "get(": - searchquery = request.args.get('searchrequest', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(news=news, results=results, totalpages=totalpages, page=page, searchquery=searchquery) - -Vulnerability 4: -File: FlaskArticleSearchNYT/app/hummus.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', '') -Reassigned in: - File: FlaskArticleSearchNYT/app/hummus.py - > Line 31: page = 0 - File: FlaskArticleSearchNYT/app/hummus.py - > Line 33: params = 'api-key''q''begin_date''end_date''page'api_keysearchquerybegindateenddatepage - File: FlaskArticleSearchNYT/app/hummus.py - > Line 36: r = requests.get('https://api.nytimes.com/svc/search/v2/articlesearch.json',params=params) - File: FlaskArticleSearchNYT/app/hummus.py - > Line 41: page = data['response']['meta']['offset'] / 10 + 1 -File: FlaskArticleSearchNYT/app/hummus.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(news=news, results=results, totalpages=totalpages, page=page, searchquery=searchquery) - - - -mr1holmes/planup-backend -https://github.com/mr1holmes/planup-backend -Entry file: planup-backend/flaskapp/__init__.py -Scanned: 2016-10-20 12:35:24.408222 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tonuidavies/Discover -https://github.com/tonuidavies/Discover -Entry file: Discover/app.py -Scanned: 2016-10-20 12:35:26.183411 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Discover/venv/lib/python2.7/genericpath.py - -RydrDojo/Ridr_app -https://github.com/RydrDojo/Ridr_app -Entry file: None -Scanned: 2016-10-20 12:35:26.724376 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stephenjjones/flask-auth-service -https://github.com/stephenjjones/flask-auth-service -Entry file: flask-auth-service/app/__init__.py -Scanned: 2016-10-20 12:35:28.040181 -Vulnerability 1: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flask-auth-service/app/main/views.py - > User input at line 31, trigger word "get(": - user = User.query.get(id) -File: flask-auth-service/app/main/views.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('email'user.email) - - - -thomasobrien99/flask_user_template -https://github.com/thomasobrien99/flask_user_template -Entry file: flask_user_template/app.py -Scanned: 2016-10-20 12:35:29.362892 -No vulnerabilities found. - - -thomasobrien99/flask-movie-crud -https://github.com/thomasobrien99/flask-movie-crud -Entry file: flask-movie-crud/app.py -Scanned: 2016-10-20 12:35:30.924846 -Vulnerability 1: -File: flask-movie-crud/app.py - > User input at line 47, trigger word "get(": - show_dir = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/directors/show.html',dir=show_dir) - -Vulnerability 2: -File: flask-movie-crud/app.py - > User input at line 52, trigger word "get(": - edit_dir = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/directors/edit.html',dir=edit_dir) - -Vulnerability 3: -File: flask-movie-crud/app.py - > User input at line 73, trigger word "get(": - director = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 74, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/index.html',director=director) - -Vulnerability 4: -File: flask-movie-crud/app.py - > User input at line 86, trigger word "get(": - director = Director.query.get(id) -File: flask-movie-crud/app.py - > reaches line 88, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/new.html',director=director, tags=tags) - -Vulnerability 5: -File: flask-movie-crud/app.py - > User input at line 92, trigger word "get(": - movie = Movie.query.get(movie_id) -File: flask-movie-crud/app.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/edit.html',movie=movie, tags=tags) - -Vulnerability 6: -File: flask-movie-crud/app.py - > User input at line 98, trigger word "get(": - movie = Movie.query.get(movie_id) -File: flask-movie-crud/app.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('movies/show.html',movie=movie) - -Vulnerability 7: -File: flask-movie-crud/app.py - > User input at line 136, trigger word "get(": - tag = Tag.query.get(id) -File: flask-movie-crud/app.py - > reaches line 137, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/show.html',tag=tag) - -Vulnerability 8: -File: flask-movie-crud/app.py - > User input at line 141, trigger word "get(": - tag = Tag.query.get(id) -File: flask-movie-crud/app.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/edit.html',tag=tag) - - - -chavli/heroku-flask-start -https://github.com/chavli/heroku-flask-start -Entry file: heroku-flask-start/app.py -Scanned: 2016-10-20 12:35:32.316844 -No vulnerabilities found. - - -kmalfatti/library-flask-app -https://github.com/kmalfatti/library-flask-app -Entry file: library-flask-app/app.py -Scanned: 2016-10-20 12:35:33.755905 -Vulnerability 1: -File: library-flask-app/app.py - > User input at line 63, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/index.html',author=found_author) - -Vulnerability 2: -File: library-flask-app/app.py - > User input at line 68, trigger word "get(": - found_author = Author.query.get(id) -File: library-flask-app/app.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('books/new.html',author=found_author) - - - -vmuguerzac/flask_by_example -https://github.com/vmuguerzac/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-20 12:35:34.422802 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_by_example/venv/lib/python3.5/struct.py - -xilixjd/flask_project_blog -https://github.com/xilixjd/flask_project_blog -Entry file: flask_project_blog/models.py -Scanned: 2016-10-20 12:35:38.529233 -No vulnerabilities found. - - -thomasobrien99/flask-migrate-and-auth -https://github.com/thomasobrien99/flask-migrate-and-auth -Entry file: flask-migrate-and-auth/app.py -Scanned: 2016-10-20 12:35:39.981926 -No vulnerabilities found. - - -rbudzak/learnFlaskMigrate -https://github.com/rbudzak/learnFlaskMigrate -Entry file: learnFlaskMigrate/app.py -Scanned: 2016-10-20 12:35:41.332838 -No vulnerabilities found. - - -krpeacock/flask_migrate_template -https://github.com/krpeacock/flask_migrate_template -Entry file: flask_migrate_template/app.py -Scanned: 2016-10-20 12:35:42.766453 -No vulnerabilities found. - - -sh4nks/flask-caching -https://github.com/sh4nks/flask-caching -Entry file: flask-caching/setup.py -Scanned: 2016-10-20 12:35:49.464541 -No vulnerabilities found. - - -mani-python/flask -https://github.com/mani-python/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:35:50.053205 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -manikandaraj123ster/flask -https://github.com/manikandaraj123ster/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:35:50.658813 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:35:51.170281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -salhernandez/Flask -https://github.com/salhernandez/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:35:51.698383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -murilobsd/zeus -https://github.com/murilobsd/zeus -Entry file: None -Scanned: 2016-10-20 12:35:52.216118 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/murilobsd/zeus. - -xuelangZF/NaHan -https://github.com/xuelangZF/NaHan -Entry file: NaHan/nahan/__init__.py -Scanned: 2016-10-20 12:35:53.232879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -haklabrador/podatci-s-burza -https://github.com/haklabrador/podatci-s-burza -Entry file: podatci-s-burza/webserver.py -Scanned: 2016-10-20 12:35:55.768806 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -weinbergdavid/python-flask-security -https://github.com/weinbergdavid/python-flask-security -Entry file: python-flask-security/run.py -Scanned: 2016-10-20 12:36:04.870499 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -aaossa/flask-openshift -https://github.com/aaossa/flask-openshift -Entry file: flask-openshift/flask_openshift_template.py -Scanned: 2016-10-20 12:36:06.575562 -Vulnerability 1: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - -Vulnerability 2: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - - - -nsujan/flaskbot -https://github.com/nsujan/flaskbot -Entry file: flaskbot/wsgi/myflaskapp.py -Scanned: 2016-10-20 12:36:08.024170 -No vulnerabilities found. - - -davbrink/flaskblog -https://github.com/davbrink/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:36:09.054562 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -ToDolin/flaskgit -https://github.com/ToDolin/flaskgit -Entry file: flaskgit/flasky/app/__init__.py -Scanned: 2016-10-20 12:36:10.586493 -No vulnerabilities found. - - -yolandaz/flaskcars -https://github.com/yolandaz/flaskcars -Entry file: flaskcars/app.py -Scanned: 2016-10-20 12:36:17.297788 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskcars/venv/lib/python2.7/genericpath.py - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: None -Scanned: 2016-10-20 12:36:24.858756 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:36:26.365959 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stevehaigh/flasktest -https://github.com/stevehaigh/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:36:27.384487 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:36:28.926909 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juniorkrvl/flasky -https://github.com/juniorkrvl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:36:30.459276 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Halcae/flaskapp -https://github.com/Halcae/flaskapp -Entry file: None -Scanned: 2016-10-20 12:36:31.980431 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Halcae/flaskapp. - -themuppet2/flasktaskr -https://github.com/themuppet2/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:36:33.519508 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-20 12:36:35.048879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SuZhiBai/flaskblog -https://github.com/SuZhiBai/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:36:35.582729 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -AkshayBhagat/FlaskApp -https://github.com/AkshayBhagat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:36:39.207052 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ncmadhu/FlaskDemo -https://github.com/ncmadhu/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 12:36:42.216280 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Qqlick/flaskRP -https://github.com/Qqlick/flaskRP -Entry file: flaskRP/flaskRP.py -Scanned: 2016-10-20 12:36:44.668632 -Vulnerability 1: -File: flaskRP/flaskRP.py - > User input at line 46, trigger word "form[": - title = request.form['title'] -File: flaskRP/flaskRP.py - > reaches line 53, trigger word "execute(": - g.db.execute('INSERT into posts (title, posts) VALUES (?,?)', [title, post]) - -Vulnerability 2: -File: flaskRP/flaskRP.py - > User input at line 47, trigger word "form[": - post = request.form['post'] -File: flaskRP/flaskRP.py - > reaches line 53, trigger word "execute(": - g.db.execute('INSERT into posts (title, posts) VALUES (?,?)', [title, post]) - - - -YoDaMa/FlaskApp -https://github.com/YoDaMa/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:36:45.278583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stylianos-kampakis/flask-test -https://github.com/stylianos-kampakis/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:36:50.815846 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -erose/tictactoe-flask -https://github.com/erose/tictactoe-flask -Entry file: tictactoe-flask/app.py -Scanned: 2016-10-20 12:36:52.619679 -No vulnerabilities found. - - -alexeib2014/Flask-Android -https://github.com/alexeib2014/Flask-Android -Entry file: Flask-Android/flask_sqlalchemy.py -Scanned: 2016-10-20 12:36:53.237587 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valasek/taekwondo-flask -https://github.com/valasek/taekwondo-flask -Entry file: None -Scanned: 2016-10-20 12:36:53.755427 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/valasek/taekwondo-flask. - -jdgwartney/flask-blueprint -https://github.com/jdgwartney/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 12:36:54.278949 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rjantos/flask-blog -https://github.com/rjantos/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:36:56.346970 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -leofofeo/flask-stuff -https://github.com/leofofeo/flask-stuff -Entry file: flask-stuff/flask_test.py -Scanned: 2016-10-20 12:36:57.664626 -No vulnerabilities found. - - -greenapplepark/flask_docker -https://github.com/greenapplepark/flask_docker -Entry file: flask_docker/app/flaskEntry.py -Scanned: 2016-10-20 12:37:07.022942 -No vulnerabilities found. - - -karloku/beginners_flask -https://github.com/karloku/beginners_flask -Entry file: beginners_flask/application/__init__.py -Scanned: 2016-10-20 12:37:08.463711 -No vulnerabilities found. - - -s2tephen/flask-network -https://github.com/s2tephen/flask-network -Entry file: flask-network/app.py -Scanned: 2016-10-20 12:37:09.761801 -No vulnerabilities found. - - -julianparismorgan/flask_cellcounter -https://github.com/julianparismorgan/flask_cellcounter -Entry file: flask_cellcounter/cell-app.py -Scanned: 2016-10-20 12:37:17.981185 -No vulnerabilities found. - - -jdgwartney/hello-flask -https://github.com/jdgwartney/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:37:18.581307 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -rohanagrawal/flask_social -https://github.com/rohanagrawal/flask_social -Entry file: flask_social/app.py -Scanned: 2016-10-20 12:37:19.090565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -monburan/learn_flask -https://github.com/monburan/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 12:37:25.657810 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChrisXiongWHU/flask_test -https://github.com/ChrisXiongWHU/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:37:27.255153 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jiaominlong/flask-web -https://github.com/jiaominlong/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:37:27.765049 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Amertz08/flask-docker -https://github.com/Amertz08/flask-docker -Entry file: flask-docker/app/setup.py -Scanned: 2016-10-20 12:37:29.232357 -No vulnerabilities found. - - -viniciusramos91/flask-skeleton -https://github.com/viniciusramos91/flask-skeleton -Entry file: None -Scanned: 2016-10-20 12:37:29.795101 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/viniciusramos91/flask-skeleton. - -falterfriday/python-flask -https://github.com/falterfriday/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 12:37:31.322107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcue/flask-blog -https://github.com/jcue/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:37:32.884274 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -metiago/flask-skeleton -https://github.com/metiago/flask-skeleton -Entry file: None -Scanned: 2016-10-20 12:37:35.894354 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/metiago/flask-skeleton. - -rodolfolottin/flask-sortingservice -https://github.com/rodolfolottin/flask-sortingservice -Entry file: flask-sortingservice/src/app.py -Scanned: 2016-10-20 12:37:43.070752 -No vulnerabilities found. - - -xubiaosunny/flask-blog -https://github.com/xubiaosunny/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:37:43.650282 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -lklacar/flask-api -https://github.com/lklacar/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 12:37:44.160139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coder-zhuyu/flask-framework -https://github.com/coder-zhuyu/flask-framework -Entry file: flask-framework/app/__init__.py -Scanned: 2016-10-20 12:37:45.762777 -Vulnerability 1: -File: flask-framework/app/auth/views.py - > User input at line 71, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-framework/app/auth/views.py - > Line 73: pagination = query.paginate(page,per_page=current_app.config['FLASKY_USERS_PER_PAGE'], error_out=False) - File: flask-framework/app/auth/views.py - > Line 76: users = pagination.items -File: flask-framework/app/auth/views.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('auth/confirm.html',pagination=pagination, users=users) - - - -cdumay/flask-tat -https://github.com/cdumay/flask-tat -Entry file: flask-tat/examples/simple.py -Scanned: 2016-10-20 12:37:47.290716 -No vulnerabilities found. - - -wizardbeard/demoservice_flask -https://github.com/wizardbeard/demoservice_flask -Entry file: demoservice_flask/env/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-20 12:38:00.763038 -No vulnerabilities found. - - -mvbn6789/flask-blog -https://github.com/mvbn6789/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:38:01.384744 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -andrew-j-price/python-flask -https://github.com/andrew-j-price/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 12:38:01.911391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -VarmintWorks/VarmintFlask -https://github.com/VarmintWorks/VarmintFlask -Entry file: VarmintFlask/main.py -Scanned: 2016-10-20 12:38:03.650197 -No vulnerabilities found. - - -dqisme/Learn-Flask -https://github.com/dqisme/Learn-Flask -Entry file: Learn-Flask/hello.py -Scanned: 2016-10-20 12:38:04.953069 -No vulnerabilities found. - - -bakslash/flask_social -https://github.com/bakslash/flask_social -Entry file: flask_social/app.py -Scanned: 2016-10-20 12:38:05.474084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jiri-fiala/flask-hellow -https://github.com/jiri-fiala/flask-hellow -Entry file: flask-hellow/app.py -Scanned: 2016-10-20 12:38:06.788506 -No vulnerabilities found. - - -fmlvn/quiz -https://github.com/fmlvn/quiz -Entry file: quiz/quiz/__init__.py -Scanned: 2016-10-20 12:38:08.582000 -No vulnerabilities found. - - -kawilliams/new-db-Pronto-Flask -https://github.com/kawilliams/new-db-Pronto-Flask -Entry file: new-db-Pronto-Flask/syllabi_manager.py -Scanned: 2016-10-20 12:38:09.114368 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephenjjones/flask-auth-service -https://github.com/stephenjjones/flask-auth-service -Entry file: flask-auth-service/app/__init__.py -Scanned: 2016-10-20 12:38:10.442032 -Vulnerability 1: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: flask-auth-service/app/main/views.py - > User input at line 18, trigger word ".data": - email = result.data['email'] -Reassigned in: - File: flask-auth-service/app/main/views.py - > Line 22: user = User(email=email) -File: flask-auth-service/app/main/views.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'user.email), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: flask-auth-service/app/main/views.py - > User input at line 31, trigger word "get(": - user = User.query.get(id) -File: flask-auth-service/app/main/views.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('email'user.email) - - - -maikeulb/flask-by-example -https://github.com/maikeulb/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:38:11.110733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -atelic/flask-react-skeleton -https://github.com/atelic/flask-react-skeleton -Entry file: None -Scanned: 2016-10-20 12:38:11.636940 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/atelic/flask-react-skeleton. - -cdumay/flask-graylog-bundle -https://github.com/cdumay/flask-graylog-bundle -Entry file: flask-graylog-bundle/examples/auth.py -Scanned: 2016-10-20 12:38:20.108628 -No vulnerabilities found. - - -xufuou/flask-by-example -https://github.com/xufuou/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:38:26.301270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Michael728/awesome-flask-todo -https://github.com/Michael728/awesome-flask-todo -Entry file: None -Scanned: 2016-10-20 12:38:27.802777 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Michael728/awesome-flask-todo. - -ayttew/flask-simple-app -https://github.com/ayttew/flask-simple-app -Entry file: flask-simple-app/app/src/app.py -Scanned: 2016-10-20 12:38:29.143316 -No vulnerabilities found. - - -chiefspace/flask_media_streaming_server -https://github.com/chiefspace/flask_media_streaming_server -Entry file: flask_media_streaming_server/run.py -Scanned: 2016-10-20 12:38:29.783857 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_media_streaming_server/flask/lib/python2.7/genericpath.py - -vigevenoj/flask-hue-sensors -https://github.com/vigevenoj/flask-hue-sensors -Entry file: flask-hue-sensors/app/__init__.py -Scanned: 2016-10-20 12:38:31.913126 -No vulnerabilities found. - - -kyouko-taiga/Flask-SocketAPI -https://github.com/kyouko-taiga/Flask-SocketAPI -Entry file: Flask-SocketAPI/test_socketapi.py -Scanned: 2016-10-20 12:38:33.535105 -No vulnerabilities found. - - -learningpython08/flask-file-sharing -https://github.com/learningpython08/flask-file-sharing -Entry file: flask-file-sharing/upload/handlers.py -Scanned: 2016-10-20 12:38:35.086043 -Vulnerability 1: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 86, trigger word "url_for(": - prv_url = url_for('preview',path=url_path, _external=True) - -Vulnerability 2: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 87, trigger word "url_for(": - dl_url = url_for('download',path=url_path, _external=True) - -Vulnerability 3: -File: flask-file-sharing/upload/handlers.py - > User input at line 55, trigger word "get(": - file_obj = request.files.get('file') -Reassigned in: - File: flask-file-sharing/upload/handlers.py - > Line 66: fname = secure_filename(file_obj.filename) - File: flask-file-sharing/upload/handlers.py - > Line 68: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 70: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 79: fname = secure_filename(file_name) - File: flask-file-sharing/upload/handlers.py - > Line 80: url_path = '/'.join([subdir, fname]) - File: flask-file-sharing/upload/handlers.py - > Line 91: ret_MAYBE_FUNCTION_NAME = (resp, 201) -File: flask-file-sharing/upload/handlers.py - > reaches line 89, trigger word "jsonify(": - resp = jsonify(download=dl_url, preview=prv_url) - - - -StephenWeber/rundeck-sensu-flask -https://github.com/StephenWeber/rundeck-sensu-flask -Entry file: rundeck-sensu-flask/rsf/__init__.py -Scanned: 2016-10-20 12:38:36.476019 -No vulnerabilities found. - - -chiefspace/miguelgrinberg_flask_mega -https://github.com/chiefspace/miguelgrinberg_flask_mega -Entry file: None -Scanned: 2016-10-20 12:38:37.035465 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mikefromit/flask-jsonschema-example -https://github.com/mikefromit/flask-jsonschema-example -Entry file: flask-jsonschema-example/app.py -Scanned: 2016-10-20 12:38:44.940790 -No vulnerabilities found. - - -beibeiyang/cf-flask-bokeh-demo -https://github.com/beibeiyang/cf-flask-bokeh-demo -Entry file: cf-flask-bokeh-demo/stocks.py -Scanned: 2016-10-20 12:38:46.351810 -Vulnerability 1: -File: cf-flask-bokeh-demo/stocks.py - > User input at line 47, trigger word "get(": - symbol = request.args.get('symbol') -Reassigned in: - File: cf-flask-bokeh-demo/stocks.py - > Line 52: api_url = 'https://www.quandl.com/api/v1/datasets/WIKI/%s.json' % symbol - File: cf-flask-bokeh-demo/stocks.py - > Line 55: raw_data = session.get(api_url).text - File: cf-flask-bokeh-demo/stocks.py - > Line 56: json_data = json.loads(raw_data) - File: cf-flask-bokeh-demo/stocks.py - > Line 59: df = DataFrame(data=json_data['data'], columns=json_data['column_names']) - File: cf-flask-bokeh-demo/stocks.py - > Line 68: df['left'] = pd.DatetimeIndex(df.Date) - pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 69: df['right'] = pd.DatetimeIndex(df.Date) + pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 114: header = '

%s of %s

Name: %s

Description (from our data provider): %s

Zoom into the chart to see more detail.

' % (json_data['source_name'], json_data['code'], json_data['name'], json_data['description']) -File: cf-flask-bokeh-demo/stocks.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',script=script, div=div, header=header) - -Vulnerability 2: -File: cf-flask-bokeh-demo/stocks.py - > User input at line 55, trigger word "get(": - raw_data = session.get(api_url).text -Reassigned in: - File: cf-flask-bokeh-demo/stocks.py - > Line 56: json_data = json.loads(raw_data) - File: cf-flask-bokeh-demo/stocks.py - > Line 59: df = DataFrame(data=json_data['data'], columns=json_data['column_names']) - File: cf-flask-bokeh-demo/stocks.py - > Line 68: df['left'] = pd.DatetimeIndex(df.Date) - pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 69: df['right'] = pd.DatetimeIndex(df.Date) + pd.DateOffset(days=0.5) - File: cf-flask-bokeh-demo/stocks.py - > Line 114: header = '

%s of %s

Name: %s

Description (from our data provider): %s

Zoom into the chart to see more detail.

' % (json_data['source_name'], json_data['code'], json_data['name'], json_data['description']) -File: cf-flask-bokeh-demo/stocks.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',script=script, div=div, header=header) - - - -Omrigan/flask-github-ci -https://github.com/Omrigan/flask-github-ci -Entry file: flask-github-ci/service.py -Scanned: 2016-10-20 12:38:46.876610 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -krisekenes/productsDashFlask -https://github.com/krisekenes/productsDashFlask -Entry file: productsDashFlask/server.py -Scanned: 2016-10-20 12:38:48.295103 -No vulnerabilities found. - - -bmd/flask-docker-cookiecutter -https://github.com/bmd/flask-docker-cookiecutter -Entry file: flask-docker-cookiecutter/{{ cookiecutter.app_name }}/{{ cookiecutter.app_name }}/{{ cookiecutter.app_name }}/app.py -Scanned: 2016-10-20 12:38:48.811022 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Athsheep/Flask_Web_Development -https://github.com/Athsheep/Flask_Web_Development -Entry file: Flask_Web_Development/app/__init__.py -Scanned: 2016-10-20 12:38:59.865679 -Vulnerability 1: -File: Flask_Web_Development/app/main/views.py - > User input at line 32, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 40: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 42: posts = pagination.items - File: Flask_Web_Development/app/main/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flask_Web_Development/app/main/views.py - > User input at line 35, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 33: show_followed = False - File: Flask_Web_Development/app/main/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flask_Web_Development/app/main/views.py - > User input at line 136, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 138: page = post.comments.count() - 1 / 10 + 1 - File: Flask_Web_Development/app/main/views.py - > Line 139: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 141: comments = pagination.items - File: Flask_Web_Development/app/main/views.py - > Line 135: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask_Web_Development/app/main/views.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: Flask_Web_Development/app/main/views.py - > User input at line 182, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 183: pagination = user.followers.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 185: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask_Web_Development/app/main/views.py - > Line 181: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 187, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: Flask_Web_Development/app/main/views.py - > User input at line 196, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 197: pagination = user.followed.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 199: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask_Web_Development/app/main/views.py - > Line 195: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask_Web_Development/app/main/views.py - > reaches line 201, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flask_Web_Development/app/main/views.py - > User input at line 223, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/main/views.py - > Line 225: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/main/views.py - > Line 227: comments = pagination.items -File: Flask_Web_Development/app/main/views.py - > reaches line 229, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 7: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 20, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 23, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 15: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 17: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 18: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 21: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 11: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 12: -File: Flask_Web_Development/app/api_1_0/users.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/users.py - > Line 35: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/users.py - > Line 37: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/users.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/users.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/users.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 13: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 14: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 15: -File: Flask_Web_Development/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask_Web_Development/app/api_1_0/posts.py - > Line 18: next = None -File: Flask_Web_Development/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 16: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 15, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 17: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 18, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 18: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 13: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 16: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 19: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 20: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 21: -File: Flask_Web_Development/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 38: prev = None - File: Flask_Web_Development/app/api_1_0/comments.py - > Line 41: next = None -File: Flask_Web_Development/app/api_1_0/comments.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -kukuhsain/learn-flask-python -https://github.com/kukuhsain/learn-flask-python -Entry file: learn-flask-python/helloworld.py -Scanned: 2016-10-20 12:39:02.807745 -No vulnerabilities found. - - -Artadys/flask-by-example -https://github.com/Artadys/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:39:03.515416 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gorogoro13/mFlask-TumbleLog -https://github.com/gorogoro13/mFlask-TumbleLog -Entry file: mFlask-TumbleLog/init.py -Scanned: 2016-10-20 12:39:04.824323 -No vulnerabilities found. - - -saileshpatnala/flask-by-example -https://github.com/saileshpatnala/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:39:05.517672 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Kontiomaa/flask-sqlalchemy-demo -https://github.com/Kontiomaa/flask-sqlalchemy-demo -Entry file: flask-sqlalchemy-demo/app.py -Scanned: 2016-10-20 12:39:07.425928 -Vulnerability 1: -File: flask-sqlalchemy-demo/app.py - > User input at line 76, trigger word "get(": - order = Order.query.get(order_id) -Reassigned in: - File: flask-sqlalchemy-demo/app.py - > Line 81: orderData = 'Orderer''status''Items'order.customer.usernameorder.status['Name''Amount'row.itemonrow.productNamerow.count for row in order.orderrow] -File: flask-sqlalchemy-demo/app.py - > reaches line 83, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(orderData) - - - -1131909224/flask -https://github.com/1131909224/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:39:10.802516 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -wangrenlearn/flask -https://github.com/wangrenlearn/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:39:11.871353 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -dongshuiquan/flasky -https://github.com/dongshuiquan/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:39:26.371294 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caseydunham/flaskr -https://github.com/caseydunham/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:39:27.885463 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -francium/flaskr -https://github.com/francium/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:39:28.406341 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Qqlick/Flasktaskr -https://github.com/Qqlick/Flasktaskr -Entry file: Flasktaskr/flask_api.py -Scanned: 2016-10-20 12:39:29.967842 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yolandaz/flaskcars -https://github.com/yolandaz/flaskcars -Entry file: flaskcars/app.py -Scanned: 2016-10-20 12:39:30.635491 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskcars/venv/lib/python2.7/genericpath.py - -PansFortress/flaskr -https://github.com/PansFortress/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:39:33.164344 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -goodman1209/flaskrestserver -https://github.com/goodman1209/flaskrestserver -Entry file: flaskrestserver/hello.py -Scanned: 2016-10-20 12:39:35.502716 -No vulnerabilities found. - - -Ivicel/flasky -https://github.com/Ivicel/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:39:36.024272 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -k0itsu/flasktaskr -https://github.com/k0itsu/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:39:37.526739 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -atsk1618/flasko -https://github.com/atsk1618/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-20 12:39:38.171906 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -penglee87/flaskblog -https://github.com/penglee87/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:39:44.718946 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -Halcae/flaskapp -https://github.com/Halcae/flaskapp -Entry file: None -Scanned: 2016-10-20 12:39:46.221858 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Halcae/flaskapp. - -Kermit95/Flaskr -https://github.com/Kermit95/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:39:47.732146 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juniorkrvl/flasky -https://github.com/juniorkrvl/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:39:48.234560 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davbrink/flasktaskr -https://github.com/davbrink/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:39:49.748498 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ptrees/flaskr -https://github.com/ptrees/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:39:52.277398 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langlangago/Flasky -https://github.com/langlangago/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 12:40:00.784933 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jcue/flasktaskr -https://github.com/jcue/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:40:02.324757 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qhdong/flaskr -https://github.com/qhdong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:40:03.886849 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aksenovpb/flaskproject -https://github.com/aksenovpb/flaskproject -Entry file: None -Scanned: 2016-10-20 12:40:04.392148 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ncmadhu/FlaskDemo -https://github.com/ncmadhu/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 12:40:05.915488 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LiKePAIN/FlaskStudy -https://github.com/LiKePAIN/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-20 12:40:06.426589 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -playscforever/flaskProject -https://github.com/playscforever/flaskProject -Entry file: flaskProject/helloFlask/app.py -Scanned: 2016-10-20 12:40:06.984551 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MarkoArsenovic/FlaskAuth -https://github.com/MarkoArsenovic/FlaskAuth -Entry file: FlaskAuth/testapp/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 12:40:08.680996 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PythonWorkshop/TensorFlowFlask -https://github.com/PythonWorkshop/TensorFlowFlask -Entry file: TensorFlowFlask/main.py -Scanned: 2016-10-20 12:40:13.074949 -Vulnerability 1: -File: TensorFlowFlask/main.py - > User input at line 48, trigger word ".data": - filename = secure_filename(form.training_data.data.filename) -Reassigned in: - File: TensorFlowFlask/main.py - > Line 52: dataframe = pd.read_csv('wine_quality/data/' + filename,sep=',') - File: TensorFlowFlask/main.py - > Line 55: filename = None -File: TensorFlowFlask/main.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('test_data_upload.html',form=form, filename=filename) - - - -bigzhao/flask-wechat -https://github.com/bigzhao/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-20 12:40:13.596893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vishukamble/PythonFlask -https://github.com/vishukamble/PythonFlask -Entry file: PythonFlask/flask/Lib/site-packages/flask_bcrypt.py -Scanned: 2016-10-20 12:40:20.512298 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -szparag3/flask-blog -https://github.com/szparag3/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:40:21.048800 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ketanrk/flask_practice -https://github.com/ketanrk/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 12:40:21.638103 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jdgwartney/flask-blueprint -https://github.com/jdgwartney/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 12:40:27.148521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cooleo/flask-cassandra -https://github.com/cooleo/flask-cassandra -Entry file: flask-cassandra/app/__init__.py -Scanned: 2016-10-20 12:40:29.949112 -Vulnerability 1: -File: flask-cassandra/app/models/app.py - > User input at line 301, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-cassandra/app/models/app.py - > Line 304: user = User(username=username) - File: flask-cassandra/app/models/app.py - > Line 307: session['id'] = user.id - File: flask-cassandra/app/models/app.py - > Line 309: user = current_user() - File: flask-cassandra/app/models/app.py - > Line 302: user = User.query.filter_by(username=username).first() - File: flask-cassandra/app/models/app.py - > Line 308: ret_MAYBE_FUNCTION_NAME = redirect('/') -File: flask-cassandra/app/models/app.py - > reaches line 310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',user=user) - - - -abhishekg785/flask-gevent -https://github.com/abhishekg785/flask-gevent -Entry file: flask-gevent/chatServer.py -Scanned: 2016-10-20 12:40:31.581114 -No vulnerabilities found. - - -lucilecoutouly/back-flask -https://github.com/lucilecoutouly/back-flask -Entry file: back-flask/back_nsa/app/__init__.py -Scanned: 2016-10-20 12:40:32.230303 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ggrumbley/flask_example -https://github.com/ggrumbley/flask_example -Entry file: None -Scanned: 2016-10-20 12:40:32.743171 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mehemken/generic-flask -https://github.com/mehemken/generic-flask -Entry file: generic-flask/app.py -Scanned: 2016-10-20 12:40:34.066168 -No vulnerabilities found. - - -Keita1/flask-blog -https://github.com/Keita1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:40:35.659438 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -ja8zyjits/redis-flask -https://github.com/ja8zyjits/redis-flask -Entry file: redis-flask/flask_app.py -Scanned: 2016-10-20 12:40:36.960147 -Vulnerability 1: -File: redis-flask/flask_app.py - > User input at line 13, trigger word "get(": - number = int(request.values.get('number')) -Reassigned in: - File: redis-flask/flask_app.py - > Line 14: value = find_sum(number) -File: redis-flask/flask_app.py - > reaches line 15, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sum_finder.html',sum_value=value) - - - -themikepearce/flask-blog -https://github.com/themikepearce/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:40:38.521944 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Momingcoder/learn-flask -https://github.com/Momingcoder/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 12:40:39.191785 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -greenapplepark/flask_docker -https://github.com/greenapplepark/flask_docker -Entry file: flask_docker/app/flaskEntry.py -Scanned: 2016-10-20 12:40:45.502362 -No vulnerabilities found. - - -karloku/beginners_flask -https://github.com/karloku/beginners_flask -Entry file: beginners_flask/application/__init__.py -Scanned: 2016-10-20 12:40:47.964509 -No vulnerabilities found. - - -s2tephen/flask-network -https://github.com/s2tephen/flask-network -Entry file: flask-network/app.py -Scanned: 2016-10-20 12:40:49.269410 -No vulnerabilities found. - - -julianparismorgan/flask_cellcounter -https://github.com/julianparismorgan/flask_cellcounter -Entry file: flask_cellcounter/cell-app.py -Scanned: 2016-10-20 12:40:57.539620 -No vulnerabilities found. - - -vigneshrajkumar/simple-flask -https://github.com/vigneshrajkumar/simple-flask -Entry file: simple-flask/simple.py -Scanned: 2016-10-20 12:40:58.878222 -No vulnerabilities found. - - -linkinshurik/api_flask -https://github.com/linkinshurik/api_flask -Entry file: api_flask/app/__init__.py -Scanned: 2016-10-20 12:41:00.342849 -No vulnerabilities found. - - -pranavbadami/damson-flask -https://github.com/pranavbadami/damson-flask -Entry file: damson-flask/damson.py -Scanned: 2016-10-20 12:41:00.965343 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coding2000/flask_web -https://github.com/coding2000/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-20 12:41:02.544849 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -shihanng/appengine-flask -https://github.com/shihanng/appengine-flask -Entry file: appengine-flask/src/application/__init__.py -Scanned: 2016-10-20 12:41:04.947795 -No vulnerabilities found. - - -cristopher-rodrigues/phyton-flask -https://github.com/cristopher-rodrigues/phyton-flask -Entry file: None -Scanned: 2016-10-20 12:41:05.523273 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alodavi/flask_blog -https://github.com/alodavi/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:41:06.029213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sharan-monikantan/hello-flask -https://github.com/sharan-monikantan/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:41:06.629527 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -Mubbly/flask_test -https://github.com/Mubbly/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:41:07.201226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -asherkhb/flask-tutorial -https://github.com/asherkhb/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:41:08.704733 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -awproksel/docker_flask -https://github.com/awproksel/docker_flask -Entry file: docker_flask/code/app.py -Scanned: 2016-10-20 12:41:11.132480 -No vulnerabilities found. - - -tigerisnotinwood/flask_wx -https://github.com/tigerisnotinwood/flask_wx -Entry file: flask_wx/run.py -Scanned: 2016-10-20 12:41:12.656058 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sdzharkov/bitFlask -https://github.com/sdzharkov/bitFlask -Entry file: None -Scanned: 2016-10-20 12:41:14.193960 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SverreHerland/flask-intro -https://github.com/SverreHerland/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:41:14.712250 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -valexandersaulys/flask-ladder -https://github.com/valexandersaulys/flask-ladder -Entry file: flask-ladder/app/__init__.py -Scanned: 2016-10-20 12:41:22.530051 -No vulnerabilities found. - - -Subh1994/flask_demo -https://github.com/Subh1994/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:41:23.050049 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zheins/portalFlask -https://github.com/zheins/portalFlask -Entry file: portalFlask/portalFlask.py -Scanned: 2016-10-20 12:41:27.565466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yvonnendutaw/flask-template -https://github.com/yvonnendutaw/flask-template -Entry file: None -Scanned: 2016-10-20 12:41:29.102698 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yvonnendutaw/flask-template. - -devtye/learn-flask -https://github.com/devtye/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 12:41:30.820754 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laerciosb/flask_challanges -https://github.com/laerciosb/flask_challanges -Entry file: flask_challanges/v2/app/core.py -Scanned: 2016-10-20 12:41:32.339987 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -python-ning/jira_flask -https://github.com/python-ning/jira_flask -Entry file: jira_flask/jira.py -Scanned: 2016-10-20 12:41:32.855275 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ricleal/TornadoFlask -https://github.com/ricleal/TornadoFlask -Entry file: TornadoFlask/flasky.py -Scanned: 2016-10-20 12:41:34.295977 -No vulnerabilities found. - - -ekozlowski/flask_demo -https://github.com/ekozlowski/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:41:35.866200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lucidfrontier45/flask-rethinkview -https://github.com/lucidfrontier45/flask-rethinkview -Entry file: flask-rethinkview/examples/main.py -Scanned: 2016-10-20 12:41:37.193870 -No vulnerabilities found. - - -chriskoh/intraday-flask -https://github.com/chriskoh/intraday-flask -Entry file: None -Scanned: 2016-10-20 12:41:38.727176 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pouya-abbassi/rashapay-flask -https://github.com/pouya-abbassi/rashapay-flask -Entry file: rashapay-flask/main.py -Scanned: 2016-10-20 12:41:40.257308 -No vulnerabilities found. - - -c03rcion/flask-weather -https://github.com/c03rcion/flask-weather -Entry file: flask-weather/app.py -Scanned: 2016-10-20 12:41:44.793706 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neoden/flask-filecache -https://github.com/neoden/flask-filecache -Entry file: flask-filecache/flask_filecache.py -Scanned: 2016-10-20 12:41:48.238317 -No vulnerabilities found. - - -lstmemery/flask-sqlalchemy -https://github.com/lstmemery/flask-sqlalchemy -Entry file: flask-sqlalchemy/run.py -Scanned: 2016-10-20 12:41:48.765930 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charoleizer/TDD-Flask -https://github.com/charoleizer/TDD-Flask -Entry file: TDD-Flask/fonts/py/WebService/app.py -Scanned: 2016-10-20 12:41:57.399649 -No vulnerabilities found. - - -botheredbybees/flask-rss -https://github.com/botheredbybees/flask-rss -Entry file: flask-rss/headlines.py -Scanned: 2016-10-20 12:41:59.983068 -Vulnerability 1: -File: flask-rss/headlines.py - > User input at line 21, trigger word "get(": - query = urllib.parse.unquote_plus(request.args.get('publication')) -Reassigned in: - File: flask-rss/headlines.py - > Line 23: query = 'ABC Hobart' - File: flask-rss/headlines.py - > Line 24: feed = feedparser.parse(RSS_FEEDS[query]) - File: flask-rss/headlines.py - > Line 28: ret_MAYBE_FUNCTION_NAME = 'no news is good news' -File: flask-rss/headlines.py - > reaches line 26, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',articles=feed['entries'], header=query, rssFeeds=RSS_FEEDS, weather=weather) - - - -coding2000/flask_base -https://github.com/coding2000/flask_base -Entry file: flask_base/flask_01.py -Scanned: 2016-10-20 12:42:01.254845 -No vulnerabilities found. - - -afrancisboeuf/workshop_flask -https://github.com/afrancisboeuf/workshop_flask -Entry file: workshop_flask/1_get_started/6.py -Scanned: 2016-10-20 12:42:01.944855 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: workshop_flask/1_get_started/venv/lib/python2.7/genericpath.py - -tyfulcrum/Flask_Demo -https://github.com/tyfulcrum/Flask_Demo -Entry file: Flask_Demo/hello.py -Scanned: 2016-10-20 12:42:04.248927 -No vulnerabilities found. - - -chenkaiyu1997/flask-learning -https://github.com/chenkaiyu1997/flask-learning -Entry file: flask-learning/app/__init__.py -Scanned: 2016-10-20 12:42:05.564277 -No vulnerabilities found. - - -tpugh/flask_sample -https://github.com/tpugh/flask_sample -Entry file: flask_sample/app_hello.py -Scanned: 2016-10-20 12:42:06.100156 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -schenkd/flask-core -https://github.com/schenkd/flask-core -Entry file: flask-core/app/__init__.py -Scanned: 2016-10-20 12:42:15.092396 -No vulnerabilities found. - - -sasakalaba/flask_project -https://github.com/sasakalaba/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 12:42:15.952186 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jorgezepeda/flask-hello-world -https://github.com/jorgezepeda/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:42:16.503828 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -rajarshi98/giftsaver -https://github.com/rajarshi98/giftsaver -Entry file: giftsaver/app.py -Scanned: 2016-10-20 12:42:17.024738 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -newkdukem/flask4e -https://github.com/newkdukem/flask4e -Entry file: flask4e/headlines.py -Scanned: 2016-10-20 12:42:18.846224 -No vulnerabilities found. - - -fmlvn/quiz -https://github.com/fmlvn/quiz -Entry file: quiz/quiz/__init__.py -Scanned: 2016-10-20 12:42:20.598626 -No vulnerabilities found. - - -top2topii/FlaskServiceWin32 -https://github.com/top2topii/FlaskServiceWin32 -Entry file: FlaskServiceWin32/myapp.py -Scanned: 2016-10-20 12:42:21.909786 -No vulnerabilities found. - - -jpvillavicencio/FlaskDemoAPI -https://github.com/jpvillavicencio/FlaskDemoAPI -Entry file: FlaskDemoAPI/app.py -Scanned: 2016-10-20 12:42:23.454295 -No vulnerabilities found. - - -cdumay/flask-graylog-bundle -https://github.com/cdumay/flask-graylog-bundle -Entry file: flask-graylog-bundle/examples/auth.py -Scanned: 2016-10-20 12:42:31.236857 -No vulnerabilities found. - - -ankitkmishra/flask_microblog_tutorial -https://github.com/ankitkmishra/flask_microblog_tutorial -Entry file: None -Scanned: 2016-10-20 12:42:40.700851 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Karthik-Ramvijay/Flask_API-PROJECT -https://github.com/Karthik-Ramvijay/Flask_API-PROJECT -Entry file: None -Scanned: 2016-10-20 12:42:41.694340 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Karthik-Ramvijay/Flask_API-PROJECT. - -themese/flask -https://github.com/themese/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:42:43.763381 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bTanya/flask -https://github.com/bTanya/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:42:44.338029 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -rafaelhenrique/flask_tutorial -https://github.com/rafaelhenrique/flask_tutorial -Entry file: None -Scanned: 2016-10-20 12:42:45.315602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sousic/flask_study -https://github.com/sousic/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-20 12:42:47.324264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davidgomes/flask-pygood -https://github.com/davidgomes/flask-pygood -Entry file: flask-pygood/flask_pygood/test/demo.py -Scanned: 2016-10-20 12:42:49.740768 -No vulnerabilities found. - - -goodman1209/flaskrestserver -https://github.com/goodman1209/flaskrestserver -Entry file: flaskrestserver/hello.py -Scanned: 2016-10-20 12:42:52.063620 -No vulnerabilities found. - - -marvinmarnold/flasky -https://github.com/marvinmarnold/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:42:59.608684 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bassel-meet/flasky -https://github.com/bassel-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:01.128967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sima16-meet/flasky -https://github.com/sima16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:02.643651 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tamar16-meet/flasky -https://github.com/tamar16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:04.163227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alma16-meet/flasky -https://github.com/alma16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:05.696864 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guy16-meet/flasky -https://github.com/guy16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:06.225371 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aixiamomo/flasky -https://github.com/aixiamomo/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:06.739505 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dina16-meet/flasky -https://github.com/dina16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:16.260212 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -orr16-meet/flasky -https://github.com/orr16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:16.780149 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -roni16-meet/flasky -https://github.com/roni16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:17.283497 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rama16-meet/flasky -https://github.com/rama16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:17.789628 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yuyanqiuqiu/flaskblog -https://github.com/yuyanqiuqiu/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:43:18.315558 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -wwpika/flaskww -https://github.com/wwpika/flaskww -Entry file: flaskww/app/__init__.py -Scanned: 2016-10-20 12:43:25.908817 -Vulnerability 1: -File: flaskww/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 32: posts = pagination.items - File: flaskww/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskww/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskww/app/main/views.py - > Line 22: show_followed = False - File: flaskww/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskww/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 45: posts = pagination.items -File: flaskww/app/main/views.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskww/app/main/views.py - > User input at line 103, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 105: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskww/app/main/views.py - > Line 107: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 111: comments = pagination.items - File: flaskww/app/main/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskww/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskww/app/main/views.py - > User input at line 168, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 169: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 173: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskww/app/main/views.py - > Line 167: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskww/app/main/views.py - > User input at line 185, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 186: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 190: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskww/app/main/views.py - > Line 184: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskww/app/main/views.py - > reaches line 192, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskww/app/main/views.py - > User input at line 214, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/main/views.py - > Line 215: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/main/views.py - > Line 219: comments = pagination.items -File: flaskww/app/main/views.py - > reaches line 220, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 21, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 24, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flaskww/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('get', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/users.py - > Line 18: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 19: prev = None - File: flaskww/app/api_1_0/users.py - > Line 22: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 43, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flaskww/app/api_1_0/users.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/users.py - > Line 36: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], errror_out=False) - File: flaskww/app/api_1_0/users.py - > Line 40: posts = pagination.items - File: flaskww/app/api_1_0/users.py - > Line 41: prev = None - File: flaskww/app/api_1_0/users.py - > Line 45: next = None -File: flaskww/app/api_1_0/users.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskww/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskww/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskww/app/api_1_0/posts.py - > Line 19: next = None -File: flaskww/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskww/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 18: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flaskww/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskww/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskww/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskww/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskww/app/api_1_0/comments.py - > Line 46: next = None -File: flaskww/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -yasmeen16-meet/flasky -https://github.com/yasmeen16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:26.450986 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -amjad16-meet/flasky -https://github.com/amjad16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:26.963609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elias16-meet/flasky -https://github.com/elias16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:27.471562 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bluethon/flasky -https://github.com/bluethon/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:28.984505 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -teodorgarzdin/Flaskr -https://github.com/teodorgarzdin/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:43:30.569491 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langlangago/Flasky -https://github.com/langlangago/Flasky -Entry file: Flasky/app/__init__.py -Scanned: 2016-10-20 12:43:32.077585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aksenovpb/flaskproject -https://github.com/aksenovpb/flaskproject -Entry file: None -Scanned: 2016-10-20 12:43:41.611862 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pengshiqi/Flaskr -https://github.com/pengshiqi/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:43:42.123893 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stylianos-kampakis/flasktaskr -https://github.com/stylianos-kampakis/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:43:42.630146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yara16-meet/flasky -https://github.com/yara16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:44.140546 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nimala16-meet/Flasky- -https://github.com/nimala16-meet/Flasky- -Entry file: None -Scanned: 2016-10-20 12:43:44.664520 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nimala16-meet/Flasky-. - -shiran16-meet/flasky -https://github.com/shiran16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:45.163682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fadi16-meet/flasky -https://github.com/fadi16-meet/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:43:45.677391 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chijie/flaskdemo -https://github.com/chijie/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 12:43:46.196597 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -decherd/flasktaskr -https://github.com/decherd/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:43:47.706433 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arsalanam/flasktasker7 -https://github.com/arsalanam/flasktasker7 -Entry file: flasktasker7/project/__init__.py -Scanned: 2016-10-20 12:43:50.179698 -No vulnerabilities found. - - -LiKePAIN/FlaskStudy -https://github.com/LiKePAIN/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-20 12:43:51.702394 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Recad/FlaskSO -https://github.com/Recad/FlaskSO -Entry file: FlaskSO/Flask-vbox-so.py -Scanned: 2016-10-20 12:44:01.149960 -No vulnerabilities found. - - -NateLove/FlaskTest -https://github.com/NateLove/FlaskTest -Entry file: None -Scanned: 2016-10-20 12:44:01.654477 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NateLove/FlaskTest. - -playscforever/flaskProject -https://github.com/playscforever/flaskProject -Entry file: flaskProject/helloFlask/app.py -Scanned: 2016-10-20 12:44:03.174353 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -winray/FlaskNote -https://github.com/winray/FlaskNote -Entry file: FlaskNote/microblog/app/__init__.py -Scanned: 2016-10-20 12:44:05.609045 -No vulnerabilities found. - - -anilkunchalaece/flaskForm -https://github.com/anilkunchalaece/flaskForm -Entry file: flaskForm/flaskApp.py -Scanned: 2016-10-20 12:44:06.135531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bigzhao/flask-wechat -https://github.com/bigzhao/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-20 12:44:07.127286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CaveMike/flask_rest -https://github.com/CaveMike/flask_rest -Entry file: None -Scanned: 2016-10-20 12:44:16.704173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CaveMike/flask_rest. - -wlingxiao/HelloFlask -https://github.com/wlingxiao/HelloFlask -Entry file: HelloFlask/src/application.py -Scanned: 2016-10-20 12:44:17.217408 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juliocesarfort/flask-demos -https://github.com/juliocesarfort/flask-demos -Entry file: flask-demos/json-contentsniffing.py -Scanned: 2016-10-20 12:44:18.534335 -No vulnerabilities found. - - -Keita1/flask-blog -https://github.com/Keita1/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:44:19.083853 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Gherero/analitika-flask -https://github.com/Gherero/analitika-flask -Entry file: analitika-flask/app/main.py -Scanned: 2016-10-20 12:44:26.029344 -No vulnerabilities found. - - -ooldDoctor/Flask-Shell -https://github.com/ooldDoctor/Flask-Shell -Entry file: Flask-Shell/server.py -Scanned: 2016-10-20 12:44:27.463294 -No vulnerabilities found. - - -opentracing-contrib/python-flask -https://github.com/opentracing-contrib/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 12:44:28.480994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rysev-a/flask-blueprints -https://github.com/rysev-a/flask-blueprints -Entry file: flask-blueprints/ch05/application/__init__.py -Scanned: 2016-10-20 12:44:30.044760 -No vulnerabilities found. - - -jen8/Flask-Intro -https://github.com/jen8/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 12:44:30.616522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keik/flask-tutorial -https://github.com/keik/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:44:31.118296 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -evereux/flask_template -https://github.com/evereux/flask_template -Entry file: None -Scanned: 2016-10-20 12:44:42.131065 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/evereux/flask_template. - -Jareechang/flask-basic -https://github.com/Jareechang/flask-basic -Entry file: flask-basic/templates.py -Scanned: 2016-10-20 12:44:43.631358 -No vulnerabilities found. - - -alodavi/flask_blog -https://github.com/alodavi/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:44:44.145167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sdzharkov/bitFlask -https://github.com/sdzharkov/bitFlask -Entry file: None -Scanned: 2016-10-20 12:44:44.661103 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SverreHerland/flask-intro -https://github.com/SverreHerland/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:44:45.152997 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -doblel/Flask-Hooker -https://github.com/doblel/Flask-Hooker -Entry file: Flask-Hooker/test.py -Scanned: 2016-10-20 12:44:45.668243 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ainjii/20160719_flask -https://github.com/ainjii/20160719_flask -Entry file: 20160719_flask/nice.py -Scanned: 2016-10-20 12:44:47.013837 -No vulnerabilities found. - - -whitneybelba/Flask-Intro -https://github.com/whitneybelba/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 12:44:47.525350 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ahmsolo/flask-intro -https://github.com/ahmsolo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:44:48.020913 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aaron4444/master_flask -https://github.com/aaron4444/master_flask -Entry file: master_flask/main.py -Scanned: 2016-10-20 12:44:50.446640 -No vulnerabilities found. - - -scotteggs/flask_tutor -https://github.com/scotteggs/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-20 12:44:51.972790 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -v2hey/flask-blog -https://github.com/v2hey/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:45:00.519408 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -defhook/flask-blog -https://github.com/defhook/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:45:02.063785 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -boyxiaolong/flask_blog -https://github.com/boyxiaolong/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:45:03.590936 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -n4s/flask-test -https://github.com/n4s/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:45:05.131694 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -ricleal/TornadoFlask -https://github.com/ricleal/TornadoFlask -Entry file: TornadoFlask/flasky.py -Scanned: 2016-10-20 12:45:07.478306 -No vulnerabilities found. - - -apastewk/flask-intro -https://github.com/apastewk/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:08.028870 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -thepomeranian/flask-intro -https://github.com/thepomeranian/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:08.529170 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibhan88/Flask-Intro -https://github.com/ibhan88/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 12:45:17.092609 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eflagg/flask-intro -https://github.com/eflagg/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:17.605847 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MariaAngela24/flask-intro -https://github.com/MariaAngela24/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:18.114604 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -13923858795/flask-blog -https://github.com/13923858795/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:45:20.155488 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -shankj3/flask_version -https://github.com/shankj3/flask_version -Entry file: flask_version/render_with_jinja/render_with_jinja.py -Scanned: 2016-10-20 12:45:26.708219 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neldevfull/flask_api -https://github.com/neldevfull/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 12:45:28.236970 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tarzioo/flask-intro -https://github.com/tarzioo/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:28.753585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lingsitu1290/Flask-Intro -https://github.com/lingsitu1290/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-20 12:45:29.267043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sarahdwyer/flask-intro -https://github.com/sarahdwyer/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:30.823837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -decherd/flask-blog -https://github.com/decherd/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:45:31.372646 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -thesiti92/flask_example -https://github.com/thesiti92/flask_example -Entry file: None -Scanned: 2016-10-20 12:45:32.895599 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rayramsay/flask-intro -https://github.com/rayramsay/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:45:42.411092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aig-/flask_google -https://github.com/aig-/flask_google -Entry file: flask_google/app.py -Scanned: 2016-10-20 12:45:43.745443 -Vulnerability 1: -File: flask_google/app.py - > User input at line 93, trigger word "get(": - response = 'state''status'task.statetask.info.get('status', '') -Reassigned in: - File: flask_google/app.py - > Line 88: response = 'state''status'task.state'Pending...' - File: flask_google/app.py - > Line 101: response = 'state''status'task.statestr(task.info) -File: flask_google/app.py - > reaches line 105, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -yfalcon8/Flask_Intro -https://github.com/yfalcon8/Flask_Intro -Entry file: Flask_Intro/nice.py -Scanned: 2016-10-20 12:45:44.366364 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Intro/env/lib/python2.7/genericpath.py - -chriskoh/intraday-flask -https://github.com/chriskoh/intraday-flask -Entry file: None -Scanned: 2016-10-20 12:45:44.889940 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -laylasian/poke-flask -https://github.com/laylasian/poke-flask -Entry file: poke-flask/poke/app.py -Scanned: 2016-10-20 12:45:46.539379 -No vulnerabilities found. - - -YuliYaSokolova/home_flask -https://github.com/YuliYaSokolova/home_flask -Entry file: home_flask/__init__.py -Scanned: 2016-10-20 12:45:47.749711 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: home_flask/.envi/lib/python3.4/struct.py - -alodavi/flask_simple -https://github.com/alodavi/flask_simple -Entry file: flask_simple/hello.py -Scanned: 2016-10-20 12:45:49.061460 -No vulnerabilities found. - - -cdagli/flask-blueprint -https://github.com/cdagli/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 12:45:49.591509 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -charoleizer/TDD-Flask -https://github.com/charoleizer/TDD-Flask -Entry file: TDD-Flask/fonts/py/WebService/app.py -Scanned: 2016-10-20 12:45:57.223917 -No vulnerabilities found. - - -thechutrain/flask-tutorial -https://github.com/thechutrain/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:46:01.279919 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RetardedPigeon/flask_project -https://github.com/RetardedPigeon/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 12:46:03.105549 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -radajin/flask -https://github.com/radajin/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:46:07.563774 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -suryadana/Flask -https://github.com/suryadana/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:46:08.074606 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jzengzhan/Flask -https://github.com/Jzengzhan/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:46:08.606573 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -crazw/flask -https://github.com/crazw/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:46:17.209416 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -mwongeraE/Flask -https://github.com/mwongeraE/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:46:17.747337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TheNixNinja/flask-boilerplate -https://github.com/TheNixNinja/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 12:46:18.244968 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TheNixNinja/flask-boilerplate. - -clef/flask-nameko -https://github.com/clef/flask-nameko -Entry file: flask-nameko/tests/test_flask_pooled_cluster_rpc_proxy.py -Scanned: 2016-10-20 12:46:20.799607 -No vulnerabilities found. - - -weihg/flaskr -https://github.com/weihg/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:46:26.795218 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dasmemes/flasky -https://github.com/Dasmemes/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:46:28.291317 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhan12/Flaskblog -https://github.com/dhan12/Flaskblog -Entry file: Flaskblog/run.py -Scanned: 2016-10-20 12:46:33.465937 -Vulnerability 1: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 2: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 3: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 4: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - - - -SachinMaharana/flaskblog -https://github.com/SachinMaharana/flaskblog -Entry file: flaskblog/flat.py -Scanned: 2016-10-20 12:46:34.042139 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskblog/env/lib/python2.7/genericpath.py - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:46:34.546066 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-20 12:46:35.055101 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:46:35.569506 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igoroppo6/flasky -https://github.com/igoroppo6/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:46:43.085888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evanzd/flasky -https://github.com/evanzd/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:46:43.611296 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Dawson-G/flaskwebapp -https://github.com/Dawson-G/flaskwebapp -Entry file: flaskwebapp/main.py -Scanned: 2016-10-20 12:46:45.945875 -No vulnerabilities found. - - -diazdeentr/flasktest -https://github.com/diazdeentr/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:46:46.453466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mtlevine0/FlaskPhoto -https://github.com/mtlevine0/FlaskPhoto -Entry file: FlaskPhoto/flaskphoto.py -Scanned: 2016-10-20 12:46:50.920639 -No vulnerabilities found. - - -TitledPythonFile/FlaskItems -https://github.com/TitledPythonFile/FlaskItems -Entry file: FlaskItems/app/__init__.py -Scanned: 2016-10-20 12:46:51.436263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sT00ne/FlaskMega -https://github.com/sT00ne/FlaskMega -Entry file: FlaskMega/app/__init__.py -Scanned: 2016-10-20 12:46:55.254660 -No vulnerabilities found. - - -dedystyawan/flask2 -https://github.com/dedystyawan/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-20 12:46:55.790661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laketiticaca/FlaskApp -https://github.com/laketiticaca/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:46:56.362177 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yipersevere/FlaskTutorial -https://github.com/yipersevere/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 12:46:58.359207 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kerol/flask-utils -https://github.com/kerol/flask-utils -Entry file: flask-utils/logger.py -Scanned: 2016-10-20 12:47:02.843333 -No vulnerabilities found. - - -jk34/Blog_Flask -https://github.com/jk34/Blog_Flask -Entry file: Blog_Flask/app.py -Scanned: 2016-10-20 12:47:03.492811 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Blog_Flask/lib/python2.7/genericpath.py - -Wangbicong/flask-newspaper -https://github.com/Wangbicong/flask-newspaper -Entry file: flask-newspaper/app/__init__.py -Scanned: 2016-10-20 12:47:06.479637 -Vulnerability 1: -File: flask-newspaper/app/main/views.py - > User input at line 29, trigger word "get(": - tab = request.args.get('tab') -Reassigned in: - File: flask-newspaper/app/main/views.py - > Line 75: ret_MAYBE_FUNCTION_NAME = redirect('/login/') - File: flask-newspaper/app/main/views.py - > Line 45: ret_MAYBE_FUNCTION_NAME = render_template('news.html',news_data=news_data) - File: flask-newspaper/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('index.html',news_data=news_data, user_data=user_data, tab_mark='user') - File: flask-newspaper/app/main/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = render_template('record.html',record_data=record_data) -File: flask-newspaper/app/main/views.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',news_data=news_data, user_data=user_data, tab_mark=tab) - - - -anupam0601/flask-REST -https://github.com/anupam0601/flask-REST -Entry file: None -Scanned: 2016-10-20 12:47:06.989629 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/anupam0601/flask-REST. - -vanalex/restful-flask -https://github.com/vanalex/restful-flask -Entry file: restful-flask/restful-flask.py -Scanned: 2016-10-20 12:47:09.316497 -No vulnerabilities found. - - -chicaum/flask_blog -https://github.com/chicaum/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:47:09.855455 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hicris/flask-note -https://github.com/hicris/flask-note -Entry file: flask-note/note.py -Scanned: 2016-10-20 12:47:17.894060 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Faoxis/flask-microblog -https://github.com/Faoxis/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:47:18.411395 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -evereux/flask_template -https://github.com/evereux/flask_template -Entry file: None -Scanned: 2016-10-20 12:47:18.909553 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/evereux/flask_template. - -yyoowwllgit/flask_agent -https://github.com/yyoowwllgit/flask_agent -Entry file: flask_agent/flask_agent_server/agent_server.py -Scanned: 2016-10-20 12:47:20.417108 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AndrewSmiley/flask-demo -https://github.com/AndrewSmiley/flask-demo -Entry file: None -Scanned: 2016-10-20 12:47:21.928663 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewSmiley/flask-demo. - -volny/flask-openid -https://github.com/volny/flask-openid -Entry file: flask-openid/app/__init__.py -Scanned: 2016-10-20 12:47:29.906713 -No vulnerabilities found. - - -brianbrittain/flask-blog -https://github.com/brianbrittain/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:47:30.470485 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -broschke/flask_api -https://github.com/broschke/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 12:47:35.031682 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -welserjr/Flask_Recaptcha -https://github.com/welserjr/Flask_Recaptcha -Entry file: Flask_Recaptcha/app.py -Scanned: 2016-10-20 12:47:36.471597 -Vulnerability 1: -File: Flask_Recaptcha/app.py - > User input at line 36, trigger word "get(": - comments = session.get('comments', []) -File: Flask_Recaptcha/app.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',comments=comments, form=form) - - - -jearnest88/flask_practice -https://github.com/jearnest88/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 12:47:37.222152 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cbenderust/flask_dev -https://github.com/cbenderust/flask_dev -Entry file: flask_dev/flaskr/flaskr_app/__init__.py -Scanned: 2016-10-20 12:47:37.749989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scagle/Flask-Website -https://github.com/scagle/Flask-Website -Entry file: Flask-Website/hello.py -Scanned: 2016-10-20 12:47:44.070112 -No vulnerabilities found. - - -jfcorsini/testing-flask -https://github.com/jfcorsini/testing-flask -Entry file: None -Scanned: 2016-10-20 12:47:44.614902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josenavarro-famoco/flask-pg -https://github.com/josenavarro-famoco/flask-pg -Entry file: flask-pg/pogo/ext_api.py -Scanned: 2016-10-20 12:47:45.231387 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -apjanco/flask_blog -https://github.com/apjanco/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:47:47.234737 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChaosSoong/python_flask -https://github.com/ChaosSoong/python_flask -Entry file: None -Scanned: 2016-10-20 12:47:51.774989 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ChaosSoong/python_flask. - -mwave1239/Flask_Tutorials -https://github.com/mwave1239/Flask_Tutorials -Entry file: Flask_Tutorials/registration_form/server.py -Scanned: 2016-10-20 12:47:52.467370 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Tutorials/registration_form/venv/lib/python2.7/genericpath.py - -yehiaa/flask-play -https://github.com/yehiaa/flask-play -Entry file: flask-play/app.py -Scanned: 2016-10-20 12:47:56.840940 -No vulnerabilities found. - - -tleskin/microblog-flask -https://github.com/tleskin/microblog-flask -Entry file: None -Scanned: 2016-10-20 12:47:57.846530 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ecfairle/flask_site -https://github.com/ecfairle/flask_site -Entry file: flask_site/mysite.py -Scanned: 2016-10-20 12:47:58.361485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shankj3/flask_version -https://github.com/shankj3/flask_version -Entry file: flask_version/render_with_jinja/render_with_jinja.py -Scanned: 2016-10-20 12:48:02.893459 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neldevfull/flask_api -https://github.com/neldevfull/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 12:48:04.900258 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lanyuan27/flask-web -https://github.com/lanyuan27/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:48:07.414346 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bjgill/flask-testing -https://github.com/bjgill/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-20 12:48:08.918814 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guoweikuang/flask-hello -https://github.com/guoweikuang/flask-hello -Entry file: flask-hello/hello.py -Scanned: 2016-10-20 12:48:10.463519 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -aiden0z/Flask-Thriftclient -https://github.com/aiden0z/Flask-Thriftclient -Entry file: Flask-Thriftclient/tests/thriftclient.py -Scanned: 2016-10-20 12:48:12.776192 -No vulnerabilities found. - - -hputiprawan2/flask-aprt -https://github.com/hputiprawan2/flask-aprt -Entry file: flask-aprt/app.py -Scanned: 2016-10-20 12:48:18.394698 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-aprt/venv/lib/python2.7/genericpath.py - -datasciencemonkey/flask_test -https://github.com/datasciencemonkey/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:48:18.983365 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KittuJain/explore_Flask -https://github.com/KittuJain/explore_Flask -Entry file: explore_Flask/Hello.py -Scanned: 2016-10-20 12:48:20.307927 -No vulnerabilities found. - - -c75/flask-blueprint -https://github.com/c75/flask-blueprint -Entry file: flask-blueprint/api/__init__.py -Scanned: 2016-10-20 12:48:20.821687 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -darbik/flask_fun -https://github.com/darbik/flask_fun -Entry file: flask_fun/blog/flaskr.py -Scanned: 2016-10-20 12:48:22.370470 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -NujjLTD/nujjWebsiteNew -https://github.com/NujjLTD/nujjWebsiteNew -Entry file: None -Scanned: 2016-10-20 12:48:29.393390 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pengxy8/TimeManager -https://github.com/pengxy8/TimeManager -Entry file: None -Scanned: 2016-10-20 12:48:30.949759 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pengxy8/TimeManager. - -vennyk/flask-hello-world -https://github.com/vennyk/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:48:35.545209 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -saifulazad/FlaskLargeApp -https://github.com/saifulazad/FlaskLargeApp -Entry file: FlaskLargeApp/run.py -Scanned: 2016-10-20 12:48:38.616659 -No vulnerabilities found. - - -jpvillavicencio/FlaskSQLAlchemyAPI -https://github.com/jpvillavicencio/FlaskSQLAlchemyAPI -Entry file: FlaskSQLAlchemyAPI/app.py -Scanned: 2016-10-20 12:48:39.942593 -No vulnerabilities found. - - -bradleygolden/cookiecutter-flaskrestful-barebones -https://github.com/bradleygolden/cookiecutter-flaskrestful-barebones -Entry file: cookiecutter-flaskrestful-barebones/{{cookiecutter.project_name}}/app.py -Scanned: 2016-10-20 12:48:40.477231 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -HiiYL/vision-flask-demo -https://github.com/HiiYL/vision-flask-demo -Entry file: None -Scanned: 2016-10-20 12:48:44.021187 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HiiYL/vision-flask-demo. - -yfalcon8/Project_Tracker_Flask -https://github.com/yfalcon8/Project_Tracker_Flask -Entry file: Project_Tracker_Flask/hackbright-web.py -Scanned: 2016-10-20 12:48:45.548444 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -myhro/flask-gunicorn-example -https://github.com/myhro/flask-gunicorn-example -Entry file: flask-gunicorn-example/web.py -Scanned: 2016-10-20 12:48:46.859582 -No vulnerabilities found. - - -brettlangdon/cookiecutter-flask-app -https://github.com/brettlangdon/cookiecutter-flask-app -Entry file: cookiecutter-flask-app/{{cookiecutter.project_name}}/{{cookiecutter.project_name}}/__init__.py -Scanned: 2016-10-20 12:48:52.408456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -heratyian/flask-cat-tinder -https://github.com/heratyian/flask-cat-tinder -Entry file: flask-cat-tinder/app.py -Scanned: 2016-10-20 12:48:54.620762 -No vulnerabilities found. - - -brevno/test_pg_flask -https://github.com/brevno/test_pg_flask -Entry file: test_pg_flask/app/__init__.py -Scanned: 2016-10-20 12:48:56.994117 -Vulnerability 1: -File: test_pg_flask/app/views.py - > User input at line 20, trigger word "form[": - user = User.query.get_or_404(request.form['id']) -Reassigned in: - File: test_pg_flask/app/views.py - > Line 25: user = User(request.form.to_dict()) -File: test_pg_flask/app/views.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify([user.as_dict()]) - - - -yfalcon8/Flask_Intro_Lab -https://github.com/yfalcon8/Flask_Intro_Lab -Entry file: Flask_Intro_Lab/nice.py -Scanned: 2016-10-20 12:48:58.305792 -No vulnerabilities found. - - -yfalcon8/Flask_Job_Application -https://github.com/yfalcon8/Flask_Job_Application -Entry file: Flask_Job_Application/application.py -Scanned: 2016-10-20 12:48:59.600890 -No vulnerabilities found. - - -mwave1239/MySQL-Flask-Examples -https://github.com/mwave1239/MySQL-Flask-Examples -Entry file: MySQL-Flask-Examples/friends/server.py -Scanned: 2016-10-20 12:49:07.148732 -No vulnerabilities found. - - -jksutow/flask_login_reg -https://github.com/jksutow/flask_login_reg -Entry file: flask_login_reg/login.py -Scanned: 2016-10-20 12:49:07.876145 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -FromZeus/python_flask_learning -https://github.com/FromZeus/python_flask_learning -Entry file: python_flask_learning/lesson-02/app/__init__.py -Scanned: 2016-10-20 12:49:08.398591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -knalavadi/project-tracker-flask-felowship -https://github.com/knalavadi/project-tracker-flask-felowship -Entry file: project-tracker-flask-felowship/hackbright-web.py -Scanned: 2016-10-20 12:49:08.900118 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ssmores/20160726_project_tracker_flask -https://github.com/ssmores/20160726_project_tracker_flask -Entry file: 20160726_project_tracker_flask/hackbright-web.py -Scanned: 2016-10-20 12:49:09.414637 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -polarisc8t/HB---project_tracker_flask -https://github.com/polarisc8t/HB---project_tracker_flask -Entry file: HB---project_tracker_flask/hackbright-web.py -Scanned: 2016-10-20 12:49:09.933775 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jen8/Project-Tracker-Flask -https://github.com/jen8/Project-Tracker-Flask -Entry file: Project-Tracker-Flask/hackbright-web.py -Scanned: 2016-10-20 12:49:10.445686 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ElizabethLane/HB-flask-sequel-exercise -https://github.com/ElizabethLane/HB-flask-sequel-exercise -Entry file: HB-flask-sequel-exercise/hackbright-web.py -Scanned: 2016-10-20 12:49:11.964703 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeanhl/HB_SQL_Flask -https://github.com/jeanhl/HB_SQL_Flask -Entry file: HB_SQL_Flask/hackbright-web.py -Scanned: 2016-10-20 12:49:18.499255 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -feistiller/LearnPythonFlask -https://github.com/feistiller/LearnPythonFlask -Entry file: LearnPythonFlask/Demo1HelloWorld.py -Scanned: 2016-10-20 12:49:19.847159 -Vulnerability 1: -File: LearnPythonFlask/Demo4WtfHelloWorld.py - > User input at line 18, trigger word ".data": - name = form.name.data -Reassigned in: - File: LearnPythonFlask/Demo4WtfHelloWorld.py - > Line 15: name = None -File: LearnPythonFlask/Demo4WtfHelloWorld.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('wtfIndex.html',form=form, name=name) - - - -eriknguyen/basic-auth-flask -https://github.com/eriknguyen/basic-auth-flask -Entry file: basic-auth-flask/flask_intro/__init__.py -Scanned: 2016-10-20 12:49:21.270327 -No vulnerabilities found. - - -micaiahparker/startkit-flask-heroku -https://github.com/micaiahparker/startkit-flask-heroku -Entry file: startkit-flask-heroku/app.py -Scanned: 2016-10-20 12:49:22.648866 -No vulnerabilities found. - - -thepomeranian/project-tracker-flask -https://github.com/thepomeranian/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-20 12:49:23.190853 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottx611x/AWS-SNS-Flask -https://github.com/scottx611x/AWS-SNS-Flask -Entry file: AWS-SNS-Flask/recieve_SNS.py -Scanned: 2016-10-20 12:49:30.025760 -No vulnerabilities found. - - -sepihere/flask -https://github.com/sepihere/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:49:32.273677 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Coolwater7/flask -https://github.com/Coolwater7/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:49:35.878483 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -SicunStudio/aunet-flask -https://github.com/SicunStudio/aunet-flask -Entry file: None -Scanned: 2016-10-20 12:49:36.389936 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SicunStudio/aunet-flask. - -afropolymath/papers -https://github.com/afropolymath/papers -Entry file: papers/api/__init__.py -Scanned: 2016-10-20 12:49:40.867023 -Vulnerability 1: -File: papers/api/controllers/files.py - > User input at line 149, trigger word "get(": - parent_id = args.get('parent_id', None) -Reassigned in: - File: papers/api/controllers/files.py - > Line 161: update_fields['tag'] = parent_id == '0'g.file['id']'{}#{}'.format(folder_access['tag'], folder['last_index']) - File: papers/api/controllers/files.py - > Line 166: update_fields['parent_id'] = parent_id - File: papers/api/controllers/files.py - > Line 152: update_fields['name'] = name -File: papers/api/controllers/files.py - > reaches line 156, trigger word "filter(": - folder_access = Folder.filter('id''creator'parent_iduser_id) - - - -munendrasn/Flaskr -https://github.com/munendrasn/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:49:41.451750 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Eyali1001/flaskcalculator -https://github.com/Eyali1001/flaskcalculator -Entry file: flaskcalculator/calculator.py -Scanned: 2016-10-20 12:49:45.748653 -Vulnerability 1: -File: flaskcalculator/calculator.py - > User input at line 14, trigger word "form[": - result = int(request.form['title']) + int(request.form['text']) -File: flaskcalculator/calculator.py - > reaches line 15, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultpage.html',result=result) - - - -penglee87/flaskr -https://github.com/penglee87/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:49:46.265771 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pecone/flaskr -https://github.com/pecone/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:49:46.783474 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lechain/flaskr -https://github.com/lechain/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:49:48.286521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fiezwang/flasky -https://github.com/fiezwang/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:49:48.808369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -swdmike/flasky -https://github.com/swdmike/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:49:53.371896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChuckiePae/flaskr -https://github.com/ChuckiePae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:49:53.886851 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:49:56.394466 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-20 12:49:57.907093 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -Unknown22/Flaskr -https://github.com/Unknown22/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 12:49:59.410787 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:50:00.919601 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lux600/flasktest -https://github.com/lux600/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:50:08.502876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sagaragarwal94/flask-site-builder -https://github.com/sagaragarwal94/flask-site-builder -Entry file: flask-site-builder/sitebuilder.py -Scanned: 2016-10-20 12:50:09.021314 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Melvie/FlaskLearns -https://github.com/Melvie/FlaskLearns -Entry file: None -Scanned: 2016-10-20 12:50:09.519514 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Leon14451/FlaskMultisite -https://github.com/Leon14451/FlaskMultisite -Entry file: FlaskMultisite/wwwroot/__init__.py -Scanned: 2016-10-20 12:50:10.853255 -No vulnerabilities found. - - -laketiticaca/FlaskApp -https://github.com/laketiticaca/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:50:11.433854 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rssenar/FlaskApp -https://github.com/rssenar/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:50:12.004134 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nenodias/flask-webservice -https://github.com/nenodias/flask-webservice -Entry file: flask-webservice/app.py -Scanned: 2016-10-20 12:50:19.856167 -Vulnerability 1: -File: flask-webservice/app.py - > User input at line 32, trigger word "get(": - dev = Developer(request.json.name, request.json.get('hireDate', ''), request.json.get('focus', '')) -File: flask-webservice/app.py - > reaches line 35, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('developer'dev), 201) - -Vulnerability 2: -File: flask-webservice/app.py - > User input at line 45, trigger word "get(": - dev = Developer.query.get(id) -Reassigned in: - File: flask-webservice/app.py - > Line 46: dev.name = request.json.get('name', dev.name) - File: flask-webservice/app.py - > Line 47: dev.hireDate = request.json.get('hireDate', dev.name) - File: flask-webservice/app.py - > Line 48: dev.focus = request.json.get('focus', dev.focus) -File: flask-webservice/app.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('dev'dev) - - - -StrGlee/flask-demo -https://github.com/StrGlee/flask-demo -Entry file: None -Scanned: 2016-10-20 12:50:20.397908 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StrGlee/flask-demo. - -rconnol/PromotionsFlask -https://github.com/rconnol/PromotionsFlask -Entry file: PromotionsFlask/app/__init__.py -Scanned: 2016-10-20 12:50:21.700560 -No vulnerabilities found. - - -dschmaryl/golf-flask -https://github.com/dschmaryl/golf-flask -Entry file: golf-flask/stats.py -Scanned: 2016-10-20 12:50:23.240429 -No vulnerabilities found. - - -Dudeguy409/flask_demo -https://github.com/Dudeguy409/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:50:23.784139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -1572766337/py_flask -https://github.com/1572766337/py_flask -Entry file: py_flask/app/__init__.py -Scanned: 2016-10-20 12:50:30.991749 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -letterli/Flask-blog -https://github.com/letterli/Flask-blog -Entry file: Flask-blog/app/__init__.py -Scanned: 2016-10-20 12:50:32.516031 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -srinivasb07/Flask_Sample -https://github.com/srinivasb07/Flask_Sample -Entry file: Flask_Sample/app.py -Scanned: 2016-10-20 12:50:36.107872 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Jollyhrothgar/flask_template -https://github.com/Jollyhrothgar/flask_template -Entry file: None -Scanned: 2016-10-20 12:50:36.617685 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jollyhrothgar/flask_template. - -apengok/flask_tutor -https://github.com/apengok/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-20 12:50:40.123658 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ArioShaman/flask-site -https://github.com/ArioShaman/flask-site -Entry file: None -Scanned: 2016-10-20 12:50:41.659651 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ibrewdudes/flask-server -https://github.com/ibrewdudes/flask-server -Entry file: None -Scanned: 2016-10-20 12:50:45.178652 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ibrewdudes/flask-server. - -hackrole/flask_demo -https://github.com/hackrole/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 12:50:46.701840 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YeongjinOh/flask_pratice -https://github.com/YeongjinOh/flask_pratice -Entry file: flask_pratice/app/__init__.py -Scanned: 2016-10-20 12:50:48.136832 -No vulnerabilities found. - - -DylanVerstraete/ItsyouonlineFlask -https://github.com/DylanVerstraete/ItsyouonlineFlask -Entry file: ItsyouonlineFlask/itsyouonline-flask/ItsYouOnlineServer/app.py -Scanned: 2016-10-20 12:50:55.610944 -No vulnerabilities found. - - -jauschalley/flask_practice -https://github.com/jauschalley/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 12:50:56.278646 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jubjub55/flask_test -https://github.com/jubjub55/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 12:50:56.850627 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sourav2406/learnFlask -https://github.com/sourav2406/learnFlask -Entry file: None -Scanned: 2016-10-20 12:50:57.388700 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sourav2406/learnFlask. - -chrisco/flask-demo -https://github.com/chrisco/flask-demo -Entry file: None -Scanned: 2016-10-20 12:50:57.901638 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chrisco/flask-demo. - -aripddev/cms_flask -https://github.com/aripddev/cms_flask -Entry file: cms_flask/app/__init__.py -Scanned: 2016-10-20 12:51:05.371087 -Vulnerability 1: -File: cms_flask/app/core/controllers.py - > User input at line 76, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 83: ret_MAYBE_FUNCTION_NAME = render_template('contact.html',form=form) - File: cms_flask/app/core/controllers.py - > Line 80: ret_MAYBE_FUNCTION_NAME = abort(400) -File: cms_flask/app/core/controllers.py - > reaches line 82, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 2: -File: cms_flask/app/core/controllers.py - > User input at line 76, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 83: ret_MAYBE_FUNCTION_NAME = render_template('contact.html',form=form) - File: cms_flask/app/core/controllers.py - > Line 80: ret_MAYBE_FUNCTION_NAME = abort(400) -File: cms_flask/app/core/controllers.py - > reaches line 82, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 3: -File: cms_flask/app/core/controllers.py - > User input at line 94, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 96: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 97, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.show.html',post=post) - -Vulnerability 4: -File: cms_flask/app/core/controllers.py - > User input at line 120, trigger word "form[": - post = Post(headline=request.form['headline'], subheadline=request.form['subheadline'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 114: ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.new.html') - File: cms_flask/app/core/controllers.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_new')) -File: cms_flask/app/core/controllers.py - > reaches line 124, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 5: -File: cms_flask/app/core/controllers.py - > User input at line 120, trigger word "form[": - post = Post(headline=request.form['headline'], subheadline=request.form['subheadline'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 114: ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.new.html') - File: cms_flask/app/core/controllers.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_new')) -File: cms_flask/app/core/controllers.py - > reaches line 124, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 6: -File: cms_flask/app/core/controllers.py - > User input at line 129, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 131: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 132, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/post.edit.html',post=post) - -Vulnerability 7: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 143, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 8: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 143, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 9: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 150, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 10: -File: cms_flask/app/core/controllers.py - > User input at line 137, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 139: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 150, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_post_edit',id=post.id)) - -Vulnerability 11: -File: cms_flask/app/core/controllers.py - > User input at line 161, trigger word "get(": - category = Category.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 163: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 165, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.show.html',category=category, posts=posts) - -Vulnerability 12: -File: cms_flask/app/core/controllers.py - > User input at line 172, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 174: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('page.show.html',page=page) - -Vulnerability 13: -File: cms_flask/app/core/controllers.py - > User input at line 193, trigger word "form[": - page = Page(title=request.form['title'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.new.html') - File: cms_flask/app/core/controllers.py - > Line 191: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_new')) -File: cms_flask/app/core/controllers.py - > reaches line 197, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 14: -File: cms_flask/app/core/controllers.py - > User input at line 193, trigger word "form[": - page = Page(title=request.form['title'], body=request.form['body']) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 187: ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.new.html') - File: cms_flask/app/core/controllers.py - > Line 191: ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_new')) -File: cms_flask/app/core/controllers.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 15: -File: cms_flask/app/core/controllers.py - > User input at line 202, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 204: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/page.edit.html',page=page) - -Vulnerability 16: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 216, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 17: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 216, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 18: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 222, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 19: -File: cms_flask/app/core/controllers.py - > User input at line 210, trigger word "get(": - page = Page.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 212: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 222, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_page_edit',id=page.id)) - -Vulnerability 20: -File: cms_flask/app/core/controllers.py - > User input at line 249, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 251: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 252, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/user.edit.html',user=user) - -Vulnerability 21: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 263, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_edit',id=user.id)) - -Vulnerability 22: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 263, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_edit',id=user.id)) - -Vulnerability 23: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 269, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_show',id=user.id)) - -Vulnerability 24: -File: cms_flask/app/core/controllers.py - > User input at line 257, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 259: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 269, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('admin_user_show',id=user.id)) - -Vulnerability 25: -File: cms_flask/app/core/controllers.py - > User input at line 274, trigger word "get(": - user = User.query.get(id) -Reassigned in: - File: cms_flask/app/core/controllers.py - > Line 276: ret_MAYBE_FUNCTION_NAME = abort(404) -File: cms_flask/app/core/controllers.py - > reaches line 277, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/admin/user.show.html',user=user) - - - -northwestyam/flask_hello -https://github.com/northwestyam/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-20 12:51:06.042027 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibhan88/Flask-Testing -https://github.com/ibhan88/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:51:06.561442 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -titov-andrei/microblog-flask -https://github.com/titov-andrei/microblog-flask -Entry file: None -Scanned: 2016-10-20 12:51:09.108775 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -glenpadua/flask-blog -https://github.com/glenpadua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:51:09.653987 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -juliuskrah/flask-blog -https://github.com/juliuskrah/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:51:10.206969 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -elthran/flask-game -https://github.com/elthran/flask-game -Entry file: flask-game/flask-intro/app.py -Scanned: 2016-10-20 12:51:17.749720 -No vulnerabilities found. - - -ChaosSoong/python_flask -https://github.com/ChaosSoong/python_flask -Entry file: None -Scanned: 2016-10-20 12:51:18.742016 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ChaosSoong/python_flask. - -TheDeadMays/flask-bootstrap -https://github.com/TheDeadMays/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-20 12:51:20.584199 -No vulnerabilities found. - - -whitneybelba/Flask-Testing -https://github.com/whitneybelba/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:51:21.111656 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MadhuriHB/Testing-flask -https://github.com/MadhuriHB/Testing-flask -Entry file: Testing-flask/party.py -Scanned: 2016-10-20 12:51:21.635800 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -langep/flask-template -https://github.com/langep/flask-template -Entry file: None -Scanned: 2016-10-20 12:51:23.984357 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/langep/flask-template. - -tuvttran/flask-learning -https://github.com/tuvttran/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-20 12:51:25.313158 -No vulnerabilities found. - - -couldtt/flask-foundation -https://github.com/couldtt/flask-foundation -Entry file: flask-foundation/app/__init__.py -Scanned: 2016-10-20 12:51:31.421959 -No vulnerabilities found. - - -haithamslaibi/Flask_Template -https://github.com/haithamslaibi/Flask_Template -Entry file: Flask_Template/web_app.py -Scanned: 2016-10-20 12:51:32.805267 -No vulnerabilities found. - - -XiongZhijun/simple-flask -https://github.com/XiongZhijun/simple-flask -Entry file: simple-flask/app/app.py -Scanned: 2016-10-20 12:51:34.256843 -Vulnerability 1: -File: simple-flask/app/auth/views.py - > User input at line 16, trigger word ".data": - user = User.query.filter(or_(User.username == form.username.data)).first() -File: simple-flask/app/auth/views.py - > reaches line 16, trigger word "filter(": - user = User.query.filter(or_(User.username == form.username.data)).first() - - - -lanyuan27/flask-web -https://github.com/lanyuan27/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:51:36.808796 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -italomaia/flask-rev -https://github.com/italomaia/flask-rev -Entry file: flask-rev/tests/runtests.py -Scanned: 2016-10-20 12:51:38.341293 -No vulnerabilities found. - - -ckaren28/python-Flask -https://github.com/ckaren28/python-Flask -Entry file: python-Flask/PYTHON_FLASK/friends/server.py -Scanned: 2016-10-20 12:51:41.057302 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: python-Flask/PYTHON_FLASK/friends/venv/lib/python2.7/genericpath.py - -ssong319/Flask-Testing -https://github.com/ssong319/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:51:42.578607 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrb101/Flask-Sauce -https://github.com/mrb101/Flask-Sauce -Entry file: Flask-Sauce/app/__init__.py -Scanned: 2016-10-20 12:51:47.158473 -No vulnerabilities found. - - -mattalat/flask-microblog -https://github.com/mattalat/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:51:47.676162 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yehe01/minitwit-mongo -https://github.com/yehe01/minitwit-mongo -Entry file: minitwit-mongo/minitwit/main.py -Scanned: 2016-10-20 12:51:49.099326 -No vulnerabilities found. - - -pythonbean/microblog -https://github.com/pythonbean/microblog -Entry file: None -Scanned: 2016-10-20 12:51:49.637411 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vseeker/app -https://github.com/vseeker/app -Entry file: app/__init__.py -Scanned: 2016-10-20 12:51:56.957861 -No vulnerabilities found. - - -redtreelchao/microblog -https://github.com/redtreelchao/microblog -Entry file: None -Scanned: 2016-10-20 12:51:57.693872 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -katiayx/hblab_0805_Testing-Balloonicorn-After-Party -https://github.com/katiayx/hblab_0805_Testing-Balloonicorn-After-Party -Entry file: hblab_0805_Testing-Balloonicorn-After-Party/party.py -Scanned: 2016-10-20 12:51:58.212570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iverstraeten/headlines -https://github.com/iverstraeten/headlines -Entry file: headlines/headlines.py -Scanned: 2016-10-20 12:51:58.755434 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Mizzlr/FlaskWebApp -https://github.com/Mizzlr/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-20 12:51:59.273440 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MusaTamzid05/FlaskYoutubeTest -https://github.com/MusaTamzid05/FlaskYoutubeTest -Entry file: None -Scanned: 2016-10-20 12:52:06.904526 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MusaTamzid05/FlaskYoutubeTest. - -ApexMuse/FlaskWebDevelopmentPractice -https://github.com/ApexMuse/FlaskWebDevelopmentPractice -Entry file: FlaskWebDevelopmentPractice/extensions.py -Scanned: 2016-10-20 12:52:08.213414 -No vulnerabilities found. - - -brizow/FlaskTriviaApp -https://github.com/brizow/FlaskTriviaApp -Entry file: FlaskTriviaApp/FlaskWebProject1/__init__.py -Scanned: 2016-10-20 12:52:12.684043 -Vulnerability 1: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 37, trigger word "form[": - question = request.form['question'] -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = render_template('CreateQuestion.html',title='Create a question', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('CreatedQuestion.html',question=question, title='Thanks!', year=year) - -Vulnerability 2: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 56, trigger word "get(": - question = r.get(title + ':question') -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - -Vulnerability 3: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 60, trigger word "form[": - submittedAnswer = request.form['submittedAnswer'] -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - -Vulnerability 4: -File: FlaskTriviaApp/FlaskWebProject1/views.py - > User input at line 62, trigger word "get(": - answer = r.get(title + ':answer') -Reassigned in: - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = '

Invalid Request

' - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('AnswerQuestion.html',question=question, title='Answer Question', year=year) - File: FlaskTriviaApp/FlaskWebProject1/views.py - > Line 64: ret_MAYBE_FUNCTION_NAME = render_template('Correct.html',title='Good job!', year=year) -File: FlaskTriviaApp/FlaskWebProject1/views.py - > reaches line 66, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('Incorrect.html',submittedAnswer=submittedAnswer, answer=answer, title='Oh noes!', year=year) - - - -Chi-Qingjun/FlaskWechatDev -https://github.com/Chi-Qingjun/FlaskWechatDev -Entry file: FlaskWechatDev/app/__init__.py -Scanned: 2016-10-20 12:52:14.115808 -Vulnerability 1: -File: FlaskWechatDev/app/main/views.py - > User input at line 30, trigger word ".data": - tree = ET.fromstring(request.data.decode('utf-8')) -File: FlaskWechatDev/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('text.xml',to_user_name=tree.find('FromUserName').text, from_user_name=tree.find('ToUserName').text, timestamp=datetime.utcnow().timestamp(), content=tree.find('Content').text) - - - -lindsaynchan/hb_flask_testing -https://github.com/lindsaynchan/hb_flask_testing -Entry file: hb_flask_testing/party.py -Scanned: 2016-10-20 12:52:14.649168 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -simsinght/microblog_flask_tutorial -https://github.com/simsinght/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 12:52:20.018206 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -measurigtime/flask-by-example -https://github.com/measurigtime/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 12:52:20.694083 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Anthonyhawkins/flask_megatutorial_lab -https://github.com/Anthonyhawkins/flask_megatutorial_lab -Entry file: flask_megatutorial_lab/app/__init__.py -Scanned: 2016-10-20 12:52:22.006738 -No vulnerabilities found. - - -beatricep/hblab_0805_testing-flask -https://github.com/beatricep/hblab_0805_testing-flask -Entry file: hblab_0805_testing-flask/party.py -Scanned: 2016-10-20 12:52:22.531132 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottx611x/AWS-SNS-Flask -https://github.com/scottx611x/AWS-SNS-Flask -Entry file: AWS-SNS-Flask/recieve_SNS.py -Scanned: 2016-10-20 12:52:24.277492 -No vulnerabilities found. - - -daniellawrence/flask-rest-sqla -https://github.com/daniellawrence/flask-rest-sqla -Entry file: flask-rest-sqla/web.py -Scanned: 2016-10-20 12:52:24.802000 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -12DReflections/docker_flask_mdb -https://github.com/12DReflections/docker_flask_mdb -Entry file: docker_flask_mdb/app.py -Scanned: 2016-10-20 12:52:26.105510 -No vulnerabilities found. - - -yucealiosman1/flask-deneme1 -https://github.com/yucealiosman1/flask-deneme1 -Entry file: flask-deneme1/app.py -Scanned: 2016-10-20 12:52:31.679397 -No vulnerabilities found. - - -vecelo/flask_lear_proj -https://github.com/vecelo/flask_lear_proj -Entry file: flask_lear_proj/blogs/Lib/site-packages/flask-0.11.1-py2.7.egg/flask/sessions.py -Scanned: 2016-10-20 12:52:39.088618 -No vulnerabilities found. - - -dinhnv/nginx-flask-stub -https://github.com/dinhnv/nginx-flask-stub -Entry file: nginx-flask-stub/webapp/eanstub_app.py -Scanned: 2016-10-20 12:52:40.604651 -No vulnerabilities found. - - -tinapastelero/HB-flask-test -https://github.com/tinapastelero/HB-flask-test -Entry file: HB-flask-test/party.py -Scanned: 2016-10-20 12:52:41.129819 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -laurelkorwin/hb-flask-testing -https://github.com/laurelkorwin/hb-flask-testing -Entry file: hb-flask-testing/party.py -Scanned: 2016-10-20 12:52:41.697162 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lgorham/flask_testing_0805 -https://github.com/lgorham/flask_testing_0805 -Entry file: flask_testing_0805/party.py -Scanned: 2016-10-20 12:52:42.218986 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eugenepark81/flask-hello-world -https://github.com/eugenepark81/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 12:52:42.785356 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -NexusRJ/react_flask_blog -https://github.com/NexusRJ/react_flask_blog -Entry file: react_flask_blog/app/__init__.py -Scanned: 2016-10-20 12:52:47.713949 -Vulnerability 1: -File: react_flask_blog/app/admin/views.py - > User input at line 102, trigger word "get(": - x = Article.query.filter_by(id=request.args.get('id')).first() -File: react_flask_blog/app/admin/views.py - > reaches line 106, trigger word "flash(": - flash('已删除' + x.title) - - - -stonewm/flask_by_example -https://github.com/stonewm/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-20 12:52:48.419540 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_by_example/venv/lib/python3.5/struct.py - -thechutrain/flask-burrito-app -https://github.com/thechutrain/flask-burrito-app -Entry file: flask-burrito-app/tacocat.py -Scanned: 2016-10-20 12:52:48.952554 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jordanagreen/flask-todo-lists -https://github.com/jordanagreen/flask-todo-lists -Entry file: flask-todo-lists/app.py -Scanned: 2016-10-20 12:52:51.390555 -Vulnerability 1: -File: flask-todo-lists/views.py - > User input at line 24, trigger word "get(": - l = TodoList.query.get(id) -File: flask-todo-lists/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('list.html',title=l.title, list=l) - -Vulnerability 2: -File: flask-todo-lists/views.py - > User input at line 45, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-todo-lists/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = abort(400) -File: flask-todo-lists/views.py - > reaches line 48, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 3: -File: flask-todo-lists/views.py - > User input at line 45, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-todo-lists/views.py - > Line 49: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('login.html',title='Sign in', form=form) - File: flask-todo-lists/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = abort(400) -File: flask-todo-lists/views.py - > reaches line 48, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - - - -Coolwater7/flask -https://github.com/Coolwater7/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:52:59.781910 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -KeyJia/Flask -https://github.com/KeyJia/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:53:00.286335 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yangliu2/flask -https://github.com/yangliu2/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:53:00.857822 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tis86/flask -https://github.com/tis86/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:53:07.474175 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -vipitsoft/flask -https://github.com/vipitsoft/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:53:08.043072 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -reed-chi/flask -https://github.com/reed-chi/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:53:10.614662 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -huhjuang/Flask -https://github.com/huhjuang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:53:14.129406 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mosquito/flask-example -https://github.com/mosquito/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-20 12:53:16.133390 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -teuton0215/microblog -https://github.com/teuton0215/microblog -Entry file: None -Scanned: 2016-10-20 12:53:18.649989 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -babydeya/flaskr -https://github.com/babydeya/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:53:19.145283 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rouzazari/flaskangular -https://github.com/rouzazari/flaskangular -Entry file: flaskangular/app/__init__.py -Scanned: 2016-10-20 12:53:21.594318 -No vulnerabilities found. - - -nocotan/flaski -https://github.com/nocotan/flaski -Entry file: flaski/app.py -Scanned: 2016-10-20 12:53:23.035238 -No vulnerabilities found. - - -berezovskiydenis/flasktaskr -https://github.com/berezovskiydenis/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:53:23.550929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -penglee87/flaskr -https://github.com/penglee87/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:53:24.052842 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rouzazari/flaskfirst -https://github.com/rouzazari/flaskfirst -Entry file: flaskfirst/app/__init__.py -Scanned: 2016-10-20 12:53:26.478581 -No vulnerabilities found. - - -smilemlz/flasktest -https://github.com/smilemlz/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 12:53:26.993806 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Runningdogs/flasky -https://github.com/Runningdogs/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:53:31.511208 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -YaleYeah/flasky -https://github.com/YaleYeah/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:53:33.010857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -seizans/flasko -https://github.com/seizans/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-20 12:53:40.680698 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -faridalrafi/flaskopencv -https://github.com/faridalrafi/flaskopencv -Entry file: flaskopencv/app.py -Scanned: 2016-10-20 12:53:41.191767 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -pecone/flaskr -https://github.com/pecone/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:53:41.690047 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bencelder/flaskr -https://github.com/bencelder/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:53:43.202846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChuckiePae/flaskr -https://github.com/ChuckiePae/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:53:43.718015 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -KamiNoSierhej/flaskkk -https://github.com/KamiNoSierhej/flaskkk -Entry file: flaskkk/flaskkk/Polczan.py -Scanned: 2016-10-20 12:53:47.246251 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sampathweb/ml-cookiecutter-starter-flask-app -https://github.com/sampathweb/ml-cookiecutter-starter-flask-app -Entry file: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/__init__.py -Scanned: 2016-10-20 12:53:50.436305 -Vulnerability 1: -File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > User input at line 32, trigger word ".data": - submitted_data = form.data -Reassigned in: - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 36: sepal_length = float(submitted_data['sepal_length']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 37: sepal_width = float(submitted_data['sepal_width']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 38: petal_length = float(submitted_data['petal_length']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 39: petal_width = float(submitted_data['petal_width']) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 42: flower_instance = [sepal_length, sepal_width, petal_length, petal_width] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 47: my_predictions = estimator.predict([flower_instance]) - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 50: my_prediction = my_predictions[0] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 54: data = [flower_instance] - File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > Line 28: data = [] -File: ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, prediction=predicted_iris, data=json.dumps(data)) - - - -roemhildtg/flask-can-crud -https://github.com/roemhildtg/flask-can-crud -Entry file: flask-can-crud/flaskapp.py -Scanned: 2016-10-20 12:53:54.638647 -No vulnerabilities found. - - -thippo/FlaskFrame -https://github.com/thippo/FlaskFrame -Entry file: FlaskFrame/myweb/__init__.py -Scanned: 2016-10-20 12:53:56.309129 -Vulnerability 1: -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > User input at line 12, trigger word ".data": - data = form.q.data.strip() -Reassigned in: - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 18: transfer_dict['pkuc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 19: transfer_dict['pkc'] = utils.WIF_to_compressed(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 20: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 21: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 22: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 24: transfer_dict['type'] = 1 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 25: transfer_dict['pkc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 26: transfer_dict['pkuc'] = utils.compressed_to_WIF(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 27: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 28: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 29: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 34: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 36: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 38: transfer_dict['type'] = 0 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('bitcoin',transfer_dict=transfer_dict, form=form) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 14: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 17: transfer_dict['type'] = 1 -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bitcoinaddress',data=data, form=form) - - - -omokehinde/FlaskExam -https://github.com/omokehinde/FlaskExam -Entry file: FlaskExam/app.py -Scanned: 2016-10-20 12:53:59.801322 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -famesprinter/FlaskDemo -https://github.com/famesprinter/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 12:54:00.315895 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fantingdong/flasky1 -https://github.com/fantingdong/flasky1 -Entry file: flasky1/app/__init__.py -Scanned: 2016-10-20 12:54:01.933597 -Vulnerability 1: -File: flasky1/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 55: posts = pagination.items - File: flasky1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flasky1/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky1/app/main/views.py - > Line 45: show_followed = False - File: flasky1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flasky1/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 67: posts = pagination.items -File: flasky1/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flasky1/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky1/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 134: comments = pagination.items - File: flasky1/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky1/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flasky1/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky1/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flasky1/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky1/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky1/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flasky1/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/main/views.py - > Line 246: comments = pagination.items -File: flasky1/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flasky1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky1/app/api_1_0/users.py - > Line 23: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flasky1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky1/app/api_1_0/users.py - > Line 46: next = None -File: flasky1/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flasky1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky1/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flasky1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flasky1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky1/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jmelchio/FlaskCF -https://github.com/jmelchio/FlaskCF -Entry file: FlaskCF/FlaskCF.py -Scanned: 2016-10-20 12:54:03.264742 -No vulnerabilities found. - - -lidingke/flaskStudy -https://github.com/lidingke/flaskStudy -Entry file: flaskStudy/user/app/__init__.py -Scanned: 2016-10-20 12:54:04.686064 -No vulnerabilities found. - - -xyq946692052/flaskLearn -https://github.com/xyq946692052/flaskLearn -Entry file: None -Scanned: 2016-10-20 12:54:08.225218 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xyq946692052/flaskLearn. - -wccosby/flaskML -https://github.com/wccosby/flaskML -Entry file: flaskML/app/__init__.py -Scanned: 2016-10-20 12:54:10.180146 -Vulnerability 1: -File: flaskML/app/views.py - > User input at line 32, trigger word ".data": - submitted_data = form.data -Reassigned in: - File: flaskML/app/views.py - > Line 36: sepal_length = float(submitted_data['sepal_length']) - File: flaskML/app/views.py - > Line 37: sepal_width = float(submitted_data['sepal_width']) - File: flaskML/app/views.py - > Line 38: petal_length = float(submitted_data['petal_length']) - File: flaskML/app/views.py - > Line 39: petal_width = float(submitted_data['petal_width']) - File: flaskML/app/views.py - > Line 42: flower_instance = [sepal_length, sepal_width, petal_length, petal_width] - File: flaskML/app/views.py - > Line 47: my_predictions = estimator.predict([flower_instance]) - File: flaskML/app/views.py - > Line 50: my_prediction = my_predictions[0] - File: flaskML/app/views.py - > Line 54: data = [flower_instance] - File: flaskML/app/views.py - > Line 28: data = [] -File: flaskML/app/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, prediction=predicted_iris, data=json.dumps(data)) - - - -nenodias/flask-webservice -https://github.com/nenodias/flask-webservice -Entry file: flask-webservice/app.py -Scanned: 2016-10-20 12:54:11.613711 -Vulnerability 1: -File: flask-webservice/app.py - > User input at line 32, trigger word "get(": - dev = Developer(request.json.name, request.json.get('hireDate', ''), request.json.get('focus', '')) -File: flask-webservice/app.py - > reaches line 35, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('developer'dev), 201) - -Vulnerability 2: -File: flask-webservice/app.py - > User input at line 45, trigger word "get(": - dev = Developer.query.get(id) -Reassigned in: - File: flask-webservice/app.py - > Line 46: dev.name = request.json.get('name', dev.name) - File: flask-webservice/app.py - > Line 47: dev.hireDate = request.json.get('hireDate', dev.name) - File: flask-webservice/app.py - > Line 48: dev.focus = request.json.get('focus', dev.focus) -File: flask-webservice/app.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('dev'dev) - - - -StrGlee/flask-demo -https://github.com/StrGlee/flask-demo -Entry file: None -Scanned: 2016-10-20 12:54:14.134705 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StrGlee/flask-demo. - -petersowa/flask_blog -https://github.com/petersowa/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:54:14.646062 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SachinMaharana/firstapp-flask -https://github.com/SachinMaharana/firstapp-flask -Entry file: firstapp-flask/hello.py -Scanned: 2016-10-20 12:54:16.975316 -No vulnerabilities found. - - -Maoao530/flask-todo -https://github.com/Maoao530/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-20 12:54:19.528386 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -remarkablemark/flask-template -https://github.com/remarkablemark/flask-template -Entry file: None -Scanned: 2016-10-20 12:54:20.036979 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/remarkablemark/flask-template. - -Nakort/flask_workouts -https://github.com/Nakort/flask_workouts -Entry file: flask_workouts/app/__init__.py -Scanned: 2016-10-20 12:54:22.363844 -No vulnerabilities found. - - -xuqi1987/21.Flask -https://github.com/xuqi1987/21.Flask -Entry file: None -Scanned: 2016-10-20 12:54:22.938107 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DaoQiu/flask_tutorial -https://github.com/DaoQiu/flask_tutorial -Entry file: None -Scanned: 2016-10-20 12:54:24.448793 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -askz/flask-sandbox -https://github.com/askz/flask-sandbox -Entry file: flask-sandbox/quickstart/helloworld.py -Scanned: 2016-10-20 12:54:24.951492 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Coolwater7/Flask_sample -https://github.com/Coolwater7/Flask_sample -Entry file: Flask_sample/app/__init__.py -Scanned: 2016-10-20 12:54:26.506198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -janreyho/flask-demo -https://github.com/janreyho/flask-demo -Entry file: None -Scanned: 2016-10-20 12:54:27.023556 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janreyho/flask-demo. - -saeveritt/flask-DHT -https://github.com/saeveritt/flask-DHT -Entry file: flask-DHT/DHT-web.py -Scanned: 2016-10-20 12:54:32.564543 -No vulnerabilities found. - - -rconnol/PromotionsFlask -https://github.com/rconnol/PromotionsFlask -Entry file: PromotionsFlask/app/__init__.py -Scanned: 2016-10-20 12:54:33.868413 -No vulnerabilities found. - - -kwin-wang/flask-learn -https://github.com/kwin-wang/flask-learn -Entry file: flask-learn/hello.py -Scanned: 2016-10-20 12:54:42.507406 -Vulnerability 1: -File: flask-learn/hello.py - > User input at line 52, trigger word "get(": - msg = Message(app.config.get('FLASKY_MAIL_SUBJECT_PREFIX') + subject,sender=app.config.get('FLASKY_MAIL_SENDER'), recipients=[to]) -File: flask-learn/hello.py - > reaches line 54, trigger word "render_template(": - msg.body = render_template(template + '.txt',kwargs) - -Vulnerability 2: -File: flask-learn/hello.py - > User input at line 52, trigger word "get(": - msg = Message(app.config.get('FLASKY_MAIL_SUBJECT_PREFIX') + subject,sender=app.config.get('FLASKY_MAIL_SENDER'), recipients=[to]) -File: flask-learn/hello.py - > reaches line 55, trigger word "render_template(": - msg.html = render_template(template + '.html',kwargs) - - - -shtakai/flask-first -https://github.com/shtakai/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-20 12:54:43.044596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PlasmaSheep/flask-bug -https://github.com/PlasmaSheep/flask-bug -Entry file: None -Scanned: 2016-10-20 12:54:43.568666 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/PlasmaSheep/flask-bug. - -Jollyhrothgar/flask_template -https://github.com/Jollyhrothgar/flask_template -Entry file: None -Scanned: 2016-10-20 12:54:44.080168 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Jollyhrothgar/flask_template. - -apengok/flask_tutor -https://github.com/apengok/flask_tutor -Entry file: flask_tutor/tmp/main.py -Scanned: 2016-10-20 12:54:44.573638 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -minodes/flask_boilerplate -https://github.com/minodes/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-20 12:54:48.125199 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -guoqiao/flask-examples -https://github.com/guoqiao/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 12:54:51.132280 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ibhan88/Flask-Testing -https://github.com/ibhan88/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:54:55.643570 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -titov-andrei/microblog-flask -https://github.com/titov-andrei/microblog-flask -Entry file: None -Scanned: 2016-10-20 12:54:58.176691 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -anthonyheidenreich/flask-vagrant -https://github.com/anthonyheidenreich/flask-vagrant -Entry file: flask-vagrant/app.py -Scanned: 2016-10-20 12:55:01.635870 -No vulnerabilities found. - - -r0oki3/flask-webapp -https://github.com/r0oki3/flask-webapp -Entry file: flask-webapp/app.py -Scanned: 2016-10-20 12:55:02.969956 -No vulnerabilities found. - - -znebby/ubuntu-flask -https://github.com/znebby/ubuntu-flask -Entry file: ubuntu-flask/myproject/myproject.py -Scanned: 2016-10-20 12:55:04.282688 -No vulnerabilities found. - - -Muazzama/flask_app -https://github.com/Muazzama/flask_app -Entry file: None -Scanned: 2016-10-20 12:55:04.837730 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Muazzama/flask_app. - -tjctw/flask_intro -https://github.com/tjctw/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-20 12:55:08.353732 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -wouzar/flask-microblog -https://github.com/wouzar/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:55:08.872860 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DanielQujun/flask-web -https://github.com/DanielQujun/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:55:14.941603 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kzh4ng/flask_server -https://github.com/kzh4ng/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-20 12:55:15.461467 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -uisky/flask-fish -https://github.com/uisky/flask-fish -Entry file: flask-fish/skel/app/app.py -Scanned: 2016-10-20 12:55:16.970250 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -glenpadua/flask-blog -https://github.com/glenpadua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:55:20.528801 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -buzibu/flask-blog -https://github.com/buzibu/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:55:21.079919 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bgiesa/flask-test -https://github.com/bgiesa/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:55:21.604284 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -neoden/flask-nmail -https://github.com/neoden/flask-nmail -Entry file: flask-nmail/flask-nmail.py -Scanned: 2016-10-20 12:55:24.033610 -No vulnerabilities found. - - -vThaian/flask_example -https://github.com/vThaian/flask_example -Entry file: None -Scanned: 2016-10-20 12:55:24.548391 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -whitneybelba/Flask-Testing -https://github.com/whitneybelba/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:55:25.048793 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MadhuriHB/Testing-flask -https://github.com/MadhuriHB/Testing-flask -Entry file: Testing-flask/party.py -Scanned: 2016-10-20 12:55:26.561981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -couldtt/flask-foundation -https://github.com/couldtt/flask-foundation -Entry file: flask-foundation/app/__init__.py -Scanned: 2016-10-20 12:55:32.824806 -No vulnerabilities found. - - -TheDeadMays/flask-bootstrap -https://github.com/TheDeadMays/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-20 12:55:34.142310 -No vulnerabilities found. - - -tuvttran/flask-learning -https://github.com/tuvttran/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-20 12:55:42.634634 -No vulnerabilities found. - - -schoolofnetcom/flask-python -https://github.com/schoolofnetcom/flask-python -Entry file: flask-python/init.py -Scanned: 2016-10-20 12:55:43.291063 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-python/venv/lib/python2.7/genericpath.py - -KeyJia/Flask-Python -https://github.com/KeyJia/Flask-Python -Entry file: Flask-Python/Flask.py -Scanned: 2016-10-20 12:55:43.829286 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rhymiz/flask-template -https://github.com/rhymiz/flask-template -Entry file: None -Scanned: 2016-10-20 12:55:44.356446 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rhymiz/flask-template. - -xawei/flask_gw -https://github.com/xawei/flask_gw -Entry file: flask_gw/app/__init__.py -Scanned: 2016-10-20 12:55:46.295727 -Vulnerability 1: -File: flask_gw/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 32: posts = pagination.items - File: flask_gw/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask_gw/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 22: show_followed = False - File: flask_gw/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask_gw/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 44: posts = pagination.items -File: flask_gw/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_gw/app/main/views.py - > User input at line 104, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 106: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_gw/app/main/views.py - > Line 108: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 111: comments = pagination.items - File: flask_gw/app/main/views.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_gw/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask_gw/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 172: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_gw/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask_gw/app/main/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 189: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_gw/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_gw/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask_gw/app/main/views.py - > User input at line 219, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_gw/app/main/views.py - > Line 220: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_gw/app/main/views.py - > Line 223: comments = pagination.items -File: flask_gw/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -stonewm/flask_blog -https://github.com/stonewm/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:55:48.823227 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ewjoachim/bttn_flask -https://github.com/ewjoachim/bttn_flask -Entry file: bttn_flask/bttn_flask.py -Scanned: 2016-10-20 12:55:51.134506 -No vulnerabilities found. - - -curious725/blog_flask -https://github.com/curious725/blog_flask -Entry file: blog_flask/app.py -Scanned: 2016-10-20 12:55:57.200901 -No vulnerabilities found. - - -ssong319/Flask-Testing -https://github.com/ssong319/Flask-Testing -Entry file: Flask-Testing/party.py -Scanned: 2016-10-20 12:55:58.714049 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yantiz/flask-blog -https://github.com/yantiz/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:56:01.280968 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nanakenashi/flask_hello -https://github.com/nanakenashi/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-20 12:56:02.939476 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -voltagemeeder/FirstFlask -https://github.com/voltagemeeder/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-20 12:56:04.534460 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -zembrzuski/openshift-flask -https://github.com/zembrzuski/openshift-flask -Entry file: openshift-flask/app.py -Scanned: 2016-10-20 12:56:05.871466 -No vulnerabilities found. - - -wgerald90/tth-Flask -https://github.com/wgerald90/tth-Flask -Entry file: None -Scanned: 2016-10-20 12:56:08.444825 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NataKuskova/Classwork_flask -https://github.com/NataKuskova/Classwork_flask -Entry file: Classwork_flask/script.py -Scanned: 2016-10-20 12:56:09.773264 -Vulnerability 1: -File: Classwork_flask/script.py - > User input at line 27, trigger word "form[": - text = request.form['text'] -File: Classwork_flask/script.py - > reaches line 31, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('result',text=text)) - -Vulnerability 2: -File: Classwork_flask/script.py - > User input at line 27, trigger word "form[": - text = request.form['text'] -File: Classwork_flask/script.py - > reaches line 31, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('result',text=text)) - - - -BadSol/flask-vendor -https://github.com/BadSol/flask-vendor -Entry file: flask-vendor/vendor/__init__.py -Scanned: 2016-10-20 12:56:14.788536 -Vulnerability 1: -File: flask-vendor/vendor/user/views.py - > User input at line 18, trigger word "form[": - user_obj = User.query.filter(User.email == request.form['email'].lower()).one_or_none() -File: flask-vendor/vendor/user/views.py - > reaches line 18, trigger word "filter(": - user_obj = User.query.filter(User.email == request.form['email'].lower()).one_or_none() - - - -haimapi/flask_pro -https://github.com/haimapi/flask_pro -Entry file: flask_pro/he.py -Scanned: 2016-10-20 12:56:15.305754 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kozyrevsergey89/flask_backend -https://github.com/kozyrevsergey89/flask_backend -Entry file: flask_backend/hello.py -Scanned: 2016-10-20 12:56:16.761956 -No vulnerabilities found. - - -katiayx/hblab_0805_Testing-Balloonicorn-After-Party -https://github.com/katiayx/hblab_0805_Testing-Balloonicorn-After-Party -Entry file: hblab_0805_Testing-Balloonicorn-After-Party/party.py -Scanned: 2016-10-20 12:56:17.275383 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -csyouk/faust-register-py -https://github.com/csyouk/faust-register-py -Entry file: faust-register-py/register_server.py -Scanned: 2016-10-20 12:56:23.621386 -Vulnerability 1: -File: faust-register-py/register_server.py - > User input at line 56, trigger word "form[": - session = game.find_session(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 53: session = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 2: -File: faust-register-py/register_server.py - > User input at line 57, trigger word "form[": - player_list = player.get_all_player(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 52: player_list = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 3: -File: faust-register-py/register_server.py - > User input at line 58, trigger word "form[": - player_count = player.get_count(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 54: player_count = 0 -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 4: -File: faust-register-py/register_server.py - > User input at line 139, trigger word "get(": - error_type = request.args.get('error_type') -File: faust-register-py/register_server.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alert.html',error_type=error_type) - - - -deonna/flask -https://github.com/deonna/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:56:25.635926 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -ksbek/flask -https://github.com/ksbek/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:56:26.217665 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -feirendada/Flask -https://github.com/feirendada/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:56:26.754432 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -krandmm/flask -https://github.com/krandmm/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:56:27.344693 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -huhjuang/Flask -https://github.com/huhjuang/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:56:27.856630 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Vaspy/Flask -https://github.com/Vaspy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:56:28.359088 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sebas095/Flask -https://github.com/sebas095/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 12:56:33.399955 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -codigofacilito/flask_cf -https://github.com/codigofacilito/flask_cf -Entry file: flask_cf/Project/main.py -Scanned: 2016-10-20 12:56:41.962800 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lizTheDeveloper/__g26_flask -https://github.com/lizTheDeveloper/__g26_flask -Entry file: __g26_flask/model.py -Scanned: 2016-10-20 12:56:44.397472 -Vulnerability 1: -File: __g26_flask/app.py - > User input at line 27, trigger word "get(": - user = load_user(session.get('user_id')) -File: __g26_flask/app.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title='Pokestraveganzamon', pokemon=pokelist, user=user) - - - -ZakStrassberg/flask_products_group_project -https://github.com/ZakStrassberg/flask_products_group_project -Entry file: flask_products_group_project/server.py -Scanned: 2016-10-20 12:56:45.917207 -No vulnerabilities found. - - -iamrajhans/FlaskBackend -https://github.com/iamrajhans/FlaskBackend -Entry file: FlaskBackend/drone/main.py -Scanned: 2016-10-20 12:56:48.190107 -No vulnerabilities found. - - -yantiz/flasktaskr -https://github.com/yantiz/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:56:49.722676 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nocotan/flaski -https://github.com/nocotan/flaski -Entry file: flaski/app.py -Scanned: 2016-10-20 12:56:52.173642 -No vulnerabilities found. - - -asimonia/Flaskbook -https://github.com/asimonia/Flaskbook -Entry file: Flaskbook/maps.py -Scanned: 2016-10-20 12:56:52.703511 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Markmwaura/Flaskblog -https://github.com/Markmwaura/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-20 12:56:57.016718 -No vulnerabilities found. - - -seizans/flasko -https://github.com/seizans/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-20 12:56:59.650069 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/struct.py - -vennyk/flasktaskr -https://github.com/vennyk/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:57:02.185209 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -akjanik/flasktutorial -https://github.com/akjanik/flasktutorial -Entry file: None -Scanned: 2016-10-20 12:57:03.709500 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hyteer/flaskdemo -https://github.com/hyteer/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 12:57:05.286912 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhang555/flasky -https://github.com/zhang555/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 12:57:05.963591 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuqingwuqingwu/flaskk -https://github.com/wuqingwuqingwu/flaskk -Entry file: flaskk/hello.py -Scanned: 2016-10-20 12:57:10.055655 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskk/venv/lib/python2.7/genericpath.py - -HJeongWon/flaskr -https://github.com/HJeongWon/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 12:57:12.596755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -oscarnyl/flaskpost -https://github.com/oscarnyl/flaskpost -Entry file: flaskpost/flaskpost/__init__.py -Scanned: 2016-10-20 12:57:17.142001 -No vulnerabilities found. - - -AdamWawrow/flasktaskr -https://github.com/AdamWawrow/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:57:17.680444 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -reed-chi/flasktaskr -https://github.com/reed-chi/flasktaskr -Entry file: None -Scanned: 2016-10-20 12:57:18.186216 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thippo/FlaskFrame -https://github.com/thippo/FlaskFrame -Entry file: FlaskFrame/myweb/__init__.py -Scanned: 2016-10-20 12:57:25.357996 -Vulnerability 1: -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > User input at line 12, trigger word ".data": - data = form.q.data.strip() -Reassigned in: - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 18: transfer_dict['pkuc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 19: transfer_dict['pkc'] = utils.WIF_to_compressed(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 20: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 21: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 22: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 24: transfer_dict['type'] = 1 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 25: transfer_dict['pkc'] = data - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 26: transfer_dict['pkuc'] = utils.compressed_to_WIF(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 27: p2a = py3private2address.Private2Address(data) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 28: transfer_dict['bauc'] = p2a.bitcoinaddress_uncompressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 29: transfer_dict['bac'] = p2a.bitcoinaddress_compressed - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 34: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 36: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 38: transfer_dict['type'] = 0 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 39: ret_MAYBE_FUNCTION_NAME = render_template('bitcoin',transfer_dict=transfer_dict, form=form) - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 14: transfer_dict['type'] = 2 - File: FlaskFrame/myweb/bitcoin/bitcoin.py - > Line 17: transfer_dict['type'] = 1 -File: FlaskFrame/myweb/bitcoin/bitcoin.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bitcoinaddress',data=data, form=form) - - - -sevenZz/FlaskTest -https://github.com/sevenZz/FlaskTest -Entry file: None -Scanned: 2016-10-20 12:57:25.878974 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sevenZz/FlaskTest. - -omokehinde/FlaskExam -https://github.com/omokehinde/FlaskExam -Entry file: FlaskExam/app.py -Scanned: 2016-10-20 12:57:26.880830 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Niel2016/FlaskApp -https://github.com/Niel2016/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 12:57:27.465301 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Chemoday/FlaskPractice -https://github.com/Chemoday/FlaskPractice -Entry file: FlaskPractice/app/__init__.py -Scanned: 2016-10-20 12:57:28.894510 -No vulnerabilities found. - - -JonathanFrederick/flask-cards -https://github.com/JonathanFrederick/flask-cards -Entry file: flask-cards/app.py -Scanned: 2016-10-20 12:57:30.955645 -Vulnerability 1: -File: flask-cards/app.py - > User input at line 20, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: flask-cards/app.py - > Line 26: user = models.User(username=username, password=password) -File: flask-cards/app.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - -Vulnerability 2: -File: flask-cards/app.py - > User input at line 21, trigger word "get(": - password = request.json.get('password') -Reassigned in: - File: flask-cards/app.py - > Line 26: user = models.User(username=username, password=password) -File: flask-cards/app.py - > reaches line 29, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201) - - - -petersowa/flask_blog -https://github.com/petersowa/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:57:32.467443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -janreyho/flask-demo -https://github.com/janreyho/flask-demo -Entry file: None -Scanned: 2016-10-20 12:57:34.051893 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janreyho/flask-demo. - -morpy/flask_app -https://github.com/morpy/flask_app -Entry file: None -Scanned: 2016-10-20 12:57:42.599402 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morpy/flask_app. - -sacktla/JOURNAL_FLASK -https://github.com/sacktla/JOURNAL_FLASK -Entry file: JOURNAL_FLASK/journal.py -Scanned: 2016-10-20 12:57:45.049418 -No vulnerabilities found. - - -MrRedAmber/SlackFlask -https://github.com/MrRedAmber/SlackFlask -Entry file: SlackFlask/k.py -Scanned: 2016-10-20 12:57:45.577886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -flavio99/Flask-Scaffold -https://github.com/flavio99/Flask-Scaffold -Entry file: None -Scanned: 2016-10-20 12:57:47.159498 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/flavio99/Flask-Scaffold. - -Caveat4U/flask.docker -https://github.com/Caveat4U/flask.docker -Entry file: flask/hello.py -Scanned: 2016-10-20 12:57:47.734394 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -MustafaAdam/flask_app -https://github.com/MustafaAdam/flask_app -Entry file: None -Scanned: 2016-10-20 12:57:50.254812 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MustafaAdam/flask_app. - -huyuguo/flask_small -https://github.com/huyuguo/flask_small -Entry file: flask_small/small.py -Scanned: 2016-10-20 12:57:52.571211 -No vulnerabilities found. - - -michaelbahng999/dnd-flask -https://github.com/michaelbahng999/dnd-flask -Entry file: dnd-flask/run.py -Scanned: 2016-10-20 12:57:53.144834 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sbarratt/flask-prometheus -https://github.com/sbarratt/flask-prometheus -Entry file: flask-prometheus/flask_prometheus/__init__.py -Scanned: 2016-10-20 12:57:57.597811 -No vulnerabilities found. - - -tjctw/flask_intro -https://github.com/tjctw/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-20 12:58:00.116811 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -evanxg852000/flask-starter -https://github.com/evanxg852000/flask-starter -Entry file: flask-starter/app/__init__.py -Scanned: 2016-10-20 12:58:02.624614 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rafaelescrich/pdf-flask -https://github.com/rafaelescrich/pdf-flask -Entry file: pdf-flask/app.py -Scanned: 2016-10-20 12:58:04.360576 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wouzar/flask-microblog -https://github.com/wouzar/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:58:05.872277 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DanielQujun/flask-web -https://github.com/DanielQujun/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 12:58:06.377888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -CiscoPartnerCloudRotation/sparkbot-flask -https://github.com/CiscoPartnerCloudRotation/sparkbot-flask -Entry file: sparkbot-flask/spark_integration.py -Scanned: 2016-10-20 12:58:09.860889 -No vulnerabilities found. - - -vennyk/flask-blog -https://github.com/vennyk/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 12:58:10.444326 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -we444/flask-myblog -https://github.com/we444/flask-myblog -Entry file: flask-myblog/app/__init__.py -Scanned: 2016-10-20 12:58:14.118909 -No vulnerabilities found. - - -crhowell/plj-flask -https://github.com/crhowell/plj-flask -Entry file: plj-flask/app.py -Scanned: 2016-10-20 12:58:17.686623 -Vulnerability 1: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 88, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 2: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 88, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 3: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 90, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 4: -File: plj-flask/app.py - > User input at line 76, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 92: form.title.data = entry.title - File: plj-flask/app.py - > Line 93: form.date.data = entry.date - File: plj-flask/app.py - > Line 94: form.time_spent.data = entry.time_spent - File: plj-flask/app.py - > Line 95: form.learned.data = entry.learned - File: plj-flask/app.py - > Line 96: form.resources.data = entry.resources - File: plj-flask/app.py - > Line 97: form.tags.data = entry.tags - File: plj-flask/app.py - > Line 99: ret_MAYBE_FUNCTION_NAME = render_template('edit.html',form=form, entry_id=entry_id) - File: plj-flask/app.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 90, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_detail',entry_id=entry.id)) - -Vulnerability 5: -File: plj-flask/app.py - > User input at line 110, trigger word "get(": - entry = models.Entry.get(id=entry_id) -Reassigned in: - File: plj-flask/app.py - > Line 114: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) - File: plj-flask/app.py - > Line 115: ret_MAYBE_FUNCTION_NAME = redirect(url_for('entry_list')) -File: plj-flask/app.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('detail.html',entry=entry) - - - -bgiesa/flask-test -https://github.com/bgiesa/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 12:58:18.714920 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -neoden/flask-nmail -https://github.com/neoden/flask-nmail -Entry file: flask-nmail/flask-nmail.py -Scanned: 2016-10-20 12:58:23.052425 -No vulnerabilities found. - - -vThaian/flask_example -https://github.com/vThaian/flask_example -Entry file: None -Scanned: 2016-10-20 12:58:24.922662 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -helelily/flask-demo -https://github.com/helelily/flask-demo -Entry file: None -Scanned: 2016-10-20 12:58:26.584605 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/helelily/flask-demo. - -HCT118/Flask-web -https://github.com/HCT118/Flask-web -Entry file: Flask-web/app/__init__.py -Scanned: 2016-10-20 12:58:28.528027 -Vulnerability 1: -File: Flask-web/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 55: posts = pagination.items - File: Flask-web/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flask-web/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 45: show_followed = False - File: Flask-web/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flask-web/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 67: posts = pagination.items -File: Flask-web/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Flask-web/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Flask-web/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 134: comments = pagination.items - File: Flask-web/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask-web/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Flask-web/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask-web/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flask-web/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask-web/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-web/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Flask-web/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/main/views.py - > Line 246: comments = pagination.items -File: Flask-web/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: Flask-web/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 23: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: Flask-web/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-web/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-web/app/api_1_0/users.py - > Line 46: next = None -File: Flask-web/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: Flask-web/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-web/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-web/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-web/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: Flask-web/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: Flask-web/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-web/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-web/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-web/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-web/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-web/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -chenglinguang/flask_blog -https://github.com/chenglinguang/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:58:29.085782 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jraaurellano/first-flask -https://github.com/jraaurellano/first-flask -Entry file: None -Scanned: 2016-10-20 12:58:29.718398 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -olagodavid/Flask-project -https://github.com/olagodavid/Flask-project -Entry file: None -Scanned: 2016-10-20 12:58:30.380338 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tsriram/flask-playground -https://github.com/tsriram/flask-playground -Entry file: flask-playground/app/__init__.py -Scanned: 2016-10-20 12:58:30.908461 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RatulGhosh/flask_tutorial -https://github.com/RatulGhosh/flask_tutorial -Entry file: None -Scanned: 2016-10-20 12:58:33.418712 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -voltagemeeder/flask-intro -https://github.com/voltagemeeder/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 12:58:35.021024 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdammkoehler/root_flask -https://github.com/rdammkoehler/root_flask -Entry file: root_flask/n/s/f/app_factory.py -Scanned: 2016-10-20 12:58:44.808906 -No vulnerabilities found. - - -aniruddhabarapatre/flask-microblog -https://github.com/aniruddhabarapatre/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:58:45.318275 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shutdown57/learning_flask -https://github.com/shutdown57/learning_flask -Entry file: learning_flask/src/app.py -Scanned: 2016-10-20 12:58:48.588649 -Vulnerability 1: -File: learning_flask/src/users/views.py - > User input at line 79, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/src/users/views.py - > Line 83: my_coordinates = p.address_to_latlng(address) - File: learning_flask/src/users/views.py - > Line 84: places = p.query(address) - File: learning_flask/src/users/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/src/users/views.py - > Line 71: places = [] - File: learning_flask/src/users/views.py - > Line 72: my_coordinates = (37.4221, -122.0844) - File: learning_flask/src/users/views.py - > Line 76: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/src/users/views.py - > reaches line 87, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/src/users/views.py - > User input at line 79, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/src/users/views.py - > Line 83: my_coordinates = p.address_to_latlng(address) - File: learning_flask/src/users/views.py - > Line 84: places = p.query(address) - File: learning_flask/src/users/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/src/users/views.py - > Line 71: places = [] - File: learning_flask/src/users/views.py - > Line 72: my_coordinates = (37.4221, -122.0844) - File: learning_flask/src/users/views.py - > Line 76: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/src/users/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -KeyJia/Flask-Python -https://github.com/KeyJia/Flask-Python -Entry file: Flask-Python/Flask.py -Scanned: 2016-10-20 12:58:49.123906 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GuanYQ0926/flask-restful -https://github.com/GuanYQ0926/flask-restful -Entry file: flask-restful/app.py -Scanned: 2016-10-20 12:58:50.489618 -Vulnerability 1: -File: flask-restful/app.py - > User input at line 72, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-restful/app.py - > reaches line 79, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -kuaiwu/MyFlask -https://github.com/kuaiwu/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-20 12:58:52.580361 -Vulnerability 1: -File: MyFlask/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 55: posts = pagination.items - File: MyFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: MyFlask/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 45: show_followed = False - File: MyFlask/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: MyFlask/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 67: posts = pagination.items -File: MyFlask/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: MyFlask/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: MyFlask/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 134: comments = pagination.items - File: MyFlask/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: MyFlask/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: MyFlask/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: MyFlask/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: MyFlask/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: MyFlask/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlask/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: MyFlask/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/main/views.py - > Line 246: comments = pagination.items -File: MyFlask/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: MyFlask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 23: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: MyFlask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlask/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlask/app/api_1_0/users.py - > Line 46: next = None -File: MyFlask/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: MyFlask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlask/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlask/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: MyFlask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: MyFlask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlask/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlask/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -Tangugo/flask_learn -https://github.com/Tangugo/flask_learn -Entry file: flask_learn/hello.py -Scanned: 2016-10-20 12:58:53.132786 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -upbit/flask_whiteboard -https://github.com/upbit/flask_whiteboard -Entry file: flask_whiteboard/main.py -Scanned: 2016-10-20 12:58:58.145570 -Vulnerability 1: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 76, trigger word "url_for(": - content = '请在地址栏后或输入框中,输入要分词的内容
例如: %s

' % (url_for('cut_words',word=EXAMPLE_WORDS).encode('utf8'), '/cut/' + EXAMPLE_WORDS) - -Vulnerability 2: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 76, trigger word "url_for(": - content = '请在地址栏后或输入框中,输入要分词的内容
例如: %s

' % (url_for('cut_words',word=EXAMPLE_WORDS).encode('utf8'), '/cut/' + EXAMPLE_WORDS) - -Vulnerability 3: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 4: -File: flask_whiteboard/main.py - > User input at line 41, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 46: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 51: segments = jieba.cut_for_search(word) - File: flask_whiteboard/main.py - > Line 53: segments = jieba.cut(word,cut_all=True) - File: flask_whiteboard/main.py - > Line 55: segments = jieba.cut(word) - File: flask_whiteboard/main.py - > Line 57: segments = mmseg.seg_txt(word) - File: flask_whiteboard/main.py - > Line 59: segments = mmseg.search.seg_txt_search(word) - File: flask_whiteboard/main.py - > Line 62: result = ', '.join(segments) - File: flask_whiteboard/main.py - > Line 65: result = result.encode('utf-8') - File: flask_whiteboard/main.py - > Line 69: content = result - File: flask_whiteboard/main.py - > Line 71: content += '
' + '关键词: ' + add_red(word, analyse.extract_tags(word,topK=2)) - File: flask_whiteboard/main.py - > Line 74: word = '' - File: flask_whiteboard/main.py - > Line 77: content += '支持的模式:
  jieba: /d 精确模式; /a 全模式; /s 搜索引擎模式
  mmseg: /mm mmseg模式; /mms mmseg.search模式' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 5: -File: flask_whiteboard/main.py - > User input at line 43, trigger word "get(": - mode = request.method == 'POST'request.form['mode']request.args.get('mode') -Reassigned in: - File: flask_whiteboard/main.py - > Line 48: mode = 'mms' - File: flask_whiteboard/main.py - > Line 75: mode = '' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 6: -File: flask_whiteboard/main.py - > User input at line 43, trigger word "form[": - mode = request.method == 'POST'request.form['mode']request.args.get('mode') -Reassigned in: - File: flask_whiteboard/main.py - > Line 48: mode = 'mms' - File: flask_whiteboard/main.py - > Line 75: mode = '' -File: flask_whiteboard/main.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, mode=mode, mode_names=CUT_MOD_NAMES, content=content, title='Jieba切词测试') - -Vulnerability 7: -File: flask_whiteboard/main.py - > User input at line 87, trigger word "get(": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 90: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 91: segments = ['%s/%s' % (w, f) for (w, f) in pseg.cut(word)] - File: flask_whiteboard/main.py - > Line 95: word = '' -File: flask_whiteboard/main.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, content=content, title='Jieba词性标注测试') - -Vulnerability 8: -File: flask_whiteboard/main.py - > User input at line 87, trigger word "form[": - word = request.method == 'POST'request.form['word']request.args.get('word') -Reassigned in: - File: flask_whiteboard/main.py - > Line 90: word = word.encode('utf-8') - File: flask_whiteboard/main.py - > Line 91: segments = ['%s/%s' % (w, f) for (w, f) in pseg.cut(word)] - File: flask_whiteboard/main.py - > Line 95: word = '' -File: flask_whiteboard/main.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('whiteboard.html',word=word, content=content, title='Jieba词性标注测试') - - - -python-ning/flask_blog -https://github.com/python-ning/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 12:59:00.866911 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kenju254/flask-microblog -https://github.com/kenju254/flask-microblog -Entry file: None -Scanned: 2016-10-20 12:59:03.369548 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chloebecker/flask-tutorial -https://github.com/chloebecker/flask-tutorial -Entry file: None -Scanned: 2016-10-20 12:59:04.880092 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -4dsolutions/tiny_flask -https://github.com/4dsolutions/tiny_flask -Entry file: tiny_flask/flask_app.py -Scanned: 2016-10-20 12:59:07.690638 -No vulnerabilities found. - - -EduhG/Flask-App -https://github.com/EduhG/Flask-App -Entry file: Flask-App/app/flaskapp/__init__.py -Scanned: 2016-10-20 12:59:09.150171 -No vulnerabilities found. - - -submorphic/hello-flask -https://github.com/submorphic/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 12:59:09.767080 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -jmontroy90/first-flask -https://github.com/jmontroy90/first-flask -Entry file: None -Scanned: 2016-10-20 12:59:11.301923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -szomolanyi/flask-base -https://github.com/szomolanyi/flask-base -Entry file: None -Scanned: 2016-10-20 12:59:13.855546 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/szomolanyi/flask-base. - -DGideas/flask_microservice -https://github.com/DGideas/flask_microservice -Entry file: flask_microservice/main.py -Scanned: 2016-10-20 12:59:18.186308 -No vulnerabilities found. - - -johnngugi/flask-assesment -https://github.com/johnngugi/flask-assesment -Entry file: flask-assesment/app/__init__.py -Scanned: 2016-10-20 12:59:20.819821 -No vulnerabilities found. - - -lieuhon/First-Flask -https://github.com/lieuhon/First-Flask -Entry file: First-Flask/app/__init__.py -Scanned: 2016-10-20 12:59:23.774836 -Vulnerability 1: -File: First-Flask/app/mod_auth/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: First-Flask/app/mod_auth/views.py - > Line 37: session['user_id'] = user.id -File: First-Flask/app/mod_auth/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -YuliYaSokolova/microservices_flask -https://github.com/YuliYaSokolova/microservices_flask -Entry file: microservices_flask/rating_route.py -Scanned: 2016-10-20 12:59:25.482766 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: microservices_flask/.envi/lib/python3.4/struct.py - -nenodias/flask-bigapp -https://github.com/nenodias/flask-bigapp -Entry file: flask-bigapp/app/__init__.py -Scanned: 2016-10-20 12:59:27.820807 -No vulnerabilities found. - - -rezastd/flask_two -https://github.com/rezastd/flask_two -Entry file: flask_two/app.py -Scanned: 2016-10-20 12:59:28.721677 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_two/venv/lib/python2.7/genericpath.py - -wuruthie/FirstFlask -https://github.com/wuruthie/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-20 12:59:29.304274 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -ahoff314/geet -https://github.com/ahoff314/geet -Entry file: geet/geet/app/main.py -Scanned: 2016-10-20 12:59:37.019660 -No vulnerabilities found. - - -patoupatou/microblog -https://github.com/patoupatou/microblog -Entry file: None -Scanned: 2016-10-20 12:59:37.549702 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -csyouk/faust-register-py -https://github.com/csyouk/faust-register-py -Entry file: faust-register-py/register_server.py -Scanned: 2016-10-20 12:59:41.348032 -Vulnerability 1: -File: faust-register-py/register_server.py - > User input at line 56, trigger word "form[": - session = game.find_session(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 53: session = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 2: -File: faust-register-py/register_server.py - > User input at line 57, trigger word "form[": - player_list = player.get_all_player(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 52: player_list = [] -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 3: -File: faust-register-py/register_server.py - > User input at line 58, trigger word "form[": - player_count = player.get_count(request.form['session']) -Reassigned in: - File: faust-register-py/register_server.py - > Line 54: player_count = 0 -File: faust-register-py/register_server.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('player-list.html',session_list=session_list, player_list=player_list, session=session, player_count=player_count) - -Vulnerability 4: -File: faust-register-py/register_server.py - > User input at line 139, trigger word "get(": - error_type = request.args.get('error_type') -File: faust-register-py/register_server.py - > reaches line 142, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alert.html',error_type=error_type) - - - -krandmm/firstapp -https://github.com/krandmm/firstapp -Entry file: None -Scanned: 2016-10-20 12:59:43.890872 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/krandmm/firstapp. - -jasonboykin/headlines -https://github.com/jasonboykin/headlines -Entry file: headlines/headlines.py -Scanned: 2016-10-20 12:59:45.413726 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -theparadoxer02/flask -https://github.com/theparadoxer02/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:59:49.521307 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -alazar-gm/flask -https://github.com/alazar-gm/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:59:50.164899 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -krasytod/flask -https://github.com/krasytod/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:59:51.788486 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -saiprakashreddymarasani/flask -https://github.com/saiprakashreddymarasani/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:59:53.364824 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -yinqiaoyicjx/flask -https://github.com/yinqiaoyicjx/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 12:59:53.952794 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -zakzou/flask-weixin-pay -https://github.com/zakzou/flask-weixin-pay -Entry file: flask-weixin-pay/example.py -Scanned: 2016-10-20 13:00:01.926478 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hitakaken/flask-wechat -https://github.com/hitakaken/flask-wechat -Entry file: flask-wechat/fenghuang/__init__.py -Scanned: 2016-10-20 13:00:03.439681 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -benman1/tensorflow_flask -https://github.com/benman1/tensorflow_flask -Entry file: tensorflow_flask/api.py -Scanned: 2016-10-20 13:00:07.355533 -No vulnerabilities found. - - -freakxx/flaskdemo -https://github.com/freakxx/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:00:08.874885 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Baindaer/flaskr -https://github.com/Baindaer/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:00:10.385264 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lindentao/flaskr -https://github.com/lindentao/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:00:11.893175 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -demory191/flasktaskr -https://github.com/demory191/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:00:14.454855 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Daylightmazekun/flaskfollow -https://github.com/Daylightmazekun/flaskfollow -Entry file: flaskfollow/app/__init__.py -Scanned: 2016-10-20 13:00:19.572787 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -0x24a537r9/flasktest -https://github.com/0x24a537r9/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:00:20.084994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tw7613781/flasky -https://github.com/tw7613781/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:00:21.599952 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mcquam/flasktaskr -https://github.com/mcquam/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:00:23.143134 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lxw15337674/flasklearn -https://github.com/lxw15337674/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-20 13:00:34.061410 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Sventenhaaf/flasktries -https://github.com/Sventenhaaf/flasktries -Entry file: flasktries/app.py -Scanned: 2016-10-20 13:00:40.931831 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasktries/env/lib/python2.7/genericpath.py - -liangfei2016x/flaskweb -https://github.com/liangfei2016x/flaskweb -Entry file: None -Scanned: 2016-10-20 13:00:41.445197 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -manuellah/flaskapp -https://github.com/manuellah/flaskapp -Entry file: None -Scanned: 2016-10-20 13:00:41.989544 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/manuellah/flaskapp. - -musarahm/flaskbook -https://github.com/musarahm/flaskbook -Entry file: flaskbook/premier.py -Scanned: 2016-10-20 13:00:42.556599 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskbook/lib/python2.7/genericpath.py - -qhdong/flasky -https://github.com/qhdong/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:00:43.065680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wuqingwuqingwu/flaskk -https://github.com/wuqingwuqingwu/flaskk -Entry file: flaskk/hello.py -Scanned: 2016-10-20 13:00:43.659873 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskk/venv/lib/python2.7/genericpath.py - -Katebasoft/Flaskr -https://github.com/Katebasoft/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 13:00:44.684778 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zangree/flaskytest -https://github.com/zangree/flaskytest -Entry file: flaskytest/app.py -Scanned: 2016-10-20 13:00:46.025531 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -he1chenglong/flasktest -https://github.com/he1chenglong/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:00:46.550043 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -omegayang/flasklearn -https://github.com/omegayang/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-20 13:00:47.085131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ranchow/flaskapp -https://github.com/ranchow/flaskapp -Entry file: None -Scanned: 2016-10-20 13:00:49.619971 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ranchow/flaskapp. - -fbreversg/flaskify -https://github.com/fbreversg/flaskify -Entry file: flaskify/flaskify.py -Scanned: 2016-10-20 13:00:50.157195 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -1dot75cm/flasky -https://github.com/1dot75cm/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:00:52.660774 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ethan-funny/flask-todo-app -https://github.com/ethan-funny/flask-todo-app -Entry file: flask-todo-app/application/app.py -Scanned: 2016-10-20 13:00:55.660268 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -karchevz/FlaskTasker -https://github.com/karchevz/FlaskTasker -Entry file: FlaskTasker/extras/views.py -Scanned: 2016-10-20 13:00:57.182960 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jghess/flaskTrain -https://github.com/jghess/flaskTrain -Entry file: flaskTrain/app.py -Scanned: 2016-10-20 13:00:58.472092 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wwxFromTju/python-flask -https://github.com/wwxFromTju/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 13:01:03.470148 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Elsis-Sitati/flask-login -https://github.com/Elsis-Sitati/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-20 13:01:05.089981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -allbegray/flask_mvc -https://github.com/allbegray/flask_mvc -Entry file: flask_mvc/app.py -Scanned: 2016-10-20 13:01:07.513157 -Vulnerability 1: -File: flask_mvc/app.py - > User input at line 41, trigger word "get(": - board = Board.query.get(id) -Reassigned in: - File: flask_mvc/app.py - > Line 42: form = BoardInsertForm(csrf_enabled=False, obj=board) -File: flask_mvc/app.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('board/board_form.html',form=form) - -Vulnerability 2: -File: flask_mvc/app.py - > User input at line 50, trigger word ".data": - id = form.id.data -Reassigned in: - File: flask_mvc/app.py - > Line 55: id = b.id - File: flask_mvc/app.py - > Line 58: board = Board.query.get(id) - File: flask_mvc/app.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('board/board_form.html',form=form) -File: flask_mvc/app.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('board_view',id=id)) - -Vulnerability 3: -File: flask_mvc/app.py - > User input at line 52, trigger word ".data": - b = Board(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask_mvc/app.py - > Line 55: id = b.id - File: flask_mvc/app.py - > Line 58: board = Board.query.get(id) - File: flask_mvc/app.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('board/board_form.html',form=form) - File: flask_mvc/app.py - > Line 50: id = form.id.data -File: flask_mvc/app.py - > reaches line 64, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('board_view',id=id)) - -Vulnerability 4: -File: flask_mvc/app.py - > User input at line 50, trigger word ".data": - id = form.id.data -Reassigned in: - File: flask_mvc/app.py - > Line 55: id = b.id - File: flask_mvc/app.py - > Line 58: board = Board.query.get(id) - File: flask_mvc/app.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('board/board_form.html',form=form) -File: flask_mvc/app.py - > reaches line 64, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('board_view',id=id)) - -Vulnerability 5: -File: flask_mvc/app.py - > User input at line 52, trigger word ".data": - b = Board(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask_mvc/app.py - > Line 55: id = b.id - File: flask_mvc/app.py - > Line 58: board = Board.query.get(id) - File: flask_mvc/app.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('board/board_form.html',form=form) - File: flask_mvc/app.py - > Line 50: id = form.id.data -File: flask_mvc/app.py - > reaches line 64, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('board_view',id=id)) - -Vulnerability 6: -File: flask_mvc/app.py - > User input at line 71, trigger word "get(": - board = Board.query.get(id) -File: flask_mvc/app.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('board/board_view.html',board=board) - - - -MustafaAdam/flask_app -https://github.com/MustafaAdam/flask_app -Entry file: None -Scanned: 2016-10-20 13:01:09.044055 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MustafaAdam/flask_app. - -osnagovskyi/flask_tutorial -https://github.com/osnagovskyi/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:01:10.571841 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -greenoneo0/arduFlask -https://github.com/greenoneo0/arduFlask -Entry file: arduFlask/run.py -Scanned: 2016-10-20 13:01:13.007710 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huyuguo/flask_small -https://github.com/huyuguo/flask_small -Entry file: flask_small/small.py -Scanned: 2016-10-20 13:01:15.316457 -No vulnerabilities found. - - -no140/flask-demo -https://github.com/no140/flask-demo -Entry file: None -Scanned: 2016-10-20 13:01:20.334462 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/no140/flask-demo. - -EduhG/Discovering-Flask -https://github.com/EduhG/Discovering-Flask -Entry file: Discovering-Flask/app.py -Scanned: 2016-10-20 13:01:28.610774 -No vulnerabilities found. - - -Kentovski/Flask_Battlefield -https://github.com/Kentovski/Flask_Battlefield -Entry file: Flask_Battlefield/server.py -Scanned: 2016-10-20 13:01:30.075783 -Vulnerability 1: -File: Flask_Battlefield/server.py - > User input at line 16, trigger word "form[": - armies_num = int(request.form['armies_num']) -Reassigned in: - File: Flask_Battlefield/server.py - > Line 18: battlefield = factory.create_battlefield(armies_num) -File: Flask_Battlefield/server.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',result=battlefield.start()) - - - -per19/crud-flask -https://github.com/per19/crud-flask -Entry file: crud-flask/main.py -Scanned: 2016-10-20 13:01:31.534343 -No vulnerabilities found. - - -calsaviour/flask-blog -https://github.com/calsaviour/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:01:35.106588 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -zhangshaofu/BestFlask -https://github.com/zhangshaofu/BestFlask -Entry file: BestFlask/BestFlask.py -Scanned: 2016-10-20 13:01:42.419521 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tjgrist/Flask-psql -https://github.com/tjgrist/Flask-psql -Entry file: Flask-psql/app.py -Scanned: 2016-10-20 13:01:43.842749 -Vulnerability 1: -File: Flask-psql/todo.py - > User input at line 39, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: Flask-psql/todo.py - > reaches line 46, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -hsyyf/flask_blog -https://github.com/hsyyf/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:01:44.376133 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -eswizardry/flask-blog -https://github.com/eswizardry/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:01:44.973505 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -yeongseon/Python_Flask -https://github.com/yeongseon/Python_Flask -Entry file: Python_Flask/SQLAlchemy/run.py -Scanned: 2016-10-20 13:01:46.919908 -No vulnerabilities found. - - -wonwooddo/flask_proj -https://github.com/wonwooddo/flask_proj -Entry file: flask_proj/flask_chart/routes.py -Scanned: 2016-10-20 13:01:54.543661 -No vulnerabilities found. - - -tsilevych/flask_test -https://github.com/tsilevych/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 13:01:55.170263 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chloebecker/flask-tutorial -https://github.com/chloebecker/flask-tutorial -Entry file: None -Scanned: 2016-10-20 13:01:55.670460 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ilyaLibin/flask-videostreaming -https://github.com/ilyaLibin/flask-videostreaming -Entry file: flask-videostreaming/main.py -Scanned: 2016-10-20 13:02:04.480915 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -remcohaszing/flask-openapi -https://github.com/remcohaszing/flask-openapi -Entry file: flask-openapi/example/app.py -Scanned: 2016-10-20 13:02:06.037732 -No vulnerabilities found. - - -epiedad/flask-blog -https://github.com/epiedad/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:02:06.576382 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -travisoneill/algo-flask -https://github.com/travisoneill/algo-flask -Entry file: algo-flask/flask_server.py -Scanned: 2016-10-20 13:02:08.002709 -No vulnerabilities found. - - -doublenns/flask_playground -https://github.com/doublenns/flask_playground -Entry file: flask_playground/hello_world.py -Scanned: 2016-10-20 13:02:08.534614 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -j99d99/Flask_Web -https://github.com/j99d99/Flask_Web -Entry file: Flask_Web/app_models/app/__init__.py -Scanned: 2016-10-20 13:02:10.350372 -No vulnerabilities found. - - -karchevz/flask-blog -https://github.com/karchevz/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:02:10.911382 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -rohrmic1/flask-intro -https://github.com/rohrmic1/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:02:11.415412 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yubo1911/flask-upload -https://github.com/yubo1911/flask-upload -Entry file: flask-upload/index.py -Scanned: 2016-10-20 13:02:11.923865 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arquenum13/Flask-Demo -https://github.com/arquenum13/Flask-Demo -Entry file: None -Scanned: 2016-10-20 13:02:12.440204 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arquenum13/Flask-Demo. - -MedericFourmy/flask_introduction -https://github.com/MedericFourmy/flask_introduction -Entry file: flask_introduction/quickstart/quickstart.py -Scanned: 2016-10-20 13:02:13.949273 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -palapython/Flask-Web -https://github.com/palapython/Flask-Web -Entry file: Flask-Web/hello.py -Scanned: 2016-10-20 13:02:15.798489 -No vulnerabilities found. - - -Remmyjay/flask_app -https://github.com/Remmyjay/flask_app -Entry file: None -Scanned: 2016-10-20 13:02:16.339779 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Remmyjay/flask_app. - -musarahm/flask_blog -https://github.com/musarahm/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:02:18.876252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AnHeBridge/pyweb_flask -https://github.com/AnHeBridge/pyweb_flask -Entry file: pyweb_flask/app/__init__.py -Scanned: 2016-10-20 13:02:21.301867 -No vulnerabilities found. - - -Yu-Shuhua/flask-micblog -https://github.com/Yu-Shuhua/flask-micblog -Entry file: None -Scanned: 2016-10-20 13:02:38.499824 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KillianDavitt/Flask-Boilerplate -https://github.com/KillianDavitt/Flask-Boilerplate -Entry file: Flask-Boilerplate/flaskapp.py -Scanned: 2016-10-20 13:02:39.045956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -RunKen/learnFlask -https://github.com/RunKen/learnFlask -Entry file: None -Scanned: 2016-10-20 13:02:42.556636 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RunKen/learnFlask. - -aleccunningham/flask-registration -https://github.com/aleccunningham/flask-registration -Entry file: flask-registration/views.py -Scanned: 2016-10-20 13:02:44.904355 -No vulnerabilities found. - - -wuruthie/FirstFlask -https://github.com/wuruthie/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-20 13:02:45.476250 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FirstFlask/env/lib/python2.7/genericpath.py - -joe62/flask_helloworld -https://github.com/joe62/flask_helloworld -Entry file: flask_helloworld/flask_helloworld.py -Scanned: 2016-10-20 13:02:45.985714 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bukhonenko/flask-blog -https://github.com/bukhonenko/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:02:47.032754 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -njoyce/flask-letsencrypt -https://github.com/njoyce/flask-letsencrypt -Entry file: flask-letsencrypt/flask_letsencrypt/__init__.py -Scanned: 2016-10-20 13:02:48.471294 -No vulnerabilities found. - - -theglassbean/flask-blog -https://github.com/theglassbean/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:02:56.025401 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -nitin42/Flask-REST -https://github.com/nitin42/Flask-REST -Entry file: Flask-REST/main.py -Scanned: 2016-10-20 13:02:57.356720 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AngelMunoz/FlaskWebProjects -https://github.com/AngelMunoz/FlaskWebProjects -Entry file: FlaskWebProjects/FlaskBlueprintAPI/FlaskBlueprintAPI/__init__.py -Scanned: 2016-10-20 13:03:04.770833 -No vulnerabilities found. - - -brizow/FlaskBookmarkSite -https://github.com/brizow/FlaskBookmarkSite -Entry file: FlaskBookmarkSite/FlaskAdvancedTutorial/FlaskAdvancedTutorial/__init__.py -Scanned: 2016-10-20 13:03:12.358595 -Vulnerability 1: -File: FlaskBookmarkSite/FlaskAdvancedTutorial/FlaskAdvancedTutorial/views.py - > User input at line 52, trigger word ".data": - description = form.description.data -File: FlaskBookmarkSite/FlaskAdvancedTutorial/FlaskAdvancedTutorial/views.py - > reaches line 54, trigger word "flash(": - flash('Stored '{}''.format(description)) - - - -Kryvonis/SimpleLargeAppFlask -https://github.com/Kryvonis/SimpleLargeAppFlask -Entry file: SimpleLargeAppFlask/app/__init__.py -Scanned: 2016-10-20 13:03:13.752607 -No vulnerabilities found. - - -vlfedotov/server_client_flask -https://github.com/vlfedotov/server_client_flask -Entry file: server_client_flask/server.py -Scanned: 2016-10-20 13:03:15.067365 -No vulnerabilities found. - - -justinpezzack/flask-app-js -https://github.com/justinpezzack/flask-app-js -Entry file: flask-app-js/app/__init__.py -Scanned: 2016-10-20 13:03:16.733193 -No vulnerabilities found. - - -bekkam/flask-script-practice -https://github.com/bekkam/flask-script-practice -Entry file: flask-script-practice/myapp.py -Scanned: 2016-10-20 13:03:18.038622 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coding-happily/Dive-into-Flask -https://github.com/coding-happily/Dive-into-Flask -Entry file: Dive-into-Flask/main.py -Scanned: 2016-10-20 13:03:20.877106 -No vulnerabilities found. - - -iruwl/sample-python-flask-rest -https://github.com/iruwl/sample-python-flask-rest -Entry file: sample-python-flask-rest/todo-api/app.py -Scanned: 2016-10-20 13:03:28.397402 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: sample-python-flask-rest/todo-api/flask/lib/python2.7/genericpath.py - -yoophi/flask-thumbnail-test -https://github.com/yoophi/flask-thumbnail-test -Entry file: flask-thumbnail-test/app/__init__.py -Scanned: 2016-10-20 13:03:31.010782 -No vulnerabilities found. - - -roselmamendes/security-on-flask -https://github.com/roselmamendes/security-on-flask -Entry file: security-on-flask/black_girls/black_girls_app.py -Scanned: 2016-10-20 13:03:32.491354 -Vulnerability 1: -File: security-on-flask/black_girls/black_girls_app.py - > User input at line 33, trigger word "get(": - token = request.headers.get('Authorization') -Reassigned in: - File: security-on-flask/black_girls/black_girls_app.py - > Line 35: id = decode_token(token) - File: security-on-flask/black_girls/black_girls_app.py - > Line 36: ret_MAYBE_FUNCTION_NAME = girl_by_id(id) -File: security-on-flask/black_girls/black_girls_app.py - > reaches line 34, trigger word "replace(": - token = tokentoken.replace('Basic', '', 1)'' - - - -fabian-rump/flask_modular_auth -https://github.com/fabian-rump/flask_modular_auth -Entry file: flask_modular_auth/tests/modular_auth_test_case.py -Scanned: 2016-10-20 13:03:34.056435 -No vulnerabilities found. - - -timmyreilly/introduction-to-flask -https://github.com/timmyreilly/introduction-to-flask -Entry file: introduction-to-flask/hello.py -Scanned: 2016-10-20 13:03:38.213644 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jacksonyoudi/flask -https://github.com/jacksonyoudi/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:03:39.357295 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jamesd3ao/Flask -https://github.com/jamesd3ao/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:03:39.867458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -berstearns/flask -https://github.com/berstearns/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:03:40.500294 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -kkltcjk/flask -https://github.com/kkltcjk/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:03:41.078612 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -hit9/flask-docjson -https://github.com/hit9/flask-docjson -Entry file: flask-docjson/example.py -Scanned: 2016-10-20 13:03:42.893978 -No vulnerabilities found. - - -on3iro/cookiecutter-flask -https://github.com/on3iro/cookiecutter-flask -Entry file: None -Scanned: 2016-10-20 13:03:43.450794 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/on3iro/cookiecutter-flask. - -DanielTimLee/flask_tutorial -https://github.com/DanielTimLee/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:03:43.947319 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lbx6z-2/flaskr -https://github.com/lbx6z-2/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:03:44.454270 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Daylightmazekun/flaskfollow -https://github.com/Daylightmazekun/flaskfollow -Entry file: flaskfollow/app/__init__.py -Scanned: 2016-10-20 13:03:45.003223 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -trevorwitter/flaskr -https://github.com/trevorwitter/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:03:45.515795 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -26huitailang/flaskr -https://github.com/26huitailang/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:03:46.021213 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -caser789/flaskrr -https://github.com/caser789/flaskrr -Entry file: flaskrr/flaskr/flaskr.py -Scanned: 2016-10-20 13:03:47.875740 -No vulnerabilities found. - - -xuxiaoxing/flasky -https://github.com/xuxiaoxing/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:03:48.393342 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EenTang/flaskdev -https://github.com/EenTang/flaskdev -Entry file: flaskdev/app/__init__.py -Scanned: 2016-10-20 13:04:03.683335 -Vulnerability 1: -File: flaskdev/app/main/views.py - > User input at line 17, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 15: show_followed = False -File: flaskdev/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskdev/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 23: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 26: posts = pagination.items -File: flaskdev/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskdev/app/main/views.py - > User input at line 61, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 63: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskdev/app/main/views.py - > Line 65: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 68: comments = pagination.items - File: flaskdev/app/main/views.py - > Line 60: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskdev/app/main/views.py - > reaches line 70, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',comments=comments, posts=[post], form=form, pagination=pagination) - -Vulnerability 4: -File: flaskdev/app/main/views.py - > User input at line 78, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 79: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 82: comments = pagination.items -File: flaskdev/app/main/views.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 5: -File: flaskdev/app/main/views.py - > User input at line 133, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 134: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 137: posts = pagination.items -File: flaskdev/app/main/views.py - > reaches line 138, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 6: -File: flaskdev/app/main/views.py - > User input at line 224, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 225: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 228: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskdev/app/main/views.py - > Line 223: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskdev/app/main/views.py - > reaches line 230, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='的关注者', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskdev/app/main/views.py - > User input at line 241, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 242: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 245: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskdev/app/main/views.py - > Line 240: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskdev/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注的人', endpoint='.followed', pagination=pagination, follows=follows) - -Vulnerability 8: -File: flaskdev/app/main/forms.py - > User input at line 28, trigger word "files[": - fileobj = request.files['upload'] -Reassigned in: - File: flaskdev/app/main/forms.py - > Line 29: fname = os.path.splitext(fileobj.filename) - File: flaskdev/app/main/forms.py - > Line 29: fext = os.path.splitext(fileobj.filename) - File: flaskdev/app/main/forms.py - > Line 30: rnd_name = '%s%s' % (self.gen_rnd_filename(), fext) - File: flaskdev/app/main/forms.py - > Line 32: filepath = os.path.join(endpoint.static_folder, 'upload', rnd_name) - File: flaskdev/app/main/forms.py - > Line 34: dirname = os.path.dirname(filepath) - File: flaskdev/app/main/forms.py - > Line 48: res = ' - - ' % (callback, url, error) - File: flaskdev/app/main/forms.py - > Line 54: response = make_response(res) - File: flaskdev/app/main/forms.py - > Line 56: ret_MAYBE_FUNCTION_NAME = response - File: flaskdev/app/main/forms.py - > Line 23: url = '' -File: flaskdev/app/main/forms.py - > reaches line 44, trigger word "url_for(": - url = url_for('main.static',filename='%s/%s' % ('upload', rnd_name)) - - - -sjeeva/flaskapp -https://github.com/sjeeva/flaskapp -Entry file: None -Scanned: 2016-10-20 13:04:04.697054 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sjeeva/flaskapp. - -Cesaaar/flaskr -https://github.com/Cesaaar/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:04:06.231797 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jiangnenghua/flasky -https://github.com/jiangnenghua/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:04:13.749337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -micahculpepper/flaskplayground -https://github.com/micahculpepper/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-20 13:04:15.389857 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tomtom92/FlaskTaskr -https://github.com/tomtom92/FlaskTaskr -Entry file: FlaskTaskr/views.py -Scanned: 2016-10-20 13:04:17.501991 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTaskr/ENV/lib/python2.7/genericpath.py - -karchevz/FlaskTasker -https://github.com/karchevz/FlaskTasker -Entry file: FlaskTasker/extras/views.py -Scanned: 2016-10-20 13:04:19.015256 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lypro09539/FlaskWeb -https://github.com/lypro09539/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 13:04:21.612576 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -classTC/FlaskDemo -https://github.com/classTC/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 13:04:29.171033 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Taimoorarshad/flasktasker6 -https://github.com/Taimoorarshad/flasktasker6 -Entry file: flasktasker6/project/__init__.py -Scanned: 2016-10-20 13:04:32.689268 -No vulnerabilities found. - - -swetankvarun18/FlaskApp -https://github.com/swetankvarun18/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:04:33.299291 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -didier-schmitt/demystify-flask -https://github.com/didier-schmitt/demystify-flask -Entry file: demystify-flask/main.py -Scanned: 2016-10-20 13:04:37.161200 -No vulnerabilities found. - - -per19/app-flask -https://github.com/per19/app-flask -Entry file: app-flask/app.py -Scanned: 2016-10-20 13:04:40.517527 -No vulnerabilities found. - - -harish-rajendran/Flask-Project -https://github.com/harish-rajendran/Flask-Project -Entry file: Flask-Project/routes.py -Scanned: 2016-10-20 13:04:41.851768 -Vulnerability 1: -File: Flask-Project/routes.py - > User input at line 33, trigger word ".data": - name = form.name.data -Reassigned in: - File: Flask-Project/routes.py - > Line 54: c = 'hey , ' + name + '..Have a good day!!!' - File: Flask-Project/routes.py - > Line 55: ret_MAYBE_FUNCTION_NAME = c - File: Flask-Project/routes.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('register.html',form=form) - File: Flask-Project/routes.py - > Line 31: ret_MAYBE_FUNCTION_NAME = 'ALL FIELDS ARE REQUIRED' - File: Flask-Project/routes.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('redirect.html') -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 2: -File: Flask-Project/routes.py - > User input at line 34, trigger word ".data": - email = form.email.data -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 3: -File: Flask-Project/routes.py - > User input at line 35, trigger word ".data": - password = form.password.data -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 4: -File: Flask-Project/routes.py - > User input at line 66, trigger word ".data": - email = form.email.data -File: Flask-Project/routes.py - > reaches line 84, trigger word "execute(": - cursor.execute('INSERT INTO log(email,Password,Date)VALUES(%s,%s,%s)', (email, password, date)) - -Vulnerability 5: -File: Flask-Project/routes.py - > User input at line 67, trigger word ".data": - password = form.password.data -File: Flask-Project/routes.py - > reaches line 84, trigger word "execute(": - cursor.execute('INSERT INTO log(email,Password,Date)VALUES(%s,%s,%s)', (email, password, date)) - - - -wtakase/hello_flask -https://github.com/wtakase/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 13:04:42.856989 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xiezg247/flask_demo -https://github.com/xiezg247/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 13:04:43.374002 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -abhitron/flask-examples -https://github.com/abhitron/flask-examples -Entry file: flask-examples/Guestbook/app.py -Scanned: 2016-10-20 13:04:43.886782 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -gunavara/guniFlask -https://github.com/gunavara/guniFlask -Entry file: guniFlask/app.py -Scanned: 2016-10-20 13:04:46.830828 -Vulnerability 1: -File: guniFlask/app.py - > User input at line 50, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: guniFlask/app.py - > Line 58: reguser = 'INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')' % (username, password, email) -File: guniFlask/app.py - > reaches line 53, trigger word "execute(": - x = cur.execute('SELECT * FROM users WHERE username = '%s'' % thwart(username)) - -Vulnerability 2: -File: guniFlask/app.py - > User input at line 50, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: guniFlask/app.py - > Line 58: reguser = 'INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')' % (username, password, email) -File: guniFlask/app.py - > reaches line 59, trigger word "execute(": - cur.execute(reguser) - -Vulnerability 3: -File: guniFlask/app.py - > User input at line 51, trigger word "form[": - password = sha256_crypt.encrypt(request.form['password']) -Reassigned in: - File: guniFlask/app.py - > Line 58: reguser = 'INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')' % (username, password, email) -File: guniFlask/app.py - > reaches line 59, trigger word "execute(": - cur.execute(reguser) - -Vulnerability 4: -File: guniFlask/app.py - > User input at line 52, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: guniFlask/app.py - > Line 58: reguser = 'INSERT INTO users (username, password, email) VALUES ('%s', '%s', '%s')' % (username, password, email) -File: guniFlask/app.py - > reaches line 59, trigger word "execute(": - cur.execute(reguser) - -Vulnerability 5: -File: guniFlask/app.py - > User input at line 73, trigger word "form[": - data = cur.execute('SELECT * FROM (users) WHERE (username) = '%s'' % thwart(request.form['username'])) -Reassigned in: - File: guniFlask/app.py - > Line 74: data = cur.fetchone()[2] -File: guniFlask/app.py - > reaches line 73, trigger word "execute(": - data = cur.execute('SELECT * FROM (users) WHERE (username) = '%s'' % thwart(request.form['username'])) - -Vulnerability 6: -File: guniFlask/app.py - > User input at line 117, trigger word "form[": - vidrazhod = request.form['razhod'] -Reassigned in: - File: guniFlask/app.py - > Line 123: addrazhodqry = 'INSERT INTO razhodi (razhod) VALUES ('%s')' % vidrazhod -File: guniFlask/app.py - > reaches line 118, trigger word "execute(": - x = cur.execute('SELECT razhod FROM (razhodi) WHERE (razhod) = '%s'' % vidrazhod) - -Vulnerability 7: -File: guniFlask/app.py - > User input at line 117, trigger word "form[": - vidrazhod = request.form['razhod'] -Reassigned in: - File: guniFlask/app.py - > Line 123: addrazhodqry = 'INSERT INTO razhodi (razhod) VALUES ('%s')' % vidrazhod -File: guniFlask/app.py - > reaches line 124, trigger word "execute(": - cur.execute(addrazhodqry) - -Vulnerability 8: -File: guniFlask/app.py - > User input at line 159, trigger word "form[": - tiprazhod = request.form['tiprazhod'] -Reassigned in: - File: guniFlask/app.py - > Line 160: razhod_id = 'SELECT id FROM razhodi WHERE razhod = '%s'' % tiprazhod - File: guniFlask/app.py - > Line 163: razhod_id = datarazhod[0] - File: guniFlask/app.py - > Line 165: razhod_name = 'SELECT razhod FROM razhodi WHERE id = '%s'' % razhod_id - File: guniFlask/app.py - > Line 167: razhod_name = cur.fetchone()[0] - File: guniFlask/app.py - > Line 171: addplashtane = 'INSERT INTO potrebitelski_razhodi (user_id, user_name, razhod_id, razhod_name, date_posted, suma_razhod) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')' % (user_id, username, razhod_id, razhod_name, date_posted, suma) -File: guniFlask/app.py - > reaches line 161, trigger word "execute(": - cur.execute(razhod_id) - -Vulnerability 9: -File: guniFlask/app.py - > User input at line 159, trigger word "form[": - tiprazhod = request.form['tiprazhod'] -Reassigned in: - File: guniFlask/app.py - > Line 160: razhod_id = 'SELECT id FROM razhodi WHERE razhod = '%s'' % tiprazhod - File: guniFlask/app.py - > Line 163: razhod_id = datarazhod[0] - File: guniFlask/app.py - > Line 165: razhod_name = 'SELECT razhod FROM razhodi WHERE id = '%s'' % razhod_id - File: guniFlask/app.py - > Line 167: razhod_name = cur.fetchone()[0] - File: guniFlask/app.py - > Line 171: addplashtane = 'INSERT INTO potrebitelski_razhodi (user_id, user_name, razhod_id, razhod_name, date_posted, suma_razhod) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')' % (user_id, username, razhod_id, razhod_name, date_posted, suma) -File: guniFlask/app.py - > reaches line 166, trigger word "execute(": - cur.execute(razhod_name) - -Vulnerability 10: -File: guniFlask/app.py - > User input at line 159, trigger word "form[": - tiprazhod = request.form['tiprazhod'] -Reassigned in: - File: guniFlask/app.py - > Line 160: razhod_id = 'SELECT id FROM razhodi WHERE razhod = '%s'' % tiprazhod - File: guniFlask/app.py - > Line 163: razhod_id = datarazhod[0] - File: guniFlask/app.py - > Line 165: razhod_name = 'SELECT razhod FROM razhodi WHERE id = '%s'' % razhod_id - File: guniFlask/app.py - > Line 167: razhod_name = cur.fetchone()[0] - File: guniFlask/app.py - > Line 171: addplashtane = 'INSERT INTO potrebitelski_razhodi (user_id, user_name, razhod_id, razhod_name, date_posted, suma_razhod) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')' % (user_id, username, razhod_id, razhod_name, date_posted, suma) -File: guniFlask/app.py - > reaches line 172, trigger word "execute(": - cur.execute(addplashtane) - -Vulnerability 11: -File: guniFlask/app.py - > User input at line 168, trigger word "form[": - suma = request.form['suma'] -Reassigned in: - File: guniFlask/app.py - > Line 171: addplashtane = 'INSERT INTO potrebitelski_razhodi (user_id, user_name, razhod_id, razhod_name, date_posted, suma_razhod) VALUES ('%s', '%s', '%s', '%s', '%s', '%s')' % (user_id, username, razhod_id, razhod_name, date_posted, suma) -File: guniFlask/app.py - > reaches line 172, trigger word "execute(": - cur.execute(addplashtane) - - - -alekspankov/docker-flask -https://github.com/alekspankov/docker-flask -Entry file: None -Scanned: 2016-10-20 13:04:47.379777 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alekspankov/docker-flask. - -Kryvonis/Flask-RQ -https://github.com/Kryvonis/Flask-RQ -Entry file: Flask-RQ/app.py -Scanned: 2016-10-20 13:04:48.679245 -No vulnerabilities found. - - -httpslixc/flask-web -https://github.com/httpslixc/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 13:04:49.197964 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -calsaviour/flask-blog -https://github.com/calsaviour/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:04:49.752715 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -naboson/messenger-flask -https://github.com/naboson/messenger-flask -Entry file: messenger-flask/entry.py -Scanned: 2016-10-20 13:04:51.061816 -No vulnerabilities found. - - -Kryvonis/Flask_colorize -https://github.com/Kryvonis/Flask_colorize -Entry file: Flask_colorize/app/__init__.py -Scanned: 2016-10-20 13:04:52.693260 -No vulnerabilities found. - - -rd93/flask-app -https://github.com/rd93/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:04:53.219107 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cpavanelli/testeFlask -https://github.com/cpavanelli/testeFlask -Entry file: None -Scanned: 2016-10-20 13:05:09.019675 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kelvinleong57/teammaker_flask -https://github.com/kelvinleong57/teammaker_flask -Entry file: teammaker_flask/teammaker_flask/__init__.py -Scanned: 2016-10-20 13:05:10.818034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -him229/flask-demo -https://github.com/him229/flask-demo -Entry file: None -Scanned: 2016-10-20 13:05:11.327527 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/him229/flask-demo. - -spurll/flask-template -https://github.com/spurll/flask-template -Entry file: None -Scanned: 2016-10-20 13:05:11.838082 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/spurll/flask-template. - -yuriymironov96/flask-webservice -https://github.com/yuriymironov96/flask-webservice -Entry file: flask-webservice/app/__init__.py -Scanned: 2016-10-20 13:05:16.200565 -Vulnerability 1: -File: flask-webservice/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-webservice/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flask-webservice/app/main/views.py - > Line 32: posts = pagination.items - File: flask-webservice/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-webservice/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flask-webservice/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-webservice/app/main/views.py - > Line 111: page = post.comments.count() - 1 / current_app.config['COMMENTS_PER_PAGE'] + 1 - File: flask-webservice/app/main/views.py - > Line 113: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flask-webservice/app/main/views.py - > Line 116: comments = pagination.items - File: flask-webservice/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-webservice/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 3: -File: flask-webservice/app/main/views.py - > User input at line 140, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-webservice/app/main/views.py - > Line 141: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flask-webservice/app/main/views.py - > Line 144: comments = pagination.items -File: flask-webservice/app/main/views.py - > reaches line 145, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 4: -File: flask-webservice/app/main/views.py - > User input at line 204, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-webservice/app/main/views.py - > Line 205: pagination = user.followers.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-webservice/app/main/views.py - > Line 208: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-webservice/app/main/views.py - > Line 203: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-webservice/app/main/views.py - > reaches line 210, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: flask-webservice/app/main/views.py - > User input at line 220, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-webservice/app/main/views.py - > Line 221: pagination = user.followed.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-webservice/app/main/views.py - > Line 224: followed = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-webservice/app/main/views.py - > Line 219: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-webservice/app/main/views.py - > reaches line 226, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followed.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, followed=followed) - - - -tomaszguzialek/flask-api -https://github.com/tomaszguzialek/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 13:05:16.740109 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ianunruh/hello-flask -https://github.com/ianunruh/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 13:05:17.326493 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -sternmatt/FLASK_DEMO -https://github.com/sternmatt/FLASK_DEMO -Entry file: FLASK_DEMO/app.py -Scanned: 2016-10-20 13:05:18.658354 -Vulnerability 1: -File: FLASK_DEMO/app.py - > User input at line 29, trigger word "form[": - stock = request.form['stockticker'] -Reassigned in: - File: FLASK_DEMO/app.py - > Line 30: api_url = 'https://www.quandl.com/api/v1/datasets/WIKI/%s.json' % stock - File: FLASK_DEMO/app.py - > Line 33: raw_data = session.get(api_url) - File: FLASK_DEMO/app.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('userinfo.html') -File: FLASK_DEMO/app.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',stockticker=stock, script=script, div=div) - - - -fishen/python_flask -https://github.com/fishen/python_flask -Entry file: None -Scanned: 2016-10-20 13:05:19.195480 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fishen/python_flask. - -VladyslavVelychko/Flask-microblog -https://github.com/VladyslavVelychko/Flask-microblog -Entry file: None -Scanned: 2016-10-20 13:05:21.734465 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -holygeek01/Learn-Flask -https://github.com/holygeek01/Learn-Flask -Entry file: Learn-Flask/main.py -Scanned: 2016-10-20 13:05:35.373623 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -xiyinmoon/flask_blog -https://github.com/xiyinmoon/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:05:35.886841 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QMickael/easy_flask -https://github.com/QMickael/easy_flask -Entry file: None -Scanned: 2016-10-20 13:05:37.492356 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/QMickael/easy_flask. - -gordoning/todolist_flask -https://github.com/gordoning/todolist_flask -Entry file: todolist_flask/doc/sample.py -Scanned: 2016-10-20 13:05:38.964911 -No vulnerabilities found. - - -artakak/TestFlask -https://github.com/artakak/TestFlask -Entry file: TestFlask/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 13:05:48.524983 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhangzju/flask_api -https://github.com/zhangzju/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-20 13:05:49.054666 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -travisoneill/algo-flask -https://github.com/travisoneill/algo-flask -Entry file: algo-flask/flask_server.py -Scanned: 2016-10-20 13:05:50.490385 -No vulnerabilities found. - - -shawnpdoherty/MegaFlask -https://github.com/shawnpdoherty/MegaFlask -Entry file: MegaFlask/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 13:06:06.151435 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -denewman/flask-api -https://github.com/denewman/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 13:06:07.208751 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -printxy/flask_app -https://github.com/printxy/flask_app -Entry file: None -Scanned: 2016-10-20 13:06:07.719156 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/printxy/flask_app. - -Kryvonis/Thread-Flask -https://github.com/Kryvonis/Thread-Flask -Entry file: Thread-Flask/main.py -Scanned: 2016-10-20 13:06:09.050085 -No vulnerabilities found. - - -SergiySavarin/flask_ex -https://github.com/SergiySavarin/flask_ex -Entry file: flask_ex/wsgi.py -Scanned: 2016-10-20 13:06:09.571664 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -supermenxxx/flask_tutorial -https://github.com/supermenxxx/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:06:10.089360 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vvijayak/flask_boilerplate -https://github.com/vvijayak/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-20 13:06:10.605593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SicunStudio/signup-flask -https://github.com/SicunStudio/signup-flask -Entry file: signup-flask/app/__init__.py -Scanned: 2016-10-20 13:06:12.049437 -No vulnerabilities found. - - -theglassbean/flask-blog -https://github.com/theglassbean/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:06:12.607564 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -pgeez/flask-demo -https://github.com/pgeez/flask-demo -Entry file: None -Scanned: 2016-10-20 13:06:13.123050 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pgeez/flask-demo. - -tahanasir/flask-microblog -https://github.com/tahanasir/flask-microblog -Entry file: None -Scanned: 2016-10-20 13:06:13.626533 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -curious725/blog-flask -https://github.com/curious725/blog-flask -Entry file: blog-flask/project/views.py -Scanned: 2016-10-20 13:06:14.344596 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -andbraga/ProbotFlask -https://github.com/andbraga/ProbotFlask -Entry file: ProbotFlask/flask_starter/flaskstarter/__init__.py -Scanned: 2016-10-20 13:06:26.476451 -Vulnerability 1: -File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > User input at line 43, trigger word ".data": - chosen_probot_id = form.probot.data -Reassigned in: - File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('probots.html',form=form, available_probot=available_probot) -File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('botcontrolphone.html',chosen_probot_id=chosen_probot_id) - -Vulnerability 2: -File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > User input at line 43, trigger word ".data": - chosen_probot_id = form.probot.data -Reassigned in: - File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('probots.html',form=form, available_probot=available_probot) -File: ProbotFlask/flask_starter/flaskstarter/views/main.py - > reaches line 61, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('botcontrol.html',chosen_probot_id=chosen_probot_id) - -Vulnerability 3: -File: ProbotFlask/flask_starter/flaskstarter/views/auth.py - > User input at line 50, trigger word "get(": - root_url = app.config.get('ROOT_URL') -File: ProbotFlask/flask_starter/flaskstarter/views/auth.py - > reaches line 52, trigger word "render_template(": - html = render_template('user/activate.html',confirm_url=confirm_url, username=username, root_url=root_url) - -Vulnerability 4: -File: ProbotFlask/flask_starter/flaskstarter/views/auth.py - > User input at line 82, trigger word ".data": - user = User(username=form.username.data, email=form.email.data) -Reassigned in: - File: ProbotFlask/flask_starter/flaskstarter/views/auth.py - > Line 91: token = generate_confirmation_token(user.email) -File: ProbotFlask/flask_starter/flaskstarter/views/auth.py - > reaches line 92, trigger word "url_for(": - confirm_url = url_for('auth.confirm_email',token=token, _external=True) - - - -xxxxsars/Flask_SQLite -https://github.com/xxxxsars/Flask_SQLite -Entry file: Flask_SQLite/draw_member.py -Scanned: 2016-10-20 13:06:28.094809 -Vulnerability 1: -File: Flask_SQLite/draw_member.py - > User input at line 21, trigger word "get(": - group_name = request.form.get('group_name', 'ALL') -Reassigned in: - File: Flask_SQLite/draw_member.py - > Line 32: valid_member_ids = [row[0] for row in cursor] - File: Flask_SQLite/draw_member.py - > Line 37: error_msg = '

No memebers in group '%s'

' % group_name - File: Flask_SQLite/draw_member.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (error_msg, 404) - File: Flask_SQLite/draw_member.py - > Line 40: lucky_memeber_id = random.choice(valid_member_ids) -File: Flask_SQLite/draw_member.py - > reaches line 26, trigger word "execute(": - cursor = db.execute(valid_members_sql) - -Vulnerability 2: -File: Flask_SQLite/draw_member.py - > User input at line 21, trigger word "get(": - group_name = request.form.get('group_name', 'ALL') -Reassigned in: - File: Flask_SQLite/draw_member.py - > Line 32: valid_member_ids = [row[0] for row in cursor] - File: Flask_SQLite/draw_member.py - > Line 37: error_msg = '

No memebers in group '%s'

' % group_name - File: Flask_SQLite/draw_member.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (error_msg, 404) - File: Flask_SQLite/draw_member.py - > Line 40: lucky_memeber_id = random.choice(valid_member_ids) -File: Flask_SQLite/draw_member.py - > reaches line 31, trigger word "execute(": - cursor = db.execute(valid_members_sql, (group_name)) - -Vulnerability 3: -File: Flask_SQLite/draw_member.py - > User input at line 21, trigger word "get(": - group_name = request.form.get('group_name', 'ALL') -Reassigned in: - File: Flask_SQLite/draw_member.py - > Line 32: valid_member_ids = [row[0] for row in cursor] - File: Flask_SQLite/draw_member.py - > Line 37: error_msg = '

No memebers in group '%s'

' % group_name - File: Flask_SQLite/draw_member.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (error_msg, 404) - File: Flask_SQLite/draw_member.py - > Line 40: lucky_memeber_id = random.choice(valid_member_ids) -File: Flask_SQLite/draw_member.py - > reaches line 42, trigger word "execute(": - member_group_name = db.execute('SELECT name, group_name FROM members WHERE id = ?', (lucky_memeber_id)).fetchone() - -Vulnerability 4: -File: Flask_SQLite/draw_member.py - > User input at line 21, trigger word "get(": - group_name = request.form.get('group_name', 'ALL') -Reassigned in: - File: Flask_SQLite/draw_member.py - > Line 32: valid_member_ids = [row[0] for row in cursor] - File: Flask_SQLite/draw_member.py - > Line 37: error_msg = '

No memebers in group '%s'

' % group_name - File: Flask_SQLite/draw_member.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (error_msg, 404) - File: Flask_SQLite/draw_member.py - > Line 40: lucky_memeber_id = random.choice(valid_member_ids) -File: Flask_SQLite/draw_member.py - > reaches line 48, trigger word "execute(": - db.execute('insert into draw_histories (memberid) values(?)', (lucky_memeber_id)) - -Vulnerability 5: -File: Flask_SQLite/draw_member.py - > User input at line 21, trigger word "get(": - group_name = request.form.get('group_name', 'ALL') -Reassigned in: - File: Flask_SQLite/draw_member.py - > Line 32: valid_member_ids = [row[0] for row in cursor] - File: Flask_SQLite/draw_member.py - > Line 37: error_msg = '

No memebers in group '%s'

' % group_name - File: Flask_SQLite/draw_member.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (error_msg, 404) - File: Flask_SQLite/draw_member.py - > Line 40: lucky_memeber_id = random.choice(valid_member_ids) -File: Flask_SQLite/draw_member.py - > reaches line 49, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('draw.html',name=member_name, group=group_name) - - - -Itaah/flask_itah -https://github.com/Itaah/flask_itah -Entry file: flask_itah/flask_itah.py -Scanned: 2016-10-20 13:06:29.369381 -No vulnerabilities found. - - -atomist-project-templates/flask-service -https://github.com/atomist-project-templates/flask-service -Entry file: flask-service/service.py -Scanned: 2016-10-20 13:06:29.899879 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qqxx6661/micblog -https://github.com/qqxx6661/micblog -Entry file: micblog/app/__init__.py -Scanned: 2016-10-20 13:06:31.582331 -Vulnerability 1: -File: micblog/app/views.py - > User input at line 81, trigger word "get(": - user_name = request.form.get('user_name') -Reassigned in: - File: micblog/app/views.py - > Line 89: user.nickname = user_name -File: micblog/app/views.py - > reaches line 83, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - -Vulnerability 2: -File: micblog/app/views.py - > User input at line 82, trigger word "get(": - user_email = request.form.get('user_email') -Reassigned in: - File: micblog/app/views.py - > Line 90: user.email = user_email -File: micblog/app/views.py - > reaches line 83, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - - - -optrv/Flog -https://github.com/optrv/Flog -Entry file: None -Scanned: 2016-10-20 13:06:42.638952 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/optrv/Flog. - -qing-stanley/web-flask-tutorial -https://github.com/qing-stanley/web-flask-tutorial -Entry file: web-flask-tutorial/app/__init__.py -Scanned: 2016-10-20 13:06:52.425838 -No vulnerabilities found. - - -AngelMunoz/FlaskWebProjects -https://github.com/AngelMunoz/FlaskWebProjects -Entry file: FlaskWebProjects/FlaskBlueprintAPI/FlaskBlueprintAPI/__init__.py -Scanned: 2016-10-20 13:07:00.015928 -No vulnerabilities found. - - -TommyBlanchard/FlaskHerokuStockTicker -https://github.com/TommyBlanchard/FlaskHerokuStockTicker -Entry file: FlaskHerokuStockTicker/app.py -Scanned: 2016-10-20 13:07:01.456835 -No vulnerabilities found. - - -adilmoujahid/flask-twitter-clone -https://github.com/adilmoujahid/flask-twitter-clone -Entry file: flask-twitter-clone/project/__init__.py -Scanned: 2016-10-20 13:07:03.199329 -No vulnerabilities found. - - -bekkam/flask-script-practice -https://github.com/bekkam/flask-script-practice -Entry file: flask-script-practice/myapp.py -Scanned: 2016-10-20 13:07:03.711940 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wintermute1/Flask-Restful-Api -https://github.com/Wintermute1/Flask-Restful-Api -Entry file: Flask-Restful-Api/FlaskRestfulApi.py -Scanned: 2016-10-20 13:07:05.683755 -No vulnerabilities found. - - -bekkam/flask-migration-practice -https://github.com/bekkam/flask-migration-practice -Entry file: flask-migration-practice/app.py -Scanned: 2016-10-20 13:07:07.147065 -No vulnerabilities found. - - -kkweon/price_alert_flask -https://github.com/kkweon/price_alert_flask -Entry file: price_alert_flask/src/app.py -Scanned: 2016-10-20 13:07:08.803164 -Vulnerability 1: -File: price_alert_flask/src/models/stores/views.py - > User input at line 30, trigger word "form[": - query = json.loads(request.form['query'].replace(''', '"')) -Reassigned in: - File: price_alert_flask/src/models/stores/views.py - > Line 35: store.query = query -File: price_alert_flask/src/models/stores/views.py - > reaches line 30, trigger word "replace(": - query = json.loads(request.form['query'].replace(''', '"')) - -Vulnerability 2: -File: price_alert_flask/src/models/stores/views.py - > User input at line 56, trigger word "form[": - query = json.loads(request.form['query'].replace(''', '"')) -File: price_alert_flask/src/models/stores/views.py - > reaches line 56, trigger word "replace(": - query = json.loads(request.form['query'].replace(''', '"')) - - - -absinthetized/uwsgi-flask-multiprocess-test -https://github.com/absinthetized/uwsgi-flask-multiprocess-test -Entry file: uwsgi-flask-multiprocess-test/app.py -Scanned: 2016-10-20 13:07:10.104424 -No vulnerabilities found. - - -wallacejd12/FSND-Udacity-Flask-App -https://github.com/wallacejd12/FSND-Udacity-Flask-App -Entry file: FSND-Udacity-Flask-App/catalog.py -Scanned: 2016-10-20 13:07:17.217242 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -artempronevskiy/Small-test-Flask-app -https://github.com/artempronevskiy/Small-test-Flask-app -Entry file: Small-test-Flask-app/main.py -Scanned: 2016-10-20 13:07:18.570206 -Vulnerability 1: -File: Small-test-Flask-app/main.py - > User input at line 34, trigger word "form[": - username = request.form['username'] -File: Small-test-Flask-app/main.py - > reaches line 41, trigger word "execute(": - cursor.execute(sql_query, (str(username), str(sha256(password.encode('utf-8')).hexdigest()))) - -Vulnerability 2: -File: Small-test-Flask-app/main.py - > User input at line 35, trigger word "form[": - password = request.form['password'] -File: Small-test-Flask-app/main.py - > reaches line 41, trigger word "execute(": - cursor.execute(sql_query, (str(username), str(sha256(password.encode('utf-8')).hexdigest()))) - -Vulnerability 3: -File: Small-test-Flask-app/main.py - > User input at line 58, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: Small-test-Flask-app/main.py - > Line 71: session['username'] = username -File: Small-test-Flask-app/main.py - > reaches line 64, trigger word "execute(": - cursor.execute(sql, (username)) - - - -MrXcitement/python-flask-hello -https://github.com/MrXcitement/python-flask-hello -Entry file: python-flask-hello/app/app.py -Scanned: 2016-10-20 13:07:19.874905 -No vulnerabilities found. - - -samabhi/MegaFlaskTut -https://github.com/samabhi/MegaFlaskTut -Entry file: MegaFlaskTut/app/__init__.py -Scanned: 2016-10-20 13:07:21.164589 -No vulnerabilities found. - - -LarsBergqvist/python_flask_authentication -https://github.com/LarsBergqvist/python_flask_authentication -Entry file: python_flask_authentication/basic_auth/__init__.py -Scanned: 2016-10-20 13:07:22.597249 -No vulnerabilities found. - - -ianunruh/flask-api-skeleton -https://github.com/ianunruh/flask-api-skeleton -Entry file: flask-api-skeleton/backend/app.py -Scanned: 2016-10-20 13:07:24.052520 -No vulnerabilities found. - - -ajeyamk/flask-python-epoch -https://github.com/ajeyamk/flask-python-epoch -Entry file: flask-python-epoch/controller.py -Scanned: 2016-10-20 13:07:25.549308 -Vulnerability 1: -File: flask-python-epoch/logservice.py - > User input at line 197, trigger word "get(": - update_log_query = LogTable.select().where(LogTable.logged_date == data['log_date'] & LogTable.user == return_data['User_id'] & LogTable.project == data['proj_id'] & LogTable.job_type == data['jobtype_id']).get() -Reassigned in: - File: flask-python-epoch/logservice.py - > Line 199: update_log_object = LogTable.update(update_log).where(LogTable.id == update_log_query.id) - File: flask-python-epoch/logservice.py - > Line 201: last_update = LogTable.get(LogTable.id == update_log_query.id) -File: flask-python-epoch/logservice.py - > reaches line 200, trigger word "execute(": - update_log_object.execute() - - - -s0rata/flask-by-example -https://github.com/s0rata/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-20 13:07:26.323378 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lassegit/flask-reactjs -https://github.com/lassegit/flask-reactjs -Entry file: None -Scanned: 2016-10-20 13:07:29.452757 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lassegit/flask-reactjs. - -YellowGB/Flask -https://github.com/YellowGB/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:07:29.963216 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -zhaokefei/flask -https://github.com/zhaokefei/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:07:30.556599 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -k9imJ/flask -https://github.com/k9imJ/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:07:31.136810 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -berstearns/flask -https://github.com/berstearns/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:07:31.728364 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -minglan01/flask -https://github.com/minglan01/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:07:32.337625 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bellcodo/fisrt-flask-app -https://github.com/bellcodo/fisrt-flask-app -Entry file: fisrt-flask-app/hello_app.py -Scanned: 2016-10-20 13:07:33.657879 -No vulnerabilities found. - - -EverestYAO/flask-blog -https://github.com/EverestYAO/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:07:34.213332 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Sthacks/sthacksWebsite -https://github.com/Sthacks/sthacksWebsite -Entry file: sthacksWebsite/app.py -Scanned: 2016-10-20 13:07:38.114349 -No vulnerabilities found. - - -gregwebb/flaskproject -https://github.com/gregwebb/flaskproject -Entry file: None -Scanned: 2016-10-20 13:07:38.632220 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MakrMelon/flasky -https://github.com/MakrMelon/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:07:39.144873 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lbx6z-2/flaskr -https://github.com/lbx6z-2/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:07:43.640495 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shalev67/flasky -https://github.com/shalev67/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:07:53.189932 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ramramu3433/flaskapp -https://github.com/ramramu3433/flaskapp -Entry file: None -Scanned: 2016-10-20 13:08:00.690994 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ramramu3433/flaskapp. - -sanjayankur31/flaskr -https://github.com/sanjayankur31/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:08:02.200483 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kaish5536/Flaskr -https://github.com/kaish5536/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 13:08:04.717500 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hackeris/flasktest -https://github.com/hackeris/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:08:05.239863 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mariavarley/flaskr -https://github.com/mariavarley/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:08:05.760373 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hmc-cs-gdiehl/flaskr -https://github.com/hmc-cs-gdiehl/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:08:06.267131 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wwwxmu/flaskweb -https://github.com/wwwxmu/flaskweb -Entry file: None -Scanned: 2016-10-20 13:08:07.802464 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -beautilut/FlaskTemplate -https://github.com/beautilut/FlaskTemplate -Entry file: FlaskTemplate/root.py -Scanned: 2016-10-20 13:08:11.144103 -No vulnerabilities found. - - -alleyb/flaskPractice -https://github.com/alleyb/flaskPractice -Entry file: flaskPractice/flaskr.py -Scanned: 2016-10-20 13:08:12.469983 -No vulnerabilities found. - - -YuiJL/myweblog -https://github.com/YuiJL/myweblog -Entry file: myweblog/www/app/__init__.py -Scanned: 2016-10-20 13:08:20.105977 -Vulnerability 1: -File: myweblog/www/app/utilities.py - > User input at line 126, trigger word "get(": - cookie = request.cookies.get(current_app.config['COOKIE_NAME']).split('+').pop() -File: myweblog/www/app/utilities.py - > reaches line 127, trigger word "set_cookie(": - response.set_cookie(current_app.config['COOKIE_NAME'], '+' + cookie,httponly=True) - -Vulnerability 2: -File: myweblog/www/app/views/route.py - > User input at line 103, trigger word "get(": - name = request.form.get('name') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 113: user = User(name=name, email=email, password=password) - File: myweblog/www/app/views/route.py - > Line 114: user_resp = user.__dict__ - File: myweblog/www/app/views/route.py - > Line 116: cookie = user_to_cookie(user_resp) - File: myweblog/www/app/views/route.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('route.index')) - File: myweblog/www/app/views/route.py - > Line 100: ret_MAYBE_FUNCTION_NAME = render_template('register.html',site_key=current_app.config['RECAPTCHA_SITE_KEY']) - File: myweblog/www/app/views/route.py - > Line 105: ret_MAYBE_FUNCTION_NAME = make_response('Username is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 108: ret_MAYBE_FUNCTION_NAME = make_response('E-mail is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 111: ret_MAYBE_FUNCTION_NAME = make_response('You're a bot.', 403) -File: myweblog/www/app/views/route.py - > reaches line 118, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = login_response(jsonify(user=user_resp), cookie) - -Vulnerability 3: -File: myweblog/www/app/views/route.py - > User input at line 106, trigger word "get(": - email = request.form.get('email') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 113: user = User(name=name, email=email, password=password) - File: myweblog/www/app/views/route.py - > Line 114: user_resp = user.__dict__ - File: myweblog/www/app/views/route.py - > Line 116: cookie = user_to_cookie(user_resp) - File: myweblog/www/app/views/route.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('route.index')) - File: myweblog/www/app/views/route.py - > Line 100: ret_MAYBE_FUNCTION_NAME = render_template('register.html',site_key=current_app.config['RECAPTCHA_SITE_KEY']) - File: myweblog/www/app/views/route.py - > Line 105: ret_MAYBE_FUNCTION_NAME = make_response('Username is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 108: ret_MAYBE_FUNCTION_NAME = make_response('E-mail is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 111: ret_MAYBE_FUNCTION_NAME = make_response('You're a bot.', 403) -File: myweblog/www/app/views/route.py - > reaches line 118, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = login_response(jsonify(user=user_resp), cookie) - -Vulnerability 4: -File: myweblog/www/app/views/route.py - > User input at line 112, trigger word "get(": - password = request.form.get('sha1_password') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 113: user = User(name=name, email=email, password=password) - File: myweblog/www/app/views/route.py - > Line 114: user_resp = user.__dict__ - File: myweblog/www/app/views/route.py - > Line 116: cookie = user_to_cookie(user_resp) - File: myweblog/www/app/views/route.py - > Line 99: ret_MAYBE_FUNCTION_NAME = redirect(url_for('route.index')) - File: myweblog/www/app/views/route.py - > Line 100: ret_MAYBE_FUNCTION_NAME = render_template('register.html',site_key=current_app.config['RECAPTCHA_SITE_KEY']) - File: myweblog/www/app/views/route.py - > Line 105: ret_MAYBE_FUNCTION_NAME = make_response('Username is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 108: ret_MAYBE_FUNCTION_NAME = make_response('E-mail is taken, please try another.', 403) - File: myweblog/www/app/views/route.py - > Line 111: ret_MAYBE_FUNCTION_NAME = make_response('You're a bot.', 403) -File: myweblog/www/app/views/route.py - > reaches line 118, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = login_response(jsonify(user=user_resp), cookie) - -Vulnerability 5: -File: myweblog/www/app/views/route.py - > User input at line 128, trigger word "get(": - email = request.form.get('email') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 130: user_resp = db.users.find_one('email'email) - File: myweblog/www/app/views/route.py - > Line 138: cookie = userToCookie(user_resp) - File: myweblog/www/app/views/route.py - > Line 133: ret_MAYBE_FUNCTION_NAME = make_response('Invalid email', 403) - File: myweblog/www/app/views/route.py - > Line 136: ret_MAYBE_FUNCTION_NAME = make_response('Wrong password', 403) -File: myweblog/www/app/views/route.py - > reaches line 140, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = login_response(jsonify(user=user_resp), cookie) - -Vulnerability 6: -File: myweblog/www/app/views/route.py - > User input at line 156, trigger word "get(": - view_mode = request.args.get('view') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 157: cookie = view_to_cookie(view_mode) - File: myweblog/www/app/views/route.py - > Line 160: ret_MAYBE_FUNCTION_NAME = response -File: myweblog/www/app/views/route.py - > reaches line 158, trigger word "jsonify(": - response = jsonify(view=view_mode) - -Vulnerability 7: -File: myweblog/www/app/views/route.py - > User input at line 156, trigger word "get(": - view_mode = request.args.get('view') -Reassigned in: - File: myweblog/www/app/views/route.py - > Line 157: cookie = view_to_cookie(view_mode) - File: myweblog/www/app/views/route.py - > Line 160: ret_MAYBE_FUNCTION_NAME = response -File: myweblog/www/app/views/route.py - > reaches line 159, trigger word "set_cookie(": - response.set_cookie(current_app.config['COOKIE_NAME'], cookie,max_age=86400, httponly=True) - -Vulnerability 8: -File: myweblog/www/app/views/api.py - > User input at line 89, trigger word "get(": - tag = request.form.get('tag').lstrip('/\;,. ').rstrip('/\;,. ') -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 92: blog = Blog(user_id=g.__user__.get('_id'), user_name=g.__user__.get('name'), user_image=g.__user__.get('image'), title=title.strip(), tag=re.split('[\s\;\,\.\\\/]+', tag), content=content.lstrip(' -').rstrip()) - File: myweblog/www/app/views/api.py - > Line 100: blog_resp = blog.__dict__ - File: myweblog/www/app/views/api.py - > Line 87: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 101, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(blog_id=str(blog_resp['_id'])) - -Vulnerability 9: -File: myweblog/www/app/views/api.py - > User input at line 92, trigger word "get(": - blog = Blog(user_id=g.__user__.get('_id'), user_name=g.__user__.get('name'), user_image=g.__user__.get('image'), title=title.strip(), tag=re.split('[\s\;\,\.\\\/]+', tag), content=content.lstrip(' -').rstrip()) -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 100: blog_resp = blog.__dict__ - File: myweblog/www/app/views/api.py - > Line 87: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 101, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(blog_id=str(blog_resp['_id'])) - -Vulnerability 10: -File: myweblog/www/app/views/api.py - > User input at line 216, trigger word "get(": - blog_id = db.comments.find_one('_id'ObjectId(item_id)).get('blog_id') -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 224: ret_MAYBE_FUNCTION_NAME = jsonify(item_id=item_id) - File: myweblog/www/app/views/api.py - > Line 213: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 223, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('api.api_get_blog_comments',blog_id=blog_id)) - -Vulnerability 11: -File: myweblog/www/app/views/api.py - > User input at line 216, trigger word "get(": - blog_id = db.comments.find_one('_id'ObjectId(item_id)).get('blog_id') -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 224: ret_MAYBE_FUNCTION_NAME = jsonify(item_id=item_id) - File: myweblog/www/app/views/api.py - > Line 213: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 223, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('api.api_get_blog_comments',blog_id=blog_id)) - -Vulnerability 12: -File: myweblog/www/app/views/api.py - > User input at line 247, trigger word "get(": - blog_id = db.comments.find_one('_id'ObjectId(comment_id)).get('blog_id') -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 235: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 248, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('api.api_get_blog_comments',blog_id=blog_id)) - -Vulnerability 13: -File: myweblog/www/app/views/api.py - > User input at line 247, trigger word "get(": - blog_id = db.comments.find_one('_id'ObjectId(comment_id)).get('blog_id') -Reassigned in: - File: myweblog/www/app/views/api.py - > Line 235: ret_MAYBE_FUNCTION_NAME = make_response('Permission denied.', 403) -File: myweblog/www/app/views/api.py - > reaches line 248, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('api.api_get_blog_comments',blog_id=blog_id)) - - - -SIG-IR/flask_demo -https://github.com/SIG-IR/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 13:08:20.625377 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -per19/app-flask -https://github.com/per19/app-flask -Entry file: app-flask/app.py -Scanned: 2016-10-20 13:08:22.041302 -No vulnerabilities found. - - -harish-rajendran/Flask-Project -https://github.com/harish-rajendran/Flask-Project -Entry file: Flask-Project/routes.py -Scanned: 2016-10-20 13:08:23.349451 -Vulnerability 1: -File: Flask-Project/routes.py - > User input at line 33, trigger word ".data": - name = form.name.data -Reassigned in: - File: Flask-Project/routes.py - > Line 54: c = 'hey , ' + name + '..Have a good day!!!' - File: Flask-Project/routes.py - > Line 55: ret_MAYBE_FUNCTION_NAME = c - File: Flask-Project/routes.py - > Line 57: ret_MAYBE_FUNCTION_NAME = render_template('register.html',form=form) - File: Flask-Project/routes.py - > Line 31: ret_MAYBE_FUNCTION_NAME = 'ALL FIELDS ARE REQUIRED' - File: Flask-Project/routes.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('redirect.html') -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 2: -File: Flask-Project/routes.py - > User input at line 34, trigger word ".data": - email = form.email.data -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 3: -File: Flask-Project/routes.py - > User input at line 35, trigger word ".data": - password = form.password.data -File: Flask-Project/routes.py - > reaches line 52, trigger word "execute(": - cursor.execute('INSERT INTO example(Name,email,Password,Date)VALUES(%s,%s,%s,%s)', (name, email, password, date)) - -Vulnerability 4: -File: Flask-Project/routes.py - > User input at line 66, trigger word ".data": - email = form.email.data -File: Flask-Project/routes.py - > reaches line 84, trigger word "execute(": - cursor.execute('INSERT INTO log(email,Password,Date)VALUES(%s,%s,%s)', (email, password, date)) - -Vulnerability 5: -File: Flask-Project/routes.py - > User input at line 67, trigger word ".data": - password = form.password.data -File: Flask-Project/routes.py - > reaches line 84, trigger word "execute(": - cursor.execute('INSERT INTO log(email,Password,Date)VALUES(%s,%s,%s)', (email, password, date)) - - - -ovidiu1/python-flask -https://github.com/ovidiu1/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 13:08:23.847659 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -leighmforrest/flask_app -https://github.com/leighmforrest/flask_app -Entry file: None -Scanned: 2016-10-20 13:08:25.348366 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leighmforrest/flask_app. - -sourcreme/pythonFlask -https://github.com/sourcreme/pythonFlask -Entry file: pythonFlask/server.py -Scanned: 2016-10-20 13:08:26.954603 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dmlevering/learning-flask -https://github.com/dmlevering/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 13:08:27.528541 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wsygkfz/flask_frame -https://github.com/wsygkfz/flask_frame -Entry file: None -Scanned: 2016-10-20 13:08:31.957488 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wsygkfz/flask_frame. - -volmaster/flask-app -https://github.com/volmaster/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:08:32.986583 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -calsaviour/flask-intro -https://github.com/calsaviour/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:08:33.501423 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alviandk/flask-judul -https://github.com/alviandk/flask-judul -Entry file: flask-judul/app/__init__.py -Scanned: 2016-10-20 13:08:34.999655 -No vulnerabilities found. - - -val-sytch/blog_flask -https://github.com/val-sytch/blog_flask -Entry file: None -Scanned: 2016-10-20 13:08:43.983999 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/val-sytch/blog_flask. - -EgorKurito/flask_project -https://github.com/EgorKurito/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 13:08:45.796305 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juwaini/flask-tutorial -https://github.com/juwaini/flask-tutorial -Entry file: None -Scanned: 2016-10-20 13:08:46.291783 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cloudyuga/flask-app -https://github.com/cloudyuga/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:08:46.787675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hazybluedot/indie_flask -https://github.com/hazybluedot/indie_flask -Entry file: indie_flask/indie_flask/__init__.py -Scanned: 2016-10-20 13:08:54.279546 -Vulnerability 1: -File: indie_flask/indie_flask/__init__.py - > User input at line 59, trigger word "form[": - source = request.form['source'] -Reassigned in: - File: indie_flask/indie_flask/__init__.py - > Line 72: uparts = urlparse(source) - File: indie_flask/indie_flask/__init__.py - > Line 80: task = validate_and_publish.delay(source, target) - File: indie_flask/indie_flask/__init__.py - > Line 83: response = 'status''summary''location''queued''Webmention was queued for processing'status_url - File: indie_flask/indie_flask/__init__.py - > Line 61: ret_MAYBE_FUNCTION_NAME = make_response('no source defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 66: ret_MAYBE_FUNCTION_NAME = make_response('no target defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 68: uparts = urlparse(target) - File: indie_flask/indie_flask/__init__.py - > Line 70: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 74: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 77: ret_MAYBE_FUNCTION_NAME = make_response('source and target must be different', 400) -File: indie_flask/indie_flask/__init__.py - > reaches line 82, trigger word "url_for(": - status_url = url_for('taskstatus',task_id=task.id) - -Vulnerability 2: -File: indie_flask/indie_flask/__init__.py - > User input at line 64, trigger word "form[": - target = request.form['target'] -Reassigned in: - File: indie_flask/indie_flask/__init__.py - > Line 68: uparts = urlparse(target) - File: indie_flask/indie_flask/__init__.py - > Line 72: uparts = urlparse(source) - File: indie_flask/indie_flask/__init__.py - > Line 80: task = validate_and_publish.delay(source, target) - File: indie_flask/indie_flask/__init__.py - > Line 83: response = 'status''summary''location''queued''Webmention was queued for processing'status_url - File: indie_flask/indie_flask/__init__.py - > Line 61: ret_MAYBE_FUNCTION_NAME = make_response('no source defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 66: ret_MAYBE_FUNCTION_NAME = make_response('no target defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 70: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 74: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 77: ret_MAYBE_FUNCTION_NAME = make_response('source and target must be different', 400) -File: indie_flask/indie_flask/__init__.py - > reaches line 82, trigger word "url_for(": - status_url = url_for('taskstatus',task_id=task.id) - -Vulnerability 3: -File: indie_flask/indie_flask/__init__.py - > User input at line 59, trigger word "form[": - source = request.form['source'] -Reassigned in: - File: indie_flask/indie_flask/__init__.py - > Line 72: uparts = urlparse(source) - File: indie_flask/indie_flask/__init__.py - > Line 80: task = validate_and_publish.delay(source, target) - File: indie_flask/indie_flask/__init__.py - > Line 83: response = 'status''summary''location''queued''Webmention was queued for processing'status_url - File: indie_flask/indie_flask/__init__.py - > Line 61: ret_MAYBE_FUNCTION_NAME = make_response('no source defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 66: ret_MAYBE_FUNCTION_NAME = make_response('no target defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 68: uparts = urlparse(target) - File: indie_flask/indie_flask/__init__.py - > Line 70: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 74: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 77: ret_MAYBE_FUNCTION_NAME = make_response('source and target must be different', 400) -File: indie_flask/indie_flask/__init__.py - > reaches line 88, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(response), 201, 'Location'status_url) - -Vulnerability 4: -File: indie_flask/indie_flask/__init__.py - > User input at line 64, trigger word "form[": - target = request.form['target'] -Reassigned in: - File: indie_flask/indie_flask/__init__.py - > Line 68: uparts = urlparse(target) - File: indie_flask/indie_flask/__init__.py - > Line 72: uparts = urlparse(source) - File: indie_flask/indie_flask/__init__.py - > Line 80: task = validate_and_publish.delay(source, target) - File: indie_flask/indie_flask/__init__.py - > Line 83: response = 'status''summary''location''queued''Webmention was queued for processing'status_url - File: indie_flask/indie_flask/__init__.py - > Line 61: ret_MAYBE_FUNCTION_NAME = make_response('no source defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 66: ret_MAYBE_FUNCTION_NAME = make_response('no target defined', 400) - File: indie_flask/indie_flask/__init__.py - > Line 70: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 74: ret_MAYBE_FUNCTION_NAME = make_response('unhandled scheme', 400) - File: indie_flask/indie_flask/__init__.py - > Line 77: ret_MAYBE_FUNCTION_NAME = make_response('source and target must be different', 400) -File: indie_flask/indie_flask/__init__.py - > reaches line 88, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(response), 201, 'Location'status_url) - - - -httpslixc/flask-web -https://github.com/httpslixc/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 13:09:00.812792 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -neefrankie/flask-demo -https://github.com/neefrankie/flask-demo -Entry file: None -Scanned: 2016-10-20 13:09:02.314841 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/neefrankie/flask-demo. - -arnobroekhof/flask-boilerplate -https://github.com/arnobroekhof/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 13:09:04.822278 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arnobroekhof/flask-boilerplate. - -jasontatem/flask_demo -https://github.com/jasontatem/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-20 13:09:05.370903 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vasilaky/formtest_flask -https://github.com/vasilaky/formtest_flask -Entry file: formtest_flask/Form/__init__.py -Scanned: 2016-10-20 13:09:07.186398 -No vulnerabilities found. - - -sirko1990/flask_app -https://github.com/sirko1990/flask_app -Entry file: None -Scanned: 2016-10-20 13:09:08.703538 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sirko1990/flask_app. - -edwinyoung/personal-flask -https://github.com/edwinyoung/personal-flask -Entry file: personal-flask/Personal-Flask.py -Scanned: 2016-10-20 13:09:12.040519 -No vulnerabilities found. - - -dineshk8666/Flask_Examples -https://github.com/dineshk8666/Flask_Examples -Entry file: Flask_Examples/hello.py -Scanned: 2016-10-20 13:09:13.352071 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adarshmammen/flask_stocks -https://github.com/adarshmammen/flask_stocks -Entry file: flask_stocks/app.py -Scanned: 2016-10-20 13:09:19.669969 -No vulnerabilities found. - - -sternmatt/FLASK_DEMO -https://github.com/sternmatt/FLASK_DEMO -Entry file: FLASK_DEMO/app.py -Scanned: 2016-10-20 13:09:22.092060 -Vulnerability 1: -File: FLASK_DEMO/app.py - > User input at line 29, trigger word "form[": - stock = request.form['stockticker'] -Reassigned in: - File: FLASK_DEMO/app.py - > Line 30: api_url = 'https://www.quandl.com/api/v1/datasets/WIKI/%s.json' % stock - File: FLASK_DEMO/app.py - > Line 33: raw_data = session.get(api_url) - File: FLASK_DEMO/app.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('userinfo.html') -File: FLASK_DEMO/app.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',stockticker=stock, script=script, div=div) - - - -harshmathur1990/flask_boilerplate -https://github.com/harshmathur1990/flask_boilerplate -Entry file: flask_boilerplate/application/__init__.py -Scanned: 2016-10-20 13:09:22.620328 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dtrodger/first_flask -https://github.com/dtrodger/first_flask -Entry file: first_flask/app/__init__.py -Scanned: 2016-10-20 13:09:30.720000 -No vulnerabilities found. - - -gamte19/Flask_dojo -https://github.com/gamte19/Flask_dojo -Entry file: Flask_dojo/main.py -Scanned: 2016-10-20 13:09:32.129000 -No vulnerabilities found. - - -lepkebocs/flask_dojo -https://github.com/lepkebocs/flask_dojo -Entry file: flask_dojo/dojo.py -Scanned: 2016-10-20 13:09:33.431673 -No vulnerabilities found. - - -bjnooms/flask_wiki -https://github.com/bjnooms/flask_wiki -Entry file: flask_wiki/__init__.py -Scanned: 2016-10-20 13:09:36.251168 -No vulnerabilities found. - - -sp41mer/Flask_logger -https://github.com/sp41mer/Flask_logger -Entry file: Flask_logger/Logger.py -Scanned: 2016-10-20 13:09:37.590138 -No vulnerabilities found. - - -sanjayankur31/flask-grinberg -https://github.com/sanjayankur31/flask-grinberg -Entry file: flask-grinberg/app/__init__.py -Scanned: 2016-10-20 13:09:39.088866 -No vulnerabilities found. - - -xiyinmoon/flask_blog -https://github.com/xiyinmoon/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:09:39.598983 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -QMickael/easy_flask -https://github.com/QMickael/easy_flask -Entry file: None -Scanned: 2016-10-20 13:09:40.107864 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/QMickael/easy_flask. - -gordoning/todolist_flask -https://github.com/gordoning/todolist_flask -Entry file: todolist_flask/doc/sample.py -Scanned: 2016-10-20 13:09:41.511064 -No vulnerabilities found. - - -artakak/TestFlask -https://github.com/artakak/TestFlask -Entry file: TestFlask/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 13:09:44.816522 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sunghyunzz/flask-ultrajson -https://github.com/sunghyunzz/flask-ultrajson -Entry file: flask-ultrajson/tests/app.py -Scanned: 2016-10-20 13:09:46.252429 -No vulnerabilities found. - - -qmehdi/flask_app -https://github.com/qmehdi/flask_app -Entry file: None -Scanned: 2016-10-20 13:09:46.773546 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/qmehdi/flask_app. - -navcat/flask_baidu -https://github.com/navcat/flask_baidu -Entry file: flask_baidu/baidu.py -Scanned: 2016-10-20 13:09:48.090386 -No vulnerabilities found. - - -Ezi4Zy/mastering_flask -https://github.com/Ezi4Zy/mastering_flask -Entry file: mastering_flask/mastering_flask.py -Scanned: 2016-10-20 13:09:49.409907 -No vulnerabilities found. - - -BasalGanglia/flask-aws -https://github.com/BasalGanglia/flask-aws -Entry file: flask-aws/hello.py -Scanned: 2016-10-20 13:09:50.947468 -No vulnerabilities found. - - -SergiySavarin/flask_ex -https://github.com/SergiySavarin/flask_ex -Entry file: flask_ex/wsgi.py -Scanned: 2016-10-20 13:09:51.461733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lorszil/flask-dojo -https://github.com/lorszil/flask-dojo -Entry file: flask-dojo/request-counter.py -Scanned: 2016-10-20 13:09:52.752595 -No vulnerabilities found. - - -krs89/flask_dojo -https://github.com/krs89/flask_dojo -Entry file: flask_dojo/app.py -Scanned: 2016-10-20 13:09:55.115169 -No vulnerabilities found. - - -breezeofjune/flask-todolist -https://github.com/breezeofjune/flask-todolist -Entry file: flask-todolist/todolist/app/__init__.py -Scanned: 2016-10-20 13:10:06.174669 -Vulnerability 1: -File: flask-todolist/todolist/app/main/views.py - > User input at line 28, trigger word "get(": - page_index = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-todolist/todolist/app/main/views.py - > Line 31: pagination = cur_user_todos.paginate(page_index,per_page=5, error_out=False) - File: flask-todolist/todolist/app/main/views.py - > Line 33: todo_result = pagination.items -File: flask-todolist/todolist/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('main.html',title='My_todo_list', todos=todo_result, pagination=pagination) - - - -nn243823163/flask_qichacha -https://github.com/nn243823163/flask_qichacha -Entry file: flask_qichacha/app/__init__.py -Scanned: 2016-10-20 13:10:07.838875 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -synnick/flask-quickstart -https://github.com/synnick/flask-quickstart -Entry file: flask-quickstart/flask-quickstart/cli.py -Scanned: 2016-10-20 13:10:08.362290 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mrcosta/flask-boilerplate -https://github.com/mrcosta/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 13:10:08.883228 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrcosta/flask-boilerplate. - -bullkyker/flask_app -https://github.com/bullkyker/flask_app -Entry file: None -Scanned: 2016-10-20 13:10:09.382515 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bullkyker/flask_app. - -acraig94/curly-flask -https://github.com/acraig94/curly-flask -Entry file: curly-flask/app.py -Scanned: 2016-10-20 13:10:10.714234 -No vulnerabilities found. - - -levi-james/flask_blog -https://github.com/levi-james/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:10:11.226991 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -antoniocsz/LivroFlask -https://github.com/antoniocsz/LivroFlask -Entry file: LivroFlask/app/__init__.py -Scanned: 2016-10-20 13:10:12.902508 -Vulnerability 1: -File: LivroFlask/app/main/views.py - > User input at line 18, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: LivroFlask/app/main/views.py - > Line 26: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: LivroFlask/app/main/views.py - > Line 29: posts = pagination.items - File: LivroFlask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: LivroFlask/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: LivroFlask/app/main/views.py - > User input at line 21, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: LivroFlask/app/main/views.py - > Line 19: show_followed = False - File: LivroFlask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: LivroFlask/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: LivroFlask/app/main/views.py - > User input at line 36, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: LivroFlask/app/main/views.py - > Line 37: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: LivroFlask/app/main/views.py - > Line 40: posts = pagination.items -File: LivroFlask/app/main/views.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: LivroFlask/app/main/views.py - > User input at line 146, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: LivroFlask/app/main/views.py - > Line 147: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: LivroFlask/app/main/views.py - > Line 148: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: LivroFlask/app/main/views.py - > Line 145: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: LivroFlask/app/main/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: LivroFlask/app/main/views.py - > User input at line 158, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: LivroFlask/app/main/views.py - > Line 159: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: LivroFlask/app/main/views.py - > Line 160: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: LivroFlask/app/main/views.py - > Line 157: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: LivroFlask/app/main/views.py - > reaches line 161, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followers', pagination=pagination, follows=follows) - - - -ivanpch/microblog -https://github.com/ivanpch/microblog -Entry file: None -Scanned: 2016-10-20 13:10:13.417036 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lihuii/Log -https://github.com/lihuii/Log -Entry file: Log/app/__init__.py -Scanned: 2016-10-20 13:10:19.817173 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -DevinCalado/FlaskWebApp -https://github.com/DevinCalado/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-20 13:10:21.341406 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -BeiShanKin/FlaskPersonalBlog -https://github.com/BeiShanKin/FlaskPersonalBlog -Entry file: FlaskPersonalBlog/app/__init__.py -Scanned: 2016-10-20 13:10:30.761479 -No vulnerabilities found. - - -imapex-training/spark-webhook-tutorial -https://github.com/imapex-training/spark-webhook-tutorial -Entry file: spark-webhook-tutorial/app.py -Scanned: 2016-10-20 13:10:35.986025 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -josleahy/flask_hello_world -https://github.com/josleahy/flask_hello_world -Entry file: None -Scanned: 2016-10-20 13:10:36.988716 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/josleahy/flask_hello_world. - -SangTran01/python-crud-with-Flask -https://github.com/SangTran01/python-crud-with-Flask -Entry file: python-crud-with-Flask/vagrant/webserver/project.py -Scanned: 2016-10-20 13:10:38.421776 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kamieb03/first-flask-app -https://github.com/kamieb03/first-flask-app -Entry file: None -Scanned: 2016-10-20 13:10:38.940953 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marb61a/Simple_Flask_Blog -https://github.com/marb61a/Simple_Flask_Blog -Entry file: Simple_Flask_Blog/__init__.py -Scanned: 2016-10-20 13:10:47.376469 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Simple_Flask_Blog/venv/lib/python3.4/struct.py - -ezequielo/flask_celery_exp -https://github.com/ezequielo/flask_celery_exp -Entry file: flask_celery_exp/app/__init__.py -Scanned: 2016-10-20 13:10:48.692188 -No vulnerabilities found. - - -sadu99/Flask-MongoDB-Setup -https://github.com/sadu99/Flask-MongoDB-Setup -Entry file: Flask-MongoDB-Setup/crud.py -Scanned: 2016-10-20 13:10:50.017722 -No vulnerabilities found. - - -dduong26/flask_api_practice -https://github.com/dduong26/flask_api_practice -Entry file: flask_api_practice/mongo_connect.py -Scanned: 2016-10-20 13:10:51.457395 -No vulnerabilities found. - - -Faffola/MyFlaskDemo -https://github.com/Faffola/MyFlaskDemo -Entry file: MyFlaskDemo/app.py -Scanned: 2016-10-20 13:10:59.084859 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: MyFlaskDemo/venv/lib/python2.7/genericpath.py - -dsreliete/HelloWorld_Flask -https://github.com/dsreliete/HelloWorld_Flask -Entry file: HelloWorld_Flask/hello.py -Scanned: 2016-10-20 13:11:00.403548 -No vulnerabilities found. - - -epiedad/flask-social-app -https://github.com/epiedad/flask-social-app -Entry file: None -Scanned: 2016-10-20 13:11:01.829823 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/epiedad/flask-social-app. - -Ben0mega/SimpleFlaskWiki -https://github.com/Ben0mega/SimpleFlaskWiki -Entry file: SimpleFlaskWiki/main.py -Scanned: 2016-10-20 13:11:03.246539 -Vulnerability 1: -File: SimpleFlaskWiki/main.py - > User input at line 33, trigger word "Markup(": - content = Markup(markdown.markdown(content)) -Reassigned in: - File: SimpleFlaskWiki/main.py - > Line 32: content = f.read() -File: SimpleFlaskWiki/main.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('wiki_page.html',content=content, title=title) - -Vulnerability 2: -File: SimpleFlaskWiki/main.py - > User input at line 138, trigger word "form[": - name = request.form['title'] -Reassigned in: - File: SimpleFlaskWiki/main.py - > Line 140: msg = 'User {0!s} @ IP {1!s} edited {2!s} with message: {3!s}'.format(request.form['user'], request.remote_addr, name, request.form['msg']) - File: SimpleFlaskWiki/main.py - > Line 148: fn = nameToFileName(name) - File: SimpleFlaskWiki/main.py - > Line 151: fn = nameToFileName(name, 'text/plain') - File: SimpleFlaskWiki/main.py - > Line 159: fn = nameToFileName(name, file_.mimetype) -File: SimpleFlaskWiki/main.py - > reaches line 156, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('wiki_page',name=name)) - -Vulnerability 3: -File: SimpleFlaskWiki/main.py - > User input at line 138, trigger word "form[": - name = request.form['title'] -Reassigned in: - File: SimpleFlaskWiki/main.py - > Line 140: msg = 'User {0!s} @ IP {1!s} edited {2!s} with message: {3!s}'.format(request.form['user'], request.remote_addr, name, request.form['msg']) - File: SimpleFlaskWiki/main.py - > Line 148: fn = nameToFileName(name) - File: SimpleFlaskWiki/main.py - > Line 151: fn = nameToFileName(name, 'text/plain') - File: SimpleFlaskWiki/main.py - > Line 159: fn = nameToFileName(name, file_.mimetype) -File: SimpleFlaskWiki/main.py - > reaches line 156, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('wiki_page',name=name)) - -Vulnerability 4: -File: SimpleFlaskWiki/main.py - > User input at line 138, trigger word "form[": - name = request.form['title'] -Reassigned in: - File: SimpleFlaskWiki/main.py - > Line 140: msg = 'User {0!s} @ IP {1!s} edited {2!s} with message: {3!s}'.format(request.form['user'], request.remote_addr, name, request.form['msg']) - File: SimpleFlaskWiki/main.py - > Line 148: fn = nameToFileName(name) - File: SimpleFlaskWiki/main.py - > Line 151: fn = nameToFileName(name, 'text/plain') - File: SimpleFlaskWiki/main.py - > Line 159: fn = nameToFileName(name, file_.mimetype) -File: SimpleFlaskWiki/main.py - > reaches line 161, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('wiki_page',name=name)) - -Vulnerability 5: -File: SimpleFlaskWiki/main.py - > User input at line 138, trigger word "form[": - name = request.form['title'] -Reassigned in: - File: SimpleFlaskWiki/main.py - > Line 140: msg = 'User {0!s} @ IP {1!s} edited {2!s} with message: {3!s}'.format(request.form['user'], request.remote_addr, name, request.form['msg']) - File: SimpleFlaskWiki/main.py - > Line 148: fn = nameToFileName(name) - File: SimpleFlaskWiki/main.py - > Line 151: fn = nameToFileName(name, 'text/plain') - File: SimpleFlaskWiki/main.py - > Line 159: fn = nameToFileName(name, file_.mimetype) -File: SimpleFlaskWiki/main.py - > reaches line 161, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('wiki_page',name=name)) - - - -QLGQ/awesome-flask-todo -https://github.com/QLGQ/awesome-flask-todo -Entry file: None -Scanned: 2016-10-20 13:11:03.761388 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/QLGQ/awesome-flask-todo. - -vimalloc/flask-jwt-extended -https://github.com/vimalloc/flask-jwt-extended -Entry file: flask-jwt-extended/examples/simple.py -Scanned: 2016-10-20 13:11:07.685677 -Vulnerability 1: -File: flask-jwt-extended/examples/simple.py - > User input at line 16, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/simple.py - > Line 22: ret = 'access_token'create_access_token(identity=username) - File: flask-jwt-extended/examples/simple.py - > Line 19: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/simple.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 2: -File: flask-jwt-extended/examples/blacklist.py - > User input at line 35, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/blacklist.py - > Line 40: ret = 'access_token''refresh_token'create_access_token(identity=username)create_refresh_token(identity=username) - File: flask-jwt-extended/examples/blacklist.py - > Line 38: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/blacklist.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 3: -File: flask-jwt-extended/examples/refresh_tokens.py - > User input at line 13, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/refresh_tokens.py - > Line 20: ret = 'access_token''refresh_token'create_access_token(identity=username)create_refresh_token(identity=username) - File: flask-jwt-extended/examples/refresh_tokens.py - > Line 16: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/refresh_tokens.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 4: -File: flask-jwt-extended/examples/token_freshness.py - > User input at line 15, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/token_freshness.py - > Line 24: ret = 'access_token''refresh_token'create_access_token(identity=username, fresh=True)create_refresh_token(identity=username) - File: flask-jwt-extended/examples/token_freshness.py - > Line 18: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/token_freshness.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 5: -File: flask-jwt-extended/examples/token_freshness.py - > User input at line 38, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/token_freshness.py - > Line 43: new_token = create_access_token(identity=username, fresh=True) - File: flask-jwt-extended/examples/token_freshness.py - > Line 44: ret = 'access_token'new_token - File: flask-jwt-extended/examples/token_freshness.py - > Line 41: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/token_freshness.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 6: -File: flask-jwt-extended/examples/additional_data_in_access_token.py - > User input at line 24, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/additional_data_in_access_token.py - > Line 29: ret = 'access_token'create_access_token(username) - File: flask-jwt-extended/examples/additional_data_in_access_token.py - > Line 27: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/additional_data_in_access_token.py - > reaches line 30, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - -Vulnerability 7: -File: flask-jwt-extended/examples/loaders.py - > User input at line 24, trigger word "get(": - username = request.json.get('username', None) -Reassigned in: - File: flask-jwt-extended/examples/loaders.py - > Line 29: ret = 'access_token'create_access_token(username) - File: flask-jwt-extended/examples/loaders.py - > Line 27: ret_MAYBE_FUNCTION_NAME = (jsonify('msg''Bad username or password'), 401) -File: flask-jwt-extended/examples/loaders.py - > reaches line 30, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(ret), 200) - - - -mayurvaidya09/Flask -https://github.com/mayurvaidya09/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:11:08.214938 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harryjia/flask -https://github.com/harryjia/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:11:08.808239 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -randm-/flask -https://github.com/randm-/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:11:09.393016 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -zhaokefei/flask -https://github.com/zhaokefei/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:11:09.968838 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -xjr7670/flask -https://github.com/xjr7670/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:11:10.554398 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Morfyo/Flask -https://github.com/Morfyo/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:11:11.065611 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hamdimuzakkiy/Flask -https://github.com/hamdimuzakkiy/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:11:11.582967 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bellcodo/fisrt-flask-app -https://github.com/bellcodo/fisrt-flask-app -Entry file: fisrt-flask-app/hello_app.py -Scanned: 2016-10-20 13:11:12.887180 -No vulnerabilities found. - - -georgigeorgiev/flaskbe -https://github.com/georgigeorgiev/flaskbe -Entry file: flaskbe/flaskbe/__init__.py -Scanned: 2016-10-20 13:11:14.314267 -No vulnerabilities found. - - -ryanruthart/flasktaskr -https://github.com/ryanruthart/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:11:14.840268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Sventenhaaf/flasktwo -https://github.com/Sventenhaaf/flasktwo -Entry file: flasktwo/app.py -Scanned: 2016-10-20 13:11:25.815750 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -martyni/flaskstrap -https://github.com/martyni/flaskstrap -Entry file: flaskstrap/flaskstrap/app.py -Scanned: 2016-10-20 13:11:27.615639 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -irritant/flasktory -https://github.com/irritant/flasktory -Entry file: flasktory/template/app/__init__.py -Scanned: 2016-10-20 13:11:33.062235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -isyippee/flasky -https://github.com/isyippee/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:11:33.570465 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -iteong/flaskbot -https://github.com/iteong/flaskbot -Entry file: flaskbot/app.py -Scanned: 2016-10-20 13:11:42.565076 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juwaini/flaskr -https://github.com/juwaini/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:11:43.078253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -reasonoughtrule/flaskr -https://github.com/reasonoughtrule/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:11:43.589537 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ipeacocks/flasktaskr -https://github.com/ipeacocks/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:11:44.096310 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -klouskingsley/flaskdemo -https://github.com/klouskingsley/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:11:44.609799 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -reshama/flaskapps -https://github.com/reshama/flaskapps -Entry file: flaskapps/testgoogleauth/app/__init__.py -Scanned: 2016-10-20 13:11:48.130954 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kpotash/flasknotes -https://github.com/kpotash/flasknotes -Entry file: flasknotes/notes.py -Scanned: 2016-10-20 13:11:50.565291 -No vulnerabilities found. - - -jehuston/text_classifier -https://github.com/jehuston/text_classifier -Entry file: text_classifier/app.py -Scanned: 2016-10-20 13:12:00.807853 -Vulnerability 1: -File: text_classifier/app.py - > User input at line 19, trigger word "form[": - text = str(request.form['input_text']) -Reassigned in: - File: text_classifier/app.py - > Line 20: X = vectorizer.transform([text]) - File: text_classifier/app.py - > Line 21: prediction = model.predict(X)[0] -File: text_classifier/app.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('predict.html',prediction=prediction, title='Results') - -Vulnerability 2: -File: text_classifier/app.py - > User input at line 20, trigger word "form(": - X = vectorizer.transform([text]) -Reassigned in: - File: text_classifier/app.py - > Line 21: prediction = model.predict(X)[0] -File: text_classifier/app.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('predict.html',prediction=prediction, title='Results') - - - -Miserlou/zappa-bittorrent-tracker -https://github.com/Miserlou/zappa-bittorrent-tracker -Entry file: zappa-bittorrent-tracker/track.py -Scanned: 2016-10-20 13:12:02.302822 -No vulnerabilities found. - - -mcquam/flasky2 -https://github.com/mcquam/flasky2 -Entry file: flasky2/app/__init__.py -Scanned: 2016-10-20 13:12:04.019182 -Vulnerability 1: -File: flasky2/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 55: posts = pagination.items - File: flasky2/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flasky2/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky2/app/main/views.py - > Line 45: show_followed = False - File: flasky2/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flasky2/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 67: posts = pagination.items -File: flasky2/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flasky2/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky2/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 134: comments = pagination.items - File: flasky2/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky2/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flasky2/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky2/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flasky2/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky2/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flasky2/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/main/views.py - > Line 246: comments = pagination.items -File: flasky2/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 8: -File: flasky2/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2/app/api_1_0/users.py - > Line 23: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 9: -File: flasky2/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2/app/api_1_0/users.py - > Line 23: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 10: -File: flasky2/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2/app/api_1_0/users.py - > Line 23: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 11: -File: flasky2/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2/app/api_1_0/users.py - > Line 46: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 12: -File: flasky2/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2/app/api_1_0/users.py - > Line 46: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 13: -File: flasky2/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2/app/api_1_0/users.py - > Line 46: next = None -File: flasky2/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 14: -File: flasky2/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 15: -File: flasky2/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 16: -File: flasky2/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 17: -File: flasky2/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 18: -File: flasky2/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 19: -File: flasky2/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 20: -File: flasky2/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 21: -File: flasky2/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 22: -File: flasky2/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - - - -jiwpark00/FlaskTutorial -https://github.com/jiwpark00/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 13:12:04.535233 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -WYoYao/flaskCode -https://github.com/WYoYao/flaskCode -Entry file: flaskCode/setup.py -Scanned: 2016-10-20 13:12:11.433927 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -MittalShruti/FlaskApp -https://github.com/MittalShruti/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:12:12.007661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -egolus/flaskApp -https://github.com/egolus/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-20 13:12:12.529226 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mayurvaidya09/FlaskDemo -https://github.com/mayurvaidya09/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 13:12:13.046458 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ethanchewy/FlaskAjax -https://github.com/ethanchewy/FlaskAjax -Entry file: FlaskAjax/main/app.py -Scanned: 2016-10-20 13:12:20.687951 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AnthonyShalagin/FlaskTutorial -https://github.com/AnthonyShalagin/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 13:12:21.700654 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pigaov10/FlaskApi -https://github.com/pigaov10/FlaskApi -Entry file: FlaskApi/app/provider.py -Scanned: 2016-10-20 13:12:23.041295 -No vulnerabilities found. - - -sarvex/FlaskBasics -https://github.com/sarvex/FlaskBasics -Entry file: FlaskBasics/FlaskBasics.py -Scanned: 2016-10-20 13:12:24.449857 -No vulnerabilities found. - - -SubhrajyotiSen/FlaskBlog -https://github.com/SubhrajyotiSen/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 13:12:25.114189 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dyrkabes/FlaskApp -https://github.com/dyrkabes/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:12:25.693779 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -adiol/flask-project -https://github.com/adiol/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 13:12:33.479771 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ovidiu1/python-flask -https://github.com/ovidiu1/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 13:12:34.028084 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chiphwang/flask_app -https://github.com/chiphwang/flask_app -Entry file: None -Scanned: 2016-10-20 13:12:34.541726 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/chiphwang/flask_app. - -xxxxsars/Flask_upload -https://github.com/xxxxsars/Flask_upload -Entry file: Flask_upload/flask_upload.py -Scanned: 2016-10-20 13:12:35.896799 -No vulnerabilities found. - - -DenGodunov/flask_microblog -https://github.com/DenGodunov/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 13:12:36.461127 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -liangkai6419/learn_flask -https://github.com/liangkai6419/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 13:12:36.973308 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huiyaoren/Learn_Flask -https://github.com/huiyaoren/Learn_Flask -Entry file: Learn_Flask/app/__init__.py -Scanned: 2016-10-20 13:12:39.164968 -No vulnerabilities found. - - -socialwifi/flask-oauthres -https://github.com/socialwifi/flask-oauthres -Entry file: flask-oauthres/tests/_app.py -Scanned: 2016-10-20 13:12:40.610310 -No vulnerabilities found. - - -pwh0903/flask-todo -https://github.com/pwh0903/flask-todo -Entry file: flask-todo/backend/app.py -Scanned: 2016-10-20 13:12:43.148198 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -GuessWhoSamFoo/Flask-Website -https://github.com/GuessWhoSamFoo/Flask-Website -Entry file: Flask-Website/app.py -Scanned: 2016-10-20 13:12:59.223799 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -agafonovdev/flask_template -https://github.com/agafonovdev/flask_template -Entry file: None -Scanned: 2016-10-20 13:12:59.727355 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/agafonovdev/flask_template. - -Lijin111/Flask-Web -https://github.com/Lijin111/Flask-Web -Entry file: Flask-Web/Flask.py -Scanned: 2016-10-20 13:13:01.952629 -Vulnerability 1: -File: Flask-Web/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 32: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Web/app/main/views.py - > Line 35: posts = pagination.items - File: Flask-Web/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Web/app/main/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flask-Web/app/main/views.py - > User input at line 26, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 24: show_followed = False - File: Flask-Web/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Web/app/main/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flask-Web/app/main/views.py - > User input at line 123, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 125: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Flask-Web/app/main/views.py - > Line 127: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-Web/app/main/views.py - > Line 130: comments = pagination.items - File: Flask-Web/app/main/views.py - > Line 122: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask-Web/app/main/views.py - > reaches line 131, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: Flask-Web/app/main/views.py - > User input at line 190, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 191: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-Web/app/main/views.py - > Line 194: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask-Web/app/main/views.py - > Line 189: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Web/app/main/views.py - > reaches line 196, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: Flask-Web/app/main/views.py - > User input at line 207, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 208: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-Web/app/main/views.py - > Line 211: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask-Web/app/main/views.py - > Line 206: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Web/app/main/views.py - > reaches line 213, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flask-Web/app/main/views.py - > User input at line 236, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Web/app/main/views.py - > Line 237: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-Web/app/main/views.py - > Line 240: comments = pagination.items -File: Flask-Web/app/main/views.py - > reaches line 241, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -chaitjo/flask-mongodb -https://github.com/chaitjo/flask-mongodb -Entry file: flask-mongodb/api.py -Scanned: 2016-10-20 13:13:03.754929 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -action-hong/study_flask -https://github.com/action-hong/study_flask -Entry file: None -Scanned: 2016-10-20 13:13:04.311582 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -carrbs/flask-tutorial -https://github.com/carrbs/flask-tutorial -Entry file: None -Scanned: 2016-10-20 13:13:04.816449 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -javierdva/flask-example -https://github.com/javierdva/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-20 13:13:05.338661 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EgorKurito/flask_bot -https://github.com/EgorKurito/flask_bot -Entry file: flask_bot/bot.py -Scanned: 2016-10-20 13:13:06.656464 -No vulnerabilities found. - - -jurrehart/flask_tut -https://github.com/jurrehart/flask_tut -Entry file: flask_tut/microblog/app/__init__.py -Scanned: 2016-10-20 13:13:07.168660 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -saiprakashreddymarasani/MyFlask -https://github.com/saiprakashreddymarasani/MyFlask -Entry file: MyFlask/FlaskSample/app.py -Scanned: 2016-10-20 13:13:14.140442 -No vulnerabilities found. - - -Atheloses/Flask-Bones -https://github.com/Atheloses/Flask-Bones -Entry file: Flask-Bones/app/__init__.py -Scanned: 2016-10-20 13:13:20.188505 -Vulnerability 1: -File: Flask-Bones/app/auth/views.py - > User input at line 46, trigger word ".data": - group = Group.create(nazev=form.data['nazev']) -File: Flask-Bones/app/auth/views.py - > reaches line 48, trigger word "flash(": - flash(gettext('Group {name} created').format(name=group.nazev), 'success') - -Vulnerability 2: -File: Flask-Bones/app/auth/views.py - > User input at line 58, trigger word ".data": - firma = Firma.create(nazev=form.data['nazev'], state=form.data['state'], address=form.data['address'], phone_number=form.data['phone_number'], contact_person=form.data['contact_person'], website=form.data['website']) -File: Flask-Bones/app/auth/views.py - > reaches line 65, trigger word "flash(": - flash(gettext('Organization {name} created').format(name=firma.nazev), 'success') - -Vulnerability 3: -File: Flask-Bones/app/public/views.py - > User input at line 37, trigger word ".data": - user = User.create(username=form.data['username'], email=form.data['email'], password=form.data['password'], remote_addr=request.remote_addr, jmeno=form.data['jmeno'], prijmeni=form.data['prijmeni']) -Reassigned in: - File: Flask-Bones/app/public/views.py - > Line 47: token = s.dumps(user.id) -File: Flask-Bones/app/public/views.py - > reaches line 51, trigger word "flash(": - flash(gettext('Sent verification email to {email}').format(email=user.email), 'success') - - - -joelcolucci/flask-dropin -https://github.com/joelcolucci/flask-dropin -Entry file: flask-dropin/tests/test_dropin.py -Scanned: 2016-10-20 13:13:21.550724 -No vulnerabilities found. - - -KingOkay/flask-book -https://github.com/KingOkay/flask-book -Entry file: flask-book/app/__init__.py -Scanned: 2016-10-20 13:13:27.469377 -Vulnerability 1: -File: flask-book/app/auth/verify.py - > User input at line 64, trigger word "form(": - img = img.transform(size, Image.PERSPECTIVE, params) -Reassigned in: - File: flask-book/app/auth/verify.py - > Line 20: img = Image.new(mode, size, bg_color) - File: flask-book/app/auth/verify.py - > Line 21: draw = ImageDraw.Draw(img) - File: flask-book/app/auth/verify.py - > Line 68: ret_MAYBE_FUNCTION_NAME = (img, strs) -File: flask-book/app/auth/verify.py - > reaches line 66, trigger word "filter(": - img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) - -Vulnerability 2: -File: flask-book/app/main/views.py - > User input at line 18, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, title='首页', books=books, order_books=order_books, types=types, books1=books1) -File: flask-book/app/main/views.py - > reaches line 19, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 3: -File: flask-book/app/main/views.py - > User input at line 18, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, title='首页', books=books, order_books=order_books, types=types, books1=books1) -File: flask-book/app/main/views.py - > reaches line 19, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 4: -File: flask-book/app/main/views.py - > User input at line 46, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) -File: flask-book/app/main/views.py - > reaches line 47, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 5: -File: flask-book/app/main/views.py - > User input at line 46, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) -File: flask-book/app/main/views.py - > reaches line 47, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 6: -File: flask-book/app/main/views.py - > User input at line 49, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 50: pagination = Book.query.filter_by(booktype_id=id).order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_BOOKSHOWS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 53: books = pagination.items - File: flask-book/app/main/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) -File: flask-book/app/main/views.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) - -Vulnerability 7: -File: flask-book/app/main/views.py - > User input at line 62, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) -File: flask-book/app/main/views.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 8: -File: flask-book/app/main/views.py - > User input at line 62, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) -File: flask-book/app/main/views.py - > reaches line 63, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 9: -File: flask-book/app/main/views.py - > User input at line 65, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 66: pagination = Book.query.order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_BOOKSHOWS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 69: books = pagination.items - File: flask-book/app/main/views.py - > Line 63: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) -File: flask-book/app/main/views.py - > reaches line 70, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) - -Vulnerability 10: -File: flask-book/app/main/views.py - > User input at line 76, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 77: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 80: posts = pagination.items -File: flask-book/app/main/views.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('all-post.html',title='好书推荐', posts=posts, pagination=pagination) - -Vulnerability 11: -File: flask-book/app/main/views.py - > User input at line 97, trigger word ".data": - my_address = Address.query.filter_by(id=form.order_address.data).first() -Reassigned in: - File: flask-book/app/main/views.py - > Line 98: order_address = '详细地址: ' + my_address.area + my_address.detailed + ' 邮编: ' + str(my_address.zip_code) + ' 收货人: ' + my_address.name + ' 电话号码: ' + str(my_address.phone_number) - File: flask-book/app/main/views.py - > Line 101: order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 12: -File: flask-book/app/main/views.py - > User input at line 101, trigger word ".data": - order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) -Reassigned in: - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 13: -File: flask-book/app/main/views.py - > User input at line 97, trigger word ".data": - my_address = Address.query.filter_by(id=form.order_address.data).first() -Reassigned in: - File: flask-book/app/main/views.py - > Line 98: order_address = '详细地址: ' + my_address.area + my_address.detailed + ' 邮编: ' + str(my_address.zip_code) + ' 收货人: ' + my_address.name + ' 电话号码: ' + str(my_address.phone_number) - File: flask-book/app/main/views.py - > Line 101: order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 14: -File: flask-book/app/main/views.py - > User input at line 101, trigger word ".data": - order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) -Reassigned in: - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 15: -File: flask-book/app/main/views.py - > User input at line 168, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 170: page = book.bookcos.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-book/app/main/views.py - > Line 172: pagination = book.bookcos.order_by(BookCo.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 175: comments = pagination.items -File: flask-book/app/main/views.py - > reaches line 176, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',book=book, title=book.name, comments=comments, pagination=pagination) - -Vulnerability 16: -File: flask-book/app/main/views.py - > User input at line 275, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 276: pagination = Order.query.filter_by(author_id=current_user.id).order_by(Order.order_time.desc()).paginate(page,per_page=current_app.config['FLASKY_ORDERS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 279: orders = pagination.items -File: flask-book/app/main/views.py - > reaches line 280, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('my-order.html',orders=orders, title='我的订单', pagination=pagination) - -Vulnerability 17: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 298, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 18: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 298, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 19: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 299, trigger word "filter(": - books = Book.query.filter(Book.name.like('%' + str + '%')) - -Vulnerability 20: -File: flask-book/app/main/views.py - > User input at line 309, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flask-book/app/main/views.py - > Line 315: ret_MAYBE_FUNCTION_NAME = render_template('create_post.html',form=form, title='创建新文章') -File: flask-book/app/main/views.py - > reaches line 314, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 21: -File: flask-book/app/main/views.py - > User input at line 309, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flask-book/app/main/views.py - > Line 315: ret_MAYBE_FUNCTION_NAME = render_template('create_post.html',form=form, title='创建新文章') -File: flask-book/app/main/views.py - > reaches line 314, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 22: -File: flask-book/app/main/views.py - > User input at line 340, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 342: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-book/app/main/views.py - > Line 344: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 347: comments = pagination.items - File: flask-book/app/main/views.py - > Line 339: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=1)) -File: flask-book/app/main/views.py - > reaches line 348, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], title='文章内容', form=form, comments=comments, pagination=pagination) - -Vulnerability 23: -File: flask-book/app/main/views.py - > User input at line 358, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 359: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 362: posts = pagination.items -File: flask-book/app/main/views.py - > reaches line 363, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination, title='我的资料') - -Vulnerability 24: -File: flask-book/app/admin/views.py - > User input at line 29, trigger word ".data": - book = Book(name=form.name.data, author=form.author.data, price=form.price.data, isbn=form.isbn.data, press=form.press.data, booktype_id=form.type.data, words=form.words.data, des=form.des.data, page_numbers=form.page_numbers.data) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('admin/add-book.html',form=form, title='添加图书') -File: flask-book/app/admin/views.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.book',id=book.id)) - -Vulnerability 25: -File: flask-book/app/admin/views.py - > User input at line 29, trigger word ".data": - book = Book(name=form.name.data, author=form.author.data, price=form.price.data, isbn=form.isbn.data, press=form.press.data, booktype_id=form.type.data, words=form.words.data, des=form.des.data, page_numbers=form.page_numbers.data) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('admin/add-book.html',form=form, title='添加图书') -File: flask-book/app/admin/views.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.book',id=book.id)) - -Vulnerability 26: -File: flask-book/app/admin/views.py - > User input at line 98, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 99: pagination = Book.query.order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 102: book_lists = pagination.items -File: flask-book/app/admin/views.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/book-list.html',title='图书列表', pagination=pagination, book_lists=book_lists) - -Vulnerability 27: -File: flask-book/app/admin/views.py - > User input at line 111, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 112: pagination = User.query.order_by(User.member_since.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 115: user_lists = pagination.items -File: flask-book/app/admin/views.py - > reaches line 116, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/user-list.html',title='用户列表', user_lists=user_lists, pagination=pagination) - -Vulnerability 28: -File: flask-book/app/admin/views.py - > User input at line 164, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 165: pagination = Order.query.order_by(Order.order_time.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 168: orders = pagination.items -File: flask-book/app/admin/views.py - > reaches line 169, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/order-list.html',orders=orders, pagination=pagination, page=page, title='订单处理') - -Vulnerability 29: -File: flask-book/app/admin/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 189: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 192: comments = pagination.items -File: flask-book/app/admin/views.py - > reaches line 193, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/moderate.html',comments=comments, pagination=pagination, page=page, title='评论管理') - - - -tvenis/flask_app -https://github.com/tvenis/flask_app -Entry file: None -Scanned: 2016-10-20 13:13:27.970931 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tvenis/flask_app. - -kangnahua/flask-blog -https://github.com/kangnahua/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:13:28.545883 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -mmeehan07/flask_app -https://github.com/mmeehan07/flask_app -Entry file: None -Scanned: 2016-10-20 13:13:29.052153 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mmeehan07/flask_app. - -maiku08/starwars-flask -https://github.com/maiku08/starwars-flask -Entry file: starwars-flask/starwars-flask/app.py -Scanned: 2016-10-20 13:13:31.100349 -No vulnerabilities found. - - -Balta-zar/flask-migrations -https://github.com/Balta-zar/flask-migrations -Entry file: flask-migrations/migration.py -Scanned: 2016-10-20 13:13:32.477165 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vitaliylevitskiand/wordsplay_flask -https://github.com/vitaliylevitskiand/wordsplay_flask -Entry file: wordsplay_flask/wordsplay_flask.py -Scanned: 2016-10-20 13:13:36.112035 -No vulnerabilities found. - - -zeroSwift/startFlask -https://github.com/zeroSwift/startFlask -Entry file: startFlask/simpleGET.py -Scanned: 2016-10-20 13:13:37.594291 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ferrufino/Flask-Learning -https://github.com/ferrufino/Flask-Learning -Entry file: Flask-Learning/restAPI/api.py -Scanned: 2016-10-20 13:13:39.111357 -No vulnerabilities found. - - -zackchew42/flask-web -https://github.com/zackchew42/flask-web -Entry file: flask-web/local_debug.py -Scanned: 2016-10-20 13:13:39.624454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -arutishauser/flask_app -https://github.com/arutishauser/flask_app -Entry file: None -Scanned: 2016-10-20 13:13:40.137125 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arutishauser/flask_app. - -mdecourse/ByFlask -https://github.com/mdecourse/ByFlask -Entry file: ByFlask/flaskapp.py -Scanned: 2016-10-20 13:13:48.699825 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -buttercms/buttercms-flask -https://github.com/buttercms/buttercms-flask -Entry file: buttercms-flask/app.py -Scanned: 2016-10-20 13:13:50.026977 -Vulnerability 1: -File: buttercms-flask/buttercms/blog_blueprint.py - > User input at line 25, trigger word "get(": - response = client.posts.get(slug) -Reassigned in: - File: buttercms-flask/buttercms/blog_blueprint.py - > Line 27: post = response['data'] -File: buttercms-flask/buttercms/blog_blueprint.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',post=post) - -Vulnerability 2: -File: buttercms-flask/buttercms/blog_blueprint.py - > User input at line 36, trigger word "get(": - response = client.authors.get(author_slug, 'include''recent_posts') -Reassigned in: - File: buttercms-flask/buttercms/blog_blueprint.py - > Line 39: author = response['data'] -File: buttercms-flask/buttercms/blog_blueprint.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('author.html',author=author) - -Vulnerability 3: -File: buttercms-flask/buttercms/blog_blueprint.py - > User input at line 48, trigger word "get(": - response = client.categories.get(category_slug, 'include''recent_posts') -Reassigned in: - File: buttercms-flask/buttercms/blog_blueprint.py - > Line 50: category = response['data'] -File: buttercms-flask/buttercms/blog_blueprint.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',category=category) - - - -AlexN34/flask-tdd -https://github.com/AlexN34/flask-tdd -Entry file: flask-tdd/app.py -Scanned: 2016-10-20 13:13:55.644668 -No vulnerabilities found. - - -jillbourque/flask_app -https://github.com/jillbourque/flask_app -Entry file: None -Scanned: 2016-10-20 13:13:56.164590 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jillbourque/flask_app. - -ghkdgustn29/flask-practice -https://github.com/ghkdgustn29/flask-practice -Entry file: None -Scanned: 2016-10-20 13:13:56.684489 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ghkdgustn29/flask-practice. - -lbarberiscanoni/Flask-Ex -https://github.com/lbarberiscanoni/Flask-Ex -Entry file: Flask-Ex/app.py -Scanned: 2016-10-20 13:13:57.989801 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joegotflow83/todo_flask -https://github.com/joegotflow83/todo_flask -Entry file: todo_flask/app.py -Scanned: 2016-10-20 13:13:59.300192 -No vulnerabilities found. - - -tianyuwu/docker-flask -https://github.com/tianyuwu/docker-flask -Entry file: None -Scanned: 2016-10-20 13:13:59.810590 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tianyuwu/docker-flask. - -rbrecheisen/flask-storage -https://github.com/rbrecheisen/flask-storage -Entry file: flask-storage/tests/__init__.py -Scanned: 2016-10-20 13:14:00.323925 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -songyawei/flask-demo -https://github.com/songyawei/flask-demo -Entry file: None -Scanned: 2016-10-20 13:14:02.839983 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/songyawei/flask-demo. - -matthewshim88/flask_mysql -https://github.com/matthewshim88/flask_mysql -Entry file: flask_mysql/friends/server.py -Scanned: 2016-10-20 13:14:04.691140 -No vulnerabilities found. - - -Yunobububu/Hello_Flask -https://github.com/Yunobububu/Hello_Flask -Entry file: None -Scanned: 2016-10-20 13:14:06.062853 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Yunobububu/Hello_Flask. - -brpowell/flask-example -https://github.com/brpowell/flask-example -Entry file: flask-example/main.py -Scanned: 2016-10-20 13:14:06.569886 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -waldo7/flask-hello-world -https://github.com/waldo7/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 13:14:07.137501 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -mmomo/Rpi_auto -https://github.com/mmomo/Rpi_auto -Entry file: Rpi_auto/app/__init__.py -Scanned: 2016-10-20 13:14:08.487765 -No vulnerabilities found. - - -alm958/FlaskNumberGame -https://github.com/alm958/FlaskNumberGame -Entry file: FlaskNumberGame/numgameserver.py -Scanned: 2016-10-20 13:14:09.785883 -No vulnerabilities found. - - -chiangyiyang/FlaskSocketIO_Test -https://github.com/chiangyiyang/FlaskSocketIO_Test -Entry file: FlaskSocketIO_Test/app.py -Scanned: 2016-10-20 13:14:14.133879 -No vulnerabilities found. - - -YiCorleone/FlaskHelloWorld -https://github.com/YiCorleone/FlaskHelloWorld -Entry file: FlaskHelloWorld/hello.py -Scanned: 2016-10-20 13:14:16.439797 -No vulnerabilities found. - - -tloszabno/vuejs-flask-test -https://github.com/tloszabno/vuejs-flask-test -Entry file: None -Scanned: 2016-10-20 13:14:21.751204 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tloszabno/vuejs-flask-test. - -Spider0io/flask-hello-world -https://github.com/Spider0io/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-20 13:14:22.291766 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/venv/lib/python2.7/genericpath.py - -prabaprakash/Flask_Rest_APP -https://github.com/prabaprakash/Flask_Rest_APP -Entry file: Flask_Rest_APP/App/__init__.py -Scanned: 2016-10-20 13:14:29.682757 -No vulnerabilities found. - - -josleahy/flask_hello_world -https://github.com/josleahy/flask_hello_world -Entry file: None -Scanned: 2016-10-20 13:14:30.187130 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/josleahy/flask_hello_world. - -VamsikrishnaNallabothu/PyFlask_DataTables -https://github.com/VamsikrishnaNallabothu/PyFlask_DataTables -Entry file: PyFlask_DataTables/Flask1.py -Scanned: 2016-10-20 13:14:32.472525 -No vulnerabilities found. - - -jglee1/pi-flask-test -https://github.com/jglee1/pi-flask-test -Entry file: pi-flask-test/app.py -Scanned: 2016-10-20 13:14:33.795616 -No vulnerabilities found. - - -kamieb03/first-flask-app -https://github.com/kamieb03/first-flask-app -Entry file: None -Scanned: 2016-10-20 13:14:37.307737 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BYUFootball/first-flask-app -https://github.com/BYUFootball/first-flask-app -Entry file: None -Scanned: 2016-10-20 13:14:38.817233 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fortune599/flask -https://github.com/fortune599/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:41.681029 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -iamdavidmt/flask -https://github.com/iamdavidmt/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:42.251822 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -DIYer22/flask -https://github.com/DIYer22/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:49.840248 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -woowooh/flask -https://github.com/woowooh/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:51.408230 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jasondebolt/flask -https://github.com/jasondebolt/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:57.001835 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -nsuJolie/flask -https://github.com/nsuJolie/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:14:57.568256 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -pandapan0021/myblog -https://github.com/pandapan0021/myblog -Entry file: None -Scanned: 2016-10-20 13:15:00.139342 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qwertypomy/flask-example-app -https://github.com/qwertypomy/flask-example-app -Entry file: flask-example-app/app.py -Scanned: 2016-10-20 13:15:07.909004 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -AminHP/flask-mvc -https://github.com/AminHP/flask-mvc -Entry file: flask-mvc/project/application.py -Scanned: 2016-10-20 13:15:09.359599 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shitx/flaskapp -https://github.com/shitx/flaskapp -Entry file: None -Scanned: 2016-10-20 13:15:10.342699 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shitx/flaskapp. - -eswizardry/flasktaskr -https://github.com/eswizardry/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:15:10.839873 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -waldo7/flasktaskr -https://github.com/waldo7/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:15:11.340656 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arsalanam/flasky -https://github.com/arsalanam/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:15:11.841550 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Spider0io/flasktaskr -https://github.com/Spider0io/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:15:12.360644 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -martyni/flaskstrap -https://github.com/martyni/flaskstrap -Entry file: flaskstrap/flaskstrap/app.py -Scanned: 2016-10-20 13:15:13.879582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -naviplay/flasktutorial -https://github.com/naviplay/flasktutorial -Entry file: None -Scanned: 2016-10-20 13:15:16.410312 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MagicRoc/flaskoc -https://github.com/MagicRoc/flaskoc -Entry file: flaskoc/hello.py -Scanned: 2016-10-20 13:15:23.246918 -Vulnerability 1: -File: flaskoc/app/main/views.py - > User input at line 56, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskoc/app/main/views.py - > Line 57: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskoc/app/main/views.py - > Line 60: posts = pagination.items - File: flaskoc/app/main/views.py - > Line 55: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskoc/app/main/views.py - > reaches line 61, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskoc/app/main/views.py - > User input at line 72, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskoc/app/main/views.py - > Line 73: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskoc/app/main/views.py - > Line 76: posts = pagination.items -File: flaskoc/app/main/views.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -yorolifarg/flasksample -https://github.com/yorolifarg/flasksample -Entry file: flasksample/chapter2/app.py -Scanned: 2016-10-20 13:15:30.827722 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Arlus/flasktest -https://github.com/Arlus/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:15:31.338508 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rschmidtz/flaskr -https://github.com/rschmidtz/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:15:31.846907 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ThisIsMyNick/flasky -https://github.com/ThisIsMyNick/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:15:32.387464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -topleft/flasktasker -https://github.com/topleft/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-20 13:15:32.929295 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -TangXinCN/flaskdev -https://github.com/TangXinCN/flaskdev -Entry file: flaskdev/app/__init__.py -Scanned: 2016-10-20 13:15:34.839988 -Vulnerability 1: -File: flaskdev/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 22: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 26: posts = pagination.items - File: flaskdev/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskdev/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskdev/app/main/views.py - > User input at line 35, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 36: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 40: posts = pagination.items -File: flaskdev/app/main/views.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 3: -File: flaskdev/app/main/views.py - > User input at line 89, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 91: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskdev/app/main/views.py - > Line 93: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 97: comments = pagination.items - File: flaskdev/app/main/views.py - > Line 88: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskdev/app/main/views.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: flaskdev/app/main/views.py - > User input at line 122, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdev/app/main/views.py - > Line 123: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskdev/app/main/views.py - > Line 127: comments = pagination.items -File: flaskdev/app/main/views.py - > reaches line 128, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -jyang8/flasktemp -https://github.com/jyang8/flasktemp -Entry file: flasktemp/work01.py -Scanned: 2016-10-20 13:15:36.175979 -No vulnerabilities found. - - -hhzrabbit/flaskwebpage -https://github.com/hhzrabbit/flaskwebpage -Entry file: flaskwebpage/app2.py -Scanned: 2016-10-20 13:15:38.475073 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jyang1737/flask1 -https://github.com/jyang1737/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 13:15:39.162074 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -zhengnan/FlaskDemo -https://github.com/zhengnan/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 13:15:40.683337 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ethanchewy/FlaskAjax -https://github.com/ethanchewy/FlaskAjax -Entry file: FlaskAjax/main/app.py -Scanned: 2016-10-20 13:15:42.352751 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elinah/flaskTemplate -https://github.com/elinah/flaskTemplate -Entry file: flaskTemplate/flask-app/app/__init__.py -Scanned: 2016-10-20 13:15:42.859481 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -urbanhacker/flask101 -https://github.com/urbanhacker/flask101 -Entry file: flask101/hello.py -Scanned: 2016-10-20 13:15:51.160981 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -evookelj/flaskTemplate -https://github.com/evookelj/flaskTemplate -Entry file: flaskTemplate/flask-app/app/__init__.py -Scanned: 2016-10-20 13:15:51.679832 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -nfichter/FlaskTemplate -https://github.com/nfichter/FlaskTemplate -Entry file: FlaskTemplate/app2.py -Scanned: 2016-10-20 13:15:58.493354 -No vulnerabilities found. - - -Vanna-M/flaskIntro -https://github.com/Vanna-M/flaskIntro -Entry file: flaskIntro/hello.py -Scanned: 2016-10-20 13:15:59.794399 -No vulnerabilities found. - - -klochenok/FlaskTask -https://github.com/klochenok/FlaskTask -Entry file: FlaskTask/project/views.py -Scanned: 2016-10-20 13:16:01.230489 -No vulnerabilities found. - - -Caynosadler/user-Authentication-using-flask -https://github.com/Caynosadler/user-Authentication-using-flask -Entry file: user-Authentication-using-flask/register.py -Scanned: 2016-10-20 13:16:03.045638 -Vulnerability 1: -File: user-Authentication-using-flask/register.py - > User input at line 49, trigger word "get(": - email_address = request.form.get('email_address') -Reassigned in: - File: user-Authentication-using-flask/register.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('username_buster.html') - File: user-Authentication-using-flask/register.py - > Line 65: ret_MAYBE_FUNCTION_NAME = render_template('password_buster.html') - File: user-Authentication-using-flask/register.py - > Line 77: ret_MAYBE_FUNCTION_NAME = render_template('home.html',name=username) -File: user-Authentication-using-flask/register.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('email_buster.html',email=email_address) - -Vulnerability 2: -File: user-Authentication-using-flask/register.py - > User input at line 49, trigger word "get(": - email_address = request.form.get('email_address') -Reassigned in: - File: user-Authentication-using-flask/register.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('username_buster.html') - File: user-Authentication-using-flask/register.py - > Line 65: ret_MAYBE_FUNCTION_NAME = render_template('password_buster.html') - File: user-Authentication-using-flask/register.py - > Line 77: ret_MAYBE_FUNCTION_NAME = render_template('home.html',name=username) -File: user-Authentication-using-flask/register.py - > reaches line 61, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('email_buster.html',email=email_address) - -Vulnerability 3: -File: user-Authentication-using-flask/register.py - > User input at line 50, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: user-Authentication-using-flask/register.py - > Line 59: ret_MAYBE_FUNCTION_NAME = render_template('email_buster.html',email=email_address) - File: user-Authentication-using-flask/register.py - > Line 61: ret_MAYBE_FUNCTION_NAME = render_template('email_buster.html',email=email_address) - File: user-Authentication-using-flask/register.py - > Line 63: ret_MAYBE_FUNCTION_NAME = render_template('username_buster.html') - File: user-Authentication-using-flask/register.py - > Line 65: ret_MAYBE_FUNCTION_NAME = render_template('password_buster.html') -File: user-Authentication-using-flask/register.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',name=username) - -Vulnerability 4: -File: user-Authentication-using-flask/login.py - > User input at line 12, trigger word "get(": - user = request.form.get('login_name') -File: user-Authentication-using-flask/login.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',name=user) - -Vulnerability 5: -File: user-Authentication-using-flask/login.py - > User input at line 12, trigger word "get(": - user = request.form.get('login_name') -File: user-Authentication-using-flask/login.py - > reaches line 21, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('buster',name=user)) - -Vulnerability 6: -File: user-Authentication-using-flask/login.py - > User input at line 12, trigger word "get(": - user = request.form.get('login_name') -File: user-Authentication-using-flask/login.py - > reaches line 21, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('buster',name=user)) - - - -lu-z/auxioneer-flask -https://github.com/lu-z/auxioneer-flask -Entry file: auxioneer-flask/app.py -Scanned: 2016-10-20 13:16:10.901362 -No vulnerabilities found. - - -chelBot/flask-microblog -https://github.com/chelBot/flask-microblog -Entry file: None -Scanned: 2016-10-20 13:16:11.404118 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -waldo7/flask-blog -https://github.com/waldo7/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:16:11.952476 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -maxbert/flask_template -https://github.com/maxbert/flask_template -Entry file: None -Scanned: 2016-10-20 13:16:12.463921 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/maxbert/flask_template. - -zhangruochi/LearnFlask -https://github.com/zhangruochi/LearnFlask -Entry file: LearnFlask/ex1_URL解析.py -Scanned: 2016-10-20 13:16:13.000568 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -st234pa/flask-template -https://github.com/st234pa/flask-template -Entry file: None -Scanned: 2016-10-20 13:16:13.506980 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/st234pa/flask-template. - -nanobox-quickstarts/nanobox-flask -https://github.com/nanobox-quickstarts/nanobox-flask -Entry file: nanobox-flask/hello.py -Scanned: 2016-10-20 13:16:17.442052 -No vulnerabilities found. - - -luolidong/SaltFlask -https://github.com/luolidong/SaltFlask -Entry file: SaltFlask/app/__init__.py -Scanned: 2016-10-20 13:16:22.889494 -Vulnerability 1: -File: SaltFlask/app/views.py - > User input at line 37, trigger word ".data": - saltclient = SaltClient(form.serverId.data) -File: SaltFlask/app/views.py - > reaches line 38, trigger word "flash(": - flash(saltclient.GetServerInfo()) - -Vulnerability 2: -File: SaltFlask/app/views.py - > User input at line 43, trigger word ".data": - logStr = 'server id:' + form.serverId.data + ' start' -Reassigned in: - File: SaltFlask/app/views.py - > Line 40: logStr = '' - File: SaltFlask/app/views.py - > Line 46: logStr = 'server id:' + form.serverId.data + ' close' - File: SaltFlask/app/views.py - > Line 50: logStr = 'server id:' + form.serverId.data + ' time:' + timeStr - File: SaltFlask/app/views.py - > Line 52: logStr = saltclient.ServerInfo() - File: SaltFlask/app/views.py - > Line 54: logStr = saltclient.ServerLog() - File: SaltFlask/app/views.py - > Line 56: logStr = saltclient.ServerCheck() -File: SaltFlask/app/views.py - > reaches line 58, trigger word "flash(": - flash(logStr) - -Vulnerability 3: -File: SaltFlask/app/views.py - > User input at line 46, trigger word ".data": - logStr = 'server id:' + form.serverId.data + ' close' -Reassigned in: - File: SaltFlask/app/views.py - > Line 40: logStr = '' - File: SaltFlask/app/views.py - > Line 43: logStr = 'server id:' + form.serverId.data + ' start' - File: SaltFlask/app/views.py - > Line 50: logStr = 'server id:' + form.serverId.data + ' time:' + timeStr - File: SaltFlask/app/views.py - > Line 52: logStr = saltclient.ServerInfo() - File: SaltFlask/app/views.py - > Line 54: logStr = saltclient.ServerLog() - File: SaltFlask/app/views.py - > Line 56: logStr = saltclient.ServerCheck() -File: SaltFlask/app/views.py - > reaches line 58, trigger word "flash(": - flash(logStr) - -Vulnerability 4: -File: SaltFlask/app/views.py - > User input at line 48, trigger word ".data": - timeStr = str(form.serverTime.data.year) + '-' + str(form.serverTime.data.month) + '-' + str(form.serverTime.data.day) -Reassigned in: - File: SaltFlask/app/views.py - > Line 50: logStr = 'server id:' + form.serverId.data + ' time:' + timeStr - File: SaltFlask/app/views.py - > Line 52: logStr = saltclient.ServerInfo() - File: SaltFlask/app/views.py - > Line 54: logStr = saltclient.ServerLog() - File: SaltFlask/app/views.py - > Line 56: logStr = saltclient.ServerCheck() - File: SaltFlask/app/views.py - > Line 40: logStr = '' - File: SaltFlask/app/views.py - > Line 43: logStr = 'server id:' + form.serverId.data + ' start' - File: SaltFlask/app/views.py - > Line 46: logStr = 'server id:' + form.serverId.data + ' close' -File: SaltFlask/app/views.py - > reaches line 58, trigger word "flash(": - flash(logStr) - -Vulnerability 5: -File: SaltFlask/app/views.py - > User input at line 50, trigger word ".data": - logStr = 'server id:' + form.serverId.data + ' time:' + timeStr -Reassigned in: - File: SaltFlask/app/views.py - > Line 40: logStr = '' - File: SaltFlask/app/views.py - > Line 43: logStr = 'server id:' + form.serverId.data + ' start' - File: SaltFlask/app/views.py - > Line 46: logStr = 'server id:' + form.serverId.data + ' close' - File: SaltFlask/app/views.py - > Line 52: logStr = saltclient.ServerInfo() - File: SaltFlask/app/views.py - > Line 54: logStr = saltclient.ServerLog() - File: SaltFlask/app/views.py - > Line 56: logStr = saltclient.ServerCheck() -File: SaltFlask/app/views.py - > reaches line 58, trigger word "flash(": - flash(logStr) - - - -achencoms/flask-template -https://github.com/achencoms/flask-template -Entry file: None -Scanned: 2016-10-20 13:16:24.403512 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/achencoms/flask-template. - -lindseyma/flask-template -https://github.com/lindseyma/flask-template -Entry file: None -Scanned: 2016-10-20 13:16:31.917182 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lindseyma/flask-template. - -babydeya/flask_web -https://github.com/babydeya/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-20 13:16:32.505797 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -fengyunlsm/Flask-Blog -https://github.com/fengyunlsm/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 13:16:33.047515 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stephen679/learning_flask -https://github.com/stephen679/learning_flask -Entry file: learning_flask/flaskcard/flaskcard.py -Scanned: 2016-10-20 13:16:34.479388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kblumke/flask-tracking -https://github.com/kblumke/flask-tracking -Entry file: flask-tracking/app/__init__.py -Scanned: 2016-10-20 13:16:35.008462 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sm-azure/flask-api -https://github.com/sm-azure/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 13:16:35.524866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -creamchoco3080/flask_practice -https://github.com/creamchoco3080/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 13:16:38.069421 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -agafonovdev/flask_template -https://github.com/agafonovdev/flask_template -Entry file: None -Scanned: 2016-10-20 13:16:39.568095 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/agafonovdev/flask_template. - -Chemoday/Flask-microblog -https://github.com/Chemoday/Flask-microblog -Entry file: None -Scanned: 2016-10-20 13:16:41.074106 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -markstory/flask-boomerang -https://github.com/markstory/flask-boomerang -Entry file: flask-boomerang/app.py -Scanned: 2016-10-20 13:16:43.445588 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rburgos240/flask-blog -https://github.com/rburgos240/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:16:43.990211 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -Karol-Regula/flask-template -https://github.com/Karol-Regula/flask-template -Entry file: None -Scanned: 2016-10-20 13:16:50.496600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Karol-Regula/flask-template. - -carrbs/flask-tutorial -https://github.com/carrbs/flask-tutorial -Entry file: None -Scanned: 2016-10-20 13:16:57.486634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sd16fall/Toolbox-Flask -https://github.com/sd16fall/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-20 13:16:58.844464 -No vulnerabilities found. - - -noobbyte/flask-template -https://github.com/noobbyte/flask-template -Entry file: None -Scanned: 2016-10-20 13:16:59.358328 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/noobbyte/flask-template. - -Niklane/flask_tutorial -https://github.com/Niklane/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:17:00.864067 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -billywongstuy/Flask-Start -https://github.com/billywongstuy/Flask-Start -Entry file: Flask-Start/app.py -Scanned: 2016-10-20 13:17:09.291943 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Start/virtual/lib/python2.7/genericpath.py - -deveshaggrawal19/flask_project -https://github.com/deveshaggrawal19/flask_project -Entry file: flask_project/myflaskapp.py -Scanned: 2016-10-20 13:17:10.105443 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Zzcnick/hello_flask -https://github.com/Zzcnick/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 13:17:11.133251 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Einsteinish/akadrone-flask -https://github.com/Einsteinish/akadrone-flask -Entry file: akadrone-flask/aka.py -Scanned: 2016-10-20 13:17:24.245766 -No vulnerabilities found. - - -alex1x/flask-app -https://github.com/alex1x/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:17:24.770656 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jorujlu/flask_task -https://github.com/jorujlu/flask_task -Entry file: flask_task/gistapi/gistapi.py -Scanned: 2016-10-20 13:17:33.679478 -No vulnerabilities found. - - -jeffsui/flask_app -https://github.com/jeffsui/flask_app -Entry file: None -Scanned: 2016-10-20 13:17:34.298966 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jeffsui/flask_app. - -topleft/flask-blog -https://github.com/topleft/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:17:34.869500 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -SushisMakis/Flask-Firewall -https://github.com/SushisMakis/Flask-Firewall -Entry file: Flask-Firewall/flask-example.py -Scanned: 2016-10-20 13:17:36.197878 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Atheloses/Flask-Bones -https://github.com/Atheloses/Flask-Bones -Entry file: Flask-Bones/app/__init__.py -Scanned: 2016-10-20 13:17:42.260844 -Vulnerability 1: -File: Flask-Bones/app/auth/views.py - > User input at line 46, trigger word ".data": - group = Group.create(nazev=form.data['nazev']) -File: Flask-Bones/app/auth/views.py - > reaches line 48, trigger word "flash(": - flash(gettext('Group {name} created').format(name=group.nazev), 'success') - -Vulnerability 2: -File: Flask-Bones/app/auth/views.py - > User input at line 58, trigger word ".data": - firma = Firma.create(nazev=form.data['nazev'], state=form.data['state'], address=form.data['address'], phone_number=form.data['phone_number'], contact_person=form.data['contact_person'], website=form.data['website']) -File: Flask-Bones/app/auth/views.py - > reaches line 65, trigger word "flash(": - flash(gettext('Organization {name} created').format(name=firma.nazev), 'success') - -Vulnerability 3: -File: Flask-Bones/app/public/views.py - > User input at line 37, trigger word ".data": - user = User.create(username=form.data['username'], email=form.data['email'], password=form.data['password'], remote_addr=request.remote_addr, jmeno=form.data['jmeno'], prijmeni=form.data['prijmeni']) -Reassigned in: - File: Flask-Bones/app/public/views.py - > Line 47: token = s.dumps(user.id) -File: Flask-Bones/app/public/views.py - > reaches line 51, trigger word "flash(": - flash(gettext('Sent verification email to {email}').format(email=user.email), 'success') - - - -Brian-Lu/flask-template -https://github.com/Brian-Lu/flask-template -Entry file: None -Scanned: 2016-10-20 13:17:42.785983 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Brian-Lu/flask-template. - -billywongstuy/Flask-Twoo -https://github.com/billywongstuy/Flask-Twoo -Entry file: Flask-Twoo/app.py -Scanned: 2016-10-20 13:17:44.197401 -No vulnerabilities found. - - -sebastianCain/flask-template -https://github.com/sebastianCain/flask-template -Entry file: None -Scanned: 2016-10-20 13:17:45.218935 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sebastianCain/flask-template. - -KingOkay/flask-book -https://github.com/KingOkay/flask-book -Entry file: flask-book/app/__init__.py -Scanned: 2016-10-20 13:17:51.037913 -Vulnerability 1: -File: flask-book/app/auth/verify.py - > User input at line 64, trigger word "form(": - img = img.transform(size, Image.PERSPECTIVE, params) -Reassigned in: - File: flask-book/app/auth/verify.py - > Line 20: img = Image.new(mode, size, bg_color) - File: flask-book/app/auth/verify.py - > Line 21: draw = ImageDraw.Draw(img) - File: flask-book/app/auth/verify.py - > Line 68: ret_MAYBE_FUNCTION_NAME = (img, strs) -File: flask-book/app/auth/verify.py - > reaches line 66, trigger word "filter(": - img = img.filter(ImageFilter.EDGE_ENHANCE_MORE) - -Vulnerability 2: -File: flask-book/app/main/views.py - > User input at line 18, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, title='首页', books=books, order_books=order_books, types=types, books1=books1) -File: flask-book/app/main/views.py - > reaches line 19, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 3: -File: flask-book/app/main/views.py - > User input at line 18, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, title='首页', books=books, order_books=order_books, types=types, books1=books1) -File: flask-book/app/main/views.py - > reaches line 19, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 4: -File: flask-book/app/main/views.py - > User input at line 46, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) -File: flask-book/app/main/views.py - > reaches line 47, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 5: -File: flask-book/app/main/views.py - > User input at line 46, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) -File: flask-book/app/main/views.py - > reaches line 47, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 6: -File: flask-book/app/main/views.py - > User input at line 49, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 50: pagination = Book.query.filter_by(booktype_id=id).order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_BOOKSHOWS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 53: books = pagination.items - File: flask-book/app/main/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) -File: flask-book/app/main/views.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book-type.html',pagination=pagination, title='图书列表', types=types, books=books, form=form, id=id) - -Vulnerability 7: -File: flask-book/app/main/views.py - > User input at line 62, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) -File: flask-book/app/main/views.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 8: -File: flask-book/app/main/views.py - > User input at line 62, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 70: ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) -File: flask-book/app/main/views.py - > reaches line 63, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 9: -File: flask-book/app/main/views.py - > User input at line 65, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 66: pagination = Book.query.order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_BOOKSHOWS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 69: books = pagination.items - File: flask-book/app/main/views.py - > Line 63: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) -File: flask-book/app/main/views.py - > reaches line 70, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book-type-all.html',pagination=pagination, types=types, title='图书列表', books=books, form=form, active=999) - -Vulnerability 10: -File: flask-book/app/main/views.py - > User input at line 76, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 77: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 80: posts = pagination.items -File: flask-book/app/main/views.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('all-post.html',title='好书推荐', posts=posts, pagination=pagination) - -Vulnerability 11: -File: flask-book/app/main/views.py - > User input at line 97, trigger word ".data": - my_address = Address.query.filter_by(id=form.order_address.data).first() -Reassigned in: - File: flask-book/app/main/views.py - > Line 98: order_address = '详细地址: ' + my_address.area + my_address.detailed + ' 邮编: ' + str(my_address.zip_code) + ' 收货人: ' + my_address.name + ' 电话号码: ' + str(my_address.phone_number) - File: flask-book/app/main/views.py - > Line 101: order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 12: -File: flask-book/app/main/views.py - > User input at line 101, trigger word ".data": - order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) -Reassigned in: - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 13: -File: flask-book/app/main/views.py - > User input at line 97, trigger word ".data": - my_address = Address.query.filter_by(id=form.order_address.data).first() -Reassigned in: - File: flask-book/app/main/views.py - > Line 98: order_address = '详细地址: ' + my_address.area + my_address.detailed + ' 邮编: ' + str(my_address.zip_code) + ' 收货人: ' + my_address.name + ' 电话号码: ' + str(my_address.phone_number) - File: flask-book/app/main/views.py - > Line 101: order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 14: -File: flask-book/app/main/views.py - > User input at line 101, trigger word ".data": - order = Order(amount=form.amount.data, author_id=current_user.id, book=book, address=order_address, order_number=order_number, status_id=1) -Reassigned in: - File: flask-book/app/main/views.py - > Line 107: a = float(order.amount) - File: flask-book/app/main/views.py - > Line 109: order.price = a * b - File: flask-book/app/main/views.py - > Line 113: ret_MAYBE_FUNCTION_NAME = render_template('place-order.html',book=book, form=form, title='提交订单', query_address=query_address) -File: flask-book/app/main/views.py - > reaches line 112, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.buy_ok',id=order.id)) - -Vulnerability 15: -File: flask-book/app/main/views.py - > User input at line 168, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 170: page = book.bookcos.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-book/app/main/views.py - > Line 172: pagination = book.bookcos.order_by(BookCo.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 175: comments = pagination.items -File: flask-book/app/main/views.py - > reaches line 176, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',book=book, title=book.name, comments=comments, pagination=pagination) - -Vulnerability 16: -File: flask-book/app/main/views.py - > User input at line 275, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 276: pagination = Order.query.filter_by(author_id=current_user.id).order_by(Order.order_time.desc()).paginate(page,per_page=current_app.config['FLASKY_ORDERS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 279: orders = pagination.items -File: flask-book/app/main/views.py - > reaches line 280, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('my-order.html',orders=orders, title='我的订单', pagination=pagination) - -Vulnerability 17: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 298, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 18: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 298, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.search',str=str)) - -Vulnerability 19: -File: flask-book/app/main/views.py - > User input at line 297, trigger word ".data": - str = form.str.data -Reassigned in: - File: flask-book/app/main/views.py - > Line 300: ret_MAYBE_FUNCTION_NAME = render_template('search.html',books=books, title='搜索结果', form=form) -File: flask-book/app/main/views.py - > reaches line 299, trigger word "filter(": - books = Book.query.filter(Book.name.like('%' + str + '%')) - -Vulnerability 20: -File: flask-book/app/main/views.py - > User input at line 309, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flask-book/app/main/views.py - > Line 315: ret_MAYBE_FUNCTION_NAME = render_template('create_post.html',form=form, title='创建新文章') -File: flask-book/app/main/views.py - > reaches line 314, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 21: -File: flask-book/app/main/views.py - > User input at line 309, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flask-book/app/main/views.py - > Line 315: ret_MAYBE_FUNCTION_NAME = render_template('create_post.html',form=form, title='创建新文章') -File: flask-book/app/main/views.py - > reaches line 314, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 22: -File: flask-book/app/main/views.py - > User input at line 340, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 342: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-book/app/main/views.py - > Line 344: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 347: comments = pagination.items - File: flask-book/app/main/views.py - > Line 339: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=1)) -File: flask-book/app/main/views.py - > reaches line 348, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], title='文章内容', form=form, comments=comments, pagination=pagination) - -Vulnerability 23: -File: flask-book/app/main/views.py - > User input at line 358, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/main/views.py - > Line 359: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-book/app/main/views.py - > Line 362: posts = pagination.items -File: flask-book/app/main/views.py - > reaches line 363, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination, title='我的资料') - -Vulnerability 24: -File: flask-book/app/admin/views.py - > User input at line 29, trigger word ".data": - book = Book(name=form.name.data, author=form.author.data, price=form.price.data, isbn=form.isbn.data, press=form.press.data, booktype_id=form.type.data, words=form.words.data, des=form.des.data, page_numbers=form.page_numbers.data) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('admin/add-book.html',form=form, title='添加图书') -File: flask-book/app/admin/views.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.book',id=book.id)) - -Vulnerability 25: -File: flask-book/app/admin/views.py - > User input at line 29, trigger word ".data": - book = Book(name=form.name.data, author=form.author.data, price=form.price.data, isbn=form.isbn.data, press=form.press.data, booktype_id=form.type.data, words=form.words.data, des=form.des.data, page_numbers=form.page_numbers.data) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = render_template('admin/add-book.html',form=form, title='添加图书') -File: flask-book/app/admin/views.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.book',id=book.id)) - -Vulnerability 26: -File: flask-book/app/admin/views.py - > User input at line 98, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 99: pagination = Book.query.order_by(Book.id.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 102: book_lists = pagination.items -File: flask-book/app/admin/views.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/book-list.html',title='图书列表', pagination=pagination, book_lists=book_lists) - -Vulnerability 27: -File: flask-book/app/admin/views.py - > User input at line 111, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 112: pagination = User.query.order_by(User.member_since.desc()).paginate(page,per_page=current_app.config['FLASKY_USERLISTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 115: user_lists = pagination.items -File: flask-book/app/admin/views.py - > reaches line 116, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/user-list.html',title='用户列表', user_lists=user_lists, pagination=pagination) - -Vulnerability 28: -File: flask-book/app/admin/views.py - > User input at line 164, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 165: pagination = Order.query.order_by(Order.order_time.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 168: orders = pagination.items -File: flask-book/app/admin/views.py - > reaches line 169, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/order-list.html',orders=orders, pagination=pagination, page=page, title='订单处理') - -Vulnerability 29: -File: flask-book/app/admin/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-book/app/admin/views.py - > Line 189: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-book/app/admin/views.py - > Line 192: comments = pagination.items -File: flask-book/app/admin/views.py - > reaches line 193, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('admin/moderate.html',comments=comments, pagination=pagination, page=page, title='评论管理') - - - -zouliuyun/devops_flask -https://github.com/zouliuyun/devops_flask -Entry file: devops_flask/devops/api/__init__.py -Scanned: 2016-10-20 13:17:59.176728 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rburgos240/hello-flask -https://github.com/rburgos240/hello-flask -Entry file: hello-flask/app.py -Scanned: 2016-10-20 13:17:59.764193 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: hello-flask/venv/lib/python2.7/genericpath.py - -vonvick/learning-flask -https://github.com/vonvick/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 13:18:00.316931 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Wooden-Robot/flask-blog -https://github.com/Wooden-Robot/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:18:00.868895 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -RichardzWang/flask-template -https://github.com/RichardzWang/flask-template -Entry file: None -Scanned: 2016-10-20 13:18:01.394827 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/RichardzWang/flask-template. - -yawata159/flask-template -https://github.com/yawata159/flask-template -Entry file: None -Scanned: 2016-10-20 13:18:01.899958 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yawata159/flask-template. - -kelly3649/Flask-Template -https://github.com/kelly3649/Flask-Template -Entry file: Flask-Template/appHW.py -Scanned: 2016-10-20 13:18:03.723121 -No vulnerabilities found. - - -tvenis/flask_app -https://github.com/tvenis/flask_app -Entry file: None -Scanned: 2016-10-20 13:18:04.223856 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tvenis/flask_app. - -caipfei/blog_flask -https://github.com/caipfei/blog_flask -Entry file: None -Scanned: 2016-10-20 13:18:04.754393 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/caipfei/blog_flask. - -vitaliylevitskiand/wordsplay_flask -https://github.com/vitaliylevitskiand/wordsplay_flask -Entry file: wordsplay_flask/wordsplay_flask.py -Scanned: 2016-10-20 13:18:08.345604 -No vulnerabilities found. - - -joshparrish/docker-flask -https://github.com/joshparrish/docker-flask -Entry file: None -Scanned: 2016-10-20 13:18:08.867590 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joshparrish/docker-flask. - -Alexanderklau/Flask-Blog -https://github.com/Alexanderklau/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 13:18:09.395439 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jschluger/Flask_Occupations -https://github.com/jschluger/Flask_Occupations -Entry file: Flask_Occupations/app.py -Scanned: 2016-10-20 13:18:10.839471 -No vulnerabilities found. - - -lgarces/flask_app -https://github.com/lgarces/flask_app -Entry file: None -Scanned: 2016-10-20 13:18:11.340797 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lgarces/flask_app. - -Horla74/Flask-blog -https://github.com/Horla74/Flask-blog -Entry file: Flask-blog/app/__init__.py -Scanned: 2016-10-20 13:18:11.849593 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cuttlesoft/flask-workshop -https://github.com/cuttlesoft/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-20 13:18:13.755392 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulVudutala/flask -https://github.com/rahulVudutala/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:18:14.343414 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jesusalatorre/Flask -https://github.com/jesusalatorre/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:18:24.906139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mod2695/flask -https://github.com/mod2695/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:18:25.535544 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -yueqingwang/flask -https://github.com/yueqingwang/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:18:35.140389 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -tcyfs/flask -https://github.com/tcyfs/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:18:35.714274 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -lastone9182/flask -https://github.com/lastone9182/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:18:36.304936 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sakuuat/Flask -https://github.com/sakuuat/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:18:36.809014 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -hit9/flask-idempotent2 -https://github.com/hit9/flask-idempotent2 -Entry file: flask-idempotent2/flask_idempotent2.py -Scanned: 2016-10-20 13:18:44.285604 -No vulnerabilities found. - - -AminHP/flask-mvc -https://github.com/AminHP/flask-mvc -Entry file: flask-mvc/project/application.py -Scanned: 2016-10-20 13:18:45.286225 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -juli1/flaskyelp -https://github.com/juli1/flaskyelp -Entry file: None -Scanned: 2016-10-20 13:18:46.702380 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/juli1/flaskyelp. - -SchmidtWong/flaskr -https://github.com/SchmidtWong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:18:47.216624 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ChrisDBrooks/flaskbyexample -https://github.com/ChrisDBrooks/flaskbyexample -Entry file: flaskbyexample/hello.py -Scanned: 2016-10-20 13:18:52.534512 -No vulnerabilities found. - - -mkykadir/flaskrofficialtut -https://github.com/mkykadir/flaskrofficialtut -Entry file: flaskrofficialtut/flaskr.py -Scanned: 2016-10-20 13:19:00.828821 -No vulnerabilities found. - - -rbunch-dc/flasksql -https://github.com/rbunch-dc/flasksql -Entry file: flasksql/flaskMysql.py -Scanned: 2016-10-20 13:19:07.925789 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yorolifarg/flasksample -https://github.com/yorolifarg/flasksample -Entry file: flasksample/chapter2/app.py -Scanned: 2016-10-20 13:19:08.521456 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cirocfc/flaskapi -https://github.com/cirocfc/flaskapi -Entry file: flaskapi/aydaapi3.py -Scanned: 2016-10-20 13:19:09.188230 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapi/flaskenv/lib/python2.7/genericpath.py - -Arlus/flasktest -https://github.com/Arlus/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:19:09.733855 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Githuberzhang/flaskdemo -https://github.com/Githuberzhang/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:19:10.247881 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cagdasgerede/flaskdemo -https://github.com/cagdasgerede/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:19:10.756145 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -TaiyuanHot/Flaskr -https://github.com/TaiyuanHot/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-20 13:19:11.269437 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ouguangqian/flasklearn -https://github.com/ouguangqian/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-20 13:19:11.842659 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tsicroxe/flaskprojects -https://github.com/tsicroxe/flaskprojects -Entry file: flaskprojects/greatNumberGame/server.py -Scanned: 2016-10-20 13:19:20.331154 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Saksham9Thakur/flask1 -https://github.com/Saksham9Thakur/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 13:19:20.951663 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -joserferreyra/FlaskApp -https://github.com/joserferreyra/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:19:21.524624 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -topher91/FlaskTutorial -https://github.com/topher91/FlaskTutorial -Entry file: None -Scanned: 2016-10-20 13:19:22.510165 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hal0eye/FlaskWeb -https://github.com/hal0eye/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 13:19:23.106004 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -rschmidtz/flaskRestaurant -https://github.com/rschmidtz/flaskRestaurant -Entry file: flaskRestaurant/project2.py -Scanned: 2016-10-20 13:19:24.883167 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JFreyra/FlaskLogin -https://github.com/JFreyra/FlaskLogin -Entry file: FlaskLogin/app.py -Scanned: 2016-10-20 13:19:26.201917 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -soulerforgit/FlaskWeb -https://github.com/soulerforgit/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-20 13:19:26.792364 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venu/lib/python2.7/genericpath.py - -paigen11/flask101 -https://github.com/paigen11/flask101 -Entry file: flask101/hello.py -Scanned: 2016-10-20 13:19:27.320701 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Edisontom/flaskBlog -https://github.com/Edisontom/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 13:19:27.930051 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -codingPingjun/FlaskDemo -https://github.com/codingPingjun/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 13:19:35.439113 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -giladsh1/flaskTest -https://github.com/giladsh1/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-20 13:19:35.961956 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PirieD704/flask101 -https://github.com/PirieD704/flask101 -Entry file: flask101/hello.py -Scanned: 2016-10-20 13:19:36.473565 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jkaberg/tvhProxy -https://github.com/jkaberg/tvhProxy -Entry file: tvhProxy/tvhProxy.py -Scanned: 2016-10-20 13:19:37.917796 -No vulnerabilities found. - - -fengyunlsm/Flask-Blog -https://github.com/fengyunlsm/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-20 13:19:43.511955 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jttwnsnd/flask_example -https://github.com/jttwnsnd/flask_example -Entry file: None -Scanned: 2016-10-20 13:19:45.052867 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -max-l-weaver/flask_microblog -https://github.com/max-l-weaver/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-20 13:19:45.573566 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tangzhiyi11/flask_blog -https://github.com/tangzhiyi11/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:19:46.070058 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -imhuwq/read_flask -https://github.com/imhuwq/read_flask -Entry file: read_flask/app/__init__.py -Scanned: 2016-10-20 13:19:48.446263 -Vulnerability 1: -File: read_flask/app/__init__.py - > User input at line 18, trigger word "get(": - msg = request.args.get('msg', 'Hello Flask') -File: read_flask/app/__init__.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('msg'msg) - -Vulnerability 2: -File: read_flask/app/__init__.py - > User input at line 27, trigger word "get(": - name = session.get('user', 'stranger') -File: read_flask/app/__init__.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('greeting''Hello %s' % name) - -Vulnerability 3: -File: read_flask/app/__init__.py - > User input at line 40, trigger word "get(": - user = session.get('user') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) -File: read_flask/app/__init__.py - > reaches line 42, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 4: -File: read_flask/app/__init__.py - > User input at line 43, trigger word "get(": - uid = request.form.get('uid') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 42, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 5: -File: read_flask/app/__init__.py - > User input at line 46, trigger word "get(": - user = users.get(uid, None) -Reassigned in: - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 42, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 6: -File: read_flask/app/__init__.py - > User input at line 40, trigger word "get(": - user = session.get('user') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) -File: read_flask/app/__init__.py - > reaches line 42, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 7: -File: read_flask/app/__init__.py - > User input at line 43, trigger word "get(": - uid = request.form.get('uid') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 42, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 8: -File: read_flask/app/__init__.py - > User input at line 46, trigger word "get(": - user = users.get(uid, None) -Reassigned in: - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 42, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user.index',name=user)) - -Vulnerability 9: -File: read_flask/app/__init__.py - > User input at line 40, trigger word "get(": - user = session.get('user') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) -File: read_flask/app/__init__.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('msg''hello %s' % user.get('name')) - -Vulnerability 10: -File: read_flask/app/__init__.py - > User input at line 43, trigger word "get(": - uid = request.form.get('uid') -Reassigned in: - File: read_flask/app/__init__.py - > Line 46: user = users.get(uid, None) - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('msg''hello %s' % user.get('name')) - -Vulnerability 11: -File: read_flask/app/__init__.py - > User input at line 46, trigger word "get(": - user = users.get(uid, None) -Reassigned in: - File: read_flask/app/__init__.py - > Line 40: user = session.get('user') -File: read_flask/app/__init__.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('msg''hello %s' % user.get('name')) - - - -lawliet89/flask-redirector -https://github.com/lawliet89/flask-redirector -Entry file: flask-redirector/redirector/app.py -Scanned: 2016-10-20 13:19:52.906200 -No vulnerabilities found. - - -jonathan-kosgei/flask-rq -https://github.com/jonathan-kosgei/flask-rq -Entry file: flask-rq/app.py -Scanned: 2016-10-20 13:20:01.206360 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -huazhicai/flask-blog -https://github.com/huazhicai/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:20:01.764322 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -tpapic/flask-login -https://github.com/tpapic/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-20 13:20:09.365582 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lcfyuen/RPiFlask -https://github.com/lcfyuen/RPiFlask -Entry file: RPiFlask/main.py -Scanned: 2016-10-20 13:20:09.893837 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -getDolla/flask-login -https://github.com/getDolla/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-20 13:20:10.489464 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -citaret/flask-intro -https://github.com/citaret/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:20:10.993388 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sm-azure/flask-api -https://github.com/sm-azure/flask-api -Entry file: flask-api/sports.py -Scanned: 2016-10-20 13:20:11.498166 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brennv/flask-app -https://github.com/brennv/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:20:11.997395 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stw1/python_flask -https://github.com/stw1/python_flask -Entry file: None -Scanned: 2016-10-20 13:20:12.512296 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/stw1/python_flask. - -billywongstuy/Login-Flask -https://github.com/billywongstuy/Login-Flask -Entry file: Login-Flask/app.py -Scanned: 2016-10-20 13:20:13.953678 -No vulnerabilities found. - - -Horla74/Flask-bbs -https://github.com/Horla74/Flask-bbs -Entry file: Flask-bbs/app.py -Scanned: 2016-10-20 13:20:22.904720 -Vulnerability 1: -File: Flask-bbs/routes/comment.py - > User input at line 34, trigger word "get(": - article_id = form.get('article_id', '') -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 35: m.num = get_num(article_id) -File: Flask-bbs/routes/comment.py - > reaches line 37, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - -Vulnerability 2: -File: Flask-bbs/routes/comment.py - > User input at line 34, trigger word "get(": - article_id = form.get('article_id', '') -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 35: m.num = get_num(article_id) -File: Flask-bbs/routes/comment.py - > reaches line 37, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - -Vulnerability 3: -File: Flask-bbs/routes/comment.py - > User input at line 43, trigger word "get(": - t = Model.query.get(id) -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 45: article_id = t.article.id -File: Flask-bbs/routes/comment.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - -Vulnerability 4: -File: Flask-bbs/routes/comment.py - > User input at line 43, trigger word "get(": - t = Model.query.get(id) -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 45: article_id = t.article.id -File: Flask-bbs/routes/comment.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - -Vulnerability 5: -File: Flask-bbs/routes/comment.py - > User input at line 51, trigger word "get(": - t = Model.query.get(id) -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 52: article_id = t.article.id -File: Flask-bbs/routes/comment.py - > reaches line 54, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - -Vulnerability 6: -File: Flask-bbs/routes/comment.py - > User input at line 51, trigger word "get(": - t = Model.query.get(id) -Reassigned in: - File: Flask-bbs/routes/comment.py - > Line 52: article_id = t.article.id -File: Flask-bbs/routes/comment.py - > reaches line 54, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article.show',id=article_id)) - - - -marlon407/flask-rest -https://github.com/marlon407/flask-rest -Entry file: flask-rest/haystack/core.py -Scanned: 2016-10-20 13:20:23.907763 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -shihuibei/flask-project -https://github.com/shihuibei/flask-project -Entry file: flask-project/flask/lib/python3.5/site-packages/flask_openid.py -Scanned: 2016-10-20 13:20:31.700327 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -ethan-funny/flask-demos -https://github.com/ethan-funny/flask-demos -Entry file: flask-demos/application/app.py -Scanned: 2016-10-20 13:20:33.184014 -No vulnerabilities found. - - -HedleyPty/learning-flask -https://github.com/HedleyPty/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 13:20:33.770675 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alex1x/flask-app -https://github.com/alex1x/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-20 13:20:34.273896 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lilharry/occupation_flask -https://github.com/lilharry/occupation_flask -Entry file: occupation_flask/fp.py -Scanned: 2016-10-20 13:20:35.602524 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jeffsui/flask_app -https://github.com/jeffsui/flask_app -Entry file: None -Scanned: 2016-10-20 13:20:36.116254 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jeffsui/flask_app. - -SushisMakis/Flask-Firewall -https://github.com/SushisMakis/Flask-Firewall -Entry file: Flask-Firewall/flask-example.py -Scanned: 2016-10-20 13:20:36.638680 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ssepehrnoush/Learning-Flask -https://github.com/ssepehrnoush/Learning-Flask -Entry file: Learning-Flask/routes.py -Scanned: 2016-10-20 13:20:44.313751 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -igortmb/flask_blog -https://github.com/igortmb/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:20:44.845401 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -fleeby/flask_tutorial -https://github.com/fleeby/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:20:45.368544 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SwartzCr/flask_app -https://github.com/SwartzCr/flask_app -Entry file: None -Scanned: 2016-10-20 13:20:45.881035 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SwartzCr/flask_app. - -lunemec/flask_twitter -https://github.com/lunemec/flask_twitter -Entry file: flask_twitter/twitter/__main__.py -Scanned: 2016-10-20 13:20:47.223609 -No vulnerabilities found. - - -uehara1414/flask-heroku -https://github.com/uehara1414/flask-heroku -Entry file: flask-heroku/app.py -Scanned: 2016-10-20 13:20:48.568346 -No vulnerabilities found. - - -AnumSheraz/test_flask -https://github.com/AnumSheraz/test_flask -Entry file: test_flask/init.py -Scanned: 2016-10-20 13:20:49.894336 -No vulnerabilities found. - - -eladitzhakian/flask-boilerplate -https://github.com/eladitzhakian/flask-boilerplate -Entry file: None -Scanned: 2016-10-20 13:20:50.434625 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/eladitzhakian/flask-boilerplate. - -zouliuyun/devops_flask -https://github.com/zouliuyun/devops_flask -Entry file: devops_flask/devops/api/__init__.py -Scanned: 2016-10-20 13:20:52.442293 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -drvc57/learning-flask -https://github.com/drvc57/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 13:21:01.020510 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bharris62/flask-blog -https://github.com/bharris62/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:21:02.586468 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -midoribaka/flask-board -https://github.com/midoribaka/flask-board -Entry file: flask-board/app/__init__.py -Scanned: 2016-10-20 13:21:10.926282 -No vulnerabilities found. - - -joshparrish/docker-flask -https://github.com/joshparrish/docker-flask -Entry file: None -Scanned: 2016-10-20 13:21:11.443332 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joshparrish/docker-flask. - -blacktrub/test_flask -https://github.com/blacktrub/test_flask -Entry file: test_flask/test_run.py -Scanned: 2016-10-20 13:21:12.847761 -No vulnerabilities found. - - -whittlbc/flask-boiler -https://github.com/whittlbc/flask-boiler -Entry file: None -Scanned: 2016-10-20 13:21:13.360880 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhengxit/flask_web -https://github.com/zhengxit/flask_web -Entry file: flask_web/helloflask.py -Scanned: 2016-10-20 13:21:13.958511 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_web/lib/python2.7/genericpath.py - -clivegross/flask-usermgr -https://github.com/clivegross/flask-usermgr -Entry file: flask-usermgr/app/__init__.py -Scanned: 2016-10-20 13:21:22.275207 -Vulnerability 1: -File: flask-usermgr/app/module_auth/controllers.py - > User input at line 19, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-usermgr/app/module_auth/controllers.py - > Line 21: session['user_id'] = user.id -File: flask-usermgr/app/module_auth/controllers.py - > reaches line 22, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -williamcabrera4/docker-flask -https://github.com/williamcabrera4/docker-flask -Entry file: None -Scanned: 2016-10-20 13:21:22.845918 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/williamcabrera4/docker-flask. - -Zzcnick/flask_forms -https://github.com/Zzcnick/flask_forms -Entry file: flask_forms/flask_app/app.py -Scanned: 2016-10-20 13:21:24.286733 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garydai/flask_vpnserver -https://github.com/garydai/flask_vpnserver -Entry file: flask_vpnserver/start.py -Scanned: 2016-10-20 13:21:25.605922 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kelly3649/04_flask -https://github.com/kelly3649/04_flask -Entry file: 04_flask/appHW.py -Scanned: 2016-10-20 13:21:27.000548 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yhzhan/login_flask -https://github.com/yhzhan/login_flask -Entry file: login_flask/app.py -Scanned: 2016-10-20 13:21:28.297942 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ogal7/flask_login -https://github.com/ogal7/flask_login -Entry file: None -Scanned: 2016-10-20 13:21:28.813802 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ogal7/flask_login. - -axiaoxin/flask-demo -https://github.com/axiaoxin/flask-demo -Entry file: None -Scanned: 2016-10-20 13:21:32.334662 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/axiaoxin/flask-demo. - -hmdfsn/test_flask -https://github.com/hmdfsn/test_flask -Entry file: test_flask/setup.py -Scanned: 2016-10-20 13:21:42.392969 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ilyinon/flask_test -https://github.com/ilyinon/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 13:21:42.972318 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -xxiaoxiao/flask_practice -https://github.com/xxiaoxiao/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 13:21:43.494318 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -qimiaoxue/flask_todo -https://github.com/qimiaoxue/flask_todo -Entry file: None -Scanned: 2016-10-20 13:21:44.000210 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gaotongfei/flask_tutorial -https://github.com/gaotongfei/flask_tutorial -Entry file: None -Scanned: 2016-10-20 13:21:44.529767 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sp0rkie/flask-framework -https://github.com/sp0rkie/flask-framework -Entry file: flask-framework/app/__init__.py -Scanned: 2016-10-20 13:21:46.360093 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -boddumanohar/Flask-tdd -https://github.com/boddumanohar/Flask-tdd -Entry file: Flask-tdd/app.py -Scanned: 2016-10-20 13:21:47.694046 -No vulnerabilities found. - - -fpgentil/flask-learning -https://github.com/fpgentil/flask-learning -Entry file: flask-learning/app.py -Scanned: 2016-10-20 13:21:54.796956 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-learning/venv/lib/python2.7/genericpath.py - -volneyrock/ProjFlask -https://github.com/volneyrock/ProjFlask -Entry file: ProjFlask/app/__init__.py -Scanned: 2016-10-20 13:21:56.123848 -No vulnerabilities found. - - -jschluger/Flask_Login -https://github.com/jschluger/Flask_Login -Entry file: Flask_Login/app.py -Scanned: 2016-10-20 13:21:57.524381 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rahulVudutala/flask -https://github.com/rahulVudutala/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:21:59.430479 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sanie4eg/Flask -https://github.com/sanie4eg/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:21:59.940540 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -skraiman/flask -https://github.com/skraiman/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:22:00.520476 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -g00302826/Flask -https://github.com/g00302826/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:22:01.030558 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rdeeds/flask -https://github.com/rdeeds/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:22:02.575929 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -rionagreally/Flask -https://github.com/rionagreally/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:22:11.111813 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -konwan/flask -https://github.com/konwan/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:22:11.646425 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -arcVyas/flask -https://github.com/arcVyas/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:22:12.199769 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -VishnuArukat/flask -https://github.com/VishnuArukat/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:22:13.787535 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -lk-geimfari/flask_church -https://github.com/lk-geimfari/flask_church -Entry file: flask_church/example.py -Scanned: 2016-10-20 13:22:15.522191 -No vulnerabilities found. - - -padznich/_flask -https://github.com/padznich/_flask -Entry file: _flask/proj_3_Sijax/start.py -Scanned: 2016-10-20 13:22:16.984473 -No vulnerabilities found. - - -rofrano/nyu-lab-restful-flask -https://github.com/rofrano/nyu-lab-restful-flask -Entry file: nyu-lab-restful-flask/server.py -Scanned: 2016-10-20 13:22:24.457830 -No vulnerabilities found. - - -sharath1231/flaskpythonapp -https://github.com/sharath1231/flaskpythonapp -Entry file: flaskpythonapp/routes.py -Scanned: 2016-10-20 13:22:26.976033 -No vulnerabilities found. - - -SchmidtWong/flaskr -https://github.com/SchmidtWong/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:22:27.487485 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mwoo99/flasktemplate -https://github.com/mwoo99/flasktemplate -Entry file: flasktemplate/flask_template.py -Scanned: 2016-10-20 13:22:28.777401 -No vulnerabilities found. - - -ChrisDBrooks/flaskbyexample -https://github.com/ChrisDBrooks/flaskbyexample -Entry file: flaskbyexample/hello.py -Scanned: 2016-10-20 13:22:30.250232 -No vulnerabilities found. - - -smancebo/flasktest -https://github.com/smancebo/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:22:30.787100 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cagdasgerede/flaskdemo -https://github.com/cagdasgerede/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:22:33.304614 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -timabe/flasky -https://github.com/timabe/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:22:34.826952 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -melmandd/flaskr -https://github.com/melmandd/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:22:43.337513 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -AlexAerow/flasktest -https://github.com/AlexAerow/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:22:43.877285 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -downtownhub/flaskapp -https://github.com/downtownhub/flaskapp -Entry file: None -Scanned: 2016-10-20 13:22:44.408970 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/downtownhub/flaskapp. - -ouguangqian/flasklearn -https://github.com/ouguangqian/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-20 13:22:44.932153 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mabbie/flasky -https://github.com/mabbie/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:22:45.428905 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulmoliva/flaskr -https://github.com/paulmoliva/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:22:45.951787 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -proxyroot/flaskit -https://github.com/proxyroot/flaskit -Entry file: flaskit/__init__.py -Scanned: 2016-10-20 13:22:48.284724 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SwartzCr/flaskr -https://github.com/SwartzCr/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:22:48.803220 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lisaheff95/flask1 -https://github.com/lisaheff95/flask1 -Entry file: flask1/fl.py -Scanned: 2016-10-20 13:22:56.971766 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask1/env34/lib/python3.4/struct.py - -willieaugustine/FlaskApp -https://github.com/willieaugustine/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:22:58.567233 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -matsuh/FlaskSample -https://github.com/matsuh/FlaskSample -Entry file: FlaskSample/flask03.py -Scanned: 2016-10-20 13:23:00.890914 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JFreyra/FlaskLogin -https://github.com/JFreyra/FlaskLogin -Entry file: FlaskLogin/app.py -Scanned: 2016-10-20 13:23:01.400200 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ogilhinn/flaskTest -https://github.com/ogilhinn/flaskTest -Entry file: flaskTest/url.py -Scanned: 2016-10-20 13:23:01.922594 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -scottfabini/flaskApp -https://github.com/scottfabini/flaskApp -Entry file: flaskApp/apiApp_new.py -Scanned: 2016-10-20 13:23:02.442332 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ricardomart/FlaskApp -https://github.com/ricardomart/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-20 13:23:03.017769 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -chiawen82/flaskFirst -https://github.com/chiawen82/flaskFirst -Entry file: None -Scanned: 2016-10-20 13:23:19.215150 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -meledir/flaskBlog -https://github.com/meledir/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-20 13:23:19.801312 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/genericpath.py - -lcfyuen/RPiFlask -https://github.com/lcfyuen/RPiFlask -Entry file: RPiFlask/main.py -Scanned: 2016-10-20 13:23:20.304755 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -sasham43/flask-test -https://github.com/sasham43/flask-test -Entry file: flask-test/FlaskApp/__init__.py -Scanned: 2016-10-20 13:23:20.868488 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/FlaskApp/venv/lib/python2.7/genericpath.py - -mickengland/vagrant-flask -https://github.com/mickengland/vagrant-flask -Entry file: vagrant-flask/api.py -Scanned: 2016-10-20 13:23:22.209786 -No vulnerabilities found. - - -citaret/flask-intro -https://github.com/citaret/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:23:22.717679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -elderjoe/rest_flask -https://github.com/elderjoe/rest_flask -Entry file: rest_flask/api/__init__.py -Scanned: 2016-10-20 13:23:24.237353 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -manassolanki/ProjectFlask -https://github.com/manassolanki/ProjectFlask -Entry file: ProjectFlask/project.py -Scanned: 2016-10-20 13:23:30.838552 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Parlefan/flask-blog -https://github.com/Parlefan/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:23:31.387692 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -bamboo-yujiro/my_flask -https://github.com/bamboo-yujiro/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 13:23:32.093427 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -igortmb/flask_blog -https://github.com/igortmb/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:23:32.610253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lunemec/flask_twitter -https://github.com/lunemec/flask_twitter -Entry file: flask_twitter/twitter/__main__.py -Scanned: 2016-10-20 13:23:33.955698 -No vulnerabilities found. - - -uehara1414/flask-heroku -https://github.com/uehara1414/flask-heroku -Entry file: flask-heroku/app.py -Scanned: 2016-10-20 13:23:35.261480 -No vulnerabilities found. - - -AnumSheraz/test_flask -https://github.com/AnumSheraz/test_flask -Entry file: test_flask/setup.py -Scanned: 2016-10-20 13:23:35.926429 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vzhz/flask_blog -https://github.com/vzhz/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:23:43.454888 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -garibo/Flask-Social -https://github.com/garibo/Flask-Social -Entry file: Flask-Social/app.py -Scanned: 2016-10-20 13:23:46.820552 -Vulnerability 1: -File: Flask-Social/app.py - > User input at line 108, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: Flask-Social/app.py - > Line 116: user = current_user -File: Flask-Social/app.py - > reaches line 119, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: Flask-Social/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 146, trigger word "flash(": - flash('You're now following {}!'.format(to_user.username), 'success') - -Vulnerability 3: -File: Flask-Social/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 147, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: Flask-Social/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 147, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: Flask-Social/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 165, trigger word "flash(": - flash('You've unfollowed {}!'.format(to_user.username), 'success') - -Vulnerability 6: -File: Flask-Social/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 166, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: Flask-Social/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social/app.py - > reaches line 166, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -harishtm/flask-blog -https://github.com/harishtm/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:23:47.391211 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -AdamSalma/flask-experiment -https://github.com/AdamSalma/flask-experiment -Entry file: flask-experiment/test/test.py -Scanned: 2016-10-20 13:23:48.412196 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lyoncc/learn-flask -https://github.com/lyoncc/learn-flask -Entry file: learn-flask/flask/lib/python2.7/site-packages/flask_openid.py -Scanned: 2016-10-20 13:23:49.074077 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wunderlins/todo-flask -https://github.com/wunderlins/todo-flask -Entry file: None -Scanned: 2016-10-20 13:23:49.580586 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wunderlins/todo-flask. - -affinespaces/flask_test -https://github.com/affinespaces/flask_test -Entry file: flask_test/app.py -Scanned: 2016-10-20 13:23:50.187034 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clivegross/flask-usermgr -https://github.com/clivegross/flask-usermgr -Entry file: flask-usermgr/app/__init__.py -Scanned: 2016-10-20 13:24:03.548334 -Vulnerability 1: -File: flask-usermgr/app/module_auth/controllers.py - > User input at line 19, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-usermgr/app/module_auth/controllers.py - > Line 21: session['user_id'] = user.id -File: flask-usermgr/app/module_auth/controllers.py - > reaches line 22, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -seantking/flask-introduction -https://github.com/seantking/flask-introduction -Entry file: flask-introduction/exercise2_1.py -Scanned: 2016-10-20 13:24:09.073185 -No vulnerabilities found. - - -FelixRiegBaumhauer/flask-template -https://github.com/FelixRiegBaumhauer/flask-template -Entry file: None -Scanned: 2016-10-20 13:24:09.582599 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/FelixRiegBaumhauer/flask-template. - -bluenight1994/flask_time -https://github.com/bluenight1994/flask_time -Entry file: None -Scanned: 2016-10-20 13:24:16.582111 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Zzcnick/flask_forms -https://github.com/Zzcnick/flask_forms -Entry file: flask_forms/flask_app/app.py -Scanned: 2016-10-20 13:24:17.106503 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -canofre/flask_crud -https://github.com/canofre/flask_crud -Entry file: flask_crud/app/__init__.py -Scanned: 2016-10-20 13:24:18.544338 -No vulnerabilities found. - - -kelly3649/04_flask -https://github.com/kelly3649/04_flask -Entry file: 04_flask/appHW.py -Scanned: 2016-10-20 13:24:19.065476 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -yhzhan/login_flask -https://github.com/yhzhan/login_flask -Entry file: login_flask/app.py -Scanned: 2016-10-20 13:24:19.559428 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ogal7/flask_login -https://github.com/ogal7/flask_login -Entry file: None -Scanned: 2016-10-20 13:24:20.070846 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ogal7/flask_login. - -axiaoxin/flask-demo -https://github.com/axiaoxin/flask-demo -Entry file: None -Scanned: 2016-10-20 13:24:20.577222 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/axiaoxin/flask-demo. - -bschumacher/Flask-BS -https://github.com/bschumacher/Flask-BS -Entry file: Flask-BS/test.py -Scanned: 2016-10-20 13:24:22.024947 -No vulnerabilities found. - - -towercity/flask-tutorial -https://github.com/towercity/flask-tutorial -Entry file: None -Scanned: 2016-10-20 13:24:22.561657 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ed201971/simple_flask -https://github.com/ed201971/simple_flask -Entry file: simple_flask/hello.py -Scanned: 2016-10-20 13:24:23.189890 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jschluger/Flask_Login -https://github.com/jschluger/Flask_Login -Entry file: Flask_Login/app.py -Scanned: 2016-10-20 13:24:23.693382 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Might-M/flask_repo -https://github.com/Might-M/flask_repo -Entry file: flask_repo/app/__init__.py -Scanned: 2016-10-20 13:24:27.565761 -No vulnerabilities found. - - -BAM-X/Flask-seed -https://github.com/BAM-X/Flask-seed -Entry file: Flask-seed/app/app.py -Scanned: 2016-10-20 13:24:33.041433 -No vulnerabilities found. - - -zhangzhidao/Flask-blog -https://github.com/zhangzhidao/Flask-blog -Entry file: Flask-blog/app/__init__.py -Scanned: 2016-10-20 13:24:33.585647 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -rforgione/flask_playground -https://github.com/rforgione/flask_playground -Entry file: flask_playground/hello_world.py -Scanned: 2016-10-20 13:24:34.100581 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -argetamorina/Python-Flask -https://github.com/argetamorina/Python-Flask -Entry file: None -Scanned: 2016-10-20 13:24:34.623743 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/argetamorina/Python-Flask. - -JavierGarciaD/flask_ing -https://github.com/JavierGarciaD/flask_ing -Entry file: flask_ing/blog/blog.py -Scanned: 2016-10-20 13:24:36.039161 -No vulnerabilities found. - - -PavanTejaAnne/Flask-SQLAlchemy -https://github.com/PavanTejaAnne/Flask-SQLAlchemy -Entry file: Flask-SQLAlchemy/app.py -Scanned: 2016-10-20 13:24:36.583994 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -clakits/Flask_Webapp -https://github.com/clakits/Flask_Webapp -Entry file: Flask_Webapp/Redirect.py -Scanned: 2016-10-20 13:24:45.048679 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -keathmilligan/flask-quickstart -https://github.com/keathmilligan/flask-quickstart -Entry file: flask-quickstart/flask-quickstart/cli.py -Scanned: 2016-10-20 13:24:45.562420 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -dhurataK/flask_mysql -https://github.com/dhurataK/flask_mysql -Entry file: flask_mysql/email_validation_with_db/server.py -Scanned: 2016-10-20 13:24:49.065281 -Vulnerability 1: -File: flask_mysql/email_validation_with_db/server.py - > User input at line 16, trigger word "form[": - email = request.form['email'] -File: flask_mysql/email_validation_with_db/server.py - > reaches line 28, trigger word "flash(": - flash('The email address you entered ' + email + ' is a VALID email address! Thank you!') - - - -Urumasi/Flask-Bones -https://github.com/Urumasi/Flask-Bones -Entry file: Flask-Bones/app/__init__.py -Scanned: 2016-10-20 13:24:54.970530 -Vulnerability 1: -File: Flask-Bones/app/auth/views.py - > User input at line 48, trigger word ".data": - group = Group.create(nazev=form.data['nazev']) -File: Flask-Bones/app/auth/views.py - > reaches line 50, trigger word "flash(": - flash(gettext('Group {name} created').format(name=group.nazev), 'success') - -Vulnerability 2: -File: Flask-Bones/app/auth/views.py - > User input at line 60, trigger word ".data": - firma = Firma.create(nazev=form.data['nazev'], state=form.data['state'], address=form.data['address'], phone_number=form.data['phone_number'], contact_person=form.data['contact_person'], website=form.data['website']) -File: Flask-Bones/app/auth/views.py - > reaches line 67, trigger word "flash(": - flash(gettext('Organization {name} created').format(name=firma.nazev), 'success') - -Vulnerability 3: -File: Flask-Bones/app/public/views.py - > User input at line 39, trigger word ".data": - user = User.create(username=form.data['username'], email=form.data['email'], password=form.data['password'], remote_addr=request.remote_addr, jmeno=form.data['jmeno'], prijmeni=form.data['prijmeni']) -Reassigned in: - File: Flask-Bones/app/public/views.py - > Line 49: token = s.dumps(user.id) -File: Flask-Bones/app/public/views.py - > reaches line 53, trigger word "flash(": - flash(gettext('Sent verification email to {email}').format(email=user.email), 'success') - - - -MekonenW/Dojo_survey -https://github.com/MekonenW/Dojo_survey -Entry file: Dojo_survey/survey.py -Scanned: 2016-10-20 13:25:01.895464 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Dojo_survey/venv/lib/python2.7/genericpath.py - -mat105/Docker-Test -https://github.com/mat105/Docker-Test -Entry file: Docker-Test/aplicacion/app.py -Scanned: 2016-10-20 13:25:03.220057 -No vulnerabilities found. - - -gauravkulkarni96/microblog -https://github.com/gauravkulkarni96/microblog -Entry file: None -Scanned: 2016-10-20 13:25:03.737065 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BreslawScripts/flask_hello_world -https://github.com/BreslawScripts/flask_hello_world -Entry file: None -Scanned: 2016-10-20 13:25:04.248873 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/BreslawScripts/flask_hello_world. - -PeteLing/my_blog -https://github.com/PeteLing/my_blog -Entry file: my_blog/app/__init__.py -Scanned: 2016-10-20 13:25:07.323984 -No vulnerabilities found. - - -MatthewLally/FlaskProblemSheet -https://github.com/MatthewLally/FlaskProblemSheet -Entry file: FlaskProblemSheet/hello.py -Scanned: 2016-10-20 13:25:08.652822 -No vulnerabilities found. - - -ysalimi/flaskRestCrud -https://github.com/ysalimi/flaskRestCrud -Entry file: flaskRestCrud/project/__init__.py -Scanned: 2016-10-20 13:25:11.116951 -Vulnerability 1: -File: flaskRestCrud/project/api_v1/authority.py - > User input at line 29, trigger word ".data": - res = scheme.data -Reassigned in: - File: flaskRestCrud/project/api_v1/authority.py - > Line 31: ret_MAYBE_FUNCTION_NAME = (jsonify(), 400) -File: flaskRestCrud/project/api_v1/authority.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = authority_schema.jsonify(res) - -Vulnerability 2: -File: flaskRestCrud/project/api_v1/authority.py - > User input at line 40, trigger word "get(": - authority = Authority.query.get(id) -File: flaskRestCrud/project/api_v1/authority.py - > reaches line 46, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = authority_schema.jsonify(authority) - -Vulnerability 3: -File: flaskRestCrud/project/api_v1/user.py - > User input at line 127, trigger word ".data": - res = scheme.data -Reassigned in: - File: flaskRestCrud/project/api_v1/user.py - > Line 129: ret_MAYBE_FUNCTION_NAME = (jsonify(), 400) -File: flaskRestCrud/project/api_v1/user.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (user_schema_secure.jsonify(User.query.filter_by(email=res.email).first()), 409) - -Vulnerability 4: -File: flaskRestCrud/project/api_v1/user.py - > User input at line 127, trigger word ".data": - res = scheme.data -Reassigned in: - File: flaskRestCrud/project/api_v1/user.py - > Line 129: ret_MAYBE_FUNCTION_NAME = (jsonify(), 400) -File: flaskRestCrud/project/api_v1/user.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = user_schema_secure.jsonify(res) - -Vulnerability 5: -File: flaskRestCrud/project/api_v1/user.py - > User input at line 140, trigger word "get(": - user = User.query.get(id) -File: flaskRestCrud/project/api_v1/user.py - > reaches line 151, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = user_schema_secure.jsonify(user) - -Vulnerability 6: -File: flaskRestCrud/project/api_v1/role.py - > User input at line 32, trigger word ".data": - res = scheme.data -Reassigned in: - File: flaskRestCrud/project/api_v1/role.py - > Line 34: ret_MAYBE_FUNCTION_NAME = (jsonify(), 400) -File: flaskRestCrud/project/api_v1/role.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = role_schema.jsonify(res) - -Vulnerability 7: -File: flaskRestCrud/project/api_v1/role.py - > User input at line 46, trigger word "get(": - role = Role.query.get(id) -Reassigned in: - File: flaskRestCrud/project/api_v1/role.py - > Line 48: ret_MAYBE_FUNCTION_NAME = (jsonify(), 404) -File: flaskRestCrud/project/api_v1/role.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = role_schema.jsonify(role) - - - -richardadalton/flask2google -https://github.com/richardadalton/flask2google -Entry file: flask2google/main.py -Scanned: 2016-10-20 13:25:12.440340 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -JFreyra/FlaskLogin_02 -https://github.com/JFreyra/FlaskLogin_02 -Entry file: FlaskLogin_02/app.py -Scanned: 2016-10-20 13:25:18.828628 -No vulnerabilities found. - - -JesseTellez/FlaskWordApp -https://github.com/JesseTellez/FlaskWordApp -Entry file: FlaskWordApp/myenv/app.py -Scanned: 2016-10-20 13:25:25.032342 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ribbondz/erp_flask_app -https://github.com/ribbondz/erp_flask_app -Entry file: erp_flask_app/site-packages/flask/sessions.py -Scanned: 2016-10-20 13:25:33.098863 -No vulnerabilities found. - - -IanLondon/simple_flask_docker -https://github.com/IanLondon/simple_flask_docker -Entry file: simple_flask_docker/app/main.py -Scanned: 2016-10-20 13:25:35.475341 -No vulnerabilities found. - - -mustafawm/Flask-LocationApp -https://github.com/mustafawm/Flask-LocationApp -Entry file: Flask-LocationApp/routes.py -Scanned: 2016-10-20 13:25:38.781465 -Vulnerability 1: -File: Flask-LocationApp/routes.py - > User input at line 31, trigger word ".data": - address = form.address.data -Reassigned in: - File: Flask-LocationApp/routes.py - > Line 33: my_coordinates = p.address_to_latlng(address) - File: Flask-LocationApp/routes.py - > Line 34: places = p.query(address) - File: Flask-LocationApp/routes.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: Flask-LocationApp/routes.py - > Line 24: my_coordinates = (37.4221, -122.0844) - File: Flask-LocationApp/routes.py - > Line 25: places = [] - File: Flask-LocationApp/routes.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: Flask-LocationApp/routes.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: Flask-LocationApp/routes.py - > User input at line 31, trigger word ".data": - address = form.address.data -Reassigned in: - File: Flask-LocationApp/routes.py - > Line 33: my_coordinates = p.address_to_latlng(address) - File: Flask-LocationApp/routes.py - > Line 34: places = p.query(address) - File: Flask-LocationApp/routes.py - > Line 22: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: Flask-LocationApp/routes.py - > Line 24: my_coordinates = (37.4221, -122.0844) - File: Flask-LocationApp/routes.py - > Line 25: places = [] - File: Flask-LocationApp/routes.py - > Line 29: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: Flask-LocationApp/routes.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -ImNaren/Docker_Compose-Flask-Mysql- -https://github.com/ImNaren/Docker_Compose-Flask-Mysql- -Entry file: Docker_Compose-Flask-Mysql-/app/model.py -Scanned: 2016-10-20 13:25:40.616794 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -konwan/flask -https://github.com/konwan/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:42.681025 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -dalyddaly/flask -https://github.com/dalyddaly/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:43.264929 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -CliveCullen/flask -https://github.com/CliveCullen/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:43.839382 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Carryopendoor1/flask -https://github.com/Carryopendoor1/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:44.406488 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -lsyff210/flask -https://github.com/lsyff210/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:44.986284 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -jyntran/flask -https://github.com/jyntran/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:45.559935 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -larry1994/flask -https://github.com/larry1994/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:46.141398 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -juliascript/Flask -https://github.com/juliascript/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:25:46.644252 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -davinbutler/flask -https://github.com/davinbutler/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:47.222754 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -skraiman/flask -https://github.com/skraiman/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:47.790716 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Gershine/Flask -https://github.com/Gershine/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:25:48.296992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ricardonhuang/flask -https://github.com/ricardonhuang/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:49.875289 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -cmeisinger/flask -https://github.com/cmeisinger/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:25:56.462039 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sanie4eg/Flask -https://github.com/sanie4eg/Flask -Entry file: Flask/test_hello.py -Scanned: 2016-10-20 13:26:02.974846 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -vojtahelle/flask -https://github.com/vojtahelle/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:04.545317 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -bharatsush/flask -https://github.com/bharatsush/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:05.111910 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -Tangugo/flask -https://github.com/Tangugo/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:05.678315 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -darylkeane/flask -https://github.com/darylkeane/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:08.262356 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -fushouhai/flask -https://github.com/fushouhai/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:10.826922 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -sadscv/flask -https://github.com/sadscv/flask -Entry file: flask/hello.py -Scanned: 2016-10-20 13:26:12.403198 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask/venv/lib/python3.5/struct.py - -arpitbbhayani/flasksr -https://github.com/arpitbbhayani/flasksr -Entry file: flasksr/examples/basicsr.py -Scanned: 2016-10-20 13:26:19.920165 -No vulnerabilities found. - - -I-am-Gabi/flask-minicurso -https://github.com/I-am-Gabi/flask-minicurso -Entry file: flask-minicurso/minicurso-flask.py -Scanned: 2016-10-20 13:26:26.596546 -No vulnerabilities found. - - -Millyn/uFlask -https://github.com/Millyn/uFlask -Entry file: uFlask/project/__init__.py -Scanned: 2016-10-20 13:26:27.933919 -No vulnerabilities found. - - -zhangheli/flask-google -https://github.com/zhangheli/flask-google -Entry file: flask-google/g.py -Scanned: 2016-10-20 13:26:35.377393 -No vulnerabilities found. - - -janmandel/flasktest -https://github.com/janmandel/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:26:35.923096 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -springleeo/flasklearning -https://github.com/springleeo/flasklearning -Entry file: flasklearning/flasklearning.py -Scanned: 2016-10-20 13:26:37.251556 -No vulnerabilities found. - - -Irabor/flaskbg -https://github.com/Irabor/flaskbg -Entry file: flaskbg/app.py -Scanned: 2016-10-20 13:26:38.564021 -No vulnerabilities found. - - -hartwork/flasktop -https://github.com/hartwork/flasktop -Entry file: flasktop/flasktop.py -Scanned: 2016-10-20 13:26:40.943668 -No vulnerabilities found. - - -xhygh/flaskr -https://github.com/xhygh/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:26:41.456992 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -joaozecchin/flasktemp -https://github.com/joaozecchin/flasktemp -Entry file: flasktemp/app/__init__.py -Scanned: 2016-10-20 13:26:42.767784 -No vulnerabilities found. - - -HecvStyle/flasky -https://github.com/HecvStyle/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:26:43.277454 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -superdachs/flaskdaemon -https://github.com/superdachs/flaskdaemon -Entry file: flaskdaemon/flaskdaemon.py -Scanned: 2016-10-20 13:26:44.583368 -No vulnerabilities found. - - -Cushionyten0/flasktaskr -https://github.com/Cushionyten0/flasktaskr -Entry file: None -Scanned: 2016-10-20 13:26:45.098068 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -uMtMu/flasksite -https://github.com/uMtMu/flasksite -Entry file: flasksite/app.py -Scanned: 2016-10-20 13:26:45.625320 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -brianmugweru/flaskpython -https://github.com/brianmugweru/flaskpython -Entry file: None -Scanned: 2016-10-20 13:26:53.739355 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -asynte/flasktechdemo -https://github.com/asynte/flasktechdemo -Entry file: flasktechdemo/app/__init__.py -Scanned: 2016-10-20 13:27:02.091807 -No vulnerabilities found. - - -btotharye/flaskmicroblog -https://github.com/btotharye/flaskmicroblog -Entry file: None -Scanned: 2016-10-20 13:27:02.642785 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gavinroderick/flaskapp -https://github.com/gavinroderick/flaskapp -Entry file: None -Scanned: 2016-10-20 13:27:03.149221 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gavinroderick/flaskapp. - -pradyumnac/flasklearn -https://github.com/pradyumnac/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-20 13:27:03.667230 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -songxiaowei/flaskdemo -https://github.com/songxiaowei/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:27:04.234193 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ryanmartinneutrino/flaskwf -https://github.com/ryanmartinneutrino/flaskwf -Entry file: flaskwf/flaskwf.py -Scanned: 2016-10-20 13:27:05.689363 -No vulnerabilities found. - - -Jorge-Fuentes/flaskrplus -https://github.com/Jorge-Fuentes/flaskrplus -Entry file: flaskrplus/flaskr+.py -Scanned: 2016-10-20 13:27:07.142112 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -ajjkennedy/flaskaws -https://github.com/ajjkennedy/flaskaws -Entry file: flaskaws/flask-aws/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-20 13:27:17.318490 -No vulnerabilities found. - - -xando/flaskr -https://github.com/xando/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:27:18.451094 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -tiancegit/flasky -https://github.com/tiancegit/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:27:18.995448 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wasabi222/flaskdemo -https://github.com/wasabi222/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-20 13:27:19.510120 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -HuanChenLu/flasky -https://github.com/HuanChenLu/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:27:20.010369 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -phillinzzz/flasky -https://github.com/phillinzzz/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:27:20.522235 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -paulmoliva/flaskr -https://github.com/paulmoliva/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:27:21.020217 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -mdzhang/flaskr -https://github.com/mdzhang/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:27:27.538080 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jaysharm/flaskio -https://github.com/jaysharm/flaskio -Entry file: flaskio/app.py -Scanned: 2016-10-20 13:27:35.912375 -No vulnerabilities found. - - -SeamusGillespie/flasktest -https://github.com/SeamusGillespie/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-20 13:27:36.426063 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -cw-andrews/flasked -https://github.com/cw-andrews/flasked -Entry file: flasked/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 13:27:48.668744 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -princess0307/flaskapp -https://github.com/princess0307/flaskapp -Entry file: None -Scanned: 2016-10-20 13:27:49.190999 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/princess0307/flaskapp. - -cabbagesmasher/flaskapp -https://github.com/cabbagesmasher/flaskapp -Entry file: None -Scanned: 2016-10-20 13:27:49.738677 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cabbagesmasher/flaskapp. - -tazou/flasktickets -https://github.com/tazou/flasktickets -Entry file: flasktickets/main.py -Scanned: 2016-10-20 13:27:51.585884 -No vulnerabilities found. - - -WtemptyE/flaskr -https://github.com/WtemptyE/flaskr -Entry file: flaskr/flaskr.py -Scanned: 2016-10-20 13:27:52.091538 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -SpringToooh/flasky -https://github.com/SpringToooh/flasky -Entry file: flasky/flasky/flask/app.py -Scanned: 2016-10-20 13:27:52.596866 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -LostMailman/FlaskPractice -https://github.com/LostMailman/FlaskPractice -Entry file: FlaskPractice/flask/Lib/site-packages/flask_openid.py -Scanned: 2016-10-20 13:28:03.060253 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -harishtm/FlaskDemo -https://github.com/harishtm/FlaskDemo -Entry file: FlaskDemo/test.py -Scanned: 2016-10-20 13:28:03.605326 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Original-heapsters/FlaskPortal -https://github.com/Original-heapsters/FlaskPortal -Entry file: FlaskPortal/Portal_Main/app.py -Scanned: 2016-10-20 13:28:04.937013 -Vulnerability 1: -File: FlaskPortal/Portal_Main/app.py - > User input at line 20, trigger word "form[": - POST_USERNAME = str(request.form['username']) -File: FlaskPortal/Portal_Main/app.py - > reaches line 26, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - -Vulnerability 2: -File: FlaskPortal/Portal_Main/app.py - > User input at line 21, trigger word "form[": - POST_PASSWORD = str(request.form['password']) -File: FlaskPortal/Portal_Main/app.py - > reaches line 26, trigger word "filter(": - query = s.query(User).filter(User.username.in_([POST_USERNAME]), User.password.in_([POST_PASSWORD])) - - - -dsikes/FlaskSample -https://github.com/dsikes/FlaskSample -Entry file: FlaskSample/flask03.py -Scanned: 2016-10-20 13:28:05.479281 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -stackeric/flask_starter -https://github.com/stackeric/flask_starter -Entry file: flask_starter/resources/__init__.py -Scanned: 2016-10-20 13:28:06.799432 -No vulnerabilities found. - - -yimuyang/FlaskStudy -https://github.com/yimuyang/FlaskStudy -Entry file: FlaskStudy/flaskr.py -Scanned: 2016-10-20 13:28:07.323139 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -lisaheff95/flask2 -https://github.com/lisaheff95/flask2 -Entry file: flask2/app.py -Scanned: 2016-10-20 13:28:07.837338 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -coderminer/FlaskBlog -https://github.com/coderminer/FlaskBlog -Entry file: FlaskBlog/flask/lib/python2.7/site-packages/flask_sqlalchemy.py -Scanned: 2016-10-20 13:28:08.472339 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -smitthakkar96/flask-restful-boilerplate -https://github.com/smitthakkar96/flask-restful-boilerplate -Entry file: flask-restful-boilerplate/api.py -Scanned: 2016-10-20 13:28:09.878182 -No vulnerabilities found. - - -pwgraham91/flask-template -https://github.com/pwgraham91/flask-template -Entry file: None -Scanned: 2016-10-20 13:28:10.394425 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pwgraham91/flask-template. - -MarFerPra/learning-flask -https://github.com/MarFerPra/learning-flask -Entry file: learning-flask/hello.py -Scanned: 2016-10-20 13:28:10.941876 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -bamboo-yujiro/my_flask -https://github.com/bamboo-yujiro/my_flask -Entry file: my_flask/hello.py -Scanned: 2016-10-20 13:28:11.566025 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_flask/venv/lib/python2.7/genericpath.py - -zheng-zy/flask_app -https://github.com/zheng-zy/flask_app -Entry file: None -Scanned: 2016-10-20 13:28:12.064100 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zheng-zy/flask_app. - -amarshukla/flask_app -https://github.com/amarshukla/flask_app -Entry file: None -Scanned: 2016-10-20 13:28:18.593184 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amarshukla/flask_app. - -ultimatesword/learn_flask -https://github.com/ultimatesword/learn_flask -Entry file: learn_flask/hello.py -Scanned: 2016-10-20 13:28:19.139492 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Fiksers/myFlask -https://github.com/Fiksers/myFlask -Entry file: myFlask/project.py -Scanned: 2016-10-20 13:28:19.652881 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -Naivee-Bref/Flask-Bref -https://github.com/Naivee-Bref/Flask-Bref -Entry file: Flask-Bref/app.py -Scanned: 2016-10-20 13:28:20.984732 -No vulnerabilities found. - - -jacquelineawatts/Flask_Intro -https://github.com/jacquelineawatts/Flask_Intro -Entry file: Flask_Intro/nice.py -Scanned: 2016-10-20 13:28:21.575253 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Intro/env/lib/python2.7/genericpath.py - -mrkewen/flask-blog -https://github.com/mrkewen/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-20 13:28:22.121891 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-blog/venv/lib/python2.7/genericpath.py - -kszgbr/flask-min -https://github.com/kszgbr/flask-min -Entry file: flask-min/main.py -Scanned: 2016-10-20 13:28:23.456588 -No vulnerabilities found. - - -renefs87/flask-skeleton -https://github.com/renefs87/flask-skeleton -Entry file: None -Scanned: 2016-10-20 13:28:27.989512 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/renefs87/flask-skeleton. - -LuckyLuke201/flask-skeleton -https://github.com/LuckyLuke201/flask-skeleton -Entry file: None -Scanned: 2016-10-20 13:28:35.531869 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/LuckyLuke201/flask-skeleton. - -curiousboy2/flask_blog -https://github.com/curiousboy2/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-20 13:28:37.041947 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -wqxu/flask_practice -https://github.com/wqxu/flask_practice -Entry file: flask_practice/app/__init__.py -Scanned: 2016-10-20 13:28:37.567585 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -alrifqi/flask-learning -https://github.com/alrifqi/flask-learning -Entry file: flask-learning/app.py -Scanned: 2016-10-20 13:28:50.202894 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-learning/venv/lib/python2.7/genericpath.py - -noelis/flask-intro -https://github.com/noelis/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:28:50.713224 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jrhian/Flask-intro -https://github.com/jrhian/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-20 13:28:51.225498 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -kmjch/flask-intro -https://github.com/kmjch/flask-intro -Entry file: flask-intro/routes.py -Scanned: 2016-10-20 13:28:51.744601 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -PSquared0/Flask_lab -https://github.com/PSquared0/Flask_lab -Entry file: Flask_lab/nice.py -Scanned: 2016-10-20 13:28:53.086458 -No vulnerabilities found. - - -hughmcpartlan/hello_flask -https://github.com/hughmcpartlan/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-20 13:28:53.609693 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -EddyCodeIt/flask-problem -https://github.com/EddyCodeIt/flask-problem -Entry file: flask-problem/flask_1.py -Scanned: 2016-10-20 13:28:54.912507 -No vulnerabilities found. - - -bschumacher/Flask-Navigate -https://github.com/bschumacher/Flask-Navigate -Entry file: Flask-Navigate/test.py -Scanned: 2016-10-20 13:29:05.514731 -No vulnerabilities found. - - -mapleque/flask_framework -https://github.com/mapleque/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-20 13:29:06.834165 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - -jk-aneirin/stu_flask -https://github.com/jk-aneirin/stu_flask -Entry file: None -Scanned: 2016-10-20 13:29:07.335066 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kaharonus/flask-skeleton -https://github.com/Kaharonus/flask-skeleton -Entry file: None -Scanned: 2016-10-20 13:29:07.849313 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Kaharonus/flask-skeleton. - -neilmaldy/flask_upload -https://github.com/neilmaldy/flask_upload -Entry file: flask_upload/test.py -Scanned: 2016-10-20 13:29:09.185137 -Vulnerability 1: -File: flask_upload/test.py - > User input at line 28, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask_upload/test.py - > Line 35: filename = secure_filename(file.filename) - File: flask_upload/test.py - > Line 43: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: flask_upload/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask_upload/test.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask_upload/test.py - > reaches line 41, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename='new_' + filename)) - -Vulnerability 2: -File: flask_upload/test.py - > User input at line 28, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask_upload/test.py - > Line 35: filename = secure_filename(file.filename) - File: flask_upload/test.py - > Line 43: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' - File: flask_upload/test.py - > Line 27: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask_upload/test.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask_upload/test.py - > reaches line 41, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename='new_' + filename)) - -Vulnerability 3: -File: flask_upload/quote_scrub_server.py - > User input at line 54, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask_upload/quote_scrub_server.py - > Line 61: filename = secure_filename(file.filename) - File: flask_upload/quote_scrub_server.py - > Line 65: new_filename = scrub(os.path.join(app.config['UPLOAD_FOLDER'], filename)) - File: flask_upload/quote_scrub_server.py - > Line 70: ret_MAYBE_FUNCTION_NAME = ' - - Quote Scrub -

Quote XLSX File

-
-

- -

- ' - File: flask_upload/quote_scrub_server.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask_upload/quote_scrub_server.py - > Line 59: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask_upload/quote_scrub_server.py - > reaches line 69, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=os.path.basename(new_filename))) - -Vulnerability 4: -File: flask_upload/quote_scrub_server.py - > User input at line 54, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flask_upload/quote_scrub_server.py - > Line 61: filename = secure_filename(file.filename) - File: flask_upload/quote_scrub_server.py - > Line 65: new_filename = scrub(os.path.join(app.config['UPLOAD_FOLDER'], filename)) - File: flask_upload/quote_scrub_server.py - > Line 70: ret_MAYBE_FUNCTION_NAME = ' - - Quote Scrub -

Quote XLSX File

-
-

- -

- ' - File: flask_upload/quote_scrub_server.py - > Line 53: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask_upload/quote_scrub_server.py - > Line 59: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask_upload/quote_scrub_server.py - > reaches line 69, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=os.path.basename(new_filename))) - -Vulnerability 5: -File: flask_upload/quote_scrub_server.py - > User input at line 88, trigger word ".data": - file = form.file_reference.data -Reassigned in: - File: flask_upload/quote_scrub_server.py - > Line 91: filename = secure_filename(file.filename) - File: flask_upload/quote_scrub_server.py - > Line 96: new_filename = scrub(os.path.join(app.config['UPLOAD_FOLDER'], filename)) - File: flask_upload/quote_scrub_server.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Unexpected error, please contact Neil Maldonado') - File: flask_upload/quote_scrub_server.py - > Line 104: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Unexpected error, please contact Neil Maldonado') - File: flask_upload/quote_scrub_server.py - > Line 106: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Please insure quote file is in XLSX format') - File: flask_upload/quote_scrub_server.py - > Line 108: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='') -File: flask_upload/quote_scrub_server.py - > reaches line 100, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=os.path.basename(new_filename))) - -Vulnerability 6: -File: flask_upload/quote_scrub_server.py - > User input at line 88, trigger word ".data": - file = form.file_reference.data -Reassigned in: - File: flask_upload/quote_scrub_server.py - > Line 91: filename = secure_filename(file.filename) - File: flask_upload/quote_scrub_server.py - > Line 96: new_filename = scrub(os.path.join(app.config['UPLOAD_FOLDER'], filename)) - File: flask_upload/quote_scrub_server.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Unexpected error, please contact Neil Maldonado') - File: flask_upload/quote_scrub_server.py - > Line 104: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Unexpected error, please contact Neil Maldonado') - File: flask_upload/quote_scrub_server.py - > Line 106: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='Please insure quote file is in XLSX format') - File: flask_upload/quote_scrub_server.py - > Line 108: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, error='') -File: flask_upload/quote_scrub_server.py - > reaches line 100, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=os.path.basename(new_filename))) - - - -debuggerboy/flask-appserv -https://github.com/debuggerboy/flask-appserv -Entry file: flask-appserv/app/main.py -Scanned: 2016-10-20 13:29:10.600344 -No vulnerabilities found. - - -SujoyDU/python-flask -https://github.com/SujoyDU/python-flask -Entry file: python-flask/rest/__init__.py -Scanned: 2016-10-20 13:29:11.118038 -No vulnerabilities found. -An Error occurred while scanning the repo: The ast module can not parse the file and the python 2 to 3 conversion also failed. - diff --git a/scan_results/archived_26_10_scan.pyt b/scan_results/archived_26_10_scan.pyt deleted file mode 100644 index ae82019a..00000000 --- a/scan_results/archived_26_10_scan.pyt +++ /dev/null @@ -1,43642 +0,0 @@ -maxcountryman/flask-uploads -https://github.com/maxcountryman/flask-uploads -Entry file: flask-uploads/tests.py -Scanned: 2016-10-25 14:55:15.361457 -No vulnerabilities found. - - -masonicGIT/21-Flask-Boilerplate -https://github.com/masonicGIT/21-Flask-Boilerplate -Entry file: 21-Flask-Boilerplate/app/__init__.py -Scanned: 2016-10-25 14:55:21.213012 -Vulnerability 1: -File: 21-Flask-Boilerplate/app/views/main.py - > User input at line 64, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: 21-Flask-Boilerplate/app/views/main.py - > Line 67: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: 21-Flask-Boilerplate/app/views/main.py - > reaches line 68, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 2: -File: 21-Flask-Boilerplate/app/views/main.py - > User input at line 67, trigger word ".data": - message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: 21-Flask-Boilerplate/app/views/main.py - > reaches line 68, trigger word "flash(": - flash(message, 'positive') - -Vulnerability 3: -File: 21-Flask-Boilerplate/app/views/main.py - > User input at line 64, trigger word ".data": - tx = multisig_wallet.send_bitcoin(username, form.address.data, form.amount.data, user.password) -Reassigned in: - File: 21-Flask-Boilerplate/app/views/main.py - > Line 67: message = 'You just sent ' + str(form.amount.data) + ' Satoshis to: ' + str(form.address.data) + ' - You may view your transaction at: https://btc.blockr.io/tx/info/' + str(tx) -File: 21-Flask-Boilerplate/app/views/main.py - > reaches line 72, trigger word "flash(": - flash(tx['message'], 'negative') - -Vulnerability 4: -File: 21-Flask-Boilerplate/app/views/main.py - > User input at line 78, trigger word "form(": - points = [(random.uniform(48.84341, 48.86341), random.uniform(2.3388, 2.3588)) for _ in range(random.randint(2, 9))] -File: 21-Flask-Boilerplate/app/views/main.py - > reaches line 81, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('points'points) - -Vulnerability 5: -File: 21-Flask-Boilerplate/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: 21-Flask-Boilerplate/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: 21-Flask-Boilerplate/app/views/user.py - > reaches line 41, trigger word "url_for(": - confirmUrl = url_for('userbp.confirm',token=token, _external=True) - -Vulnerability 6: -File: 21-Flask-Boilerplate/app/views/user.py - > User input at line 24, trigger word ".data": - user = models.User(name=form.name.data, surname=form.surname.data, phone=form.phone.data, email=form.email.data, confirmation=False, password=form.password.data) -Reassigned in: - File: 21-Flask-Boilerplate/app/views/user.py - > Line 39: token = ts.dumps(user.email,salt='email-confirm-key') -File: 21-Flask-Boilerplate/app/views/user.py - > reaches line 43, trigger word "render_template(": - html = render_template('email/confirm.html',confirm_url=confirmUrl) - -Vulnerability 7: -File: 21-Flask-Boilerplate/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: 21-Flask-Boilerplate/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: 21-Flask-Boilerplate/app/views/user.py - > reaches line 126, trigger word "url_for(": - resetUrl = url_for('userbp.reset',token=token, _external=True) - -Vulnerability 8: -File: 21-Flask-Boilerplate/app/views/user.py - > User input at line 118, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: 21-Flask-Boilerplate/app/views/user.py - > Line 124: token = ts.dumps(user.email,salt='password-reset-key') -File: 21-Flask-Boilerplate/app/views/user.py - > reaches line 128, trigger word "render_template(": - html = render_template('email/reset.html',reset_url=resetUrl) - -Vulnerability 9: -File: 21-Flask-Boilerplate/app/forms/user.py - > User input at line 25, trigger word ".data": - check = self.model.query.filter(self.field == field.data).first() -File: 21-Flask-Boilerplate/app/forms/user.py - > reaches line 25, trigger word "filter(": - check = self.model.query.filter(self.field == field.data).first() - - - -ChinaChou/Flask -https://github.com/ChinaChou/Flask -Entry file: Flask/application/debugs.py -Scanned: 2016-10-25 14:55:22.541094 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -extranjero/flask -https://github.com/extranjero/flask -Entry file: flask/app/__init__.py -Scanned: 2016-10-25 14:55:23.878824 -Vulnerability 1: -File: flask/app/handlers/subjects.py - > User input at line 22, trigger word "get(": - subject = Subject.query.get(id) -Reassigned in: - File: flask/app/handlers/subjects.py - > Line 23: subject.name = request.json.get('name', subject.name) -File: flask/app/handlers/subjects.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(subject.dict()) - -Vulnerability 2: -File: flask/app/handlers/students.py - > User input at line 22, trigger word "get(": - student = Student.query.get(id) -Reassigned in: - File: flask/app/handlers/students.py - > Line 23: student.name = request.json.get('name', student.name) -File: flask/app/handlers/students.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(student.dict()) - -Vulnerability 3: -File: flask/app/handlers/marks.py - > User input at line 15, trigger word "get(": - mark = Mark.query.get(id) -File: flask/app/handlers/marks.py - > reaches line 16, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(mark.dict()) - -Vulnerability 4: -File: flask/app/handlers/marks.py - > User input at line 20, trigger word "get(": - mark = Mark.query.get(id) -Reassigned in: - File: flask/app/handlers/marks.py - > Line 21: mark.student_id = request.json.get('student_id', mark.student_id) - File: flask/app/handlers/marks.py - > Line 22: mark.subject_id = request.json.get('subject_id', mark.subject_id) - File: flask/app/handlers/marks.py - > Line 23: mark.mark = request.json.get('mark', mark.mark) -File: flask/app/handlers/marks.py - > reaches line 25, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(mark.dict()) - - - -aolSvt/flask -https://github.com/aolSvt/flask -Entry file: flask/flask/xmas.py -Scanned: 2016-10-25 14:55:25.257430 -Vulnerability 1: -File: flask/flask/route.py - > User input at line 16, trigger word "form[": - santa_name = request.form['name'] -Reassigned in: - File: flask/flask/route.py - > Line 21: santa_dict = 'name''index''address''email'santa_namesanta_indexsanta_addresssanta_email -File: flask/flask/route.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(santa_dict), 200) - -Vulnerability 2: -File: flask/flask/route.py - > User input at line 17, trigger word "form[": - santa_index = request.form['index'] -Reassigned in: - File: flask/flask/route.py - > Line 21: santa_dict = 'name''index''address''email'santa_namesanta_indexsanta_addresssanta_email -File: flask/flask/route.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(santa_dict), 200) - -Vulnerability 3: -File: flask/flask/route.py - > User input at line 18, trigger word "form[": - santa_address = request.form['address'] -Reassigned in: - File: flask/flask/route.py - > Line 21: santa_dict = 'name''index''address''email'santa_namesanta_indexsanta_addresssanta_email -File: flask/flask/route.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(santa_dict), 200) - -Vulnerability 4: -File: flask/flask/route.py - > User input at line 19, trigger word "form[": - santa_email = request.form['email'] -Reassigned in: - File: flask/flask/route.py - > Line 21: santa_dict = 'name''index''address''email'santa_namesanta_indexsanta_addresssanta_email -File: flask/flask/route.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify(santa_dict), 200) - - - -ShoJinto/flask -https://github.com/ShoJinto/flask -Entry file: flask/flaskr/flaskr.py -Scanned: 2016-10-25 14:55:26.514529 -No vulnerabilities found. - - -jhn316/Flask -https://github.com/jhn316/Flask -Entry file: None -Scanned: 2016-10-25 14:55:33.690747 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bh45k4r/flask -https://github.com/bh45k4r/flask -Entry file: flask/http_echo_server/http_echo_server.py -Scanned: 2016-10-25 14:55:34.977119 -No vulnerabilities found. - - -lhw4d4/flask -https://github.com/lhw4d4/flask -Entry file: None -Scanned: 2016-10-25 14:55:44.709996 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chenyuntc/flask -https://github.com/chenyuntc/flask -Entry file: None -Scanned: 2016-10-25 14:55:45.230521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Gmingming/Flask -https://github.com/Gmingming/Flask -Entry file: None -Scanned: 2016-10-25 14:55:46.265450 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gd452/flask -https://github.com/gd452/flask -Entry file: None -Scanned: 2016-10-25 14:55:46.798446 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -llh335/flask -https://github.com/llh335/flask -Entry file: None -Scanned: 2016-10-25 14:55:47.328446 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tahmidshahriar/flask -https://github.com/tahmidshahriar/flask -Entry file: None -Scanned: 2016-10-25 14:55:47.841934 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vstorm/Flask -https://github.com/vstorm/Flask -Entry file: None -Scanned: 2016-10-25 14:55:48.385942 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Neo0/flask -https://github.com/Neo0/flask -Entry file: None -Scanned: 2016-10-25 14:55:48.919458 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Berarik/Flask -https://github.com/Berarik/Flask -Entry file: None -Scanned: 2016-10-25 14:55:49.453921 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -seeInside/Flask -https://github.com/seeInside/Flask -Entry file: None -Scanned: 2016-10-25 14:55:50.082534 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -paulmin55/flask -https://github.com/paulmin55/flask -Entry file: None -Scanned: 2016-10-25 14:55:50.594947 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TwilioDevEd/airtng-flask -https://github.com/TwilioDevEd/airtng-flask -Entry file: airtng-flask/airtng_flask/__init__.py -Scanned: 2016-10-25 14:55:55.948136 -Vulnerability 1: -File: airtng-flask/airtng_flask/views.py - > User input at line 51, trigger word ".data": - candidate_user = User.query.filter(User.email == form.email.data).first() -File: airtng-flask/airtng_flask/views.py - > reaches line 51, trigger word "filter(": - candidate_user = User.query.filter(User.email == form.email.data).first() - -Vulnerability 2: -File: airtng-flask/airtng_flask/views.py - > User input at line 131, trigger word ".data": - user = User.query.filter(User.phone_number == form.From.data).first() -File: airtng-flask/airtng_flask/views.py - > reaches line 131, trigger word "filter(": - user = User.query.filter(User.phone_number == form.From.data).first() - -Vulnerability 3: -File: airtng-flask/airtng_flask/views.py - > User input at line 131, trigger word ".data": - user = User.query.filter(User.phone_number == form.From.data).first() -File: airtng-flask/airtng_flask/views.py - > reaches line 132, trigger word "filter(": - reservation = Reservation.query.filter(Reservation.status == 'pending' and Reservation.vacation_property.host.id == user.id).first() - - - -tilda-center/flask-tutorial -https://github.com/tilda-center/flask-tutorial -Entry file: flask-tutorial/manage.py -Scanned: 2016-10-25 14:55:57.390206 -No vulnerabilities found. - - -smoqadam/PyFladesk -https://github.com/smoqadam/PyFladesk -Entry file: PyFladesk/routes.py -Scanned: 2016-10-25 14:55:58.835770 -No vulnerabilities found. - - -CarlEkerot/flask-orm -https://github.com/CarlEkerot/flask-orm -Entry file: flask-orm/webapp/__init__.py -Scanned: 2016-10-25 14:56:00.938781 -No vulnerabilities found. - - -Maru-zhang/iCCUT-Server-Flask -https://github.com/Maru-zhang/iCCUT-Server-Flask -Entry file: None -Scanned: 2016-10-25 14:56:02.716911 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jeffwidman/flask-uploads -https://github.com/jeffwidman/flask-uploads -Entry file: flask-uploads/tests.py -Scanned: 2016-10-25 14:56:04.402423 -No vulnerabilities found. - - -wdm0006/gitnoc -https://github.com/wdm0006/gitnoc -Entry file: gitnoc/gitnoc/app.py -Scanned: 2016-10-25 14:56:10.248676 -Vulnerability 1: -File: gitnoc/gitnoc/services/metrics.py - > User input at line 65, trigger word "get(": - extensions = settings.get('extensions', None) -Reassigned in: - File: gitnoc/gitnoc/services/metrics.py - > Line 71: df = repo.file_detail(extensions=extensions, ignore_dir=ignore_dir) - File: gitnoc/gitnoc/services/metrics.py - > Line 72: df = df.reset_index(level=2) - File: gitnoc/gitnoc/services/metrics.py - > Line 73: df = df.sort_values(by=['loc'], ascending=False) -File: gitnoc/gitnoc/services/metrics.py - > reaches line 76, trigger word "replace(": - out.append('file_name''loc''owner''extension''last_edit''clean_file_name'df.loc[(idx, 'file')]df.loc[(idx, 'loc')]df.loc[(idx, 'file_owner')]df.loc[(idx, 'ext')]df.loc[(idx, 'last_edit_date')].strftime('%H:%M %d-%m-%Y')df.loc[(idx, 'file')].replace('/', '-')) - -Vulnerability 2: -File: gitnoc/gitnoc/services/metrics.py - > User input at line 66, trigger word "get(": - ignore_dir = settings.get('ignore_dir', None) -Reassigned in: - File: gitnoc/gitnoc/services/metrics.py - > Line 71: df = repo.file_detail(extensions=extensions, ignore_dir=ignore_dir) - File: gitnoc/gitnoc/services/metrics.py - > Line 72: df = df.reset_index(level=2) - File: gitnoc/gitnoc/services/metrics.py - > Line 73: df = df.sort_values(by=['loc'], ascending=False) -File: gitnoc/gitnoc/services/metrics.py - > reaches line 76, trigger word "replace(": - out.append('file_name''loc''owner''extension''last_edit''clean_file_name'df.loc[(idx, 'file')]df.loc[(idx, 'loc')]df.loc[(idx, 'file_owner')]df.loc[(idx, 'ext')]df.loc[(idx, 'last_edit_date')].strftime('%H:%M %d-%m-%Y')df.loc[(idx, 'file')].replace('/', '-')) - - - -parulsingh/FlaskAppCS194 -https://github.com/parulsingh/FlaskAppCS194 -Entry file: FlaskAppCS194/yelpapp.py -Scanned: 2016-10-25 14:56:21.372166 -Vulnerability 1: -File: FlaskAppCS194/yelpapp.py - > User input at line 89, trigger word "form[": - reviews = request.form['reviews'] -Reassigned in: - File: FlaskAppCS194/yelpapp.py - > Line 90: rating = clf.predictRating(reviews) -File: FlaskAppCS194/yelpapp.py - > reaches line 95, trigger word "execute(": - db.execute('INSERT INTO predictions (lyrics, artist) values (?, ?)', [reviews, str(rating)]) - - - -BeginMan/flask-timing -https://github.com/BeginMan/flask-timing -Entry file: flask-timing/app.py -Scanned: 2016-10-25 14:56:27.593268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ibininja/upload_file_python -https://github.com/ibininja/upload_file_python -Entry file: upload_file_python/src/app_display_multiple_images.py -Scanned: 2016-10-25 14:56:28.901590 -No vulnerabilities found. - - -fraoustin/flaskserver -https://github.com/fraoustin/flaskserver -Entry file: None -Scanned: 2016-10-25 14:56:30.275553 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fraoustin/flaskserver. - -yaojf/python3 -https://github.com/yaojf/python3 -Entry file: python3/app.py -Scanned: 2016-10-25 14:56:32.390376 -Vulnerability 1: -File: python3/app.py - > User input at line 17, trigger word "form[": - username = request.form['username'] -File: python3/app.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('signin-ok.html',username=username) - -Vulnerability 2: -File: python3/app.py - > User input at line 17, trigger word "form[": - username = request.form['username'] -File: python3/app.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form.html',message='Bad username or password', username=username) - - - -pdonorio/restangulask -https://github.com/pdonorio/restangulask -Entry file: restangulask/frontend/felask/server.py -Scanned: 2016-10-25 14:56:38.036810 -Vulnerability 1: -File: restangulask/frontend/felask/forms.py - > User input at line 50, trigger word "get(": - target = get_redirect_target() -Reassigned in: - File: restangulask/frontend/felask/forms.py - > Line 49: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: restangulask/frontend/felask/forms.py - > reaches line 51, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values)) - -Vulnerability 2: -File: restangulask/frontend/felask/forms.py - > User input at line 50, trigger word "get(": - target = get_redirect_target() -Reassigned in: - File: restangulask/frontend/felask/forms.py - > Line 49: ret_MAYBE_FUNCTION_NAME = redirect(self.next.data) -File: restangulask/frontend/felask/forms.py - > reaches line 51, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(target or url_for(endpoint,values)) - - - -CodeSelfStudy/flask_mongoengine_example -https://github.com/CodeSelfStudy/flask_mongoengine_example -Entry file: flask_mongoengine_example/app.py -Scanned: 2016-10-25 14:56:39.361239 -Vulnerability 1: -File: flask_mongoengine_example/app.py - > User input at line 20, trigger word "get(": - page = Page.objects.get(id=page_id) -File: flask_mongoengine_example/app.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('page.html',page=page) - -Vulnerability 2: -File: flask_mongoengine_example/app.py - > User input at line 34, trigger word "get(": - profile = Profile.objects.get(id=profile_id) -File: flask_mongoengine_example/app.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('profiles/profile.html',profile=profile) - - - -brennv/flaskr-dataset -https://github.com/brennv/flaskr-dataset -Entry file: flaskr-dataset/flaskr.py -Scanned: 2016-10-25 14:56:41.295474 -No vulnerabilities found. - - -weex/basic-flask21 -https://github.com/weex/basic-flask21 -Entry file: basic-flask21/server.py -Scanned: 2016-10-25 14:56:42.562274 -No vulnerabilities found. - - -c0deTalk/flask-deploy -https://github.com/c0deTalk/flask-deploy -Entry file: None -Scanned: 2016-10-25 14:56:43.816258 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/c0deTalk/flask-deploy. - -jinpark/flask-fts -https://github.com/jinpark/flask-fts -Entry file: flask-fts/app.py -Scanned: 2016-10-25 14:56:46.107264 -Vulnerability 1: -File: flask-fts/app.py - > User input at line 65, trigger word "form[": - search_term = request.form['search_term'] -Reassigned in: - File: flask-fts/app.py - > Line 66: results = Document.query.search(search_term) - File: flask-fts/app.py - > Line 69: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: flask-fts/app.py - > reaches line 67, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_results.html',results=results, search_term=search_term) - -Vulnerability 2: -File: flask-fts/app.py - > User input at line 74, trigger word "form[": - search_term = request.form['search_term'] -Reassigned in: - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 79, trigger word "filter(": - results = search(db.session.query(Place).filter(func.ST_DWithin(Place.point, point, float(distance))), search_term) - -Vulnerability 3: -File: flask-fts/app.py - > User input at line 75, trigger word "form[": - distance = request.form['distance'] -Reassigned in: - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 79, trigger word "filter(": - results = search(db.session.query(Place).filter(func.ST_DWithin(Place.point, point, float(distance))), search_term) - -Vulnerability 4: -File: flask-fts/app.py - > User input at line 76, trigger word "form[": - latitude = request.form['latitude'] -Reassigned in: - File: flask-fts/app.py - > Line 78: point = WKTElement('POINT({0} {1})'.format(latitude, longitude),srid=4326) - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 79, trigger word "filter(": - results = search(db.session.query(Place).filter(func.ST_DWithin(Place.point, point, float(distance))), search_term) - -Vulnerability 5: -File: flask-fts/app.py - > User input at line 77, trigger word "form[": - longitude = request.form['longitude'] -Reassigned in: - File: flask-fts/app.py - > Line 78: point = WKTElement('POINT({0} {1})'.format(latitude, longitude),srid=4326) - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 79, trigger word "filter(": - results = search(db.session.query(Place).filter(func.ST_DWithin(Place.point, point, float(distance))), search_term) - -Vulnerability 6: -File: flask-fts/app.py - > User input at line 74, trigger word "form[": - search_term = request.form['search_term'] -Reassigned in: - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_place_results.html',results=results, search_term=search_term, distance=distance, latitude=latitude, longitude=longitude) - -Vulnerability 7: -File: flask-fts/app.py - > User input at line 75, trigger word "form[": - distance = request.form['distance'] -Reassigned in: - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_place_results.html',results=results, search_term=search_term, distance=distance, latitude=latitude, longitude=longitude) - -Vulnerability 8: -File: flask-fts/app.py - > User input at line 76, trigger word "form[": - latitude = request.form['latitude'] -Reassigned in: - File: flask-fts/app.py - > Line 78: point = WKTElement('POINT({0} {1})'.format(latitude, longitude),srid=4326) - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_place_results.html',results=results, search_term=search_term, distance=distance, latitude=latitude, longitude=longitude) - -Vulnerability 9: -File: flask-fts/app.py - > User input at line 77, trigger word "form[": - longitude = request.form['longitude'] -Reassigned in: - File: flask-fts/app.py - > Line 78: point = WKTElement('POINT({0} {1})'.format(latitude, longitude),srid=4326) - File: flask-fts/app.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('search_place.html') -File: flask-fts/app.py - > reaches line 80, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_place_results.html',results=results, search_term=search_term, distance=distance, latitude=latitude, longitude=longitude) - - - -breakbase/flask-cent -https://github.com/breakbase/flask-cent -Entry file: flask-cent/tests.py -Scanned: 2016-10-25 14:56:47.500942 -No vulnerabilities found. - - -ecerami/hello_flask -https://github.com/ecerami/hello_flask -Entry file: hello_flask/app.py -Scanned: 2016-10-25 14:56:48.764316 -No vulnerabilities found. - - -wq1308786830/flaskr -https://github.com/wq1308786830/flaskr -Entry file: None -Scanned: 2016-10-25 14:56:50.635410 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wq1308786830/flaskr. - -danparshall/flaskmilestone -https://github.com/danparshall/flaskmilestone -Entry file: flaskmilestone/app.py -Scanned: 2016-10-25 14:56:52.000179 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sabertwilight/flasky -https://github.com/sabertwilight/flasky -Entry file: flasky/flasky/app/__init__.py -Scanned: 2016-10-25 14:56:55.881811 -No vulnerabilities found. - - -jj199611/flaskr -https://github.com/jj199611/flaskr -Entry file: None -Scanned: 2016-10-25 14:56:56.424576 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jj199611/flaskr. - -goosling/flaskapp -https://github.com/goosling/flaskapp -Entry file: flaskapp/urltest.py -Scanned: 2016-10-25 14:56:57.719744 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -FredericoVieira/flaskapp -https://github.com/FredericoVieira/flaskapp -Entry file: flaskapp/app/__init__.py -Scanned: 2016-10-25 14:56:59.177336 -Vulnerability 1: -File: flaskapp/app/insertdata/views.py - > User input at line 21, trigger word ".data": - firstName = str(form.firstName.data) -File: flaskapp/app/insertdata/views.py - > reaches line 27, trigger word "execute(": - cursor.execute('INSERT INTO users (firstName, lastName, phone) VALUES ('%s', '%s', '%s')' % (firstName, lastName, phone)) - -Vulnerability 2: -File: flaskapp/app/insertdata/views.py - > User input at line 22, trigger word ".data": - lastName = str(form.lastName.data) -File: flaskapp/app/insertdata/views.py - > reaches line 27, trigger word "execute(": - cursor.execute('INSERT INTO users (firstName, lastName, phone) VALUES ('%s', '%s', '%s')' % (firstName, lastName, phone)) - -Vulnerability 3: -File: flaskapp/app/insertdata/views.py - > User input at line 23, trigger word ".data": - phone = str(form.phone.data) -File: flaskapp/app/insertdata/views.py - > reaches line 27, trigger word "execute(": - cursor.execute('INSERT INTO users (firstName, lastName, phone) VALUES ('%s', '%s', '%s')' % (firstName, lastName, phone)) - -Vulnerability 4: -File: flaskapp/app/insertdata/views.py - > User input at line 21, trigger word ".data": - firstName = str(form.firstName.data) -File: flaskapp/app/insertdata/views.py - > reaches line 30, trigger word "flash(": - flash('Dados inseridos com sucesso! First Name = "%s", Last Name = "%s", Phone = "%s"' % (firstName, lastName, phone)) - -Vulnerability 5: -File: flaskapp/app/insertdata/views.py - > User input at line 22, trigger word ".data": - lastName = str(form.lastName.data) -File: flaskapp/app/insertdata/views.py - > reaches line 30, trigger word "flash(": - flash('Dados inseridos com sucesso! First Name = "%s", Last Name = "%s", Phone = "%s"' % (firstName, lastName, phone)) - -Vulnerability 6: -File: flaskapp/app/insertdata/views.py - > User input at line 23, trigger word ".data": - phone = str(form.phone.data) -File: flaskapp/app/insertdata/views.py - > reaches line 30, trigger word "flash(": - flash('Dados inseridos com sucesso! First Name = "%s", Last Name = "%s", Phone = "%s"' % (firstName, lastName, phone)) - - - -dogom/flasky -https://github.com/dogom/flasky -Entry file: flasky/hello.py -Scanned: 2016-10-25 14:57:00.497624 -No vulnerabilities found. - - -alex-marmot/flaskr -https://github.com/alex-marmot/flaskr -Entry file: None -Scanned: 2016-10-25 14:57:01.058126 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alex-marmot/flaskr. - -kai1/flasktest -https://github.com/kai1/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 14:57:02.627573 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: None -Scanned: 2016-10-25 14:57:03.174986 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/willianribeiro/flaskr. - -lz1988/flaskweb -https://github.com/lz1988/flaskweb -Entry file: flaskweb/flaskr/flaskr.py -Scanned: 2016-10-25 14:57:09.411711 -No vulnerabilities found. - - -StuartChristie/Flasky -https://github.com/StuartChristie/Flasky -Entry file: Flasky/untitled.py -Scanned: 2016-10-25 14:57:10.701712 -No vulnerabilities found. - - -buchenglei/flaskr -https://github.com/buchenglei/flaskr -Entry file: None -Scanned: 2016-10-25 14:57:11.223012 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/buchenglei/flaskr. - -cteeeri/flaskblueprint -https://github.com/cteeeri/flaskblueprint -Entry file: flaskblueprint/app/__init__.py -Scanned: 2016-10-25 14:57:12.457312 -No vulnerabilities found. - - -KevinFuU/flasky -https://github.com/KevinFuU/flasky -Entry file: flasky/hello1.py -Scanned: 2016-10-25 14:57:14.294197 -Vulnerability 1: -File: flasky/tests/test_client.py - > User input at line 22, trigger word "get(": - response = self.client.get(url_for('main.index')) -File: flasky/tests/test_client.py - > reaches line 22, trigger word "url_for(": - response = self.client.get(url_for('main.index')) - -Vulnerability 2: -File: flasky/tests/test_client.py - > User input at line 47, trigger word "get(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 27, trigger word "url_for(": - response = self.client.post(url_for('auth.register'),data='email''username''password''password2''john@example.com''john''cat''cat') - -Vulnerability 3: -File: flasky/tests/test_client.py - > User input at line 53, trigger word "get(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 27, trigger word "url_for(": - response = self.client.post(url_for('auth.register'),data='email''username''password''password2''john@example.com''john''cat''cat') - -Vulnerability 4: -File: flasky/tests/test_client.py - > User input at line 47, trigger word "get(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 36, trigger word "url_for(": - response = self.client.post(url_for('auth.login'),data='email''password''john@example.com''cat', follow_redirects=True) - -Vulnerability 5: -File: flasky/tests/test_client.py - > User input at line 53, trigger word "get(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 36, trigger word "url_for(": - response = self.client.post(url_for('auth.login'),data='email''password''john@example.com''cat', follow_redirects=True) - -Vulnerability 6: -File: flasky/tests/test_client.py - > User input at line 47, trigger word "get(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 47, trigger word "url_for(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) - -Vulnerability 7: -File: flasky/tests/test_client.py - > User input at line 53, trigger word "get(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 47, trigger word "url_for(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) - -Vulnerability 8: -File: flasky/tests/test_client.py - > User input at line 47, trigger word "get(": - response = self.client.get(url_for('auth.confirm',token=token),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 53, trigger word "url_for(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) - -Vulnerability 9: -File: flasky/tests/test_client.py - > User input at line 53, trigger word "get(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) -File: flasky/tests/test_client.py - > reaches line 53, trigger word "url_for(": - response = self.client.get(url_for('auth.logout'),follow_redirects=True) - -Vulnerability 10: -File: flasky/tests/test_api.py - > User input at line 41, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),content_type='application/json') -File: flasky/tests/test_api.py - > reaches line 41, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),content_type='application/json') - -Vulnerability 11: -File: flasky/tests/test_api.py - > User input at line 55, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('john@example.com', 'dog')) -File: flasky/tests/test_api.py - > reaches line 55, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('john@example.com', 'dog')) - -Vulnerability 12: -File: flasky/tests/test_api.py - > User input at line 70, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) -File: flasky/tests/test_api.py - > reaches line 70, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) - -Vulnerability 13: -File: flasky/tests/test_api.py - > User input at line 76, trigger word "get(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 70, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) - -Vulnerability 14: -File: flasky/tests/test_api.py - > User input at line 80, trigger word ".data": - json_response = json.loads(response.data.decode('utf-8')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 82: token = json_response['token'] -File: flasky/tests/test_api.py - > reaches line 70, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) - -Vulnerability 15: -File: flasky/tests/test_api.py - > User input at line 85, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) -File: flasky/tests/test_api.py - > reaches line 70, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) - -Vulnerability 16: -File: flasky/tests/test_api.py - > User input at line 70, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) -File: flasky/tests/test_api.py - > reaches line 76, trigger word "url_for(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 17: -File: flasky/tests/test_api.py - > User input at line 76, trigger word "get(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 76, trigger word "url_for(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 18: -File: flasky/tests/test_api.py - > User input at line 80, trigger word ".data": - json_response = json.loads(response.data.decode('utf-8')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 82: token = json_response['token'] -File: flasky/tests/test_api.py - > reaches line 76, trigger word "url_for(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 19: -File: flasky/tests/test_api.py - > User input at line 85, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) -File: flasky/tests/test_api.py - > reaches line 76, trigger word "url_for(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 20: -File: flasky/tests/test_api.py - > User input at line 70, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('bad-token', '')) -File: flasky/tests/test_api.py - > reaches line 85, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) - -Vulnerability 21: -File: flasky/tests/test_api.py - > User input at line 76, trigger word "get(": - response = self.client.get(url_for('api.get_token'),headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 85, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) - -Vulnerability 22: -File: flasky/tests/test_api.py - > User input at line 80, trigger word ".data": - json_response = json.loads(response.data.decode('utf-8')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 82: token = json_response['token'] -File: flasky/tests/test_api.py - > reaches line 85, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) - -Vulnerability 23: -File: flasky/tests/test_api.py - > User input at line 85, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) -File: flasky/tests/test_api.py - > reaches line 85, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers(token, '')) - -Vulnerability 24: -File: flasky/tests/test_api.py - > User input at line 91, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('', '')) -File: flasky/tests/test_api.py - > reaches line 91, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('', '')) - -Vulnerability 25: -File: flasky/tests/test_api.py - > User input at line 106, trigger word "get(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 106, trigger word "url_for(": - response = self.client.get(url_for('api.get_posts'),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 26: -File: flasky/tests/test_api.py - > User input at line 133, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 121, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''')) - -Vulnerability 27: -File: flasky/tests/test_api.py - > User input at line 137, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 121, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''')) - -Vulnerability 28: -File: flasky/tests/test_api.py - > User input at line 149, trigger word "get(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 121, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''')) - -Vulnerability 29: -File: flasky/tests/test_api.py - > User input at line 159, trigger word "get(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 121, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''')) - -Vulnerability 30: -File: flasky/tests/test_api.py - > User input at line 133, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 128, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''body of the *blog* post')) - -Vulnerability 31: -File: flasky/tests/test_api.py - > User input at line 137, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 128, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''body of the *blog* post')) - -Vulnerability 32: -File: flasky/tests/test_api.py - > User input at line 149, trigger word "get(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 128, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''body of the *blog* post')) - -Vulnerability 33: -File: flasky/tests/test_api.py - > User input at line 159, trigger word "get(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 128, trigger word "url_for(": - response = self.client.post(url_for('api.new_post'),headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''body of the *blog* post')) - -Vulnerability 34: -File: flasky/tests/test_api.py - > User input at line 133, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 149, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 35: -File: flasky/tests/test_api.py - > User input at line 137, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 149, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 36: -File: flasky/tests/test_api.py - > User input at line 149, trigger word "get(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 149, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 37: -File: flasky/tests/test_api.py - > User input at line 159, trigger word "get(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 149, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 38: -File: flasky/tests/test_api.py - > User input at line 133, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 159, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 39: -File: flasky/tests/test_api.py - > User input at line 137, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 159, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 40: -File: flasky/tests/test_api.py - > User input at line 149, trigger word "get(": - response = self.client.get(url_for('api.get_user_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 159, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 41: -File: flasky/tests/test_api.py - > User input at line 159, trigger word "get(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 137: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) - File: flasky/tests/test_api.py - > Line 169: response = self.client.put(url,headers=self.get_api_headers('john@example.com', 'cat'), data=json.dumps('body''updated body')) -File: flasky/tests/test_api.py - > reaches line 159, trigger word "url_for(": - response = self.client.get(url_for('api.get_user_followed_posts',id=u.id),headers=self.get_api_headers('john@example.com', 'cat')) - -Vulnerability 42: -File: flasky/tests/test_api.py - > User input at line 191, trigger word "get(": - response = self.client.get(url_for('api.get_user',id=u1.id),headers=self.get_api_headers('susan@example.com', 'dog')) -File: flasky/tests/test_api.py - > reaches line 191, trigger word "url_for(": - response = self.client.get(url_for('api.get_user',id=u1.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 43: -File: flasky/tests/test_api.py - > User input at line 197, trigger word "get(": - response = self.client.get(url_for('api.get_user',id=u2.id),headers=self.get_api_headers('susan@example.com', 'dog')) -File: flasky/tests/test_api.py - > reaches line 191, trigger word "url_for(": - response = self.client.get(url_for('api.get_user',id=u1.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 44: -File: flasky/tests/test_api.py - > User input at line 191, trigger word "get(": - response = self.client.get(url_for('api.get_user',id=u1.id),headers=self.get_api_headers('susan@example.com', 'dog')) -File: flasky/tests/test_api.py - > reaches line 197, trigger word "url_for(": - response = self.client.get(url_for('api.get_user',id=u2.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 45: -File: flasky/tests/test_api.py - > User input at line 197, trigger word "get(": - response = self.client.get(url_for('api.get_user',id=u2.id),headers=self.get_api_headers('susan@example.com', 'dog')) -File: flasky/tests/test_api.py - > reaches line 197, trigger word "url_for(": - response = self.client.get(url_for('api.get_user',id=u2.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 46: -File: flasky/tests/test_api.py - > User input at line 227, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 221, trigger word "url_for(": - response = self.client.post(url_for('api.new_post_comment',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog'), data=json.dumps('body''Good [post](http://example.com)!')) - -Vulnerability 47: -File: flasky/tests/test_api.py - > User input at line 235, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 221, trigger word "url_for(": - response = self.client.post(url_for('api.new_post_comment',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog'), data=json.dumps('body''Good [post](http://example.com)!')) - -Vulnerability 48: -File: flasky/tests/test_api.py - > User input at line 250, trigger word "get(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 221, trigger word "url_for(": - response = self.client.post(url_for('api.new_post_comment',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog'), data=json.dumps('body''Good [post](http://example.com)!')) - -Vulnerability 49: -File: flasky/tests/test_api.py - > User input at line 259, trigger word "get(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 221, trigger word "url_for(": - response = self.client.post(url_for('api.new_post_comment',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog'), data=json.dumps('body''Good [post](http://example.com)!')) - -Vulnerability 50: -File: flasky/tests/test_api.py - > User input at line 227, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 250, trigger word "url_for(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 51: -File: flasky/tests/test_api.py - > User input at line 235, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 250, trigger word "url_for(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 52: -File: flasky/tests/test_api.py - > User input at line 250, trigger word "get(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 250, trigger word "url_for(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 53: -File: flasky/tests/test_api.py - > User input at line 259, trigger word "get(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 250, trigger word "url_for(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 54: -File: flasky/tests/test_api.py - > User input at line 227, trigger word "get(": - url = response.headers.get('Location') -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 259, trigger word "url_for(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 55: -File: flasky/tests/test_api.py - > User input at line 235, trigger word "get(": - response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 259, trigger word "url_for(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 56: -File: flasky/tests/test_api.py - > User input at line 250, trigger word "get(": - response = self.client.get(url_for('api.get_post_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 259, trigger word "url_for(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 57: -File: flasky/tests/test_api.py - > User input at line 259, trigger word "get(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) -Reassigned in: - File: flasky/tests/test_api.py - > Line 235: response = self.client.get(url,headers=self.get_api_headers('john@example.com', 'cat')) -File: flasky/tests/test_api.py - > reaches line 259, trigger word "url_for(": - response = self.client.get(url_for('api.get_comments',id=post.id),headers=self.get_api_headers('susan@example.com', 'dog')) - -Vulnerability 58: -File: flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky/app/api_1_0/posts.py - > Line 19: next = None -File: flasky/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 59: -File: flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky/app/api_1_0/posts.py - > Line 19: next = None -File: flasky/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 60: -File: flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky/app/api_1_0/posts.py - > Line 19: next = None -File: flasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 61: -File: flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 20: prev = None - File: flasky/app/api_1_0/users.py - > Line 23: next = None -File: flasky/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 62: -File: flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 20: prev = None - File: flasky/app/api_1_0/users.py - > Line 23: next = None -File: flasky/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 63: -File: flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 20: prev = None - File: flasky/app/api_1_0/users.py - > Line 23: next = None -File: flasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 64: -File: flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 42: prev = None - File: flasky/app/api_1_0/users.py - > Line 45: next = None -File: flasky/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 65: -File: flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 42: prev = None - File: flasky/app/api_1_0/users.py - > Line 45: next = None -File: flasky/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 66: -File: flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky/app/api_1_0/users.py - > Line 42: prev = None - File: flasky/app/api_1_0/users.py - > Line 45: next = None -File: flasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 67: -File: flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky/app/api_1_0/comments.py - > Line 18: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 68: -File: flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky/app/api_1_0/comments.py - > Line 18: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 69: -File: flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky/app/api_1_0/comments.py - > Line 18: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 70: -File: flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky/app/api_1_0/comments.py - > Line 46: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 71: -File: flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky/app/api_1_0/comments.py - > Line 46: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 72: -File: flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky/app/api_1_0/comments.py - > Line 46: next = None -File: flasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 73: -File: flasky/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 55: posts = pagination.items - File: flasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 74: -File: flasky/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky/app/main/views.py - > Line 45: show_followed = False - File: flasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 75: -File: flasky/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 67: posts = pagination.items -File: flasky/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 76: -File: flasky/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 134: comments = pagination.items - File: flasky/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 77: -File: flasky/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 78: -File: flasky/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 79: -File: flasky/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky/app/main/views.py - > Line 246: comments = pagination.items -File: flasky/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -chipmakk/flaskproject -https://github.com/chipmakk/flaskproject -Entry file: flaskproject/server2.py -Scanned: 2016-10-25 14:57:23.670682 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -githubfun/flaskr -https://github.com/githubfun/flaskr -Entry file: None -Scanned: 2016-10-25 14:57:28.208866 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/githubfun/flaskr. - -sachprem/flaskdemosac -https://github.com/sachprem/flaskdemosac -Entry file: flaskdemosac/app.py -Scanned: 2016-10-25 14:57:30.614654 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -joe8767/flaskr -https://github.com/joe8767/flaskr -Entry file: None -Scanned: 2016-10-25 14:57:31.146534 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/joe8767/flaskr. - -milinbhakta/flaskmaterialdesign -https://github.com/milinbhakta/flaskmaterialdesign -Entry file: flaskmaterialdesign/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-25 14:57:40.314079 -No vulnerabilities found. - - -Hellemos/flaskapp -https://github.com/Hellemos/flaskapp -Entry file: flaskapp/routes.py -Scanned: 2016-10-25 14:57:48.230451 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapp/flaskapp_env/lib/python2.7/sre_compile.py - -ssssergey/flaskengine -https://github.com/ssssergey/flaskengine -Entry file: flaskengine/app/__init__.py -Scanned: 2016-10-25 14:57:49.990002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -davidkurkov/flasktaskr -https://github.com/davidkurkov/flasktaskr -Entry file: flasktaskr/views.py -Scanned: 2016-10-25 14:57:51.398339 -No vulnerabilities found. - - -a1GoXplorer/flaskmodellingpractice -https://github.com/a1GoXplorer/flaskmodellingpractice -Entry file: flaskmodellingpractice/flaskr/flaskr.py -Scanned: 2016-10-25 14:57:58.430752 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskmodellingpractice/flaskr/venv/lib/python2.7/sre_compile.py - -stepsame/flaskq -https://github.com/stepsame/flaskq -Entry file: flaskq/app/__init__.py -Scanned: 2016-10-25 14:58:01.987540 -Vulnerability 1: -File: flaskq/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 16: pagination = user.questions.order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 19: questions = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 20: prev = None - File: flaskq/app/api_1_0/users.py - > Line 23: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_questions',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskq/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 16: pagination = user.questions.order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 19: questions = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 20: prev = None - File: flaskq/app/api_1_0/users.py - > Line 23: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_questions',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskq/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 16: pagination = user.questions.order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 19: questions = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 20: prev = None - File: flaskq/app/api_1_0/users.py - > Line 23: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('questions''prev''next''count'[question.to_json() for question in questions]prevnextpagination.total) - -Vulnerability 4: -File: flaskq/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 38: pagination = user.answers.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 41: answers = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 42: prev = None - File: flaskq/app/api_1_0/users.py - > Line 45: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_answers',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskq/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 38: pagination = user.answers.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 41: answers = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 42: prev = None - File: flaskq/app/api_1_0/users.py - > Line 45: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_user_answers',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskq/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 38: pagination = user.answers.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 41: answers = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 42: prev = None - File: flaskq/app/api_1_0/users.py - > Line 45: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('answers''prev''next''count'[answer.to_json() for answer in answers]prevnextpagination.total) - -Vulnerability 7: -File: flaskq/app/api_1_0/users.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 60: pagination = user.followed_activities.order_by(Activity.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ACTIVITIES_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 63: activities = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 64: prev = None - File: flaskq/app/api_1_0/users.py - > Line 68: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 66, trigger word "url_for(": - prev = url_for('api.get_user_followed_activities',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskq/app/api_1_0/users.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 60: pagination = user.followed_activities.order_by(Activity.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ACTIVITIES_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 63: activities = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 64: prev = None - File: flaskq/app/api_1_0/users.py - > Line 68: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 70, trigger word "url_for(": - next = url_for('api.get_user_followed_activities',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskq/app/api_1_0/users.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/users.py - > Line 60: pagination = user.followed_activities.order_by(Activity.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ACTIVITIES_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/users.py - > Line 63: activities = pagination.items - File: flaskq/app/api_1_0/users.py - > Line 64: prev = None - File: flaskq/app/api_1_0/users.py - > Line 68: next = None -File: flaskq/app/api_1_0/users.py - > reaches line 72, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('activities''prev''next''count'[activity.object.to_json() for activity in activities]prevnextpagination.total) - -Vulnerability 10: -File: flaskq/app/api_1_0/answers.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 12: pagination = Answer.query.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 15: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 16: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 19: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_answers',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskq/app/api_1_0/answers.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 12: pagination = Answer.query.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 15: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 16: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 19: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_answers',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskq/app/api_1_0/answers.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 12: pagination = Answer.query.order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 15: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 16: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 19: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('answers''prev''next''count'[answer.to_json() for answer in answers]prevnextpagination.total) - -Vulnerability 13: -File: flaskq/app/api_1_0/answers.py - > User input at line 32, trigger word "get(": - answer = Answer.query.get(id) -File: flaskq/app/api_1_0/answers.py - > reaches line 33, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(answer.to_json()) - -Vulnerability 14: -File: flaskq/app/api_1_0/answers.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 40: pagination = question.answers.order_by(Answer.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 43: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 44: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 47: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 46, trigger word "url_for(": - prev = url_for('api.get_question_answers',page=page - 1, _external=True) - -Vulnerability 15: -File: flaskq/app/api_1_0/answers.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 40: pagination = question.answers.order_by(Answer.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 43: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 44: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 47: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 49, trigger word "url_for(": - next = url_for('api.get_question_answers',page=page + 1, _external=True) - -Vulnerability 16: -File: flaskq/app/api_1_0/answers.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/answers.py - > Line 40: pagination = question.answers.order_by(Answer.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/answers.py - > Line 43: answers = pagination.items - File: flaskq/app/api_1_0/answers.py - > Line 44: prev = None - File: flaskq/app/api_1_0/answers.py - > Line 47: next = None -File: flaskq/app/api_1_0/answers.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('answers''prev''next''count'[answer.to_json() for answer in answers]prevnextpagination.total) - -Vulnerability 17: -File: flaskq/app/api_1_0/questions.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/questions.py - > Line 12: pagination = Question.query.paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/questions.py - > Line 15: questions = pagination.items - File: flaskq/app/api_1_0/questions.py - > Line 16: prev = None - File: flaskq/app/api_1_0/questions.py - > Line 19: next = None -File: flaskq/app/api_1_0/questions.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_questions',page=page - 1, _external=True) - -Vulnerability 18: -File: flaskq/app/api_1_0/questions.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/questions.py - > Line 12: pagination = Question.query.paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/questions.py - > Line 15: questions = pagination.items - File: flaskq/app/api_1_0/questions.py - > Line 16: prev = None - File: flaskq/app/api_1_0/questions.py - > Line 19: next = None -File: flaskq/app/api_1_0/questions.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_questions',page=page + 1, _external=True) - -Vulnerability 19: -File: flaskq/app/api_1_0/questions.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/questions.py - > Line 12: pagination = Question.query.paginate(page,per_page=current_app.config['FLASKQ_QUESTIONS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/questions.py - > Line 15: questions = pagination.items - File: flaskq/app/api_1_0/questions.py - > Line 16: prev = None - File: flaskq/app/api_1_0/questions.py - > Line 19: next = None -File: flaskq/app/api_1_0/questions.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('questions''prev''next''count'[question.to_json() for question in questions]prevnextpagination.total) - -Vulnerability 20: -File: flaskq/app/api_1_0/questions.py - > User input at line 32, trigger word "get(": - question = Question.query.get(id) -File: flaskq/app/api_1_0/questions.py - > reaches line 33, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(question.to_json()) - -Vulnerability 21: -File: flaskq/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 18: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 22: -File: flaskq/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 18: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 23: -File: flaskq/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 18: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 24: -File: flaskq/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 39: pagination = question.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 46: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_question_comments',page=page - 1, _external=True) - -Vulnerability 25: -File: flaskq/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 39: pagination = question.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 46: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_question_comments',page=page + 1, _external=True) - -Vulnerability 26: -File: flaskq/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 39: pagination = question.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 46: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 27: -File: flaskq/app/api_1_0/comments.py - > User input at line 60, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 61: pagination = answer.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 64: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 65: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 68: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 67, trigger word "url_for(": - prev = url_for('api.get_answer_comments',page=page - 1, _external=True) - -Vulnerability 28: -File: flaskq/app/api_1_0/comments.py - > User input at line 60, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 61: pagination = answer.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 64: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 65: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 68: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 70, trigger word "url_for(": - next = url_for('api.get_answer_comments',page=page + 1, _external=True) - -Vulnerability 29: -File: flaskq/app/api_1_0/comments.py - > User input at line 60, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/api_1_0/comments.py - > Line 61: pagination = answer.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKQ_COMMENTS_PER_PAGE'], error_out=False) - File: flaskq/app/api_1_0/comments.py - > Line 64: comments = pagination.items - File: flaskq/app/api_1_0/comments.py - > Line 65: prev = None - File: flaskq/app/api_1_0/comments.py - > Line 68: next = None -File: flaskq/app/api_1_0/comments.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 30: -File: flaskq/app/main/views.py - > User input at line 52, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/main/views.py - > Line 60: pagination = query.order_by(Activity.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKQ_ACTIVITIES_PER_PAGE'], error_out=False) - File: flaskq/app/main/views.py - > Line 63: activities = pagination.items - File: flaskq/app/main/views.py - > Line 51: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskq/app/main/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, activities=activities, show_followed=show_followed, pagination=pagination, comment_form=comment_form) - -Vulnerability 31: -File: flaskq/app/main/views.py - > User input at line 55, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskq/app/main/views.py - > Line 53: show_followed = False - File: flaskq/app/main/views.py - > Line 51: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskq/app/main/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, activities=activities, show_followed=show_followed, pagination=pagination, comment_form=comment_form) - -Vulnerability 32: -File: flaskq/app/main/views.py - > User input at line 74, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/main/views.py - > Line 75: pagination = user.answers.order_by(Answer.timestamp.desc()).paginate(page=page, per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/main/views.py - > Line 78: answers = pagination.items -File: flaskq/app/main/views.py - > reaches line 79, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, answers=answers, pagination=pagination, profile=True) - -Vulnerability 33: -File: flaskq/app/main/views.py - > User input at line 131, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/main/views.py - > Line 132: pagination = question.answers.order_by(Answer.ranking.desc()).paginate(page,per_page=current_app.config['FLASKQ_ANSWERS_PER_PAGE'], error_out=False) - File: flaskq/app/main/views.py - > Line 135: answers = pagination.items -File: flaskq/app/main/views.py - > reaches line 136, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('question.html',questions=[question], answers=answers, pagination=pagination) - -Vulnerability 34: -File: flaskq/app/main/views.py - > User input at line 248, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/main/views.py - > Line 249: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKQ_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskq/app/main/views.py - > Line 252: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskq/app/main/views.py - > Line 247: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskq/app/main/views.py - > reaches line 254, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Follwers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 35: -File: flaskq/app/main/views.py - > User input at line 266, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskq/app/main/views.py - > Line 267: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKQ_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskq/app/main/views.py - > Line 270: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskq/app/main/views.py - > Line 265: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskq/app/main/views.py - > reaches line 272, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Follwed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 36: -File: flaskq/app/main/views.py - > User input at line 339, trigger word "get(": - q = request.args.get('q') -File: flaskq/app/main/views.py - > reaches line 340, trigger word "filter(": - questions = Question.query.filter(Question.body.like('%' + q + '%')).all() - -Vulnerability 37: -File: flaskq/app/main/views.py - > User input at line 339, trigger word "get(": - q = request.args.get('q') -File: flaskq/app/main/views.py - > reaches line 341, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('results.html',questions=questions, q=q) - - - -rschmidtz/flaskbook -https://github.com/rschmidtz/flaskbook -Entry file: flaskbook/book/__init__.py -Scanned: 2016-10-25 14:58:04.887903 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -vincent-fei/flaskr -https://github.com/vincent-fei/flaskr -Entry file: None -Scanned: 2016-10-25 14:58:05.451470 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vincent-fei/flaskr. - -milinbhakta/flaskjinja -https://github.com/milinbhakta/flaskjinja -Entry file: flaskjinja/hello.py -Scanned: 2016-10-25 14:58:15.328086 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -chouisbo/flaskdemo -https://github.com/chouisbo/flaskdemo -Entry file: flaskdemo/app/app.py -Scanned: 2016-10-25 14:58:17.258596 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -saucecode/flaskcat -https://github.com/saucecode/flaskcat -Entry file: flaskcat/flaskcat.py -Scanned: 2016-10-25 14:58:18.549245 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: flasktaskr/project/__init__.py -Scanned: 2016-10-25 14:58:25.133556 -No vulnerabilities found. - - -mcruger/flaskr -https://github.com/mcruger/flaskr -Entry file: None -Scanned: 2016-10-25 14:58:25.644123 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mcruger/flaskr. - -zerodaemon/flaskr -https://github.com/zerodaemon/flaskr -Entry file: None -Scanned: 2016-10-25 14:58:26.153462 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zerodaemon/flaskr. - -jalp/flaskscaffolding -https://github.com/jalp/flaskscaffolding -Entry file: None -Scanned: 2016-10-25 14:58:27.405492 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jalp/flaskscaffolding. - -vbidin/flasktest -https://github.com/vbidin/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-25 14:58:33.992939 -Vulnerability 1: -File: flasktest/app/auth/controllers.py - > User input at line 19, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flasktest/app/auth/controllers.py - > Line 21: session['user_id'] = user.id -File: flasktest/app/auth/controllers.py - > reaches line 22, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -xuxiaoxing/flaskweb -https://github.com/xuxiaoxing/flaskweb -Entry file: flaskweb/app.py -Scanned: 2016-10-25 14:58:35.316239 -No vulnerabilities found. - - -ashishkx/Flaskr -https://github.com/ashishkx/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 14:58:36.581360 -No vulnerabilities found. - - -jward1/flasktaskr -https://github.com/jward1/flasktaskr -Entry file: flasktaskr/flasktaskr_project/project/__init__.py -Scanned: 2016-10-25 14:58:38.106621 -No vulnerabilities found. - - -mediocrecheng/flaskr -https://github.com/mediocrecheng/flaskr -Entry file: None -Scanned: 2016-10-25 14:58:38.619317 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mediocrecheng/flaskr. - -huiyaoren/Flasky -https://github.com/huiyaoren/Flasky -Entry file: Flasky/flasky.py -Scanned: 2016-10-25 14:58:46.865417 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -brucepei/flasky -https://github.com/brucepei/flasky -Entry file: flasky/TBD.py -Scanned: 2016-10-25 14:58:51.605520 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ihoegen/Flask-Login-App-Tutorial -https://github.com/ihoegen/Flask-Login-App-Tutorial -Entry file: Flask-Login-App-Tutorial/__init__.py -Scanned: 2016-10-25 14:58:53.377568 -No vulnerabilities found. - - -singingwolfboy/flask-dance-slack -https://github.com/singingwolfboy/flask-dance-slack -Entry file: flask-dance-slack/slack.py -Scanned: 2016-10-25 14:58:54.711884 -No vulnerabilities found. - - -schoolofcode-me/web_blog -https://github.com/schoolofcode-me/web_blog -Entry file: web_blog/src/app.py -Scanned: 2016-10-25 14:58:56.093223 -No vulnerabilities found. - - -ciarancourtney/flaskApp -https://github.com/ciarancourtney/flaskApp -Entry file: flaskApp/flaskApp/flaskApp/app.py -Scanned: 2016-10-25 14:59:06.343598 -Vulnerability 1: -File: flaskApp/flaskApp/flaskApp/public/views.py - > User input at line 30, trigger word "get(": - redirect_url = request.args.get('next') or url_for('user.members') -Reassigned in: - File: flaskApp/flaskApp/flaskApp/public/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('public/home.html',form=form) -File: flaskApp/flaskApp/flaskApp/public/views.py - > reaches line 30, trigger word "url_for(": - redirect_url = request.args.get('next') or url_for('user.members') - -Vulnerability 2: -File: flaskApp/flaskApp/flaskApp/public/views.py - > User input at line 30, trigger word "get(": - redirect_url = request.args.get('next') or url_for('user.members') -Reassigned in: - File: flaskApp/flaskApp/flaskApp/public/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('public/home.html',form=form) -File: flaskApp/flaskApp/flaskApp/public/views.py - > reaches line 31, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(redirect_url) - - - -SunnyYun/flaskBlog -https://github.com/SunnyYun/flaskBlog -Entry file: flaskBlog/src/blog.py -Scanned: 2016-10-25 14:59:07.662769 -No vulnerabilities found. - - -Schwusch/FlaskApp -https://github.com/Schwusch/FlaskApp -Entry file: FlaskApp/__init__.py -Scanned: 2016-10-25 14:59:14.631096 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -JenniferSpry/FlaskVersuch -https://github.com/JenniferSpry/FlaskVersuch -Entry file: FlaskVersuch/hello.py -Scanned: 2016-10-25 14:59:15.936535 -No vulnerabilities found. - - -arpm/FlaskTaskr -https://github.com/arpm/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 14:59:17.276173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arpm/FlaskTaskr. - -ottercoder/FlaskTest -https://github.com/ottercoder/FlaskTest -Entry file: FlaskTest/FlaskWebApp/FlaskWebApp/FlaskWebApp/__init__.py -Scanned: 2016-10-25 14:59:25.128446 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -amyguobunny/FlaskHeroku -https://github.com/amyguobunny/FlaskHeroku -Entry file: FlaskHeroku/app5.py -Scanned: 2016-10-25 14:59:26.469946 -No vulnerabilities found. - - -mwang87/FlaskTemplate -https://github.com/mwang87/FlaskTemplate -Entry file: FlaskTemplate/webserver.py -Scanned: 2016-10-25 14:59:27.705664 -No vulnerabilities found. - - -iKalin/flask1 -https://github.com/iKalin/flask1 -Entry file: flask1/routes.py -Scanned: 2016-10-25 14:59:35.257730 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -graphql-python/flask-graphql -https://github.com/graphql-python/flask-graphql -Entry file: flask-graphql/tests/app.py -Scanned: 2016-10-25 14:59:39.641792 -Vulnerability 1: -File: flask-graphql/tests/test_graphiqlview.py - > User input at line 13, trigger word "get(": - response = client.get(url_for('graphql'),headers='Accept''text/html') -File: flask-graphql/tests/test_graphiqlview.py - > reaches line 13, trigger word "url_for(": - response = client.get(url_for('graphql'),headers='Accept''text/html') - - - -hhstore/flask-annotated -https://github.com/hhstore/flask-annotated -Entry file: flask-annotated/flask-0.5/flask/module.py -Scanned: 2016-10-25 14:59:42.354503 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhiliang729/flask -https://github.com/zhiliang729/flask -Entry file: None -Scanned: 2016-10-25 14:59:43.359806 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -suzf/Flask -https://github.com/suzf/Flask -Entry file: None -Scanned: 2016-10-25 14:59:43.876495 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -charanjp/flask -https://github.com/charanjp/flask -Entry file: None -Scanned: 2016-10-25 14:59:44.446550 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yasskh/flask -https://github.com/yasskh/flask -Entry file: None -Scanned: 2016-10-25 14:59:44.970004 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -goodyvn/flask -https://github.com/goodyvn/flask -Entry file: None -Scanned: 2016-10-25 14:59:45.472579 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -prakxys/flask -https://github.com/prakxys/flask -Entry file: None -Scanned: 2016-10-25 14:59:46.026988 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: None -Scanned: 2016-10-25 14:59:46.621175 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -buntyke/Flask -https://github.com/buntyke/Flask -Entry file: None -Scanned: 2016-10-25 14:59:47.163521 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -poxstone/flask -https://github.com/poxstone/flask -Entry file: None -Scanned: 2016-10-25 14:59:47.671865 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -FlaskTutorial/Flask -https://github.com/FlaskTutorial/Flask -Entry file: None -Scanned: 2016-10-25 14:59:48.212145 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -OnlySHI/flask -https://github.com/OnlySHI/flask -Entry file: None -Scanned: 2016-10-25 14:59:48.710578 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -iFe1er/flask -https://github.com/iFe1er/flask -Entry file: None -Scanned: 2016-10-25 14:59:49.245717 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stevebannon/flask -https://github.com/stevebannon/flask -Entry file: None -Scanned: 2016-10-25 14:59:49.750336 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -b-e/flask -https://github.com/b-e/flask -Entry file: None -Scanned: 2016-10-25 14:59:52.247751 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sebkouba/dynamic-flask-form -https://github.com/sebkouba/dynamic-flask-form -Entry file: dynamic-flask-form/multimodel.py -Scanned: 2016-10-25 14:59:53.468216 -No vulnerabilities found. - - -psuong/FlaskWorkshop -https://github.com/psuong/FlaskWorkshop -Entry file: FlaskWorkshop/output-string/app.py -Scanned: 2016-10-25 14:59:55.905495 -No vulnerabilities found. - - -jvuori/flask-uwsgi-nginx-haproxy-docker -https://github.com/jvuori/flask-uwsgi-nginx-haproxy-docker -Entry file: flask-uwsgi-nginx-haproxy-docker/web/app.py -Scanned: 2016-10-25 14:59:57.211760 -No vulnerabilities found. - - -BLKStone/flask_image_search -https://github.com/BLKStone/flask_image_search -Entry file: flask_image_search/app/app.py -Scanned: 2016-10-25 15:00:14.133536 -No vulnerabilities found. - - -yj0914/flask- -https://github.com/yj0914/flask- -Entry file: flask-/num1.py -Scanned: 2016-10-25 15:00:16.483889 -No vulnerabilities found. - - -Bleezworld/flask_skeleton -https://github.com/Bleezworld/flask_skeleton -Entry file: flask_skeleton/serveur/__init__.py -Scanned: 2016-10-25 15:00:20.280691 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -akupara/flask_inspector -https://github.com/akupara/flask_inspector -Entry file: flask_inspector/example/app.py -Scanned: 2016-10-25 15:00:22.748604 -No vulnerabilities found. - - -jarogers095/flask-hello-world -https://github.com/jarogers095/flask-hello-world -Entry file: flask-hello-world/app.py -Scanned: 2016-10-25 15:00:33.993678 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-hello-world/env/lib/python3.4/operator.py - -alex-paterson/Barebones-Flask-and-Caffe-Classifier -https://github.com/alex-paterson/Barebones-Flask-and-Caffe-Classifier -Entry file: Barebones-Flask-and-Caffe-Classifier/app.py -Scanned: 2016-10-25 15:00:39.077357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-25 15:00:40.439133 -No vulnerabilities found. - - -TwilioDevEd/lead-alerts-flask -https://github.com/TwilioDevEd/lead-alerts-flask -Entry file: None -Scanned: 2016-10-25 15:00:45.327763 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TwilioDevEd/lead-alerts-flask. - -soasme/flask-personal-access-token -https://github.com/soasme/flask-personal-access-token -Entry file: flask-personal-access-token/example.py -Scanned: 2016-10-25 15:00:49.474830 -Vulnerability 1: -File: flask-personal-access-token/flask_personal_access_token/admin.py - > User input at line 18, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_API_PREFIX')current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_PREFIX')current_app.config.get('DEBUG') -File: flask-personal-access-token/flask_personal_access_token/admin.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/personal_access_token/index.html',render_data) - - - -soasme/flask-perm -https://github.com/soasme/flask-perm -Entry file: flask-perm/example.py -Scanned: 2016-10-25 15:00:54.299054 -Vulnerability 1: -File: flask-perm/tests/test_blueprint.py - > User input at line 68, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions')) -File: flask-perm/tests/test_blueprint.py - > reaches line 68, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions')) - -Vulnerability 2: -File: flask-perm/tests/test_blueprint.py - > User input at line 73, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') -File: flask-perm/tests/test_blueprint.py - > reaches line 73, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') - -Vulnerability 3: -File: flask-perm/tests/test_blueprint.py - > User input at line 80, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 80, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) - -Vulnerability 4: -File: flask-perm/tests/test_blueprint.py - > User input at line 87, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 87, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 5: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 114, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_permission',permission_id=permission['id'])) - -Vulnerability 6: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 121, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 7: -File: flask-perm/tests/test_blueprint.py - > User input at line 172, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 171: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 173, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_permission',user_permission_id=id)) - -Vulnerability 8: -File: flask-perm/tests/test_blueprint.py - > User input at line 188, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 187: resp = add_user_group_permission(client, user_group['id'], permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 189, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_group_permission',user_group_permission_id=id)) - -Vulnerability 9: -File: flask-perm/tests/test_blueprint.py - > User input at line 199, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 198: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 199, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') - -Vulnerability 10: -File: flask-perm/tests/test_blueprint.py - > User input at line 210, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 209: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 210, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 11: -File: flask-perm/tests/test_blueprint.py - > User input at line 221, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 220: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 221, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') - -Vulnerability 12: -File: flask-perm/tests/test_blueprint.py - > User input at line 232, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 231: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 232, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 13: -File: flask-perm/tests/test_blueprint.py - > User input at line 245, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) -File: flask-perm/tests/test_blueprint.py - > reaches line 245, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) - -Vulnerability 14: -File: flask-perm/tests/test_blueprint.py - > User input at line 280, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 279: resp = add_user_group_member(client, 1, user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 281, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_user_from_user_group',user_group_member_id=id)) - -Vulnerability 15: -File: flask-perm/tests/test_blueprint.py - > User input at line 291, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 291, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) - -Vulnerability 16: -File: flask-perm/tests/test_blueprint.py - > User input at line 304, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_users')) -File: flask-perm/tests/test_blueprint.py - > reaches line 304, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_users')) - -Vulnerability 17: -File: flask-perm/tests/test_blueprint.py - > User input at line 309, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) -File: flask-perm/tests/test_blueprint.py - > reaches line 309, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) - -Vulnerability 18: -File: flask-perm/flask_perm/admin.py - > User input at line 12, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERM_ADMIN_PREFIX') + '/api'current_app.config.get('PERM_ADMIN_PREFIX')current_app.config.get('DEBUG') -Reassigned in: - File: flask-perm/flask_perm/admin.py - > Line 10: ret_MAYBE_FUNCTION_NAME = redirect(url_for('perm-admin.login')) -File: flask-perm/flask_perm/admin.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/perm-admin/index.html',render_data) - - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-25 15:00:55.929335 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: None -Scanned: 2016-10-25 15:00:56.471432 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/willianribeiro/flaskr. - -expersso/flaskr -https://github.com/expersso/flaskr -Entry file: None -Scanned: 2016-10-25 15:00:56.990482 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/expersso/flaskr. - -tehasdf/flaskexample -https://github.com/tehasdf/flaskexample -Entry file: flaskexample/flaskexample/app.py -Scanned: 2016-10-25 15:00:58.398896 -No vulnerabilities found. - - -sanghyunjooPurdue/flaskr -https://github.com/sanghyunjooPurdue/flaskr -Entry file: None -Scanned: 2016-10-25 15:00:58.946164 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanghyunjooPurdue/flaskr. - -becsully/flasktest -https://github.com/becsully/flasktest -Entry file: flasktest/mysite/__init__.py -Scanned: 2016-10-25 15:01:10.672556 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Duncodes/flasky -https://github.com/Duncodes/flasky -Entry file: flasky/flaskapp.py -Scanned: 2016-10-25 15:01:12.538418 -Vulnerability 1: -File: flasky/flaskapp.py - > User input at line 97, trigger word ".data": - question = form.question.data -Reassigned in: - File: flasky/flaskapp.py - > Line 99: kamau = Questions(id, title, question, answer) - File: flasky/flaskapp.py - > Line 93: ret_MAYBE_FUNCTION_NAME = render_template('createquestion.html',form=form) -File: flasky/flaskapp.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('createdquestion.html',question=question) - - - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-25 15:01:14.146909 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -fengyc/flasky -https://github.com/fengyc/flasky -Entry file: flasky/flasky/__init__.py -Scanned: 2016-10-25 15:01:16.427808 -Vulnerability 1: -File: flasky/flasky/main/views.py - > User input at line 15, trigger word "get(": - user_agent = request.headers.get('User-Agent') -Reassigned in: - File: flasky/flasky/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky/flasky/main/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user_agent=user_agent, current_time=datetime.datetime.utcnow(), form=form, name=session.get('name'), known=session.get('known', False)) - - - -sshimp/flasktaskr -https://github.com/sshimp/flasktaskr -Entry file: flasktaskr/views.py -Scanned: 2016-10-25 15:01:18.272609 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -solutionspecialist/flaskr -https://github.com/solutionspecialist/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:18.810093 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/solutionspecialist/flaskr. - -XingxinLi/flaskr -https://github.com/XingxinLi/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:19.343448 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/XingxinLi/flaskr. - -rishipuri/flasktodo -https://github.com/rishipuri/flasktodo -Entry file: flasktodo/flasktodo.py -Scanned: 2016-10-25 15:01:20.644102 -No vulnerabilities found. - - -shinycoo/flaskmvcsample -https://github.com/shinycoo/flaskmvcsample -Entry file: flaskmvcsample/app.py -Scanned: 2016-10-25 15:01:21.933672 -No vulnerabilities found. - - -Hyvjan/flasktaskr -https://github.com/Hyvjan/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:29.823044 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alexwilkerson/flasktaskr -https://github.com/alexwilkerson/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:30.355286 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zachary-russell/Flaskr -https://github.com/zachary-russell/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 15:01:31.680424 -No vulnerabilities found. - - -sharma-abhi/flaskr -https://github.com/sharma-abhi/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:32.207089 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sharma-abhi/flaskr. - -kwikiel/flaskr -https://github.com/kwikiel/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:32.731716 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kwikiel/flaskr. - -storress/Flaskserver -https://github.com/storress/Flaskserver -Entry file: Flaskserver/main.py -Scanned: 2016-10-25 15:01:34.031296 -No vulnerabilities found. - - -dadasoz-cuelogic/flaskapp -https://github.com/dadasoz-cuelogic/flaskapp -Entry file: None -Scanned: 2016-10-25 15:01:35.406645 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dadasoz-cuelogic/flaskapp. - -nickaustinlee/flasktaskr -https://github.com/nickaustinlee/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:35.940071 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SFurnace/flaskr -https://github.com/SFurnace/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:36.480890 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SFurnace/flaskr. - -diegogslomp/flaskr -https://github.com/diegogslomp/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:36.997678 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/diegogslomp/flaskr. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:37.501945 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -apeete/flasktaskr -https://github.com/apeete/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:38.036602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:40.548440 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sindhus/flaskr. - -mg6/flaskr -https://github.com/mg6/flaskr -Entry file: None -Scanned: 2016-10-25 15:01:41.068460 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mg6/flaskr. - -sourHobbes/flaskdemo -https://github.com/sourHobbes/flaskdemo -Entry file: flaskdemo/main.py -Scanned: 2016-10-25 15:01:54.217040 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:54.786796 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:55.308322 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xavinso/flasktaskr -https://github.com/xavinso/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:01:56.832366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CharlieWinters/flaskapi -https://github.com/CharlieWinters/flaskapi -Entry file: flaskapi/aydaapi4.py -Scanned: 2016-10-25 15:02:05.766967 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapi/flaskenv/lib/python2.7/sre_compile.py - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: flasky/venv/Lib/site-packages/flask_sqlalchemy/__init__.py -Scanned: 2016-10-25 15:02:14.452846 -No vulnerabilities found. - - -slippers/flasksec -https://github.com/slippers/flasksec -Entry file: flasksec/main/__init__.py -Scanned: 2016-10-25 15:02:15.854989 -No vulnerabilities found. - - -metakermit/resin-home-automator -https://github.com/metakermit/resin-home-automator -Entry file: resin-home-automator/src/main.py -Scanned: 2016-10-25 15:02:18.503433 -No vulnerabilities found. - - -AxoSal/GAE-Flask-React-skeleton -https://github.com/AxoSal/GAE-Flask-React-skeleton -Entry file: GAE-Flask-React-skeleton/main.py -Scanned: 2016-10-25 15:02:22.963866 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -rui7157/Flask-NvRay-Blog -https://github.com/rui7157/Flask-NvRay-Blog -Entry file: Flask-NvRay-Blog/app/__init__.py -Scanned: 2016-10-25 15:02:30.859244 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Ineeza/FlaskAppBuilder -https://github.com/Ineeza/FlaskAppBuilder -Entry file: FlaskAppBuilder/src/classes/__init__.py -Scanned: 2016-10-25 15:02:32.307551 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -arose13/HerokuCondaScipyFlaskApp -https://github.com/arose13/HerokuCondaScipyFlaskApp -Entry file: HerokuCondaScipyFlaskApp/Web/app.py -Scanned: 2016-10-25 15:02:33.570419 -No vulnerabilities found. - - -junniepat/FlaskApp -https://github.com/junniepat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-25 15:02:34.837023 -No vulnerabilities found. - - -YoungGer/FlaskApps -https://github.com/YoungGer/FlaskApps -Entry file: FlaskApps/helloWorld/hello.py -Scanned: 2016-10-25 15:02:37.024130 -No vulnerabilities found. - - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 15:02:37.535642 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jrballot/FlaskTaskr. - -AnshuOnGit/FlaskServices -https://github.com/AnshuOnGit/FlaskServices -Entry file: FlaskServices/read_file.py -Scanned: 2016-10-25 15:02:44.163462 -Vulnerability 1: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 3: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 4: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -ftanevski4/FlaskPycharm -https://github.com/ftanevski4/FlaskPycharm -Entry file: FlaskPycharm/FlaskPycharm.py -Scanned: 2016-10-25 15:02:45.482755 -No vulnerabilities found. - - -guiti1/FlaskAp -https://github.com/guiti1/FlaskAp -Entry file: FlaskAp/FlaskApp/__init__.py -Scanned: 2016-10-25 15:02:52.444175 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskAp/FlaskApp/venv/lib/python2.7/sre_compile.py - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-25 15:03:02.744268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zerodaemon/flask1 -https://github.com/zerodaemon/flask1 -Entry file: flask1/flaskr.py -Scanned: 2016-10-25 15:03:04.084414 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -DamithaPerera/FlaskApp -https://github.com/DamithaPerera/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-25 15:03:05.386139 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dreammis/Flask02 -https://github.com/dreammis/Flask02 -Entry file: Flask02/app/__init__.py -Scanned: 2016-10-25 15:03:06.665386 -No vulnerabilities found. - - -JoshLandry/FlaskBlog -https://github.com/JoshLandry/FlaskBlog -Entry file: FlaskBlog/Flask_Blog/__init__.py -Scanned: 2016-10-25 15:03:10.685240 -Vulnerability 1: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 187, trigger word ".data": - title = form.title.data -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 190: newEntry = BlogEntry(user=current_user, title=title, entry=entry, rating=rating, artist=artist, tags=tags) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 193, trigger word "flash(": - flash('Stored entry: '{}''.format(title)) - -Vulnerability 2: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 224, trigger word "flash(": - flash('Logged in successfully as {}.'.format(user.username)) - -Vulnerability 3: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 225, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=user.username)) - -Vulnerability 4: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 225, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=user.username)) - -Vulnerability 5: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 238, trigger word ".data": - user = User(email=form.email.data, username=form.username.data, password=form.password.data) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 243, trigger word "flash(": - flash('Welcome, {}! Please login.'.format(user.username)) - - - -Bayaz/FlaskBlog -https://github.com/Bayaz/FlaskBlog -Entry file: FlaskBlog/blog.py -Scanned: 2016-10-25 15:03:11.984607 -No vulnerabilities found. - - -apeete/flaskBlog -https://github.com/apeete/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-25 15:03:19.060499 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/sre_compile.py - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/flaskr.py -Scanned: 2016-10-25 15:03:20.354814 -No vulnerabilities found. - - -colindjk/flaskTest -https://github.com/colindjk/flaskTest -Entry file: flaskTest/app.py -Scanned: 2016-10-25 15:03:21.826485 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yukoga/flasksample1 -https://github.com/yukoga/flasksample1 -Entry file: flasksample1/hello.py -Scanned: 2016-10-25 15:03:23.096972 -No vulnerabilities found. - - -deyoppe/FlaskFire -https://github.com/deyoppe/FlaskFire -Entry file: FlaskFire/core/system/app.py -Scanned: 2016-10-25 15:03:24.448058 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-25 15:03:25.833325 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Arsh23/random-crossword-generater -https://github.com/Arsh23/random-crossword-generater -Entry file: random-crossword-generater/app.py -Scanned: 2016-10-25 15:03:29.583995 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-25 15:03:38.004615 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/sre_compile.py - -allianRoman/flask-intro -https://github.com/allianRoman/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 15:03:39.810410 -No vulnerabilities found. - - -hunt3ri/temp-flask -https://github.com/hunt3ri/temp-flask -Entry file: temp-flask/app/__init__.py -Scanned: 2016-10-25 15:03:41.299112 -No vulnerabilities found. - - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: flask-blog/blog.py -Scanned: 2016-10-25 15:03:42.596054 -No vulnerabilities found. - - -hnb2/flask-customers -https://github.com/hnb2/flask-customers -Entry file: flask-customers/customers/__init__.py -Scanned: 2016-10-25 15:03:44.051128 -Vulnerability 1: -File: flask-customers/customers/back/view.py - > User input at line 71, trigger word ".data": - customer = Customer(email=form.email.data, password=AdminCustomer._generate_password()) -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 69: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(customer=customer.json) - -Vulnerability 2: -File: flask-customers/customers/back/view.py - > User input at line 147, trigger word ".data": - page = form.page.data -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 151: start = page * CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 152: stop = start + CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 154: raw_customers = CustomerService.get_customers(start=start, stop=stop) - File: flask-customers/customers/back/view.py - > Line 145: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 159, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(current_page=page, total_pages=int(total_pages), customers=[customer.json for customer in raw_customers]) - -Vulnerability 3: -File: flask-customers/customers/front/view.py - > User input at line 32, trigger word ".data": - customer = Customer(email=form.email.data, password=form.password.data) -Reassigned in: - File: flask-customers/customers/front/view.py - > Line 30: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/front/view.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(id=customer.id) - - - -raindrop4steven/tornadoFlask -https://github.com/raindrop4steven/tornadoFlask -Entry file: tornadoFlask/hello.py -Scanned: 2016-10-25 15:03:45.351303 -No vulnerabilities found. - - -samwuu/flask_demo -https://github.com/samwuu/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-25 15:03:46.805619 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Jiezhi/HelloFlask -https://github.com/Jiezhi/HelloFlask -Entry file: HelloFlask/my_app/__init__.py -Scanned: 2016-10-25 15:03:48.338960 -Vulnerability 1: -File: HelloFlask/my_app/product/views.py - > User input at line 16, trigger word "get(": - product = PRODUCTS.get(key) -File: HelloFlask/my_app/product/views.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('product.html',product=product) - - - -tiangolo/uwsgi-nginx-flask-docker -https://github.com/tiangolo/uwsgi-nginx-flask-docker -Entry file: uwsgi-nginx-flask-docker/example-flask-index-upload/app/main.py -Scanned: 2016-10-25 15:03:51.575502 -No vulnerabilities found. - - -MoodyLyrics/flask -https://github.com/MoodyLyrics/flask -Entry file: None -Scanned: 2016-10-25 15:03:52.604289 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -unikatsieben/flask -https://github.com/unikatsieben/flask -Entry file: None -Scanned: 2016-10-25 15:03:53.129109 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mei-Lin-Chen/Flask -https://github.com/Mei-Lin-Chen/Flask -Entry file: None -Scanned: 2016-10-25 15:03:53.642609 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rakeshhegishte/Flask -https://github.com/rakeshhegishte/Flask -Entry file: None -Scanned: 2016-10-25 15:03:54.178315 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: None -Scanned: 2016-10-25 15:03:54.726452 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -damionlowers/flask -https://github.com/damionlowers/flask -Entry file: None -Scanned: 2016-10-25 15:03:55.261052 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bobdorff/flask -https://github.com/bobdorff/flask -Entry file: None -Scanned: 2016-10-25 15:04:03.781978 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chrisvasey/flask -https://github.com/chrisvasey/flask -Entry file: None -Scanned: 2016-10-25 15:04:05.312989 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wildjan/Flask -https://github.com/wildjan/Flask -Entry file: None -Scanned: 2016-10-25 15:04:06.931903 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -smltc/Flask -https://github.com/smltc/Flask -Entry file: None -Scanned: 2016-10-25 15:04:07.458563 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: None -Scanned: 2016-10-25 15:04:11.975008 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -embasa/FLASK -https://github.com/embasa/FLASK -Entry file: FLASK/app.py -Scanned: 2016-10-25 15:04:14.307028 -No vulnerabilities found. - - -ccapudev/flask -https://github.com/ccapudev/flask -Entry file: None -Scanned: 2016-10-25 15:04:21.334490 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hezx/flask -https://github.com/hezx/flask -Entry file: None -Scanned: 2016-10-25 15:04:22.887263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RayneHwang/Flask -https://github.com/RayneHwang/Flask -Entry file: None -Scanned: 2016-10-25 15:04:24.414269 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kakshi3242/Flask -https://github.com/kakshi3242/Flask -Entry file: None -Scanned: 2016-10-25 15:04:25.928049 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Abirdcfly/flask-blog -https://github.com/Abirdcfly/flask-blog -Entry file: flask-blog/app/__init__.py -Scanned: 2016-10-25 15:04:38.039321 -Vulnerability 1: -File: flask-blog/app/main/views.py - > User input at line 52, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 53: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['AWOTER_DOC_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 56: posts = pagination.items -File: flask-blog/app/main/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, title=title, posts=posts, pagination=pagination, detail_show=detail_show) - -Vulnerability 2: -File: flask-blog/app/main/views.py - > User input at line 128, trigger word "get(": - show_follwed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 126: show_follwed = False -File: flask-blog/app/main/views.py - > reaches line 138, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('doc.html',title=title, posts=posts, pagination=pagination, detail_show=detail_show, show_follwed=show_follwed) - -Vulnerability 3: -File: flask-blog/app/main/views.py - > User input at line 133, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 134: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['AWOTER_DOC_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 137: posts = pagination.items -File: flask-blog/app/main/views.py - > reaches line 138, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('doc.html',title=title, posts=posts, pagination=pagination, detail_show=detail_show, show_follwed=show_follwed) - -Vulnerability 4: -File: flask-blog/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 173: page = post.comments.count() - 1 / current_app.config['AWOTER_COMMENTS_PER_PAGE'] + 1 - File: flask-blog/app/main/views.py - > Line 175: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['AWOTER_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 178: comments = pagination.items - File: flask-blog/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.doc_detail',id=post.id, page=-1)) -File: flask-blog/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('doc.html',title=title, posts=[post], detail_show=detail_show, form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask-blog/app/main/views.py - > User input at line 241, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 242: pagination = user.followers.paginate(page,per_page=current_app.config['AWOTER_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 245: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-blog/app/main/views.py - > Line 240: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-blog/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注者列表', endpoint='main.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-blog/app/main/views.py - > User input at line 258, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 259: pagination = user.followed.paginate(page,per_page=current_app.config['AWOTER_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 262: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-blog/app/main/views.py - > Line 257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-blog/app/main/views.py - > reaches line 264, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='他关注的人', endpoint='main.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask-blog/app/main/views.py - > User input at line 290, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/app/main/views.py - > Line 291: pagination = Comment.query.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['AWOTER_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blog/app/main/views.py - > Line 294: comments = pagination.items -File: flask-blog/app/main/views.py - > reaches line 295, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, title=title, page=page, pagination=pagination) - - - -RoseOu/flasky -https://github.com/RoseOu/flasky -Entry file: None -Scanned: 2016-10-25 15:05:48.520341 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -its-dirg/Flask-pyoidc -https://github.com/its-dirg/Flask-pyoidc -Entry file: Flask-pyoidc/tests/test_flask_pyoidc.py -Scanned: 2016-10-25 15:05:49.989935 -No vulnerabilities found. - - -materialsvirtuallab/flamyngo -https://github.com/materialsvirtuallab/flamyngo -Entry file: flamyngo/flamyngo/app.py -Scanned: 2016-10-25 15:05:53.428388 -Vulnerability 1: -File: flamyngo/flamyngo/views.py - > User input at line 95, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 96: settings = CSETTINGS[cname] - File: flamyngo/flamyngo/views.py - > Line 98: projection = [t[0] for t in settings['summary']] - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 2: -File: flamyngo/flamyngo/views.py - > User input at line 97, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 3: -File: flamyngo/flamyngo/views.py - > User input at line 142, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 4: -File: flamyngo/flamyngo/views.py - > User input at line 145, trigger word "get(": - plot_type = request.args.get('plot_type') or 'scatter' -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 5: -File: flamyngo/flamyngo/views.py - > User input at line 146, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 6: -File: flamyngo/flamyngo/views.py - > User input at line 147, trigger word "get(": - xaxis = request.args.get('xaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 7: -File: flamyngo/flamyngo/views.py - > User input at line 148, trigger word "get(": - yaxis = request.args.get('yaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - - - -mikelkl/flasky -https://github.com/mikelkl/flasky -Entry file: None -Scanned: 2016-10-25 15:05:53.949984 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -https://github.com/OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -Entry file: Office365-SharePoint-Python-Flask-Sample/src/Python.Office365.AppAuthentication/app.py -Scanned: 2016-10-25 15:05:55.881889 -No vulnerabilities found. - - -jonafato/Flask-Copilot -https://github.com/jonafato/Flask-Copilot -Entry file: Flask-Copilot/example/app.py -Scanned: 2016-10-25 15:05:57.410130 -No vulnerabilities found. - - -besimaltnok/Flask-Examples -https://github.com/besimaltnok/Flask-Examples -Entry file: Flask-Examples/fileupload.py -Scanned: 2016-10-25 15:05:59.276490 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -luo-jialin/flask- -https://github.com/luo-jialin/flask- -Entry file: flask-/flaskr.py -Scanned: 2016-10-25 15:06:00.665404 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/Session1/app.py -Scanned: 2016-10-25 15:06:02.524588 -No vulnerabilities found. - - -imperio-wxm/flask-learn -https://github.com/imperio-wxm/flask-learn -Entry file: flask-learn/app/demo/flask_learn.py -Scanned: 2016-10-25 15:06:04.783851 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ptrierweiler/myblog -https://github.com/ptrierweiler/myblog -Entry file: myblog/app/hello.py -Scanned: 2016-10-25 15:06:12.903888 -No vulnerabilities found. - - -Upflask/Upflask -https://github.com/Upflask/Upflask -Entry file: Upflask/server.py -Scanned: 2016-10-25 15:06:15.359714 -Vulnerability 1: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -PrettyPrinted/flask-wtforms -https://github.com/PrettyPrinted/flask-wtforms -Entry file: flask-wtforms/main.py -Scanned: 2016-10-25 15:06:16.675952 -No vulnerabilities found. - - -rainyear/MathModeBot -https://github.com/rainyear/MathModeBot -Entry file: MathModeBot/main.py -Scanned: 2016-10-25 15:06:18.035895 -No vulnerabilities found. - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-25 15:06:19.327117 -No vulnerabilities found. - - -ubbochum/hb2_flask -https://github.com/ubbochum/hb2_flask -Entry file: hb2_flask/hb2_flask.py -Scanned: 2016-10-25 15:06:24.171884 -Vulnerability 1: -File: hb2_flask/hb2_flask.py - > User input at line 362, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 369: index_solr = Solr(start=page - 1 * 10, query=current_user.email, facet='false') - File: hb2_flask/hb2_flask.py - > Line 372: records = index_solr.results - File: hb2_flask/hb2_flask.py - > Line 376: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 379: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 361: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 363: records = [] - File: hb2_flask/hb2_flask.py - > Line 365: index_solr = '' - File: hb2_flask/hb2_flask.py - > Line 366: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 380, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',header=lazy_gettext('Home'), site=theme(request.access_route), numFound=num_found, records=records, pagination=pagination, offset=mystart - 1) - -Vulnerability 2: -File: hb2_flask/hb2_flask.py - > User input at line 416, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 417: duplicates_solr = Solr(start=page - 1 * 10, fquery=['dedupid:[* TO *]'], group='true', group_field='dedupid', group_limit=100, facet='false') - File: hb2_flask/hb2_flask.py - > Line 424: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('duplicate groups'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 427: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 415: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 423: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 428, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('duplicates.html',groups=duplicates_solr.results, pagination=pagination, header=lazy_gettext('Duplicates'), site=theme(request.access_route), offset=mystart - 1) - -Vulnerability 3: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 446, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 4: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 455, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), del_redirect='persons') - -Vulnerability 5: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 6: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 7: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 8: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 9: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 10: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 11: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 12: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 13: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 14: -File: hb2_flask/hb2_flask.py - > User input at line 742, trigger word "get(": - bio = requests.get('https://pub.orcid.org/%s/orcid-bio/' % orcid_id,headers='Accept''application/json').json() -File: hb2_flask/hb2_flask.py - > reaches line 744, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''%s, %s' % (bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('family-name').get('value'), bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('given-names').get('value'))) - -Vulnerability 15: -File: hb2_flask/hb2_flask.py - > User input at line 749, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 787: dashboard_solr = Solr(start=page - 1 * 10, query=query, sort='recordCreationDate asc', json_facet=DASHBOARD_FACETS, fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 795: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 798: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 750: mystart = 0 - File: hb2_flask/hb2_flask.py - > Line 791: pagination = '' -File: hb2_flask/hb2_flask.py - > reaches line 801, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dashboard.html',records=dashboard_solr.results, facet_data=dashboard_solr.facets, header=lazy_gettext('Dashboard'), site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), target='dashboard', del_redirect='dashboard') - -Vulnerability 16: -File: hb2_flask/hb2_flask.py - > User input at line 826, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 827: locked_solr = Solr(core='hb2', fquery=['locked:true', 'recordChangeDate:[* TO NOW-1HOUR]'], sort='recordChangeDate asc', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 831: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('records'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 834: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 824: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 841, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('superadmin.html',locked_records=locked_solr.results, header=lazy_gettext('Superadmin Board'), import_records=solr_dumps.results, offset=mystart - 1, pagination=pagination, del_redirect='superadmin', form=form, site=theme(request.access_route)) - -Vulnerability 17: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 925, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 18: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 933, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now()) - -Vulnerability 19: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1110, trigger word "replace(": - solr_data.setdefault('recordCreationDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 20: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1112, trigger word "replace(": - solr_data.setdefault('recordChangeDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 21: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), action='create', pubtype=pubtype) - -Vulnerability 22: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1160, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), pubtype=pubtype, action='create', record_id=form.id.data) - -Vulnerability 23: -File: hb2_flask/hb2_flask.py - > User input at line 1167, trigger word "get(": - is_part_of = show_record_solr.results[0].get('is_part_of') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 24: -File: hb2_flask/hb2_flask.py - > User input at line 1168, trigger word "get(": - has_part = show_record_solr.results[0].get('has_part') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 25: -File: hb2_flask/hb2_flask.py - > User input at line 1169, trigger word "get(": - other_version = show_record_solr.results[0].get('other_version') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 26: -File: hb2_flask/hb2_flask.py - > User input at line 1171, trigger word "get(": - thedata = json.loads(show_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1173: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 27: -File: hb2_flask/hb2_flask.py - > User input at line 1172, trigger word "get(": - locked = show_record_solr.results[0].get('locked') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 28: -File: hb2_flask/hb2_flask.py - > User input at line 1173, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 29: -File: hb2_flask/hb2_flask.py - > User input at line 1189, trigger word "get(": - thedata = json.loads(show_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1190: form = PersonAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1192, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('name'), site=theme(request.access_route), action='retrieve', record_id=person_id, pubtype='person', del_redirect='persons') - -Vulnerability 30: -File: hb2_flask/hb2_flask.py - > User input at line 1200, trigger word "get(": - thedata = json.loads(show_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1201: form = OrgaAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1203, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('pref_label'), site=theme(request.access_route), action='retrieve', record_id=orga_id, pubtype='organisation', del_redirect='organisations') - -Vulnerability 31: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1223, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 32: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1231, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(orga)s',orga=form.data.get('pref_label')), site=theme(request.access_route), action='update', pubtype='organisation') - -Vulnerability 33: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1253, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 34: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1261, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(person)s',person=form.data.get('name')), site=theme(request.access_route), action='update', pubtype='person') - -Vulnerability 35: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 36: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 37: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 38: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 39: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 40: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 41: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 42: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 43: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 44: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1493, trigger word "url_for(": - target = url_for(endpoint,values) - -Vulnerability 45: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1494, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target) - -Vulnerability 46: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 47: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 48: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 49: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 50: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 51: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 52: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 53: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 54: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 55: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 56: -File: hb2_flask/hb2_flask.py - > User input at line 1627, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1628: solr_dumps = Solr(core='hb2_users', query='id:*.json', facet='false', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 1631: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('dumps'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 1634: mystart = 1 + pagination.page - 1 * pagination.per_page -File: hb2_flask/hb2_flask.py - > reaches line 1636, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('solr_dumps.html',records=solr_dumps.results, offset=mystart - 1, pagination=pagination, header=lazy_gettext('Import Dump'), del_redirect='import/solr_dumps', form=form) - -Vulnerability 57: -File: hb2_flask/hb2_flask.py - > User input at line 1652, trigger word "get(": - thedata = json.loads(import_solr.results[0].get('dump')[0]) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1656: thedata = json.loads(form.file.data.stream.read()) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 58: -File: hb2_flask/hb2_flask.py - > User input at line 1656, trigger word ".data": - thedata = json.loads(form.file.data.stream.read()) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1652: thedata = json.loads(import_solr.results[0].get('dump')[0]) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 59: -File: hb2_flask/processors/mods_parser.py - > User input at line 123, trigger word "get(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') -Reassigned in: - File: hb2_flask/processors/mods_parser.py - > Line 120: pnd = '' -File: hb2_flask/processors/mods_parser.py - > reaches line 123, trigger word "replace(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') - - - -Vertabelo/flask-oauth-demo-app -https://github.com/Vertabelo/flask-oauth-demo-app -Entry file: flask-oauth-demo-app/models.py -Scanned: 2016-10-25 15:06:28.705497 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -msopentechcn/aad-graphapi-flask-demo -https://github.com/msopentechcn/aad-graphapi-flask-demo -Entry file: aad-graphapi-flask-demo/app.py -Scanned: 2016-10-25 15:06:29.991011 -Vulnerability 1: -File: aad-graphapi-flask-demo/app.py - > User input at line 100, trigger word "get(": - error_code = messages.get('error_code') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 2: -File: aad-graphapi-flask-demo/app.py - > User input at line 101, trigger word "get(": - error_message = messages.get('error_message') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 3: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 4: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 5: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 6: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - - - -waharnum/inlibraries.com -https://github.com/waharnum/inlibraries.com -Entry file: None -Scanned: 2016-10-25 15:06:35.203103 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/waharnum/inlibraries.com. - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-25 15:06:36.503563 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 41, trigger word "form[": - url_to_parse = request.form['input-url'] -Reassigned in: - File: flask_shortener/app.py - > Line 42: parts = urlparse.urlparse(url_to_parse) - File: flask_shortener/app.py - > Line 47: short_id = shorten(url_to_parse) -File: flask_shortener/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',short_id=short_id) - -Vulnerability 2: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - -Vulnerability 3: -File: flask_shortener/app.py - > User input at line 60, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - -Vulnerability 4: -File: flask_shortener/app.py - > User input at line 63, trigger word "get(": - click_count = int(redis.get('click-count:' + short_id) or 0) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - - - -jrhuerta/flask-api -https://github.com/jrhuerta/flask-api -Entry file: None -Scanned: 2016-10-25 15:06:37.851467 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jrhuerta/flask-api. - -SticksInHand/flaskr -https://github.com/SticksInHand/flaskr -Entry file: None -Scanned: 2016-10-25 15:06:38.893222 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SticksInHand/flaskr. - -jayShepard/Flasky -https://github.com/jayShepard/Flasky -Entry file: Flasky/Vagrant/hello.py -Scanned: 2016-10-25 15:06:40.182696 -No vulnerabilities found. - - -vineethtw/flaskexamples -https://github.com/vineethtw/flaskexamples -Entry file: flaskexamples/api/simulations.py -Scanned: 2016-10-25 15:06:41.558204 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kmosho/flaskr -https://github.com/kmosho/flaskr -Entry file: None -Scanned: 2016-10-25 15:06:42.078069 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kmosho/flaskr. - -KDmytro/flasktaskr -https://github.com/KDmytro/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:06:42.596360 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dreamtiger2016/flaskr -https://github.com/dreamtiger2016/flaskr -Entry file: None -Scanned: 2016-10-25 15:06:43.096718 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dreamtiger2016/flaskr. - -jarogers095/flasktaskr -https://github.com/jarogers095/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:06:43.664523 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -msapkota/flasktaskr -https://github.com/msapkota/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:06:49.184843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Narcissist1/flasktest -https://github.com/Narcissist1/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 15:06:51.689863 -No vulnerabilities found. - - -super452/flasky -https://github.com/super452/flasky -Entry file: None -Scanned: 2016-10-25 15:06:54.214288 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -srbhtest/flaskwebsite -https://github.com/srbhtest/flaskwebsite -Entry file: flaskwebsite/__init__.py -Scanned: 2016-10-25 15:06:55.476069 -No vulnerabilities found. - - -Anddor/flaskr -https://github.com/Anddor/flaskr -Entry file: None -Scanned: 2016-10-25 15:06:58.502902 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Anddor/flaskr. - -hammygoonan/Flaskify -https://github.com/hammygoonan/Flaskify -Entry file: Flaskify/project/__init__.py -Scanned: 2016-10-25 15:07:00.120926 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anujspatel/flaskr -https://github.com/anujspatel/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:00.668079 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/anujspatel/flaskr. - -williamcaban/flaskrcloud -https://github.com/williamcaban/flaskrcloud -Entry file: flaskrcloud/flaskr.py -Scanned: 2016-10-25 15:07:03.327019 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -boydjohnson/flasktwilio -https://github.com/boydjohnson/flasktwilio -Entry file: flasktwilio/app.py -Scanned: 2016-10-25 15:07:04.632911 -Vulnerability 1: -File: flasktwilio/app.py - > User input at line 14, trigger word "form[": - number = request.form['number'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 2: -File: flasktwilio/app.py - > User input at line 15, trigger word "form[": - lat = request.form['latitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 3: -File: flasktwilio/app.py - > User input at line 16, trigger word "form[": - lon = request.form['longitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - - - -yizhianiu/flasky -https://github.com/yizhianiu/flasky -Entry file: None -Scanned: 2016-10-25 15:07:06.170378 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -huachen0216/flaskdemo -https://github.com/huachen0216/flaskdemo -Entry file: flaskdemo/app/__init__.py -Scanned: 2016-10-25 15:07:15.108101 -Vulnerability 1: -File: flaskdemo/app/main/views.py - > User input at line 20, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdemo/app/main/views.py - > Line 21: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdemo/app/main/views.py - > Line 24: posts = pagination.items - File: flaskdemo/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskdemo/app/main/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskdemo/app/main/views.py - > User input at line 32, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskdemo/app/main/views.py - > Line 33: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskdemo/app/main/views.py - > Line 36: posts = pagination.items -File: flaskdemo/app/main/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -MrLokans/flaskr -https://github.com/MrLokans/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:15.641128 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MrLokans/flaskr. - -citizen-stig/flaskone -https://github.com/citizen-stig/flaskone -Entry file: flaskone/flask_one.py -Scanned: 2016-10-25 15:07:16.943261 -No vulnerabilities found. - - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-25 15:07:18.362004 -No vulnerabilities found. - - -Robotwing/flaskweb -https://github.com/Robotwing/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-25 15:07:21.584764 -No vulnerabilities found. - - -menglong81/flaskr -https://github.com/menglong81/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:22.111203 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/menglong81/flaskr. - -karanj112294/flasktutorial -https://github.com/karanj112294/flasktutorial -Entry file: None -Scanned: 2016-10-25 15:07:26.448894 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/karanj112294/flasktutorial. - -crazyqipython/flaskdemo -https://github.com/crazyqipython/flaskdemo -Entry file: flaskdemo/hello.py -Scanned: 2016-10-25 15:07:31.089006 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pythondude325/flaskr -https://github.com/pythondude325/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:31.610833 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pythondude325/flaskr. - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:07:36.137146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jocelynaladin/flaskworkspace -https://github.com/jocelynaladin/flaskworkspace -Entry file: flaskworkspace/__init__.py -Scanned: 2016-10-25 15:07:44.444618 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -fenske/flasky -https://github.com/fenske/flasky -Entry file: None -Scanned: 2016-10-25 15:07:45.017029 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fakegit/flasky -https://github.com/fakegit/flasky -Entry file: None -Scanned: 2016-10-25 15:07:45.531643 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wdxfairy/flaskblog -https://github.com/wdxfairy/flaskblog -Entry file: flaskblog/blog.py -Scanned: 2016-10-25 15:07:46.833657 -No vulnerabilities found. - - -davetromp/flasksqlapi -https://github.com/davetromp/flasksqlapi -Entry file: flasksqlapi/runapi.py -Scanned: 2016-10-25 15:07:49.456441 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Lazyppl/Flaskblog -https://github.com/Lazyppl/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-25 15:07:50.710340 -No vulnerabilities found. - - -playgrdstar/flasktaskr -https://github.com/playgrdstar/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:07:51.250056 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -toricor/flaskr -https://github.com/toricor/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:51.768683 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/toricor/flaskr. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: None -Scanned: 2016-10-25 15:07:52.279436 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: None -Scanned: 2016-10-25 15:07:54.793600 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zzclynn/flaskr. - -wish007/flasktest -https://github.com/wish007/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 15:07:56.185731 -No vulnerabilities found. - - -wildjan/Flaskr -https://github.com/wildjan/Flaskr -Entry file: Flaskr/Flaskr/Flaskr/flaskr.py -Scanned: 2016-10-25 15:07:58.606488 -No vulnerabilities found. - - -fhamami/flaskone -https://github.com/fhamami/flaskone -Entry file: flaskone/app/__init__.py -Scanned: 2016-10-25 15:08:00.141795 -No vulnerabilities found. - - -windery/flasky -https://github.com/windery/flasky -Entry file: None -Scanned: 2016-10-25 15:08:00.664802 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pnilan/flaskr -https://github.com/pnilan/flaskr -Entry file: None -Scanned: 2016-10-25 15:08:01.195719 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pnilan/flaskr. - -psykos/flaskloginskeleton -https://github.com/psykos/flaskloginskeleton -Entry file: flaskloginskeleton/app/__init__.py -Scanned: 2016-10-25 15:08:03.542603 -No vulnerabilities found. - - -AndrewGoldstein/flaskapp -https://github.com/AndrewGoldstein/flaskapp -Entry file: None -Scanned: 2016-10-25 15:08:04.060021 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewGoldstein/flaskapp. - -zeratullich/flaskr -https://github.com/zeratullich/flaskr -Entry file: None -Scanned: 2016-10-25 15:08:06.575243 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeratullich/flaskr. - -johnpwillman/flasktest -https://github.com/johnpwillman/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 15:08:14.794827 -No vulnerabilities found. - - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: Flasky/Projects/Flasky/app/__init__.py -Scanned: 2016-10-25 15:08:17.167763 -No vulnerabilities found. - - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-25 15:08:24.627598 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kcunning/flask-class-c9 -https://github.com/kcunning/flask-class-c9 -Entry file: flask-class-c9/flaskclass/app/__init__.py -Scanned: 2016-10-25 15:08:26.179944 -Vulnerability 1: -File: flask-class-c9/flaskclass/app/views.py - > User input at line 38, trigger word ".data": - numbers = form.numbers.data -Reassigned in: - File: flask-class-c9/flaskclass/app/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) - File: flask-class-c9/flaskclass/app/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) -File: flask-class-c9/flaskclass/app/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('game.html',game_nums=game_nums, player_nums=numbers, wins=wins) - - - -cutedogspark/Flask-SocketIO -https://github.com/cutedogspark/Flask-SocketIO -Entry file: Flask-SocketIO/server/app/__init__.py -Scanned: 2016-10-25 15:08:33.739606 -No vulnerabilities found. - - -nescode/punchstarter -https://github.com/nescode/punchstarter -Entry file: punchstarter/punchstarter/__init__.py -Scanned: 2016-10-25 15:08:35.210807 -Vulnerability 1: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 6: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 7: -File: punchstarter/punchstarter/__init__.py - > User input at line 64, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 8: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 9: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 10: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 11: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 98, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 12: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query, projects=projects, project_count=project_count) - - - -arose13/HerokuCondaScipyFlaskApp -https://github.com/arose13/HerokuCondaScipyFlaskApp -Entry file: HerokuCondaScipyFlaskApp/Web/app.py -Scanned: 2016-10-25 15:08:36.486579 -No vulnerabilities found. - - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-25 15:08:39.107480 -No vulnerabilities found. - - -zbc/Flask -https://github.com/zbc/Flask -Entry file: None -Scanned: 2016-10-25 15:08:39.630475 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -JadyLiu/flask -https://github.com/JadyLiu/flask -Entry file: None -Scanned: 2016-10-25 15:08:40.247344 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ZhenghaoZhu/Flask -https://github.com/ZhenghaoZhu/Flask -Entry file: None -Scanned: 2016-10-25 15:08:45.792464 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cobra0914/flask -https://github.com/cobra0914/flask -Entry file: None -Scanned: 2016-10-25 15:08:46.345210 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sunshine-sjd/Flask -https://github.com/sunshine-sjd/Flask -Entry file: None -Scanned: 2016-10-25 15:08:46.859391 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -octt/flask -https://github.com/octt/flask -Entry file: None -Scanned: 2016-10-25 15:08:47.421035 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SunchunZhou/flask -https://github.com/SunchunZhou/flask -Entry file: None -Scanned: 2016-10-25 15:08:47.970358 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bwooklyn/flask -https://github.com/Bwooklyn/flask -Entry file: None -Scanned: 2016-10-25 15:08:48.478702 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: None -Scanned: 2016-10-25 15:08:50.021693 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -candyer/Flask -https://github.com/candyer/Flask -Entry file: None -Scanned: 2016-10-25 15:08:51.553342 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bsteinberg/flask -https://github.com/bsteinberg/flask -Entry file: None -Scanned: 2016-10-25 15:08:52.066301 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -susantshrestha/flask -https://github.com/susantshrestha/flask -Entry file: None -Scanned: 2016-10-25 15:08:52.606533 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pavelrib/flask -https://github.com/pavelrib/flask -Entry file: None -Scanned: 2016-10-25 15:08:55.125392 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scripterkaran/flask -https://github.com/scripterkaran/flask -Entry file: None -Scanned: 2016-10-25 15:08:55.634776 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SeanVaysburd/flask -https://github.com/SeanVaysburd/flask -Entry file: None -Scanned: 2016-10-25 15:08:58.145829 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kartheek3011/Flask -https://github.com/kartheek3011/Flask -Entry file: None -Scanned: 2016-10-25 15:08:59.666260 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dannyec/flask -https://github.com/dannyec/flask -Entry file: None -Scanned: 2016-10-25 15:09:01.210090 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -itsrifat/flask-celery-docker-scale -https://github.com/itsrifat/flask-celery-docker-scale -Entry file: flask-celery-docker-scale/flask-app/app.py -Scanned: 2016-10-25 15:09:02.637569 -No vulnerabilities found. - - -ninadmhatre/zual -https://github.com/ninadmhatre/zual -Entry file: zual/local_mods/flask-blogging/flask_blogging/engine.py -Scanned: 2016-10-25 15:09:08.947290 -Vulnerability 1: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 104, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 106: meta = _get_meta(storage, count, page) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 107: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 111: posts = storage.get_posts(count=count, offset=offset, include_draft=False, tag=None, user_id=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 115, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 2: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 141, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 142: meta = _get_meta(storage, count, page,tag=tag) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 143: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 147: posts = storage.get_posts(count=count, offset=offset, tag=tag, include_draft=False, user_id=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 3: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 159, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 160: meta = _get_meta(storage, count, page,user_id=user_id) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 161: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 164: posts = storage.get_posts(count=count, offset=offset, user_id=user_id, include_draft=False, tag=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 172, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 4: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 199, trigger word ".data": - slug = post_processor.create_slug(form.title.data) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 204: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 214: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 220: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 224: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 200, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.page_by_id',post_id=pid, slug=slug)) - -Vulnerability 5: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 199, trigger word ".data": - slug = post_processor.create_slug(form.title.data) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 204: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 214: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 220: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 224: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 200, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.page_by_id',post_id=pid, slug=slug)) - - - -TerbiumLabs/flask-developer-challenge -https://github.com/TerbiumLabs/flask-developer-challenge -Entry file: flask-developer-challenge/gistapi/gistapi.py -Scanned: 2016-10-25 15:09:10.363400 -No vulnerabilities found. - - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-25 15:09:17.414611 -No vulnerabilities found. - - -k-hung/FlaskApp -https://github.com/k-hung/FlaskApp -Entry file: FlaskApp/FeelsApp/__init__.py -Scanned: 2016-10-25 15:09:24.871370 -No vulnerabilities found. - - -taogeT/flask-celery -https://github.com/taogeT/flask-celery -Entry file: flask-celery/example/app/__init__.py -Scanned: 2016-10-25 15:09:26.306217 -No vulnerabilities found. - - -frankV/flask-sendgrid -https://github.com/frankV/flask-sendgrid -Entry file: flask-sendgrid/setup.py -Scanned: 2016-10-25 15:09:27.603250 -No vulnerabilities found. - - -sunscrapers/flask-boilerplate -https://github.com/sunscrapers/flask-boilerplate -Entry file: flask-boilerplate/app.py -Scanned: 2016-10-25 15:09:35.969922 -No vulnerabilities found. - - -jabbalaci/DigitalOceanFlask -https://github.com/jabbalaci/DigitalOceanFlask -Entry file: DigitalOceanFlask/home/demo/projects/ave_caesar/main.py -Scanned: 2016-10-25 15:09:37.437445 -No vulnerabilities found. - - -pyx/flask-diced -https://github.com/pyx/flask-diced -Entry file: flask-diced/examples/simple/app.py -Scanned: 2016-10-25 15:09:38.852743 -No vulnerabilities found. - - -basco-johnkevin/note-taking-app -https://github.com/basco-johnkevin/note-taking-app -Entry file: note-taking-app/part2/main.py -Scanned: 2016-10-25 15:09:40.147830 -No vulnerabilities found. - - -yoshiya0503/Flask-Best-Practices -https://github.com/yoshiya0503/Flask-Best-Practices -Entry file: Flask-Best-Practices/methodview.py -Scanned: 2016-10-25 15:09:41.433885 -No vulnerabilities found. - - -ThunderousFigs/Genomes -https://github.com/ThunderousFigs/Genomes -Entry file: Genomes/server.py -Scanned: 2016-10-25 15:09:57.486889 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sinscary/Flask-Social-Networking -https://github.com/sinscary/Flask-Social-Networking -Entry file: Flask-Social-Networking/app.py -Scanned: 2016-10-25 15:09:59.865883 -Vulnerability 1: -File: Flask-Social-Networking/app.py - > User input at line 111, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: Flask-Social-Networking/app.py - > Line 118: user = current_user -File: Flask-Social-Networking/app.py - > reaches line 121, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 146, trigger word "flash(": - flash('You are now following {}'.format(to_user.username), 'success') - -Vulnerability 3: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 165, trigger word "flash(": - flash('You have unfollowed {}'.format(to_user.username), 'success') - -Vulnerability 6: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -osuosl/timesync-frontend-flask -https://github.com/osuosl/timesync-frontend-flask -Entry file: None -Scanned: 2016-10-25 15:10:05.045291 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/osuosl/timesync-frontend-flask. - -Miserlou/serverless-imagehost -https://github.com/Miserlou/serverless-imagehost -Entry file: serverless-imagehost/my_app.py -Scanned: 2016-10-25 15:10:06.361106 -No vulnerabilities found. - - -Python-Project-Simple/flask-blog -https://github.com/Python-Project-Simple/flask-blog -Entry file: flask-blog/app/__init__.py -Scanned: 2016-10-25 15:10:07.814695 -No vulnerabilities found. - - -narakai/flaskblog -https://github.com/narakai/flaskblog -Entry file: flaskblog/app/app.py -Scanned: 2016-10-25 15:10:14.884021 -Vulnerability 1: -File: flaskblog/app/helpers.py - > User input at line 5, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flaskblog/app/helpers.py - > Line 7: page = int(page) - File: flaskblog/app/helpers.py - > Line 9: page = 1 - File: flaskblog/app/helpers.py - > Line 10: object_list = query.paginate(page, paginate_by) -File: flaskblog/app/helpers.py - > reaches line 11, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template_name,object_list=object_list, context) - -Vulnerability 2: -File: flaskblog/app/entries/blueprint.py - > User input at line 52, trigger word "files[": - image_file = request.files['file'] -Reassigned in: - File: flaskblog/app/entries/blueprint.py - > Line 53: filename = os.path.join(app.config['IMAGES_DIR'], secure_filename(image_file.filename)) -File: flaskblog/app/entries/blueprint.py - > reaches line 55, trigger word "flash(": - flash('Saved %s' % os.path.basename(filename), 'success') - -Vulnerability 3: -File: flaskblog/app/entries/forms.py - > User input at line 71, trigger word ".data": - entry = Entry.query.filter(Entry.status == Entry.STATUS_PUBLIC & Entry.id == self.entry_id.data).first() -File: flaskblog/app/entries/forms.py - > reaches line 71, trigger word "filter(": - entry = Entry.query.filter(Entry.status == Entry.STATUS_PUBLIC & Entry.id == self.entry_id.data).first() - - - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:10:15.424882 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: None -Scanned: 2016-10-25 15:10:16.450296 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adrianneperedo/flaskr. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: None -Scanned: 2016-10-25 15:10:16.946740 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mirukushake/flaskr. - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: None -Scanned: 2016-10-25 15:10:17.462103 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -darrenhankins/flaskr -https://github.com/darrenhankins/flaskr -Entry file: None -Scanned: 2016-10-25 15:10:17.958546 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/darrenhankins/flaskr. - -tim1978/flasktaskr -https://github.com/tim1978/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:10:18.465595 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DXZ/flaskr -https://github.com/DXZ/flaskr -Entry file: None -Scanned: 2016-10-25 15:10:18.999248 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DXZ/flaskr. - -zhangyuhaomei/flasky -https://github.com/zhangyuhaomei/flasky -Entry file: None -Scanned: 2016-10-25 15:10:19.509317 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hellohuangjin/flaskblog -https://github.com/hellohuangjin/flaskblog -Entry file: flaskblog/app/__init__.py -Scanned: 2016-10-25 15:10:20.979061 -No vulnerabilities found. - - -Looncall/Flaskr -https://github.com/Looncall/Flaskr -Entry file: Flaskr/flaskr/app.py -Scanned: 2016-10-25 15:10:22.261695 -No vulnerabilities found. - - -schen2011/flaskandazure -https://github.com/schen2011/flaskandazure -Entry file: flaskandazure/FlaskWebProject3/FlaskWebProject3/__init__.py -Scanned: 2016-10-25 15:10:26.248977 -No vulnerabilities found. - - -gyonghua/flasktaskr -https://github.com/gyonghua/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:10:26.761280 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -coolmile23/flaskr -https://github.com/coolmile23/flaskr -Entry file: None -Scanned: 2016-10-25 15:10:27.267046 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/coolmile23/flaskr. - -Rothschild0120/flaskyblog -https://github.com/Rothschild0120/flaskyblog -Entry file: flaskyblog/app/__init__.py -Scanned: 2016-10-25 15:10:30.170181 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -keer2345/flasky -https://github.com/keer2345/flasky -Entry file: None -Scanned: 2016-10-25 15:10:30.697350 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MRamakri/flaskworkshop -https://github.com/MRamakri/flaskworkshop -Entry file: flaskworkshop/app.py -Scanned: 2016-10-25 15:10:32.095352 -No vulnerabilities found. - - -islandev/flaskweb -https://github.com/islandev/flaskweb -Entry file: flaskweb/hello.py -Scanned: 2016-10-25 15:10:42.120015 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -PansFortress/flasktasker -https://github.com/PansFortress/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-25 15:10:43.567514 -No vulnerabilities found. - - -olegzhoglo/flasktaskr -https://github.com/olegzhoglo/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:10:44.079967 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -imhuwq/flasky -https://github.com/imhuwq/flasky -Entry file: None -Scanned: 2016-10-25 15:10:44.594212 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Robotwing/flaskweb -https://github.com/Robotwing/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-25 15:10:47.766788 -No vulnerabilities found. - - -CBR09/flaskapp -https://github.com/CBR09/flaskapp -Entry file: None -Scanned: 2016-10-25 15:10:48.277927 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CBR09/flaskapp. - -neo1218/m2m -https://github.com/neo1218/m2m -Entry file: m2m/m2m/app/__init__.py -Scanned: 2016-10-25 15:10:59.738034 -No vulnerabilities found. - - -Kriordan/flasktaskr -https://github.com/Kriordan/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:11:00.248609 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -antonsoroko/flaskapimongo -https://github.com/antonsoroko/flaskapimongo -Entry file: flaskapimongo/flaskapimongo/__init__.py -Scanned: 2016-10-25 15:11:01.839424 -No vulnerabilities found. - - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/app/__init__.py -Scanned: 2016-10-25 15:11:12.921409 -No vulnerabilities found. - - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-25 15:11:20.094208 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jeffreybergman/flasktaskr -https://github.com/jeffreybergman/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:11:20.670438 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhkmxx9302013/flaskmysql -https://github.com/zhkmxx9302013/flaskmysql -Entry file: flaskmysql/flaskmysql.py -Scanned: 2016-10-25 15:11:22.000004 -No vulnerabilities found. - - -xiaomao361/flaskr -https://github.com/xiaomao361/flaskr -Entry file: None -Scanned: 2016-10-25 15:11:22.521304 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiaomao361/flaskr. - -zixuzhang/flasky -https://github.com/zixuzhang/flasky -Entry file: None -Scanned: 2016-10-25 15:11:23.077553 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stalwart201/flaskimgupload -https://github.com/stalwart201/flaskimgupload -Entry file: flaskimgupload/upload.py -Scanned: 2016-10-25 15:11:24.357102 -Vulnerability 1: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -marcabomb/flasktaskr -https://github.com/marcabomb/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:11:24.870435 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alvaro893/flaskcinemaapp -https://github.com/alvaro893/flaskcinemaapp -Entry file: flaskcinemaapp/FlaskWebProject/__init__.py -Scanned: 2016-10-25 15:11:27.712105 -No vulnerabilities found. - - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: None -Scanned: 2016-10-25 15:11:28.232010 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yuyiwei305/flaskr. - -czy1238677/flasky -https://github.com/czy1238677/flasky -Entry file: None -Scanned: 2016-10-25 15:11:28.741467 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -liteng123/flaskr -https://github.com/liteng123/flaskr -Entry file: None -Scanned: 2016-10-25 15:11:29.746096 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/liteng123/flaskr. - -Pink-Moon/flaskr -https://github.com/Pink-Moon/flaskr -Entry file: None -Scanned: 2016-10-25 15:11:30.767584 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pink-Moon/flaskr. - -mcmcgonagle/flasktaskr2 -https://github.com/mcmcgonagle/flasktaskr2 -Entry file: flasktaskr2/project/views.py -Scanned: 2016-10-25 15:11:32.578127 -No vulnerabilities found. - - -pchartrand/FlaskTemp -https://github.com/pchartrand/FlaskTemp -Entry file: FlaskTemp/tempreport.py -Scanned: 2016-10-25 15:11:35.175848 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -salazar35/FlaskWeb -https://github.com/salazar35/FlaskWeb -Entry file: FlaskWeb/Flask Web Development.py -Scanned: 2016-10-25 15:11:36.485402 -No vulnerabilities found. - - -uklineale/flaskTut -https://github.com/uklineale/flaskTut -Entry file: None -Scanned: 2016-10-25 15:11:47.164902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MarHelen/FlaskLogin -https://github.com/MarHelen/FlaskLogin -Entry file: FlaskLogin/sql_declarative.py -Scanned: 2016-10-25 15:11:55.025510 -Vulnerability 1: -File: FlaskLogin/first.py - > User input at line 63, trigger word "get(": - email = request.form.get('email') -Reassigned in: - File: FlaskLogin/first.py - > Line 70: user = User(email, request.form.get('pw')) -File: FlaskLogin/first.py - > reaches line 65, trigger word "filter(": - temp_user_set = User.query.filter(User.email == email).first() - - - -AlexFransis/FlaskyProject -https://github.com/AlexFransis/FlaskyProject -Entry file: FlaskyProject/app/__init__.py -Scanned: 2016-10-25 15:11:56.747366 -No vulnerabilities found. - - -azureappserviceoss/FlaskAzure -https://github.com/azureappserviceoss/FlaskAzure -Entry file: FlaskAzure/FlaskWebProject1/__init__.py -Scanned: 2016-10-25 15:12:03.320710 -No vulnerabilities found. - - -yhappy/FlaskProjects -https://github.com/yhappy/FlaskProjects -Entry file: FlaskProjects/FlaskProjects.py -Scanned: 2016-10-25 15:12:04.628926 -No vulnerabilities found. - - -saurabh1e/FlaskStructure -https://github.com/saurabh1e/FlaskStructure -Entry file: FlaskStructure/src/utils/__init__.py -Scanned: 2016-10-25 15:12:05.973449 -No vulnerabilities found. - - -tangza/FlaskAPP -https://github.com/tangza/FlaskAPP -Entry file: None -Scanned: 2016-10-25 15:12:13.645015 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AlexGrek/FlaskLib -https://github.com/AlexGrek/FlaskLib -Entry file: FlaskLib/FlaskLib/FlaskLib/__init__.py -Scanned: 2016-10-25 15:12:17.614196 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -daveweber/FlaskBar -https://github.com/daveweber/FlaskBar -Entry file: FlaskBar/index.py -Scanned: 2016-10-25 15:12:18.925182 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -retozero/FlaskDemo -https://github.com/retozero/FlaskDemo -Entry file: FlaskDemo/flaskr/flaskr.py -Scanned: 2016-10-25 15:12:20.778896 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -danleyb2/flaskMe -https://github.com/danleyb2/flaskMe -Entry file: flaskMe/flaskREST.py -Scanned: 2016-10-25 15:12:22.165787 -Vulnerability 1: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 2: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 3: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - -Vulnerability 4: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - - - -Rikka-chan/flaskCharts -https://github.com/Rikka-chan/flaskCharts -Entry file: None -Scanned: 2016-10-25 15:12:29.492061 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hattwick/flask2 -https://github.com/hattwick/flask2 -Entry file: flask2/flask2mod-template.py -Scanned: 2016-10-25 15:12:30.817198 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -narakai/FlaskServer -https://github.com/narakai/FlaskServer -Entry file: FlaskServer/flaskServer.py -Scanned: 2016-10-25 15:12:32.192505 -No vulnerabilities found. - - -ljxxcaijing/flask -https://github.com/ljxxcaijing/flask -Entry file: None -Scanned: 2016-10-25 15:12:33.920222 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PacktPublishing/Mastering-Flask -https://github.com/PacktPublishing/Mastering-Flask -Entry file: Mastering-Flask/Chapter 13_Code/Chapter 13/webapp/__init__.py -Scanned: 2016-10-25 15:12:37.089923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -migrateup/flaskr -https://github.com/migrateup/flaskr -Entry file: None -Scanned: 2016-10-25 15:12:37.625157 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/migrateup/flaskr. - -reparadocs/Flask-HelloWorldBot -https://github.com/reparadocs/Flask-HelloWorldBot -Entry file: Flask-HelloWorldBot/HelloWorldBot.py -Scanned: 2016-10-25 15:12:39.013549 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -singingwolfboy/flask-sse -https://github.com/singingwolfboy/flask-sse -Entry file: flask-sse/tests/conftest.py -Scanned: 2016-10-25 15:12:40.385259 -No vulnerabilities found. - - -amateurPotato/flask -https://github.com/amateurPotato/flask -Entry file: None -Scanned: 2016-10-25 15:12:40.938186 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ahdrage/flask -https://github.com/ahdrage/flask -Entry file: None -Scanned: 2016-10-25 15:12:41.482897 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -acouderc/flask -https://github.com/acouderc/flask -Entry file: None -Scanned: 2016-10-25 15:12:41.979117 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Goomah/flask -https://github.com/Goomah/flask -Entry file: None -Scanned: 2016-10-25 15:12:42.515962 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pankajpant22/flask -https://github.com/pankajpant22/flask -Entry file: None -Scanned: 2016-10-25 15:12:43.081567 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ultramarine7/flask -https://github.com/ultramarine7/flask -Entry file: None -Scanned: 2016-10-25 15:12:43.598071 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -od210291jpv/flask -https://github.com/od210291jpv/flask -Entry file: None -Scanned: 2016-10-25 15:12:44.104147 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aintmetho/flask -https://github.com/aintmetho/flask -Entry file: None -Scanned: 2016-10-25 15:12:44.610892 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MonPower/Flask -https://github.com/MonPower/Flask -Entry file: None -Scanned: 2016-10-25 15:12:45.159795 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -josephmuli/Flask -https://github.com/josephmuli/Flask -Entry file: None -Scanned: 2016-10-25 15:12:45.674719 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MapEntryManagement/flask -https://github.com/MapEntryManagement/flask -Entry file: None -Scanned: 2016-10-25 15:12:48.204193 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wenzi0595/flask -https://github.com/wenzi0595/flask -Entry file: None -Scanned: 2016-10-25 15:12:55.729481 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -singingwolfboy/build-a-flask-api -https://github.com/singingwolfboy/build-a-flask-api -Entry file: build-a-flask-api/step08/puppy.py -Scanned: 2016-10-25 15:13:01.708826 -Vulnerability 1: -File: build-a-flask-api/step08/puppy.py - > User input at line 25, trigger word "get(": - name = request.form.get('name') -Reassigned in: - File: build-a-flask-api/step08/puppy.py - > Line 31: slug = slugify(name) - File: build-a-flask-api/step08/puppy.py - > Line 34: puppy = Puppy(slug=slug, name=name, image_url=image_url) - File: build-a-flask-api/step08/puppy.py - > Line 43: resp.headers['Location'] = location -File: build-a-flask-api/step08/puppy.py - > reaches line 40, trigger word "url_for(": - location = url_for('get_puppy',slug=slug) - - - -sunary/flask-optimize -https://github.com/sunary/flask-optimize -Entry file: flask-optimize/tests/flask_app.py -Scanned: 2016-10-25 15:13:05.115100 -No vulnerabilities found. - - -klen/flask-pw -https://github.com/klen/flask-pw -Entry file: flask-pw/tests.py -Scanned: 2016-10-25 15:13:08.086750 -No vulnerabilities found. - - -janukobytsch/flask-autofixture -https://github.com/janukobytsch/flask-autofixture -Entry file: flask-autofixture/tests/conftest.py -Scanned: 2016-10-25 15:13:15.651640 -No vulnerabilities found. - - -underdogio/flask-graylog -https://github.com/underdogio/flask-graylog -Entry file: flask-graylog/example/app.py -Scanned: 2016-10-25 15:13:18.977445 -No vulnerabilities found. - - -adyouri/flask-basics -https://github.com/adyouri/flask-basics -Entry file: flask-basics/lesson5/app.py -Scanned: 2016-10-25 15:13:20.364140 -No vulnerabilities found. - - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-25 15:13:21.760850 -No vulnerabilities found. - - -colingorrie/flask-boilerplate -https://github.com/colingorrie/flask-boilerplate -Entry file: None -Scanned: 2016-10-25 15:13:23.441057 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/colingorrie/flask-boilerplate. - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-25 15:13:34.999744 -No vulnerabilities found. - - -gucxufangling/flask-- -https://github.com/gucxufangling/flask-- -Entry file: flask--/app/__init__.py -Scanned: 2016-10-25 15:13:43.956247 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -paceko/shopping-site -https://github.com/paceko/shopping-site -Entry file: shopping-site/shoppingsite.py -Scanned: 2016-10-25 15:13:46.204937 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kashyap32/flask-REST -https://github.com/kashyap32/flask-REST -Entry file: None -Scanned: 2016-10-25 15:13:47.468808 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kashyap32/flask-REST. - -pragmaticcoders/flask-react-seed -https://github.com/pragmaticcoders/flask-react-seed -Entry file: None -Scanned: 2016-10-25 15:13:48.845032 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pragmaticcoders/flask-react-seed. - -danil3d/flaskblog -https://github.com/danil3d/flaskblog -Entry file: None -Scanned: 2016-10-25 15:13:50.761152 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danil3d/flaskblog. - -rahulballal/flasktemplate -https://github.com/rahulballal/flasktemplate -Entry file: flasktemplate/app.py -Scanned: 2016-10-25 15:13:52.038478 -No vulnerabilities found. - - -rsk7/flaskapp -https://github.com/rsk7/flaskapp -Entry file: None -Scanned: 2016-10-25 15:13:52.551127 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rsk7/flaskapp. - -ailtoncsf/flasklearn -https://github.com/ailtoncsf/flasklearn -Entry file: flasklearn/flask-basics/app.py -Scanned: 2016-10-25 15:14:02.704870 -No vulnerabilities found. - - -VimDong/flaskme -https://github.com/VimDong/flaskme -Entry file: flaskme/app/__init__.py -Scanned: 2016-10-25 15:14:04.316346 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dimdal/flasktutorial -https://github.com/dimdal/flasktutorial -Entry file: None -Scanned: 2016-10-25 15:14:04.837866 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dimdal/flasktutorial. - -axavio/flasky -https://github.com/axavio/flasky -Entry file: None -Scanned: 2016-10-25 15:14:05.340839 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bspaans/flaskal -https://github.com/bspaans/flaskal -Entry file: flaskal/flaskal/imports.py -Scanned: 2016-10-25 15:14:06.917488 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -stoodsteal/flasky -https://github.com/stoodsteal/flasky -Entry file: None -Scanned: 2016-10-25 15:14:07.428651 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -annoys-parrot/flaskbook -https://github.com/annoys-parrot/flaskbook -Entry file: flaskbook/application.py -Scanned: 2016-10-25 15:14:09.098722 -Vulnerability 1: -File: flaskbook/user/views.py - > User input at line 24, trigger word ".data": - user = User.objects.filter(username=form.username.data).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 37: user = None -File: flaskbook/user/views.py - > reaches line 24, trigger word "filter(": - user = User.objects.filter(username=form.username.data).first() - -Vulnerability 2: -File: flaskbook/user/views.py - > User input at line 31, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flaskbook/user/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = 'User logged in' - File: flaskbook/user/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('user/login.html',form=form, error=error) -File: flaskbook/user/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 3: -File: flaskbook/user/views.py - > User input at line 47, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 49: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 62, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 4: -File: flaskbook/user/views.py - > User input at line 49, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 62, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 5: -File: flaskbook/user/views.py - > User input at line 47, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 49: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 63, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 6: -File: flaskbook/user/views.py - > User input at line 49, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 63, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 7: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 90, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 8: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 106, trigger word "filter(": - if User.objects.filter(username=form.username.data.lower()).first(): - -Vulnerability 9: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 113, trigger word "filter(": - if User.objects.filter(email=form.email.data.lower()).first(): - -Vulnerability 10: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 126, trigger word "render_template(": - body_html = render_template('mail/user/change_email.html',user=user) - -Vulnerability 11: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 127, trigger word "render_template(": - body_text = render_template('mail/user/change_email.txt',user=user) - -Vulnerability 12: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 137, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/edit.html',form=form, error=error, message=message, user=user) - -Vulnerability 13: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 160, trigger word "filter(": - user = User.objects.filter(email=form.email.data).first() - -Vulnerability 14: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 168, trigger word "render_template(": - body_html = render_template('mail/user/password_reset.html',user=user) - -Vulnerability 15: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 169, trigger word "render_template(": - body_text = render_template('mail/user/password_reset.txt',user=user) - -Vulnerability 16: -File: flaskbook/user/views.py - > User input at line 215, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -File: flaskbook/user/views.py - > reaches line 215, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - - - -gene1wood/flaskoktaapp -https://github.com/gene1wood/flaskoktaapp -Entry file: flaskoktaapp/flaskoktaapp/__init__.py -Scanned: 2016-10-25 15:14:10.543313 -Vulnerability 1: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 196, trigger word "url_for(": - url = url_for('user') - -Vulnerability 2: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 204, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -yu66s/flaskr -https://github.com/yu66s/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:11.051317 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yu66s/flaskr. - -xiaohu2015/Flasky -https://github.com/xiaohu2015/Flasky -Entry file: Flasky/Flasky.py -Scanned: 2016-10-25 15:14:15.593562 -Vulnerability 1: -File: Flasky/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 31: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 34: posts = pagination.items - File: Flasky/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flasky/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Flasky/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flasky/app/main/views.py - > Line 23: show_followed = False - File: Flasky/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flasky/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Flasky/app/main/views.py - > User input at line 60, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 61: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 64: posts = pagination.items -File: Flasky/app/main/views.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Flasky/app/main/views.py - > User input at line 121, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 123: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Flasky/app/main/views.py - > Line 124: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 126: comments = pagination.items - File: Flasky/app/main/views.py - > Line 120: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flasky/app/main/views.py - > reaches line 127, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Flasky/app/main/views.py - > User input at line 186, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 187: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 189: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flasky/app/main/views.py - > Line 185: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flasky/app/main/views.py - > reaches line 190, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Flasky/app/main/views.py - > User input at line 200, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 201: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 204: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flasky/app/main/views.py - > Line 199: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flasky/app/main/views.py - > reaches line 206, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Flasky/app/main/views.py - > User input at line 215, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flasky/app/main/views.py - > Line 216: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flasky/app/main/views.py - > Line 218: comments = pagination.items -File: Flasky/app/main/views.py - > reaches line 219, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -cwywang/flasky -https://github.com/cwywang/flasky -Entry file: None -Scanned: 2016-10-25 15:14:16.133263 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Sarmacid/flaskr -https://github.com/Sarmacid/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:16.639251 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Sarmacid/flaskr. - -Julzmbugua/flasky -https://github.com/Julzmbugua/flasky -Entry file: None -Scanned: 2016-10-25 15:14:17.181867 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Maxwell-Ying/flaskbook -https://github.com/Maxwell-Ying/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-25 15:14:18.471289 -Vulnerability 1: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 2: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 3: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 4: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 5: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 6: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 7: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 8: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 9: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 10: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 11: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 12: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 13: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 14: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 15: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 16: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 17: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 18: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 19: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 20: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 21: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 22: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 23: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 24: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 25: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 26: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 27: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 28: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 29: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 30: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 31: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 32: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 33: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 34: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 35: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 36: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 37: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 38: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 39: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 40: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 41: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 42: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 43: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 44: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 45: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 46: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 47: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 48: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 49: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 50: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 51: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 52: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 53: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 54: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 55: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 56: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - - - -skhe/flasky -https://github.com/skhe/flasky -Entry file: None -Scanned: 2016-10-25 15:14:18.989421 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jinxiaoyuan/flaskr -https://github.com/jinxiaoyuan/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:19.524918 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jinxiaoyuan/flaskr. - -baloo98/flasky -https://github.com/baloo98/flasky -Entry file: None -Scanned: 2016-10-25 15:14:20.057958 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sanketg10/flaskapp -https://github.com/sanketg10/flaskapp -Entry file: None -Scanned: 2016-10-25 15:14:20.605899 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanketg10/flaskapp. - -wangxuan007/flasky -https://github.com/wangxuan007/flasky -Entry file: None -Scanned: 2016-10-25 15:14:21.156569 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lambdaplus/flasko -https://github.com/lambdaplus/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-25 15:14:33.495929 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/operator.py - -fkirwin/flaskhelloworld -https://github.com/fkirwin/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-25 15:14:41.406459 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wang7lu6qiang5/flasky -https://github.com/wang7lu6qiang5/flasky -Entry file: None -Scanned: 2016-10-25 15:14:41.940482 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ak042/flasktaskr -https://github.com/ak042/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:14:42.448024 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thedrew82/flaskr -https://github.com/thedrew82/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:44.965062 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thedrew82/flaskr. - -allergier/flaskr -https://github.com/allergier/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:47.474750 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/allergier/flaskr. - -shenmj053/flaskr -https://github.com/shenmj053/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:47.988534 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shenmj053/flaskr. - -neotrinity/flaskavro -https://github.com/neotrinity/flaskavro -Entry file: flaskavro/main.py -Scanned: 2016-10-25 15:14:50.304973 -No vulnerabilities found. - - -SSUHan/flasktutorial -https://github.com/SSUHan/flasktutorial -Entry file: None -Scanned: 2016-10-25 15:14:50.821789 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SSUHan/flasktutorial. - -ma53192190/flaskwork -https://github.com/ma53192190/flaskwork -Entry file: flaskwork/flaskwork.py -Scanned: 2016-10-25 15:14:52.106866 -No vulnerabilities found. - - -zverxw13/flaskr -https://github.com/zverxw13/flaskr -Entry file: None -Scanned: 2016-10-25 15:14:52.652540 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zverxw13/flaskr. - -Mendurim/flasktut -https://github.com/Mendurim/flasktut -Entry file: flasktut/hello.py -Scanned: 2016-10-25 15:14:53.954163 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zeroisme/flaskblog -https://github.com/zeroisme/flaskblog -Entry file: None -Scanned: 2016-10-25 15:15:03.528355 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeroisme/flaskblog. - -hoorn91/flaskproject -https://github.com/hoorn91/flaskproject -Entry file: flaskproject/app/hello.py -Scanned: 2016-10-25 15:15:05.899985 -Vulnerability 1: -File: flaskproject/app/hello.py - > User input at line 70, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flaskproject/app/hello.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -wanghaa/flasky -https://github.com/wanghaa/flasky -Entry file: None -Scanned: 2016-10-25 15:15:06.422856 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HDking/flasktaskr -https://github.com/HDking/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:15:06.995218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gjcooper/flaskprac -https://github.com/gjcooper/flaskprac -Entry file: flaskprac/app/__init__.py -Scanned: 2016-10-25 15:15:08.539944 -No vulnerabilities found. - - -liuhuai0217/flasky -https://github.com/liuhuai0217/flasky -Entry file: None -Scanned: 2016-10-25 15:15:09.064317 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -deliveryyyyguy/flaskapp -https://github.com/deliveryyyyguy/flaskapp -Entry file: None -Scanned: 2016-10-25 15:15:10.577129 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/deliveryyyyguy/flaskapp. - -omshankar1/flaskapp -https://github.com/omshankar1/flaskapp -Entry file: None -Scanned: 2016-10-25 15:15:11.090586 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/omshankar1/flaskapp. - -maxwang051/flasktaskr -https://github.com/maxwang051/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:15:11.609428 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aaron077/flaskblog -https://github.com/aaron077/flaskblog -Entry file: None -Scanned: 2016-10-25 15:15:16.155524 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aaron077/flaskblog. - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: Flaskr/flaskr_original.py -Scanned: 2016-10-25 15:15:17.469315 -No vulnerabilities found. - - -joanna-solomiewicz/FlaskWorkshop -https://github.com/joanna-solomiewicz/FlaskWorkshop -Entry file: FlaskWorkshop/app.py -Scanned: 2016-10-25 15:15:24.053549 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWorkshop/venv/lib/python3.5/operator.py - -erk52/FlaskDynamics -https://github.com/erk52/FlaskDynamics -Entry file: FlaskDynamics/view.py -Scanned: 2016-10-25 15:15:25.397556 -Vulnerability 1: -File: FlaskDynamics/view.py - > User input at line 18, trigger word ".data": - result = phasePlot(form.XPrime.data, form.YPrime.data) -Reassigned in: - File: FlaskDynamics/view.py - > Line 20: result = None -File: FlaskDynamics/view.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new_view.html',form=form, result=result) - - - -KentaYamada/flaskr2 -https://github.com/KentaYamada/flaskr2 -Entry file: flaskr2/__init__.py -Scanned: 2016-10-25 15:15:26.716419 -No vulnerabilities found. - - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/MyFirstWebServer/app/__init__.py -Scanned: 2016-10-25 15:15:35.049583 -Vulnerability 1: -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > User input at line 15, trigger word ".data": - name = form.name.data -Reassigned in: - File: FlaskWeb/MyFirstWebServer/app/main/views.py - > Line 12: name = None -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name) - - - -DaBaiLi/FlaskBlog -https://github.com/DaBaiLi/FlaskBlog -Entry file: FlaskBlog/app/__init__.py -Scanned: 2016-10-25 15:15:36.615396 -Vulnerability 1: -File: FlaskBlog/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 26: posts = pagination.items - File: FlaskBlog/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: FlaskBlog/app/main/views.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 35: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 38: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 3: -File: FlaskBlog/app/main/views.py - > User input at line 98, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 100: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: FlaskBlog/app/main/views.py - > Line 102: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 105: comments = pagination.items - File: FlaskBlog/app/main/views.py - > Line 97: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskBlog/app/main/views.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: FlaskBlog/app/main/views.py - > User input at line 131, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 132: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 135: comments = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 136, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -zhouyang2640/FlaskInit -https://github.com/zhouyang2640/FlaskInit -Entry file: FlaskInit/hello.py -Scanned: 2016-10-25 15:15:37.967707 -No vulnerabilities found. - - -rmGuarachi/flaskTutorial -https://github.com/rmGuarachi/flaskTutorial -Entry file: flaskTutorial/webapp.py -Scanned: 2016-10-25 15:15:39.274791 -No vulnerabilities found. - - -Thetides/FlaskyTut -https://github.com/Thetides/FlaskyTut -Entry file: FlaskyTut/app.py -Scanned: 2016-10-25 15:15:40.515106 -No vulnerabilities found. - - -cs207-project/FlaskAPI -https://github.com/cs207-project/FlaskAPI -Entry file: FlaskAPI/app.py -Scanned: 2016-10-25 15:15:48.367416 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -tajihiro/FlaskBluemix -https://github.com/tajihiro/FlaskBluemix -Entry file: FlaskBluemix/index.py -Scanned: 2016-10-25 15:15:49.658512 -No vulnerabilities found. - - -s3c0nDD/FlaskTutorial -https://github.com/s3c0nDD/FlaskTutorial -Entry file: FlaskTutorial/app/__init__.py -Scanned: 2016-10-25 15:15:50.881826 -No vulnerabilities found. - - -HaarisKhan/FlaskDemos -https://github.com/HaarisKhan/FlaskDemos -Entry file: None -Scanned: 2016-10-25 15:15:57.655914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hamartia0/FlaskWeb -https://github.com/hamartia0/FlaskWeb -Entry file: FlaskWeb/web3b.py -Scanned: 2016-10-25 15:16:05.250623 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -prrateekk/FlaskTesting -https://github.com/prrateekk/FlaskTesting -Entry file: FlaskTesting/hello.py -Scanned: 2016-10-25 15:16:11.799176 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTesting/venv/lib/python2.7/sre_compile.py - -kolapapa/flasky2 -https://github.com/kolapapa/flasky2 -Entry file: flasky2/app/__init__.py -Scanned: 2016-10-25 15:16:13.244672 -No vulnerabilities found. - - -mion00/flaskSQLAlchemy -https://github.com/mion00/flaskSQLAlchemy -Entry file: flaskSQLAlchemy/app.py -Scanned: 2016-10-25 15:16:14.656427 -Vulnerability 1: -File: flaskSQLAlchemy/app.py - > User input at line 32, trigger word "get(": - service = request.args.get('service') -File: flaskSQLAlchemy/app.py - > reaches line 34, trigger word "filter(": - users = User.query.filter(User.json.has_key(service)).all() - - - -gnu4cn/flaskLearnings -https://github.com/gnu4cn/flaskLearnings -Entry file: flaskLearnings/demos/request_attributes.py -Scanned: 2016-10-25 15:16:25.535869 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -argenis2021/FlaskTutorial -https://github.com/argenis2021/FlaskTutorial -Entry file: FlaskTutorial/app/__init__.py -Scanned: 2016-10-25 15:16:27.284016 -No vulnerabilities found. - - -ZaighumRajput/flaskPractice -https://github.com/ZaighumRajput/flaskPractice -Entry file: flaskPractice/chapter2/hello.py -Scanned: 2016-10-25 15:16:28.771838 -No vulnerabilities found. - - -GriMel/FlaskFirst -https://github.com/GriMel/FlaskFirst -Entry file: FlaskFirst/app/__init__.py -Scanned: 2016-10-25 15:16:30.043183 -No vulnerabilities found. - - -pepemontana7/flaskFinal -https://github.com/pepemontana7/flaskFinal -Entry file: flaskFinal/firstapp/hello.py -Scanned: 2016-10-25 15:16:31.300360 -No vulnerabilities found. - - -KotiyaSenya/FlaskLearn -https://github.com/KotiyaSenya/FlaskLearn -Entry file: FlaskLearn/flask_learn/__init__.py -Scanned: 2016-10-25 15:16:32.845999 -Vulnerability 1: -File: FlaskLearn/flask_learn/main/views/index.py - > User input at line 10, trigger word "get(": - user_agent = request.headers.get('User-Agent') -File: FlaskLearn/flask_learn/main/views/index.py - > reaches line 11, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user_agent=user_agent, current_time=datetime.utcnow()) - - - -johnwheeler/flask-ask -https://github.com/johnwheeler/flask-ask -Entry file: flask-ask/samples/session/session.py -Scanned: 2016-10-25 15:16:36.367252 -Vulnerability 1: -File: flask-ask/samples/session/session.py - > User input at line 39, trigger word "get(": - color = session.attributes.get(COLOR_KEY) -Reassigned in: - File: flask-ask/samples/session/session.py - > Line 42: ret_MAYBE_FUNCTION_NAME = statement(statement_text).simple_card(card_title, statement_text) - File: flask-ask/samples/session/session.py - > Line 45: ret_MAYBE_FUNCTION_NAME = question(question_text).reprompt(question_text).simple_card(card_title, question_text) -File: flask-ask/samples/session/session.py - > reaches line 41, trigger word "render_template(": - statement_text = render_template('known_color_bye',color=color) - - - -shn7798/FlaskZhihu -https://github.com/shn7798/FlaskZhihu -Entry file: FlaskZhihu/tests/test_orm.py -Scanned: 2016-10-25 15:16:38.118185 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhangsen1992/flask -https://github.com/zhangsen1992/flask -Entry file: None -Scanned: 2016-10-25 15:16:39.116377 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -luojiyin1987/flask -https://github.com/luojiyin1987/flask -Entry file: None -Scanned: 2016-10-25 15:16:39.610964 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chrislinan/flask -https://github.com/chrislinan/flask -Entry file: None -Scanned: 2016-10-25 15:16:40.125537 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lagougou/flask -https://github.com/lagougou/flask -Entry file: None -Scanned: 2016-10-25 15:16:40.629867 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ryanmthompson/flask -https://github.com/ryanmthompson/flask -Entry file: None -Scanned: 2016-10-25 15:16:41.145380 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mufflerman/Flask -https://github.com/Mufflerman/Flask -Entry file: None -Scanned: 2016-10-25 15:16:41.673546 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tkirkland/Flask -https://github.com/tkirkland/Flask -Entry file: None -Scanned: 2016-10-25 15:16:42.193258 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -glrh111/flask -https://github.com/glrh111/flask -Entry file: None -Scanned: 2016-10-25 15:16:42.706399 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -parampara/flask -https://github.com/parampara/flask -Entry file: None -Scanned: 2016-10-25 15:16:43.249071 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -maxweiber/flask -https://github.com/maxweiber/flask -Entry file: None -Scanned: 2016-10-25 15:16:43.779490 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rakeshkirola/Flask -https://github.com/rakeshkirola/Flask -Entry file: None -Scanned: 2016-10-25 15:16:44.301388 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -caibitim/Flask -https://github.com/caibitim/Flask -Entry file: None -Scanned: 2016-10-25 15:16:44.819122 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -syntaxSizer/flask -https://github.com/syntaxSizer/flask -Entry file: None -Scanned: 2016-10-25 15:16:45.367726 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gabrielecker/Flask -https://github.com/gabrielecker/Flask -Entry file: None -Scanned: 2016-10-25 15:16:49.906554 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Dianalim209/flask -https://github.com/Dianalim209/flask -Entry file: None -Scanned: 2016-10-25 15:16:50.507169 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -moonoroman/flask -https://github.com/moonoroman/flask -Entry file: None -Scanned: 2016-10-25 15:16:52.017605 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ekusy/flask -https://github.com/ekusy/flask -Entry file: None -Scanned: 2016-10-25 15:16:58.569100 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gaurikatyagi/Flask -https://github.com/gaurikatyagi/Flask -Entry file: None -Scanned: 2016-10-25 15:17:06.101130 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mrffrm1234/flask -https://github.com/mrffrm1234/flask -Entry file: None -Scanned: 2016-10-25 15:17:12.621167 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rockaja/flask -https://github.com/rockaja/flask -Entry file: None -Scanned: 2016-10-25 15:17:14.138502 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bhops/flask -https://github.com/bhops/flask -Entry file: None -Scanned: 2016-10-25 15:17:15.654409 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ooohiroyukiooo/flask -https://github.com/ooohiroyukiooo/flask -Entry file: None -Scanned: 2016-10-25 15:17:26.169061 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -miguelgrinberg/flack -https://github.com/miguelgrinberg/flack -Entry file: flack/flack/__init__.py -Scanned: 2016-10-25 15:17:29.861562 -Vulnerability 1: -File: flack/flack/api/messages.py - > User input at line 36, trigger word "get(": - since = int(request.args.get('updated_since', '0')) -Reassigned in: - File: flack/flack/api/messages.py - > Line 40: since = day_ago -File: flack/flack/api/messages.py - > reaches line 41, trigger word "filter(": - msgs = Message.query.filter(Message.updated_at > since).order_by(Message.updated_at) - -Vulnerability 2: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 3: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 4: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - -Vulnerability 5: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - - - -enginebai/PyMessager -https://github.com/enginebai/PyMessager -Entry file: PyMessager/api.py -Scanned: 2016-10-25 15:17:31.220108 -No vulnerabilities found. - - -TwilioDevEd/sms2fa-flask -https://github.com/TwilioDevEd/sms2fa-flask -Entry file: sms2fa-flask/sms2fa_flask/__init__.py -Scanned: 2016-10-25 15:17:35.927368 -Vulnerability 1: -File: sms2fa-flask/sms2fa_flask/views.py - > User input at line 51, trigger word "get(": - user = User.query.get(session.get('user_email', '')) or abort(401) -Reassigned in: - File: sms2fa-flask/sms2fa_flask/views.py - > Line 56: ret_MAYBE_FUNCTION_NAME = redirect(url_for('secret_page')) -File: sms2fa-flask/sms2fa_flask/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirmation.html',user=user) - - - -RoseOu/Flask-learning -https://github.com/RoseOu/Flask-learning -Entry file: None -Scanned: 2016-10-25 15:17:44.111565 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -YUX-IO/gossl -https://github.com/YUX-IO/gossl -Entry file: gossl/app.py -Scanned: 2016-10-25 15:17:53.143134 -No vulnerabilities found. - - -yetship/the-way-to-flask -https://github.com/yetship/the-way-to-flask -Entry file: the-way-to-flask/code/application/__init__.py -Scanned: 2016-10-25 15:17:56.449644 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -JoshData/parsey-mcparseface-server -https://github.com/JoshData/parsey-mcparseface-server -Entry file: parsey-mcparseface-server/server.py -Scanned: 2016-10-25 15:17:57.833487 -No vulnerabilities found. - - -YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -https://github.com/YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -Entry file: uwsgi-nginx-flask-docker-for-sinaimg/flask/app/main.py -Scanned: 2016-10-25 15:18:00.765366 -No vulnerabilities found. - - -patternexon/hello -https://github.com/patternexon/hello -Entry file: hello/hello.py -Scanned: 2016-10-25 15:18:09.224356 -No vulnerabilities found. - - -yassipo/webservice -https://github.com/yassipo/webservice -Entry file: webservice/app.py -Scanned: 2016-10-25 15:18:10.548370 -No vulnerabilities found. - - -tweddielin/flask-imsearch -https://github.com/tweddielin/flask-imsearch -Entry file: None -Scanned: 2016-10-25 15:22:33.344981 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tweddielin/flask-imsearch. - -datademofun/heroku-basic-flask -https://github.com/datademofun/heroku-basic-flask -Entry file: heroku-basic-flask/app.py -Scanned: 2016-10-25 15:22:38.270963 -No vulnerabilities found. - - -simonbilskyrollins/Flask-Workshop -https://github.com/simonbilskyrollins/Flask-Workshop -Entry file: Flask-Workshop/step3.py -Scanned: 2016-10-25 15:22:39.583731 -No vulnerabilities found. - - -amey-sam/Flask-MailGun -https://github.com/amey-sam/Flask-MailGun -Entry file: None -Scanned: 2016-10-25 15:22:41.411921 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amey-sam/Flask-MailGun. - -hadesong/flask_weather -https://github.com/hadesong/flask_weather -Entry file: flask_weather/app_package/__init__.py -Scanned: 2016-10-25 15:22:43.897356 -No vulnerabilities found. - - -YUX-IO/flask-python351 -https://github.com/YUX-IO/flask-python351 -Entry file: flask-python351/sample-app/app.py -Scanned: 2016-10-25 15:22:45.245749 -No vulnerabilities found. - - -DullSmile/flasky -https://github.com/DullSmile/flasky -Entry file: None -Scanned: 2016-10-25 15:22:45.770694 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -geochilmaru/flaskr -https://github.com/geochilmaru/flaskr -Entry file: None -Scanned: 2016-10-25 15:22:46.326243 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/geochilmaru/flaskr. - -hejiangping/flaskr -https://github.com/hejiangping/flaskr -Entry file: None -Scanned: 2016-10-25 15:22:46.850734 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hejiangping/flaskr. - -ealesid/flaskbook -https://github.com/ealesid/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-25 15:22:58.574105 -Vulnerability 1: -File: flaskbook/app/main/views.py - > User input at line 19, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 27: pagination = query.order_by('-timestamp').paginate(page,per_page=current_app.config['FLASKBOOK_POSTS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 30: posts = pagination.items - File: flaskbook/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskbook/app/main/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskbook/app/main/views.py - > User input at line 22, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 20: show_followed = False - File: flaskbook/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskbook/app/main/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskbook/app/main/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 40: pagination = Post.objects(author_id=user).order_by('-timestamp').paginate(page,per_page=current_app.config['FLASKBOOK_POSTS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 43: posts = pagination.items -File: flaskbook/app/main/views.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskbook/app/main/views.py - > User input at line 118, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 120: page = Comment.objects(post_id=post).count() - 1 // current_app.config['FLASKBOOK_COMMENTS_PER_PAGE'] + 1 - File: flaskbook/app/main/views.py - > Line 121: pagination = Comment.objects(post_id=post).order_by('-timestamp').paginate(page,per_page=current_app.config['FLASKBOOK_COMMENTS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 124: comments = pagination.items - File: flaskbook/app/main/views.py - > Line 117: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=1)) -File: flaskbook/app/main/views.py - > reaches line 125, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskbook/app/main/views.py - > User input at line 183, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 184: pagination = Follow.objects(followed=user).paginate(page,per_page=current_app.config['FLASKBOOK_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 187: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskbook/app/main/views.py - > Line 182: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskbook/app/main/views.py - > reaches line 189, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskbook/app/main/views.py - > User input at line 199, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 200: pagination = Follow.objects(follower=user).paginate(page,per_page=current_app.config['FLASKBOOK_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 203: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskbook/app/main/views.py - > Line 198: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskbook/app/main/views.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flaskbook/app/main/views.py - > User input at line 229, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskbook/app/main/views.py - > Line 230: pagination = Comment.objects.order_by('-timestamp').paginate(page,per_page=current_app.config['FLASKBOOK_COMMENTS_PER_PAGE'], error_out=False) - File: flaskbook/app/main/views.py - > Line 233: comments = pagination.items -File: flaskbook/app/main/views.py - > reaches line 234, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -jake-bladt/flasksandbox -https://github.com/jake-bladt/flasksandbox -Entry file: flasksandbox/app/app.py -Scanned: 2016-10-25 15:23:00.114722 -Vulnerability 1: -File: flasksandbox/app/helpers.py - > User input at line 4, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flasksandbox/app/helpers.py - > Line 6: page = int(page) - File: flasksandbox/app/helpers.py - > Line 8: page = 1 - File: flasksandbox/app/helpers.py - > Line 9: object_list = query.paginate(page, paginate_by) -File: flasksandbox/app/helpers.py - > reaches line 10, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template_name,object_list=object_list, context) - - - -yoophi/flaskygram -https://github.com/yoophi/flaskygram -Entry file: None -Scanned: 2016-10-25 15:23:02.115586 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yoophi/flaskygram. - -Ifresher/Flaskr -https://github.com/Ifresher/Flaskr -Entry file: Flaskr/Flask.py -Scanned: 2016-10-25 15:23:03.456749 -No vulnerabilities found. - - -andresmguk/flasktaskr -https://github.com/andresmguk/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:23:04.008346 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minc-yang/flaskdemo -https://github.com/minc-yang/flaskdemo -Entry file: flaskdemo/flask_app2/my_app/__init__.py -Scanned: 2016-10-25 15:23:06.572611 -Vulnerability 1: -File: flaskdemo/flask_app2/my_app/product/views.py - > User input at line 17, trigger word "get(": - product = PRODUCTS.get(key) -File: flaskdemo/flask_app2/my_app/product/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('product.html',product=product) - - - -zmrow/flasktaskr -https://github.com/zmrow/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:23:07.098425 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jpatcourtney/flasktasker -https://github.com/Jpatcourtney/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-25 15:23:08.598119 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -liyocee/flaskr -https://github.com/liyocee/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:09.124422 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/liyocee/flaskr. - -yanni-zhang/flaskweb -https://github.com/yanni-zhang/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-25 15:23:11.441169 -Vulnerability 1: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 19, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 39, trigger word "url_for(": - prev = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 8: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 42, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 43, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 15, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 18, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskweb/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 22: show_followed = False - File: flaskweb/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskweb/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 33: posts = pagination.items - File: flaskweb/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskweb/app/main/views.py - > User input at line 56, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 57: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 60: posts = pagination.items -File: flaskweb/app/main/views.py - > reaches line 61, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flaskweb/app/main/views.py - > User input at line 117, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 119: page = post.comments.count() - 1 / current_app.config['COMMENTS_PER_PAGE'] + 1 - File: flaskweb/app/main/views.py - > Line 120: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 123: comments = pagination.items - File: flaskweb/app/main/views.py - > Line 116: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskweb/app/main/views.py - > reaches line 124, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], comments=comments, form=form, pagination=pagination) - -Vulnerability 20: -File: flaskweb/app/main/views.py - > User input at line 179, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 180: pagination = user.followers.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 183: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 178: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 185, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注我的人', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flaskweb/app/main/views.py - > User input at line 195, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 196: pagination = user.followed.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 199: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 194: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 201, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='我关注的人', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskweb/app/main/views.py - > User input at line 209, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 210: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 213: comments = pagination.items -File: flaskweb/app/main/views.py - > reaches line 214, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -googoos/flasktaskr -https://github.com/googoos/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:23:11.984073 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lg31415/flaskr -https://github.com/lg31415/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:12.524116 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lg31415/flaskr. - -AliceLanniste/Flasky -https://github.com/AliceLanniste/Flasky -Entry file: None -Scanned: 2016-10-25 15:23:14.192132 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AliceLanniste/Flasky. - -efrainmunoz/flasktaskr -https://github.com/efrainmunoz/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:23:14.716093 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HansKramer/flaskr -https://github.com/HansKramer/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:15.238881 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HansKramer/flaskr. - -shorian/flaskr -https://github.com/shorian/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:15.992354 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shorian/flaskr. - -Jpatcourtney/flasktaskr -https://github.com/Jpatcourtney/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:23:16.523178 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -janejin8829/flaskangular- -https://github.com/janejin8829/flaskangular- -Entry file: None -Scanned: 2016-10-25 15:23:17.793944 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/janejin8829/flaskangular-. - -ljxxcaijing/flaskblog -https://github.com/ljxxcaijing/flaskblog -Entry file: None -Scanned: 2016-10-25 15:23:18.331813 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ljxxcaijing/flaskblog. - -mmoran0032/flaskwork -https://github.com/mmoran0032/flaskwork -Entry file: flaskwork/hello.py -Scanned: 2016-10-25 15:23:35.666066 -No vulnerabilities found. - - -Maxwell-Ying/flaskbook -https://github.com/Maxwell-Ying/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-25 15:23:37.002436 -Vulnerability 1: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 2: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 3: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 4: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 5: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 6: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 7: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 8: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 9: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 10: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 11: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 12: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 13: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 14: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 15: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 16: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 17: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 18: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 19: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 20: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 21: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 22: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 23: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 24: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 25: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 26: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 27: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 28: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 29: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 30: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 31: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 32: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 33: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 34: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 35: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 36: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 37: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 38: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 39: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 40: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 41: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 42: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 43: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 44: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 45: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 46: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 47: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 48: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 49: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 50: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 51: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 52: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 53: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 54: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 55: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 56: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - - - -bewithgaurav/flaskmap -https://github.com/bewithgaurav/flaskmap -Entry file: flaskmap/__init__.py -Scanned: 2016-10-25 15:23:53.582059 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ansel333/flaskr -https://github.com/ansel333/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:54.161866 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ansel333/flaskr. - -ojgoyal/flaskr -https://github.com/ojgoyal/flaskr -Entry file: None -Scanned: 2016-10-25 15:23:54.690187 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ojgoyal/flaskr. - -ordenador/flaskrestful -https://github.com/ordenador/flaskrestful -Entry file: flaskrestful/flaskrestful.py -Scanned: 2016-10-25 15:24:05.454671 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yvonnendutaw/flaskbook -https://github.com/yvonnendutaw/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-25 15:25:07.541735 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhangjiewang/flasky -https://github.com/zhangjiewang/flasky -Entry file: None -Scanned: 2016-10-25 15:25:08.076559 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kathure/flasky -https://github.com/Kathure/flasky -Entry file: None -Scanned: 2016-10-25 15:25:08.597626 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -maxweiber/flaskr -https://github.com/maxweiber/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:09.119481 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/maxweiber/flaskr. - -zjl1110/flaskdemo -https://github.com/zjl1110/flaskdemo -Entry file: None -Scanned: 2016-10-25 15:25:17.353964 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -EricGarza/flaskbyexample -https://github.com/EricGarza/flaskbyexample -Entry file: flaskbyexample/app.py -Scanned: 2016-10-25 15:25:27.144835 -No vulnerabilities found. - - -hoorn91/flaskproject -https://github.com/hoorn91/flaskproject -Entry file: flaskproject/app/hello.py -Scanned: 2016-10-25 15:25:28.509811 -Vulnerability 1: -File: flaskproject/app/hello.py - > User input at line 70, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flaskproject/app/hello.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -hongmaoxiao/flasky -https://github.com/hongmaoxiao/flasky -Entry file: None -Scanned: 2016-10-25 15:25:29.036716 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jiuhuandao/Flaskr -https://github.com/jiuhuandao/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 15:25:30.510178 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -nrugas/flasky -https://github.com/nrugas/flasky -Entry file: None -Scanned: 2016-10-25 15:25:31.049116 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fromzeroedu/flaskbook -https://github.com/fromzeroedu/flaskbook -Entry file: flaskbook/application.py -Scanned: 2016-10-25 15:25:33.651484 -Vulnerability 1: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('home/home.html') -File: flaskbook/home/views.py - > reaches line 15, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 2: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('home/home.html') -File: flaskbook/home/views.py - > reaches line 19, trigger word "filter(": - feed_messages = Feed.objects.filter(user=user).order_by('-create_date')[10] - -Vulnerability 3: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('home/home.html') -File: flaskbook/home/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home/feed_home.html',user=user, form=form, feed_messages=feed_messages) - -Vulnerability 4: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 14, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 5: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 41, trigger word "render_template(": - body_html = render_template('mail/relationship/added_friend.html',from_user=logged_user, to_user=to_user) - -Vulnerability 6: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 46, trigger word "render_template(": - body_text = render_template('mail/relationship/added_friend.txt',from_user=logged_user, to_user=to_user) - -Vulnerability 7: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 67, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 8: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 74, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 9: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 77, trigger word "filter(": - reverse_rel = Relationship.objects.filter(from_user=to_user, to_user=logged_user).delete() - -Vulnerability 10: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 91, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 11: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 99, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 12: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 102, trigger word "filter(": - reverse_rel = Relationship.objects.filter(from_user=to_user, to_user=logged_user).delete() - -Vulnerability 13: -File: flaskbook/relationship/views.py - > User input at line 123, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 127: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 123, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 14: -File: flaskbook/relationship/views.py - > User input at line 123, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 127: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 131, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 15: -File: flaskbook/user/views.py - > User input at line 25, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 27: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 40, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 16: -File: flaskbook/user/views.py - > User input at line 27, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 40, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 17: -File: flaskbook/user/views.py - > User input at line 25, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 27: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 41, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 18: -File: flaskbook/user/views.py - > User input at line 27, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 41, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 19: -File: flaskbook/user/views.py - > User input at line 57, trigger word ".data": - user = User.objects.filter(username=form.username.data).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 70: user = None -File: flaskbook/user/views.py - > reaches line 57, trigger word "filter(": - user = User.objects.filter(username=form.username.data).first() - -Vulnerability 20: -File: flaskbook/user/views.py - > User input at line 64, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flaskbook/user/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home_app.home')) - File: flaskbook/user/views.py - > Line 73: ret_MAYBE_FUNCTION_NAME = render_template('user/login.html',form=form, error=error) -File: flaskbook/user/views.py - > reaches line 66, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 21: -File: flaskbook/user/views.py - > User input at line 92, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 84: logged_user = None - File: flaskbook/user/views.py - > Line 93: rel = Relationship.get_relationship(logged_user, user) - File: flaskbook/user/views.py - > Line 85: rel = None -File: flaskbook/user/views.py - > reaches line 92, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 22: -File: flaskbook/user/views.py - > User input at line 92, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 84: logged_user = None - File: flaskbook/user/views.py - > Line 93: rel = Relationship.get_relationship(logged_user, user) - File: flaskbook/user/views.py - > Line 85: rel = None -File: flaskbook/user/views.py - > reaches line 118, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/profile.html',user=user, logged_user=logged_user, rel=rel, friends=friends, friends_total=friends_total, friends_page=friends_page, form=form, profile_messages=profile_messages) - -Vulnerability 23: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 136, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 24: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 148, trigger word "filter(": - if User.objects.filter(username=form.username.data.lower()).first(): - -Vulnerability 25: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 154, trigger word "filter(": - if User.objects.filter(email=form.email.data.lower()).first(): - -Vulnerability 26: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 168, trigger word "render_template(": - body_html = render_template('mail/user/change_email.html',user=user) - -Vulnerability 27: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 169, trigger word "render_template(": - body_text = render_template('mail/user/change_email.txt',user=user) - -Vulnerability 28: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/edit.html',form=form, error=error, message=message, user=user) - -Vulnerability 29: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 203, trigger word "filter(": - user = User.objects.filter(email=form.email.data.lower()).first() - -Vulnerability 30: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 212, trigger word "render_template(": - body_html = render_template('mail/user/password_reset.html',user=user) - -Vulnerability 31: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 213, trigger word "render_template(": - body_text = render_template('mail/user/password_reset.txt',user=user) - -Vulnerability 32: -File: flaskbook/user/views.py - > User input at line 261, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -File: flaskbook/user/views.py - > reaches line 261, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 33: -File: flaskbook/feed/views.py - > User input at line 119, trigger word "get(": - from_user = User.objects.get(username=session.get('username')) -File: flaskbook/feed/views.py - > reaches line 122, trigger word "filter(": - existing_like = Message.objects.filter(parent=message_id, message_type=LIKE, from_user=from_user).count() - - - -yanni-zh/flaskweb -https://github.com/yanni-zh/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-25 15:25:37.997444 -Vulnerability 1: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskweb/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 18: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 19, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskweb/app/api_1_0/users.py - > User input at line 13, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 14: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 16: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 17: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 20: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 39, trigger word "url_for(": - prev = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 8: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 42, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskweb/app/api_1_0/users.py - > User input at line 33, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 34: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 36: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 37: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 40: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 43, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 15, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 18, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskweb/app/api_1_0/comments.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 10: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 12: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 13: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 16: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 40, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 43, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskweb/app/api_1_0/comments.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 35: pagination = post.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 37: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 38: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 41: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 44, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskweb/app/main/views.py - > User input at line 41, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 39: show_followed = False -File: flaskweb/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, Post=Post, amount=amount, comments=comments, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskweb/app/main/views.py - > User input at line 46, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 47: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 50: posts = pagination.items -File: flaskweb/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, Post=Post, amount=amount, comments=comments, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskweb/app/main/views.py - > User input at line 81, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 82: posts_pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 85: posts = posts_pagination.items - File: flaskweb/app/main/views.py - > Line 86: comments_pagination = user.comments.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 89: comments = comments_pagination.items -File: flaskweb/app/main/views.py - > reaches line 90, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, Post=Post, posts_pagination=posts_pagination, comments=comments, comments_pagination=comments_pagination) - -Vulnerability 19: -File: flaskweb/app/main/views.py - > User input at line 144, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 155: ret_MAYBE_FUNCTION_NAME = render_template('add_post.html',form=form, title='添加文章') -File: flaskweb/app/main/views.py - > reaches line 154, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 20: -File: flaskweb/app/main/views.py - > User input at line 144, trigger word ".data": - post = Post(title=form.title.data, body=form.body.data, author=current_user._get_current_object()) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 155: ret_MAYBE_FUNCTION_NAME = render_template('add_post.html',form=form, title='添加文章') -File: flaskweb/app/main/views.py - > reaches line 154, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) - -Vulnerability 21: -File: flaskweb/app/main/views.py - > User input at line 200, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 202: page = post.comments.count() - 1 / current_app.config['COMMENTS_PER_PAGE'] + 1 - File: flaskweb/app/main/views.py - > Line 203: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 206: comments = pagination.items - File: flaskweb/app/main/views.py - > Line 199: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskweb/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',post=post, comments=comments, form=form, pagination=pagination) - -Vulnerability 22: -File: flaskweb/app/main/views.py - > User input at line 248, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 249: pagination = user.followers.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 252: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 247: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 254, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注我的人', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 23: -File: flaskweb/app/main/views.py - > User input at line 264, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 265: pagination = user.followed.paginate(page,per_page=current_app.config['FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 268: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 263: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 270, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='我关注的人', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 24: -File: flaskweb/app/main/views.py - > User input at line 309, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 310: pagination = category.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 313: posts = pagination.items -File: flaskweb/app/main/views.py - > reaches line 314, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',id=id, posts=posts, pagination=pagination, categories=categories, title=category.name) - - - -pcpianobar/flaskr -https://github.com/pcpianobar/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:38.523141 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pcpianobar/flaskr. - -mrdrms/flaskr -https://github.com/mrdrms/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:39.028877 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrdrms/flaskr. - -fburkitt/flasktaskr -https://github.com/fburkitt/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:25:39.539458 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -asimonia/flasktaskr -https://github.com/asimonia/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:25:40.052994 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chestnutme/flaskie -https://github.com/chestnutme/flaskie -Entry file: flaskie/app/__init__.py -Scanned: 2016-10-25 15:25:42.314183 -Vulnerability 1: -File: flaskie/app/main/views.py - > User input at line 18, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 26: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 29: posts = pagination.items - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskie/app/main/views.py - > User input at line 21, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskie/app/main/views.py - > Line 19: show_followed = False - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskie/app/main/views.py - > User input at line 36, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 37: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 39: posts = pagination.items -File: flaskie/app/main/views.py - > reaches line 40, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskie/app/main/views.py - > User input at line 95, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 97: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskie/app/main/views.py - > Line 99: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 102: comments = pagination.items - File: flaskie/app/main/views.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskie/app/main/views.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskie/app/main/views.py - > User input at line 158, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 159: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 162: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 157: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 164, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskie/app/main/views.py - > User input at line 174, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 175: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE']) - File: flaskie/app/main/views.py - > Line 177: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 173: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -fengyu225/flaskr -https://github.com/fengyu225/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:42.857115 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fengyu225/flaskr. - -jbussdieker/flaskr -https://github.com/jbussdieker/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:43.419094 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jbussdieker/flaskr. - -sisyphus1993/flaskreview -https://github.com/sisyphus1993/flaskreview -Entry file: flaskreview/app/__init__.py -Scanned: 2016-10-25 15:25:45.295532 -Vulnerability 1: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskreview/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskreview/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskreview/app/api_1_0/posts.py - > Line 19: next = None -File: flaskreview/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskreview/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 20: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 23: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskreview/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskreview/app/api_1_0/users.py - > Line 42: prev = None - File: flaskreview/app/api_1_0/users.py - > Line 45: next = None -File: flaskreview/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskreview/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 18: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskreview/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskreview/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskreview/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskreview/app/api_1_0/comments.py - > Line 46: next = None -File: flaskreview/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskreview/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 31: posts = pagination.items - File: flaskreview/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskreview/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 22: show_followed = False - File: flaskreview/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskreview/app/main/views.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 40: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 42: posts = pagination.items -File: flaskreview/app/main/views.py - > reaches line 43, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flaskreview/app/main/views.py - > User input at line 102, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 104: page = post.comments.count() - 1 // 20 + 1 - File: flaskreview/app/main/views.py - > Line 105: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 107: comments = pagination.items - File: flaskreview/app/main/views.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskreview/app/main/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flaskreview/app/main/views.py - > User input at line 167, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 168: pagination = user.followers.paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 170: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskreview/app/main/views.py - > Line 166: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 172, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flaskreview/app/main/views.py - > User input at line 183, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 184: pagination = user.followed.paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 186: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskreview/app/main/views.py - > Line 182: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskreview/app/main/views.py - > reaches line 188, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskreview/app/main/views.py - > User input at line 213, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskreview/app/main/views.py - > Line 214: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=20, error_out=False) - File: flaskreview/app/main/views.py - > Line 217: comments = pagination.items -File: flaskreview/app/main/views.py - > reaches line 218, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -richardqlin/flaskralchemy -https://github.com/richardqlin/flaskralchemy -Entry file: None -Scanned: 2016-10-25 15:25:46.733171 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flaskralchemy. - -mikomwang/flaskr -https://github.com/mikomwang/flaskr -Entry file: None -Scanned: 2016-10-25 15:25:47.253426 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mikomwang/flaskr. - -anngle/flaskweb -https://github.com/anngle/flaskweb -Entry file: flaskweb/hello2.py -Scanned: 2016-10-25 15:25:48.880202 -Vulnerability 1: -File: flaskweb/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 22: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=3, error_out=False) - File: flaskweb/app/main/views.py - > Line 24: posts = pagination.items - File: flaskweb/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) - File: flaskweb/app/main/views.py - > Line 20: posts = Post.query.order_by(Post.timestamp.desc()).all() -File: flaskweb/app/main/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - - - -Aprimus1/flasktaskr -https://github.com/Aprimus1/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:25:49.400350 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cuttlesoft/flask-bitmapist -https://github.com/cuttlesoft/flask-bitmapist -Entry file: flask-bitmapist/tests/conftest.py -Scanned: 2016-10-25 15:25:54.896809 -No vulnerabilities found. - - -Riffstation/flaskutilsexample -https://github.com/Riffstation/flaskutilsexample -Entry file: flaskutilsexample/src/app/__init__.py -Scanned: 2016-10-25 15:25:56.355993 -No vulnerabilities found. - - -meloalright/flask -https://github.com/meloalright/flask -Entry file: None -Scanned: 2016-10-25 15:25:57.390782 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -paulgoblin/flask -https://github.com/paulgoblin/flask -Entry file: None -Scanned: 2016-10-25 15:26:06.924516 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tayan-serna/flask -https://github.com/tayan-serna/flask -Entry file: None -Scanned: 2016-10-25 15:26:08.464569 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dolv/Flask -https://github.com/dolv/Flask -Entry file: None -Scanned: 2016-10-25 15:26:08.995084 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Aslkayn/flask -https://github.com/Aslkayn/flask -Entry file: None -Scanned: 2016-10-25 15:26:09.504204 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mamun-dueee/flask -https://github.com/Mamun-dueee/flask -Entry file: None -Scanned: 2016-10-25 15:26:10.020122 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gisumwa/Flask -https://github.com/gisumwa/Flask -Entry file: None -Scanned: 2016-10-25 15:26:18.585266 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhouleian/flask -https://github.com/zhouleian/flask -Entry file: None -Scanned: 2016-10-25 15:26:28.116421 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -virtue1990/flask -https://github.com/virtue1990/flask -Entry file: None -Scanned: 2016-10-25 15:26:29.641280 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dhaval38/Flask -https://github.com/dhaval38/Flask -Entry file: None -Scanned: 2016-10-25 15:26:30.186137 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nppat/Flask -https://github.com/nppat/Flask -Entry file: None -Scanned: 2016-10-25 15:26:31.818793 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dmitry-moroz/flask -https://github.com/dmitry-moroz/flask -Entry file: None -Scanned: 2016-10-25 15:26:32.327809 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TeamDroneFireman/Flask -https://github.com/TeamDroneFireman/Flask -Entry file: None -Scanned: 2016-10-25 15:26:34.849130 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sushmit86/Flask -https://github.com/sushmit86/Flask -Entry file: None -Scanned: 2016-10-25 15:26:39.394854 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vorkos/flask -https://github.com/vorkos/flask -Entry file: None -Scanned: 2016-10-25 15:26:39.923482 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -timmyreilly/intro-to-flask -https://github.com/timmyreilly/intro-to-flask -Entry file: intro-to-flask/hello.py -Scanned: 2016-10-25 15:26:43.146695 -No vulnerabilities found. - - -Revolution1/Flask-WhooshAlchemyPlus -https://github.com/Revolution1/Flask-WhooshAlchemyPlus -Entry file: Flask-WhooshAlchemyPlus/test/test_all.py -Scanned: 2016-10-25 15:26:44.943717 -No vulnerabilities found. - - -sloria/flask-konch -https://github.com/sloria/flask-konch -Entry file: flask-konch/example_app/hello.py -Scanned: 2016-10-25 15:26:46.241252 -No vulnerabilities found. - - -cloverstd/flask-wechatpy -https://github.com/cloverstd/flask-wechatpy -Entry file: flask-wechatpy/demo.py -Scanned: 2016-10-25 15:26:48.115713 -No vulnerabilities found. - - -postrational/rest_api_demo -https://github.com/postrational/rest_api_demo -Entry file: rest_api_demo/rest_api_demo/app.py -Scanned: 2016-10-25 15:26:50.112747 -Vulnerability 1: -File: rest_api_demo/rest_api_demo/api/blog/business.py - > User input at line 8, trigger word "get(": - category_id = data.get('category_id') -File: rest_api_demo/rest_api_demo/api/blog/business.py - > reaches line 9, trigger word "filter(": - category = Category.query.filter(Category.id == category_id).one() - -Vulnerability 2: -File: rest_api_demo/rest_api_demo/api/blog/business.py - > User input at line 19, trigger word "get(": - category_id = data.get('category_id') -File: rest_api_demo/rest_api_demo/api/blog/business.py - > reaches line 20, trigger word "filter(": - post.category = Category.query.filter(Category.id == category_id).one() - - - -patternexon/hello -https://github.com/patternexon/hello -Entry file: hello/hello.py -Scanned: 2016-10-25 15:26:57.850304 -No vulnerabilities found. - - -QuentinMoss/reimagined-computing-machine -https://github.com/QuentinMoss/reimagined-computing-machine -Entry file: reimagined-computing-machine/app/__init__.py -Scanned: 2016-10-25 15:26:59.195968 -No vulnerabilities found. - - -13923858795/Tutorial -https://github.com/13923858795/Tutorial -Entry file: Tutorial/my/app/__init__.py -Scanned: 2016-10-25 15:27:07.091368 -Vulnerability 1: -File: Tutorial/my/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 33: posts = pagination.items - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Tutorial/my/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 23: show_followed = False - File: Tutorial/my/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Tutorial/my/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 44: posts = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Tutorial/my/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 111: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Tutorial/my/app/main/views.py - > Line 113: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 116: comments = pagination.items - File: Tutorial/my/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Tutorial/my/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Tutorial/my/app/main/views.py - > User input at line 176, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 177: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 180: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 175: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Tutorial/my/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 194: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 197: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Tutorial/my/app/main/views.py - > Line 192: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Tutorial/my/app/main/views.py - > reaches line 199, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Tutorial/my/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Tutorial/my/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Tutorial/my/app/main/views.py - > Line 235: comments = pagination.items -File: Tutorial/my/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -szparag3/flask-hello-world -https://github.com/szparag3/flask-hello-world -Entry file: None -Scanned: 2016-10-25 15:27:14.631803 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DanceCats/DanceCat -https://github.com/DanceCats/DanceCat -Entry file: DanceCat/DanceCat/__init__.py -Scanned: 2016-10-25 15:27:21.006936 -Vulnerability 1: -File: DanceCat/DanceCat/Views.py - > User input at line 252, trigger word "form[": - triggered_job = QueryDataJob.query.get_or_404(request.form['id']) -Reassigned in: - File: DanceCat/DanceCat/Views.py - > Line 256: tracker = TrackJobRun(triggered_job.job_id) -File: DanceCat/DanceCat/Views.py - > reaches line 269, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('ack''tracker_id'Truetracker.track_job_run_id) - -Vulnerability 2: -File: DanceCat/DanceCat/Socket.py - > User input at line 45, trigger word "get(": - connection_id = received_data.get('connectionId', 0) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 55: running_connection = Connection.query.get(connection_id) - File: DanceCat/DanceCat/Socket.py - > Line 58: connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 3: -File: DanceCat/DanceCat/Socket.py - > User input at line 46, trigger word "get(": - query = received_data.get('query', '') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 4: -File: DanceCat/DanceCat/Socket.py - > User input at line 55, trigger word "get(": - running_connection = Connection.query.get(connection_id) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 58: connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 5: -File: DanceCat/DanceCat/Socket.py - > User input at line 58, trigger word "get(": - connector = DatabaseConnector(running_connection.type, running_connection.db_config_generator(),sql_data_style=True, dict_format=True, timeout=config.get('DB_TIMEOUT', 60)) -Reassigned in: - File: DanceCat/DanceCat/Socket.py - > Line 73: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''header''seq'0ret_dataconnector.columns_nameruntime) - File: DanceCat/DanceCat/Socket.py - > Line 81: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''data''seq''error''error_ext'-1'None'runtimestr(exception)[str(exception.trace_back)]) - File: DanceCat/DanceCat/Socket.py - > Line 90: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Connection not found!') - File: DanceCat/DanceCat/Socket.py - > Line 97: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Wrong data received!') - File: DanceCat/DanceCat/Socket.py - > Line 49: ret_MAYBE_FUNCTION_NAME = emit(Constants.WS_QUERY_SEND, 'status''seq''error'-1runtime'Query is required!') -File: DanceCat/DanceCat/Socket.py - > reaches line 68, trigger word "execute(": - connector.execute(query) - -Vulnerability 6: -File: DanceCat/DanceCat/JobWorker.py - > User input at line 91, trigger word "get(": - job = QueryDataJob.query.get(job_id) -Reassigned in: - File: DanceCat/DanceCat/JobWorker.py - > Line 99: db_connector = DatabaseConnector(job.Connection.type, job.Connection.db_config_generator(),sql_data_style=False, dict_format=False, timeout=Constants.JOB_FEATURE_QUERY_TIME_OUT in jobjob[Constants.JOB_FEATURE_QUERY_TIME_OUT]config.get('DB_TIMEOUT', 0)) - File: DanceCat/DanceCat/JobWorker.py - > Line 111: results = 'header''rows'db_connector.columns_namedb_connector.fetch_all() - File: DanceCat/DanceCat/JobWorker.py - > Line 135: ret_MAYBE_FUNCTION_NAME = results - File: DanceCat/DanceCat/JobWorker.py - > Line 153: ret_MAYBE_FUNCTION_NAME = None -File: DanceCat/DanceCat/JobWorker.py - > reaches line 110, trigger word "execute(": - db_connector.execute(job.query_string) - -Vulnerability 7: -File: DanceCat/DanceCat/JobWorker.py - > User input at line 99, trigger word "get(": - db_connector = DatabaseConnector(job.Connection.type, job.Connection.db_config_generator(),sql_data_style=False, dict_format=False, timeout=Constants.JOB_FEATURE_QUERY_TIME_OUT in jobjob[Constants.JOB_FEATURE_QUERY_TIME_OUT]config.get('DB_TIMEOUT', 0)) -Reassigned in: - File: DanceCat/DanceCat/JobWorker.py - > Line 111: results = 'header''rows'db_connector.columns_namedb_connector.fetch_all() - File: DanceCat/DanceCat/JobWorker.py - > Line 135: ret_MAYBE_FUNCTION_NAME = results - File: DanceCat/DanceCat/JobWorker.py - > Line 153: ret_MAYBE_FUNCTION_NAME = None -File: DanceCat/DanceCat/JobWorker.py - > reaches line 110, trigger word "execute(": - db_connector.execute(job.query_string) - - - -menghao2015/flask_blog -https://github.com/menghao2015/flask_blog -Entry file: flask_blog/app/__init__.py -Scanned: 2016-10-25 15:27:24.790851 -Vulnerability 1: -File: flask_blog/app/main/views.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 17: pagination = Post.query.filter_by(category_id=tag.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 19: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, mark='index') - -Vulnerability 2: -File: flask_blog/app/main/views.py - > User input at line 30, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 31: pagination = Post.query.filter_by(lable_id=lable_id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 33: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 36: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, lable=lable, mark='lables') - -Vulnerability 3: -File: flask_blog/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 45: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 47: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, mark='all') - -Vulnerability 4: -File: flask_blog/app/main/views.py - > User input at line 60, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 61: pagination = Post.query.filter_by(category_id=tag.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 63: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, mark='mind_study') - -Vulnerability 5: -File: flask_blog/app/main/views.py - > User input at line 75, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 76: pagination = Post.query.filter_by(category_id=tag.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 78: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 81: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 79, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, mark='others') - -Vulnerability 6: -File: flask_blog/app/main/views.py - > User input at line 90, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 91: pagination = Post.query.filter_by(category_id=tag.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 93: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 96: ret_MAYBE_FUNCTION_NAME = render_template('empty_index.html') -File: flask_blog/app/main/views.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',index=True, posts=posts, lables=lables, Post=Post, pagination=pagination, mark='bug') - - - -mussaimo/auth-flask -https://github.com/mussaimo/auth-flask -Entry file: auth-flask/app.py -Scanned: 2016-10-25 15:27:30.087897 -No vulnerabilities found. - - -AmarKalabic/Football-Stream-Finder--Flask- -https://github.com/AmarKalabic/Football-Stream-Finder--Flask- -Entry file: Football-Stream-Finder--Flask-/main.py -Scanned: 2016-10-25 15:27:31.550084 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -YUX-IO/flask-python351 -https://github.com/YUX-IO/flask-python351 -Entry file: flask-python351/sample-app/app.py -Scanned: 2016-10-25 15:27:32.889207 -No vulnerabilities found. - - -tuppa/flaskapp -https://github.com/tuppa/flaskapp -Entry file: None -Scanned: 2016-10-25 15:27:33.407109 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tuppa/flaskapp. - -quyip8818/flaskrestful -https://github.com/quyip8818/flaskrestful -Entry file: flaskrestful/server/model_cloudsql.py -Scanned: 2016-10-25 15:27:34.810810 -No vulnerabilities found. - - -dribnet/flaskapp -https://github.com/dribnet/flaskapp -Entry file: None -Scanned: 2016-10-25 15:27:35.333135 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dribnet/flaskapp. - -gzeinieh/flaskr -https://github.com/gzeinieh/flaskr -Entry file: None -Scanned: 2016-10-25 15:27:35.864095 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/gzeinieh/flaskr. - -rhildreth/flaskbook -https://github.com/rhildreth/flaskbook -Entry file: flaskbook/hello.py -Scanned: 2016-10-25 15:27:44.146906 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -gandhk/flasklearn -https://github.com/gandhk/flasklearn -Entry file: flasklearn/main.py -Scanned: 2016-10-25 15:27:45.562343 -No vulnerabilities found. - - -Apophus/flaskdb -https://github.com/Apophus/flaskdb -Entry file: flaskdb/fdb.py -Scanned: 2016-10-25 15:27:46.919675 -No vulnerabilities found. - - -TacticalGoat/flasktest -https://github.com/TacticalGoat/flasktest -Entry file: flasktest/app/__init__.py -Scanned: 2016-10-25 15:27:48.312157 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -WayneChen1987/flasky -https://github.com/WayneChen1987/flasky -Entry file: None -Scanned: 2016-10-25 15:27:48.842048 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bwghughes/flaskdev -https://github.com/bwghughes/flaskdev -Entry file: flaskdev/hello.py -Scanned: 2016-10-25 15:27:50.702913 -Vulnerability 1: -File: flaskdev/tests.py - > User input at line 10, trigger word "get(": - res = client.get(url_for('hello_world')) -File: flaskdev/tests.py - > reaches line 10, trigger word "url_for(": - res = client.get(url_for('hello_world')) - - - -matinde/flasktaskr -https://github.com/matinde/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:27:51.238918 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -William0423/flaskybooklearn -https://github.com/William0423/flaskybooklearn -Entry file: flaskybooklearn/app/__init__.py -Scanned: 2016-10-25 15:27:53.035203 -Vulnerability 1: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskybooklearn/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskybooklearn/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskybooklearn/app/api_1_0/posts.py - > Line 19: next = None -File: flaskybooklearn/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 20: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 23: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskybooklearn/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskybooklearn/app/api_1_0/users.py - > Line 42: prev = None - File: flaskybooklearn/app/api_1_0/users.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/users.py - > reaches line 50, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 18: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_post_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_post_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskybooklearn/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskybooklearn/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskybooklearn/app/api_1_0/comments.py - > Line 46: next = None -File: flaskybooklearn/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskybooklearn/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 29: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 32: posts = pagination.items - File: flaskybooklearn/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskybooklearn/app/main/views.py - > User input at line 24, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 22: show_followed = False - File: flaskybooklearn/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskybooklearn/app/main/views.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 41: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 44: posts = pagination.items -File: flaskybooklearn/app/main/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flaskybooklearn/app/main/views.py - > User input at line 104, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 106: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskybooklearn/app/main/views.py - > Line 108: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 111: comments = pagination.items - File: flaskybooklearn/app/main/views.py - > Line 103: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskybooklearn/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flaskybooklearn/app/main/views.py - > User input at line 171, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 172: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskybooklearn/app/main/views.py - > Line 170: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flaskybooklearn/app/main/views.py - > User input at line 188, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 189: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskybooklearn/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskybooklearn/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskybooklearn/app/main/views.py - > User input at line 219, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskybooklearn/app/main/views.py - > Line 220: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskybooklearn/app/main/views.py - > Line 223: comments = pagination.items -File: flaskybooklearn/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -powerlanguage/flasktaskr -https://github.com/powerlanguage/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:27:53.559808 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cmacro/flaskblog -https://github.com/cmacro/flaskblog -Entry file: None -Scanned: 2016-10-25 15:27:54.090032 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cmacro/flaskblog. - -vrofze/flasky -https://github.com/vrofze/flasky -Entry file: None -Scanned: 2016-10-25 15:27:54.604422 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ccsaber/flasker -https://github.com/ccsaber/flasker -Entry file: flasker/app/__init__.py -Scanned: 2016-10-25 15:27:56.631273 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -IronFist16/flasky -https://github.com/IronFist16/flasky -Entry file: None -Scanned: 2016-10-25 15:27:57.137857 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bsdtux/flaskblog -https://github.com/bsdtux/flaskblog -Entry file: None -Scanned: 2016-10-25 15:27:58.655226 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bsdtux/flaskblog. - -terryllowery/flasktaskr -https://github.com/terryllowery/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:28:00.170405 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -moerekh/flaskyflaskssy -https://github.com/moerekh/flaskyflaskssy -Entry file: flaskyflaskssy/flasky.py -Scanned: 2016-10-25 15:28:06.893048 -No vulnerabilities found. - - -Gre4tWhite/Flasknightmare -https://github.com/Gre4tWhite/Flasknightmare -Entry file: Flasknightmare/app/__init__.py -Scanned: 2016-10-25 15:28:12.700215 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -vinay13/Flaskngular -https://github.com/vinay13/Flaskngular -Entry file: Flaskngular/flask_app.py -Scanned: 2016-10-25 15:28:14.133302 -No vulnerabilities found. - - -enricobacis/flaskey -https://github.com/enricobacis/flaskey -Entry file: flaskey/app.py -Scanned: 2016-10-25 15:28:16.682979 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -nehamarne/flaskdemo -https://github.com/nehamarne/flaskdemo -Entry file: None -Scanned: 2016-10-25 15:28:22.205792 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ejakait/flaskpro -https://github.com/ejakait/flaskpro -Entry file: None -Scanned: 2016-10-25 15:28:36.049118 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wrzto/flasky -https://github.com/wrzto/flasky -Entry file: None -Scanned: 2016-10-25 15:28:36.613452 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -William0423/flaskylearn -https://github.com/William0423/flaskylearn -Entry file: flaskylearn/app/__init__.py -Scanned: 2016-10-25 15:28:38.087103 -No vulnerabilities found. - - -bhsantos11/flaskwebapp -https://github.com/bhsantos11/flaskwebapp -Entry file: flaskwebapp/flaskwebsite/__init__.py -Scanned: 2016-10-25 15:28:39.510087 -No vulnerabilities found. - - -jerodestapa/flasktodo -https://github.com/jerodestapa/flasktodo -Entry file: flasktodo/views.py -Scanned: 2016-10-25 15:28:41.012131 -No vulnerabilities found. - - -uptownjimmy/flasktaskr -https://github.com/uptownjimmy/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:28:41.545948 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kirazz/flaskywebblog -https://github.com/kirazz/flaskywebblog -Entry file: flaskywebblog/git/webblog/app/__init__.py -Scanned: 2016-10-25 15:28:44.832656 -Vulnerability 1: -File: flaskywebblog/git/webblog/app/main/views.py - > User input at line 19, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskywebblog/git/webblog/app/main/views.py - > Line 20: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=5, error_out=False) - File: flaskywebblog/git/webblog/app/main/views.py - > Line 22: posts = pagination.items - File: flaskywebblog/git/webblog/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskywebblog/git/webblog/app/main/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskywebblog/git/webblog/app/main/views.py - > User input at line 91, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskywebblog/git/webblog/app/main/views.py - > Line 93: page = post.comments.count() - 1 // 5 + 1 - File: flaskywebblog/git/webblog/app/main/views.py - > Line 95: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=5, error_out=False) - File: flaskywebblog/git/webblog/app/main/views.py - > Line 97: comments = pagination.items - File: flaskywebblog/git/webblog/app/main/views.py - > Line 90: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskywebblog/git/webblog/app/main/views.py - > reaches line 98, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - - - -vnxichow/flaskapp -https://github.com/vnxichow/flaskapp -Entry file: None -Scanned: 2016-10-25 15:28:45.377337 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vnxichow/flaskapp. - -getser/flaskapiblog -https://github.com/getser/flaskapiblog -Entry file: flaskapiblog/__init__.py -Scanned: 2016-10-25 15:28:46.771879 -Vulnerability 1: -File: flaskapiblog/views.py - > User input at line 112, trigger word "get(": - post = Post.query.get(post_id) -File: flaskapiblog/views.py - > reaches line 115, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('post'post._asdict()) - -Vulnerability 2: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - -Vulnerability 3: -File: flaskapiblog/views.py - > User input at line 187, trigger word "get(": - email = request.json.get('email') -Reassigned in: - File: flaskapiblog/views.py - > Line 193: visitor = Visitor(email=email) -File: flaskapiblog/views.py - > reaches line 197, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('email'visitor.email), 201, 'Location'url_for('get_visitor',visitor_id=visitor.id, _external=True)) - - - -Paopand1/flasktaskr -https://github.com/Paopand1/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:28:47.312619 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gabrielssilva/flasktasks -https://github.com/gabrielssilva/flasktasks -Entry file: flasktasks/flasktasks/__init__.py -Scanned: 2016-10-25 15:28:49.915174 -Vulnerability 1: -File: flasktasks/flasktasks/views.py - > User input at line 35, trigger word "get(": - mission = Mission.query.get_or_404(request.args.get('mission_id')) -Reassigned in: - File: flasktasks/flasktasks/views.py - > Line 33: mission = None -File: flasktasks/flasktasks/views.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('task/index.html',tasks=tasks_by_status, mission=mission) - -Vulnerability 2: -File: flasktasks/flasktasks/views.py - > User input at line 96, trigger word "get(": - color = Color(int(request.form.get('color_id'))) -Reassigned in: - File: flasktasks/flasktasks/views.py - > Line 99: tag = Tag(request.form.get('name'), color) - File: flasktasks/flasktasks/views.py - > Line 104: colors = {color.name : color.value for color in Color} - File: flasktasks/flasktasks/views.py - > Line 102: ret_MAYBE_FUNCTION_NAME = redirect(url_for('missions')) -File: flasktasks/flasktasks/views.py - > reaches line 105, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tags/new.html',colors=colors) - - - -playgrdstar/flaskapp -https://github.com/playgrdstar/flaskapp -Entry file: None -Scanned: 2016-10-25 15:28:50.429970 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/playgrdstar/flaskapp. - -caspii/flaskr -https://github.com/caspii/flaskr -Entry file: None -Scanned: 2016-10-25 15:28:50.951876 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/caspii/flaskr. - -tj621/flaskr -https://github.com/tj621/flaskr -Entry file: None -Scanned: 2016-10-25 15:28:51.470014 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/tj621/flaskr. - -LinMingjie/flaskr -https://github.com/LinMingjie/flaskr -Entry file: None -Scanned: 2016-10-25 15:28:51.980795 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/LinMingjie/flaskr. - -mayreeh/Flasky -https://github.com/mayreeh/Flasky -Entry file: None -Scanned: 2016-10-25 15:28:52.535166 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mayreeh/Flasky. - -supor/flaskr -https://github.com/supor/flaskr -Entry file: None -Scanned: 2016-10-25 15:28:53.045470 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/supor/flaskr. - -ridnarong/flasky -https://github.com/ridnarong/flasky -Entry file: None -Scanned: 2016-10-25 15:28:53.570451 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cjfoster10/flasktaskr -https://github.com/cjfoster10/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:28:54.086493 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pkml/flasktaskr -https://github.com/pkml/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:28:54.611787 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -davidwangv5/flasky -https://github.com/davidwangv5/flasky -Entry file: None -Scanned: 2016-10-25 15:28:55.133489 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rahulmkumar/flaskapp -https://github.com/rahulmkumar/flaskapp -Entry file: None -Scanned: 2016-10-25 15:28:55.652680 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rahulmkumar/flaskapp. - -seangilleran/flasko -https://github.com/seangilleran/flasko -Entry file: flasko/flasko/__init__.py -Scanned: 2016-10-25 15:28:58.602601 -Vulnerability 1: -File: flasko/flasko/blueprints/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasko/flasko/blueprints/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=10, error_out=False) - File: flasko/flasko/blueprints/views.py - > Line 27: posts = pagination.items - File: flasko/flasko/blueprints/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('views.index')) -File: flasko/flasko/blueprints/views.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',disable_header=True, hello=random_post_question(), form=form, pagination=pagination, posts=posts, timestamp=datetime.utcnow()) - - - -weisongchen/flaskexercise -https://github.com/weisongchen/flaskexercise -Entry file: flaskexercise/hello.py -Scanned: 2016-10-25 15:29:06.898396 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskexercise/venv/lib/python2.7/sre_compile.py - -weisongchen/flaskapp -https://github.com/weisongchen/flaskapp -Entry file: None -Scanned: 2016-10-25 15:29:07.583642 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/weisongchen/flaskapp. - -chenglinguang/flaskky -https://github.com/chenglinguang/flaskky -Entry file: flaskky/hello1.py -Scanned: 2016-10-25 15:29:09.224331 -No vulnerabilities found. - - -CharlieCheng2014/Flask-micro-flask -https://github.com/CharlieCheng2014/Flask-micro-flask -Entry file: Flask-micro-flask/app/__init__.py -Scanned: 2016-10-25 15:29:10.589498 -No vulnerabilities found. - - -er3456qi/FlaskBlog -https://github.com/er3456qi/FlaskBlog -Entry file: FlaskBlog/app/__init__.py -Scanned: 2016-10-25 15:29:15.834463 -Vulnerability 1: -File: FlaskBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['BLOG_POSTS_PER_PAGE']) - File: FlaskBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: next = None -File: FlaskBlog/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: FlaskBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['BLOG_POSTS_PER_PAGE']) - File: FlaskBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: next = None -File: FlaskBlog/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: FlaskBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['BLOG_POSTS_PER_PAGE']) - File: FlaskBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: FlaskBlog/app/api_1_0/posts.py - > Line 16: next = None -File: FlaskBlog/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 20: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 23: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 20: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 23: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 20: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 23: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 42: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 45: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 42: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 45: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: FlaskBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: FlaskBlog/app/api_1_0/users.py - > Line 42: prev = None - File: FlaskBlog/app/api_1_0/users.py - > Line 45: next = None -File: FlaskBlog/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 18: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 18: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 18: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 46: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 46: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: FlaskBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: FlaskBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: FlaskBlog/app/api_1_0/comments.py - > Line 46: next = None -File: FlaskBlog/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: FlaskBlog/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 18: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['BLOG_POSTS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 20: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 21, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 17: -File: FlaskBlog/app/main/views.py - > User input at line 27, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 28: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['BLOG_POSTS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 30: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 18: -File: FlaskBlog/app/main/views.py - > User input at line 109, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 111: page = post.comments.count() - 1 / current_app.config['BLOG_COMMENTS_PER_PAGE'] + 1 - File: FlaskBlog/app/main/views.py - > Line 112: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['BLOG_COMMENTS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 114: comments = pagination.items - File: FlaskBlog/app/main/views.py - > Line 108: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskBlog/app/main/views.py - > reaches line 115, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',post=post, form=form, comments=comments, pagination=pagination) - -Vulnerability 19: -File: FlaskBlog/app/main/views.py - > User input at line 173, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 174: pagination = user.followers.paginate(page,per_page=current_app.config['BLOG_FOLLOWERS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 177: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskBlog/app/main/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 20: -File: FlaskBlog/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 194: pagination = user.following.paginate(page,per_page=current_app.config['BLOG_FOLLOWERS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 197: follows = ['user''timestamp'item.followingitem.timestamp for item in pagination.items] - File: FlaskBlog/app/main/views.py - > Line 192: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 199, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.following', pagination=pagination, follows=follows) - -Vulnerability 21: -File: FlaskBlog/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 212: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['BLOG_FOLLOWERS_PER_PAGE']) - File: FlaskBlog/app/main/views.py - > Line 214: comments = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 215, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -vishwanath79/FlaskURLAPI -https://github.com/vishwanath79/FlaskURLAPI -Entry file: FlaskURLAPI/app.py -Scanned: 2016-10-25 15:29:23.126139 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskURLAPI/hadoopify/lib/python2.7/sre_compile.py - -QMickael/flaskBlog -https://github.com/QMickael/flaskBlog -Entry file: flaskBlog/app/app.py -Scanned: 2016-10-25 15:29:24.742470 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -CircaVictor/flaskTemplate -https://github.com/CircaVictor/flaskTemplate -Entry file: flaskTemplate/flask-app/app/__init__.py -Scanned: 2016-10-25 15:29:27.235459 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -vmotto/FlaskBlog -https://github.com/vmotto/FlaskBlog -Entry file: FlaskBlog/app/app.py -Scanned: 2016-10-25 15:29:38.080855 -No vulnerabilities found. - - -xiangzhuyuan/flaskdemo1 -https://github.com/xiangzhuyuan/flaskdemo1 -Entry file: flaskdemo1/flaskdemo1/flaskr.py -Scanned: 2016-10-25 15:29:40.420921 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -whimian/flaskyKrig -https://github.com/whimian/flaskyKrig -Entry file: flaskyKrig/test.py -Scanned: 2016-10-25 15:29:45.787270 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -keer2345/flaskMega -https://github.com/keer2345/flaskMega -Entry file: flaskMega/app/__init__.py -Scanned: 2016-10-25 15:29:47.171094 -No vulnerabilities found. - - -josh14668/flaskApp -https://github.com/josh14668/flaskApp -Entry file: flaskApp/main.py -Scanned: 2016-10-25 15:29:54.573111 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskApp/venv/lib/python2.7/sre_compile.py - -sh4nks/flask-caching -https://github.com/sh4nks/flask-caching -Entry file: flask-caching/setup.py -Scanned: 2016-10-25 15:29:59.438579 -No vulnerabilities found. - - -Riffstation/flaskutilsexample -https://github.com/Riffstation/flaskutilsexample -Entry file: flaskutilsexample/src/app/__init__.py -Scanned: 2016-10-25 15:30:00.937313 -No vulnerabilities found. - - -themese/flask -https://github.com/themese/flask -Entry file: None -Scanned: 2016-10-25 15:30:01.556349 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -radajin/flask -https://github.com/radajin/flask -Entry file: None -Scanned: 2016-10-25 15:30:02.622395 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -suryadana/Flask -https://github.com/suryadana/Flask -Entry file: None -Scanned: 2016-10-25 15:30:03.152150 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -1131909224/flask -https://github.com/1131909224/flask -Entry file: None -Scanned: 2016-10-25 15:30:03.667949 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -manikandaraj123ster/flask -https://github.com/manikandaraj123ster/flask -Entry file: None -Scanned: 2016-10-25 15:30:04.714568 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KyleSeem/Flask -https://github.com/KyleSeem/Flask -Entry file: None -Scanned: 2016-10-25 15:30:05.324875 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -crazw/flask -https://github.com/crazw/flask -Entry file: None -Scanned: 2016-10-25 15:30:05.843418 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mwongeraE/Flask -https://github.com/mwongeraE/Flask -Entry file: None -Scanned: 2016-10-25 15:30:06.411141 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jzengzhan/Flask -https://github.com/Jzengzhan/Flask -Entry file: None -Scanned: 2016-10-25 15:30:06.948720 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mani-python/flask -https://github.com/mani-python/flask -Entry file: None -Scanned: 2016-10-25 15:30:07.485990 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bTanya/flask -https://github.com/bTanya/flask -Entry file: None -Scanned: 2016-10-25 15:30:08.010886 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kirade/Flask -https://github.com/Kirade/Flask -Entry file: None -Scanned: 2016-10-25 15:30:08.548598 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -salhernandez/Flask -https://github.com/salhernandez/Flask -Entry file: None -Scanned: 2016-10-25 15:30:09.083152 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangrenlearn/flask -https://github.com/wangrenlearn/flask -Entry file: None -Scanned: 2016-10-25 15:30:09.602326 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TheNixNinja/flask-boilerplate -https://github.com/TheNixNinja/flask-boilerplate -Entry file: None -Scanned: 2016-10-25 15:30:10.141142 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TheNixNinja/flask-boilerplate. - -murilobsd/zeus -https://github.com/murilobsd/zeus -Entry file: None -Scanned: 2016-10-25 15:30:16.441890 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/murilobsd/zeus. - -xuelangZF/NaHan -https://github.com/xuelangZF/NaHan -Entry file: NaHan/nahan/__init__.py -Scanned: 2016-10-25 15:30:30.574564 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -clef/flask-nameko -https://github.com/clef/flask-nameko -Entry file: flask-nameko/tests/test_flask_pooled_cluster_rpc_proxy.py -Scanned: 2016-10-25 15:30:38.131784 -No vulnerabilities found. - - -rafaelhenrique/flask_tutorial -https://github.com/rafaelhenrique/flask_tutorial -Entry file: flask_tutorial/tvseries/__init__.py -Scanned: 2016-10-25 15:30:44.387074 -No vulnerabilities found. - - -haklabrador/podatci-s-burza -https://github.com/haklabrador/podatci-s-burza -Entry file: podatci-s-burza/webserver.py -Scanned: 2016-10-25 15:30:45.995308 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sousic/flask_study -https://github.com/sousic/flask_study -Entry file: flask_study/flask_study.py -Scanned: 2016-10-25 15:30:49.461297 -Vulnerability 1: -File: flask_study/views/cookies.py - > User input at line 13, trigger word "get(": - username = request.cookies.get('username') -File: flask_study/views/cookies.py - > reaches line 14, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('cookies/readcookie.html',username=username) - -Vulnerability 2: -File: flask_study/views/cookies.py - > User input at line 19, trigger word "form[": - username = request.form['username'] -File: flask_study/views/cookies.py - > reaches line 23, trigger word "set_cookie(": - response.set_cookie('username', username) - -Vulnerability 3: -File: flask_study/views/fileUpload.py - > User input at line 21, trigger word "files[": - f = request.files['file'] -Reassigned in: - File: flask_study/views/fileUpload.py - > Line 23: filename = secure_filename(f.filename) - File: flask_study/views/fileUpload.py - > Line 29: ret_MAYBE_FUNCTION_NAME = response -File: flask_study/views/fileUpload.py - > reaches line 25, trigger word "render_template(": - response = make_response(render_template('fileupload/index.html',filename=filename)) - - - -weinbergdavid/python-flask-security -https://github.com/weinbergdavid/python-flask-security -Entry file: python-flask-security/run.py -Scanned: 2016-10-25 15:31:12.798394 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -opentracing-contrib/python-flask -https://github.com/opentracing-contrib/python-flask -Entry file: python-flask/tests/test_flask_opentracing.py -Scanned: 2016-10-25 15:31:15.348842 -No vulnerabilities found. - - -davidgomes/flask-pygood -https://github.com/davidgomes/flask-pygood -Entry file: flask-pygood/flask_pygood/test/demo.py -Scanned: 2016-10-25 15:31:16.715832 -No vulnerabilities found. - - -aaossa/flask-openshift -https://github.com/aaossa/flask-openshift -Entry file: flask-openshift/flask_openshift_template.py -Scanned: 2016-10-25 15:31:18.363657 -Vulnerability 1: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - -Vulnerability 2: -File: flask-openshift/flask_openshift_template.py - > User input at line 14, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-openshift/flask_openshift_template.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flask-openshift/flask_openshift_template.py - > reaches line 15, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=username)) - - - -k0itsu/flasktaskr -https://github.com/k0itsu/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:31:18.903602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rama16-meet/flasky -https://github.com/rama16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:19.430864 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dina16-meet/flasky -https://github.com/dina16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:19.970707 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -orr16-meet/flasky -https://github.com/orr16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:20.506395 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -roni16-meet/flasky -https://github.com/roni16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:21.025345 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -penglee87/flaskblog -https://github.com/penglee87/flaskblog -Entry file: None -Scanned: 2016-10-25 15:31:21.561460 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/penglee87/flaskblog. - -atsk1618/flasko -https://github.com/atsk1618/flasko -Entry file: flasko/flasko.py -Scanned: 2016-10-25 15:31:23.453760 -No vulnerabilities found. - - -nsujan/flaskbot -https://github.com/nsujan/flaskbot -Entry file: flaskbot/wsgi/myflaskapp.py -Scanned: 2016-10-25 15:31:25.160457 -No vulnerabilities found. - - -davbrink/flaskblog -https://github.com/davbrink/flaskblog -Entry file: None -Scanned: 2016-10-25 15:31:26.185209 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/davbrink/flaskblog. - -dongshuiquan/flasky -https://github.com/dongshuiquan/flasky -Entry file: None -Scanned: 2016-10-25 15:31:26.724870 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -caseydunham/flaskr -https://github.com/caseydunham/flaskr -Entry file: None -Scanned: 2016-10-25 15:31:27.250833 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/caseydunham/flaskr. - -francium/flaskr -https://github.com/francium/flaskr -Entry file: None -Scanned: 2016-10-25 15:31:27.771256 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/francium/flaskr. - -Qqlick/Flasktaskr -https://github.com/Qqlick/Flasktaskr -Entry file: Flasktaskr/views.py -Scanned: 2016-10-25 15:31:29.406916 -No vulnerabilities found. - - -ToDolin/flaskgit -https://github.com/ToDolin/flaskgit -Entry file: flaskgit/flasky/app/__init__.py -Scanned: 2016-10-25 15:31:30.944489 -No vulnerabilities found. - - -yolandaz/flaskcars -https://github.com/yolandaz/flaskcars -Entry file: flaskcars/app.py -Scanned: 2016-10-25 15:31:41.103668 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskcars/venv/lib/python2.7/sre_compile.py - -PansFortress/flaskr -https://github.com/PansFortress/flaskr -Entry file: None -Scanned: 2016-10-25 15:31:41.662717 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/PansFortress/flaskr. - -goodman1209/flaskrestserver -https://github.com/goodman1209/flaskrestserver -Entry file: flaskrestserver/hello.py -Scanned: 2016-10-25 15:31:43.068276 -No vulnerabilities found. - - -Ivicel/flasky -https://github.com/Ivicel/flasky -Entry file: None -Scanned: 2016-10-25 15:31:43.588834 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -weihg/flaskr -https://github.com/weihg/flaskr -Entry file: None -Scanned: 2016-10-25 15:31:44.120293 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/weihg/flaskr. - -Dasmemes/flasky -https://github.com/Dasmemes/flasky -Entry file: None -Scanned: 2016-10-25 15:31:44.641280 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -penglee87/flaskweb -https://github.com/penglee87/flaskweb -Entry file: flaskweb/app/__init__.py -Scanned: 2016-10-25 15:31:46.367936 -Vulnerability 1: -File: flaskweb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskweb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskweb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskweb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskweb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskweb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskweb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 23: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskweb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 23: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskweb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 23: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskweb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 45: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskweb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 45: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskweb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskweb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskweb/app/api_1_0/users.py - > Line 45: next = None -File: flaskweb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskweb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskweb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskweb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskweb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskweb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskweb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskweb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskweb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskweb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskweb/app/main/views.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 33: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 34: posts = pagination.items -File: flaskweb/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',post_form=post_form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskweb/app/main/views.py - > User input at line 28, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 26: show_followed = False -File: flaskweb/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',post_form=post_form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskweb/app/main/views.py - > User input at line 52, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 50: show_followed = False - File: flaskweb/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) - File: flaskweb/app/main/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.create')) -File: flaskweb/app/main/views.py - > reaches line 58, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('create.html',post_form=post_form, show_followed=show_followed) - -Vulnerability 19: -File: flaskweb/app/main/views.py - > User input at line 64, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 65: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 68: posts = pagination.items -File: flaskweb/app/main/views.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 20: -File: flaskweb/app/main/views.py - > User input at line 128, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 130: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskweb/app/main/views.py - > Line 132: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 135: comments = pagination.items - File: flaskweb/app/main/views.py - > Line 127: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskweb/app/main/views.py - > reaches line 136, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 21: -File: flaskweb/app/main/views.py - > User input at line 221, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 222: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 225: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 220: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 227, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskweb/app/main/views.py - > User input at line 238, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 239: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 242: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskweb/app/main/views.py - > Line 237: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskweb/app/main/views.py - > reaches line 244, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 23: -File: flaskweb/app/main/views.py - > User input at line 269, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskweb/app/main/views.py - > Line 270: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskweb/app/main/views.py - > Line 273: comments = pagination.items -File: flaskweb/app/main/views.py - > reaches line 274, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -yuyanqiuqiu/flaskr -https://github.com/yuyanqiuqiu/flaskr -Entry file: None -Scanned: 2016-10-25 15:31:46.887549 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yuyanqiuqiu/flaskr. - -marvinmarnold/flasky -https://github.com/marvinmarnold/flasky -Entry file: None -Scanned: 2016-10-25 15:31:47.422164 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bassel-meet/flasky -https://github.com/bassel-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:48.974447 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sima16-meet/flasky -https://github.com/sima16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:31:56.489329 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tamar16-meet/flasky -https://github.com/tamar16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:14.022584 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alma16-meet/flasky -https://github.com/alma16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:16.553923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -guy16-meet/flasky -https://github.com/guy16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:18.115565 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aixiamomo/flasky -https://github.com/aixiamomo/flasky -Entry file: None -Scanned: 2016-10-25 15:32:19.627024 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyanqiuqiu/flaskblog -https://github.com/yuyanqiuqiu/flaskblog -Entry file: None -Scanned: 2016-10-25 15:32:20.158637 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yuyanqiuqiu/flaskblog. - -Halcae/flaskapp -https://github.com/Halcae/flaskapp -Entry file: None -Scanned: 2016-10-25 15:32:20.685236 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Halcae/flaskapp. - -Kermit95/Flaskr -https://github.com/Kermit95/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 15:32:27.604335 -No vulnerabilities found. - - -wwpika/flaskww -https://github.com/wwpika/flaskww -Entry file: None -Scanned: 2016-10-25 15:32:34.173652 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yasmeen16-meet/flasky -https://github.com/yasmeen16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:34.708360 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -themuppet2/flasktaskr -https://github.com/themuppet2/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:32:35.250814 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LongstreetSolutions/flaskr -https://github.com/LongstreetSolutions/flaskr -Entry file: None -Scanned: 2016-10-25 15:32:35.800878 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/LongstreetSolutions/flaskr. - -stevehaigh/flasktest -https://github.com/stevehaigh/flasktest -Entry file: flasktest/flasktest.py -Scanned: 2016-10-25 15:32:37.158378 -No vulnerabilities found. - - -juniorkrvl/flasky -https://github.com/juniorkrvl/flasky -Entry file: None -Scanned: 2016-10-25 15:32:37.688930 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -davbrink/flasktaskr -https://github.com/davbrink/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:32:38.216837 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SachinMaharana/flaskblog -https://github.com/SachinMaharana/flaskblog -Entry file: None -Scanned: 2016-10-25 15:32:38.733899 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SachinMaharana/flaskblog. - -dhan12/Flaskblog -https://github.com/dhan12/Flaskblog -Entry file: Flaskblog/run.py -Scanned: 2016-10-25 15:32:43.479801 -Vulnerability 1: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 2: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 3: -File: Flaskblog/flaskblog/routes.py - > User input at line 42, trigger word "form[": - searchText = request.form['search'] -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 54: searchText = request.args.get('search', '') - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - -Vulnerability 4: -File: Flaskblog/flaskblog/routes.py - > User input at line 54, trigger word "get(": - searchText = request.args.get('search', '') -Reassigned in: - File: Flaskblog/flaskblog/routes.py - > Line 42: searchText = request.form['search'] - File: Flaskblog/flaskblog/routes.py - > Line 56: blog_posts = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 56: maxReached = getPostsForUi(pageNum=page, tag=tag, searchText=searchText) - File: Flaskblog/flaskblog/routes.py - > Line 62: older_page = getPageLink(page + 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 64: newer_page = getPageLink(page - 1, tag, searchText) - File: Flaskblog/flaskblog/routes.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('blog.html',locals()) -File: Flaskblog/flaskblog/routes.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('flaskblog.blogapp',page='0', tag='', search=searchText)) - - - -amjad16-meet/flasky -https://github.com/amjad16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:44.011109 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -elias16-meet/flasky -https://github.com/elias16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:32:44.534834 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bluethon/flasky -https://github.com/bluethon/flasky -Entry file: None -Scanned: 2016-10-25 15:32:45.050199 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NathanJ4620/flasker -https://github.com/NathanJ4620/flasker -Entry file: flasker/test.py -Scanned: 2016-10-25 15:32:46.386896 -No vulnerabilities found. - - -rahulmkumar/flaskapp -https://github.com/rahulmkumar/flaskapp -Entry file: None -Scanned: 2016-10-25 15:32:46.901223 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rahulmkumar/flaskapp. - -teodorgarzdin/Flaskr -https://github.com/teodorgarzdin/Flaskr -Entry file: Flaskr/Flaskr/flaskr/flaskr.py -Scanned: 2016-10-25 15:32:48.232775 -No vulnerabilities found. - - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: None -Scanned: 2016-10-25 15:32:48.778714 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-25 15:32:49.295767 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: None -Scanned: 2016-10-25 15:32:49.808019 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sinwar/flaskr. - -ptrees/flaskr -https://github.com/ptrees/flaskr -Entry file: None -Scanned: 2016-10-25 15:32:50.319578 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ptrees/flaskr. - -jcue/flasktaskr -https://github.com/jcue/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:32:50.836929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qhdong/flaskr -https://github.com/qhdong/flaskr -Entry file: None -Scanned: 2016-10-25 15:32:51.350645 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/qhdong/flaskr. - -aksenovpb/flaskproject -https://github.com/aksenovpb/flaskproject -Entry file: flaskproject/main.py -Scanned: 2016-10-25 15:32:52.751739 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pengshiqi/Flaskr -https://github.com/pengshiqi/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 15:32:58.143076 -No vulnerabilities found. - - -stylianos-kampakis/flasktaskr -https://github.com/stylianos-kampakis/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:33:14.670124 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yara16-meet/flasky -https://github.com/yara16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:33:17.216994 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nimala16-meet/Flasky- -https://github.com/nimala16-meet/Flasky- -Entry file: None -Scanned: 2016-10-25 15:33:24.735088 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/nimala16-meet/Flasky-. - -shiran16-meet/flasky -https://github.com/shiran16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:33:25.261478 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fadi16-meet/flasky -https://github.com/fadi16-meet/flasky -Entry file: None -Scanned: 2016-10-25 15:33:25.785166 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -igoroppo6/flasky -https://github.com/igoroppo6/flasky -Entry file: None -Scanned: 2016-10-25 15:33:26.300307 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -evanzd/flasky -https://github.com/evanzd/flasky -Entry file: None -Scanned: 2016-10-25 15:33:26.808290 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Dawson-G/flaskwebapp -https://github.com/Dawson-G/flaskwebapp -Entry file: flaskwebapp/main.py -Scanned: 2016-10-25 15:33:29.162126 -No vulnerabilities found. - - -chijie/flaskdemo -https://github.com/chijie/flaskdemo -Entry file: None -Scanned: 2016-10-25 15:33:35.724957 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -diazdeentr/flasktest -https://github.com/diazdeentr/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 15:33:37.034913 -No vulnerabilities found. - - -yinqiaoyicjx/flask -https://github.com/yinqiaoyicjx/flask -Entry file: None -Scanned: 2016-10-25 15:33:38.892048 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -krandmm/flask -https://github.com/krandmm/flask -Entry file: None -Scanned: 2016-10-25 15:33:39.432771 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yangliu2/flask -https://github.com/yangliu2/flask -Entry file: None -Scanned: 2016-10-25 15:33:39.947388 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KeyJia/Flask -https://github.com/KeyJia/Flask -Entry file: None -Scanned: 2016-10-25 15:33:40.463871 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Coolwater7/flask -https://github.com/Coolwater7/flask -Entry file: None -Scanned: 2016-10-25 15:33:40.975173 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sepihere/flask -https://github.com/sepihere/flask -Entry file: None -Scanned: 2016-10-25 15:33:44.494959 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saiprakashreddymarasani/flask -https://github.com/saiprakashreddymarasani/flask -Entry file: None -Scanned: 2016-10-25 15:33:45.025524 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -deonna/flask -https://github.com/deonna/flask -Entry file: None -Scanned: 2016-10-25 15:33:45.535841 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ksbek/flask -https://github.com/ksbek/flask -Entry file: None -Scanned: 2016-10-25 15:33:46.077058 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tis86/flask -https://github.com/tis86/flask -Entry file: None -Scanned: 2016-10-25 15:33:47.644776 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -theparadoxer02/flask -https://github.com/theparadoxer02/flask -Entry file: None -Scanned: 2016-10-25 15:33:48.187558 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alazar-gm/flask -https://github.com/alazar-gm/flask -Entry file: None -Scanned: 2016-10-25 15:33:49.731697 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -krasytod/flask -https://github.com/krasytod/flask -Entry file: None -Scanned: 2016-10-25 15:33:50.281781 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -feirendada/Flask -https://github.com/feirendada/Flask -Entry file: None -Scanned: 2016-10-25 15:33:50.817238 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Vaspy/Flask -https://github.com/Vaspy/Flask -Entry file: None -Scanned: 2016-10-25 15:33:51.350559 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vipitsoft/flask -https://github.com/vipitsoft/flask -Entry file: None -Scanned: 2016-10-25 15:33:51.875892 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -reed-chi/flask -https://github.com/reed-chi/flask -Entry file: None -Scanned: 2016-10-25 15:33:52.393148 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -huhjuang/Flask -https://github.com/huhjuang/Flask -Entry file: None -Scanned: 2016-10-25 15:33:52.944771 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sebas095/Flask -https://github.com/sebas095/Flask -Entry file: None -Scanned: 2016-10-25 15:34:15.036006 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SicunStudio/aunet-flask -https://github.com/SicunStudio/aunet-flask -Entry file: None -Scanned: 2016-10-25 15:34:21.466256 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SicunStudio/aunet-flask. - -hit9/flask-docjson -https://github.com/hit9/flask-docjson -Entry file: flask-docjson/flask_docjson.py -Scanned: 2016-10-25 15:34:27.112399 -No vulnerabilities found. - - -codigofacilito/flask_cf -https://github.com/codigofacilito/flask_cf -Entry file: flask_cf/Project/main.py -Scanned: 2016-10-25 15:34:29.040356 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lizTheDeveloper/__g26_flask -https://github.com/lizTheDeveloper/__g26_flask -Entry file: __g26_flask/app.py -Scanned: 2016-10-25 15:34:30.647535 -Vulnerability 1: -File: __g26_flask/app.py - > User input at line 27, trigger word "get(": - user = load_user(session.get('user_id')) -File: __g26_flask/app.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',title='Pokestraveganzamon', pokemon=pokelist, user=user) - - - -mosquito/flask-example -https://github.com/mosquito/flask-example -Entry file: flask-example/flask_example/app.py -Scanned: 2016-10-25 15:34:34.126359 -No vulnerabilities found. - - -zakzou/flask-weixin-pay -https://github.com/zakzou/flask-weixin-pay -Entry file: flask-weixin-pay/example.py -Scanned: 2016-10-25 15:34:35.568008 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -hitakaken/flask-wechat -https://github.com/hitakaken/flask-wechat -Entry file: flask-wechat/example/run.py -Scanned: 2016-10-25 15:34:37.583457 -No vulnerabilities found. - - -ZakStrassberg/flask_products_group_project -https://github.com/ZakStrassberg/flask_products_group_project -Entry file: flask_products_group_project/server.py -Scanned: 2016-10-25 15:34:39.034422 -No vulnerabilities found. - - -teuton0215/microblog -https://github.com/teuton0215/microblog -Entry file: None -Scanned: 2016-10-25 15:34:40.994018 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/teuton0215/microblog. - -iamrajhans/FlaskBackend -https://github.com/iamrajhans/FlaskBackend -Entry file: FlaskBackend/drone/main.py -Scanned: 2016-10-25 15:34:42.570379 -No vulnerabilities found. - - -afropolymath/papers -https://github.com/afropolymath/papers -Entry file: papers/api/__init__.py -Scanned: 2016-10-25 15:34:44.854725 -Vulnerability 1: -File: papers/api/controllers/files.py - > User input at line 149, trigger word "get(": - parent_id = args.get('parent_id', None) -Reassigned in: - File: papers/api/controllers/files.py - > Line 161: update_fields['tag'] = parent_id == '0'g.file['id']'{}#{}'.format(folder_access['tag'], folder['last_index']) - File: papers/api/controllers/files.py - > Line 166: update_fields['parent_id'] = parent_id - File: papers/api/controllers/files.py - > Line 152: update_fields['name'] = name -File: papers/api/controllers/files.py - > reaches line 156, trigger word "filter(": - folder_access = Folder.filter('id''creator'parent_iduser_id) - - - -on3iro/cookiecutter-flask -https://github.com/on3iro/cookiecutter-flask -Entry file: cookiecutter-flask/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/app.py -Scanned: 2016-10-25 15:34:46.966186 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -benman1/tensorflow_flask -https://github.com/benman1/tensorflow_flask -Entry file: tensorflow_flask/api.py -Scanned: 2016-10-25 15:34:48.288966 -No vulnerabilities found. - - -remcohaszing/flask-openapi -https://github.com/remcohaszing/flask-openapi -Entry file: flask-openapi/example/app.py -Scanned: 2016-10-25 15:34:50.328285 -No vulnerabilities found. - - -lechain/flaskr -https://github.com/lechain/flaskr -Entry file: None -Scanned: 2016-10-25 15:34:50.848629 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lechain/flaskr. - -penglee87/flaskr -https://github.com/penglee87/flaskr -Entry file: None -Scanned: 2016-10-25 15:34:51.379314 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/penglee87/flaskr. - -asimonia/Flaskbook -https://github.com/asimonia/Flaskbook -Entry file: Flaskbook/application.py -Scanned: 2016-10-25 15:34:52.851476 -Vulnerability 1: -File: Flaskbook/user/views.py - > User input at line 39, trigger word ".data": - user = User.objects.filter(username=form.username.data).first() -File: Flaskbook/user/views.py - > reaches line 39, trigger word "filter(": - user = User.objects.filter(username=form.username.data).first() - -Vulnerability 2: -File: Flaskbook/user/views.py - > User input at line 46, trigger word "get(": - next = session.get('next') -Reassigned in: - File: Flaskbook/user/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = 'User logged in' - File: Flaskbook/user/views.py - > Line 53: ret_MAYBE_FUNCTION_NAME = render_template('user/login.html',form=form, error=error) -File: Flaskbook/user/views.py - > reaches line 48, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - - - -rouzazari/flaskfirst -https://github.com/rouzazari/flaskfirst -Entry file: flaskfirst/app/__init__.py -Scanned: 2016-10-25 15:34:54.168200 -No vulnerabilities found. - - -smilemlz/flasktest -https://github.com/smilemlz/flasktest -Entry file: flasktest/testem.py -Scanned: 2016-10-25 15:34:55.470460 -No vulnerabilities found. - - -Runningdogs/flasky -https://github.com/Runningdogs/flasky -Entry file: None -Scanned: 2016-10-25 15:34:55.988341 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Markmwaura/Flaskblog -https://github.com/Markmwaura/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-25 15:34:58.252311 -No vulnerabilities found. - - -YaleYeah/flasky -https://github.com/YaleYeah/flasky -Entry file: None -Scanned: 2016-10-25 15:34:58.797599 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -seizans/flasko -https://github.com/seizans/flasko -Entry file: flasko/main.py -Scanned: 2016-10-25 15:35:00.134191 -No vulnerabilities found. - - -faridalrafi/flaskopencv -https://github.com/faridalrafi/flaskopencv -Entry file: flaskopencv/app.py -Scanned: 2016-10-25 15:35:04.042439 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pecone/flaskr -https://github.com/pecone/flaskr -Entry file: None -Scanned: 2016-10-25 15:35:04.585391 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pecone/flaskr. - -bencelder/flaskr -https://github.com/bencelder/flaskr -Entry file: None -Scanned: 2016-10-25 15:35:15.232160 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/bencelder/flaskr. - -vennyk/flasktaskr -https://github.com/vennyk/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:35:17.765391 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -akjanik/flasktutorial -https://github.com/akjanik/flasktutorial -Entry file: None -Scanned: 2016-10-25 15:35:19.333979 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/akjanik/flasktutorial. - -EenTang/flaskdev -https://github.com/EenTang/flaskdev -Entry file: None -Scanned: 2016-10-25 15:35:33.593319 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hyteer/flaskdemo -https://github.com/hyteer/flaskdemo -Entry file: None -Scanned: 2016-10-25 15:35:34.238419 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lxw15337674/flasklearn -https://github.com/lxw15337674/flasklearn -Entry file: flasklearn/flasklearn.py -Scanned: 2016-10-25 15:35:44.282615 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -liangfei2016x/flaskweb -https://github.com/liangfei2016x/flaskweb -Entry file: None -Scanned: 2016-10-25 15:35:54.891929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mcquam/flasktaskr -https://github.com/mcquam/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:35:55.446914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Sventenhaaf/flasktries -https://github.com/Sventenhaaf/flasktries -Entry file: flasktries/app.py -Scanned: 2016-10-25 15:36:02.600217 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasktries/env/lib/python2.7/sre_compile.py - -munendrasn/Flaskr -https://github.com/munendrasn/Flaskr -Entry file: Flaskr/flaskr/flaskr.py -Scanned: 2016-10-25 15:36:04.036913 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Eyali1001/flaskcalculator -https://github.com/Eyali1001/flaskcalculator -Entry file: flaskcalculator/calculator.py -Scanned: 2016-10-25 15:36:05.383829 -Vulnerability 1: -File: flaskcalculator/calculator.py - > User input at line 14, trigger word "form[": - result = int(request.form['title']) + int(request.form['text']) -File: flaskcalculator/calculator.py - > reaches line 15, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultpage.html',result=result) - - - -babydeya/flaskr -https://github.com/babydeya/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:05.918624 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/babydeya/flaskr. - -rouzazari/flaskangular -https://github.com/rouzazari/flaskangular -Entry file: flaskangular/app/__init__.py -Scanned: 2016-10-25 15:36:07.323349 -No vulnerabilities found. - - -yantiz/flasktaskr -https://github.com/yantiz/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:36:07.992067 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nocotan/flaski -https://github.com/nocotan/flaski -Entry file: flaski/app.py -Scanned: 2016-10-25 15:36:09.400440 -No vulnerabilities found. - - -berezovskiydenis/flasktaskr -https://github.com/berezovskiydenis/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:36:09.934808 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -freakxx/flaskdemo -https://github.com/freakxx/flaskdemo -Entry file: None -Scanned: 2016-10-25 15:36:10.471366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Baindaer/flaskr -https://github.com/Baindaer/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:10.983919 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Baindaer/flaskr. - -lindentao/flaskr -https://github.com/lindentao/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:11.538964 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lindentao/flaskr. - -demory191/flasktaskr -https://github.com/demory191/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:36:12.111405 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Daylightmazekun/flaskfollow -https://github.com/Daylightmazekun/flaskfollow -Entry file: flaskfollow/app/__init__.py -Scanned: 2016-10-25 15:36:14.040781 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -0x24a537r9/flasktest -https://github.com/0x24a537r9/flasktest -Entry file: flasktest/polling_monitor.py -Scanned: 2016-10-25 15:36:15.357543 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -trevorwitter/flaskr -https://github.com/trevorwitter/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:15.882874 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/trevorwitter/flaskr. - -caser789/flaskrr -https://github.com/caser789/flaskrr -Entry file: flaskrr/flaskr/flaskr.py -Scanned: 2016-10-25 15:36:17.224644 -No vulnerabilities found. - - -xuxiaoxing/flasky -https://github.com/xuxiaoxing/flasky -Entry file: None -Scanned: 2016-10-25 15:36:17.742779 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tw7613781/flasky -https://github.com/tw7613781/flasky -Entry file: None -Scanned: 2016-10-25 15:36:18.313114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhang555/flasky -https://github.com/zhang555/flasky -Entry file: None -Scanned: 2016-10-25 15:36:19.063410 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fiezwang/flasky -https://github.com/fiezwang/flasky -Entry file: None -Scanned: 2016-10-25 15:36:19.708524 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -swdmike/flasky -https://github.com/swdmike/flasky -Entry file: None -Scanned: 2016-10-25 15:36:20.222226 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -manuellah/flaskapp -https://github.com/manuellah/flaskapp -Entry file: None -Scanned: 2016-10-25 15:36:20.749413 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/manuellah/flaskapp. - -musarahm/flaskbook -https://github.com/musarahm/flaskbook -Entry file: flaskbook/application.py -Scanned: 2016-10-25 15:36:22.358044 -Vulnerability 1: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = 'Welcome to Flaskbook!' -File: flaskbook/home/views.py - > reaches line 15, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 2: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = 'Welcome to Flaskbook!' -File: flaskbook/home/views.py - > reaches line 19, trigger word "filter(": - feed_messages = Feed.objects.filter(user=user).order_by('-create_date')[10] - -Vulnerability 3: -File: flaskbook/home/views.py - > User input at line 15, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/home/views.py - > Line 30: ret_MAYBE_FUNCTION_NAME = 'Welcome to Flaskbook!' -File: flaskbook/home/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home/feed_home.html',user=user, form=form, feed_messages=feed_messages) - -Vulnerability 4: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 14, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 5: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 41, trigger word "render_template(": - body_html = render_template('mail/relationship/added_friend.html',from_user=logged_user, to_user=to_user) - -Vulnerability 6: -File: flaskbook/relationship/views.py - > User input at line 14, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 18: rel = Relationship.get_relationship(logged_user, to_user) - File: flaskbook/relationship/views.py - > Line 27: reverse_rel = Relationship.objects.get(from_user=to_user, to_user=logged_user) -File: flaskbook/relationship/views.py - > reaches line 46, trigger word "render_template(": - body_text = render_template('mail/relationship/added_friend.txt',from_user=logged_user, to_user=to_user) - -Vulnerability 7: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 67, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 8: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 74, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 9: -File: flaskbook/relationship/views.py - > User input at line 67, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 71: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 77, trigger word "filter(": - reverse_rel = Relationship.objects.filter(from_user=to_user, to_user=logged_user).delete() - -Vulnerability 10: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 91, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 11: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 99, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 12: -File: flaskbook/relationship/views.py - > User input at line 91, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 95: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 102, trigger word "filter(": - reverse_rel = Relationship.objects.filter(from_user=to_user, to_user=logged_user).delete() - -Vulnerability 13: -File: flaskbook/relationship/views.py - > User input at line 123, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 127: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 123, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 14: -File: flaskbook/relationship/views.py - > User input at line 123, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/relationship/views.py - > Line 127: rel = Relationship.get_relationship(logged_user, to_user) -File: flaskbook/relationship/views.py - > reaches line 131, trigger word "filter(": - rel = Relationship.objects.filter(from_user=logged_user, to_user=to_user).delete() - -Vulnerability 15: -File: flaskbook/user/views.py - > User input at line 25, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 27: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 40, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 16: -File: flaskbook/user/views.py - > User input at line 27, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 40, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 17: -File: flaskbook/user/views.py - > User input at line 25, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 27: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 41, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 18: -File: flaskbook/user/views.py - > User input at line 27, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.data.lower()code) -File: flaskbook/user/views.py - > reaches line 41, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 19: -File: flaskbook/user/views.py - > User input at line 57, trigger word ".data": - user = User.objects.filter(username=form.username.data).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 70: user = None -File: flaskbook/user/views.py - > reaches line 57, trigger word "filter(": - user = User.objects.filter(username=form.username.data).first() - -Vulnerability 20: -File: flaskbook/user/views.py - > User input at line 64, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flaskbook/user/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home_app.home')) - File: flaskbook/user/views.py - > Line 73: ret_MAYBE_FUNCTION_NAME = render_template('user/login.html',form=form, error=error) -File: flaskbook/user/views.py - > reaches line 66, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 21: -File: flaskbook/user/views.py - > User input at line 92, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 84: logged_user = None - File: flaskbook/user/views.py - > Line 93: rel = Relationship.get_relationship(logged_user, user) - File: flaskbook/user/views.py - > Line 85: rel = None -File: flaskbook/user/views.py - > reaches line 92, trigger word "filter(": - logged_user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 22: -File: flaskbook/user/views.py - > User input at line 92, trigger word "get(": - logged_user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 84: logged_user = None - File: flaskbook/user/views.py - > Line 93: rel = Relationship.get_relationship(logged_user, user) - File: flaskbook/user/views.py - > Line 85: rel = None -File: flaskbook/user/views.py - > reaches line 118, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/profile.html',user=user, logged_user=logged_user, rel=rel, friends=friends, friends_total=friends_total, friends_page=friends_page, form=form, profile_messages=profile_messages) - -Vulnerability 23: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 136, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 24: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 148, trigger word "filter(": - if User.objects.filter(username=form.username.data.lower()).first(): - -Vulnerability 25: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 154, trigger word "filter(": - if User.objects.filter(email=form.email.data.lower()).first(): - -Vulnerability 26: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 168, trigger word "render_template(": - body_html = render_template('mail/user/change_email.html',user=user) - -Vulnerability 27: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 169, trigger word "render_template(": - body_text = render_template('mail/user/change_email.txt',user=user) - -Vulnerability 28: -File: flaskbook/user/views.py - > User input at line 136, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 138: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 143: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 144: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 146: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 164: form.email.data = user.email - File: flaskbook/user/views.py - > Line 175: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 141: image_ts = None -File: flaskbook/user/views.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/edit.html',form=form, error=error, message=message, user=user) - -Vulnerability 29: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 203, trigger word "filter(": - user = User.objects.filter(email=form.email.data.lower()).first() - -Vulnerability 30: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 212, trigger word "render_template(": - body_html = render_template('mail/user/password_reset.html',user=user) - -Vulnerability 31: -File: flaskbook/user/views.py - > User input at line 203, trigger word ".data": - user = User.objects.filter(email=form.email.data.lower()).first() -File: flaskbook/user/views.py - > reaches line 213, trigger word "render_template(": - body_text = render_template('mail/user/password_reset.txt',user=user) - -Vulnerability 32: -File: flaskbook/user/views.py - > User input at line 261, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -File: flaskbook/user/views.py - > reaches line 261, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 33: -File: flaskbook/feed/views.py - > User input at line 33, trigger word "get(": - from_user = User.objects.get(username=session.get('username')) -Reassigned in: - File: flaskbook/feed/views.py - > Line 73: ret_MAYBE_FUNCTION_NAME = 'Error!' - File: flaskbook/feed/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(ref) -File: flaskbook/feed/views.py - > reaches line 70, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_app.profile',username=from_user.username)) - -Vulnerability 34: -File: flaskbook/feed/views.py - > User input at line 33, trigger word "get(": - from_user = User.objects.get(username=session.get('username')) -Reassigned in: - File: flaskbook/feed/views.py - > Line 73: ret_MAYBE_FUNCTION_NAME = 'Error!' - File: flaskbook/feed/views.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(ref) -File: flaskbook/feed/views.py - > reaches line 70, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_app.profile',username=from_user.username)) - -Vulnerability 35: -File: flaskbook/feed/views.py - > User input at line 119, trigger word "get(": - from_user = User.objects.get(username=session.get('username')) -File: flaskbook/feed/views.py - > reaches line 122, trigger word "filter(": - existing_like = Message.objects.filter(parent=message_id, message_type=LIKE, from_user=from_user).count() - - - -HJeongWon/flaskr -https://github.com/HJeongWon/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:23.030946 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HJeongWon/flaskr. - -ChuckiePae/flaskr -https://github.com/ChuckiePae/flaskr -Entry file: None -Scanned: 2016-10-25 15:36:23.589978 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ChuckiePae/flaskr. - -qhdong/flasky -https://github.com/qhdong/flasky -Entry file: None -Scanned: 2016-10-25 15:36:27.104015 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wuqingwuqingwu/flaskk -https://github.com/wuqingwuqingwu/flaskk -Entry file: flaskk/chapter3a.py -Scanned: 2016-10-25 15:36:42.025078 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskk/venv/lib/python2.7/sre_compile.py - -oscarnyl/flaskpost -https://github.com/oscarnyl/flaskpost -Entry file: flaskpost/flaskpost/__init__.py -Scanned: 2016-10-25 15:36:46.567566 -No vulnerabilities found. - - -linjialongmao/flasky -https://github.com/linjialongmao/flasky -Entry file: None -Scanned: 2016-10-25 15:36:56.106470 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -algalanb/flaskapp -https://github.com/algalanb/flaskapp -Entry file: None -Scanned: 2016-10-25 15:36:56.617738 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/algalanb/flaskapp. - -Unknown22/Flaskr -https://github.com/Unknown22/Flaskr -Entry file: Flaskr/flaskr.py -Scanned: 2016-10-25 15:37:05.054589 -No vulnerabilities found. - - -sinwar/flaskr -https://github.com/sinwar/flaskr -Entry file: None -Scanned: 2016-10-25 15:37:05.597890 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sinwar/flaskr. - -lux600/flasktest -https://github.com/lux600/flasktest -Entry file: flasktest/hello_world.py -Scanned: 2016-10-25 15:37:11.237442 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AdamWawrow/flasktaskr -https://github.com/AdamWawrow/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:37:11.813926 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -KamiNoSierhej/flaskkk -https://github.com/KamiNoSierhej/flaskkk -Entry file: flaskkk/flaskkk/Polczan.py -Scanned: 2016-10-25 15:37:13.278581 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -reed-chi/flasktaskr -https://github.com/reed-chi/flasktaskr -Entry file: None -Scanned: 2016-10-25 15:37:13.821754 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Katebasoft/Flaskr -https://github.com/Katebasoft/Flaskr -Entry file: None -Scanned: 2016-10-25 15:37:21.746637 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zangree/flaskytest -https://github.com/zangree/flaskytest -Entry file: flaskytest/app_manager.py -Scanned: 2016-10-25 15:37:23.141729 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -he1chenglong/flasktest -https://github.com/he1chenglong/flasktest -Entry file: flasktest/code/02template/flaskapp.py -Scanned: 2016-10-25 15:37:24.998174 -No vulnerabilities found. - - -omegayang/flasklearn -https://github.com/omegayang/flasklearn -Entry file: flasklearn/app/__init__.py -Scanned: 2016-10-25 15:37:26.742959 -Vulnerability 1: -File: flasklearn/app/main/views.py - > User input at line 64, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasklearn/app/main/views.py - > Line 65: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasklearn/app/main/views.py - > Line 68: posts = pagination.items - File: flasklearn/app/main/views.py - > Line 63: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasklearn/app/main/views.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flasklearn/app/main/views.py - > User input at line 126, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasklearn/app/main/views.py - > Line 127: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasklearn/app/main/views.py - > Line 130: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasklearn/app/main/views.py - > Line 125: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasklearn/app/main/views.py - > reaches line 132, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 3: -File: flasklearn/app/main/views.py - > User input at line 141, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasklearn/app/main/views.py - > Line 142: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasklearn/app/main/views.py - > Line 145: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasklearn/app/main/views.py - > Line 140: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasklearn/app/main/views.py - > reaches line 147, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by ', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -ranchow/flaskapp -https://github.com/ranchow/flaskapp -Entry file: None -Scanned: 2016-10-25 15:37:27.304905 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ranchow/flaskapp. - -lassegit/flask-reactjs -https://github.com/lassegit/flask-reactjs -Entry file: None -Scanned: 2016-10-25 15:37:30.490623 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lassegit/flask-reactjs. - -vimalloc/flask-jwt-extended -https://github.com/vimalloc/flask-jwt-extended -Entry file: flask-jwt-extended/tests/test_blacklist.py -Scanned: 2016-10-25 15:37:32.788891 -No vulnerabilities found. - - -timmyreilly/introduction-to-flask -https://github.com/timmyreilly/introduction-to-flask -Entry file: introduction-to-flask/hello.py -Scanned: 2016-10-25 15:37:35.113260 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cuttlesoft/flask-workshop -https://github.com/cuttlesoft/flask-workshop -Entry file: flask-workshop/app/__init__.py -Scanned: 2016-10-25 15:37:38.698193 -No vulnerabilities found. - - -iamdavidmt/flask -https://github.com/iamdavidmt/flask -Entry file: None -Scanned: 2016-10-25 15:37:39.235601 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DIYer22/flask -https://github.com/DIYer22/flask -Entry file: None -Scanned: 2016-10-25 15:37:39.782257 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -woowooh/flask -https://github.com/woowooh/flask -Entry file: None -Scanned: 2016-10-25 15:37:40.310767 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jacksonyoudi/flask -https://github.com/jacksonyoudi/flask -Entry file: None -Scanned: 2016-10-25 15:37:41.365602 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jamesd3ao/Flask -https://github.com/jamesd3ao/Flask -Entry file: None -Scanned: 2016-10-25 15:37:41.931208 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -YellowGB/Flask -https://github.com/YellowGB/Flask -Entry file: None -Scanned: 2016-10-25 15:37:42.598234 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -konwan/flask -https://github.com/konwan/flask -Entry file: None -Scanned: 2016-10-25 15:37:43.185491 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lsyff210/flask -https://github.com/lsyff210/flask -Entry file: None -Scanned: 2016-10-25 15:37:43.977575 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dalyddaly/flask -https://github.com/dalyddaly/flask -Entry file: None -Scanned: 2016-10-25 15:37:44.566033 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Carryopendoor1/flask -https://github.com/Carryopendoor1/flask -Entry file: None -Scanned: 2016-10-25 15:37:46.145807 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CliveCullen/flask -https://github.com/CliveCullen/flask -Entry file: None -Scanned: 2016-10-25 15:37:56.670646 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jasondebolt/flask -https://github.com/jasondebolt/flask -Entry file: None -Scanned: 2016-10-25 15:37:57.222967 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rdeeds/flask -https://github.com/rdeeds/flask -Entry file: None -Scanned: 2016-10-25 15:38:04.737807 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nsuJolie/flask -https://github.com/nsuJolie/flask -Entry file: None -Scanned: 2016-10-25 15:38:06.271669 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mod2695/flask -https://github.com/mod2695/flask -Entry file: None -Scanned: 2016-10-25 15:38:06.888142 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rionagreally/Flask -https://github.com/rionagreally/Flask -Entry file: None -Scanned: 2016-10-25 15:38:12.413536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhaokefei/flask -https://github.com/zhaokefei/flask -Entry file: None -Scanned: 2016-10-25 15:38:12.926238 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -djjjj/flask -https://github.com/djjjj/flask -Entry file: None -Scanned: 2016-10-25 15:38:14.444630 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xjr7670/flask -https://github.com/xjr7670/flask -Entry file: None -Scanned: 2016-10-25 15:38:15.009614 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -k9imJ/flask -https://github.com/k9imJ/flask -Entry file: None -Scanned: 2016-10-25 15:38:15.540520 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -berstearns/flask -https://github.com/berstearns/flask -Entry file: None -Scanned: 2016-10-25 15:38:23.060845 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fortune599/flask -https://github.com/fortune599/flask -Entry file: None -Scanned: 2016-10-25 15:38:24.611268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yueqingwang/flask -https://github.com/yueqingwang/flask -Entry file: None -Scanned: 2016-10-25 15:38:26.167163 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minglan01/flask -https://github.com/minglan01/flask -Entry file: None -Scanned: 2016-10-25 15:38:27.740875 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kkltcjk/flask -https://github.com/kkltcjk/flask -Entry file: None -Scanned: 2016-10-25 15:38:28.288990 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tcyfs/flask -https://github.com/tcyfs/flask -Entry file: None -Scanned: 2016-10-25 15:38:29.810110 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arcVyas/flask -https://github.com/arcVyas/flask -Entry file: None -Scanned: 2016-10-25 15:38:31.330114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sakuuat/Flask -https://github.com/sakuuat/Flask -Entry file: None -Scanned: 2016-10-25 15:38:33.852028 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lastone9182/flask -https://github.com/lastone9182/flask -Entry file: None -Scanned: 2016-10-25 15:38:36.376124 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -juliascript/Flask -https://github.com/juliascript/Flask -Entry file: None -Scanned: 2016-10-25 15:38:39.912836 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -larry1994/flask -https://github.com/larry1994/flask -Entry file: None -Scanned: 2016-10-25 15:38:40.481591 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jyntran/flask -https://github.com/jyntran/flask -Entry file: None -Scanned: 2016-10-25 15:38:40.990479 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jience/flask -https://github.com/jience/flask -Entry file: None -Scanned: 2016-10-25 15:38:41.510765 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mayurvaidya09/Flask -https://github.com/mayurvaidya09/Flask -Entry file: None -Scanned: 2016-10-25 15:38:42.055610 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -harryjia/flask -https://github.com/harryjia/flask -Entry file: None -Scanned: 2016-10-25 15:38:42.620298 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -randm-/flask -https://github.com/randm-/flask -Entry file: None -Scanned: 2016-10-25 15:38:43.136224 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -davinbutler/flask -https://github.com/davinbutler/flask -Entry file: None -Scanned: 2016-10-25 15:38:43.651891 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Gershine/Flask -https://github.com/Gershine/Flask -Entry file: None -Scanned: 2016-10-25 15:38:44.176792 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rahulVudutala/flask -https://github.com/rahulVudutala/flask -Entry file: None -Scanned: 2016-10-25 15:38:44.710057 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jesusalatorre/Flask -https://github.com/jesusalatorre/Flask -Entry file: None -Scanned: 2016-10-25 15:38:46.263619 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sanie4eg/Flask -https://github.com/sanie4eg/Flask -Entry file: None -Scanned: 2016-10-25 15:38:56.794846 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -skraiman/flask -https://github.com/skraiman/flask -Entry file: None -Scanned: 2016-10-25 15:38:57.313242 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -g00302826/Flask -https://github.com/g00302826/Flask -Entry file: None -Scanned: 2016-10-25 15:39:04.863705 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ricardonhuang/flask -https://github.com/ricardonhuang/flask -Entry file: None -Scanned: 2016-10-25 15:39:06.435243 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cmeisinger/flask -https://github.com/cmeisinger/flask -Entry file: None -Scanned: 2016-10-25 15:39:07.044457 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -vojtahelle/flask -https://github.com/vojtahelle/flask -Entry file: None -Scanned: 2016-10-25 15:39:12.563003 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Morfyo/Flask -https://github.com/Morfyo/Flask -Entry file: None -Scanned: 2016-10-25 15:39:13.841675 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hamdimuzakkiy/Flask -https://github.com/hamdimuzakkiy/Flask -Entry file: None -Scanned: 2016-10-25 15:39:15.373975 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -VishnuArukat/flask -https://github.com/VishnuArukat/flask -Entry file: None -Scanned: 2016-10-25 15:39:23.887201 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fushouhai/flask -https://github.com/fushouhai/flask -Entry file: None -Scanned: 2016-10-25 15:39:25.401395 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -darylkeane/flask -https://github.com/darylkeane/flask -Entry file: None -Scanned: 2016-10-25 15:39:26.927311 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Tangugo/flask -https://github.com/Tangugo/flask -Entry file: None -Scanned: 2016-10-25 15:39:28.442990 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bharatsush/flask -https://github.com/bharatsush/flask -Entry file: None -Scanned: 2016-10-25 15:39:28.963141 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LittltZhao/Flask -https://github.com/LittltZhao/Flask -Entry file: None -Scanned: 2016-10-25 15:39:30.494947 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sadscv/flask -https://github.com/sadscv/flask -Entry file: None -Scanned: 2016-10-25 15:39:32.002567 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chenlei28695/flask -https://github.com/chenlei28695/flask -Entry file: None -Scanned: 2016-10-25 15:39:34.584968 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -I-am-Gabi/flask-minicurso -https://github.com/I-am-Gabi/flask-minicurso -Entry file: flask-minicurso/minicurso-flask.py -Scanned: 2016-10-25 15:39:39.553399 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhangheli/flask-google -https://github.com/zhangheli/flask-google -Entry file: flask-google/g.py -Scanned: 2016-10-25 15:39:40.869318 -No vulnerabilities found. - - -arpitbbhayani/flasksr -https://github.com/arpitbbhayani/flasksr -Entry file: flasksr/examples/basicsr.py -Scanned: 2016-10-25 15:39:42.268533 -No vulnerabilities found. - - -bellcodo/fisrt-flask-app -https://github.com/bellcodo/fisrt-flask-app -Entry file: fisrt-flask-app/hello_app.py -Scanned: 2016-10-25 15:39:43.561876 -No vulnerabilities found. - - -lk-geimfari/flask_church -https://github.com/lk-geimfari/flask_church -Entry file: flask_church/example.py -Scanned: 2016-10-25 15:39:45.125775 -No vulnerabilities found. - - -padznich/_flask -https://github.com/padznich/_flask -Entry file: _flask/proj_5_TDD_1/app.py -Scanned: 2016-10-25 15:39:46.585218 -No vulnerabilities found. - - -EverestYAO/flask-blog -https://github.com/EverestYAO/flask-blog -Entry file: flask-blog/flask/Scripts/flask-blog/app/__init__.py -Scanned: 2016-10-25 15:39:48.575573 -Vulnerability 1: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 19, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 20: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 23: posts = pagination.items - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 31: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 33: posts = pagination.items - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 26, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 24: show_followed = False - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 96, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 98: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 100: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 103: comments = pagination.items - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 95: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 104, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 160, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 161: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 163: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 159: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 164, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of ', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 173, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 174: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 177: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 172: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 202: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > Line 204: comments = pagination.items -File: flask-blog/flask/Scripts/flask-blog/app/main/views.py - > reaches line 205, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -pandapan0021/myblog -https://github.com/pandapan0021/myblog -Entry file: None -Scanned: 2016-10-25 15:39:57.133608 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -qwertypomy/flask-example-app -https://github.com/qwertypomy/flask-example-app -Entry file: flask-example-app/app.py -Scanned: 2016-10-25 15:40:02.879970 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -Millyn/uFlask -https://github.com/Millyn/uFlask -Entry file: uFlask/project/__init__.py -Scanned: 2016-10-25 15:40:04.415110 -No vulnerabilities found. - - -hit9/flask-idempotent2 -https://github.com/hit9/flask-idempotent2 -Entry file: flask-idempotent2/example.py -Scanned: 2016-10-25 15:40:05.967900 -No vulnerabilities found. - - -rofrano/nyu-lab-restful-flask -https://github.com/rofrano/nyu-lab-restful-flask -Entry file: nyu-lab-restful-flask/server.py -Scanned: 2016-10-25 15:40:07.362847 -No vulnerabilities found. - - -Sthacks/sthacksWebsite -https://github.com/Sthacks/sthacksWebsite -Entry file: sthacksWebsite/app.py -Scanned: 2016-10-25 15:40:09.461069 -No vulnerabilities found. - - -on3iro/cookiecutter-flask -https://github.com/on3iro/cookiecutter-flask -Entry file: cookiecutter-flask/{{cookiecutter.app_name}}/{{cookiecutter.app_name}}/app.py -Scanned: 2016-10-25 15:40:11.130094 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mmarconm/flask_templates -https://github.com/mmarconm/flask_templates -Entry file: flask_templates/app.py -Scanned: 2016-10-25 15:40:13.451876 -No vulnerabilities found. - - -AminHP/flask-mvc -https://github.com/AminHP/flask-mvc -Entry file: flask-mvc/project/application.py -Scanned: 2016-10-25 15:40:14.889815 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jkaberg/tvhProxy -https://github.com/jkaberg/tvhProxy -Entry file: tvhProxy/tvhProxy.py -Scanned: 2016-10-25 15:40:16.292469 -No vulnerabilities found. - - -DanielTimLee/flask_tutorial -https://github.com/DanielTimLee/flask_tutorial -Entry file: None -Scanned: 2016-10-25 15:40:17.820319 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DanielTimLee/flask_tutorial. - -atomist-project-templates/flask-service -https://github.com/atomist-project-templates/flask-service -Entry file: flask-service/flask_service/__init__.py -Scanned: 2016-10-25 15:40:19.333442 -Vulnerability 1: -File: flask-service/flask_service/tests/test_main_views.py - > User input at line 10, trigger word "get(": - res = client.get(url_for('main_app.swagger')) -File: flask-service/flask_service/tests/test_main_views.py - > reaches line 10, trigger word "url_for(": - res = client.get(url_for('main_app.swagger')) - -Vulnerability 2: -File: flask-service/flask_service/my_app/tests/test_views.py - > User input at line 6, trigger word "get(": - res = client.get(url_for('my_app_app.index')) -File: flask-service/flask_service/my_app/tests/test_views.py - > reaches line 6, trigger word "url_for(": - res = client.get(url_for('my_app_app.index')) - - - -EenTang/flaskdev -https://github.com/EenTang/flaskdev -Entry file: None -Scanned: 2016-10-25 15:40:19.851994 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -martyni/flaskstrap -https://github.com/martyni/flaskstrap -Entry file: flaskstrap/flaskstrap/app.py -Scanned: 2016-10-25 15:40:25.716084 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ramramu3433/flaskapp -https://github.com/ramramu3433/flaskapp -Entry file: None -Scanned: 2016-10-25 15:40:26.235197 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ramramu3433/flaskapp. - -irritant/flasktory -https://github.com/irritant/flasktory -Entry file: flasktory/template/app/__init__.py -Scanned: 2016-10-25 15:40:28.610347 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -naviplay/flasktutorial -https://github.com/naviplay/flasktutorial -Entry file: None -Scanned: 2016-10-25 15:40:29.140120 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/naviplay/flasktutorial. - -MagicRoc/flaskoc -https://github.com/MagicRoc/flaskoc -Entry file: flaskoc/hello.py -Scanned: 2016-10-25 15:40:30.820739 -Vulnerability 1: -File: flaskoc/app/main/views.py - > User input at line 56, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskoc/app/main/views.py - > Line 57: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskoc/app/main/views.py - > Line 60: posts = pagination.items - File: flaskoc/app/main/views.py - > Line 55: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskoc/app/main/views.py - > reaches line 61, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: flaskoc/app/main/views.py - > User input at line 72, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskoc/app/main/views.py - > Line 73: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskoc/app/main/views.py - > Line 76: posts = pagination.items -File: flaskoc/app/main/views.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -kaish5536/Flaskr -https://github.com/kaish5536/Flaskr -Entry file: None -Scanned: 2016-10-25 15:40:31.349790 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sanjayankur31/flaskr -https://github.com/sanjayankur31/flaskr -Entry file: None -Scanned: 2016-10-25 15:40:32.902278 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanjayankur31/flaskr. - -shalev67/flasky -https://github.com/shalev67/flasky -Entry file: None -Scanned: 2016-10-25 15:40:35.472456 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -isyippee/flasky -https://github.com/isyippee/flasky -Entry file: None -Scanned: 2016-10-25 15:40:37.986897 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mwoo99/flasktemplate -https://github.com/mwoo99/flasktemplate -Entry file: flasktemplate/flask_template.py -Scanned: 2016-10-25 15:40:41.348043 -No vulnerabilities found. - - -ChrisDBrooks/flaskbyexample -https://github.com/ChrisDBrooks/flaskbyexample -Entry file: flaskbyexample/hello.py -Scanned: 2016-10-25 15:40:42.678284 -No vulnerabilities found. - - -mkykadir/flaskrofficialtut -https://github.com/mkykadir/flaskrofficialtut -Entry file: flaskrofficialtut/flaskr.py -Scanned: 2016-10-25 15:40:44.043829 -No vulnerabilities found. - - -rbunch-dc/flasksql -https://github.com/rbunch-dc/flasksql -Entry file: flasksql/flaskMysql.py -Scanned: 2016-10-25 15:40:47.296219 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yorolifarg/flasksample -https://github.com/yorolifarg/flasksample -Entry file: flasksample/chapter2/app.py -Scanned: 2016-10-25 15:40:50.960304 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pradyumnac/flasklearn -https://github.com/pradyumnac/flasklearn -Entry file: flasklearn/code/redisdemo.py -Scanned: 2016-10-25 15:40:52.365940 -No vulnerabilities found. - - -gd452/flask -https://github.com/gd452/flask -Entry file: None -Scanned: 2016-10-25 22:52:58.936313 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -llh335/flask -https://github.com/llh335/flask -Entry file: None -Scanned: 2016-10-25 22:52:59.461930 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bh45k4r/flask -https://github.com/bh45k4r/flask -Entry file: None -Scanned: 2016-10-25 22:52:59.983826 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -paulmin55/flask -https://github.com/paulmin55/flask -Entry file: None -Scanned: 2016-10-25 22:53:00.510000 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CarlEkerot/flask-orm -https://github.com/CarlEkerot/flask-orm -Entry file: flask-orm/webapp/__init__.py -Scanned: 2016-10-25 22:53:02.247094 -No vulnerabilities found. - - -ibininja/upload_file_python -https://github.com/ibininja/upload_file_python -Entry file: upload_file_python/src/app_display_multiple_images.py -Scanned: 2016-10-25 22:53:03.552835 -No vulnerabilities found. - - -fraoustin/flaskserver -https://github.com/fraoustin/flaskserver -Entry file: None -Scanned: 2016-10-25 22:53:04.096722 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fraoustin/flaskserver. - -ecerami/hello_flask -https://github.com/ecerami/hello_flask -Entry file: hello_flask/app.py -Scanned: 2016-10-25 22:53:05.376527 -No vulnerabilities found. - - -kai1/flasktest -https://github.com/kai1/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 22:53:07.086537 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: None -Scanned: 2016-10-25 22:53:07.611841 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/willianribeiro/flaskr. - -StuartChristie/Flasky -https://github.com/StuartChristie/Flasky -Entry file: None -Scanned: 2016-10-25 22:53:08.112348 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/StuartChristie/Flasky. - -milinbhakta/flaskmaterialdesign -https://github.com/milinbhakta/flaskmaterialdesign -Entry file: flaskmaterialdesign/venv/Lib/site-packages/flask/sessions.py -Scanned: 2016-10-25 22:53:13.544515 -No vulnerabilities found. - - -Hellemos/flaskapp -https://github.com/Hellemos/flaskapp -Entry file: None -Scanned: 2016-10-25 22:53:14.610560 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Hellemos/flaskapp. - -ssssergey/flaskengine -https://github.com/ssssergey/flaskengine -Entry file: flaskengine/app/__init__.py -Scanned: 2016-10-25 22:53:15.991679 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -milinbhakta/flaskjinja -https://github.com/milinbhakta/flaskjinja -Entry file: flaskjinja/hello.py -Scanned: 2016-10-25 22:53:22.038783 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -saucecode/flaskcat -https://github.com/saucecode/flaskcat -Entry file: flaskcat/flaskcat.py -Scanned: 2016-10-25 22:53:23.375791 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-25 22:53:23.904316 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ashishkx/Flaskr -https://github.com/ashishkx/Flaskr -Entry file: None -Scanned: 2016-10-25 22:53:24.416388 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jward1/flasktaskr -https://github.com/jward1/flasktaskr -Entry file: None -Scanned: 2016-10-25 22:53:24.931689 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -schoolofcode-me/web_blog -https://github.com/schoolofcode-me/web_blog -Entry file: web_blog/src/app.py -Scanned: 2016-10-25 22:53:26.347500 -No vulnerabilities found. - - -arpm/FlaskTaskr -https://github.com/arpm/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 22:53:26.882383 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arpm/FlaskTaskr. - -iKalin/flask1 -https://github.com/iKalin/flask1 -Entry file: flask1/routes.py -Scanned: 2016-10-25 22:53:30.342007 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -iamrajhans/FlaskPYDemo -https://github.com/iamrajhans/FlaskPYDemo -Entry file: None -Scanned: 2016-10-25 22:53:31.697268 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/iamrajhans/FlaskPYDemo. - -MortalCatalyst/flaskTR -https://github.com/MortalCatalyst/flaskTR -Entry file: flaskTR/flasktaskr/views.py -Scanned: 2016-10-25 22:53:32.988051 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -QuadPiece/Quad-Devices-Two -https://github.com/QuadPiece/Quad-Devices-Two -Entry file: Quad-Devices-Two/run.py -Scanned: 2016-10-25 22:53:34.279342 -No vulnerabilities found. - - -dbunker/Flask-Tread -https://github.com/dbunker/Flask-Tread -Entry file: Flask-Tread/examples/blog/app/mainapp/__init__.py -Scanned: 2016-10-25 22:53:35.717929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -martincalvert/GAE-Flask -https://github.com/martincalvert/GAE-Flask -Entry file: GAE-Flask/routes.py -Scanned: 2016-10-25 22:53:38.461088 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -fergyfresh/flask-staysafe -https://github.com/fergyfresh/flask-staysafe -Entry file: flask-staysafe/app/__init__.py -Scanned: 2016-10-25 22:55:02.509582 -No vulnerabilities found. - - -arvelt/hello-flask -https://github.com/arvelt/hello-flask -Entry file: hello-flask/main.py -Scanned: 2016-10-25 22:55:04.187753 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -andrewheekin/flask-metatag -https://github.com/andrewheekin/flask-metatag -Entry file: flask-metatag/app.py -Scanned: 2016-10-25 22:55:05.534757 -No vulnerabilities found. - - -Seneckiy/workwithFlask -https://github.com/Seneckiy/workwithFlask -Entry file: workwithFlask/hello.py -Scanned: 2016-10-25 22:55:07.888469 -No vulnerabilities found. - - -xuefeng-huang/flask_task -https://github.com/xuefeng-huang/flask_task -Entry file: flask_task/__init__.py -Scanned: 2016-10-25 22:55:09.253433 -No vulnerabilities found. - - -ichy-wayland/flask-temp -https://github.com/ichy-wayland/flask-temp -Entry file: flask-temp/main.py -Scanned: 2016-10-25 22:55:10.642719 -No vulnerabilities found. - - -RodrigoVillatoro/flask_blog -https://github.com/RodrigoVillatoro/flask_blog -Entry file: flask_blog/blog_app/my_app.py -Scanned: 2016-10-25 22:55:12.470274 -Vulnerability 1: -File: flask_blog/blog_app/views.py - > User input at line 42, trigger word "get(": - user_email = request.form.get('email') -File: flask_blog/blog_app/views.py - > reaches line 43, trigger word "filter(": - user = User.query.filter(User.email == user_email).first() - -Vulnerability 2: -File: flask_blog/blog_app/helpers.py - > User input at line 5, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: flask_blog/blog_app/helpers.py - > Line 7: page = int(page) - File: flask_blog/blog_app/helpers.py - > Line 9: page = 1 - File: flask_blog/blog_app/helpers.py - > Line 10: object_list = query.paginate(page, paginate_by) -File: flask_blog/blog_app/helpers.py - > reaches line 11, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template_name,object_list=object_list, context) - -Vulnerability 3: -File: flask_blog/blog_app/entries/blueprint.py - > User input at line 95, trigger word "files[": - image_file = request.files['file'] -Reassigned in: - File: flask_blog/blog_app/entries/blueprint.py - > Line 96: filename = os.path.join(app.config['IMAGES_DIR'], secure_filename(image_file.filename)) -File: flask_blog/blog_app/entries/blueprint.py - > reaches line 101, trigger word "flash(": - flash('Saved {}'.format(os.path.basename(filename)), 'success') - -Vulnerability 4: -File: flask_blog/blog_app/entries/blueprint.py - > User input at line 112, trigger word "Markup(": - markdown_body = Markup(markdown.markdown(entry.body)) -File: flask_blog/blog_app/entries/blueprint.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('entries/detail.html',entry=entry, form=form, markdown_body=markdown_body) - -Vulnerability 5: -File: flask_blog/blog_app/entries/forms.py - > User input at line 86, trigger word ".data": - entry = Entry.query.filter(Entry.status == Entry.STATUS_PUBLIC & Entry.id == self.entry_id.data).first() -File: flask_blog/blog_app/entries/forms.py - > reaches line 86, trigger word "filter(": - entry = Entry.query.filter(Entry.status == Entry.STATUS_PUBLIC & Entry.id == self.entry_id.data).first() - - - -patrickyoung/simple-flask -https://github.com/patrickyoung/simple-flask -Entry file: simple-flask/hello.py -Scanned: 2016-10-25 22:55:13.775921 -No vulnerabilities found. - - -sancarbar/flask-auth -https://github.com/sancarbar/flask-auth -Entry file: flask-auth/app.py -Scanned: 2016-10-25 22:55:15.056476 -No vulnerabilities found. - - -lifayi2008/my_flask -https://github.com/lifayi2008/my_flask -Entry file: my_flask/app/__init__.py -Scanned: 2016-10-25 22:55:16.491103 -No vulnerabilities found. - - -staticor/learnFlask -https://github.com/staticor/learnFlask -Entry file: None -Scanned: 2016-10-25 22:55:17.820748 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/staticor/learnFlask. - -mehmettaskiner/flask-skeleton -https://github.com/mehmettaskiner/flask-skeleton -Entry file: flask-skeleton/app.py -Scanned: 2016-10-25 22:55:19.107333 -No vulnerabilities found. - - -robin-lee/flask-tutorial -https://github.com/robin-lee/flask-tutorial -Entry file: flask-tutorial/app.py -Scanned: 2016-10-25 22:55:20.517485 -No vulnerabilities found. - - -zonzpoo/blog-flask -https://github.com/zonzpoo/blog-flask -Entry file: blog-flask/tests/hello.py -Scanned: 2016-10-25 22:55:21.943925 -No vulnerabilities found. - - -arpm/flask-blog -https://github.com/arpm/flask-blog -Entry file: None -Scanned: 2016-10-25 22:55:25.314758 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -raejoon/lype-flask -https://github.com/raejoon/lype-flask -Entry file: lype-flask/lyre.py -Scanned: 2016-10-25 22:55:26.786581 -Vulnerability 1: -File: lype-flask/lyre.py - > User input at line 239, trigger word "get(": - splid = request.args.get('spl', None) -Reassigned in: - File: lype-flask/lyre.py - > Line 252: plid = splid - File: lype-flask/lyre.py - > Line 256: videos = serv.get_videos(youtube, plid) - File: lype-flask/lyre.py - > Line 257: session['playq'] = videos - File: lype-flask/lyre.py - > Line 258: session['nowplaying'] = -1 - File: lype-flask/lyre.py - > Line 267: title = serv.get_title_from_plid(playlists, plid) - File: lype-flask/lyre.py - > Line 269: title = serv.get_title_from_plid(searched_playlists, plid) - File: lype-flask/lyre.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 231: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 240: plid = request.args.get('pl', None) - File: lype-flask/lyre.py - > Line 244: videos = None - File: lype-flask/lyre.py - > Line 246: session['shuffle'] = False - File: lype-flask/lyre.py - > Line 249: session['nowplaying'] = -1 -File: lype-flask/lyre.py - > reaches line 271, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show_player.html',isMine=isMine, playlists=playlists, spls=searched_playlists, pltitle=title, videos=videos) - -Vulnerability 2: -File: lype-flask/lyre.py - > User input at line 240, trigger word "get(": - plid = request.args.get('pl', None) -Reassigned in: - File: lype-flask/lyre.py - > Line 252: plid = splid - File: lype-flask/lyre.py - > Line 256: videos = serv.get_videos(youtube, plid) - File: lype-flask/lyre.py - > Line 257: session['playq'] = videos - File: lype-flask/lyre.py - > Line 258: session['nowplaying'] = -1 - File: lype-flask/lyre.py - > Line 267: title = serv.get_title_from_plid(playlists, plid) - File: lype-flask/lyre.py - > Line 269: title = serv.get_title_from_plid(searched_playlists, plid) - File: lype-flask/lyre.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 231: ret_MAYBE_FUNCTION_NAME = redirect(url_for('oauth2callback')) - File: lype-flask/lyre.py - > Line 244: videos = None - File: lype-flask/lyre.py - > Line 246: session['shuffle'] = False - File: lype-flask/lyre.py - > Line 249: session['nowplaying'] = -1 -File: lype-flask/lyre.py - > reaches line 271, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show_player.html',isMine=isMine, playlists=playlists, spls=searched_playlists, pltitle=title, videos=videos) - - - -ayusharma/flask-mysql -https://github.com/ayusharma/flask-mysql -Entry file: flask-mysql/app.py -Scanned: 2016-10-25 22:55:30.027330 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-mysql/venv/lib/python2.7/sre_compile.py - -zolaneta/hello_flask -https://github.com/zolaneta/hello_flask -Entry file: hello_flask/Flask.py -Scanned: 2016-10-25 22:55:31.366209 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-25 22:55:32.674385 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -zhaojf85/docker-flask -https://github.com/zhaojf85/docker-flask -Entry file: docker-flask/hello-flask/app.py -Scanned: 2016-10-25 22:55:33.971470 -No vulnerabilities found. - - -higoreduardo/flask-blog -https://github.com/higoreduardo/flask-blog -Entry file: None -Scanned: 2016-10-25 22:55:34.511316 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sholsapp/flask-science -https://github.com/sholsapp/flask-science -Entry file: flask-science/flaskscience/__init__.py -Scanned: 2016-10-25 22:55:35.945297 -No vulnerabilities found. - - -luoluohang/flask_blog -https://github.com/luoluohang/flask_blog -Entry file: flask_blog/app/__init__.py -Scanned: 2016-10-25 22:55:37.436175 -Vulnerability 1: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 18: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 18: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 18: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flask_blog/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 33: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 5: -File: flask_blog/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 23: show_followed = False - File: flask_blog/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 6: -File: flask_blog/app/main/views.py - > User input at line 43, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 44: pagination = user.post.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 47: posts = pagination.items -File: flask_blog/app/main/views.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 7: -File: flask_blog/app/main/views.py - > User input at line 102, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 104: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_blog/app/main/views.py - > Line 105: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 107: comments = pagination.items - File: flask_blog/app/main/views.py - > Line 101: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_blog/app/main/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, pagination=pagination, comments=comments) - -Vulnerability 8: -File: flask_blog/app/main/views.py - > User input at line 154, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 155: pagination = user.follower.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 157: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_blog/app/main/views.py - > Line 153: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 159, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, pagination=pagination, title='Followers of', endpoint='.followers', follows=follows) - -Vulnerability 9: -File: flask_blog/app/main/views.py - > User input at line 168, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 169: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 171: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_blog/app/main/views.py - > Line 167: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 173, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, pagination=pagination, follows=follows, title='Followed by', endpoint='.followed_by') - -Vulnerability 10: -File: flask_blog/app/main/views.py - > User input at line 193, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 194: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 197: comments = pagination.items -File: flask_blog/app/main/views.py - > reaches line 198, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -mnzr/MegaFlask -https://github.com/mnzr/MegaFlask -Entry file: MegaFlask/app/__init__.py -Scanned: 2016-10-25 22:55:38.868789 -No vulnerabilities found. - - -rchibana/MicroBlog -https://github.com/rchibana/MicroBlog -Entry file: MicroBlog/app/__init__.py -Scanned: 2016-10-25 22:55:40.311425 -No vulnerabilities found. - - -damstrom/flask-hello-world -https://github.com/damstrom/flask-hello-world -Entry file: None -Scanned: 2016-10-25 22:55:40.853296 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -atf1999/Flask-Mega-Tutorial -https://github.com/atf1999/Flask-Mega-Tutorial -Entry file: Flask-Mega-Tutorial/server.py -Scanned: 2016-10-25 22:55:42.167166 -No vulnerabilities found. - - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-25 22:55:43.647468 -No vulnerabilities found. - - -apeete/flaskHelloWorld -https://github.com/apeete/flaskHelloWorld -Entry file: flaskHelloWorld/app.py -Scanned: 2016-10-25 22:56:01.647510 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lucidfrontier45/FlaskRethinkDBProject -https://github.com/lucidfrontier45/FlaskRethinkDBProject -Entry file: FlaskRethinkDBProject/webapp/factory.py -Scanned: 2016-10-25 22:56:04.014430 -No vulnerabilities found. - - -jwnwilson/flask_gae_example -https://github.com/jwnwilson/flask_gae_example -Entry file: flask_gae_example/hello_world.py -Scanned: 2016-10-25 22:56:08.399074 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-25 22:56:09.895689 -No vulnerabilities found. - - -Hyvjan/flask-hello-world -https://github.com/Hyvjan/flask-hello-world -Entry file: None -Scanned: 2016-10-25 22:56:10.461534 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -auslander70/flask_hello_world -https://github.com/auslander70/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 22:56:11.770942 -No vulnerabilities found. - - -BugisDev/AppSurvey-Flask -https://github.com/BugisDev/AppSurvey-Flask -Entry file: AppSurvey-Flask/app.py -Scanned: 2016-10-25 22:56:13.208337 -No vulnerabilities found. - - -purpleP/flask_alchemy_rest -https://github.com/purpleP/flask_alchemy_rest -Entry file: flask_alchemy_rest/tests/test_endpoints.py -Scanned: 2016-10-25 22:56:14.910214 -No vulnerabilities found. - - -yueyehm/flask_hello_world -https://github.com/yueyehm/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 22:56:16.186736 -No vulnerabilities found. - - -lhr0916/flask_redis_task_q -https://github.com/lhr0916/flask_redis_task_q -Entry file: flask_redis_task_q/web/app.py -Scanned: 2016-10-25 22:56:17.487375 -No vulnerabilities found. - - -PrettyPrinted/flask-request-decorators -https://github.com/PrettyPrinted/flask-request-decorators -Entry file: flask-request-decorators/request_decorators.py -Scanned: 2016-10-25 22:56:18.771571 -No vulnerabilities found. - - -ics/Flask-GnuPG -https://github.com/ics/Flask-GnuPG -Entry file: Flask-GnuPG/test_flask_gnupg.py -Scanned: 2016-10-25 22:56:20.081953 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-25 22:56:21.376570 -No vulnerabilities found. - - -leitu/netscaler-flask-api -https://github.com/leitu/netscaler-flask-api -Entry file: netscaler-flask-api/netscaler_api/__init__.py -Scanned: 2016-10-25 22:56:22.806756 -No vulnerabilities found. - - -shilpasanthosh/flask-user-login-app -https://github.com/shilpasanthosh/flask-user-login-app -Entry file: flask-user-login-app/loginapp/app.py -Scanned: 2016-10-25 22:56:26.598037 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rasselpratomo/simple_flask_restful -https://github.com/rasselpratomo/simple_flask_restful -Entry file: simple_flask_restful/app/__init__.py -Scanned: 2016-10-25 22:56:27.936138 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -PrettyPrinted/flask-uploads-intro -https://github.com/PrettyPrinted/flask-uploads-intro -Entry file: flask-uploads-intro/upload.py -Scanned: 2016-10-25 22:56:29.434167 -No vulnerabilities found. - - -kojoidrissa/flask_intro_video -https://github.com/kojoidrissa/flask_intro_video -Entry file: flask_intro_video/5a/hello.py -Scanned: 2016-10-25 22:56:30.972172 -Vulnerability 1: -File: flask_intro_video/5a/hello.py - > User input at line 36, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_intro_video/5a/hello.py - > Line 32: name = None -File: flask_intro_video/5a/hello.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name, new=new) - - - -joe8767/flask-restful-example -https://github.com/joe8767/flask-restful-example -Entry file: flask-restful-example/api.py -Scanned: 2016-10-25 22:56:32.366072 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: None -Scanned: 2016-10-25 22:56:32.880390 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jmsalcido/python-flask-microblog -https://github.com/jmsalcido/python-flask-microblog -Entry file: python-flask-microblog/microblog/app/__init__.py -Scanned: 2016-10-25 22:56:34.424185 -Vulnerability 1: -File: python-flask-microblog/microblog/app/views.py - > User input at line 107, trigger word ".data": - username = form.username.data -Reassigned in: - File: python-flask-microblog/microblog/app/views.py - > Line 108: g.user.username = username - File: python-flask-microblog/microblog/app/views.py - > Line 115: ret_MAYBE_FUNCTION_NAME = render_template('user/edit_user.html',user=user, form=form) -File: python-flask-microblog/microblog/app/views.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_profile',username=username)) - -Vulnerability 2: -File: python-flask-microblog/microblog/app/views.py - > User input at line 107, trigger word ".data": - username = form.username.data -Reassigned in: - File: python-flask-microblog/microblog/app/views.py - > Line 108: g.user.username = username - File: python-flask-microblog/microblog/app/views.py - > Line 115: ret_MAYBE_FUNCTION_NAME = render_template('user/edit_user.html',user=user, form=form) -File: python-flask-microblog/microblog/app/views.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user_profile',username=username)) - -Vulnerability 3: -File: python-flask-microblog/microblog/app/forms.py - > User input at line 34, trigger word ".data": - users = User.query.filter(or_(User.username == self.username.data, User.email == self.email.data)).all() -File: python-flask-microblog/microblog/app/forms.py - > reaches line 34, trigger word "filter(": - users = User.query.filter(or_(User.username == self.username.data, User.email == self.email.data)).all() - - - -ettanany/flask-angular-contact-manager -https://github.com/ettanany/flask-angular-contact-manager -Entry file: flask-angular-contact-manager/server/app/__init__.py -Scanned: 2016-10-25 22:56:36.240415 -No vulnerabilities found. - - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-25 22:56:37.551302 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 35, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) - File: WebAppWithFlask/controller.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) -File: WebAppWithFlask/controller.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('update.html',post=post) - -Vulnerability 3: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -marcfilba/videoStreamingFlask -https://github.com/marcfilba/videoStreamingFlask -Entry file: videoStreamingFlask/main.py -Scanned: 2016-10-25 22:56:38.818608 -No vulnerabilities found. - - -Jacob234/Flask-hello-world -https://github.com/Jacob234/Flask-hello-world -Entry file: Flask-hello-world/hello_world.py -Scanned: 2016-10-25 22:56:40.115612 -No vulnerabilities found. - - -PrettyPrinted/flask-restless-post -https://github.com/PrettyPrinted/flask-restless-post -Entry file: flask-restless-post/restless.py -Scanned: 2016-10-25 22:56:41.391557 -No vulnerabilities found. - - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-25 22:56:41.914873 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alexwilkerson/microblog. - -austindavid/flasktaskr-cont -https://github.com/austindavid/flasktaskr-cont -Entry file: flasktaskr-cont/project/__init__.py -Scanned: 2016-10-25 22:56:43.347078 -No vulnerabilities found. - - -RicoChou/MyFlasky -https://github.com/RicoChou/MyFlasky -Entry file: MyFlasky/app/__init__.py -Scanned: 2016-10-25 22:56:45.119184 -Vulnerability 1: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: MyFlasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: MyFlasky/app/api_1_0/posts.py - > Line 16: prev = None - File: MyFlasky/app/api_1_0/posts.py - > Line 19: next = None -File: MyFlasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: MyFlasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 20: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 23: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: MyFlasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: MyFlasky/app/api_1_0/users.py - > Line 42: prev = None - File: MyFlasky/app/api_1_0/users.py - > Line 45: next = None -File: MyFlasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 15: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 18: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: MyFlasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: MyFlasky/app/api_1_0/comments.py - > Line 43: prev = None - File: MyFlasky/app/api_1_0/comments.py - > Line 46: next = None -File: MyFlasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: MyFlasky/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 55: posts = pagination.items - File: MyFlasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: MyFlasky/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 45: show_followed = False - File: MyFlasky/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: MyFlasky/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 67: posts = pagination.items -File: MyFlasky/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: MyFlasky/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: MyFlasky/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 134: comments = pagination.items - File: MyFlasky/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: MyFlasky/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: MyFlasky/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: MyFlasky/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: MyFlasky/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: MyFlasky/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: MyFlasky/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: MyFlasky/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: MyFlasky/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: MyFlasky/app/main/views.py - > Line 246: comments = pagination.items -File: MyFlasky/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -tdvtoan/scorecard-recognition -https://github.com/tdvtoan/scorecard-recognition -Entry file: scorecard-recognition/project/__init__.py -Scanned: 2016-10-25 22:57:03.199318 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -saichandra286/Complete-Angularjs-Flask-Todo-App -https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App -Entry file: None -Scanned: 2016-10-25 22:57:04.635308 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/saichandra286/Complete-Angularjs-Flask-Todo-App. - -quiqua/docker-flask-celery-redis-example -https://github.com/quiqua/docker-flask-celery-redis-example -Entry file: docker-flask-celery-redis-example/src/myapp/app.py -Scanned: 2016-10-25 22:57:06.960086 -No vulnerabilities found. - - -MakeSchool-17/trip-planner-flask-backend-thetopplayer -https://github.com/MakeSchool-17/trip-planner-flask-backend-thetopplayer -Entry file: trip-planner-flask-backend-thetopplayer/server.py -Scanned: 2016-10-25 22:57:11.779892 -No vulnerabilities found. - - -MacHu-GWU/flask-restless-api-client-project -https://github.com/MacHu-GWU/flask-restless-api-client-project -Entry file: flask-restless-api-client-project/tests/CustomizeSerialization/run_server.py -Scanned: 2016-10-25 22:57:13.199443 -No vulnerabilities found. - - -whiskeyromeo/bucketlist -https://github.com/whiskeyromeo/bucketlist -Entry file: None -Scanned: 2016-10-25 22:57:16.571795 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CHHLeo/foruV1home_flask_pycharm_practice -https://github.com/CHHLeo/foruV1home_flask_pycharm_practice -Entry file: foruV1home_flask_pycharm_practice/flask_pycharm_practice.py -Scanned: 2016-10-25 22:58:02.327129 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -heamon7/learn-restful -https://github.com/heamon7/learn-restful -Entry file: learn-restful/app.py -Scanned: 2016-10-25 22:58:04.196237 -Vulnerability 1: -File: learn-restful/app.py - > User input at line 82, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: learn-restful/app.py - > reaches line 89, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -goodyvn/flask -https://github.com/goodyvn/flask -Entry file: None -Scanned: 2016-10-25 22:58:06.840590 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stevebannon/flask -https://github.com/stevebannon/flask -Entry file: None -Scanned: 2016-10-25 22:58:07.373781 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sebkouba/dynamic-flask-form -https://github.com/sebkouba/dynamic-flask-form -Entry file: dynamic-flask-form/multimodel.py -Scanned: 2016-10-25 22:58:08.671271 -No vulnerabilities found. - - -willianribeiro/flaskr -https://github.com/willianribeiro/flaskr -Entry file: None -Scanned: 2016-10-25 22:58:09.229833 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/willianribeiro/flaskr. - -solutionspecialist/flaskr -https://github.com/solutionspecialist/flaskr -Entry file: None -Scanned: 2016-10-25 22:58:09.756008 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/solutionspecialist/flaskr. - -XingxinLi/flaskr -https://github.com/XingxinLi/flaskr -Entry file: None -Scanned: 2016-10-25 22:58:10.301521 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/XingxinLi/flaskr. - -wiggitywalt/flasktaskr -https://github.com/wiggitywalt/flasktaskr -Entry file: None -Scanned: 2016-10-25 22:58:10.827083 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mg6/flaskr -https://github.com/mg6/flaskr -Entry file: None -Scanned: 2016-10-25 22:58:11.345424 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mg6/flaskr. - -sourHobbes/flaskdemo -https://github.com/sourHobbes/flaskdemo -Entry file: None -Scanned: 2016-10-25 22:58:11.892680 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-25 22:58:12.472403 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: None -Scanned: 2016-10-25 22:58:13.005040 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -metakermit/resin-home-automator -https://github.com/metakermit/resin-home-automator -Entry file: resin-home-automator/src/main.py -Scanned: 2016-10-25 22:58:14.779511 -No vulnerabilities found. - - -guiti1/FlaskAp -https://github.com/guiti1/FlaskAp -Entry file: FlaskAp/FlaskApp/__init__.py -Scanned: 2016-10-25 22:58:18.629201 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskAp/FlaskApp/venv/lib/python2.7/sre_compile.py - -zerodaemon/flask1 -https://github.com/zerodaemon/flask1 -Entry file: flask1/flaskr.py -Scanned: 2016-10-25 22:58:19.952866 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -JoshLandry/FlaskBlog -https://github.com/JoshLandry/FlaskBlog -Entry file: FlaskBlog/Flask_Blog/__init__.py -Scanned: 2016-10-25 22:58:22.016582 -Vulnerability 1: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 187, trigger word ".data": - title = form.title.data -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 190: newEntry = BlogEntry(user=current_user, title=title, entry=entry, rating=rating, artist=artist, tags=tags) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 193, trigger word "flash(": - flash('Stored entry: '{}''.format(title)) - -Vulnerability 2: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 224, trigger word "flash(": - flash('Logged in successfully as {}.'.format(user.username)) - -Vulnerability 3: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 225, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=user.username)) - -Vulnerability 4: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 221, trigger word ".data": - user = User.get_by_username(form.username.data) -Reassigned in: - File: FlaskBlog/Flask_Blog/__init__.py - > Line 227: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 225, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('user',username=user.username)) - -Vulnerability 5: -File: FlaskBlog/Flask_Blog/__init__.py - > User input at line 238, trigger word ".data": - user = User(email=form.email.data, username=form.username.data, password=form.password.data) -File: FlaskBlog/Flask_Blog/__init__.py - > reaches line 243, trigger word "flash(": - flash('Welcome, {}! Please login.'.format(user.username)) - - - -Bayaz/FlaskBlog -https://github.com/Bayaz/FlaskBlog -Entry file: FlaskBlog/blog.py -Scanned: 2016-10-25 22:58:23.338010 -No vulnerabilities found. - - -colindjk/flaskTest -https://github.com/colindjk/flaskTest -Entry file: flaskTest/app.py -Scanned: 2016-10-25 22:58:24.760344 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Arsh23/random-crossword-generater -https://github.com/Arsh23/random-crossword-generater -Entry file: random-crossword-generater/app.py -Scanned: 2016-10-25 22:58:26.833117 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -spark0128/flask-intro -https://github.com/spark0128/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-25 22:58:44.917086 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -petrgru/flask-remenarna -https://github.com/petrgru/flask-remenarna -Entry file: flask-remenarna/app/__init__.py -Scanned: 2016-10-25 22:58:47.831306 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -bcb/flask-uploads -https://github.com/bcb/flask-uploads -Entry file: flask-uploads/tests/test-uploads.py -Scanned: 2016-10-25 22:58:49.446425 -No vulnerabilities found. - - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-25 22:58:51.352444 -Vulnerability 1: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 93, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 96, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -kumaraswins/flask-angular -https://github.com/kumaraswins/flask-angular -Entry file: flask-angular/app/__init__.py -Scanned: 2016-10-25 22:59:00.589865 -No vulnerabilities found. - - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: None -Scanned: 2016-10-25 22:59:02.440856 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zengyifa/flask-starter. - -rookiebulls/flask-learn -https://github.com/rookiebulls/flask-learn -Entry file: None -Scanned: 2016-10-25 22:59:18.436892 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -climberwb/flask-blog -https://github.com/climberwb/flask-blog -Entry file: None -Scanned: 2016-10-25 22:59:18.963999 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Hyvjan/flask-blog -https://github.com/Hyvjan/flask-blog -Entry file: None -Scanned: 2016-10-25 22:59:19.504864 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xingyz/flask_thebutton -https://github.com/xingyz/flask_thebutton -Entry file: flask_thebutton/app/__init__.py -Scanned: 2016-10-25 22:59:21.194920 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -brittanymcgarr/learningFlask -https://github.com/brittanymcgarr/learningFlask -Entry file: learningFlask/FlaskPractice/app/app.py -Scanned: 2016-10-25 22:59:23.807485 -Vulnerability 1: -File: learningFlask/FlaskPractice/app/helpers.py - > User input at line 13, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: learningFlask/FlaskPractice/app/helpers.py - > Line 16: page = int(page) - File: learningFlask/FlaskPractice/app/helpers.py - > Line 18: page = 1 - File: learningFlask/FlaskPractice/app/helpers.py - > Line 20: object_list = query.paginate(page, paginate_by) -File: learningFlask/FlaskPractice/app/helpers.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template_name,object_list=object_list, context) - -Vulnerability 2: -File: learningFlask/FlaskPractice/app/entries/blueprint.py - > User input at line 65, trigger word "files[": - image_file = request.files['file'] -Reassigned in: - File: learningFlask/FlaskPractice/app/entries/blueprint.py - > Line 66: filename = os.path.join(app.config['IMAGES_DIR'], secure_filename(image_file.filename)) -File: learningFlask/FlaskPractice/app/entries/blueprint.py - > reaches line 69, trigger word "flash(": - flash('Saved %s' % os.path.basename(filename), 'success') - - - -PrettyPrinted/flask-sessions -https://github.com/PrettyPrinted/flask-sessions -Entry file: flask-sessions/session.py -Scanned: 2016-10-25 22:59:25.092248 -No vulnerabilities found. - - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-25 22:59:26.509386 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: Ideal_Flask/LargeApp/app/__init__.py -Scanned: 2016-10-25 22:59:30.372248 -Vulnerability 1: -File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > User input at line 31, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > Line 35: session['user_id'] = user.id -File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > reaches line 37, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-25 22:59:31.750043 -No vulnerabilities found. - - -evansa/flask-sqlalchemy -https://github.com/evansa/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask-sqlalchemy/__init__.py -Scanned: 2016-10-25 22:59:33.191366 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Kajvdh/nao-flask -https://github.com/Kajvdh/nao-flask -Entry file: nao-flask/app.py -Scanned: 2016-10-25 22:59:34.614123 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app.py -Scanned: 2016-10-25 22:59:38.392646 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_sample/flask/lib/python2.7/sre_compile.py - -androidzhibinw/Flask-reg -https://github.com/androidzhibinw/Flask-reg -Entry file: Flask-reg/app.py -Scanned: 2016-10-25 22:59:40.098682 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mrasband/flask-seed -https://github.com/mrasband/flask-seed -Entry file: None -Scanned: 2016-10-25 22:59:40.649354 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrasband/flask-seed. - -vrokida/demo-flask -https://github.com/vrokida/demo-flask -Entry file: demo-flask/demo-flask.py -Scanned: 2016-10-25 22:59:41.961382 -No vulnerabilities found. - - -Clarity-89/server_flask -https://github.com/Clarity-89/server_flask -Entry file: server_flask/project.py -Scanned: 2016-10-25 22:59:43.889984 -No vulnerabilities found. - - -jcmflenso/flask-udemy -https://github.com/jcmflenso/flask-udemy -Entry file: flask-udemy/hello.py -Scanned: 2016-10-25 22:59:45.196385 -No vulnerabilities found. - - -schakalakka/flask-project -https://github.com/schakalakka/flask-project -Entry file: flask-project/app/__init__.py -Scanned: 2016-10-25 22:59:53.911255 -No vulnerabilities found. - - -simongareste/flask-dummy -https://github.com/simongareste/flask-dummy -Entry file: flask-dummy/flask_dummy/__init__.py -Scanned: 2016-10-25 22:59:55.398065 -No vulnerabilities found. - - -liu1020269358/learn-flask -https://github.com/liu1020269358/learn-flask -Entry file: None -Scanned: 2016-10-25 22:59:59.524116 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -foobaar/flask-expt -https://github.com/foobaar/flask-expt -Entry file: flask-expt/flask-experiment.py -Scanned: 2016-10-25 23:00:00.816662 -No vulnerabilities found. - - -lucafaggianelli/flask-skeleton -https://github.com/lucafaggianelli/flask-skeleton -Entry file: flask-skeleton/app_template/app_name/__init__.py -Scanned: 2016-10-25 23:00:03.535557 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -econne01/flask_blog -https://github.com/econne01/flask_blog -Entry file: flask_blog/app/app.py -Scanned: 2016-10-25 23:00:05.672336 -Vulnerability 1: -File: flask_blog/app/views.py - > User input at line 13, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -File: flask_blog/app/views.py - > reaches line 20, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 2: -File: flask_blog/app/views.py - > User input at line 13, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -File: flask_blog/app/views.py - > reaches line 20, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 3: -File: flask_blog/app/views.py - > User input at line 13, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -File: flask_blog/app/views.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',next_url=next_url) - -Vulnerability 4: -File: flask_blog/app/views.py - > User input at line 55, trigger word "get(": - entry = Entry.create(title=request.form.get('title'), content=request.form.get('content'), published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/app/views.py - > reaches line 61, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 5: -File: flask_blog/app/views.py - > User input at line 55, trigger word "get(": - entry = Entry.create(title=request.form.get('title'), content=request.form.get('content'), published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/app/views.py - > reaches line 61, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 6: -File: flask_blog/app/views.py - > User input at line 55, trigger word "get(": - entry = Entry.create(title=request.form.get('title'), content=request.form.get('content'), published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/app/views.py - > reaches line 63, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - -Vulnerability 7: -File: flask_blog/app/views.py - > User input at line 55, trigger word "get(": - entry = Entry.create(title=request.form.get('title'), content=request.form.get('content'), published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/app/views.py - > Line 66: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/app/views.py - > reaches line 63, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - - - -mdeamon/flask_app -https://github.com/mdeamon/flask_app -Entry file: flask_app/app.py -Scanned: 2016-10-25 23:00:07.171417 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dlrice/hello-flask -https://github.com/dlrice/hello-flask -Entry file: hello-flask/hello.py -Scanned: 2016-10-25 23:00:08.516472 -No vulnerabilities found. - - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:00:09.125331 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/euler1337/flask_tutorial. - -devyash/Intelligent-Public-Grievance-System -https://github.com/devyash/Intelligent-Public-Grievance-System -Entry file: Intelligent-Public-Grievance-System/app.py -Scanned: 2016-10-25 23:00:15.905252 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/musicModify.py -Scanned: 2016-10-25 23:00:17.367839 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -afaki077/minitweet -https://github.com/afaki077/minitweet -Entry file: None -Scanned: 2016-10-25 23:00:19.885409 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/afaki077/minitweet. - -ThukralAman/flaskApp2 -https://github.com/ThukralAman/flaskApp2 -Entry file: flaskApp2/app.py -Scanned: 2016-10-25 23:00:21.688297 -No vulnerabilities found. - - -sbm367/flaskTest2 -https://github.com/sbm367/flaskTest2 -Entry file: flaskTest2/flaskTest.py -Scanned: 2016-10-25 23:00:23.002941 -No vulnerabilities found. - - -emil-k/climate-compare_FlaskApp -https://github.com/emil-k/climate-compare_FlaskApp -Entry file: climate-compare_FlaskApp/__init__.py -Scanned: 2016-10-25 23:00:31.642521 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: climate-compare_FlaskApp/venv/lib/python2.7/sre_compile.py - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-25 23:00:35.613840 -No vulnerabilities found. - - -daytonight/Flask-Web-Development-code -https://github.com/daytonight/Flask-Web-Development-code -Entry file: Flask-Web-Development-code/venv/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py -Scanned: 2016-10-25 23:00:41.259627 -No vulnerabilities found. - - -lkpanganiban/flask-mega-tutorial -https://github.com/lkpanganiban/flask-mega-tutorial -Entry file: flask-mega-tutorial/app/__init__.py -Scanned: 2016-10-25 23:00:42.915677 -No vulnerabilities found. - - -saichandra286/BlogSpot-using-flask -https://github.com/saichandra286/BlogSpot-using-flask -Entry file: BlogSpot-using-flask/BlogSpot/app/__init__.py -Scanned: 2016-10-25 23:00:44.503513 -No vulnerabilities found. - - -afborodin/simple-mysql-flask-app -https://github.com/afborodin/simple-mysql-flask-app -Entry file: None -Scanned: 2016-10-25 23:01:32.976816 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dternyak/my-react-flask-blog -https://github.com/dternyak/my-react-flask-blog -Entry file: my-react-flask-blog/index.py -Scanned: 2016-10-25 23:01:48.978051 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -skriems/flask-cherrypy-dockerized -https://github.com/skriems/flask-cherrypy-dockerized -Entry file: flask-cherrypy-dockerized/app.py -Scanned: 2016-10-25 23:01:50.315894 -No vulnerabilities found. - - -johnkabler/flask_dash_learn -https://github.com/johnkabler/flask_dash_learn -Entry file: flask_dash_learn/first_app.py -Scanned: 2016-10-25 23:01:51.604494 -No vulnerabilities found. - - -broak/flask-hello-world -https://github.com/broak/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:01:52.124866 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ABaldwinHunter/flask-clone-classic -https://github.com/ABaldwinHunter/flask-clone-classic -Entry file: flask-clone-classic/setup.py -Scanned: 2016-10-25 23:01:55.994130 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ldrunner100/flask_hello_world -https://github.com/ldrunner100/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 23:01:59.137979 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -FinleySmile/flask_blog_demo -https://github.com/FinleySmile/flask_blog_demo -Entry file: flask_blog_demo/flask_blog_demo.py -Scanned: 2016-10-25 23:02:01.475353 -Vulnerability 1: -File: flask_blog_demo/flask_blog_demo.py - > User input at line 63, trigger word "form[": - username = request.form['username'] -Reassigned in: - File: flask_blog_demo/flask_blog_demo.py - > Line 68: ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_entries')) -File: flask_blog_demo/flask_blog_demo.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',username=username, error=error) - - - -quandrei/godzilla-foxfire-flask -https://github.com/quandrei/godzilla-foxfire-flask -Entry file: godzilla-foxfire-flask/app/__init__.py -Scanned: 2016-10-25 23:02:03.530545 -No vulnerabilities found. - - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-25 23:02:08.068371 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/sre_compile.py - -RodrigoVillatoro/flask_social_network -https://github.com/RodrigoVillatoro/flask_social_network -Entry file: flask_social_network/app/__init__.py -Scanned: 2016-10-25 23:02:10.483382 -Vulnerability 1: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 23, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flask_social_network/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/posts.py - > Line 17: posts = pagination.items - File: flask_social_network/app/api_1_0/posts.py - > Line 18: prev_page = None - File: flask_social_network/app/api_1_0/posts.py - > Line 21: next_page = None -File: flask_social_network/app/api_1_0/posts.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 4: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 24, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 27, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flask_social_network/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 21: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 22: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 25: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 28, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 7: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 51, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flask_social_network/app/api_1_0/users.py - > User input at line 39, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/users.py - > Line 40: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: flask_social_network/app/api_1_0/users.py - > Line 46: prev_page = None - File: flask_social_network/app/api_1_0/users.py - > Line 49: next_page = None -File: flask_social_network/app/api_1_0/users.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 10: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 19, trigger word "url_for(": - prev_page = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 22, trigger word "url_for(": - next_page = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 16: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 17: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 20: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - -Vulnerability 13: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 47, trigger word "url_for(": - prev_page = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 50, trigger word "url_for(": - next_page = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flask_social_network/app/api_1_0/comments.py - > User input at line 40, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/api_1_0/comments.py - > Line 41: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/api_1_0/comments.py - > Line 44: comments = pagination.items - File: flask_social_network/app/api_1_0/comments.py - > Line 45: prev_page = None - File: flask_social_network/app/api_1_0/comments.py - > Line 48: next_page = None -File: flask_social_network/app/api_1_0/comments.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prev_pagenext_pagepagination.total) - -Vulnerability 16: -File: flask_social_network/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 56: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 61: posts = pagination.items - File: flask_social_network/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 62, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flask_social_network/app/main/views.py - > User input at line 50, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 48: show_followed = False - File: flask_social_network/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 62, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flask_social_network/app/main/views.py - > User input at line 74, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 75: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['APP_POSTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 80: posts = pagination.items -File: flask_social_network/app/main/views.py - > reaches line 81, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flask_social_network/app/main/views.py - > User input at line 146, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 148: page = post.comments.count() - 1 // current_app.config['APP_COMMENTS_PER_PAGE'] + 1 - File: flask_social_network/app/main/views.py - > Line 150: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 155: comments = pagination.items - File: flask_social_network/app/main/views.py - > Line 145: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.post',id=post.id, page=-1)) -File: flask_social_network/app/main/views.py - > reaches line 156, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flask_social_network/app/main/views.py - > User input at line 220, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 221: pagination = user.followers.paginate(page,per_page=current_app.config['APP_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 226: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_social_network/app/main/views.py - > Line 219: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 228, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='main.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flask_social_network/app/main/views.py - > User input at line 244, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 245: pagination = user.followed.paginate(page,per_page=current_app.config['APP_FOLLOWING_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 250: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_social_network/app/main/views.py - > Line 243: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask_social_network/app/main/views.py - > reaches line 252, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='main.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flask_social_network/app/main/views.py - > User input at line 282, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_social_network/app/main/views.py - > Line 283: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['APP_COMMENTS_PER_PAGE'], error_out=False) - File: flask_social_network/app/main/views.py - > Line 288: comments = pagination.items -File: flask_social_network/app/main/views.py - > reaches line 289, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-25 23:02:15.082103 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -p00gz/flask-imdbratings-app-backend -https://github.com/p00gz/flask-imdbratings-app-backend -Entry file: flask-imdbratings-app-backend/imdbRatings/__init__.py -Scanned: 2016-10-25 23:02:19.183152 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -moonlitesolutions/flask_rest_template -https://github.com/moonlitesolutions/flask_rest_template -Entry file: flask_rest_template/flask_rest/api/api.py -Scanned: 2016-10-25 23:02:22.465419 -No vulnerabilities found. - - -mrkewen/flask-hello-world -https://github.com/mrkewen/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:02:22.986028 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wasw100/flask-sqlalchemy-demo2 -https://github.com/wasw100/flask-sqlalchemy-demo2 -Entry file: flask-sqlalchemy-demo2/hello.py -Scanned: 2016-10-25 23:02:24.318950 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -artisanofcode/flask-generic-views -https://github.com/artisanofcode/flask-generic-views -Entry file: flask-generic-views/setup.py -Scanned: 2016-10-25 23:02:26.015080 -Vulnerability 1: -File: flask-generic-views/flask_generic_views/core.py - > User input at line 308, trigger word "get(": - query = request.environ.get('QUERY_STRING', '') -File: flask-generic-views/flask_generic_views/core.py - > reaches line 311, trigger word "replace(": - url = url_parse(url).replace(query=query).to_url() - - - -mekanix/flask-bootstrap-sql-rest -https://github.com/mekanix/flask-bootstrap-sql-rest -Entry file: flask-bootstrap-sql-rest/manage.py -Scanned: 2016-10-25 23:02:27.418324 -No vulnerabilities found. - - -ayesandarmoe/microblog_flask_tutorial -https://github.com/ayesandarmoe/microblog_flask_tutorial -Entry file: microblog_flask_tutorial/app/__init__.py -Scanned: 2016-10-25 23:02:37.316632 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -alexwilkerson/flask-hello-world -https://github.com/alexwilkerson/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:02:37.932265 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nausheenfatma/WebAppWithFlask -https://github.com/nausheenfatma/WebAppWithFlask -Entry file: WebAppWithFlask/model.py -Scanned: 2016-10-25 23:02:39.237421 -Vulnerability 1: -File: WebAppWithFlask/controller.py - > User input at line 21, trigger word "form[": - post = Post(request.form['author'], request.form['title'], request.form['content'], request.form['published']) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 22: post_add = post.add(post) - File: WebAppWithFlask/controller.py - > Line 27: error = post_add -File: WebAppWithFlask/controller.py - > reaches line 28, trigger word "flash(": - flash(error) - -Vulnerability 2: -File: WebAppWithFlask/controller.py - > User input at line 35, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 38: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) - File: WebAppWithFlask/controller.py - > Line 48: ret_MAYBE_FUNCTION_NAME = redirect(url_for('post_index')) -File: WebAppWithFlask/controller.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('update.html',post=post) - -Vulnerability 3: -File: WebAppWithFlask/controller.py - > User input at line 57, trigger word "get(": - post = Post.query.get(id) -Reassigned in: - File: WebAppWithFlask/controller.py - > Line 62: post_delete = post.delete(post) - File: WebAppWithFlask/controller.py - > Line 66: error = post_delete -File: WebAppWithFlask/controller.py - > reaches line 67, trigger word "flash(": - flash(error) - - - -yaoelvon/flask-uwsgi-demo -https://github.com/yaoelvon/flask-uwsgi-demo -Entry file: flask-uwsgi-demo/DeployingFlask/myflaskapp.py -Scanned: 2016-10-25 23:02:40.469692 -No vulnerabilities found. - - -Owen-Gillespie/FeatureLabsFlaskDemo -https://github.com/Owen-Gillespie/FeatureLabsFlaskDemo -Entry file: FeatureLabsFlaskDemo/main.py -Scanned: 2016-10-25 23:02:46.873536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -richardsop/REST-API -https://github.com/richardsop/REST-API -Entry file: REST-API/app.py -Scanned: 2016-10-25 23:02:58.559083 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tianxie/my_flasky -https://github.com/tianxie/my_flasky -Entry file: my_flasky/app/__init__.py -Scanned: 2016-10-25 23:03:00.240089 -No vulnerabilities found. - - -sheldonsmickley/flaskemail_app -https://github.com/sheldonsmickley/flaskemail_app -Entry file: flaskemail_app/emails.py -Scanned: 2016-10-25 23:03:01.702086 -Vulnerability 1: -File: flaskemail_app/emails.py - > User input at line 57, trigger word "form[": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) -Reassigned in: - File: flaskemail_app/emails.py - > Line 58: url = url.fetchall()[0][0] -File: flaskemail_app/emails.py - > reaches line 57, trigger word "execute(": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) - -Vulnerability 2: -File: flaskemail_app/emails.py - > User input at line 57, trigger word "form[": - url = c.execute('select url from emails where company_name like ?', (request.form['existing_company'])) -Reassigned in: - File: flaskemail_app/emails.py - > Line 58: url = url.fetchall()[0][0] -File: flaskemail_app/emails.py - > reaches line 59, trigger word "execute(": - c.execute('INSERT into emails (company_name, email, url) values (?, ?, ?)', (request.form['existing_company'], request.form['email'], url)) - - - -shas15/Betting-Chips -https://github.com/shas15/Betting-Chips -Entry file: Betting-Chips/test.py -Scanned: 2016-10-25 23:03:03.246985 -Vulnerability 1: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 22, trigger word "filter(": - found = User.query.filter(User.id == login_id, User.password == login_password).first() - -Vulnerability 2: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 22, trigger word "filter(": - found = User.query.filter(User.id == login_id, User.password == login_password).first() - -Vulnerability 3: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 27, trigger word "jsonify(": - print(jsonify('id''password''stats'login_idlogin_password'success').get_data(as_text=True)) - -Vulnerability 4: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 27, trigger word "jsonify(": - print(jsonify('id''password''stats'login_idlogin_password'success').get_data(as_text=True)) - -Vulnerability 5: -File: Betting-Chips/Models/User.py - > User input at line 20, trigger word "form[": - login_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 6: -File: Betting-Chips/Models/User.py - > User input at line 21, trigger word "form[": - login_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 38: ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats''''''fail') -File: Betting-Chips/Models/User.py - > reaches line 32, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('id''password''stats'login_idlogin_password'success') - -Vulnerability 7: -File: Betting-Chips/Models/User.py - > User input at line 45, trigger word "form[": - signup_name = request.form['name'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 49: user.name = signup_name -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 8: -File: Betting-Chips/Models/User.py - > User input at line 46, trigger word "form[": - signup_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 50: user.id = signup_id -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 9: -File: Betting-Chips/Models/User.py - > User input at line 47, trigger word "form[": - signup_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 51: user.password = signup_password -File: Betting-Chips/Models/User.py - > reaches line 54, trigger word "jsonify(": - print(jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success').get_data(as_text=True)) - -Vulnerability 10: -File: Betting-Chips/Models/User.py - > User input at line 45, trigger word "form[": - signup_name = request.form['name'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 49: user.name = signup_name -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 11: -File: Betting-Chips/Models/User.py - > User input at line 46, trigger word "form[": - signup_id = request.form['id'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 50: user.id = signup_id -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - -Vulnerability 12: -File: Betting-Chips/Models/User.py - > User input at line 47, trigger word "form[": - signup_password = request.form['password'] -Reassigned in: - File: Betting-Chips/Models/User.py - > Line 51: user.password = signup_password -File: Betting-Chips/Models/User.py - > reaches line 60, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''id''password''stats'signup_namesignup_idsignup_password'success') - - - -malong5219/SampleBlog -https://github.com/malong5219/SampleBlog -Entry file: None -Scanned: 2016-10-25 23:03:10.675843 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alexwilkerson/microblog -https://github.com/alexwilkerson/microblog -Entry file: None -Scanned: 2016-10-25 23:03:11.192066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/alexwilkerson/microblog. - -jyang22/Flasky_blog -https://github.com/jyang22/Flasky_blog -Entry file: None -Scanned: 2016-10-25 23:03:16.844809 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tusharpawar/Agrostar_Flaskr -https://github.com/tusharpawar/Agrostar_Flaskr -Entry file: Agrostar_Flaskr/flaskr/flaskr.py -Scanned: 2016-10-25 23:03:21.529501 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -eunseo9808/fakeArtist -https://github.com/eunseo9808/fakeArtist -Entry file: fakeArtist/test.py -Scanned: 2016-10-25 23:03:23.000337 -No vulnerabilities found. - - -semonalbertyeah/quickflask -https://github.com/semonalbertyeah/quickflask -Entry file: quickflask/app.py -Scanned: 2016-10-25 23:03:24.439249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aceokay/microblog -https://github.com/aceokay/microblog -Entry file: None -Scanned: 2016-10-25 23:03:25.028119 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aceokay/microblog. - -dantin/microblog -https://github.com/dantin/microblog -Entry file: None -Scanned: 2016-10-25 23:03:25.549576 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dantin/microblog. - -buntyke/Flask -https://github.com/buntyke/Flask -Entry file: None -Scanned: 2016-10-25 23:03:28.370288 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -suzf/Flask -https://github.com/suzf/Flask -Entry file: None -Scanned: 2016-10-25 23:03:28.926303 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -b-e/flask -https://github.com/b-e/flask -Entry file: None -Scanned: 2016-10-25 23:03:29.443727 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -psuong/FlaskWorkshop -https://github.com/psuong/FlaskWorkshop -Entry file: FlaskWorkshop/output-string/app.py -Scanned: 2016-10-25 23:03:31.215853 -No vulnerabilities found. - - -BLKStone/flask_image_search -https://github.com/BLKStone/flask_image_search -Entry file: flask_image_search/app/app.py -Scanned: 2016-10-25 23:03:36.345721 -No vulnerabilities found. - - -yj0914/flask- -https://github.com/yj0914/flask- -Entry file: flask-/num1.py -Scanned: 2016-10-25 23:03:37.641919 -No vulnerabilities found. - - -Bleezworld/flask_skeleton -https://github.com/Bleezworld/flask_skeleton -Entry file: flask_skeleton/serveur/__init__.py -Scanned: 2016-10-25 23:03:40.040904 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -TwilioDevEd/lead-alerts-flask -https://github.com/TwilioDevEd/lead-alerts-flask -Entry file: None -Scanned: 2016-10-25 23:03:40.545336 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/TwilioDevEd/lead-alerts-flask. - -soasme/flask-perm -https://github.com/soasme/flask-perm -Entry file: flask-perm/example.py -Scanned: 2016-10-25 23:03:43.023343 -Vulnerability 1: -File: flask-perm/tests/test_blueprint.py - > User input at line 68, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions')) -File: flask-perm/tests/test_blueprint.py - > reaches line 68, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions')) - -Vulnerability 2: -File: flask-perm/tests/test_blueprint.py - > User input at line 73, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') -File: flask-perm/tests/test_blueprint.py - > reaches line 73, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": 0}') - -Vulnerability 3: -File: flask-perm/tests/test_blueprint.py - > User input at line 80, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 80, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permissions'),query_string='_filters''{"id": %s}' % permission['id']) - -Vulnerability 4: -File: flask-perm/tests/test_blueprint.py - > User input at line 87, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 87, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 5: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 114, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_permission',permission_id=permission['id'])) - -Vulnerability 6: -File: flask-perm/tests/test_blueprint.py - > User input at line 121, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) -File: flask-perm/tests/test_blueprint.py - > reaches line 121, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_permission',permission_id=permission['id'])) - -Vulnerability 7: -File: flask-perm/tests/test_blueprint.py - > User input at line 172, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 171: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 173, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_permission',user_permission_id=id)) - -Vulnerability 8: -File: flask-perm/tests/test_blueprint.py - > User input at line 188, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 187: resp = add_user_group_permission(client, user_group['id'], permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 189, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.revoke_user_group_permission',user_group_permission_id=id)) - -Vulnerability 9: -File: flask-perm/tests/test_blueprint.py - > User input at line 199, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 198: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 199, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"user_id":1}') - -Vulnerability 10: -File: flask-perm/tests/test_blueprint.py - > User input at line 210, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 209: resp = add_user_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 210, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 11: -File: flask-perm/tests/test_blueprint.py - > User input at line 221, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 220: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 221, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"user_group_id":1}') - -Vulnerability 12: -File: flask-perm/tests/test_blueprint.py - > User input at line 232, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 231: resp = add_user_group_permission(client, 1, permission['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 232, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_permissions'),query_string='_filters''{"permission_id":%s}' % permission['id']) - -Vulnerability 13: -File: flask-perm/tests/test_blueprint.py - > User input at line 245, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) -File: flask-perm/tests/test_blueprint.py - > reaches line 245, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_groups')) - -Vulnerability 14: -File: flask-perm/tests/test_blueprint.py - > User input at line 280, trigger word ".data": - id = json.loads(resp.data)['data']['id'] -Reassigned in: - File: flask-perm/tests/test_blueprint.py - > Line 279: resp = add_user_group_member(client, 1, user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 281, trigger word "url_for(": - resp = client.delete(url_for('flask_perm_api.delete_user_from_user_group',user_group_member_id=id)) - -Vulnerability 15: -File: flask-perm/tests/test_blueprint.py - > User input at line 291, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) -File: flask-perm/tests/test_blueprint.py - > reaches line 291, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user_group_members'),query_string='_filters''{"user_group_id":%s}' % user_group['id']) - -Vulnerability 16: -File: flask-perm/tests/test_blueprint.py - > User input at line 304, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_users')) -File: flask-perm/tests/test_blueprint.py - > reaches line 304, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_users')) - -Vulnerability 17: -File: flask-perm/tests/test_blueprint.py - > User input at line 309, trigger word "get(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) -File: flask-perm/tests/test_blueprint.py - > reaches line 309, trigger word "url_for(": - resp = client.get(url_for('flask_perm_api.get_user',user_id=1)) - -Vulnerability 18: -File: flask-perm/flask_perm/admin.py - > User input at line 12, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERM_ADMIN_PREFIX') + '/api'current_app.config.get('PERM_ADMIN_PREFIX')current_app.config.get('DEBUG') -Reassigned in: - File: flask-perm/flask_perm/admin.py - > Line 10: ret_MAYBE_FUNCTION_NAME = redirect(url_for('perm-admin.login')) -File: flask-perm/flask_perm/admin.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/perm-admin/index.html',render_data) - - - -expersso/flaskr -https://github.com/expersso/flaskr -Entry file: None -Scanned: 2016-10-25 23:03:43.554238 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/expersso/flaskr. - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-25 23:03:44.964723 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rishipuri/flasktodo -https://github.com/rishipuri/flasktodo -Entry file: flasktodo/flasktodo.py -Scanned: 2016-10-25 23:03:46.264306 -No vulnerabilities found. - - -Hyvjan/flasktaskr -https://github.com/Hyvjan/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:03:46.819487 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zachary-russell/Flaskr -https://github.com/zachary-russell/Flaskr -Entry file: None -Scanned: 2016-10-25 23:03:47.340741 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -storress/Flaskserver -https://github.com/storress/Flaskserver -Entry file: Flaskserver/main.py -Scanned: 2016-10-25 23:03:48.639781 -No vulnerabilities found. - - -dadasoz-cuelogic/flaskapp -https://github.com/dadasoz-cuelogic/flaskapp -Entry file: None -Scanned: 2016-10-25 23:03:59.185926 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dadasoz-cuelogic/flaskapp. - -nickaustinlee/flasktaskr -https://github.com/nickaustinlee/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:04:01.758036 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: None -Scanned: 2016-10-25 23:04:02.355909 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sindhus/flaskr. - -Bayaz/flasktaskr -https://github.com/Bayaz/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:04:03.917017 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -xavinso/flasktaskr -https://github.com/xavinso/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:04:11.477618 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CharlieWinters/flaskapi -https://github.com/CharlieWinters/flaskapi -Entry file: flaskapi/aydaapi4.py -Scanned: 2016-10-25 23:04:17.368201 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskapi/flaskenv/lib/python2.7/sre_compile.py - -kewsie/flasky -https://github.com/kewsie/flasky -Entry file: None -Scanned: 2016-10-25 23:04:18.233695 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -apeete/flaskBlog -https://github.com/apeete/flaskBlog -Entry file: flaskBlog/blog.py -Scanned: 2016-10-25 23:04:25.640459 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskBlog/env/lib/python2.7/sre_compile.py - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/flaskr.py -Scanned: 2016-10-25 23:04:27.119495 -No vulnerabilities found. - - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-25 23:04:32.686418 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/sre_compile.py - -hnb2/flask-customers -https://github.com/hnb2/flask-customers -Entry file: flask-customers/customers/__init__.py -Scanned: 2016-10-25 23:04:34.178433 -Vulnerability 1: -File: flask-customers/customers/back/view.py - > User input at line 71, trigger word ".data": - customer = Customer(email=form.email.data, password=AdminCustomer._generate_password()) -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 69: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(customer=customer.json) - -Vulnerability 2: -File: flask-customers/customers/back/view.py - > User input at line 147, trigger word ".data": - page = form.page.data -Reassigned in: - File: flask-customers/customers/back/view.py - > Line 151: start = page * CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 152: stop = start + CustomerService.RESULTS_PER_PAGE - File: flask-customers/customers/back/view.py - > Line 154: raw_customers = CustomerService.get_customers(start=start, stop=stop) - File: flask-customers/customers/back/view.py - > Line 145: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/back/view.py - > reaches line 159, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(current_page=page, total_pages=int(total_pages), customers=[customer.json for customer in raw_customers]) - -Vulnerability 3: -File: flask-customers/customers/front/view.py - > User input at line 32, trigger word ".data": - customer = Customer(email=form.email.data, password=form.password.data) -Reassigned in: - File: flask-customers/customers/front/view.py - > Line 30: ret_MAYBE_FUNCTION_NAME = jsonify(errors=form.errors) -File: flask-customers/customers/front/view.py - > reaches line 39, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(id=customer.id) - - - -raindrop4steven/tornadoFlask -https://github.com/raindrop4steven/tornadoFlask -Entry file: tornadoFlask/hello.py -Scanned: 2016-10-25 23:04:35.575394 -No vulnerabilities found. - - -samwuu/flask_demo -https://github.com/samwuu/flask_demo -Entry file: flask_demo/app/__init__.py -Scanned: 2016-10-25 23:04:37.030368 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zengyifa/flask-starter -https://github.com/zengyifa/flask-starter -Entry file: None -Scanned: 2016-10-25 23:04:37.570546 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zengyifa/flask-starter. - -mauriciorey/learning_flask -https://github.com/mauriciorey/learning_flask -Entry file: learning_flask/routes.py -Scanned: 2016-10-25 23:04:39.463185 -Vulnerability 1: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 93, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - -Vulnerability 2: -File: learning_flask/routes.py - > User input at line 85, trigger word ".data": - address = form.address.data -Reassigned in: - File: learning_flask/routes.py - > Line 89: my_coordinates = p.address_to_latlng(address) - File: learning_flask/routes.py - > Line 90: places = p.query(address) - File: learning_flask/routes.py - > Line 73: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: learning_flask/routes.py - > Line 77: places = [] - File: learning_flask/routes.py - > Line 78: my_coordinates = (42.335647, -71.07505600000002) - File: learning_flask/routes.py - > Line 82: ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form) -File: learning_flask/routes.py - > reaches line 96, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('home.html',form=form, my_coordinates=my_coordinates, places=places) - - - -cjmochrie/Flask-Demo -https://github.com/cjmochrie/Flask-Demo -Entry file: None -Scanned: 2016-10-25 23:04:40.867274 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cjmochrie/Flask-Demo. - -cyan-blue/my_flask -https://github.com/cyan-blue/my_flask -Entry file: my_flask/doc/schedular.py -Scanned: 2016-10-25 23:04:42.319689 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zachary-russell/Flask-Microblog -https://github.com/zachary-russell/Flask-Microblog -Entry file: Flask-Microblog/microblog/app/__init__.py -Scanned: 2016-10-25 23:04:43.633954 -No vulnerabilities found. - - -LeonNie52/Learn_Flask -https://github.com/LeonNie52/Learn_Flask -Entry file: Learn_Flask/hello.py -Scanned: 2016-10-25 23:04:45.507986 -Vulnerability 1: -File: Learn_Flask/app/main/views.py - > User input at line 42, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 50: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 52: posts = pagination.items - File: Learn_Flask/app/main/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.blog')) -File: Learn_Flask/app/main/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Learn_Flask/app/main/views.py - > User input at line 45, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 43: show_followed = False - File: Learn_Flask/app/main/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.blog')) -File: Learn_Flask/app/main/views.py - > reaches line 53, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Learn_Flask/app/main/views.py - > User input at line 68, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 70: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Learn_Flask/app/main/views.py - > Line 72: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 75: comments = pagination.items - File: Learn_Flask/app/main/views.py - > Line 67: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Learn_Flask/app/main/views.py - > reaches line 76, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: Learn_Flask/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Learn_Flask/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Learn_Flask/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: Learn_Flask/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Learn_Flask/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Learn_Flask/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Learn_Flask/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Learn_Flask/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Learn_Flask/app/main/views.py - > Line 246: comments = pagination.items -File: Learn_Flask/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -penguin-penpen/learnFlask -https://github.com/penguin-penpen/learnFlask -Entry file: None -Scanned: 2016-10-25 23:04:46.042869 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/penguin-penpen/learnFlask. - -pfig/flask-elasticsearch -https://github.com/pfig/flask-elasticsearch -Entry file: flask-elasticsearch/flask_elasticsearch.py -Scanned: 2016-10-25 23:04:47.473030 -No vulnerabilities found. - - -olive42/moz-flask -https://github.com/olive42/moz-flask -Entry file: moz-flask/hello.py -Scanned: 2016-10-25 23:04:48.813971 -No vulnerabilities found. - - -nimeshkverma/Ideal_Flask -https://github.com/nimeshkverma/Ideal_Flask -Entry file: Ideal_Flask/LargeApp/app/__init__.py -Scanned: 2016-10-25 23:04:52.506860 -Vulnerability 1: -File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > User input at line 31, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > Line 35: session['user_id'] = user.id -File: Ideal_Flask/LargeApp/app/mod_auth/controllers.py - > reaches line 37, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -tholsapp/flask_framework -https://github.com/tholsapp/flask_framework -Entry file: flask_framework/app/__init__.py -Scanned: 2016-10-25 23:04:54.027785 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-25 23:05:02.390874 -Vulnerability 1: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 162, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit.html',categories=categories, category_id=category.id, item=item, login=login_session.get('username')) - -Vulnerability 2: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - -Vulnerability 3: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - - - -jaramago/flask-basic -https://github.com/jaramago/flask-basic -Entry file: flask-basic/app/__init__.py -Scanned: 2016-10-25 23:05:04.125866 -No vulnerabilities found. - - -valdemarpereira/flask_tutorial -https://github.com/valdemarpereira/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:05:04.678998 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/valdemarpereira/flask_tutorial. - -jit-1/flask-microblog -https://github.com/jit-1/flask-microblog -Entry file: None -Scanned: 2016-10-25 23:05:06.178663 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jit-1/flask-microblog. - -nof4444/Flask-mongodb -https://github.com/nof4444/Flask-mongodb -Entry file: Flask-mongodb/blog.py -Scanned: 2016-10-25 23:05:12.457496 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-mongodb/env/lib/python2.7/sre_compile.py - -VictorDMor/flask-app -https://github.com/VictorDMor/flask-app -Entry file: flask-app/app/__init__.py -Scanned: 2016-10-25 23:05:24.076947 -No vulnerabilities found. - - -setiaji/learn_flask -https://github.com/setiaji/learn_flask -Entry file: learn_flask/__init__.py -Scanned: 2016-10-25 23:05:25.383179 -No vulnerabilities found. - - -sunway1988/MyFlask -https://github.com/sunway1988/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-25 23:05:27.244613 -No vulnerabilities found. - - -ottoman91/flask_tutorial -https://github.com/ottoman91/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:05:27.802174 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ottoman91/flask_tutorial. - -anbasile/flask_sample -https://github.com/anbasile/flask_sample -Entry file: flask_sample/app.py -Scanned: 2016-10-25 23:05:36.619681 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_sample/flask/lib/python2.7/sre_compile.py - -HiagoMayk/projetoFlask -https://github.com/HiagoMayk/projetoFlask -Entry file: projetoFlask/routes.py -Scanned: 2016-10-25 23:05:39.226051 -No vulnerabilities found. - - -nimeshkverma/Versioned_Flask -https://github.com/nimeshkverma/Versioned_Flask -Entry file: Versioned_Flask/app/__init__.py -Scanned: 2016-10-25 23:05:41.249014 -No vulnerabilities found. - - -catcoderphp/flask-test -https://github.com/catcoderphp/flask-test -Entry file: flask-test/app.py -Scanned: 2016-10-25 23:05:44.390026 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-test/venv/lib/python2.7/sre_compile.py - -huyquyet/flask-demo -https://github.com/huyquyet/flask-demo -Entry file: flask-demo/flask_demo/__init__.py -Scanned: 2016-10-25 23:05:46.619401 -No vulnerabilities found. - - -seonhyeshin/flask-mysql -https://github.com/seonhyeshin/flask-mysql -Entry file: None -Scanned: 2016-10-25 23:05:57.720936 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -euler1337/flask_tutorial -https://github.com/euler1337/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:05:58.234416 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/euler1337/flask_tutorial. - -PhilipGough/flask_api -https://github.com/PhilipGough/flask_api -Entry file: flask_api/app/__init__.py -Scanned: 2016-10-25 23:06:02.041726 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-25 23:06:19.121166 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-25 23:06:21.041760 -No vulnerabilities found. - - -mburke05/flask_tutorial -https://github.com/mburke05/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:06:21.570398 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mburke05/flask_tutorial. - -dhruvagarwal/flask_restdemo -https://github.com/dhruvagarwal/flask_restdemo -Entry file: flask_restdemo/example/main.py -Scanned: 2016-10-25 23:06:22.956976 -No vulnerabilities found. - - -elphinkuo/ji_python_flask -https://github.com/elphinkuo/ji_python_flask -Entry file: ji_python_flask/app/musicModify.py -Scanned: 2016-10-25 23:06:24.886857 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rjuppa/microblog -https://github.com/rjuppa/microblog -Entry file: None -Scanned: 2016-10-25 23:06:25.416125 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rjuppa/microblog. - -depaoli/FlaskAppSample -https://github.com/depaoli/FlaskAppSample -Entry file: FlaskAppSample/flask_app_sample/__init__.py -Scanned: 2016-10-25 23:06:26.803815 -No vulnerabilities found. - - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-25 23:06:30.740910 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AlexProv/flaskRestApiSkeleton -https://github.com/AlexProv/flaskRestApiSkeleton -Entry file: flaskRestApiSkeleton/flaskServer.py -Scanned: 2016-10-25 23:06:32.032067 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tommyblue/flask-react-blog -https://github.com/tommyblue/flask-react-blog -Entry file: flask-react-blog/initializer.py -Scanned: 2016-10-25 23:06:33.750978 -No vulnerabilities found. - - -MikeHannon/python_flask_teams -https://github.com/MikeHannon/python_flask_teams -Entry file: python_flask_teams/server.py -Scanned: 2016-10-25 23:06:35.052364 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Cosaquee/flask-weather-app -https://github.com/Cosaquee/flask-weather-app -Entry file: flask-weather-app/main.py -Scanned: 2016-10-25 23:06:38.808747 -No vulnerabilities found. - - -xavinso/flask_hello_world -https://github.com/xavinso/flask_hello_world -Entry file: flask_hello_world/app.py -Scanned: 2016-10-25 23:06:41.434666 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Ryanglambert/playing_with_flask -https://github.com/Ryanglambert/playing_with_flask -Entry file: playing_with_flask/hello.py -Scanned: 2016-10-25 23:06:43.054984 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aetherwu/Flask-Docker-Template -https://github.com/aetherwu/Flask-Docker-Template -Entry file: Flask-Docker-Template/flask/web/__init__.py -Scanned: 2016-10-25 23:06:53.195663 -Vulnerability 1: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 234, trigger word ".data": - kw = form.name.data -File: Flask-Docker-Template/flask/web/views.py - > reaches line 236, trigger word "filter(": - user = User.query.filter(User.nickname == kw).first() - -Vulnerability 2: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 562, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Docker-Template/flask/web/views.py - > Line 550: user = User.query.filter_by(email=user_email).first() - File: Flask-Docker-Template/flask/web/views.py - > Line 552: current_user.id = user.id - File: Flask-Docker-Template/flask/web/views.py - > Line 577: current_user.id = user.id -File: Flask-Docker-Template/flask/web/views.py - > reaches line 554, trigger word "set_cookie(": - response.set_cookie('user_email', str(user.email),expires=time.time() + 6000 * 60) - -Vulnerability 3: -File: Flask-Docker-Template/flask/web/views.py - > User input at line 562, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Docker-Template/flask/web/views.py - > Line 550: user = User.query.filter_by(email=user_email).first() - File: Flask-Docker-Template/flask/web/views.py - > Line 552: current_user.id = user.id - File: Flask-Docker-Template/flask/web/views.py - > Line 577: current_user.id = user.id -File: Flask-Docker-Template/flask/web/views.py - > reaches line 587, trigger word "set_cookie(": - response.set_cookie('user_email', str(user.email),expires=time.time() + 6000 * 60) - - - -tomquirk/js-flavoured-flask -https://github.com/tomquirk/js-flavoured-flask -Entry file: js-flavoured-flask/app/__init__.py -Scanned: 2016-10-25 23:06:54.860396 -No vulnerabilities found. - - -gtlambert/first_flask_app -https://github.com/gtlambert/first_flask_app -Entry file: first_flask_app/app.py -Scanned: 2016-10-25 23:06:59.710937 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-25 23:07:01.163686 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -ArTrics/Flask_Angular_Project -https://github.com/ArTrics/Flask_Angular_Project -Entry file: Flask_Angular_Project/index.py -Scanned: 2016-10-25 23:07:05.061438 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask_Angular_Project/venv/lib/python2.7/sre_compile.py - -orjanv/ESVtoLeetFlaskApp -https://github.com/orjanv/ESVtoLeetFlaskApp -Entry file: ESVtoLeetFlaskApp/app.py -Scanned: 2016-10-25 23:07:06.568172 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ptmccarthy/flask-microblog-tutorial -https://github.com/ptmccarthy/flask-microblog-tutorial -Entry file: flask-microblog-tutorial/app/__init__.py -Scanned: 2016-10-25 23:07:08.020121 -No vulnerabilities found. - - -bronka/flask-hello-world -https://github.com/bronka/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:07:08.556729 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Pensu/flask-ppc64le -https://github.com/Pensu/flask-ppc64le -Entry file: flask-ppc64le/app.py -Scanned: 2016-10-25 23:07:09.905782 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mdublin/Flask-CRUD-template -https://github.com/mdublin/Flask-CRUD-template -Entry file: Flask-CRUD-template/blog/__init__.py -Scanned: 2016-10-25 23:07:14.888270 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lwjones/flask-hello-world -https://github.com/lwjones/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:07:15.483036 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -renmmotp/Ren_Learns_Flask -https://github.com/renmmotp/Ren_Learns_Flask -Entry file: Ren_Learns_Flask/flaskr/flaskr.py -Scanned: 2016-10-25 23:07:16.909626 -No vulnerabilities found. - - -leonidas/flask-spa-routing-example -https://github.com/leonidas/flask-spa-routing-example -Entry file: None -Scanned: 2016-10-25 23:07:18.212771 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/leonidas/flask-spa-routing-example. - -zxqwerxz/test_flask_deploy -https://github.com/zxqwerxz/test_flask_deploy -Entry file: test_flask_deploy/hello.py -Scanned: 2016-10-25 23:07:19.521810 -No vulnerabilities found. - - -mbreisch/flask-hello-world -https://github.com/mbreisch/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:07:20.064672 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sidthakur/docker-single-nginx-flask -https://github.com/sidthakur/docker-single-nginx-flask -Entry file: docker-single-nginx-flask/app/app.py -Scanned: 2016-10-25 23:07:21.366716 -No vulnerabilities found. - - -posenberg/Flask-Kickstarter-Clone -https://github.com/posenberg/Flask-Kickstarter-Clone -Entry file: Flask-Kickstarter-Clone/punchstarter/__init__.py -Scanned: 2016-10-25 23:07:23.409787 -Vulnerability 1: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 42, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 43: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 46, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 47: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=600, height=550) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 53: image_filename = uploaded_image['public_id'] - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 56, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 42, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 43: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 46, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 47: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=600, height=550) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 53: image_filename = uploaded_image['public_id'] - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 56: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 6: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 56, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 73, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 7: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 81, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 8: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 94, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 9: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 10: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 89, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 102: new_pledge = Pledge(member_id=guest_creator.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 11: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 115, trigger word "get(": - query = request.args.get('q') or '' -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 124: query_text = query != ''query'all projects' -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 116, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 12: -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > User input at line 115, trigger word "get(": - query = request.args.get('q') or '' -Reassigned in: - File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > Line 124: query_text = query != ''query'all projects' -File: Flask-Kickstarter-Clone/punchstarter/__init__.py - > reaches line 126, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query_text, projects=projects, project_count=project_count) - - - -pythonvietnam/meetup01-flask -https://github.com/pythonvietnam/meetup01-flask -Entry file: meetup01-flask/hello_world.py -Scanned: 2016-10-25 23:07:24.897470 -Vulnerability 1: -File: meetup01-flask/template.py - > User input at line 9, trigger word "get(": - name = request.args.get('name', 'guy') -File: meetup01-flask/template.py - > reaches line 10, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',name=name) - - - -palden/flask-hello-world -https://github.com/palden/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:07:25.435136 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shane-kercheval/flask-postgresql-template -https://github.com/shane-kercheval/flask-postgresql-template -Entry file: flask-postgresql-template/app_factory.py -Scanned: 2016-10-25 23:07:27.622357 -Vulnerability 1: -File: flask-postgresql-template/app.py - > User input at line 49, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-postgresql-template/app.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-postgresql-template/app.py - > reaches line 53, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('app_default')) - -Vulnerability 2: -File: flask-postgresql-template/app.py - > User input at line 49, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask-postgresql-template/app.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask-postgresql-template/app.py - > reaches line 53, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('app_default')) - - - -jhh/puka-server-flask -https://github.com/jhh/puka-server-flask -Entry file: None -Scanned: 2016-10-25 23:07:29.038235 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jhh/puka-server-flask. - -zhujian0805/my-website-by-flask -https://github.com/zhujian0805/my-website-by-flask -Entry file: my-website-by-flask/flaskr/flaskr.py -Scanned: 2016-10-25 23:07:30.684906 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -charanjp/flask -https://github.com/charanjp/flask -Entry file: None -Scanned: 2016-10-25 23:07:32.705584 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yasskh/flask -https://github.com/yasskh/flask -Entry file: None -Scanned: 2016-10-25 23:07:33.236794 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -poxstone/flask -https://github.com/poxstone/flask -Entry file: None -Scanned: 2016-10-25 23:07:34.742436 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -FlaskTutorial/Flask -https://github.com/FlaskTutorial/Flask -Entry file: None -Scanned: 2016-10-25 23:07:36.283830 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -OnlySHI/flask -https://github.com/OnlySHI/flask -Entry file: None -Scanned: 2016-10-25 23:07:39.814014 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jvuori/flask-uwsgi-nginx-haproxy-docker -https://github.com/jvuori/flask-uwsgi-nginx-haproxy-docker -Entry file: flask-uwsgi-nginx-haproxy-docker/web/app.py -Scanned: 2016-10-25 23:07:43.131840 -No vulnerabilities found. - - -akupara/flask_inspector -https://github.com/akupara/flask_inspector -Entry file: flask_inspector/example/app.py -Scanned: 2016-10-25 23:07:44.874124 -No vulnerabilities found. - - -soasme/flask-personal-access-token -https://github.com/soasme/flask-personal-access-token -Entry file: flask-personal-access-token/example.py -Scanned: 2016-10-25 23:07:56.027994 -Vulnerability 1: -File: flask-personal-access-token/flask_personal_access_token/admin.py - > User input at line 18, trigger word "get(": - render_data = 'base_api_url''base_web_url''debug'current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_API_PREFIX')current_app.config.get('PERSONAL_ACCESS_TOKEN_ADMIN_PREFIX')current_app.config.get('DEBUG') -File: flask-personal-access-token/flask_personal_access_token/admin.py - > reaches line 23, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('/personal_access_token/index.html',render_data) - - - -gileez/flasker -https://github.com/gileez/flasker -Entry file: flasker/flasker/__init__.py -Scanned: 2016-10-25 23:07:57.411753 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -shinycoo/flaskmvcsample -https://github.com/shinycoo/flaskmvcsample -Entry file: flaskmvcsample/app.py -Scanned: 2016-10-25 23:08:01.953027 -No vulnerabilities found. - - -alexwilkerson/flasktaskr -https://github.com/alexwilkerson/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:08:02.538788 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sindhus/flaskr -https://github.com/sindhus/flaskr -Entry file: None -Scanned: 2016-10-25 23:08:06.053736 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sindhus/flaskr. - -apeete/flasktaskr -https://github.com/apeete/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:08:07.599551 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -slippers/flasksec -https://github.com/slippers/flasksec -Entry file: flasksec/main/__init__.py -Scanned: 2016-10-25 23:08:09.910689 -No vulnerabilities found. - - -rui7157/Flask-NvRay-Blog -https://github.com/rui7157/Flask-NvRay-Blog -Entry file: Flask-NvRay-Blog/app/__init__.py -Scanned: 2016-10-25 23:08:14.345570 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Ineeza/FlaskAppBuilder -https://github.com/Ineeza/FlaskAppBuilder -Entry file: FlaskAppBuilder/src/classes/__init__.py -Scanned: 2016-10-25 23:08:15.807833 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -junniepat/FlaskApp -https://github.com/junniepat/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-25 23:08:17.076305 -No vulnerabilities found. - - -YoungGer/FlaskApps -https://github.com/YoungGer/FlaskApps -Entry file: FlaskApps/helloWorld/hello.py -Scanned: 2016-10-25 23:08:18.664462 -No vulnerabilities found. - - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-25 23:08:24.444066 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -DamithaPerera/FlaskApp -https://github.com/DamithaPerera/FlaskApp -Entry file: FlaskApp/app.py -Scanned: 2016-10-25 23:08:25.771465 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dreammis/Flask02 -https://github.com/dreammis/Flask02 -Entry file: Flask02/app/__init__.py -Scanned: 2016-10-25 23:08:27.051136 -No vulnerabilities found. - - -land-pack/flaskBlog -https://github.com/land-pack/flaskBlog -Entry file: flaskBlog/flaskr.py -Scanned: 2016-10-25 23:08:28.342252 -No vulnerabilities found. - - -deyoppe/FlaskFire -https://github.com/deyoppe/FlaskFire -Entry file: FlaskFire/core/system/app.py -Scanned: 2016-10-25 23:08:29.829343 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-25 23:08:31.255944 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -OscarMelin/learning-flask-bootstrap -https://github.com/OscarMelin/learning-flask-bootstrap -Entry file: learning-flask-bootstrap/__init__.py -Scanned: 2016-10-25 23:08:35.718542 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learning-flask-bootstrap/venv/lib/python2.7/sre_compile.py - -allianRoman/flask-intro -https://github.com/allianRoman/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:08:37.067365 -No vulnerabilities found. - - -hunt3ri/temp-flask -https://github.com/hunt3ri/temp-flask -Entry file: temp-flask/app/__init__.py -Scanned: 2016-10-25 23:08:38.492471 -No vulnerabilities found. - - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: None -Scanned: 2016-10-25 23:08:39.018661 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jiezhi/HelloFlask -https://github.com/Jiezhi/HelloFlask -Entry file: HelloFlask/my_app/__init__.py -Scanned: 2016-10-25 23:08:40.420018 -Vulnerability 1: -File: HelloFlask/my_app/product/views.py - > User input at line 16, trigger word "get(": - product = PRODUCTS.get(key) -File: HelloFlask/my_app/product/views.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('product.html',product=product) - - - -szhjia/flask-blog -https://github.com/szhjia/flask-blog -Entry file: None -Scanned: 2016-10-25 23:08:40.964187 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -amybethx/flask-intro -https://github.com/amybethx/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:08:42.283667 -No vulnerabilities found. - - -terriwong/flask-intro -https://github.com/terriwong/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:08:43.593363 -No vulnerabilities found. - - -arkenidar/flask-example -https://github.com/arkenidar/flask-example -Entry file: flask-example/server.py -Scanned: 2016-10-25 23:08:44.961630 -Vulnerability 1: -File: flask-example/server.py - > User input at line 8, trigger word "get(": - query = request.args.get('query', '') -Reassigned in: - File: flask-example/server.py - > Line 9: title = query == '''Search page''Search result for ' + query - File: flask-example/server.py - > Line 17: items = query == ''items[item for item in items] - File: flask-example/server.py - > Line 10: items = ['url''title''http://abc.com''abc', 'url''title''http://xyz.com''xyz', 'url''title''http://abcxyz.com''abcxyz', 'url''title''http://123.com''123', 'url''title''http://qwerty.com''qwerty'] -File: flask-example/server.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form.html',title=title, query=query, items=items) - - - -ztomazin/flask_exp -https://github.com/ztomazin/flask_exp -Entry file: flask_exp/app/__init__.py -Scanned: 2016-10-25 23:08:51.783682 -No vulnerabilities found. - - -ltaziri/Flask-Intro -https://github.com/ltaziri/Flask-Intro -Entry file: Flask-Intro/nice.py -Scanned: 2016-10-25 23:08:53.249892 -No vulnerabilities found. - - -alitsiya/flask-intro -https://github.com/alitsiya/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:08:54.597074 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-25 23:08:56.019066 -No vulnerabilities found. - - -sandiego206/flask_microblog -https://github.com/sandiego206/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-25 23:08:57.690793 -No vulnerabilities found. - - -Odava/flask-jwt -https://github.com/Odava/flask-jwt -Entry file: flask-jwt/tests/conftest.py -Scanned: 2016-10-25 23:08:59.344943 -No vulnerabilities found. - - -nivanko/flask-catalog -https://github.com/nivanko/flask-catalog -Entry file: flask-catalog/application.py -Scanned: 2016-10-25 23:09:05.000957 -Vulnerability 1: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 162, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edit.html',categories=categories, category_id=category.id, item=item, login=login_session.get('username')) - -Vulnerability 2: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - -Vulnerability 3: -File: flask-catalog/application.py - > User input at line 184, trigger word "form[": - category = db_session.query(Category).filter_by(id=request.form['category_id']).one() -Reassigned in: - File: flask-catalog/application.py - > Line 160: category = db_session.query(Category).filter_by(name=category_name).one() - File: flask-catalog/application.py - > Line 147: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) - File: flask-catalog/application.py - > Line 151: ret_MAYBE_FUNCTION_NAME = ' - ' % url_for('list_categories') -File: flask-catalog/application.py - > reaches line 186, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_items',category_name=category.name)) - - - -ajoshdee/flask-test -https://github.com/ajoshdee/flask-test -Entry file: flask-test/app.py -Scanned: 2016-10-25 23:09:21.100386 -No vulnerabilities found. - - -palden/flask-blog -https://github.com/palden/flask-blog -Entry file: None -Scanned: 2016-10-25 23:09:21.629083 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -humaneu/flask_app -https://github.com/humaneu/flask_app -Entry file: None -Scanned: 2016-10-25 23:09:29.402979 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cclittle13/flask-intro -https://github.com/cclittle13/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:30.701528 -No vulnerabilities found. - - -emlam/flask-intro -https://github.com/emlam/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:31.980637 -No vulnerabilities found. - - -spyapali/Flask-intro -https://github.com/spyapali/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-25 23:09:33.261153 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -celiawaggoner/flask-intro -https://github.com/celiawaggoner/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:34.552919 -No vulnerabilities found. - - -cachar/flask-intro -https://github.com/cachar/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:35.823803 -No vulnerabilities found. - - -KTAtkinson/flask-intro -https://github.com/KTAtkinson/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:37.109719 -No vulnerabilities found. - - -pasysxa/flask-mall -https://github.com/pasysxa/flask-mall -Entry file: flask-mall/myapp/__init__.py -Scanned: 2016-10-25 23:09:38.388285 -No vulnerabilities found. - - -fendouai/venv_flask -https://github.com/fendouai/venv_flask -Entry file: venv_flask/get.py -Scanned: 2016-10-25 23:09:41.851273 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: venv_flask/venv/lib/python2.7/sre_compile.py - -leiyue/learning_flask -https://github.com/leiyue/learning_flask -Entry file: learning_flask/miniblog/miniblog.py -Scanned: 2016-10-25 23:09:43.191097 -No vulnerabilities found. - - -florenceloi/flask-intro -https://github.com/florenceloi/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:44.482518 -No vulnerabilities found. - - -DoriRunyon/flask-intro -https://github.com/DoriRunyon/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:45.776644 -No vulnerabilities found. - - -qistchan/WebhookFlask -https://github.com/qistchan/WebhookFlask -Entry file: WebhookFlask/WebHook_Listener.py -Scanned: 2016-10-25 23:09:47.054154 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: None -Scanned: 2016-10-25 23:09:52.964524 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kooder18/flask_Ecommerce -https://github.com/kooder18/flask_Ecommerce -Entry file: flask_Ecommerce/project.py -Scanned: 2016-10-25 23:09:54.430191 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -alenakruchkova/flask-intro -https://github.com/alenakruchkova/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:55.696198 -No vulnerabilities found. - - -bekkam/flask-intro -https://github.com/bekkam/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:56.970405 -No vulnerabilities found. - - -anniehe/flask-intro -https://github.com/anniehe/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:58.245114 -No vulnerabilities found. - - -Vianey81/flask-intro -https://github.com/Vianey81/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:09:59.522749 -No vulnerabilities found. - - -mcbishop/flask-intro -https://github.com/mcbishop/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:10:00.816932 -No vulnerabilities found. - - -Bandurin/Test-flask -https://github.com/Bandurin/Test-flask -Entry file: Test-flask/db_app.py -Scanned: 2016-10-25 23:10:03.936507 -No vulnerabilities found. - - -0phelia/flask-app -https://github.com/0phelia/flask-app -Entry file: flask-app/flask_webserver.py -Scanned: 2016-10-25 23:10:05.299727 -No vulnerabilities found. - - -lauradebella/treinamentoFlask -https://github.com/lauradebella/treinamentoFlask -Entry file: treinamentoFlask/tutorialPythonClub/app.py -Scanned: 2016-10-25 23:10:12.913813 -No vulnerabilities found. - - -seanbehan/flask_websockets -https://github.com/seanbehan/flask_websockets -Entry file: flask_websockets/app.py -Scanned: 2016-10-25 23:10:14.254870 -No vulnerabilities found. - - -ssam123/flask-tutorial -https://github.com/ssam123/flask-tutorial -Entry file: flask-tutorial/hello.py -Scanned: 2016-10-25 23:10:15.557254 -No vulnerabilities found. - - -ziyoung/learningFlask -https://github.com/ziyoung/learningFlask -Entry file: learningFlask/hello.py -Scanned: 2016-10-25 23:10:21.053381 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: learningFlask/venv/lib/python2.7/sre_compile.py - -karayount/flask-intro -https://github.com/karayount/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:10:23.386069 -No vulnerabilities found. - - -go-bears/flask-intro -https://github.com/go-bears/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:10:24.689743 -No vulnerabilities found. - - -mlpeters12/flask-intro -https://github.com/mlpeters12/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:10:31.123604 -No vulnerabilities found. - - -arbonap/flask-intro -https://github.com/arbonap/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:10:32.412428 -No vulnerabilities found. - - -nimeshkverma/SolrFlask -https://github.com/nimeshkverma/SolrFlask -Entry file: SolrFlask/app/app_config.py -Scanned: 2016-10-25 23:10:33.818511 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -gaozhidf/flask_websocket -https://github.com/gaozhidf/flask_websocket -Entry file: flask_websocket/websocket_py3_2/app.py -Scanned: 2016-10-25 23:10:42.863977 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -hilyas/flask-blog -https://github.com/hilyas/flask-blog -Entry file: None -Scanned: 2016-10-25 23:10:43.542768 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dimy407/NBC_Flask -https://github.com/dimy407/NBC_Flask -Entry file: NBC_Flask/flask_app.py -Scanned: 2016-10-25 23:10:49.552512 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ltaziri/Flask-Shopping -https://github.com/ltaziri/Flask-Shopping -Entry file: Flask-Shopping/shoppingsite.py -Scanned: 2016-10-25 23:10:51.316485 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jefersondaniel/notebook-api -https://github.com/jefersondaniel/notebook-api -Entry file: notebook-api/app/__init__.py -Scanned: 2016-10-25 23:10:52.785124 -No vulnerabilities found. - - -ddrsmile/flask-hello-world -https://github.com/ddrsmile/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:10:53.319597 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -webon100/ross_flask01 -https://github.com/webon100/ross_flask01 -Entry file: None -Scanned: 2016-10-25 23:10:53.842900 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saviour123/flaskStudentData -https://github.com/saviour123/flaskStudentData -Entry file: flaskStudentData/app.py -Scanned: 2016-10-25 23:10:55.136276 -Vulnerability 1: -File: flaskStudentData/app.py - > User input at line 29, trigger word "form[": - name = request.form['nm'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 2: -File: flaskStudentData/app.py - > User input at line 30, trigger word "form[": - addr = request.form['add'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 3: -File: flaskStudentData/app.py - > User input at line 31, trigger word "form[": - city = request.form['city'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - -Vulnerability 4: -File: flaskStudentData/app.py - > User input at line 32, trigger word "form[": - pin = request.form['pin'] -File: flaskStudentData/app.py - > reaches line 35, trigger word "execute(": - cur = con.cursor().execute('INSERT INTO students (name,addr,city,pin) VALUES (?,?,?,?)', (name, addr, city, pin)) - - - -QLGu/flask-zhihu-demo -https://github.com/QLGu/flask-zhihu-demo -Entry file: flask-zhihu-demo/www/__init__.py -Scanned: 2016-10-25 23:10:57.164987 -Vulnerability 1: -File: flask-zhihu-demo/www/main/views.py - > User input at line 35, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 33: show_followed = False - File: flask-zhihu-demo/www/main/views.py - > Line 32: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.signin')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',show_followed=show_followed, quoras=quoras, users=users) - -Vulnerability 2: -File: flask-zhihu-demo/www/main/views.py - > User input at line 312, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 313: pagination = user.followed.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 314: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 311: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 316, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注的人', endpoint='main.followed_by', pagination=pagination, follows=follows) - -Vulnerability 3: -File: flask-zhihu-demo/www/main/views.py - > User input at line 327, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 328: pagination = user.followers.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 329: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 326: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 331, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='的关注者', endpoint='main.followers', pagination=pagination, follows=follows) - -Vulnerability 4: -File: flask-zhihu-demo/www/main/views.py - > User input at line 430, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 431: pagination = user.tags.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 432: following_tags = ['tag'item.tag_set for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 429: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 433, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_topics.html',user=user, title='关注的话题', endpoint='main.following_tag', pagination=pagination, following_tags=following_tags) - -Vulnerability 5: -File: flask-zhihu-demo/www/main/views.py - > User input at line 444, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 445: pagination = topic.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 446: tag_followers = ['user'item.user_set for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 443: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 447, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('topic_followers.html',topic=topic, title='人关注了该话题', endpoint='main.tag_followers', pagination=pagination, tag_followers=tag_followers) - -Vulnerability 6: -File: flask-zhihu-demo/www/main/views.py - > User input at line 500, trigger word ".data": - question = Question(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 523: ret_MAYBE_FUNCTION_NAME = render_template('question_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 522, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.question',id=question.id)) - -Vulnerability 7: -File: flask-zhihu-demo/www/main/views.py - > User input at line 500, trigger word ".data": - question = Question(title=form.title.data, content=form.content.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 523: ret_MAYBE_FUNCTION_NAME = render_template('question_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 522, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.question',id=question.id)) - -Vulnerability 8: -File: flask-zhihu-demo/www/main/views.py - > User input at line 563, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 564: pagination = user.user_questions.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 565: questions = pagination.items - File: flask-zhihu-demo/www/main/views.py - > Line 569: questions[j] = questions[j + 1] - File: flask-zhihu-demo/www/main/views.py - > Line 569: questions[j + 1] = questions[j] - File: flask-zhihu-demo/www/main/views.py - > Line 562: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 570, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_questions.html',user=user, endpoint='main.people_questions', pagination=pagination, questions=questions) - -Vulnerability 9: -File: flask-zhihu-demo/www/main/views.py - > User input at line 617, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 618: pagination = question.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 619: question_followers = ['user'item.q_user for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 616: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 620, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('question_followers.html',question=question, endpoint='main.question_followers', pagination=pagination, question_followers=question_followers) - -Vulnerability 10: -File: flask-zhihu-demo/www/main/views.py - > User input at line 705, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 706: pagination = user.user_answers.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 707: answers = pagination.items - File: flask-zhihu-demo/www/main/views.py - > Line 711: answers[j] = answers[j + 1] - File: flask-zhihu-demo/www/main/views.py - > Line 711: answers[j + 1] = answers[j] - File: flask-zhihu-demo/www/main/views.py - > Line 704: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 712, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('following_answers.html',user=user, endpoint='main.people_answers', pagination=pagination, answers=answers) - -Vulnerability 11: -File: flask-zhihu-demo/www/main/views.py - > User input at line 791, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 792: pagination = answer.users.paginate(page,per_page=100, error_out=False) - File: flask-zhihu-demo/www/main/views.py - > Line 793: answer_followers = ['user'item.a_user for item in pagination.items] - File: flask-zhihu-demo/www/main/views.py - > Line 790: ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.index')) -File: flask-zhihu-demo/www/main/views.py - > reaches line 794, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('answer_followers.html',answer=answer, endpoint='main.answer_followers', pagination=pagination, answer_followers=answer_followers) - -Vulnerability 12: -File: flask-zhihu-demo/www/main/views.py - > User input at line 855, trigger word ".data": - collection = Collection(title=form.title.data, desc=form.desc.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 865: ret_MAYBE_FUNCTION_NAME = render_template('collection_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 864, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.collection',id=collection.id)) - -Vulnerability 13: -File: flask-zhihu-demo/www/main/views.py - > User input at line 855, trigger word ".data": - collection = Collection(title=form.title.data, desc=form.desc.data) -Reassigned in: - File: flask-zhihu-demo/www/main/views.py - > Line 865: ret_MAYBE_FUNCTION_NAME = render_template('collection_add.html',form=form) -File: flask-zhihu-demo/www/main/views.py - > reaches line 864, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('main.collection',id=collection.id)) - - - -AndyMcLEOD/PythonFlaskApp -https://github.com/AndyMcLEOD/PythonFlaskApp -Entry file: PythonFlaskApp/app.py -Scanned: 2016-10-25 23:11:01.011310 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mlsh2387/Ex_20160119_Flask-Intro -https://github.com/mlsh2387/Ex_20160119_Flask-Intro -Entry file: Ex_20160119_Flask-Intro/nice.py -Scanned: 2016-10-25 23:11:02.559146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jkravanja/paypal_flask_payment -https://github.com/jkravanja/paypal_flask_payment -Entry file: paypal_flask_payment/payment.py -Scanned: 2016-10-25 23:11:03.880003 -Vulnerability 1: -File: paypal_flask_payment/payment.py - > User input at line 36, trigger word "get(": - paymentId = request.args.get('paymentId') -Reassigned in: - File: paypal_flask_payment/payment.py - > Line 40: payment = paypalrestsdk.Payment.find(paymentId) - File: paypal_flask_payment/payment.py - > Line 42: ret_MAYBE_FUNCTION_NAME = 'OK
paymentId: {}
PayerID: {}
'.format(paymentId, PayerID) - File: paypal_flask_payment/payment.py - > Line 45: ret_MAYBE_FUNCTION_NAME = payment.error -File: paypal_flask_payment/payment.py - > reaches line 41, trigger word "execute(": - if payment.execute('payer_id'PayerID): - -Vulnerability 2: -File: paypal_flask_payment/payment.py - > User input at line 37, trigger word "get(": - PayerID = request.args.get('PayerID') -Reassigned in: - File: paypal_flask_payment/payment.py - > Line 42: ret_MAYBE_FUNCTION_NAME = 'OK
paymentId: {}
PayerID: {}
'.format(paymentId, PayerID) - File: paypal_flask_payment/payment.py - > Line 45: ret_MAYBE_FUNCTION_NAME = payment.error -File: paypal_flask_payment/payment.py - > reaches line 41, trigger word "execute(": - if payment.execute('payer_id'PayerID): - - - -yalove/flask-nginx-gunicorn -https://github.com/yalove/flask-nginx-gunicorn -Entry file: flask-nginx-gunicorn/app/hello.py -Scanned: 2016-10-25 23:11:05.244104 -No vulnerabilities found. - - -tolmun/flask-ng-sample -https://github.com/tolmun/flask-ng-sample -Entry file: flask-ng-sample/project/__init__.py -Scanned: 2016-10-25 23:11:07.002621 -Vulnerability 1: -File: flask-ng-sample/project/api/views.py - > User input at line 132, trigger word ".data": - users = schema.dump(results,many=True).data -File: flask-ng-sample/project/api/views.py - > reaches line 133, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'users) - -Vulnerability 2: -File: flask-ng-sample/project/api/views.py - > User input at line 154, trigger word ".data": - user = schema.dump(results).data -File: flask-ng-sample/project/api/views.py - > reaches line 155, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('user'user) - - - -Michotastico/NetworkInformationFlaskServer -https://github.com/Michotastico/NetworkInformationFlaskServer -Entry file: NetworkInformationFlaskServer/main.py -Scanned: 2016-10-25 23:11:08.368114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tjhakseth/Nice-Flask-Intro -https://github.com/tjhakseth/Nice-Flask-Intro -Entry file: Nice-Flask-Intro/nice.py -Scanned: 2016-10-25 23:11:09.733666 -No vulnerabilities found. - - -adamphillips/pi-flask-video-streaming -https://github.com/adamphillips/pi-flask-video-streaming -Entry file: pi-flask-video-streaming/app/main.py -Scanned: 2016-10-25 23:11:11.090668 -No vulnerabilities found. - - -AngelMunoz/Flask-Blueprints-Template -https://github.com/AngelMunoz/Flask-Blueprints-Template -Entry file: Flask-Blueprints-Template/app/__init__.py -Scanned: 2016-10-25 23:11:12.377643 -Vulnerability 1: -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > User input at line 15, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > Line 17: session['user_id'] = user.id -File: Flask-Blueprints-Template/app/mod_auth/controllers.py - > reaches line 18, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -SeventhResolve/Flask-Intro-Nice-File -https://github.com/SeventhResolve/Flask-Intro-Nice-File -Entry file: Flask-Intro-Nice-File/nice.py -Scanned: 2016-10-25 23:11:13.662625 -No vulnerabilities found. - - -torykit/docker-flask-console -https://github.com/torykit/docker-flask-console -Entry file: docker-flask-console/start.py -Scanned: 2016-10-25 23:11:15.057235 -No vulnerabilities found. - - -koulanurag/Simple-Flask-Application -https://github.com/koulanurag/Simple-Flask-Application -Entry file: Simple-Flask-Application/app.py -Scanned: 2016-10-25 23:11:16.362743 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -franklingu/flask_start_demo -https://github.com/franklingu/flask_start_demo -Entry file: flask_start_demo/hello.py -Scanned: 2016-10-25 23:11:18.144310 -No vulnerabilities found. - - -graphql-python/flask-graphql -https://github.com/graphql-python/flask-graphql -Entry file: flask-graphql/tests/app.py -Scanned: 2016-10-25 23:11:21.621611 -Vulnerability 1: -File: flask-graphql/tests/test_graphiqlview.py - > User input at line 13, trigger word "get(": - response = client.get(url_for('graphql'),headers='Accept''text/html') -File: flask-graphql/tests/test_graphiqlview.py - > reaches line 13, trigger word "url_for(": - response = client.get(url_for('graphql'),headers='Accept''text/html') - - - -hhstore/flask-annotated -https://github.com/hhstore/flask-annotated -Entry file: flask-annotated/flask-0.5/flask/module.py -Scanned: 2016-10-25 23:11:24.433796 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhiliang729/flask -https://github.com/zhiliang729/flask -Entry file: None -Scanned: 2016-10-25 23:11:24.951086 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -prakxys/flask -https://github.com/prakxys/flask -Entry file: None -Scanned: 2016-10-25 23:11:30.537637 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: None -Scanned: 2016-10-25 23:11:32.289348 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -iFe1er/flask -https://github.com/iFe1er/flask -Entry file: None -Scanned: 2016-10-25 23:11:33.827738 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jarogers095/flask-hello-world -https://github.com/jarogers095/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:11:34.357873 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -alex-paterson/Barebones-Flask-and-Caffe-Classifier -https://github.com/alex-paterson/Barebones-Flask-and-Caffe-Classifier -Entry file: Barebones-Flask-and-Caffe-Classifier/app.py -Scanned: 2016-10-25 23:11:46.016748 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-25 23:11:47.410750 -No vulnerabilities found. - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-25 23:11:51.979670 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sanghyunjooPurdue/flaskr -https://github.com/sanghyunjooPurdue/flaskr -Entry file: None -Scanned: 2016-10-25 23:11:52.496294 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanghyunjooPurdue/flaskr. - -becsully/flasktest -https://github.com/becsully/flasktest -Entry file: flasktest/mysite/__init__.py -Scanned: 2016-10-25 23:12:11.252164 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tehasdf/flaskexample -https://github.com/tehasdf/flaskexample -Entry file: flaskexample/flaskexample/app.py -Scanned: 2016-10-25 23:12:12.744795 -No vulnerabilities found. - - -fengyc/flasky -https://github.com/fengyc/flasky -Entry file: None -Scanned: 2016-10-25 23:12:13.261031 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sshimp/flasktaskr -https://github.com/sshimp/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:12:13.797231 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sharma-abhi/flaskr -https://github.com/sharma-abhi/flaskr -Entry file: None -Scanned: 2016-10-25 23:12:14.317717 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sharma-abhi/flaskr. - -kwikiel/flaskr -https://github.com/kwikiel/flaskr -Entry file: None -Scanned: 2016-10-25 23:12:14.825964 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kwikiel/flaskr. - -SFurnace/flaskr -https://github.com/SFurnace/flaskr -Entry file: None -Scanned: 2016-10-25 23:12:15.352589 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SFurnace/flaskr. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:12:15.864134 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AxoSal/GAE-Flask-React-skeleton -https://github.com/AxoSal/GAE-Flask-React-skeleton -Entry file: GAE-Flask-React-skeleton/main.py -Scanned: 2016-10-25 23:12:18.704599 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 23:12:19.238456 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jrballot/FlaskTaskr. - -AnshuOnGit/FlaskServices -https://github.com/AnshuOnGit/FlaskServices -Entry file: FlaskServices/read_file.py -Scanned: 2016-10-25 23:12:23.731061 -Vulnerability 1: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: FlaskServices/read_file.py - > User input at line 40, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/read_file.py - > Line 44: filename = secure_filename(file.filename) -File: FlaskServices/read_file.py - > reaches line 50, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 3: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 4: -File: FlaskServices/uploads/read_file.py - > User input at line 50, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: FlaskServices/uploads/read_file.py - > Line 54: filename = secure_filename(file.filename) -File: FlaskServices/uploads/read_file.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -ftanevski4/FlaskPycharm -https://github.com/ftanevski4/FlaskPycharm -Entry file: FlaskPycharm/FlaskPycharm.py -Scanned: 2016-10-25 23:12:25.089683 -No vulnerabilities found. - - -yasskh/FlaskProject -https://github.com/yasskh/FlaskProject -Entry file: FlaskProject/views.py -Scanned: 2016-10-25 23:12:30.297453 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yukoga/flasksample1 -https://github.com/yukoga/flasksample1 -Entry file: flasksample1/hello.py -Scanned: 2016-10-25 23:12:31.633295 -No vulnerabilities found. - - -Njsao/FlaskServer -https://github.com/Njsao/FlaskServer -Entry file: FlaskServer/untitled.py -Scanned: 2016-10-25 23:12:33.053571 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -feeman1989/backstage_flask -https://github.com/feeman1989/backstage_flask -Entry file: None -Scanned: 2016-10-25 23:12:39.227321 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -charanjp/flask_blog -https://github.com/charanjp/flask_blog -Entry file: flask_blog/venv/Lib/site-packages/flask_sqlalchemy/__init__.py -Scanned: 2016-10-25 23:12:44.597849 -No vulnerabilities found. - - -jaleskinen/PythonFlask -https://github.com/jaleskinen/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:12:52.995457 -Vulnerability 1: -File: PythonFlask/app/routersi.py - > User input at line 30, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routersi.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -maukka76/PythonFlask -https://github.com/maukka76/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:13:00.049542 -No vulnerabilities found. - - -Namelessi/PythonFlask -https://github.com/Namelessi/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:13:06.440852 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mhgit1/PythonFlask -https://github.com/mhgit1/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:13:12.349082 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jlents/discover-flask -https://github.com/jlents/discover-flask -Entry file: discover-flask/project/__init__.py -Scanned: 2016-10-25 23:13:13.990767 -No vulnerabilities found. - - -nimeshkverma/BootstrapFlask -https://github.com/nimeshkverma/BootstrapFlask -Entry file: None -Scanned: 2016-10-25 23:13:16.474616 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ddrsmile/flask-blog -https://github.com/ddrsmile/flask-blog -Entry file: None -Scanned: 2016-10-25 23:13:17.052025 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dasdachs/flask-blog -https://github.com/dasdachs/flask-blog -Entry file: None -Scanned: 2016-10-25 23:13:17.595252 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -noamoss/flask-blog -https://github.com/noamoss/flask-blog -Entry file: None -Scanned: 2016-10-25 23:13:18.107229 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hugoren/flask_login -https://github.com/hugoren/flask_login -Entry file: None -Scanned: 2016-10-25 23:13:19.394086 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hugoren/flask_login. - -yuz989/uwsgi-flask -https://github.com/yuz989/uwsgi-flask -Entry file: uwsgi-flask/main.py -Scanned: 2016-10-25 23:13:20.679783 -No vulnerabilities found. - - -taisa007/timeliner-flask -https://github.com/taisa007/timeliner-flask -Entry file: timeliner-flask/timeliner/timeliner/__init__.py -Scanned: 2016-10-25 23:13:22.097726 -No vulnerabilities found. - - -ddrsmile/flask-taskr -https://github.com/ddrsmile/flask-taskr -Entry file: flask-taskr/views.py -Scanned: 2016-10-25 23:13:23.777765 -No vulnerabilities found. - - -Roconda/flask-bootstrap -https://github.com/Roconda/flask-bootstrap -Entry file: flask-bootstrap/src/api/__init__.py -Scanned: 2016-10-25 23:13:25.170434 -No vulnerabilities found. - - -maxcell/flask-workshop -https://github.com/maxcell/flask-workshop -Entry file: flask-workshop/hello_world/hello.py -Scanned: 2016-10-25 23:13:26.974575 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sshimp/flask-blog -https://github.com/sshimp/flask-blog -Entry file: None -Scanned: 2016-10-25 23:13:27.536936 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PavelMPD/flask_auth -https://github.com/PavelMPD/flask_auth -Entry file: flask_auth/web/server.py -Scanned: 2016-10-25 23:13:29.308983 -No vulnerabilities found. - - -seanwbarry/thinkful_flask -https://github.com/seanwbarry/thinkful_flask -Entry file: thinkful_flask/hello_world.py -Scanned: 2016-10-25 23:13:33.238357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -OrionsSuspenders/flask-blog -https://github.com/OrionsSuspenders/flask-blog -Entry file: None -Scanned: 2016-10-25 23:13:33.826773 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DaTimsta/flask-test -https://github.com/DaTimsta/flask-test -Entry file: flask-test/flask_app.py -Scanned: 2016-10-25 23:13:35.115047 -No vulnerabilities found. - - -sstriatlon/PyFlask -https://github.com/sstriatlon/PyFlask -Entry file: PyFlask/app.py -Scanned: 2016-10-25 23:13:39.723501 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: PyFlask/venv/lib/python2.7/sre_compile.py - -Vianey81/Flask-sql -https://github.com/Vianey81/Flask-sql -Entry file: Flask-sql/hackbright.py -Scanned: 2016-10-25 23:13:41.548152 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -timoparv65/PythonFlask -https://github.com/timoparv65/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:13:48.091962 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 38, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 44: session['user_id'] = user[0].id - File: PythonFlask/app/routers.py - > Line 45: session['isLogged'] = True - File: PythonFlask/app/routers.py - > Line 49: friends = Friends.query.filter_by(user_id=user[0].id) - File: PythonFlask/app/routers.py - > Line 54: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 58: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) -File: PythonFlask/app/routers.py - > reaches line 51, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: PythonFlask/app/routers.py - > User input at line 102, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -JRaisala/PythonFlask -https://github.com/JRaisala/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:13:56.949964 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 22, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 26: session['user_id'] = user[0].id - File: PythonFlask/app/routers.py - > Line 27: session['isLogged'] = True - File: PythonFlask/app/routers.py - > Line 29: friends = Friends.query.filter_by(user_id=user[0].id) - File: PythonFlask/app/routers.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 38: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 17: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) -File: PythonFlask/app/routers.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: PythonFlask/app/routers.py - > User input at line 76, trigger word "get(": - user = Users.query.get(session['user_id']) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 81: ret_MAYBE_FUNCTION_NAME = render_template('template_friends.html',form=form, isLogged=True) - File: PythonFlask/app/routers.py - > Line 66: ret_MAYBE_FUNCTION_NAME = redirect('/') - File: PythonFlask/app/routers.py - > Line 69: ret_MAYBE_FUNCTION_NAME = render_template('template_friends.html',form=form, isLogged=True) -File: PythonFlask/app/routers.py - > reaches line 78, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=user.friends) - -Vulnerability 3: -File: PythonFlask/app/routers.py - > User input at line 98, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -jraappan/PythonFlask -https://github.com/jraappan/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:14:04.530431 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 27, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -hannu78/PythonFlask -https://github.com/hannu78/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:14:10.951658 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 46, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_name.html',uname=name) - - - -marcosf63/flask_app -https://github.com/marcosf63/flask_app -Entry file: None -Scanned: 2016-10-25 23:14:11.495774 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -maratkanov-a/flask_project -https://github.com/maratkanov-a/flask_project -Entry file: flask_project/flask_project.py -Scanned: 2016-10-25 23:14:12.832351 -No vulnerabilities found. - - -bellcliff/practice-flask -https://github.com/bellcliff/practice-flask -Entry file: practice-flask/hello.py -Scanned: 2016-10-25 23:14:14.680977 -No vulnerabilities found. - - -GeetikaBatra/Flask_intro -https://github.com/GeetikaBatra/Flask_intro -Entry file: None -Scanned: 2016-10-25 23:14:15.215175 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -changddcn/dd-flask -https://github.com/changddcn/dd-flask -Entry file: None -Scanned: 2016-10-25 23:14:16.842314 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/changddcn/dd-flask. - -Decus12/PythonFlask -https://github.com/Decus12/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:14:28.538903 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 49, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 50, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -thiltunen78/PythonFlask -https://github.com/thiltunen78/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:14:35.688652 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 22, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 26: session['user_id'] = user[0].id - File: PythonFlask/app/routers.py - > Line 27: session['isLogged'] = True - File: PythonFlask/app/routers.py - > Line 29: friends = Friends.query.filter_by(user_id=user[0].id) - File: PythonFlask/app/routers.py - > Line 33: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 17: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) -File: PythonFlask/app/routers.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: PythonFlask/app/routers.py - > User input at line 75, trigger word "get(": - user = Users.query.get(session['user_id']) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 79: ret_MAYBE_FUNCTION_NAME = render_template('template_friends.html',form=form, isLogged=True) - File: PythonFlask/app/routers.py - > Line 65: ret_MAYBE_FUNCTION_NAME = redirect('/') - File: PythonFlask/app/routers.py - > Line 68: ret_MAYBE_FUNCTION_NAME = render_template('template_friends.html',form=form, isLogged=True) -File: PythonFlask/app/routers.py - > reaches line 76, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=user.friends) - -Vulnerability 3: -File: PythonFlask/app/routers.py - > User input at line 95, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 96, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -tere15/PythonFlask -https://github.com/tere15/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:14:50.136152 -No vulnerabilities found. - - -ttakkula/flask_example -https://github.com/ttakkula/flask_example -Entry file: flask_example/app/__init__.py -Scanned: 2016-10-25 23:15:00.867208 -Vulnerability 1: -File: flask_example/app/routers.py - > User input at line 18, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: flask_example/app/routers.py - > Line 20: session['user_id'] = user[0].id - File: flask_example/app/routers.py - > Line 21: session['isLogged'] = True - File: flask_example/app/routers.py - > Line 23: friends = Friends.query.filter_by(user_id=user[0].id) - File: flask_example/app/routers.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=login, isLogged=False) - File: flask_example/app/routers.py - > Line 32: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=login, isLogged=False) - File: flask_example/app/routers.py - > Line 14: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=login, isLogged=False) -File: flask_example/app/routers.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('friends.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: flask_example/app/routers.py - > User input at line 61, trigger word "get(": - friend = Users.query.get(session['user_id']) -Reassigned in: - File: flask_example/app/routers.py - > Line 59: ret_MAYBE_FUNCTION_NAME = redirect('/') -File: flask_example/app/routers.py - > reaches line 62, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('friends.html',isLogged=True, friends=friend.friends) - -Vulnerability 3: -File: flask_example/app/routers.py - > User input at line 79, trigger word "get(": - name = request.args.get('name') -File: flask_example/app/routers.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name, browser=agent, preflang=preflang) - -Vulnerability 4: -File: flask_example/app/routers.py - > User input at line 80, trigger word "get(": - agent = request.headers.get('User-Agent') -File: flask_example/app/routers.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name, browser=agent, preflang=preflang) - -Vulnerability 5: -File: flask_example/app/routers.py - > User input at line 81, trigger word "get(": - preflang = request.headers.get('Accept-Language') -File: flask_example/app/routers.py - > reaches line 82, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name, browser=agent, preflang=preflang) - - - -satyadevi-nyros/werckers_flask -https://github.com/satyadevi-nyros/werckers_flask -Entry file: werckers_flask/app.py -Scanned: 2016-10-25 23:15:03.098054 -No vulnerabilities found. - - -ltaziri/SQL-Flask -https://github.com/ltaziri/SQL-Flask -Entry file: SQL-Flask/hackbright.py -Scanned: 2016-10-25 23:15:04.411898 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -psavela/PythonFlask -https://github.com/psavela/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:15:13.417739 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 21, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 25: session['user_id'] = user[0].id - File: PythonFlask/app/routers.py - > Line 26: session['isLogged'] = True - File: PythonFlask/app/routers.py - > Line 28: friends = Friends.query.filter_by(user_id=user[0].id) - File: PythonFlask/app/routers.py - > Line 33: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 16: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) -File: PythonFlask/app/routers.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: PythonFlask/app/routers.py - > User input at line 70, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -KariR61/PythonFlask -https://github.com/KariR61/PythonFlask -Entry file: PythonFlask/app/__init__.py -Scanned: 2016-10-25 23:15:19.490401 -Vulnerability 1: -File: PythonFlask/app/routers.py - > User input at line 19, trigger word ".data": - user = Users.query.filter_by(email=login.email.data) -Reassigned in: - File: PythonFlask/app/routers.py - > Line 22: session['user_id'] = user[0].id - File: PythonFlask/app/routers.py - > Line 23: session['isLogged'] = True - File: PythonFlask/app/routers.py - > Line 25: friends = Friends.query.filter_by(user_id=user[0].id) - File: PythonFlask/app/routers.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) - File: PythonFlask/app/routers.py - > Line 14: ret_MAYBE_FUNCTION_NAME = render_template('template_index.html',form=login, isLogged=False) -File: PythonFlask/app/routers.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',isLogged=True, friends=friends) - -Vulnerability 2: -File: PythonFlask/app/routers.py - > User input at line 45, trigger word "get(": - name = request.args.get('name') -File: PythonFlask/app/routers.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('template_user.html',name=name) - - - -dhruvsrivastava/flask-intro -https://github.com/dhruvsrivastava/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-25 23:15:23.742653 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cjohns38/flask-intro -https://github.com/cjohns38/flask-intro -Entry file: flask-intro/__init__.py -Scanned: 2016-10-25 23:15:25.308002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -notaweelos/openshift_flask -https://github.com/notaweelos/openshift_flask -Entry file: openshift_flask/helloflask.py -Scanned: 2016-10-25 23:15:26.595207 -No vulnerabilities found. - - -jkeung/flask_microblog -https://github.com/jkeung/flask_microblog -Entry file: flask_microblog/app/__init__.py -Scanned: 2016-10-25 23:15:28.311771 -No vulnerabilities found. - - -shank7485/Flask-APIs -https://github.com/shank7485/Flask-APIs -Entry file: Flask-APIs/APIs/__init__.py -Scanned: 2016-10-25 23:15:29.748537 -Vulnerability 1: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 49, trigger word "get(": - from_address = request.args.get('f_addr') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 52: comp = comparer_address(from_address, to_address, geo_api_key, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 2: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 50, trigger word "get(": - to_address = request.args.get('t_addr') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 52: comp = comparer_address(from_address, to_address, geo_api_key, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 53, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 3: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 58, trigger word "get(": - from_latitude = request.args.get('f_lat') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 4: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 59, trigger word "get(": - from_longitude = request.args.get('f_long') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 5: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 60, trigger word "get(": - to_latitude = request.args.get('t_lat') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - -Vulnerability 6: -File: Flask-APIs/APIs/main_URLs.py - > User input at line 61, trigger word "get(": - to_longitude = request.args.get('t_long') -Reassigned in: - File: Flask-APIs/APIs/main_URLs.py - > Line 63: comp = comparer_coord(from_latitude, from_longitude, to_latitude, to_longitude, uber_api_key) -File: Flask-APIs/APIs/main_URLs.py - > reaches line 64, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(comp.services_prices()) - - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-25 23:15:31.160467 -Vulnerability 1: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 2: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 3: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 73, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 4: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 78, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 5: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 6: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 7: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 8: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - - - -nntndfrk/untitled -https://github.com/nntndfrk/untitled -Entry file: untitled/untitled.py -Scanned: 2016-10-25 23:15:32.463720 -No vulnerabilities found. - - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-25 23:15:33.750716 -No vulnerabilities found. - - -jgabrielfreitas/FlaskAndParse -https://github.com/jgabrielfreitas/FlaskAndParse -Entry file: FlaskAndParse/hello_flask.py -Scanned: 2016-10-25 23:15:35.047731 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-25 23:15:36.325185 -No vulnerabilities found. - - -go-bears/sql-with-flask -https://github.com/go-bears/sql-with-flask -Entry file: sql-with-flask/hackbright.py -Scanned: 2016-10-25 23:15:37.630463 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -anniehe/project-tracker-flask -https://github.com/anniehe/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-25 23:15:38.936213 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-25 23:15:40.224489 -No vulnerabilities found. - - -julyano/MiniCursoFlaskPETCC -https://github.com/julyano/MiniCursoFlaskPETCC -Entry file: MiniCursoFlaskPETCC/routes.py -Scanned: 2016-10-25 23:15:41.513425 -No vulnerabilities found. - - -neonbadger/project-tracker-flask -https://github.com/neonbadger/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-25 23:15:42.815557 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -DoriRunyon/Project-tracker-flask -https://github.com/DoriRunyon/Project-tracker-flask -Entry file: Project-tracker-flask/hackbright-web.py -Scanned: 2016-10-25 23:15:44.106486 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -emlam/project-tracker-flask -https://github.com/emlam/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-25 23:15:45.450561 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Buuntu/TicTacToe-Flask -https://github.com/Buuntu/TicTacToe-Flask -Entry file: TicTacToe-Flask/tictactoe.py -Scanned: 2016-10-25 23:15:46.875899 -No vulnerabilities found. - - -EdilvoLima/CursoPythonFlask -https://github.com/EdilvoLima/CursoPythonFlask -Entry file: CursoPythonFlask/app.py -Scanned: 2016-10-25 23:15:48.285028 -No vulnerabilities found. - - -dternyak/Flask-Postgres-Docker -https://github.com/dternyak/Flask-Postgres-Docker -Entry file: Flask-Postgres-Docker/web/index.py -Scanned: 2016-10-25 23:15:50.162125 -No vulnerabilities found. - - -info3180/python-flask-example -https://github.com/info3180/python-flask-example -Entry file: python-flask-example/hello.py -Scanned: 2016-10-25 23:15:51.457518 -Vulnerability 1: -File: python-flask-example/hello.py - > User input at line 17, trigger word "get(": - name = request.args.get('name') -File: python-flask-example/hello.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('process.html',name=name) - - - -janeygak/Hackbright--SQL-with-Flask -https://github.com/janeygak/Hackbright--SQL-with-Flask -Entry file: Hackbright--SQL-with-Flask/hackbright-web.py -Scanned: 2016-10-25 23:15:52.860277 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SeventhResolve/Project-Tracker-Flask -https://github.com/SeventhResolve/Project-Tracker-Flask -Entry file: Project-Tracker-Flask/hackbright-web.py -Scanned: 2016-10-25 23:15:54.292064 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -alitsiya/project-tracker-flask -https://github.com/alitsiya/project-tracker-flask -Entry file: project-tracker-flask/hackbright-web.py -Scanned: 2016-10-25 23:15:55.693501 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ThomasMarcel/gae-tomalcala-flask -https://github.com/ThomasMarcel/gae-tomalcala-flask -Entry file: gae-tomalcala-flask/main.py -Scanned: 2016-10-25 23:15:57.107355 -No vulnerabilities found. - - -ContinuumIO/flask-kerberos-login -https://github.com/ContinuumIO/flask-kerberos-login -Entry file: flask-kerberos-login/examples/simple.py -Scanned: 2016-10-25 23:15:58.514703 -No vulnerabilities found. - - -badspelr/flask-hello-world -https://github.com/badspelr/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:16:02.075095 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yoophi/flask-appointment-peewee -https://github.com/yoophi/flask-appointment-peewee -Entry file: flask-appointment-peewee/sched/app.py -Scanned: 2016-10-25 23:16:05.515634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -c1rno/Flask_auth_example -https://github.com/c1rno/Flask_auth_example -Entry file: Flask_auth_example/app/__init__.py -Scanned: 2016-10-25 23:16:15.388339 -No vulnerabilities found. - - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: None -Scanned: 2016-10-25 23:16:26.126361 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -prakxys/flask -https://github.com/prakxys/flask -Entry file: None -Scanned: 2016-10-25 23:16:27.705370 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -galacticpy/flask -https://github.com/galacticpy/flask -Entry file: None -Scanned: 2016-10-25 23:16:29.347089 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -https://github.com/OneBitSoftware/Office365-SharePoint-Python-Flask-Sample -Entry file: Office365-SharePoint-Python-Flask-Sample/src/Python.Office365.AppAuthentication/app.py -Scanned: 2016-10-25 23:16:32.020096 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/Session1/app.py -Scanned: 2016-10-25 23:16:33.425721 -No vulnerabilities found. - - -imperio-wxm/flask-learn -https://github.com/imperio-wxm/flask-learn -Entry file: None -Scanned: 2016-10-25 23:16:33.996220 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ptrierweiler/myblog -https://github.com/ptrierweiler/myblog -Entry file: None -Scanned: 2016-10-25 23:16:34.550119 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -drone-demos/drone-with-python -https://github.com/drone-demos/drone-with-python -Entry file: drone-with-python/dronedemo/main.py -Scanned: 2016-10-25 23:16:36.962684 -No vulnerabilities found. - - -msopentechcn/aad-graphapi-flask-demo -https://github.com/msopentechcn/aad-graphapi-flask-demo -Entry file: aad-graphapi-flask-demo/app.py -Scanned: 2016-10-25 23:16:38.261686 -Vulnerability 1: -File: aad-graphapi-flask-demo/app.py - > User input at line 100, trigger word "get(": - error_code = messages.get('error_code') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 2: -File: aad-graphapi-flask-demo/app.py - > User input at line 101, trigger word "get(": - error_message = messages.get('error_message') -File: aad-graphapi-flask-demo/app.py - > reaches line 102, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('error.html',error_code=error_code, error_message=error_message) - -Vulnerability 3: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 4: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 5: -File: aad-graphapi-flask-demo/app.py - > User input at line 108, trigger word "get(": - error_code = errors.get('code') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - -Vulnerability 6: -File: aad-graphapi-flask-demo/app.py - > User input at line 109, trigger word "get(": - error_message = errors.get('message').get('value') -Reassigned in: - File: aad-graphapi-flask-demo/app.py - > Line 110: messages = json.dumps('error_code''error_message'error_codeerror_message) - File: aad-graphapi-flask-demo/app.py - > Line 113: ret_MAYBE_FUNCTION_NAME = redirect(url_for('list_user')) -File: aad-graphapi-flask-demo/app.py - > reaches line 111, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('display_error',messages=messages)) - - - -amirziai/sklearnflask -https://github.com/amirziai/sklearnflask -Entry file: sklearnflask/main.py -Scanned: 2016-10-25 23:16:39.770002 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SticksInHand/flaskr -https://github.com/SticksInHand/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:40.294868 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SticksInHand/flaskr. - -jayShepard/Flasky -https://github.com/jayShepard/Flasky -Entry file: None -Scanned: 2016-10-25 23:16:40.847401 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jayShepard/Flasky. - -vineethtw/flaskexamples -https://github.com/vineethtw/flaskexamples -Entry file: flaskexamples/api/simulations.py -Scanned: 2016-10-25 23:16:43.260017 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kmosho/flaskr -https://github.com/kmosho/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:43.848093 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kmosho/flaskr. - -Duncodes/flasky -https://github.com/Duncodes/flasky -Entry file: None -Scanned: 2016-10-25 23:16:45.354567 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -menglong81/flaskr -https://github.com/menglong81/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:46.869868 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/menglong81/flaskr. - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:16:48.399265 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -diegogslomp/flaskr -https://github.com/diegogslomp/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:51.457886 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/diegogslomp/flaskr. - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: None -Scanned: 2016-10-25 23:16:52.972011 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -playgrdstar/flasktaskr -https://github.com/playgrdstar/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:16:53.496147 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -toricor/flaskr -https://github.com/toricor/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:55.023518 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/toricor/flaskr. - -Lazyppl/Flaskblog -https://github.com/Lazyppl/Flaskblog -Entry file: Flaskblog/app/__init__.py -Scanned: 2016-10-25 23:16:57.432885 -No vulnerabilities found. - - -zeratullich/flaskr -https://github.com/zeratullich/flaskr -Entry file: None -Scanned: 2016-10-25 23:16:57.949015 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeratullich/flaskr. - -noamoss/flasktaskr -https://github.com/noamoss/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:17:02.469801 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arose13/HerokuCondaScipyFlaskApp -https://github.com/arose13/HerokuCondaScipyFlaskApp -Entry file: HerokuCondaScipyFlaskApp/Web/app.py -Scanned: 2016-10-25 23:17:05.916123 -No vulnerabilities found. - - -jrballot/FlaskTaskr -https://github.com/jrballot/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 23:17:06.450306 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jrballot/FlaskTaskr. - -awind/FlaskRestful -https://github.com/awind/FlaskRestful -Entry file: FlaskRestful/app/__init__.py -Scanned: 2016-10-25 23:17:15.897907 -Vulnerability 1: -File: FlaskRestful/app/apis.py - > User input at line 48, trigger word "get(": - user = User.query.get(userid) -File: FlaskRestful/app/apis.py - > reaches line 51, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = user_schema.jsonify(user) - - - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-25 23:17:22.217026 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/app/__init__.py -Scanned: 2016-10-25 23:17:25.871051 -No vulnerabilities found. - - -aetherwu/FlaskDocker -https://github.com/aetherwu/FlaskDocker -Entry file: FlaskDocker/app/app.py -Scanned: 2016-10-25 23:17:27.497719 -No vulnerabilities found. - - -angeloski/flask-sandbox -https://github.com/angeloski/flask-sandbox -Entry file: flask-sandbox/intro_to_flask/__init__.py -Scanned: 2016-10-25 23:17:28.795512 -No vulnerabilities found. - - -jonnybazookatone/flask-watchman -https://github.com/jonnybazookatone/flask-watchman -Entry file: None -Scanned: 2016-10-25 23:17:30.172554 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jonnybazookatone/flask-watchman. - -Lucky0604/flask-blog -https://github.com/Lucky0604/flask-blog -Entry file: None -Scanned: 2016-10-25 23:17:31.722923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -arvind-iyer/flask-101 -https://github.com/arvind-iyer/flask-101 -Entry file: flask-101/app/__init__.py -Scanned: 2016-10-25 23:17:34.130589 -No vulnerabilities found. - - -vbalien/flask-skeleton -https://github.com/vbalien/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-25 23:17:35.524055 -No vulnerabilities found. - - -anniee/flask-intro -https://github.com/anniee/flask-intro -Entry file: flask-intro/server.py -Scanned: 2016-10-25 23:17:36.861445 -No vulnerabilities found. - - -dritux/flask-spark -https://github.com/dritux/flask-spark -Entry file: flask-spark/spark/__init__.py -Scanned: 2016-10-25 23:17:38.150479 -No vulnerabilities found. - - -robbintt/flask-template -https://github.com/robbintt/flask-template -Entry file: flask-template/controller.py -Scanned: 2016-10-25 23:17:40.040281 -No vulnerabilities found. - - -felipemfp/flask-microblog -https://github.com/felipemfp/flask-microblog -Entry file: None -Scanned: 2016-10-25 23:17:40.569992 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/felipemfp/flask-microblog. - -bronka/flask-blog -https://github.com/bronka/flask-blog -Entry file: None -Scanned: 2016-10-25 23:17:41.112344 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -genagain/learning-flask -https://github.com/genagain/learning-flask -Entry file: learning-flask/app/hello.py -Scanned: 2016-10-25 23:17:47.565510 -No vulnerabilities found. - - -acknowledge/flask-api -https://github.com/acknowledge/flask-api -Entry file: None -Scanned: 2016-10-25 23:17:48.611297 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/acknowledge/flask-api. - -JunQian-Andy/flask_mail -https://github.com/JunQian-Andy/flask_mail -Entry file: flask_mail/app/__init__.py -Scanned: 2016-10-25 23:17:49.915215 -No vulnerabilities found. - - -fabricekwizera/flask_intro -https://github.com/fabricekwizera/flask_intro -Entry file: flask_intro/first_app.py -Scanned: 2016-10-25 23:17:51.307378 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_intro/.#first_app.py - -relman/flask-srv -https://github.com/relman/flask-srv -Entry file: flask-srv/service.py -Scanned: 2016-10-25 23:17:52.856737 -No vulnerabilities found. - - -volgoweb/flask_api -https://github.com/volgoweb/flask_api -Entry file: flask_api/application.py -Scanned: 2016-10-25 23:17:54.167549 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -leiyue/tutorial_flask -https://github.com/leiyue/tutorial_flask -Entry file: tutorial_flask/base/app.py -Scanned: 2016-10-25 23:17:55.596378 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-25 23:17:57.463311 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -samgclarke/flask-starter -https://github.com/samgclarke/flask-starter -Entry file: None -Scanned: 2016-10-25 23:17:58.007689 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/samgclarke/flask-starter. - -hbldh/flask-pybankid -https://github.com/hbldh/flask-pybankid -Entry file: flask-pybankid/flask_pybankid.py -Scanned: 2016-10-25 23:18:03.482201 -Vulnerability 1: -File: flask-pybankid/flask_pybankid.py - > User input at line 130, trigger word "get(": - text_to_sign = request.args.get('userVisibleData', '') -Reassigned in: - File: flask-pybankid/flask_pybankid.py - > Line 132: response = self.client.sign(text_to_sign, personal_number) - File: flask-pybankid/flask_pybankid.py - > Line 134: ret_MAYBE_FUNCTION_NAME = self.handle_exception(FlaskPyBankIDError.create_from_pybankid_exception(e)) - File: flask-pybankid/flask_pybankid.py - > Line 136: ret_MAYBE_FUNCTION_NAME = self.handle_exception(FlaskPyBankIDError(str(e), 500)) -File: flask-pybankid/flask_pybankid.py - > reaches line 138, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -krlex/flask-resume -https://github.com/krlex/flask-resume -Entry file: flask-resume/manage.py -Scanned: 2016-10-25 23:18:05.909073 -No vulnerabilities found. - - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-25 23:18:08.210911 -No vulnerabilities found. - - -dfitzgerald3/sg_flask -https://github.com/dfitzgerald3/sg_flask -Entry file: sg_flask/__init__.py -Scanned: 2016-10-25 23:18:32.765844 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: sg_flask/venv/lib/python2.7/sre_compile.py - -Tmingh/learn_flask -https://github.com/Tmingh/learn_flask -Entry file: learn_flask/learn_flask/flaskr.py -Scanned: 2016-10-25 23:18:34.164082 -No vulnerabilities found. - - -qiuhaoling/my_flask -https://github.com/qiuhaoling/my_flask -Entry file: my_flask/app/__init__.py -Scanned: 2016-10-25 23:18:35.586790 -No vulnerabilities found. - - -ahsanwtc/flask-project -https://github.com/ahsanwtc/flask-project -Entry file: flask-project/hello.py -Scanned: 2016-10-25 23:18:36.868420 -No vulnerabilities found. - - -chadelder/flask-blog -https://github.com/chadelder/flask-blog -Entry file: None -Scanned: 2016-10-25 23:18:37.410914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rdrsh/flask-hello -https://github.com/rdrsh/flask-hello -Entry file: flask-hello/main.py -Scanned: 2016-10-25 23:18:39.162433 -No vulnerabilities found. - - -Forumouth/flask-simple -https://github.com/Forumouth/flask-simple -Entry file: flask-simple/tests/data/testapp.py -Scanned: 2016-10-25 23:18:40.571791 -No vulnerabilities found. - - -mattyait/Flask_webapp -https://github.com/mattyait/Flask_webapp -Entry file: Flask_webapp/routes.py -Scanned: 2016-10-25 23:18:41.988579 -Vulnerability 1: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 2: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 69, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 3: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 73, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 4: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 78, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 5: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 85, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 6: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 89, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - -Vulnerability 7: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 95, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',message=message) - -Vulnerability 8: -File: Flask_webapp/routes.py - > User input at line 43, trigger word "form[": - user_name = request.form['username'].strip() -Reassigned in: - File: Flask_webapp/routes.py - > Line 68: message = 'User' + user_name + ' Created successfully with sudo privileges' - File: Flask_webapp/routes.py - > Line 72: errors = 'User ' + user_name + ' already exist.' - File: Flask_webapp/routes.py - > Line 77: message = 'User' + user_name + ' Created successfully without sudo privileges' - File: Flask_webapp/routes.py - > Line 84: message = 'User' + user_name + ' modified successfully' - File: Flask_webapp/routes.py - > Line 88: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 94: message = 'User' + user_name + ' deleted successfully' - File: Flask_webapp/routes.py - > Line 98: errors = 'User ' + user_name + ' not exist.' - File: Flask_webapp/routes.py - > Line 102: ret_MAYBE_FUNCTION_NAME = render_template('index.html') - File: Flask_webapp/routes.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - File: Flask_webapp/routes.py - > Line 57: errors = 'Please enter the fields values.' -File: Flask_webapp/routes.py - > reaches line 99, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',errors=errors) - - - -playgrdstar/flask-blog -https://github.com/playgrdstar/flask-blog -Entry file: None -Scanned: 2016-10-25 23:18:42.538549 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rx3bp/flask-freeze -https://github.com/rx3bp/flask-freeze -Entry file: flask-freeze/app.py -Scanned: 2016-10-25 23:18:44.427567 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-25 23:18:46.225977 -No vulnerabilities found. - - -NaoYamaguchi/flask_login -https://github.com/NaoYamaguchi/flask_login -Entry file: None -Scanned: 2016-10-25 23:18:46.771175 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/NaoYamaguchi/flask_login. - -njnr/onece -https://github.com/njnr/onece -Entry file: onece/app/__init__.py -Scanned: 2016-10-25 23:18:48.352859 -Vulnerability 1: -File: onece/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 26: posts = pagination.items - File: onece/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: onece/app/main/views.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 43: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: onece/app/main/views.py - > Line 45: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 48: comments = pagination.items - File: onece/app/main/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: onece/app/main/views.py - > reaches line 49, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 3: -File: onece/app/main/views.py - > User input at line 54, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 55: pagination = Location.query.order_by(Location.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 58: locations = pagination.items -File: onece/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('locations.html',locations=locations, pagination=pagination) - -Vulnerability 4: -File: onece/app/main/views.py - > User input at line 117, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 118: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 121: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: onece/app/main/views.py - > Line 116: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 123, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: onece/app/main/views.py - > User input at line 134, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: onece/app/main/views.py - > Line 135: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: onece/app/main/views.py - > Line 138: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: onece/app/main/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: onece/app/main/views.py - > reaches line 140, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -rmaheshkumarblr/FlaskTestingApp -https://github.com/rmaheshkumarblr/FlaskTestingApp -Entry file: FlaskTestingApp/testingFlaskScript.py -Scanned: 2016-10-25 23:18:52.346343 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jrballot/FlaskBlogApp -https://github.com/jrballot/FlaskBlogApp -Entry file: FlaskBlogApp/blog.py -Scanned: 2016-10-25 23:18:53.647926 -No vulnerabilities found. - - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-25 23:18:57.569543 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/sre_compile.py - -joyzhaoyang/FlaskDirectUploader -https://github.com/joyzhaoyang/FlaskDirectUploader -Entry file: FlaskDirectUploader/application.py -Scanned: 2016-10-25 23:18:59.266086 -No vulnerabilities found. - - -apiarian/RPi-GPIO-flask -https://github.com/apiarian/RPi-GPIO-flask -Entry file: RPi-GPIO-flask/server.py -Scanned: 2016-10-25 23:19:00.605769 -No vulnerabilities found. - - -IvanBodnar/fromzero_flask_blog -https://github.com/IvanBodnar/fromzero_flask_blog -Entry file: fromzero_flask_blog/__init__.py -Scanned: 2016-10-25 23:19:02.348710 -Vulnerability 1: -File: fromzero_flask_blog/author/views.py - > User input at line 27, trigger word "get(": - next = session.get('next') -Reassigned in: - File: fromzero_flask_blog/author/views.py - > Line 31: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: fromzero_flask_blog/author/views.py - > Line 37: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: fromzero_flask_blog/author/views.py - > reaches line 29, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 2: -File: fromzero_flask_blog/blog/views.py - > User input at line 100, trigger word ".data": - title = form.title.data -Reassigned in: - File: fromzero_flask_blog/blog/views.py - > Line 102: slug = slugify(title) - File: fromzero_flask_blog/blog/views.py - > Line 103: post = Post(blog, author, title, body, category, filename, slug) - File: fromzero_flask_blog/blog/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: fromzero_flask_blog/blog/views.py - > reaches line 108, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - -Vulnerability 3: -File: fromzero_flask_blog/blog/views.py - > User input at line 100, trigger word ".data": - title = form.title.data -Reassigned in: - File: fromzero_flask_blog/blog/views.py - > Line 102: slug = slugify(title) - File: fromzero_flask_blog/blog/views.py - > Line 103: post = Post(blog, author, title, body, category, filename, slug) - File: fromzero_flask_blog/blog/views.py - > Line 110: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: fromzero_flask_blog/blog/views.py - > reaches line 108, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - - - -alexarnautu/simple-flask-blog -https://github.com/alexarnautu/simple-flask-blog -Entry file: simple-flask-blog/blog.py -Scanned: 2016-10-25 23:19:04.078496 -No vulnerabilities found. - - -mhgit1/PythonFlask_oma -https://github.com/mhgit1/PythonFlask_oma -Entry file: PythonFlask_oma/app/__init__.py -Scanned: 2016-10-25 23:19:11.553437 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-25 23:19:13.069146 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -bernaerdik/Flask_on_CF -https://github.com/bernaerdik/Flask_on_CF -Entry file: Flask_on_CF/hello.py -Scanned: 2016-10-25 23:19:14.362762 -No vulnerabilities found. - - -astianseb/flask-simple-distributed-applicaiton -https://github.com/astianseb/flask-simple-distributed-applicaiton -Entry file: flask-simple-distributed-applicaiton/Flasktest/__init__.py -Scanned: 2016-10-25 23:19:15.680546 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tomov/flask-heroku-backend -https://github.com/tomov/flask-heroku-backend -Entry file: flask-heroku-backend/app/__init__.py -Scanned: 2016-10-25 23:19:17.068501 -No vulnerabilities found. - - -knoxilla/web-flask-dockerized -https://github.com/knoxilla/web-flask-dockerized -Entry file: web-flask-dockerized/app.py -Scanned: 2016-10-25 23:19:18.364511 -No vulnerabilities found. - - -akaak/flask-mega-tutorial -https://github.com/akaak/flask-mega-tutorial -Entry file: flask-mega-tutorial/part-iii-forms/app.py -Scanned: 2016-10-25 23:19:20.013795 -No vulnerabilities found. - - -thechad12/Flask-Item-Catalog -https://github.com/thechad12/Flask-Item-Catalog -Entry file: Flask-Item-Catalog/application.py -Scanned: 2016-10-25 23:19:21.829619 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -javicacheiro/rest_api_flask -https://github.com/javicacheiro/rest_api_flask -Entry file: rest_api_flask/rest/app/__init__.py -Scanned: 2016-10-25 23:19:23.740283 -No vulnerabilities found. - - -florenceloi/flask-intro-redo -https://github.com/florenceloi/flask-intro-redo -Entry file: flask-intro-redo/nice.py -Scanned: 2016-10-25 23:19:35.575331 -No vulnerabilities found. - - -eric-boone/python-flask-round1 -https://github.com/eric-boone/python-flask-round1 -Entry file: python-flask-round1/app/__init__.py -Scanned: 2016-10-25 23:19:37.972896 -No vulnerabilities found. - - -playgrdstar/flask-hello-world -https://github.com/playgrdstar/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:19:39.041943 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -iceskel/flask-restful-api -https://github.com/iceskel/flask-restful-api -Entry file: flask-restful-api/api.py -Scanned: 2016-10-25 23:19:41.457333 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -apiaas/gae-flask-base -https://github.com/apiaas/gae-flask-base -Entry file: gae-flask-base/src/main.py -Scanned: 2016-10-25 23:19:44.272487 -No vulnerabilities found. - - -ddrsmile/flask-taskr-with-blueprint -https://github.com/ddrsmile/flask-taskr-with-blueprint -Entry file: flask-taskr-with-blueprint/project/__init__.py -Scanned: 2016-10-25 23:19:45.877655 -No vulnerabilities found. - - -austinbrovick/flask-book_review_website -https://github.com/austinbrovick/flask-book_review_website -Entry file: flask-book_review_website/app/models/User.py -Scanned: 2016-10-25 23:19:47.327127 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -oscarvazquez/flask_mysql_migrations -https://github.com/oscarvazquez/flask_mysql_migrations -Entry file: None -Scanned: 2016-10-25 23:19:50.873158 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bethesdamd/python_flask_pharma -https://github.com/bethesdamd/python_flask_pharma -Entry file: python_flask_pharma/app.py -Scanned: 2016-10-25 23:19:52.853090 -No vulnerabilities found. - - -billdwalters/Flask -https://github.com/billdwalters/Flask -Entry file: None -Scanned: 2016-10-25 23:19:54.884694 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: None -Scanned: 2016-10-25 23:19:55.396725 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ccapudev/flask -https://github.com/ccapudev/flask -Entry file: None -Scanned: 2016-10-25 23:19:58.458974 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hezx/flask -https://github.com/hezx/flask -Entry file: None -Scanned: 2016-10-25 23:19:59.993110 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -its-dirg/Flask-pyoidc -https://github.com/its-dirg/Flask-pyoidc -Entry file: Flask-pyoidc/tests/test_flask_pyoidc.py -Scanned: 2016-10-25 23:20:03.080923 -No vulnerabilities found. - - -NJIT-SIG-WEBDEV/flask-intro -https://github.com/NJIT-SIG-WEBDEV/flask-intro -Entry file: flask-intro/Session1/app.py -Scanned: 2016-10-25 23:20:04.526181 -No vulnerabilities found. - - -KDmytro/flasktaskr -https://github.com/KDmytro/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:20:05.105708 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dreamtiger2016/flaskr -https://github.com/dreamtiger2016/flaskr -Entry file: None -Scanned: 2016-10-25 23:20:12.672105 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dreamtiger2016/flaskr. - -karanj112294/flasktutorial -https://github.com/karanj112294/flasktutorial -Entry file: None -Scanned: 2016-10-25 23:20:14.192597 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/karanj112294/flasktutorial. - -chadelder/flasktaskr -https://github.com/chadelder/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:20:15.704239 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jocelynaladin/flaskworkspace -https://github.com/jocelynaladin/flaskworkspace -Entry file: flaskworkspace/__init__.py -Scanned: 2016-10-25 23:20:21.123720 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -davetromp/flasksqlapi -https://github.com/davetromp/flasksqlapi -Entry file: flasksqlapi/runapi.py -Scanned: 2016-10-25 23:20:22.697295 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -xu00wei/flasky -https://github.com/xu00wei/flasky -Entry file: None -Scanned: 2016-10-25 23:20:23.210569 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: None -Scanned: 2016-10-25 23:20:23.724980 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zzclynn/flaskr. - -psykos/flaskloginskeleton -https://github.com/psykos/flaskloginskeleton -Entry file: flaskloginskeleton/app/__init__.py -Scanned: 2016-10-25 23:20:25.079028 -No vulnerabilities found. - - -AndrewGoldstein/flaskapp -https://github.com/AndrewGoldstein/flaskapp -Entry file: None -Scanned: 2016-10-25 23:20:25.590589 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AndrewGoldstein/flaskapp. - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-25 23:20:42.353657 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -nescode/punchstarter -https://github.com/nescode/punchstarter -Entry file: punchstarter/punchstarter/__init__.py -Scanned: 2016-10-25 23:20:43.789924 -Vulnerability 1: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: punchstarter/punchstarter/__init__.py - > User input at line 31, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 32: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: punchstarter/punchstarter/__init__.py - > User input at line 36, trigger word "files[": - cover_photo = request.files['cover_photo'] -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 37: uploaded_image = cloudinary.uploader.upload(cover_photo,crop='limit', width=680, height=550) - File: punchstarter/punchstarter/__init__.py - > Line 43: image_filename = uploaded_image['public_id'] - File: punchstarter/punchstarter/__init__.py - > Line 45: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 6: -File: punchstarter/punchstarter/__init__.py - > User input at line 45, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), image_filename=image_filename, time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: punchstarter/punchstarter/__init__.py - > Line 27: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: punchstarter/punchstarter/__init__.py - > reaches line 60, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 7: -File: punchstarter/punchstarter/__init__.py - > User input at line 64, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 8: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 77, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 9: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 10: -File: punchstarter/punchstarter/__init__.py - > User input at line 72, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: punchstarter/punchstarter/__init__.py - > reaches line 93, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 11: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 98, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 12: -File: punchstarter/punchstarter/__init__.py - > User input at line 97, trigger word "get(": - query = request.args.get('q') or '' -File: punchstarter/punchstarter/__init__.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query, projects=projects, project_count=project_count) - - - -edwardszczepanski/FlaskApplication -https://github.com/edwardszczepanski/FlaskApplication -Entry file: FlaskApplication/app.py -Scanned: 2016-10-25 23:20:47.208035 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskApplication/venv/lib/python2.7/sre_compile.py - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-25 23:20:49.179464 -Vulnerability 1: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskyDeb/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 55: posts = pagination.items - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskyDeb/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 45: show_followed = False - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskyDeb/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 67: posts = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flaskyDeb/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskyDeb/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 134: comments = pagination.items - File: flaskyDeb/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskyDeb/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flaskyDeb/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flaskyDeb/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskyDeb/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 246: comments = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -chrismontone/flasktaskr2 -https://github.com/chrismontone/flasktaskr2 -Entry file: flasktaskr2/project/__init__.py -Scanned: 2016-10-25 23:20:50.839800 -No vulnerabilities found. - - -jgabrielfreitas/FlaskFirebase -https://github.com/jgabrielfreitas/FlaskFirebase -Entry file: FlaskFirebase/runner.py -Scanned: 2016-10-25 23:20:52.142579 -No vulnerabilities found. - - -scarabcoder/FlaskSite -https://github.com/scarabcoder/FlaskSite -Entry file: FlaskSite/app/__init__.py -Scanned: 2016-10-25 23:20:53.770298 -No vulnerabilities found. - - -musicalfish/FlaskApp -https://github.com/musicalfish/FlaskApp -Entry file: FlaskApp/FlaskApp/__init__.py -Scanned: 2016-10-25 23:20:55.091360 -No vulnerabilities found. - - -oscarmeanwell/FlaskMusic -https://github.com/oscarmeanwell/FlaskMusic -Entry file: FlaskMusic/app/routesun.py -Scanned: 2016-10-25 23:20:57.879253 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -TwilioDevEd/eta-notifications-flask -https://github.com/TwilioDevEd/eta-notifications-flask -Entry file: eta-notifications-flask/eta_notifications_flask/__init__.py -Scanned: 2016-10-25 23:21:00.992912 -Vulnerability 1: -File: eta-notifications-flask/eta_notifications_flask/views.py - > User input at line 29, trigger word "get(": - order = Order.query.get(order_id) -File: eta-notifications-flask/eta_notifications_flask/views.py - > reaches line 31, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',order=order) - -Vulnerability 2: -File: eta-notifications-flask/eta_notifications_flask/views.py - > User input at line 63, trigger word "get(": - order = Order.query.get(order_id) -File: eta-notifications-flask/eta_notifications_flask/views.py - > reaches line 67, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',order=order) - - - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-25 23:21:02.668942 -No vulnerabilities found. - - -QsBBQ/flask_test -https://github.com/QsBBQ/flask_test -Entry file: flask_test/flask_test.py -Scanned: 2016-10-25 23:21:04.024232 -Vulnerability 1: -File: flask_test/flask_test.py - > User input at line 18, trigger word "get(": - age = ages.get(user) -File: flask_test/flask_test.py - > reaches line 19, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',user=user, age=age) - - - -pedrocarvalhodev/flask-intro -https://github.com/pedrocarvalhodev/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-25 23:21:05.578688 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lawrencexia/flask_notecards -https://github.com/lawrencexia/flask_notecards -Entry file: flask_notecards/app/__init__.py -Scanned: 2016-10-25 23:21:06.931580 -No vulnerabilities found. - - -ameya0909/Flask-Blog -https://github.com/ameya0909/Flask-Blog -Entry file: Flask-Blog/__init__.py -Scanned: 2016-10-25 23:21:08.234087 -No vulnerabilities found. - - -chrismontone/flask-blog -https://github.com/chrismontone/flask-blog -Entry file: None -Scanned: 2016-10-25 23:21:08.762129 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ziggear/wechat-flask -https://github.com/ziggear/wechat-flask -Entry file: wechat-flask/src/myapp.py -Scanned: 2016-10-25 23:21:10.197152 -No vulnerabilities found. - - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-25 23:21:11.614704 -Vulnerability 1: -File: flask-usages/application/controllers/todo.py - > User input at line 12, trigger word "get(": - todo_id = request.args.get('todo_id') -Reassigned in: - File: flask-usages/application/controllers/todo.py - > Line 17: ret_MAYBE_FUNCTION_NAME = jsonify() -File: flask-usages/application/controllers/todo.py - > reaches line 15, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_idtodo.content) - -Vulnerability 2: -File: flask-usages/application/controllers/todo.py - > User input at line 21, trigger word "get(": - todo = Todo(content=data.get('content')) -File: flask-usages/application/controllers/todo.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_id=todo.id, content=todo.content) - - - -drmalex07/flask-helloworld -https://github.com/drmalex07/flask-helloworld -Entry file: flask-helloworld/helloworld/app.py -Scanned: 2016-10-25 23:21:13.187911 -No vulnerabilities found. - - -Oracleli/flask-try -https://github.com/Oracleli/flask-try -Entry file: None -Scanned: 2016-10-25 23:21:15.953471 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Oracleli/flask-try. - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/example.py -Scanned: 2016-10-25 23:21:17.253589 -No vulnerabilities found. - - -marcosomma/first_flask -https://github.com/marcosomma/first_flask -Entry file: first_flask/app/__init__.py -Scanned: 2016-10-25 23:21:19.689501 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/server.py -Scanned: 2016-10-25 23:21:20.996461 -No vulnerabilities found. - - -meyersj/bootstrap-flask -https://github.com/meyersj/bootstrap-flask -Entry file: bootstrap-flask/app/__init__.py -Scanned: 2016-10-25 23:21:23.286920 -No vulnerabilities found. - - -sharma-mohit/flask-mongo -https://github.com/sharma-mohit/flask-mongo -Entry file: flask-mongo/mainapp/__init__.py -Scanned: 2016-10-25 23:21:25.252249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jarogers095/flask-blog -https://github.com/jarogers095/flask-blog -Entry file: None -Scanned: 2016-10-25 23:21:25.799380 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Jelly-Yu/learningFlask -https://github.com/Jelly-Yu/learningFlask -Entry file: learningFlask/app/__init__.py -Scanned: 2016-10-25 23:21:27.207361 -No vulnerabilities found. - - -doobeh/flask-lister -https://github.com/doobeh/flask-lister -Entry file: flask-lister/app/core.py -Scanned: 2016-10-25 23:21:36.620643 -No vulnerabilities found. - - -ratherbsurfing/flask-cms -https://github.com/ratherbsurfing/flask-cms -Entry file: None -Scanned: 2016-10-25 23:21:49.359354 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -philtrep/Flask-Skeleton -https://github.com/philtrep/Flask-Skeleton -Entry file: None -Scanned: 2016-10-25 23:21:51.211074 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/philtrep/Flask-Skeleton. - -cynrick/kickstarter-flask -https://github.com/cynrick/kickstarter-flask -Entry file: kickstarter-flask/kickstarter/__init__.py -Scanned: 2016-10-25 23:21:52.629108 -Vulnerability 1: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 29, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 30: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: kickstarter-flask/kickstarter/__init__.py - > Line 32: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 2: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 32, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 3: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 29, trigger word "get(": - time_end = request.form.get('funding_end_date') -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 30: time_end = datetime.datetime.strptime(time_end, '%Y-%m-%d') - File: kickstarter-flask/kickstarter/__init__.py - > Line 32: new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 4: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 32, trigger word "get(": - new_project = Project(member_id=1, name=request.form.get('project_name'), short_description=request.form.get('short_description'), long_description=request.form.get('long_description'), goal_amount=request.form.get('funding_goal'), time_start=now, time_end=time_end, time_created=now) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 26: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 46, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=new_project.id)) - -Vulnerability 5: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 50, trigger word "get(": - project = db.session.query(Project).get(project_id) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project_detail.html',project=project) - -Vulnerability 6: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 65, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('pledge.html',project=project) - -Vulnerability 7: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 79, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 8: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 59, trigger word "get(": - project = db.session.query(Project).get(project_id) -Reassigned in: - File: kickstarter-flask/kickstarter/__init__.py - > Line 69: new_pledge = Pledge(member_id=guest_pledgor.id, project_id=project.id, amount=request.form.get('amount'), time_created=datetime.datetime.now()) -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 79, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('project_detail',project_id=project.id)) - -Vulnerability 9: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 83, trigger word "get(": - query = request.args.get('q') or '' -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 84, trigger word "filter(": - projects = db.session.query(Project).filter(Project.name.ilike('%' + query + '%') | Project.short_description.ilike('%' + query + '%') | Project.long_description.ilike('%' + query + '%')).all() - -Vulnerability 10: -File: kickstarter-flask/kickstarter/__init__.py - > User input at line 83, trigger word "get(": - query = request.args.get('q') or '' -File: kickstarter-flask/kickstarter/__init__.py - > reaches line 92, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',query_text=query, projects=projects, project_count=project_count) - - - -kessiacastro/flask-blog -https://github.com/kessiacastro/flask-blog -Entry file: None -Scanned: 2016-10-25 23:21:53.167171 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rjturek/flask-etf -https://github.com/rjturek/flask-etf -Entry file: flask-etf/flask_etf_main.py -Scanned: 2016-10-25 23:21:54.448142 -No vulnerabilities found. - - -worthlesspenny7/tumblelogFlask -https://github.com/worthlesspenny7/tumblelogFlask -Entry file: tumblelogFlask/__init__.py -Scanned: 2016-10-25 23:21:55.756823 -No vulnerabilities found. - - -axontrust/alexa-flask -https://github.com/axontrust/alexa-flask -Entry file: alexa-flask/app/__init__.py -Scanned: 2016-10-25 23:21:57.056707 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -asjedh/flask_tutorial -https://github.com/asjedh/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:21:57.625126 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/asjedh/flask_tutorial. - -robb216/MyFlask -https://github.com/robb216/MyFlask -Entry file: MyFlask/MyFlask.py -Scanned: 2016-10-25 23:22:00.072074 -No vulnerabilities found. - - -rogerpence/flask-blueprint -https://github.com/rogerpence/flask-blueprint -Entry file: flask-blueprint/application/__init__.py -Scanned: 2016-10-25 23:22:02.794734 -No vulnerabilities found. - - -androidzhibinw/flask-bootstrap -https://github.com/androidzhibinw/flask-bootstrap -Entry file: flask-bootstrap/app/__init__.py -Scanned: 2016-10-25 23:22:04.489653 -No vulnerabilities found. - - -ytanno/PlotFlask -https://github.com/ytanno/PlotFlask -Entry file: PlotFlask/FlaskTest1/FlaskTest1/__init__.py -Scanned: 2016-10-25 23:22:11.161986 -No vulnerabilities found. - - -psykos/psilex-flask -https://github.com/psykos/psilex-flask -Entry file: psilex-flask/app/__init__.py -Scanned: 2016-10-25 23:22:12.600346 -No vulnerabilities found. - - -Hank02/flask_example -https://github.com/Hank02/flask_example -Entry file: flask_example/hello_world.py -Scanned: 2016-10-25 23:22:16.390902 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -VerdigrisReader/flask-workshop -https://github.com/VerdigrisReader/flask-workshop -Entry file: flask-workshop/app/__init__.py -Scanned: 2016-10-25 23:22:18.077424 -No vulnerabilities found. - - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: flask-skeleton/application/__init__.py -Scanned: 2016-10-25 23:22:19.514526 -No vulnerabilities found. - - -rodcox89/FlaskDynamoStarterKit -https://github.com/rodcox89/FlaskDynamoStarterKit -Entry file: FlaskDynamoStarterKit/main.py -Scanned: 2016-10-25 23:22:24.564538 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskDynamoStarterKit/venv/lib/python2.7/sre_compile.py - -pulysak/FlaskServer-Tests -https://github.com/pulysak/FlaskServer-Tests -Entry file: FlaskServer-Tests/server.py -Scanned: 2016-10-25 23:22:28.859536 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskServer-Tests/flask_env/lib/python2.7/sre_compile.py - -rbtoner/FlaskWebApp -https://github.com/rbtoner/FlaskWebApp -Entry file: FlaskWebApp/FanGuardFlask/__init__.py -Scanned: 2016-10-25 23:22:30.997707 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -worthlesspenny7/FlaskYoutubeTutorial -https://github.com/worthlesspenny7/FlaskYoutubeTutorial -Entry file: FlaskYoutubeTutorial/application.py -Scanned: 2016-10-25 23:22:34.305130 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskYoutubeTutorial/lib/python2.7/sre_compile.py - -MGago/flaskBasicApp1 -https://github.com/MGago/flaskBasicApp1 -Entry file: flaskBasicApp1/app/__init__.py -Scanned: 2016-10-25 23:22:42.819224 -No vulnerabilities found. - - -skpdvidby0/Flask-Python-App -https://github.com/skpdvidby0/Flask-Python-App -Entry file: Flask-Python-App/flaskapp.py -Scanned: 2016-10-25 23:22:46.054431 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Python-App/virtenv/lib/python2.7/sre_compile.py - -sindhus/flask-mega-tutorial -https://github.com/sindhus/flask-mega-tutorial -Entry file: None -Scanned: 2016-10-25 23:22:48.342250 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sindhus/flask-mega-tutorial. - -mbreisch/real-python-flask-bdd -https://github.com/mbreisch/real-python-flask-bdd -Entry file: real-python-flask-bdd/flaskr.py -Scanned: 2016-10-25 23:22:50.172043 -No vulnerabilities found. - - -MuriloFerraz/intel_edison_flask -https://github.com/MuriloFerraz/intel_edison_flask -Entry file: intel_edison_flask/flask_example/contole.py -Scanned: 2016-10-25 23:22:51.570868 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -PiyushGoyal443/studentLogin_API_Flask -https://github.com/PiyushGoyal443/studentLogin_API_Flask -Entry file: studentLogin_API_Flask/server.py -Scanned: 2016-10-25 23:22:53.480265 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -GertjanvanhetHof/helloworld_with_flask -https://github.com/GertjanvanhetHof/helloworld_with_flask -Entry file: helloworld_with_flask/mypython.py -Scanned: 2016-10-25 23:22:54.806519 -No vulnerabilities found. - - -taromurao/flask-python-logger-experiment -https://github.com/taromurao/flask-python-logger-experiment -Entry file: flask-python-logger-experiment/app.py -Scanned: 2016-10-25 23:22:56.105054 -No vulnerabilities found. - - -mikicaivosevic/flask-simple-todo -https://github.com/mikicaivosevic/flask-simple-todo -Entry file: flask-simple-todo/app.py -Scanned: 2016-10-25 23:22:57.342807 -No vulnerabilities found. - - -KDmytro/flask-hello-world -https://github.com/KDmytro/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:22:57.881971 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bepetersn/flask-permissions-ex -https://github.com/bepetersn/flask-permissions-ex -Entry file: flask-permissions-ex/ex/__init__.py -Scanned: 2016-10-25 23:22:59.844703 -No vulnerabilities found. - - -EricSchles/db_migrations_flask -https://github.com/EricSchles/db_migrations_flask -Entry file: db_migrations_flask/app/__init__.py -Scanned: 2016-10-25 23:23:02.243067 -No vulnerabilities found. - - -yyssjj33/flask-menu-application -https://github.com/yyssjj33/flask-menu-application -Entry file: flask-menu-application/project.py -Scanned: 2016-10-25 23:23:03.708857 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -androidzhibinw/flask-app-builder-example -https://github.com/androidzhibinw/flask-app-builder-example -Entry file: flask-app-builder-example/myapp/app/__init__.py -Scanned: 2016-10-25 23:23:05.597806 -No vulnerabilities found. - - -jmcevoy1984/Flask-Restful-Tutorial -https://github.com/jmcevoy1984/Flask-Restful-Tutorial -Entry file: Flask-Restful-Tutorial/app.py -Scanned: 2016-10-25 23:23:06.924535 -No vulnerabilities found. - - -kessiacastro/flask-hello-world -https://github.com/kessiacastro/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:23:07.529510 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tim1978/flask-hello-world -https://github.com/tim1978/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:23:12.067859 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jigen7/python_flask_tutorial -https://github.com/jigen7/python_flask_tutorial -Entry file: python_flask_tutorial/app/__init__.py -Scanned: 2016-10-25 23:23:20.022458 -No vulnerabilities found. - - -danieltl/python_flask_final -https://github.com/danieltl/python_flask_final -Entry file: python_flask_final/application.py -Scanned: 2016-10-25 23:23:21.462480 -No vulnerabilities found. - - -devizier/flask-hello-world -https://github.com/devizier/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:23:22.003281 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tomov/flask-location-survey-psych -https://github.com/tomov/flask-location-survey-psych -Entry file: flask-location-survey-psych/app/__init__.py -Scanned: 2016-10-25 23:23:23.418045 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rakou1986/flask-mvt-min -https://github.com/rakou1986/flask-mvt-min -Entry file: flask-mvt-min/webapp/app.py -Scanned: 2016-10-25 23:23:24.698771 -No vulnerabilities found. - - -mbreisch/real-python-reverse-flask -https://github.com/mbreisch/real-python-reverse-flask -Entry file: None -Scanned: 2016-10-25 23:23:26.013491 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mbreisch/real-python-reverse-flask. - -jeet4320/PythonFlask-IBMBluemix -https://github.com/jeet4320/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-25 23:23:33.120885 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -junniepat/Python-flask-app -https://github.com/junniepat/Python-flask-app -Entry file: Python-flask-app/app.py -Scanned: 2016-10-25 23:23:34.501674 -No vulnerabilities found. - - -Kwpolska/flask-demo-app -https://github.com/Kwpolska/flask-demo-app -Entry file: flask-demo-app/flaskapp.py -Scanned: 2016-10-25 23:23:35.799200 -No vulnerabilities found. - - -tiangolo/uwsgi-nginx-flask-docker -https://github.com/tiangolo/uwsgi-nginx-flask-docker -Entry file: uwsgi-nginx-flask-docker/example-flask-index-upload/app/main.py -Scanned: 2016-10-25 23:23:48.157201 -No vulnerabilities found. - - -chrisvasey/flask -https://github.com/chrisvasey/flask -Entry file: None -Scanned: 2016-10-25 23:23:49.172727 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bobdorff/flask -https://github.com/bobdorff/flask -Entry file: None -Scanned: 2016-10-25 23:23:49.694584 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rlsharpton/flask -https://github.com/rlsharpton/flask -Entry file: None -Scanned: 2016-10-25 23:23:51.235023 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wildjan/Flask -https://github.com/wildjan/Flask -Entry file: None -Scanned: 2016-10-25 23:23:52.830044 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -smltc/Flask -https://github.com/smltc/Flask -Entry file: None -Scanned: 2016-10-25 23:23:54.350825 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mikelkl/flasky -https://github.com/mikelkl/flasky -Entry file: None -Scanned: 2016-10-25 23:23:55.862088 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -besimaltnok/Flask-Examples -https://github.com/besimaltnok/Flask-Examples -Entry file: Flask-Examples/fileupload.py -Scanned: 2016-10-25 23:23:58.782713 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -luo-jialin/flask- -https://github.com/luo-jialin/flask- -Entry file: flask-/flaskr.py -Scanned: 2016-10-25 23:24:00.198973 -No vulnerabilities found. - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-25 23:24:02.405295 -No vulnerabilities found. - - -ubbochum/hb2_flask -https://github.com/ubbochum/hb2_flask -Entry file: hb2_flask/hb2_flask.py -Scanned: 2016-10-25 23:24:04.758101 -Vulnerability 1: -File: hb2_flask/hb2_flask.py - > User input at line 362, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 369: index_solr = Solr(start=page - 1 * 10, query=current_user.email, facet='false') - File: hb2_flask/hb2_flask.py - > Line 372: records = index_solr.results - File: hb2_flask/hb2_flask.py - > Line 376: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 379: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 361: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 363: records = [] - File: hb2_flask/hb2_flask.py - > Line 365: index_solr = '' - File: hb2_flask/hb2_flask.py - > Line 366: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 380, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',header=lazy_gettext('Home'), site=theme(request.access_route), numFound=num_found, records=records, pagination=pagination, offset=mystart - 1) - -Vulnerability 2: -File: hb2_flask/hb2_flask.py - > User input at line 416, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 417: duplicates_solr = Solr(start=page - 1 * 10, fquery=['dedupid:[* TO *]'], group='true', group_field='dedupid', group_limit=100, facet='false') - File: hb2_flask/hb2_flask.py - > Line 424: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('duplicate groups'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 427: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 415: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 423: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 428, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('duplicates.html',groups=duplicates_solr.results, pagination=pagination, header=lazy_gettext('Duplicates'), site=theme(request.access_route), offset=mystart - 1) - -Vulnerability 3: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 446, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 4: -File: hb2_flask/hb2_flask.py - > User input at line 433, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 438: persons_solr = Solr(query=query, start=page - 1 * 10, core='person', json_facet='affiliation''type''field''term''affiliation', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 451: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Persons')) - File: hb2_flask/hb2_flask.py - > Line 454: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 434: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 455, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('persons.html',header=lazy_gettext('Persons'), site=theme(request.access_route), facet_data=persons_solr.facets, results=persons_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), del_redirect='persons') - -Vulnerability 5: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 6: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 7: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 8: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 9: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 10: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 490, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('show_record',record_id=search_solr.results[0].get('id'), pubtype=search_solr.results[0].get('pubtype'))) - -Vulnerability 11: -File: hb2_flask/hb2_flask.py - > User input at line 472, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 495: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 496: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 471: pagination = '' - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 12: -File: hb2_flask/hb2_flask.py - > User input at line 474, trigger word "get(": - query = request.args.get('q', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 477: query = '*:*' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 13: -File: hb2_flask/hb2_flask.py - > User input at line 480, trigger word "get(": - sorting = request.args.get('sort', '') -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 482: sorting = '' - File: hb2_flask/hb2_flask.py - > Line 484: sorting = 'fdate desc' - File: hb2_flask/hb2_flask.py - > Line 486: search_solr = Solr(start=page - 1 * 10, query=query, fquery=filterquery, sort=sorting, json_facet=secrets.SOLR_FACETS) - File: hb2_flask/hb2_flask.py - > Line 493: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 499, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('resultlist.html',records=search_solr.results, pagination=pagination, facet_data=search_solr.facets, header=lazy_gettext('Resultlist'), target='search', site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery) - -Vulnerability 14: -File: hb2_flask/hb2_flask.py - > User input at line 742, trigger word "get(": - bio = requests.get('https://pub.orcid.org/%s/orcid-bio/' % orcid_id,headers='Accept''application/json').json() -File: hb2_flask/hb2_flask.py - > reaches line 744, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('name''%s, %s' % (bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('family-name').get('value'), bio.get('orcid-profile').get('orcid-bio').get('personal-details').get('given-names').get('value'))) - -Vulnerability 15: -File: hb2_flask/hb2_flask.py - > User input at line 749, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 787: dashboard_solr = Solr(start=page - 1 * 10, query=query, sort='recordCreationDate asc', json_facet=DASHBOARD_FACETS, fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 795: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 798: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 750: mystart = 0 - File: hb2_flask/hb2_flask.py - > Line 791: pagination = '' -File: hb2_flask/hb2_flask.py - > reaches line 801, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('dashboard.html',records=dashboard_solr.results, facet_data=dashboard_solr.facets, header=lazy_gettext('Dashboard'), site=theme(request.access_route), offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now(), target='dashboard', del_redirect='dashboard') - -Vulnerability 16: -File: hb2_flask/hb2_flask.py - > User input at line 826, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 827: locked_solr = Solr(core='hb2', fquery=['locked:true', 'recordChangeDate:[* TO NOW-1HOUR]'], sort='recordChangeDate asc', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 831: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('records'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 834: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 824: ret_MAYBE_FUNCTION_NAME = redirect(url_for('homepage')) -File: hb2_flask/hb2_flask.py - > reaches line 841, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('superadmin.html',locked_records=locked_solr.results, header=lazy_gettext('Superadmin Board'), import_records=solr_dumps.results, offset=mystart - 1, pagination=pagination, del_redirect='superadmin', form=form, site=theme(request.access_route)) - -Vulnerability 17: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 925, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, now=datetime.datetime.now()) - -Vulnerability 18: -File: hb2_flask/hb2_flask.py - > User input at line 912, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 917: orgas_solr = Solr(query=query, start=page - 1 * 10, core='organisation', json_facet='destatis_id''type''field''term''destatis_id', fquery=filterquery) - File: hb2_flask/hb2_flask.py - > Line 929: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('titles'), search_msg=lazy_gettext('Showing {start} to {end} of {found} Organisational Units')) - File: hb2_flask/hb2_flask.py - > Line 932: mystart = 1 + pagination.page - 1 * pagination.per_page - File: hb2_flask/hb2_flask.py - > Line 913: mystart = 0 -File: hb2_flask/hb2_flask.py - > reaches line 933, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('orgas.html',header=lazy_gettext('Organisations'), site=theme(request.access_route), facet_data=orgas_solr.facets, results=orgas_solr.results, offset=mystart - 1, query=query, filterquery=filterquery, pagination=pagination, now=datetime.datetime.now()) - -Vulnerability 19: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1110, trigger word "replace(": - solr_data.setdefault('recordCreationDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 20: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1112, trigger word "replace(": - solr_data.setdefault('recordChangeDate', form.data.get(field).strip().replace(' ', 'T') + 'Z') - -Vulnerability 21: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), action='create', pubtype=pubtype) - -Vulnerability 22: -File: hb2_flask/hb2_flask.py - > User input at line 1095, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1103: wtf = json.dumps(form.data) - File: hb2_flask/hb2_flask.py - > Line 1144: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1125: ret_MAYBE_FUNCTION_NAME = jsonify('status'200) -File: hb2_flask/hb2_flask.py - > reaches line 1160, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('New Record'), site=theme(request.access_route), pubtype=pubtype, action='create', record_id=form.id.data) - -Vulnerability 23: -File: hb2_flask/hb2_flask.py - > User input at line 1167, trigger word "get(": - is_part_of = show_record_solr.results[0].get('is_part_of') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 24: -File: hb2_flask/hb2_flask.py - > User input at line 1168, trigger word "get(": - has_part = show_record_solr.results[0].get('has_part') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 25: -File: hb2_flask/hb2_flask.py - > User input at line 1169, trigger word "get(": - other_version = show_record_solr.results[0].get('other_version') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 26: -File: hb2_flask/hb2_flask.py - > User input at line 1171, trigger word "get(": - thedata = json.loads(show_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1173: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 27: -File: hb2_flask/hb2_flask.py - > User input at line 1172, trigger word "get(": - locked = show_record_solr.results[0].get('locked') -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 28: -File: hb2_flask/hb2_flask.py - > User input at line 1173, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1175, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('title'), site=theme(request.access_route), action='retrieve', record_id=record_id, del_redirect='dashboard', pubtype=pubtype, role_map=ROLE_MAP, lang_map=LANGUAGE_MAP, pubtype_map=PUBTYPE2TEXT, subtype_map=SUBTYPE2TEXT, locked=locked, is_part_of=is_part_of, has_part=has_part, other_version=other_version) - -Vulnerability 29: -File: hb2_flask/hb2_flask.py - > User input at line 1189, trigger word "get(": - thedata = json.loads(show_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1190: form = PersonAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1192, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('name'), site=theme(request.access_route), action='retrieve', record_id=person_id, pubtype='person', del_redirect='persons') - -Vulnerability 30: -File: hb2_flask/hb2_flask.py - > User input at line 1200, trigger word "get(": - thedata = json.loads(show_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1201: form = OrgaAdminForm.from_json(thedata) -File: hb2_flask/hb2_flask.py - > reaches line 1203, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('record.html',record=form, header=form.data.get('pref_label'), site=theme(request.access_route), action='retrieve', record_id=orga_id, pubtype='organisation', del_redirect='organisations') - -Vulnerability 31: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1223, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 32: -File: hb2_flask/hb2_flask.py - > User input at line 1213, trigger word "get(": - thedata = json.loads(edit_orga_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1218: form = OrgaAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1227: ret_MAYBE_FUNCTION_NAME = redirect(url_for('orgas')) - File: hb2_flask/hb2_flask.py - > Line 1216: form = OrgaAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1231, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('linear_form.html',form=form, header=lazy_gettext('Edit: %(orga)s',orga=form.data.get('pref_label')), site=theme(request.access_route), action='update', pubtype='organisation') - -Vulnerability 33: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1253, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update') - -Vulnerability 34: -File: hb2_flask/hb2_flask.py - > User input at line 1242, trigger word "get(": - thedata = json.loads(edit_person_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1247: form = PersonAdminForm.from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1257: ret_MAYBE_FUNCTION_NAME = redirect(url_for('persons')) - File: hb2_flask/hb2_flask.py - > Line 1245: form = PersonAdminForm() -File: hb2_flask/hb2_flask.py - > reaches line 1261, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(person)s',person=form.data.get('name')), site=theme(request.access_route), action='update', pubtype='person') - -Vulnerability 35: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 36: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 37: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1299, trigger word "flash(": - flash(Markup(lazy_gettext('

The following data are incompatible with this publication type

')) + _diff_struct(thedata, form.data), 'error') - -Vulnerability 38: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 39: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 40: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1310, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype) - -Vulnerability 41: -File: hb2_flask/hb2_flask.py - > User input at line 1286, trigger word "get(": - thedata = json.loads(edit_record_solr.results[0].get('wtf_json')) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 42: -File: hb2_flask/hb2_flask.py - > User input at line 1289, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype)() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1291: form = PUBTYPE2FORM.get(pubtype).from_json(thedata) - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 43: -File: hb2_flask/hb2_flask.py - > User input at line 1291, trigger word "get(": - form = PUBTYPE2FORM.get(pubtype).from_json(thedata) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1289: form = PUBTYPE2FORM.get(pubtype)() - File: hb2_flask/hb2_flask.py - > Line 1316: ret_MAYBE_FUNCTION_NAME = redirect(url_for('dashboard')) -File: hb2_flask/hb2_flask.py - > reaches line 1321, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('tabbed_form.html',form=form, header=lazy_gettext('Edit: %(title)s',title=form.data.get('title')), site=theme(request.access_route), action='update', pubtype=pubtype, record_id=record_id) - -Vulnerability 44: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1493, trigger word "url_for(": - target = url_for(endpoint,values) - -Vulnerability 45: -File: hb2_flask/hb2_flask.py - > User input at line 1491, trigger word "form[": - target = request.form['next'] -File: hb2_flask/hb2_flask.py - > reaches line 1494, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(target) - -Vulnerability 46: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 47: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 48: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 49: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1532, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 50: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 51: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 52: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 53: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1565, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('homepage')) - -Vulnerability 54: -File: hb2_flask/hb2_flask.py - > User input at line 1505, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1571: next = get_redirect_target() -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 55: -File: hb2_flask/hb2_flask.py - > User input at line 1571, trigger word "get(": - next = get_redirect_target() -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1505: next = get_redirect_target() - File: hb2_flask/hb2_flask.py - > Line 1535: ret_MAYBE_FUNCTION_NAME = redirect('login') - File: hb2_flask/hb2_flask.py - > Line 1568: ret_MAYBE_FUNCTION_NAME = redirect('login') -File: hb2_flask/hb2_flask.py - > reaches line 1573, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form, header='Sign In', next=next, site=theme(request.access_route)) - -Vulnerability 56: -File: hb2_flask/hb2_flask.py - > User input at line 1627, trigger word "get(": - page = int(request.args.get('page', 1)) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1628: solr_dumps = Solr(core='hb2_users', query='id:*.json', facet='false', start=page - 1 * 10) - File: hb2_flask/hb2_flask.py - > Line 1631: pagination = Pagination(page=page, total=num_found, found=num_found, bs_version=3, search=True, record_name=lazy_gettext('dumps'), search_msg=lazy_gettext('Showing {start} to {end} of {found} {record_name}')) - File: hb2_flask/hb2_flask.py - > Line 1634: mystart = 1 + pagination.page - 1 * pagination.per_page -File: hb2_flask/hb2_flask.py - > reaches line 1636, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('solr_dumps.html',records=solr_dumps.results, offset=mystart - 1, pagination=pagination, header=lazy_gettext('Import Dump'), del_redirect='import/solr_dumps', form=form) - -Vulnerability 57: -File: hb2_flask/hb2_flask.py - > User input at line 1652, trigger word "get(": - thedata = json.loads(import_solr.results[0].get('dump')[0]) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1656: thedata = json.loads(form.file.data.stream.read()) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 58: -File: hb2_flask/hb2_flask.py - > User input at line 1656, trigger word ".data": - thedata = json.loads(form.file.data.stream.read()) -Reassigned in: - File: hb2_flask/hb2_flask.py - > Line 1645: thedata = '' - File: hb2_flask/hb2_flask.py - > Line 1652: thedata = json.loads(import_solr.results[0].get('dump')[0]) -File: hb2_flask/hb2_flask.py - > reaches line 1665, trigger word "flash(": - flash('%s records imported!' % len(thedata), 'success') - -Vulnerability 59: -File: hb2_flask/processors/mods_parser.py - > User input at line 123, trigger word "get(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') -Reassigned in: - File: hb2_flask/processors/mods_parser.py - > Line 120: pnd = '' -File: hb2_flask/processors/mods_parser.py - > reaches line 123, trigger word "replace(": - pnd = name.attrib.get('valueURI').replace('http://d-nb.info/gnd/', '') - - - -Vertabelo/flask-oauth-demo-app -https://github.com/Vertabelo/flask-oauth-demo-app -Entry file: flask-oauth-demo-app/models.py -Scanned: 2016-10-25 23:24:07.407556 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -waharnum/inlibraries.com -https://github.com/waharnum/inlibraries.com -Entry file: None -Scanned: 2016-10-25 23:24:07.951437 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-25 23:24:09.369681 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 41, trigger word "form[": - url_to_parse = request.form['input-url'] -Reassigned in: - File: flask_shortener/app.py - > Line 42: parts = urlparse.urlparse(url_to_parse) - File: flask_shortener/app.py - > Line 47: short_id = shorten(url_to_parse) -File: flask_shortener/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',short_id=short_id) - -Vulnerability 2: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - -Vulnerability 3: -File: flask_shortener/app.py - > User input at line 60, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - -Vulnerability 4: -File: flask_shortener/app.py - > User input at line 63, trigger word "get(": - click_count = int(redis.get('click-count:' + short_id) or 0) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - - - -jarogers095/flasktaskr -https://github.com/jarogers095/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:24:10.415966 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Anddor/flaskr -https://github.com/Anddor/flaskr -Entry file: None -Scanned: 2016-10-25 23:24:14.444205 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Anddor/flaskr. - -hammygoonan/Flaskify -https://github.com/hammygoonan/Flaskify -Entry file: Flaskify/project/__init__.py -Scanned: 2016-10-25 23:24:21.990556 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -anujspatel/flaskr -https://github.com/anujspatel/flaskr -Entry file: None -Scanned: 2016-10-25 23:24:22.523946 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/anujspatel/flaskr. - -williamcaban/flaskrcloud -https://github.com/williamcaban/flaskrcloud -Entry file: flaskrcloud/flaskr.py -Scanned: 2016-10-25 23:24:23.930061 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -crazyqipython/flaskdemo -https://github.com/crazyqipython/flaskdemo -Entry file: None -Scanned: 2016-10-25 23:24:24.471372 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pythondude325/flaskr -https://github.com/pythondude325/flaskr -Entry file: None -Scanned: 2016-10-25 23:24:25.995501 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pythondude325/flaskr. - -fenske/flasky -https://github.com/fenske/flasky -Entry file: None -Scanned: 2016-10-25 23:24:30.507509 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fakegit/flasky -https://github.com/fakegit/flasky -Entry file: None -Scanned: 2016-10-25 23:24:34.019401 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zzclynn/flaskr -https://github.com/zzclynn/flaskr -Entry file: None -Scanned: 2016-10-25 23:24:45.052942 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zzclynn/flaskr. - -johnpwillman/flasktest -https://github.com/johnpwillman/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 23:24:48.351511 -No vulnerabilities found. - - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: None -Scanned: 2016-10-25 23:24:48.875448 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/scottmarinoff/Flasky. - -JamesMilnerUK/Loxo -https://github.com/JamesMilnerUK/Loxo -Entry file: Loxo/loxoapi.py -Scanned: 2016-10-25 23:24:52.845371 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhou18520786640/FlaskWeb -https://github.com/zhou18520786640/FlaskWeb -Entry file: FlaskWeb/hello.py -Scanned: 2016-10-25 23:24:56.025219 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWeb/venv/lib/python2.7/sre_compile.py - -LaRueGT/FlaskBlog -https://github.com/LaRueGT/FlaskBlog -Entry file: FlaskBlog/blog.py -Scanned: 2016-10-25 23:24:57.473596 -No vulnerabilities found. - - -ethanphunter/FlaskExperiment -https://github.com/ethanphunter/FlaskExperiment -Entry file: FlaskExperiment/main.py -Scanned: 2016-10-25 23:24:59.090318 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-25 23:25:00.395183 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -AllyW/flaskyDeb -https://github.com/AllyW/flaskyDeb -Entry file: flaskyDeb/app/__init__.py -Scanned: 2016-10-25 23:25:02.423863 -Vulnerability 1: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flaskyDeb/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flaskyDeb/app/api_1_0/posts.py - > Line 16: prev = None - File: flaskyDeb/app/api_1_0/posts.py - > Line 19: next = None -File: flaskyDeb/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 20: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 23: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flaskyDeb/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flaskyDeb/app/api_1_0/users.py - > Line 42: prev = None - File: flaskyDeb/app/api_1_0/users.py - > Line 45: next = None -File: flaskyDeb/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 15: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 18: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flaskyDeb/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flaskyDeb/app/api_1_0/comments.py - > Line 43: prev = None - File: flaskyDeb/app/api_1_0/comments.py - > Line 46: next = None -File: flaskyDeb/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flaskyDeb/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 55: posts = pagination.items - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flaskyDeb/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 45: show_followed = False - File: flaskyDeb/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flaskyDeb/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 67: posts = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flaskyDeb/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskyDeb/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 134: comments = pagination.items - File: flaskyDeb/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskyDeb/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flaskyDeb/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flaskyDeb/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskyDeb/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskyDeb/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flaskyDeb/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskyDeb/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskyDeb/app/main/views.py - > Line 246: comments = pagination.items -File: flaskyDeb/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -jmcerv/FlaskTutorial -https://github.com/jmcerv/FlaskTutorial -Entry file: FlaskTutorial/app/__init__.py -Scanned: 2016-10-25 23:25:13.012865 -No vulnerabilities found. - - -asimonia/FlaskJeopardy -https://github.com/asimonia/FlaskJeopardy -Entry file: FlaskJeopardy/app/__init__.py -Scanned: 2016-10-25 23:25:20.823693 -Vulnerability 1: -File: FlaskJeopardy/app/main/views.py - > User input at line 17, trigger word ".data": - show_number = form.show_number.data -Reassigned in: - File: FlaskJeopardy/app/main/views.py - > Line 32: questions = Questionbank.objects(show_number=show_number, current_round='Jeopardy!') - File: FlaskJeopardy/app/main/views.py - > Line 33: init_game = Game(state='playing', show_number=show_number, current_round='Jeopardy!') - File: FlaskJeopardy/app/main/views.py - > Line 12: ret_MAYBE_FUNCTION_NAME = render_template('questions/index.html',form=form) -File: FlaskJeopardy/app/main/views.py - > reaches line 54, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('questions/game_board.html',game=init_game) - - - -motleytech/flaskPlate -https://github.com/motleytech/flaskPlate -Entry file: flaskPlate/app/app.py -Scanned: 2016-10-25 23:25:22.644251 -No vulnerabilities found. - - -ciricihq/wkhtmltopdf-flask-aas -https://github.com/ciricihq/wkhtmltopdf-flask-aas -Entry file: wkhtmltopdf-flask-aas/app.py -Scanned: 2016-10-25 23:25:24.190998 -No vulnerabilities found. - - -cr8ivecodesmith/save22-flask-course-src -https://github.com/cr8ivecodesmith/save22-flask-course-src -Entry file: save22-flask-course-src/05-combination/app/app.py -Scanned: 2016-10-25 23:25:25.694284 -No vulnerabilities found. - - -johnsliao/flask-sqlite3-chartjs-toy -https://github.com/johnsliao/flask-sqlite3-chartjs-toy -Entry file: flask-sqlite3-chartjs-toy/flaskr/flaskr.py -Scanned: 2016-10-25 23:25:26.991750 -No vulnerabilities found. - - -raticate/flask-tutorial -https://github.com/raticate/flask-tutorial -Entry file: flask-tutorial/app/__init__.py -Scanned: 2016-10-25 23:25:34.230910 -No vulnerabilities found. - - -yetship/flask-usages -https://github.com/yetship/flask-usages -Entry file: flask-usages/application/__init__.py -Scanned: 2016-10-25 23:25:35.666105 -Vulnerability 1: -File: flask-usages/application/controllers/todo.py - > User input at line 12, trigger word "get(": - todo_id = request.args.get('todo_id') -Reassigned in: - File: flask-usages/application/controllers/todo.py - > Line 17: ret_MAYBE_FUNCTION_NAME = jsonify() -File: flask-usages/application/controllers/todo.py - > reaches line 15, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_idtodo.content) - -Vulnerability 2: -File: flask-usages/application/controllers/todo.py - > User input at line 21, trigger word "get(": - todo = Todo(content=data.get('content')) -File: flask-usages/application/controllers/todo.py - > reaches line 24, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(todo_id=todo.id, content=todo.content) - - - -MaximeGir/flask_skeleton -https://github.com/MaximeGir/flask_skeleton -Entry file: None -Scanned: 2016-10-25 23:25:36.992403 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MaximeGir/flask_skeleton. - -josepablob/flask-blog -https://github.com/josepablob/flask-blog -Entry file: None -Scanned: 2016-10-25 23:25:37.531769 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -johnsliao/flask-bp -https://github.com/johnsliao/flask-bp -Entry file: flask-bp/flaskApp.py -Scanned: 2016-10-25 23:25:38.822827 -No vulnerabilities found. - - -devmtnaing/python_flask -https://github.com/devmtnaing/python_flask -Entry file: python_flask/app/__init__.py -Scanned: 2016-10-25 23:25:40.231153 -Vulnerability 1: -File: python_flask/app/mod_auth/controllers.py - > User input at line 30, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: python_flask/app/mod_auth/controllers.py - > Line 34: session['user_id'] = user.id -File: python_flask/app/mod_auth/controllers.py - > reaches line 36, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -faraday-effect/spectacle-flask -https://github.com/faraday-effect/spectacle-flask -Entry file: spectacle-flask/app/__init__.py -Scanned: 2016-10-25 23:25:41.654408 -No vulnerabilities found. - - -swkaen/Flask_LED -https://github.com/swkaen/Flask_LED -Entry file: Flask_LED/hello.py -Scanned: 2016-10-25 23:25:42.972098 -No vulnerabilities found. - - -al4/flask-tokenauth -https://github.com/al4/flask-tokenauth -Entry file: flask-tokenauth/example.py -Scanned: 2016-10-25 23:25:44.368938 -No vulnerabilities found. - - -jgoret/flask-dataset -https://github.com/jgoret/flask-dataset -Entry file: flask-dataset/flask_dataset/__init__.py -Scanned: 2016-10-25 23:25:46.159107 -No vulnerabilities found. - - -cnds/flask_web -https://github.com/cnds/flask_web -Entry file: flask_web/app/__init__.py -Scanned: 2016-10-25 23:25:51.330903 -Vulnerability 1: -File: flask_web/app/api_1_0/posts.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/api_1_0/posts.py - > Line 17: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKBLOG_POSTS_PER_PAGE'], error_out=False) - File: flask_web/app/api_1_0/posts.py - > Line 20: posts = pagination.items - File: flask_web/app/api_1_0/posts.py - > Line 21: prev = None - File: flask_web/app/api_1_0/posts.py - > Line 24: next = None -File: flask_web/app/api_1_0/posts.py - > reaches line 23, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flask_web/app/api_1_0/posts.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/api_1_0/posts.py - > Line 17: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKBLOG_POSTS_PER_PAGE'], error_out=False) - File: flask_web/app/api_1_0/posts.py - > Line 20: posts = pagination.items - File: flask_web/app/api_1_0/posts.py - > Line 21: prev = None - File: flask_web/app/api_1_0/posts.py - > Line 24: next = None -File: flask_web/app/api_1_0/posts.py - > reaches line 26, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flask_web/app/api_1_0/posts.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/api_1_0/posts.py - > Line 17: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKBLOG_POSTS_PER_PAGE'], error_out=False) - File: flask_web/app/api_1_0/posts.py - > Line 20: posts = pagination.items - File: flask_web/app/api_1_0/posts.py - > Line 21: prev = None - File: flask_web/app/api_1_0/posts.py - > Line 24: next = None -File: flask_web/app/api_1_0/posts.py - > reaches line 27, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flask_web/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKBLOG_POSTS_PER_PAGE'], error_out=False) - File: flask_web/app/main/views.py - > Line 34: posts = pagination.items - File: flask_web/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_web/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 5: -File: flask_web/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', ' ')) -Reassigned in: - File: flask_web/app/main/views.py - > Line 23: show_followed = False - File: flask_web/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_web/app/main/views.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 6: -File: flask_web/app/main/views.py - > User input at line 110, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/main/views.py - > Line 112: page = (post.comments.count() - 1, current_app.config['FLASKBLOG_COMMENTS_PER_PAGE'] + 1) - File: flask_web/app/main/views.py - > Line 114: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKBLOG_COMMENTS_PER_PAGE'], error_out=False) - File: flask_web/app/main/views.py - > Line 116: comments = pagination.items - File: flask_web/app/main/views.py - > Line 109: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_web/app/main/views.py - > reaches line 117, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 7: -File: flask_web/app/main/views.py - > User input at line 159, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/main/views.py - > Line 160: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKBLOG_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_web/app/main/views.py - > Line 162: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_web/app/main/views.py - > Line 158: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_web/app/main/views.py - > reaches line 164, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 8: -File: flask_web/app/main/views.py - > User input at line 190, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_web/app/main/views.py - > Line 191: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKBLOG_COMMENT_PER_PAGE'], error_out=False) - File: flask_web/app/main/views.py - > Line 194: comments = pagination.items -File: flask_web/app/main/views.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: flask_test/test.py -Scanned: 2016-10-25 23:25:52.636955 -No vulnerabilities found. - - -danjamin/flask-guide -https://github.com/danjamin/flask-guide -Entry file: flask-guide/app/server.py -Scanned: 2016-10-25 23:25:53.945894 -No vulnerabilities found. - - -stevejgoodman/flask-app -https://github.com/stevejgoodman/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-25 23:25:55.245733 -No vulnerabilities found. - - -devizier/flask-blog -https://github.com/devizier/flask-blog -Entry file: None -Scanned: 2016-10-25 23:25:55.771110 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rafaelgotts/flask_rest -https://github.com/rafaelgotts/flask_rest -Entry file: flask_rest/flask_rest/app.py -Scanned: 2016-10-25 23:25:57.054592 -No vulnerabilities found. - - -Orlandohub/flask-tutorial -https://github.com/Orlandohub/flask-tutorial -Entry file: flask-tutorial/hello-world.py -Scanned: 2016-10-25 23:25:58.348179 -No vulnerabilities found. - - -python-0/flask_blog -https://github.com/python-0/flask_blog -Entry file: flask_blog/app/__init__.py -Scanned: 2016-10-25 23:25:59.909674 -No vulnerabilities found. - - -bdero/flask-sleep -https://github.com/bdero/flask-sleep -Entry file: flask-sleep/flasksleep.py -Scanned: 2016-10-25 23:26:01.304697 -No vulnerabilities found. - - -miracleluchen/blog-flask -https://github.com/miracleluchen/blog-flask -Entry file: blog-flask/server.py -Scanned: 2016-10-25 23:26:02.890202 -No vulnerabilities found. - - -IvanBodnar/flask_relevamientos -https://github.com/IvanBodnar/flask_relevamientos -Entry file: flask_relevamientos/app.py -Scanned: 2016-10-25 23:26:04.533997 -No vulnerabilities found. - - -ravivooda/flask-server -https://github.com/ravivooda/flask-server -Entry file: None -Scanned: 2016-10-25 23:26:05.937536 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ravivooda/flask-server. - -wipatrick/flask-restapi -https://github.com/wipatrick/flask-restapi -Entry file: flask-restapi/api.py -Scanned: 2016-10-25 23:26:07.252484 -No vulnerabilities found. - - -yogeshralhan/flask_1 -https://github.com/yogeshralhan/flask_1 -Entry file: flask_1/request.py -Scanned: 2016-10-25 23:26:09.332948 -No vulnerabilities found. - - -YeWang0/Flask_Blog -https://github.com/YeWang0/Flask_Blog -Entry file: Flask_Blog/main_db.py -Scanned: 2016-10-25 23:26:14.833031 -No vulnerabilities found. - - -krol3/python-flask -https://github.com/krol3/python-flask -Entry file: python-flask/app.py -Scanned: 2016-10-25 23:26:22.149589 -No vulnerabilities found. - - -ialamin/flask_hello -https://github.com/ialamin/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-25 23:26:26.415456 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ramhiser/flask-docker -https://github.com/ramhiser/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-25 23:26:27.719776 -No vulnerabilities found. - - -jyameo/Flask-Blog -https://github.com/jyameo/Flask-Blog -Entry file: Flask-Blog/blog.py -Scanned: 2016-10-25 23:26:32.063751 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Blog/env/lib/python2.7/sre_compile.py - -Vasiliy-tech/flask_httpserver -https://github.com/Vasiliy-tech/flask_httpserver -Entry file: flask_httpserver/simple_http.py -Scanned: 2016-10-25 23:26:33.527067 -No vulnerabilities found. - - -chuan137/flask_bess -https://github.com/chuan137/flask_bess -Entry file: flask_bess/main.py -Scanned: 2016-10-25 23:26:36.189616 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -windery/flask-blog -https://github.com/windery/flask-blog -Entry file: None -Scanned: 2016-10-25 23:26:38.761968 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kgandhi37/flask_blog -https://github.com/kgandhi37/flask_blog -Entry file: flask_blog/__init__.py -Scanned: 2016-10-25 23:26:55.544790 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_blog/venv/lib/python3.4/operator.py - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-25 23:26:56.930602 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-25 23:26:58.327784 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-25 23:26:59.750878 -No vulnerabilities found. - - -timotk/flask-login -https://github.com/timotk/flask-login -Entry file: flask-login/app/__init__.py -Scanned: 2016-10-25 23:27:01.112652 -No vulnerabilities found. - - -johnsliao/flask-toy -https://github.com/johnsliao/flask-toy -Entry file: flask-toy/flaskr/flaskr.py -Scanned: 2016-10-25 23:27:02.795182 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jan26th/flask_test -https://github.com/jan26th/flask_test -Entry file: None -Scanned: 2016-10-25 23:27:05.790909 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dawran6/flask-blog -https://github.com/dawran6/flask-blog -Entry file: None -Scanned: 2016-10-25 23:27:06.302953 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -msapkota/Flask_Blog -https://github.com/msapkota/Flask_Blog -Entry file: Flask_Blog/blog.py -Scanned: 2016-10-25 23:27:09.433514 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wish007/MyFlask -https://github.com/wish007/MyFlask -Entry file: MyFlask/app/__init__.py -Scanned: 2016-10-25 23:27:10.766923 -No vulnerabilities found. - - -rogerpence/flask-skeleton -https://github.com/rogerpence/flask-skeleton -Entry file: flask-skeleton/application/__init__.py -Scanned: 2016-10-25 23:27:12.186291 -No vulnerabilities found. - - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-25 23:27:14.105141 -No vulnerabilities found. - - -zachbpd/microblog -https://github.com/zachbpd/microblog -Entry file: None -Scanned: 2016-10-25 23:27:14.668629 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zachbpd/microblog. - -josepablob/flask-hello-world -https://github.com/josepablob/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:27:15.216213 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Tribe216/microblog -https://github.com/Tribe216/microblog -Entry file: None -Scanned: 2016-10-25 23:27:15.729947 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Tribe216/microblog. - -ipsha21/My-flask-application -https://github.com/ipsha21/My-flask-application -Entry file: My-flask-application/app.py -Scanned: 2016-10-25 23:27:17.039097 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -laaroussiBadr/FlaskWebProject -https://github.com/laaroussiBadr/FlaskWebProject -Entry file: FlaskWebProject/FlaskWebProject2/FlaskWebProject2/__init__.py -Scanned: 2016-10-25 23:27:19.398868 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: None -Scanned: 2016-10-25 23:27:21.643518 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sasha-ruby/flask2spark -https://github.com/sasha-ruby/flask2spark -Entry file: flask2spark/flask2spark.py -Scanned: 2016-10-25 23:27:22.934002 -No vulnerabilities found. - - -rjmAmaro/flaskr_flask_tutorial -https://github.com/rjmAmaro/flaskr_flask_tutorial -Entry file: flaskr_flask_tutorial/flaskr/flaskr.py -Scanned: 2016-10-25 23:27:24.328575 -No vulnerabilities found. - - -embasa/FLASK -https://github.com/embasa/FLASK -Entry file: FLASK/app.py -Scanned: 2016-10-25 23:27:27.062945 -No vulnerabilities found. - - -damionlowers/flask -https://github.com/damionlowers/flask -Entry file: None -Scanned: 2016-10-25 23:27:27.605116 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -smltc/Flask -https://github.com/smltc/Flask -Entry file: None -Scanned: 2016-10-25 23:27:29.121712 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rakeshhegishte/Flask -https://github.com/rakeshhegishte/Flask -Entry file: None -Scanned: 2016-10-25 23:27:32.657098 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RayneHwang/Flask -https://github.com/RayneHwang/Flask -Entry file: None -Scanned: 2016-10-25 23:27:35.173346 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RoseOu/flasky -https://github.com/RoseOu/flasky -Entry file: None -Scanned: 2016-10-25 23:27:37.720744 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -materialsvirtuallab/flamyngo -https://github.com/materialsvirtuallab/flamyngo -Entry file: flamyngo/flamyngo/app.py -Scanned: 2016-10-25 23:27:40.601063 -Vulnerability 1: -File: flamyngo/flamyngo/views.py - > User input at line 95, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 96: settings = CSETTINGS[cname] - File: flamyngo/flamyngo/views.py - > Line 98: projection = [t[0] for t in settings['summary']] - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 2: -File: flamyngo/flamyngo/views.py - > User input at line 97, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 105: criteria = process_search_string(search_string, settings) -File: flamyngo/flamyngo/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('index.html',collection_name=cname, results=results, fields=fields, search_string=search_string, mapped_names=mapped_names, unique_key=settings['unique_key'], active_collection=cname, collections=CNAMES, error_message=error_message)) - -Vulnerability 3: -File: flamyngo/flamyngo/views.py - > User input at line 142, trigger word "get(": - cname = request.args.get('collection') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 4: -File: flamyngo/flamyngo/views.py - > User input at line 145, trigger word "get(": - plot_type = request.args.get('plot_type') or 'scatter' -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 5: -File: flamyngo/flamyngo/views.py - > User input at line 146, trigger word "get(": - search_string = request.args.get('search_string') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 6: -File: flamyngo/flamyngo/views.py - > User input at line 147, trigger word "get(": - xaxis = request.args.get('xaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - -Vulnerability 7: -File: flamyngo/flamyngo/views.py - > User input at line 148, trigger word "get(": - yaxis = request.args.get('yaxis') -Reassigned in: - File: flamyngo/flamyngo/views.py - > Line 144: ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collections=CNAMES)) -File: flamyngo/flamyngo/views.py - > reaches line 149, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = make_response(render_template('plot.html',collection=cname, search_string=search_string, plot_type=plot_type, xaxis=xaxis, yaxis=yaxis, active_collection=cname, collections=CNAMES, plot=True)) - - - -jonafato/Flask-Copilot -https://github.com/jonafato/Flask-Copilot -Entry file: Flask-Copilot/example/app.py -Scanned: 2016-10-25 23:27:41.998471 -No vulnerabilities found. - - -Upflask/Upflask -https://github.com/Upflask/Upflask -Entry file: Upflask/server.py -Scanned: 2016-10-25 23:27:43.769411 -Vulnerability 1: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: Upflask/server.py - > User input at line 161, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Upflask/server.py - > Line 165: filename = secure_filename(file.filename) -File: Upflask/server.py - > reaches line 171, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -PrettyPrinted/flask-wtforms -https://github.com/PrettyPrinted/flask-wtforms -Entry file: flask-wtforms/main.py -Scanned: 2016-10-25 23:27:57.098667 -No vulnerabilities found. - - -MLH/my-mlh-flask-example -https://github.com/MLH/my-mlh-flask-example -Entry file: my-mlh-flask-example/app.py -Scanned: 2016-10-25 23:27:58.425076 -No vulnerabilities found. - - -billyfung/flask_shortener -https://github.com/billyfung/flask_shortener -Entry file: flask_shortener/app.py -Scanned: 2016-10-25 23:27:59.830221 -Vulnerability 1: -File: flask_shortener/app.py - > User input at line 41, trigger word "form[": - url_to_parse = request.form['input-url'] -Reassigned in: - File: flask_shortener/app.py - > Line 42: parts = urlparse.urlparse(url_to_parse) - File: flask_shortener/app.py - > Line 47: short_id = shorten(url_to_parse) -File: flask_shortener/app.py - > reaches line 48, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',short_id=short_id) - -Vulnerability 2: -File: flask_shortener/app.py - > User input at line 52, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 56, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(link_target) - -Vulnerability 3: -File: flask_shortener/app.py - > User input at line 60, trigger word "get(": - link_target = redis.get('url-target:' + short_id) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - -Vulnerability 4: -File: flask_shortener/app.py - > User input at line 63, trigger word "get(": - click_count = int(redis.get('click-count:' + short_id) or 0) -File: flask_shortener/app.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('details.html',short_id=short_id, click_count=click_count, link_target=link_target) - - - -msapkota/flasktaskr -https://github.com/msapkota/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:28:00.362808 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Narcissist1/flasktest -https://github.com/Narcissist1/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 23:28:03.069747 -No vulnerabilities found. - - -super452/flasky -https://github.com/super452/flasky -Entry file: None -Scanned: 2016-10-25 23:28:03.601626 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -boydjohnson/flasktwilio -https://github.com/boydjohnson/flasktwilio -Entry file: flasktwilio/app.py -Scanned: 2016-10-25 23:28:07.903861 -Vulnerability 1: -File: flasktwilio/app.py - > User input at line 14, trigger word "form[": - number = request.form['number'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 2: -File: flasktwilio/app.py - > User input at line 15, trigger word "form[": - lat = request.form['latitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - -Vulnerability 3: -File: flasktwilio/app.py - > User input at line 16, trigger word "form[": - lon = request.form['longitude'] -File: flasktwilio/app.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('subscribe_response.html',phone_number=number, lat=lat, lon=lon) - - - -yizhianiu/flasky -https://github.com/yizhianiu/flasky -Entry file: None -Scanned: 2016-10-25 23:28:08.421152 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-25 23:28:11.848350 -No vulnerabilities found. - - -wdxfairy/flaskblog -https://github.com/wdxfairy/flaskblog -Entry file: None -Scanned: 2016-10-25 23:28:12.378502 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wdxfairy/flaskblog. - -wish007/flasktest -https://github.com/wish007/flasktest -Entry file: flasktest/hello.py -Scanned: 2016-10-25 23:28:13.789278 -No vulnerabilities found. - - -wildjan/Flaskr -https://github.com/wildjan/Flaskr -Entry file: None -Scanned: 2016-10-25 23:28:15.306114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pnilan/flaskr -https://github.com/pnilan/flaskr -Entry file: None -Scanned: 2016-10-25 23:28:15.837393 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pnilan/flaskr. - -scottmarinoff/Flasky -https://github.com/scottmarinoff/Flasky -Entry file: None -Scanned: 2016-10-25 23:28:16.361751 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/scottmarinoff/Flasky. - -cutedogspark/Flask-SocketIO -https://github.com/cutedogspark/Flask-SocketIO -Entry file: Flask-SocketIO/server/app/__init__.py -Scanned: 2016-10-25 23:28:19.719166 -No vulnerabilities found. - - -EvenYan/FlaskTest -https://github.com/EvenYan/FlaskTest -Entry file: FlaskTest/app.py -Scanned: 2016-10-25 23:28:21.541455 -No vulnerabilities found. - - -jll90/flaskAng -https://github.com/jll90/flaskAng -Entry file: flaskAng/app.py -Scanned: 2016-10-25 23:28:25.389330 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskAng/lib/python2.7/sre_compile.py - -rkholoniuk/FlaskAPI -https://github.com/rkholoniuk/FlaskAPI -Entry file: None -Scanned: 2016-10-25 23:28:25.948133 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rkholoniuk/FlaskAPI. - -VitPN/FlaskRPi -https://github.com/VitPN/FlaskRPi -Entry file: FlaskRPi/go.py -Scanned: 2016-10-25 23:28:27.268907 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -edgewood/webfaction-flask0.10-boilerplate -https://github.com/edgewood/webfaction-flask0.10-boilerplate -Entry file: None -Scanned: 2016-10-25 23:28:29.189625 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/edgewood/webfaction-flask0.10-boilerplate. - -shidante/notes-flask -https://github.com/shidante/notes-flask -Entry file: notes-flask/hello.py -Scanned: 2016-10-25 23:28:30.481450 -No vulnerabilities found. - - -maixianyu/flask_tennis -https://github.com/maixianyu/flask_tennis -Entry file: None -Scanned: 2016-10-25 23:28:36.090458 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-25 23:28:37.559247 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -saalmerol/cds-flask -https://github.com/saalmerol/cds-flask -Entry file: None -Scanned: 2016-10-25 23:28:41.392624 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -trileg/HelloFlask -https://github.com/trileg/HelloFlask -Entry file: HelloFlask/FlaskApp/app.py -Scanned: 2016-10-25 23:28:42.710173 -No vulnerabilities found. - - -M1lan/flask_helloworld -https://github.com/M1lan/flask_helloworld -Entry file: flask_helloworld/flask_helloworld.py -Scanned: 2016-10-25 23:28:44.112940 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -xpleaf/flask_catalog -https://github.com/xpleaf/flask_catalog -Entry file: flask_catalog/my_app/__init__.py -Scanned: 2016-10-25 23:28:46.032698 -Vulnerability 1: -File: flask_catalog/my_app/catalog/views.py - > User input at line 41, trigger word "get(": - products = [redis.get(k) for k in keys_alive] -File: flask_catalog/my_app/catalog/views.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('products'products) - -Vulnerability 2: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 79, trigger word "flash(": - flash('The product %s has been created' % name, 'success') - -Vulnerability 3: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 4: -File: flask_catalog/my_app/catalog/views.py - > User input at line 67, trigger word ".data": - price = form.price.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 5: -File: flask_catalog/my_app/catalog/views.py - > User input at line 68, trigger word ".data": - category = Category.query.get_or_404(form.category.data) -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 6: -File: flask_catalog/my_app/catalog/views.py - > User input at line 71, trigger word "files[": - image = request.files['image'] -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 74: filename = secure_filename(image.filename) - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) - File: flask_catalog/my_app/catalog/views.py - > Line 72: filename = '' -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 7: -File: flask_catalog/my_app/catalog/views.py - > User input at line 66, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 8: -File: flask_catalog/my_app/catalog/views.py - > User input at line 67, trigger word ".data": - price = form.price.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 9: -File: flask_catalog/my_app/catalog/views.py - > User input at line 68, trigger word ".data": - category = Category.query.get_or_404(form.category.data) -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 10: -File: flask_catalog/my_app/catalog/views.py - > User input at line 71, trigger word "files[": - image = request.files['image'] -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 74: filename = secure_filename(image.filename) - File: flask_catalog/my_app/catalog/views.py - > Line 76: product = Product(name, price, category, filename) - File: flask_catalog/my_app/catalog/views.py - > Line 85: ret_MAYBE_FUNCTION_NAME = render_template('product-create.html',form=form) - File: flask_catalog/my_app/catalog/views.py - > Line 72: filename = '' -File: flask_catalog/my_app/catalog/views.py - > reaches line 80, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.product',id=product.id)) - -Vulnerability 11: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 97, trigger word "flash(": - flash('The category %s has been created' % name, 'success') - -Vulnerability 12: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 99, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.create_category',id=category.id)) - -Vulnerability 13: -File: flask_catalog/my_app/catalog/views.py - > User input at line 93, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 94: category = Category(name) - File: flask_catalog/my_app/catalog/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = render_template('category-create.html',form=form) -File: flask_catalog/my_app/catalog/views.py - > reaches line 99, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('catalog.create_category',id=category.id)) - -Vulnerability 14: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 15: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 16: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 17: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 142, trigger word "filter(": - products = products.filter(Product.name.like('%' + name + '%')) - -Vulnerability 18: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 19: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 20: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 21: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 144, trigger word "filter(": - products = products.filter(Product.price == price) - -Vulnerability 22: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 23: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 24: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 25: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 146, trigger word "filter(": - products = products.filter(Product.company.like('%' + company + '%')) - -Vulnerability 26: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 27: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 28: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 29: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 148, trigger word "filter(": - products = products.select_from(join(Product, Category)).filter(Category.name.like('%' + category + '%')) - -Vulnerability 30: -File: flask_catalog/my_app/catalog/views.py - > User input at line 136, trigger word "get(": - name = request.args.get('name') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 31: -File: flask_catalog/my_app/catalog/views.py - > User input at line 137, trigger word "get(": - price = request.args.get('price') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 32: -File: flask_catalog/my_app/catalog/views.py - > User input at line 138, trigger word "get(": - company = request.args.get('company') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - -Vulnerability 33: -File: flask_catalog/my_app/catalog/views.py - > User input at line 139, trigger word "get(": - category = request.args.get('category') -Reassigned in: - File: flask_catalog/my_app/catalog/views.py - > Line 140: products = Product.query -File: flask_catalog/my_app/catalog/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('products.html',products=products.paginate(page, 10)) - - - -yizhianiu/flask-blog -https://github.com/yizhianiu/flask-blog -Entry file: None -Scanned: 2016-10-25 23:28:46.571657 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -garderobin/HelloFlask -https://github.com/garderobin/HelloFlask -Entry file: HelloFlask/HelloFlask.py -Scanned: 2016-10-25 23:28:57.915961 -No vulnerabilities found. - - -codybousc/flask_practice- -https://github.com/codybousc/flask_practice- -Entry file: flask_practice-/app.py -Scanned: 2016-10-25 23:29:01.005230 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_practice-/venv/lib/python2.7/sre_compile.py - -zhuwei05/flask-blog -https://github.com/zhuwei05/flask-blog -Entry file: None -Scanned: 2016-10-25 23:29:01.540097 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fenfir/flask_test -https://github.com/fenfir/flask_test -Entry file: None -Scanned: 2016-10-25 23:29:02.055815 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: None -Scanned: 2016-10-25 23:29:02.592867 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -junhl/Flask_Test -https://github.com/junhl/Flask_Test -Entry file: Flask_Test/app/__init__.py -Scanned: 2016-10-25 23:29:06.788825 -No vulnerabilities found. - - -anupam0601/flask_off -https://github.com/anupam0601/flask_off -Entry file: flask_off/appmongo.py -Scanned: 2016-10-25 23:29:13.250785 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cdhop/flask_exercises -https://github.com/cdhop/flask_exercises -Entry file: flask_exercises/chapter_5/hello.py -Scanned: 2016-10-25 23:29:14.803133 -No vulnerabilities found. - - -AmeetSM/AngularFlask -https://github.com/AmeetSM/AngularFlask -Entry file: AngularFlask/app.py -Scanned: 2016-10-25 23:29:16.591432 -No vulnerabilities found. - - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/flask-hello.py -Scanned: 2016-10-25 23:29:17.913645 -No vulnerabilities found. - - -slacksec/flask_blog -https://github.com/slacksec/flask_blog -Entry file: flask_blog/__init__.py -Scanned: 2016-10-25 23:29:19.710074 -Vulnerability 1: -File: flask_blog/author/views.py - > User input at line 25, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flask_blog/author/views.py - > Line 29: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: flask_blog/author/views.py - > Line 34: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: flask_blog/author/views.py - > reaches line 27, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 2: -File: flask_blog/blog/views.py - > User input at line 84, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask_blog/blog/views.py - > Line 86: slug = slugify(title) - File: flask_blog/blog/views.py - > Line 87: post = Post(blog, author, title, body, category, filename, slug) - File: flask_blog/blog/views.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask_blog/blog/views.py - > reaches line 90, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - -Vulnerability 3: -File: flask_blog/blog/views.py - > User input at line 84, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask_blog/blog/views.py - > Line 86: slug = slugify(title) - File: flask_blog/blog/views.py - > Line 87: post = Post(blog, author, title, body, category, filename, slug) - File: flask_blog/blog/views.py - > Line 91: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask_blog/blog/views.py - > reaches line 90, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - - - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-25 23:29:21.143874 -No vulnerabilities found. - - -Desmonddai583/flask-blog -https://github.com/Desmonddai583/flask-blog -Entry file: None -Scanned: 2016-10-25 23:29:21.666389 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -seabrookmx/flask-demo -https://github.com/seabrookmx/flask-demo -Entry file: flask-demo/flaskdemo.py -Scanned: 2016-10-25 23:29:22.985892 -No vulnerabilities found. - - -a358003542/flask-examples -https://github.com/a358003542/flask-examples -Entry file: flask-examples/session_flash.py -Scanned: 2016-10-25 23:29:24.435829 -Vulnerability 1: -File: flask-examples/session_flash.py - > User input at line 32, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-examples/session_flash.py - > Line 37: session['username'] = username -File: flask-examples/session_flash.py - > reaches line 34, trigger word "filter(": - target = db.session.query(User).filter(User.username == username).first() - -Vulnerability 2: -File: flask-examples/upload.py - > User input at line 34, trigger word "files[": - fileobj = request.files['file'] -Reassigned in: - File: flask-examples/upload.py - > Line 41: filename = fileobj.filename - File: flask-examples/upload.py - > Line 45: ret_MAYBE_FUNCTION_NAME = ' - Upload new file -

Upload new File

-
- - -
- ' - File: flask-examples/upload.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask-examples/upload.py - > Line 39: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask-examples/upload.py - > reaches line 43, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 3: -File: flask-examples/upload.py - > User input at line 34, trigger word "files[": - fileobj = request.files['file'] -Reassigned in: - File: flask-examples/upload.py - > Line 41: filename = fileobj.filename - File: flask-examples/upload.py - > Line 45: ret_MAYBE_FUNCTION_NAME = ' - Upload new file -

Upload new File

-
- - -
- ' - File: flask-examples/upload.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(request.url) - File: flask-examples/upload.py - > Line 39: ret_MAYBE_FUNCTION_NAME = redirect(request.url) -File: flask-examples/upload.py - > reaches line 43, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 4: -File: flask-examples/session.py - > User input at line 32, trigger word "get(": - username = request.form.get('username') -Reassigned in: - File: flask-examples/session.py - > Line 37: session['username'] = username -File: flask-examples/session.py - > reaches line 34, trigger word "filter(": - target = db.session.query(User).filter(User.username == username).first() - - - -Yuhuishishishi/Flask_toy -https://github.com/Yuhuishishishi/Flask_toy -Entry file: Flask_toy/MenuApp.py -Scanned: 2016-10-25 23:29:25.731410 -No vulnerabilities found. - - -heyericnelson/flask_apps -https://github.com/heyericnelson/flask_apps -Entry file: flask_apps/flaskr/flaskr.py -Scanned: 2016-10-25 23:29:27.031908 -No vulnerabilities found. - - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: None -Scanned: 2016-10-25 23:29:28.353212 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/abunuwas/flask_experiments. - -ykchat/gundam-flask -https://github.com/ykchat/gundam-flask -Entry file: gundam-flask/server.py -Scanned: 2016-10-25 23:29:29.650250 -No vulnerabilities found. - - -datakiss/flask-miguel -https://github.com/datakiss/flask-miguel -Entry file: flask-miguel/app/__init__.py -Scanned: 2016-10-25 23:29:31.077499 -No vulnerabilities found. - - -eltonto187/learn_flask -https://github.com/eltonto187/learn_flask -Entry file: learn_flask/flaskr.py -Scanned: 2016-10-25 23:29:32.389356 -No vulnerabilities found. - - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-25 23:29:33.674873 -No vulnerabilities found. - - -netkicorp/flask-jwe -https://github.com/netkicorp/flask-jwe -Entry file: flask-jwe/server.py -Scanned: 2016-10-25 23:29:35.129050 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -chungsquared/flask-introduction -https://github.com/chungsquared/flask-introduction -Entry file: flask-introduction/app.py -Scanned: 2016-10-25 23:29:37.931297 -No vulnerabilities found. - - -dengshilong/flask_example -https://github.com/dengshilong/flask_example -Entry file: flask_example/flaskr.py -Scanned: 2016-10-25 23:29:39.417590 -No vulnerabilities found. - - -nathanielcompton/flask-tutorial -https://github.com/nathanielcompton/flask-tutorial -Entry file: flask-tutorial/flask-tutorial/app.py -Scanned: 2016-10-25 23:29:44.050088 -No vulnerabilities found. - - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/flask_project/routes.py -Scanned: 2016-10-25 23:29:48.592365 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_api/flask_project/venv/lib/python2.7/sre_compile.py - -leon740gk/flask_quick_start -https://github.com/leon740gk/flask_quick_start -Entry file: flask_quick_start/hello.py -Scanned: 2016-10-25 23:29:49.946465 -No vulnerabilities found. - - -dommert/test.dommert.xyz -https://github.com/dommert/test.dommert.xyz -Entry file: None -Scanned: 2016-10-25 23:29:51.365807 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dommert/test.dommert.xyz. - -poppuyo/FlaskUrlShortener -https://github.com/poppuyo/FlaskUrlShortener -Entry file: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py -Scanned: 2016-10-25 23:30:01.086895 -Vulnerability 1: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 95, trigger word "replace(": - requested_shortened = requested_shortened.replace(request.url_root, '') - -Vulnerability 2: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 98, trigger word "execute(": - cur.execute('SELECT url FROM urls where shortened=%s', [requested_shortened]) - -Vulnerability 3: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 100, trigger word "execute(": - cur = g.db.execute('SELECT url FROM urls where shortened=?', [requested_shortened]) - -Vulnerability 4: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 93, trigger word "get(": - requested_shortened = request.args.get('shortened') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 97: cur = g.db.cursor() -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 104, trigger word "url_for(": - short_url = request.url_root.rstrip('/') + url_for('find_shortened',shortened=requested_shortened) - -Vulnerability 5: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 149, trigger word "execute(": - cur.execute('WITH new_values (url, shortened) as ( values (%s, %s) ), ' + 'upsert as ' + '( update urls u set url = nv.url, shortened = nv.shortened ' + ' FROM new_values nv WHERE u.url = nv.url RETURNING u.* )' + ' INSERT INTO urls (url, shortened) ' + ' SELECT url, shortened FROM new_values WHERE NOT EXISTS ' + ' (SELECT 1 FROM upsert up WHERE up.url = new_values.url)', [stripped_url, untrimmed_shortened[leftstring_length]]) - -Vulnerability 6: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 160, trigger word "execute(": - g.db.execute('UPDATE urls SET url=?, shortened=? WHERE url=?', [stripped_url, untrimmed_shortened[leftstring_length], stripped_url]) - -Vulnerability 7: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 162, trigger word "execute(": - g.db.execute('INSERT OR IGNORE INTO urls (url, shortened) VALUES (?, ?)', [stripped_url, untrimmed_shortened[leftstring_length]]) - -Vulnerability 8: -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > User input at line 114, trigger word "form[": - stripped_url = request.form['url'].rstrip(' ').rstrip('/') -Reassigned in: - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 116: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 130: stripped_url = 'http://' + stripped_url - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 131: parsed_url = urlparse(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 140: untrimmed_shortened = shorten(stripped_url) - File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > Line 165: short_url = request.url_root + untrimmed_shortened[leftstring_length] -File: FlaskUrlShortener/FlaskUrlShortener/urlshortener.py - > reaches line 166, trigger word "flash(": - flash(Markup('' + short_url + '' + ' now redirects to the following URL: ' + '' + stripped_url + '')) - - - -DonBeck69/FlaskWebProject2 -https://github.com/DonBeck69/FlaskWebProject2 -Entry file: None -Scanned: 2016-10-25 23:30:01.637396 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -j1wu/wechat-enterprise-bot -https://github.com/j1wu/wechat-enterprise-bot -Entry file: None -Scanned: 2016-10-25 23:30:03.841450 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/j1wu/wechat-enterprise-bot. - -chamambom/flask_sqlalchemy_crud -https://github.com/chamambom/flask_sqlalchemy_crud -Entry file: flask_sqlalchemy_crud/sqlcrud.py -Scanned: 2016-10-25 23:30:05.293192 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pyd-testing/flask-docker-workflow -https://github.com/pyd-testing/flask-docker-workflow -Entry file: flask-docker-workflow/app/app.py -Scanned: 2016-10-25 23:30:06.978141 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -HYL13/flask_project_0 -https://github.com/HYL13/flask_project_0 -Entry file: flask_project_0/app/__init__.py -Scanned: 2016-10-25 23:30:08.655282 -Vulnerability 1: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flask_project_0/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_project_0/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_project_0/app/api_1_0/posts.py - > Line 19: next = None -File: flask_project_0/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flask_project_0/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 20: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 23: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flask_project_0/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_project_0/app/api_1_0/users.py - > Line 42: prev = None - File: flask_project_0/app/api_1_0/users.py - > Line 45: next = None -File: flask_project_0/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 18: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flask_project_0/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_project_0/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_project_0/app/api_1_0/comments.py - > Line 46: next = None -File: flask_project_0/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flask_project_0/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 55: posts = pagination.items - File: flask_project_0/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flask_project_0/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 45: show_followed = False - File: flask_project_0/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flask_project_0/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 67: posts = pagination.items -File: flask_project_0/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flask_project_0/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_project_0/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 134: comments = pagination.items - File: flask_project_0/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_project_0/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flask_project_0/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_project_0/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flask_project_0/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_project_0/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_project_0/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flask_project_0/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_project_0/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_project_0/app/main/views.py - > Line 246: comments = pagination.items -File: flask_project_0/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -EsmondMoe/flask-globalcache-http-api -https://github.com/EsmondMoe/flask-globalcache-http-api -Entry file: flask-globalcache-http-api/app.py -Scanned: 2016-10-25 23:30:15.325226 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pbsugg/flask_testbed_server -https://github.com/pbsugg/flask_testbed_server -Entry file: flask_testbed_server/main.py -Scanned: 2016-10-25 23:30:16.652225 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -gr8shivam/Flask---Handling-File-Uploads -https://github.com/gr8shivam/Flask---Handling-File-Uploads -Entry file: Flask---Handling-File-Uploads/app/__init__.py -Scanned: 2016-10-25 23:30:18.473777 -No vulnerabilities found. - - -anthonybrown/Flask-web-API-demo -https://github.com/anthonybrown/Flask-web-API-demo -Entry file: Flask-web-API-demo/app.py -Scanned: 2016-10-25 23:30:22.638415 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-web-API-demo/venv/lib/python2.7/sre_compile.py - -myCSprojects/PythonFlask-IBMBluemix -https://github.com/myCSprojects/PythonFlask-IBMBluemix -Entry file: PythonFlask-IBMBluemix/welcome.py -Scanned: 2016-10-25 23:30:29.783091 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Kriordan/flask-hello-world -https://github.com/Kriordan/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:30:30.351865 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: Flask-SPA-API-Template/posts/__init__.py -Scanned: 2016-10-25 23:30:35.275258 -Vulnerability 1: -File: Flask-SPA-API-Template/posts/api.py - > User input at line 32, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: Flask-SPA-API-Template/posts/api.py - > Line 37: posts = posts.order_by(models.Post.id) - File: Flask-SPA-API-Template/posts/api.py - > Line 47: data = json.dumps([post.as_dictionary() for post in posts]) - File: Flask-SPA-API-Template/posts/api.py - > Line 50: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: Flask-SPA-API-Template/posts/api.py - > Line 34: posts = session.query(models.Post) -File: Flask-SPA-API-Template/posts/api.py - > reaches line 36, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - - - -dwisulfahnur/My-flask-app -https://github.com/dwisulfahnur/My-flask-app -Entry file: None -Scanned: 2016-10-25 23:30:36.739470 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dwisulfahnur/My-flask-app. - -andreffs18/flask-template-project -https://github.com/andreffs18/flask-template-project -Entry file: flask-template-project/project/__init__.py -Scanned: 2016-10-25 23:30:38.301437 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -MatthewHodgson/flask-by-example -https://github.com/MatthewHodgson/flask-by-example -Entry file: flask-by-example/app.py -Scanned: 2016-10-25 23:30:45.264813 -No vulnerabilities found. - - -ssam123/flask-blog-tutorial -https://github.com/ssam123/flask-blog-tutorial -Entry file: flask-blog-tutorial/__init__.py -Scanned: 2016-10-25 23:30:46.752792 -Vulnerability 1: -File: flask-blog-tutorial/author/views.py - > User input at line 31, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flask-blog-tutorial/author/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) - File: flask-blog-tutorial/author/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = render_template('author/login.html',form=form, error=error) -File: flask-blog-tutorial/author/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 2: -File: flask-blog-tutorial/blog/views.py - > User input at line 127, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask-blog-tutorial/blog/views.py - > Line 129: slug = slugify(title) - File: flask-blog-tutorial/blog/views.py - > Line 130: post = Post(blog, author, title, body, category, filename, slug) - File: flask-blog-tutorial/blog/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask-blog-tutorial/blog/views.py - > reaches line 133, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - -Vulnerability 3: -File: flask-blog-tutorial/blog/views.py - > User input at line 127, trigger word ".data": - title = form.title.data -Reassigned in: - File: flask-blog-tutorial/blog/views.py - > Line 129: slug = slugify(title) - File: flask-blog-tutorial/blog/views.py - > Line 130: post = Post(blog, author, title, body, category, filename, slug) - File: flask-blog-tutorial/blog/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = render_template('blog/post.html',form=form, action='new') -File: flask-blog-tutorial/blog/views.py - > reaches line 133, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('article',slug=slug)) - - - -kevinlondon/flask-hello-world -https://github.com/kevinlondon/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:30:47.273320 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yun70/flask-rest-api -https://github.com/yun70/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-25 23:30:49.383924 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -valexandersaulys/flask_microblog_tutorial -https://github.com/valexandersaulys/flask_microblog_tutorial -Entry file: flask_microblog_tutorial/app/__init__.py -Scanned: 2016-10-25 23:30:50.820131 -No vulnerabilities found. - - -kfiras/cloudfoundry-flask-webservice -https://github.com/kfiras/cloudfoundry-flask-webservice -Entry file: cloudfoundry-flask-webservice/app.py -Scanned: 2016-10-25 23:30:52.230571 -Vulnerability 1: -File: cloudfoundry-flask-webservice/app.py - > User input at line 80, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: cloudfoundry-flask-webservice/app.py - > reaches line 87, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -MrLeeh/flask-mega-tutorial -https://github.com/MrLeeh/flask-mega-tutorial -Entry file: None -Scanned: 2016-10-25 23:30:52.742825 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MrLeeh/flask-mega-tutorial. - -wenzhihong2003/awesome-flask-todo -https://github.com/wenzhihong2003/awesome-flask-todo -Entry file: awesome-flask-todo/app/__init__.py -Scanned: 2016-10-25 23:30:54.030668 -No vulnerabilities found. - - -viney-shih/Flask_App_Template -https://github.com/viney-shih/Flask_App_Template -Entry file: Flask_App_Template/app/__init__.py -Scanned: 2016-10-25 23:30:55.342116 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -davehalladay/openr-flask-api -https://github.com/davehalladay/openr-flask-api -Entry file: openr-flask-api/main.py -Scanned: 2016-10-25 23:30:56.768170 -No vulnerabilities found. - - -momotaro98/flask-for-test -https://github.com/momotaro98/flask-for-test -Entry file: flask-for-test/app.py -Scanned: 2016-10-25 23:30:58.059484 -No vulnerabilities found. - - -andela-mochieng/flask-practice-tutorial -https://github.com/andela-mochieng/flask-practice-tutorial -Entry file: flask-practice-tutorial/app/__init__.py -Scanned: 2016-10-25 23:30:59.349394 -No vulnerabilities found. - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-25 23:31:00.762990 -No vulnerabilities found. - - -mahfuzsust/flask-heroku-intro -https://github.com/mahfuzsust/flask-heroku-intro -Entry file: flask-heroku-intro/app.py -Scanned: 2016-10-25 23:31:02.637057 -No vulnerabilities found. - - -MoodyLyrics/flask -https://github.com/MoodyLyrics/flask -Entry file: None -Scanned: 2016-10-25 23:31:04.936269 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sunshine-sjd/Flask -https://github.com/sunshine-sjd/Flask -Entry file: None -Scanned: 2016-10-25 23:31:05.464422 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -unikatsieben/flask -https://github.com/unikatsieben/flask -Entry file: None -Scanned: 2016-10-25 23:31:05.998167 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mei-Lin-Chen/Flask -https://github.com/Mei-Lin-Chen/Flask -Entry file: None -Scanned: 2016-10-25 23:31:06.570573 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kakshi3242/Flask -https://github.com/kakshi3242/Flask -Entry file: None -Scanned: 2016-10-25 23:31:08.094369 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dannyec/flask -https://github.com/dannyec/flask -Entry file: None -Scanned: 2016-10-25 23:31:14.617481 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Abirdcfly/flask-blog -https://github.com/Abirdcfly/flask-blog -Entry file: None -Scanned: 2016-10-25 23:31:17.632692 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rainyear/MathModeBot -https://github.com/rainyear/MathModeBot -Entry file: MathModeBot/main.py -Scanned: 2016-10-25 23:31:19.054659 -No vulnerabilities found. - - -jrhuerta/flask-api -https://github.com/jrhuerta/flask-api -Entry file: None -Scanned: 2016-10-25 23:31:19.579272 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jrhuerta/flask-api. - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:31:24.140381 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: None -Scanned: 2016-10-25 23:31:31.154357 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -srbhtest/flaskwebsite -https://github.com/srbhtest/flaskwebsite -Entry file: flaskwebsite/__init__.py -Scanned: 2016-10-25 23:31:37.508478 -No vulnerabilities found. - - -super452/flasky -https://github.com/super452/flasky -Entry file: None -Scanned: 2016-10-25 23:31:38.030668 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -huachen0216/flaskdemo -https://github.com/huachen0216/flaskdemo -Entry file: None -Scanned: 2016-10-25 23:31:39.565847 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MrLokans/flaskr -https://github.com/MrLokans/flaskr -Entry file: None -Scanned: 2016-10-25 23:31:46.084928 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MrLokans/flaskr. - -citizen-stig/flaskone -https://github.com/citizen-stig/flaskone -Entry file: flaskone/flask_one.py -Scanned: 2016-10-25 23:31:48.385644 -No vulnerabilities found. - - -ifcheung2012/flaskanalysis -https://github.com/ifcheung2012/flaskanalysis -Entry file: flaskanalysis/manage.py -Scanned: 2016-10-25 23:31:49.693949 -No vulnerabilities found. - - -Robotwing/flaskweb -https://github.com/Robotwing/flaskweb -Entry file: None -Scanned: 2016-10-25 23:31:50.229193 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -neo1218/m2m -https://github.com/neo1218/m2m -Entry file: m2m/m2m/app/__init__.py -Scanned: 2016-10-25 23:31:52.641496 -No vulnerabilities found. - - -fhamami/flaskone -https://github.com/fhamami/flaskone -Entry file: flaskone/app/__init__.py -Scanned: 2016-10-25 23:31:54.164063 -No vulnerabilities found. - - -windery/flasky -https://github.com/windery/flasky -Entry file: None -Scanned: 2016-10-25 23:31:54.691259 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kcunning/flask-class-c9 -https://github.com/kcunning/flask-class-c9 -Entry file: flask-class-c9/flaskclass/app/__init__.py -Scanned: 2016-10-25 23:31:56.142231 -Vulnerability 1: -File: flask-class-c9/flaskclass/app/views.py - > User input at line 38, trigger word ".data": - numbers = form.numbers.data -Reassigned in: - File: flask-class-c9/flaskclass/app/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) - File: flask-class-c9/flaskclass/app/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) -File: flask-class-c9/flaskclass/app/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('game.html',game_nums=game_nums, player_nums=numbers, wins=wins) - - - -MarHelen/FlaskLogin -https://github.com/MarHelen/FlaskLogin -Entry file: FlaskLogin/sql_declarative.py -Scanned: 2016-10-25 23:32:00.413793 -Vulnerability 1: -File: FlaskLogin/first.py - > User input at line 63, trigger word "get(": - email = request.form.get('email') -Reassigned in: - File: FlaskLogin/first.py - > Line 70: user = User(email, request.form.get('pw')) -File: FlaskLogin/first.py - > reaches line 65, trigger word "filter(": - temp_user_set = User.query.filter(User.email == email).first() - - - -tangza/FlaskAPP -https://github.com/tangza/FlaskAPP -Entry file: None -Scanned: 2016-10-25 23:32:00.980488 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -louiskun/flaskGIT -https://github.com/louiskun/flaskGIT -Entry file: flaskGIT/sessionmail.py -Scanned: 2016-10-25 23:32:05.561376 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flaskGIT/venv/lib/python2.7/sre_compile.py - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/flask_demo.py -Scanned: 2016-10-25 23:32:06.927031 -No vulnerabilities found. - - -sethblack/python-flask-pixel-tracking -https://github.com/sethblack/python-flask-pixel-tracking -Entry file: python-flask-pixel-tracking/pfpt/main.py -Scanned: 2016-10-25 23:32:08.427040 -No vulnerabilities found. - - -kloudsec/py-webkit2png-flask-api -https://github.com/kloudsec/py-webkit2png-flask-api -Entry file: py-webkit2png-flask-api/api/app.py -Scanned: 2016-10-25 23:32:10.367772 -Vulnerability 1: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 2: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 3: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 4: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 46, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 5: -File: py-webkit2png-flask-api/api/web.py - > User input at line 25, trigger word "get(": - url = request.args.get('url', None) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 6: -File: py-webkit2png-flask-api/api/web.py - > User input at line 26, trigger word "get(": - width = int(request.args.get('width', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 7: -File: py-webkit2png-flask-api/api/web.py - > User input at line 27, trigger word "get(": - height = int(request.args.get('height', 400)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - -Vulnerability 8: -File: py-webkit2png-flask-api/api/web.py - > User input at line 28, trigger word "get(": - scale = float(request.args.get('scale', 0.5)) -Reassigned in: - File: py-webkit2png-flask-api/api/web.py - > Line 33: x_width = int(width / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 34: x_height = int(height / scale) - File: py-webkit2png-flask-api/api/web.py - > Line 36: params = 'url''width''height''scale'urlwidthheightscale - File: py-webkit2png-flask-api/api/web.py - > Line 43: cache_filename = slugify(json.dumps(params)) - File: py-webkit2png-flask-api/api/web.py - > Line 44: cache_filepath = os.path.join(RESOURCES_FOLDER_PATH, '%s.png' % cache_filename) - File: py-webkit2png-flask-api/api/web.py - > Line 72: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 75: ret_MAYBE_FUNCTION_NAME = send_file(DEFAULT_IMAGE_PLACEHOLDER,mimetype='image/png') - File: py-webkit2png-flask-api/api/web.py - > Line 79: worked_image = img.crop((0, 0, x_width, x_height)) - File: py-webkit2png-flask-api/api/web.py - > Line 80: worked_image = worked_image.resize((width, height), Image.ANTIALIAS) -File: py-webkit2png-flask-api/api/web.py - > reaches line 83, trigger word "send_file(": - ret_MAYBE_FUNCTION_NAME = send_file(cache_filepath,mimetype='image/png') - - - -jeffreybergman/flask-blog -https://github.com/jeffreybergman/flask-blog -Entry file: None -Scanned: 2016-10-25 23:32:10.904669 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -s-kovacevic/elearning-flask -https://github.com/s-kovacevic/elearning-flask -Entry file: elearning-flask/main.py -Scanned: 2016-10-25 23:32:12.360126 -Vulnerability 1: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 71, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'user.to_jsonapi()) - -Vulnerability 2: -File: elearning-flask/main.py - > User input at line 84, trigger word ".data": - user = User(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 69: user = User() - File: elearning-flask/main.py - > Line 73: user = User() - File: elearning-flask/main.py - > Line 78: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 80: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 86: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 88: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 74, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[user.to_jsonapi() for user in user.get_many()]) - -Vulnerability 3: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 99, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'question.to_jsonapi()) - -Vulnerability 4: -File: elearning-flask/main.py - > User input at line 116, trigger word ".data": - question = Question(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 97: question = Question() - File: elearning-flask/main.py - > Line 101: question = Question() - File: elearning-flask/main.py - > Line 110: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 112: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 118: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 120: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 102, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[question.to_jsonapi() for question in question.get_many()]) - -Vulnerability 5: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 131, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'category.to_jsonapi()) - -Vulnerability 6: -File: elearning-flask/main.py - > User input at line 148, trigger word ".data": - category = Category(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 129: category = Category() - File: elearning-flask/main.py - > Line 133: category = Category() - File: elearning-flask/main.py - > Line 142: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 144: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 150: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 152: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 134, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[category.to_jsonapi() for category in category.get_many()]) - -Vulnerability 7: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 163, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'answer.to_jsonapi()) - -Vulnerability 8: -File: elearning-flask/main.py - > User input at line 180, trigger word ".data": - answer = Answer(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 161: answer = Answer() - File: elearning-flask/main.py - > Line 165: answer = Answer() - File: elearning-flask/main.py - > Line 174: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 176: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 182: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 184: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 166, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[answer.to_jsonapi() for answer in answer.get_many()]) - -Vulnerability 9: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 195, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'score.to_jsonapi()) - -Vulnerability 10: -File: elearning-flask/main.py - > User input at line 212, trigger word ".data": - score = Score(json_obj=request.data) -Reassigned in: - File: elearning-flask/main.py - > Line 193: score = Score() - File: elearning-flask/main.py - > Line 197: score = Score() - File: elearning-flask/main.py - > Line 206: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 208: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') - File: elearning-flask/main.py - > Line 214: ret_MAYBE_FUNCTION_NAME = jsonify() - File: elearning-flask/main.py - > Line 216: ret_MAYBE_FUNCTION_NAME = jsonify('error''message'400'Api error') -File: elearning-flask/main.py - > reaches line 198, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('data'[score.to_jsonapi() for score in score.get_many()]) - - - -logicalicy/flask_boostrap -https://github.com/logicalicy/flask_boostrap -Entry file: flask_boostrap/app/__init__.py -Scanned: 2016-10-25 23:32:13.773549 -No vulnerabilities found. - - -MrLokans/discover_flask -https://github.com/MrLokans/discover_flask -Entry file: discover_flask/app.py -Scanned: 2016-10-25 23:32:15.447476 -No vulnerabilities found. - - -Karambir-K/Flask-Intro -https://github.com/Karambir-K/Flask-Intro -Entry file: Flask-Intro/app.py -Scanned: 2016-10-25 23:32:16.887925 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -xiazhe/flask-demo -https://github.com/xiazhe/flask-demo -Entry file: flask-demo/app/__init__.py -Scanned: 2016-10-25 23:32:18.313791 -No vulnerabilities found. - - -nikoheikkila/flask-blog -https://github.com/nikoheikkila/flask-blog -Entry file: None -Scanned: 2016-10-25 23:32:18.842352 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Vatsalgame/flask-try -https://github.com/Vatsalgame/flask-try -Entry file: None -Scanned: 2016-10-25 23:32:19.378933 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Vatsalgame/flask-try. - -bbozhev/flask-test -https://github.com/bbozhev/flask-test -Entry file: flask-test/app/__init__.py -Scanned: 2016-10-25 23:32:26.566102 -No vulnerabilities found. - - -tim1978/flask-blog -https://github.com/tim1978/flask-blog -Entry file: None -Scanned: 2016-10-25 23:32:30.708451 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -danielcodes/flask-practice -https://github.com/danielcodes/flask-practice -Entry file: flask-practice/flask-file-upload/app.py -Scanned: 2016-10-25 23:32:32.455430 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhiweicai/flask-hello -https://github.com/zhiweicai/flask-hello -Entry file: flask-hello/flask-hello.py -Scanned: 2016-10-25 23:32:37.745232 -No vulnerabilities found. - - -GreenDragonSoft/refundmytrain-flask -https://github.com/GreenDragonSoft/refundmytrain-flask -Entry file: refundmytrain-flask/app.py -Scanned: 2016-10-25 23:32:39.156938 -No vulnerabilities found. - - -keithleit/flask-demo -https://github.com/keithleit/flask-demo -Entry file: flask-demo/app.py -Scanned: 2016-10-25 23:32:40.522616 -Vulnerability 1: -File: flask-demo/app.py - > User input at line 17, trigger word "get(": - stocks = request.args.get('stock') -Reassigned in: - File: flask-demo/app.py - > Line 19: stocks = 'goog, fb' -File: flask-demo/app.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',script=script, div=div, code=stocks, checks=checks, error=error) - - - -wstcpyt/flask-demo -https://github.com/wstcpyt/flask-demo -Entry file: flask-demo/app.py -Scanned: 2016-10-25 23:32:47.856101 -Vulnerability 1: -File: flask-demo/app.py - > User input at line 36, trigger word "form[": - stock_sticker = 'WIKI/' + request.form['stocksticker'] -Reassigned in: - File: flask-demo/app.py - > Line 47: stockdata = Quandl.get(stock_sticker,returns='numpy', trim_start=firstdaystr, trim_end=lastdaystr) - File: flask-demo/app.py - > Line 60: ret_MAYBE_FUNCTION_NAME = render_template('index.html',errormessage=errormessage) -File: flask-demo/app.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('graph.html',script=script, div=div, text=stock_sticker) - - - -geraldmc/flask-template -https://github.com/geraldmc/flask-template -Entry file: flask-template/app/__init__.py -Scanned: 2016-10-25 23:32:50.068624 -No vulnerabilities found. - - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-25 23:32:51.462270 -No vulnerabilities found. - - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/run.py -Scanned: 2016-10-25 23:32:52.751492 -No vulnerabilities found. - - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-25 23:32:57.853991 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -ktomlee/flask_init -https://github.com/ktomlee/flask_init -Entry file: flask_init/hello.py -Scanned: 2016-10-25 23:32:59.173678 -No vulnerabilities found. - - -abunuwas/flask_experiments -https://github.com/abunuwas/flask_experiments -Entry file: None -Scanned: 2016-10-25 23:33:00.198289 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/abunuwas/flask_experiments. - -Joryang/flask_videos -https://github.com/Joryang/flask_videos -Entry file: flask_videos/videos.py -Scanned: 2016-10-25 23:33:02.295813 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AvijitGhosh82/appengine_flask -https://github.com/AvijitGhosh82/appengine_flask -Entry file: appengine_flask/main.py -Scanned: 2016-10-25 23:33:05.244295 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -sadev1/flask-demo -https://github.com/sadev1/flask-demo -Entry file: flask-demo/app.py -Scanned: 2016-10-25 23:33:06.604904 -No vulnerabilities found. - - -markleung1969/flask-base -https://github.com/markleung1969/flask-base -Entry file: flask-base/init.py -Scanned: 2016-10-25 23:33:07.940756 -Vulnerability 1: -File: flask-base/apps/auth/views.py - > User input at line 112, trigger word "get(": - user_id = session.get('user_id') -Reassigned in: - File: flask-base/apps/auth/views.py - > Line 118: resp = 'c''m''d'0'登陆成功''user_id''email''username''group''status'user_idemailusernamegroupstatus -File: flask-base/apps/auth/views.py - > reaches line 129, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(resp) - -Vulnerability 2: -File: flask-base/apps/auth/views.py - > User input at line 113, trigger word "get(": - username = session.get('username') -Reassigned in: - File: flask-base/apps/auth/views.py - > Line 118: resp = 'c''m''d'0'登陆成功''user_id''email''username''group''status'user_idemailusernamegroupstatus -File: flask-base/apps/auth/views.py - > reaches line 129, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(resp) - -Vulnerability 3: -File: flask-base/apps/auth/views.py - > User input at line 114, trigger word "get(": - email = session.get('email') -Reassigned in: - File: flask-base/apps/auth/views.py - > Line 118: resp = 'c''m''d'0'登陆成功''user_id''email''username''group''status'user_idemailusernamegroupstatus -File: flask-base/apps/auth/views.py - > reaches line 129, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(resp) - -Vulnerability 4: -File: flask-base/apps/auth/views.py - > User input at line 115, trigger word "get(": - status = session.get('status') -Reassigned in: - File: flask-base/apps/auth/views.py - > Line 118: resp = 'c''m''d'0'登陆成功''user_id''email''username''group''status'user_idemailusernamegroupstatus -File: flask-base/apps/auth/views.py - > reaches line 129, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(resp) - -Vulnerability 5: -File: flask-base/apps/auth/views.py - > User input at line 116, trigger word "get(": - group = session.get('group') -Reassigned in: - File: flask-base/apps/auth/views.py - > Line 118: resp = 'c''m''d'0'登陆成功''user_id''email''username''group''status'user_idemailusernamegroupstatus -File: flask-base/apps/auth/views.py - > reaches line 129, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(resp) - - - -NickyThreeNames/flask_blog -https://github.com/NickyThreeNames/flask_blog -Entry file: flask_blog/blog.py -Scanned: 2016-10-25 23:33:09.225633 -No vulnerabilities found. - - -zmrfzn/Flask_Sample -https://github.com/zmrfzn/Flask_Sample -Entry file: Flask_Sample/app.py -Scanned: 2016-10-25 23:33:12.403893 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -JesseLabruyere/flask_api -https://github.com/JesseLabruyere/flask_api -Entry file: flask_api/flask_project/routes.py -Scanned: 2016-10-25 23:33:16.825883 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_api/flask_project/venv/lib/python2.7/sre_compile.py - -butovichev/flask-blog -https://github.com/butovichev/flask-blog -Entry file: None -Scanned: 2016-10-25 23:33:17.407059 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-25 23:33:19.119751 -No vulnerabilities found. - - -rholmes69/flasky2_1 -https://github.com/rholmes69/flasky2_1 -Entry file: flasky2_1/app/__init__.py -Scanned: 2016-10-25 23:33:20.740463 -Vulnerability 1: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flasky2_1/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flasky2_1/app/api_1_0/posts.py - > Line 16: prev = None - File: flasky2_1/app/api_1_0/posts.py - > Line 19: next = None -File: flasky2_1/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flasky2_1/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 20: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 23: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flasky2_1/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flasky2_1/app/api_1_0/users.py - > Line 42: prev = None - File: flasky2_1/app/api_1_0/users.py - > Line 45: next = None -File: flasky2_1/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 15: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 18: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flasky2_1/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flasky2_1/app/api_1_0/comments.py - > Line 43: prev = None - File: flasky2_1/app/api_1_0/comments.py - > Line 46: next = None -File: flasky2_1/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flasky2_1/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 55: posts = pagination.items - File: flasky2_1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flasky2_1/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 45: show_followed = False - File: flasky2_1/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flasky2_1/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 67: posts = pagination.items -File: flasky2_1/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flasky2_1/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flasky2_1/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 134: comments = pagination.items - File: flasky2_1/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flasky2_1/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flasky2_1/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flasky2_1/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flasky2_1/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flasky2_1/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flasky2_1/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flasky2_1/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flasky2_1/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flasky2_1/app/main/views.py - > Line 246: comments = pagination.items -File: flasky2_1/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-25 23:33:22.885009 -Vulnerability 1: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 31, trigger word "get(": - name = session.get('name', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - -Vulnerability 2: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 32, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - - - -jcerise/openspacesboard-python -https://github.com/jcerise/openspacesboard-python -Entry file: openspacesboard-python/osbp_app/openspacesboard.py -Scanned: 2016-10-25 23:33:25.348027 -Vulnerability 1: -File: openspacesboard-python/osbp_app/openspacesboard.py - > User input at line 44, trigger word "get(": - me = github.get('user') -Reassigned in: - File: openspacesboard-python/osbp_app/openspacesboard.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: openspacesboard-python/osbp_app/openspacesboard.py - > reaches line 45, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(me.data) - -Vulnerability 2: -File: openspacesboard-python/osbp_app/openspacesboard.py - > User input at line 69, trigger word "get(": - me = github.get('user') -Reassigned in: - File: openspacesboard-python/osbp_app/openspacesboard.py - > Line 64: ret_MAYBE_FUNCTION_NAME = 'Access denied: reason=%s error=%s' % (request.args['error'], request.args['error_description']) -File: openspacesboard-python/osbp_app/openspacesboard.py - > reaches line 70, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(me.data) - -Vulnerability 3: -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > User input at line 29, trigger word "get(": - space = ConferenceSpace.query.get(space_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > Line 32: space = dict(id=space.id, space_name=space.space_name, location_id=space.location_id, event_date=space.event_date, start_time=space.start_time, end_time=space.end_time) -File: openspacesboard-python/osbp_app/mod_spaces/controllers.py - > reaches line 34, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('space'space) - -Vulnerability 4: -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > User input at line 39, trigger word "get(": - session = ConferenceSession.query.get(session_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 42: session_space = session.space - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 43: session_location = session_space.location - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 44: timespan = 'start_time''end_time'session_space.start_timesession_space.end_time - File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > Line 45: session = dict(id=session.id, title=session.title, description=session.description, convener=session.convener, space_name=session_space.space_name, location=session_location.name, date=session_space.event_date, timespan=timespan) -File: openspacesboard-python/osbp_app/mod_conference_sessions/controllers.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('session'session) - -Vulnerability 5: -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > User input at line 27, trigger word "get(": - location = ConferenceLocation.query.get(location_id) -Reassigned in: - File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > Line 30: location = dict(id=location.id, name=location.name) -File: openspacesboard-python/osbp_app/mod_locations/controllers.py - > reaches line 31, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('location'location) - - - -icecraft/ZhiHuDaemon -https://github.com/icecraft/ZhiHuDaemon -Entry file: ZhiHuDaemon/app/__init__.py -Scanned: 2016-10-25 23:33:26.954768 -Vulnerability 1: -File: ZhiHuDaemon/app/main/views.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 16: pagination = Question.query.order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 19: questions = pagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',questions=questions, pagination=pagination) - -Vulnerability 2: -File: ZhiHuDaemon/app/main/views.py - > User input at line 26, trigger word "form[": - keyword = '%' + request.form['search'] + '%' -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 30, trigger word "filter(": - pagination = Question.query.filter(Question.title.like(keyword)).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - -Vulnerability 3: -File: ZhiHuDaemon/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 33: questions = pagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 30, trigger word "filter(": - pagination = Question.query.filter(Question.title.like(keyword)).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['INDEX_QUESTIONS_PER_PAGE'], error_out=False) - -Vulnerability 4: -File: ZhiHuDaemon/app/main/views.py - > User input at line 26, trigger word "form[": - keyword = '%' + request.form['search'] + '%' -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',questions=questions, pagination=pagination, keyword=keyword[1-1]) - -Vulnerability 5: -File: ZhiHuDaemon/app/main/views.py - > User input at line 29, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 33: questions = pagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = render_template('search.html') - File: ZhiHuDaemon/app/main/views.py - > Line 28: ret_MAYBE_FUNCTION_NAME = render_template('search.html') -File: ZhiHuDaemon/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search.html',questions=questions, pagination=pagination, keyword=keyword[1-1]) - -Vulnerability 6: -File: ZhiHuDaemon/app/main/views.py - > User input at line 100, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 101: askpagination = Question.query.filter_by(author_id=user.id).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 104: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 105: page = request.args.get('page', 1,type=int) - File: ZhiHuDaemon/app/main/views.py - > Line 106: anspagination = Answer.query.filter_by(author_id=user.id).order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 109: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 110: answers = anspagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, questions=questions, answers=answers, askpagination=askpagination, anspagination=anspagination) - -Vulnerability 7: -File: ZhiHuDaemon/app/main/views.py - > User input at line 105, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 100: page = request.args.get('page', 1,type=int) - File: ZhiHuDaemon/app/main/views.py - > Line 101: askpagination = Question.query.filter_by(author_id=user.id).order_by(Question.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 104: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 106: anspagination = Answer.query.filter_by(author_id=user.id).order_by(Answer.timestamp.desc()).paginate(page,per_page=current_app.config['PROFILE_QUESTIONS_PER_PAGE'], error_out=False) - File: ZhiHuDaemon/app/main/views.py - > Line 109: questions = askpagination.items - File: ZhiHuDaemon/app/main/views.py - > Line 110: answers = anspagination.items -File: ZhiHuDaemon/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, questions=questions, answers=answers, askpagination=askpagination, anspagination=anspagination) - -Vulnerability 8: -File: ZhiHuDaemon/app/main/views.py - > User input at line 145, trigger word "get(": - answer_id = request.args.get('answer_id', -1,type=int) -Reassigned in: - File: ZhiHuDaemon/app/main/views.py - > Line 147: answer = Answer.query.filter_by(id=answer_id) - File: ZhiHuDaemon/app/main/views.py - > Line 150: answer = Answer(answer=answerForm.body.data, author=current_user._get_current_object(), authorname=current_user.username, question=question) - File: ZhiHuDaemon/app/main/views.py - > Line 159: comment = Comment(comment=commentForm.body.data, author=current_user._get_current_object(), authorname=current_user.username, answer=answer) - File: ZhiHuDaemon/app/main/views.py - > Line 155: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.question',id=id)) - File: ZhiHuDaemon/app/main/views.py - > Line 164: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.question',id=id)) -File: ZhiHuDaemon/app/main/views.py - > reaches line 168, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('question.html',question=question, asker=asker, answerForm=answerForm, answers=answers, comments=comments, commentForm=commentForm, answer_id=answer_id) - - - -AntonisFK/Login_registration_Flask -https://github.com/AntonisFK/Login_registration_Flask -Entry file: None -Scanned: 2016-10-25 23:33:28.233102 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AntonisFK/Login_registration_Flask. - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-25 23:33:31.699963 -Vulnerability 1: -File: micro-flask-blog/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 18: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 19: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 2: -File: micro-flask-blog/app/main/views.py - > User input at line 124, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 125: pagination = Post.query.filter_by(category_id=category_id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 126: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 127, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',posts=posts, pagination=pagination, username=username, category_id=category_id) - - - -jeseon/flask-by-example -https://github.com/jeseon/flask-by-example -Entry file: None -Scanned: 2016-10-25 23:33:33.090980 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jeseon/flask-by-example. - -maxidrum/Flask_and_Mongo -https://github.com/maxidrum/Flask_and_Mongo -Entry file: Flask_and_Mongo/application/__init__.py -Scanned: 2016-10-25 23:33:41.442168 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mdublin/Flask-SPA-API-Template -https://github.com/mdublin/Flask-SPA-API-Template -Entry file: Flask-SPA-API-Template/posts/__init__.py -Scanned: 2016-10-25 23:33:51.577406 -Vulnerability 1: -File: Flask-SPA-API-Template/posts/api.py - > User input at line 32, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: Flask-SPA-API-Template/posts/api.py - > Line 37: posts = posts.order_by(models.Post.id) - File: Flask-SPA-API-Template/posts/api.py - > Line 47: data = json.dumps([post.as_dictionary() for post in posts]) - File: Flask-SPA-API-Template/posts/api.py - > Line 50: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: Flask-SPA-API-Template/posts/api.py - > Line 34: posts = session.query(models.Post) -File: Flask-SPA-API-Template/posts/api.py - > reaches line 36, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - - - -keimos/flask-rest-sql -https://github.com/keimos/flask-rest-sql -Entry file: flask-rest-sql/app.py -Scanned: 2016-10-25 23:33:52.942154 -No vulnerabilities found. - - -jeffreybergman/flask-hello-world -https://github.com/jeffreybergman/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:33:53.460965 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zolaneta/todo_flask_application -https://github.com/zolaneta/todo_flask_application -Entry file: None -Scanned: 2016-10-25 23:33:55.235529 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/todo_flask_application. - -baskervilski/flask-hello-world -https://github.com/baskervilski/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:33:55.804687 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bbouley/flask-by-example -https://github.com/Bbouley/flask-by-example -Entry file: None -Scanned: 2016-10-25 23:33:59.336547 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Bbouley/flask-by-example. - -wilbert-abreu/realtime_slack_flask_app -https://github.com/wilbert-abreu/realtime_slack_flask_app -Entry file: None -Scanned: 2016-10-25 23:34:05.596249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ellachao/Flask_GmailAPI_Example -https://github.com/ellachao/Flask_GmailAPI_Example -Entry file: Flask_GmailAPI_Example/main.py -Scanned: 2016-10-25 23:34:06.918626 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -NJIT-SIG-WEBDEV/Flask-URL-Shortner -https://github.com/NJIT-SIG-WEBDEV/Flask-URL-Shortner -Entry file: Flask-URL-Shortner/app.py -Scanned: 2016-10-25 23:34:08.474827 -Vulnerability 1: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "url_for(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - -Vulnerability 2: -File: Flask-URL-Shortner/app.py - > User input at line 30, trigger word ".data": - site_id = mongo.db.links.find_one_or_404('url'form.url.data)['site_id'] -Reassigned in: - File: Flask-URL-Shortner/app.py - > Line 33: site_id = '' - File: Flask-URL-Shortner/app.py - > Line 35: site_id += random.choice(string.ascii_letters) - File: Flask-URL-Shortner/app.py - > Line 37: data = 'site_id''url'site_idform.url.data -File: Flask-URL-Shortner/app.py - > reaches line 43, trigger word "flash(": - flash('URL created! {0} redirects to {1}.'.format(url_for('homepage',_external=True) + site_id, form.url.data)) - - - -hilmarh/island-python-flask-example -https://github.com/hilmarh/island-python-flask-example -Entry file: island-python-flask-example/app/__init__.py -Scanned: 2016-10-25 23:34:09.908854 -No vulnerabilities found. - - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-25 23:34:11.220611 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-25 23:34:12.532676 -No vulnerabilities found. - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-25 23:34:14.101622 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -marcabomb/flask_hello_world -https://github.com/marcabomb/flask_hello_world -Entry file: flask_hello_world/app.py -Scanned: 2016-10-25 23:34:18.260453 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kevin-js/azure-flask-tutorial -https://github.com/kevin-js/azure-flask-tutorial -Entry file: azure-flask-tutorial/run.py -Scanned: 2016-10-25 23:34:19.610496 -No vulnerabilities found. - - -ShawnPengxy/Flask-madeBlog -https://github.com/ShawnPengxy/Flask-madeBlog -Entry file: Flask-madeBlog/app/__init__.py -Scanned: 2016-10-25 23:34:25.275745 -Vulnerability 1: -File: Flask-madeBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-madeBlog/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: Flask-madeBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-madeBlog/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: Flask-madeBlog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 16: prev = None - File: Flask-madeBlog/app/api_1_0/posts.py - > Line 19: next = None -File: Flask-madeBlog/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 23: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 23: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 23: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 45: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 45: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: Flask-madeBlog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: Flask-madeBlog/app/api_1_0/users.py - > Line 42: prev = None - File: Flask-madeBlog/app/api_1_0/users.py - > Line 45: next = None -File: Flask-madeBlog/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: Flask-madeBlog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 43: prev = None - File: Flask-madeBlog/app/api_1_0/comments.py - > Line 46: next = None -File: Flask-madeBlog/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: Flask-madeBlog/app/main/views.py - > User input at line 48, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 56: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 59: posts = pagination.items - File: Flask-madeBlog/app/main/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-madeBlog/app/main/views.py - > reaches line 60, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: Flask-madeBlog/app/main/views.py - > User input at line 51, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 49: show_followed = False - File: Flask-madeBlog/app/main/views.py - > Line 47: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-madeBlog/app/main/views.py - > reaches line 60, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: Flask-madeBlog/app/main/views.py - > User input at line 67, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 68: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 71: posts = pagination.items -File: Flask-madeBlog/app/main/views.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: Flask-madeBlog/app/main/views.py - > User input at line 131, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 133: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Flask-madeBlog/app/main/views.py - > Line 135: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 138: comments = pagination.items - File: Flask-madeBlog/app/main/views.py - > Line 130: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Flask-madeBlog/app/main/views.py - > reaches line 139, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: Flask-madeBlog/app/main/views.py - > User input at line 198, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 199: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 202: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Flask-madeBlog/app/main/views.py - > Line 197: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-madeBlog/app/main/views.py - > reaches line 204, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: Flask-madeBlog/app/main/views.py - > User input at line 215, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 216: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 219: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Flask-madeBlog/app/main/views.py - > Line 214: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-madeBlog/app/main/views.py - > reaches line 221, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: Flask-madeBlog/app/main/views.py - > User input at line 246, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-madeBlog/app/main/views.py - > Line 247: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Flask-madeBlog/app/main/views.py - > Line 250: comments = pagination.items -File: Flask-madeBlog/app/main/views.py - > reaches line 251, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -vinayraghavan/pyacacemy-flask-workshop -https://github.com/vinayraghavan/pyacacemy-flask-workshop -Entry file: pyacacemy-flask-workshop/bookmarks.py -Scanned: 2016-10-25 23:34:26.677815 -No vulnerabilities found. - - -drbrightside/first-flask-app -https://github.com/drbrightside/first-flask-app -Entry file: first-flask-app/flaskclass/app/__init__.py -Scanned: 2016-10-25 23:34:28.087854 -Vulnerability 1: -File: first-flask-app/flaskclass/app/views.py - > User input at line 38, trigger word ".data": - numbers = form.numbers.data -Reassigned in: - File: first-flask-app/flaskclass/app/views.py - > Line 48: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) - File: first-flask-app/flaskclass/app/views.py - > Line 50: ret_MAYBE_FUNCTION_NAME = render_template('get_lucky.html',form=form) -File: first-flask-app/flaskclass/app/views.py - > reaches line 45, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('game.html',game_nums=game_nums, player_nums=numbers, wins=wins) - - - -D10221/gae_flask_ndb_test -https://github.com/D10221/gae_flask_ndb_test -Entry file: gae_flask_ndb_test/main.py -Scanned: 2016-10-25 23:34:29.421872 -No vulnerabilities found. - - -micahcourey/FirstFlaskApp -https://github.com/micahcourey/FirstFlaskApp -Entry file: FirstFlaskApp/flask_app.py -Scanned: 2016-10-25 23:34:30.692394 -No vulnerabilities found. - - -commandknight/cs125-fooddy-flask -https://github.com/commandknight/cs125-fooddy-flask -Entry file: cs125-fooddy-flask/fooddy2.py -Scanned: 2016-10-25 23:34:33.093528 -Vulnerability 1: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 177, trigger word "get(": - long = request.form.get('current_location_longitude') -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 195: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 185, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) - -Vulnerability 2: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 178, trigger word "get(": - lat = request.form.get('current_location_latitude') -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 195: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 185, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) - -Vulnerability 3: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 191, trigger word "form[": - a1 = request.form['addressline1'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - -Vulnerability 4: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 192, trigger word "form[": - city = request.form['addresscity'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - -Vulnerability 5: -File: cs125-fooddy-flask/fooddy2.py - > User input at line 193, trigger word "form[": - state = request.form['addressstate'] -Reassigned in: - File: cs125-fooddy-flask/fooddy2.py - > Line 194: address = a1 + ' ' + city + ' ' + state - File: cs125-fooddy-flask/fooddy2.py - > Line 206: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(session['lat'], session['long'])]), next_location=location) - File: cs125-fooddy-flask/fooddy2.py - > Line 185: ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine(current_user.get_id(),coords=[(lat, long)])) -File: cs125-fooddy-flask/fooddy2.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('recommended.html',list_results=ranker.get_ranking_by_probabilistic_cosine_by_address(current_user.get_id(),address=address)) - - - -GreenDragonSoft/flask-heroku-template -https://github.com/GreenDragonSoft/flask-heroku-template -Entry file: flask-heroku-template/app.py -Scanned: 2016-10-25 23:34:34.487981 -No vulnerabilities found. - - -rfmapp/TheFlaskMegaTutorial -https://github.com/rfmapp/TheFlaskMegaTutorial -Entry file: TheFlaskMegaTutorial/app/__init__.py -Scanned: 2016-10-25 23:34:42.899789 -No vulnerabilities found. - - -JadyLiu/flask -https://github.com/JadyLiu/flask -Entry file: None -Scanned: 2016-10-25 23:34:45.139914 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -candyer/Flask -https://github.com/candyer/Flask -Entry file: None -Scanned: 2016-10-25 23:34:45.668659 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -scripterkaran/flask -https://github.com/scripterkaran/flask -Entry file: None -Scanned: 2016-10-25 23:34:46.188953 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -itsrifat/flask-celery-docker-scale -https://github.com/itsrifat/flask-celery-docker-scale -Entry file: flask-celery-docker-scale/flask-app/app.py -Scanned: 2016-10-25 23:34:47.516138 -No vulnerabilities found. - - -sinscary/Flask-Social-Networking -https://github.com/sinscary/Flask-Social-Networking -Entry file: Flask-Social-Networking/app.py -Scanned: 2016-10-25 23:34:49.453598 -Vulnerability 1: -File: Flask-Social-Networking/app.py - > User input at line 111, trigger word "get(": - user = models.User.select().where(models.User.username ** username).get() -Reassigned in: - File: Flask-Social-Networking/app.py - > Line 118: user = current_user -File: Flask-Social-Networking/app.py - > reaches line 121, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template(template,stream=stream, user=user) - -Vulnerability 2: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 146, trigger word "flash(": - flash('You are now following {}'.format(to_user.username), 'success') - -Vulnerability 3: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 4: -File: Flask-Social-Networking/app.py - > User input at line 134, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 147, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 5: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 165, trigger word "flash(": - flash('You have unfollowed {}'.format(to_user.username), 'success') - -Vulnerability 6: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - -Vulnerability 7: -File: Flask-Social-Networking/app.py - > User input at line 153, trigger word "get(": - to_user = models.User.get(models.User.username ** username) -File: Flask-Social-Networking/app.py - > reaches line 166, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('stream',username=to_user.username)) - - - -osuosl/timesync-frontend-flask -https://github.com/osuosl/timesync-frontend-flask -Entry file: None -Scanned: 2016-10-25 23:34:53.025441 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/osuosl/timesync-frontend-flask. - -narakai/flaskblog -https://github.com/narakai/flaskblog -Entry file: None -Scanned: 2016-10-25 23:34:53.544711 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/narakai/flaskblog. - -josepablob/flasktaskr -https://github.com/josepablob/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:34:54.080532 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: None -Scanned: 2016-10-25 23:34:56.610239 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adrianneperedo/flaskr. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: None -Scanned: 2016-10-25 23:35:00.128268 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mirukushake/flaskr. - -wangduanyang/flasky -https://github.com/wangduanyang/flasky -Entry file: None -Scanned: 2016-10-25 23:35:00.656921 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -darrenhankins/flaskr -https://github.com/darrenhankins/flaskr -Entry file: None -Scanned: 2016-10-25 23:35:06.179211 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/darrenhankins/flaskr. - -Looncall/Flaskr -https://github.com/Looncall/Flaskr -Entry file: None -Scanned: 2016-10-25 23:35:07.729775 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -CBR09/flaskapp -https://github.com/CBR09/flaskapp -Entry file: None -Scanned: 2016-10-25 23:35:09.234873 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/CBR09/flaskapp. - -czy1238677/flasky -https://github.com/czy1238677/flasky -Entry file: None -Scanned: 2016-10-25 23:35:10.826726 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -marcabomb/flasktaskr -https://github.com/marcabomb/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:35:12.378619 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jeffreybergman/flasktaskr -https://github.com/jeffreybergman/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:35:13.915078 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Pink-Moon/flaskr -https://github.com/Pink-Moon/flaskr -Entry file: None -Scanned: 2016-10-25 23:35:15.434102 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Pink-Moon/flaskr. - -mcmcgonagle/flasktaskr2 -https://github.com/mcmcgonagle/flasktaskr2 -Entry file: flasktaskr2/project/views.py -Scanned: 2016-10-25 23:35:16.791659 -No vulnerabilities found. - - -AlexFransis/FlaskyProject -https://github.com/AlexFransis/FlaskyProject -Entry file: FlaskyProject/app/__init__.py -Scanned: 2016-10-25 23:35:20.429513 -No vulnerabilities found. - - -AlexGrek/FlaskLib -https://github.com/AlexGrek/FlaskLib -Entry file: FlaskLib/FlaskLib/FlaskLib/__init__.py -Scanned: 2016-10-25 23:35:22.958483 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -daveweber/FlaskBar -https://github.com/daveweber/FlaskBar -Entry file: FlaskBar/index.py -Scanned: 2016-10-25 23:35:27.312679 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -danleyb2/flaskMe -https://github.com/danleyb2/flaskMe -Entry file: flaskMe/flaskREST.py -Scanned: 2016-10-25 23:35:28.621591 -Vulnerability 1: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 2: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 76, trigger word "execute(": - db.execute('INSERT INTO cars (name, color) VALUES (?,?)', [name, color]) - -Vulnerability 3: -File: flaskMe/flaskREST.py - > User input at line 73, trigger word "get(": - name = data.get('name') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - -Vulnerability 4: -File: flaskMe/flaskREST.py - > User input at line 74, trigger word "get(": - color = data.get('color') -Reassigned in: - File: flaskMe/flaskREST.py - > Line 87: ret_MAYBE_FUNCTION_NAME = jsonify(entries) -File: flaskMe/flaskREST.py - > reaches line 78, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(dict(name=name, color=color)) - - - -Rikka-chan/flaskCharts -https://github.com/Rikka-chan/flaskCharts -Entry file: None -Scanned: 2016-10-25 23:35:29.150473 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bunkdeath/FlaskTemplate -https://github.com/bunkdeath/FlaskTemplate -Entry file: FlaskTemplate/application.py -Scanned: 2016-10-25 23:35:31.474827 -No vulnerabilities found. - - -zding5/FlaskDemo -https://github.com/zding5/FlaskDemo -Entry file: FlaskDemo/app/__init__.py -Scanned: 2016-10-25 23:36:03.730452 -No vulnerabilities found. - - -diggzhang/flaskMaze -https://github.com/diggzhang/flaskMaze -Entry file: None -Scanned: 2016-10-25 23:36:05.869240 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/diggzhang/flaskMaze. - -narakai/FlaskDemo -https://github.com/narakai/FlaskDemo -Entry file: FlaskDemo/flask_demo.py -Scanned: 2016-10-25 23:36:07.243514 -No vulnerabilities found. - - -deanmax/FlaskAPP -https://github.com/deanmax/FlaskAPP -Entry file: None -Scanned: 2016-10-25 23:36:07.826941 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hugoantunes/base-flask -https://github.com/hugoantunes/base-flask -Entry file: base-flask/service/__init__.py -Scanned: 2016-10-25 23:36:09.646435 -No vulnerabilities found. - - -haburibe/docker-flask -https://github.com/haburibe/docker-flask -Entry file: docker-flask/main.py -Scanned: 2016-10-25 23:36:10.973671 -No vulnerabilities found. - - -krisekenes/flask_deployment -https://github.com/krisekenes/flask_deployment -Entry file: flask_deployment/server.py -Scanned: 2016-10-25 23:36:12.381464 -No vulnerabilities found. - - -namickey/hello-flask -https://github.com/namickey/hello-flask -Entry file: hello-flask/main.py -Scanned: 2016-10-25 23:36:13.675637 -No vulnerabilities found. - - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: None -Scanned: 2016-10-25 23:36:14.199781 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-25 23:36:15.739367 -No vulnerabilities found. - - -timyi1212/flask-demo -https://github.com/timyi1212/flask-demo -Entry file: flask-demo/app.py -Scanned: 2016-10-25 23:36:17.076763 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-25 23:36:18.881025 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: None -Scanned: 2016-10-25 23:36:20.311999 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/crq/flask-scaffold. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-25 23:36:21.877496 -Vulnerability 1: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - -Vulnerability 2: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - - - -honmaple/flask-word -https://github.com/honmaple/flask-word -Entry file: flask-word/app/__init__.py -Scanned: 2016-10-25 23:36:23.690350 -Vulnerability 1: -File: flask-word/app/count/views.py - > User input at line 17, trigger word "cookies[": - count = int(request.cookies['count']) + 1 -Reassigned in: - File: flask-word/app/count/views.py - > Line 19: count = 0 - File: flask-word/app/count/views.py - > Line 20: response = make_response(str(count)) - File: flask-word/app/count/views.py - > Line 22: ret_MAYBE_FUNCTION_NAME = response -File: flask-word/app/count/views.py - > reaches line 21, trigger word "set_cookie(": - response.set_cookie('count',value=str(count), max_age=1800) - -Vulnerability 2: -File: flask-word/app/chat/views.py - > User input at line 38, trigger word "get(": - username = session.get('username', '') -Reassigned in: - File: flask-word/app/chat/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-word/app/chat/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat/chat.html',username=username, room=room) - -Vulnerability 3: -File: flask-word/app/chat/views.py - > User input at line 39, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: flask-word/app/chat/views.py - > Line 41: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-word/app/chat/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat/chat.html',username=username, room=room) - -Vulnerability 4: -File: flask-word/app/paginate/views.py - > User input at line 42, trigger word "get(": - page = is_num(request.args.get('page')) -Reassigned in: - File: flask-word/app/paginate/views.py - > Line 43: topics = Topic.query.paginate(page, app.config['PER_PAGE'],error_out=True) -File: flask-word/app/paginate/views.py - > reaches line 44, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('page/page.html',topics=topics) - - - -marcabomb/flask-blog -https://github.com/marcabomb/flask-blog -Entry file: None -Scanned: 2016-10-25 23:36:24.233420 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -studiomezklador/flask_api -https://github.com/studiomezklador/flask_api -Entry file: flask_api/boot.py -Scanned: 2016-10-25 23:36:25.560351 -No vulnerabilities found. - - -rinechran/flask-tutorial -https://github.com/rinechran/flask-tutorial -Entry file: None -Scanned: 2016-10-25 23:36:27.393352 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rinechran/flask-tutorial. - -bodzio2k/flask-blueprint -https://github.com/bodzio2k/flask-blueprint -Entry file: flask-blueprint/run.py -Scanned: 2016-10-25 23:36:29.237559 -No vulnerabilities found. - - -PeachDew/flask_tutorialwebapp -https://github.com/PeachDew/flask_tutorialwebapp -Entry file: flask_tutorialwebapp/app.py -Scanned: 2016-10-25 23:36:34.279626 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -jordo1ken/flask-fibonacci -https://github.com/jordo1ken/flask-fibonacci -Entry file: flask-fibonacci/Fibonacci.py -Scanned: 2016-10-25 23:36:35.639263 -No vulnerabilities found. - - -Kriordan/flask-blog -https://github.com/Kriordan/flask-blog -Entry file: None -Scanned: 2016-10-25 23:36:36.204314 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -a-r-g-v/flask-template -https://github.com/a-r-g-v/flask-template -Entry file: flask-template/app/__init__.py -Scanned: 2016-10-25 23:36:37.617034 -No vulnerabilities found. - - -Savvis/flask-phonebook -https://github.com/Savvis/flask-phonebook -Entry file: flask-phonebook/app/__init__.py -Scanned: 2016-10-25 23:36:39.098770 -No vulnerabilities found. - - -aksareen/Flask-learn -https://github.com/aksareen/Flask-learn -Entry file: Flask-learn/app.py -Scanned: 2016-10-25 23:36:40.885485 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -aqisnotliquid/flask_rpg -https://github.com/aqisnotliquid/flask_rpg -Entry file: flask_rpg/app/__init__.py -Scanned: 2016-10-25 23:36:42.326805 -No vulnerabilities found. - - -textbook/flask-forecaster -https://github.com/textbook/flask-forecaster -Entry file: flask-forecaster/flask_forecaster/flask_app.py -Scanned: 2016-10-25 23:36:43.878191 -Vulnerability 1: -File: flask-forecaster/flask_forecaster/flask_app.py - > User input at line 34, trigger word ".data": - token = form.token.data -Reassigned in: - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 36: projects = Tracker.validate_token(token) - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 38: session['token'] = token - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 46: ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, version=__version__) -File: flask-forecaster/flask_forecaster/flask_app.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, projects=projects, version=__version__) - -Vulnerability 2: -File: flask-forecaster/flask_forecaster/flask_app.py - > User input at line 52, trigger word "get(": - token = session.get('token') -Reassigned in: - File: flask-forecaster/flask_forecaster/flask_app.py - > Line 55: api = Tracker(token) -File: flask-forecaster/flask_forecaster/flask_app.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('project.html',project=api.get_project(project_id)) - - - -nava45/flask-routelogger -https://github.com/nava45/flask-routelogger -Entry file: flask-routelogger/flask_app_example.py -Scanned: 2016-10-25 23:36:45.309945 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -MattHealy/flask-skeleton -https://github.com/MattHealy/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-25 23:37:05.655557 -No vulnerabilities found. - - -Xavier-Lam/flask-wechat -https://github.com/Xavier-Lam/flask-wechat -Entry file: flask-wechat/demo.py -Scanned: 2016-10-25 23:37:08.420004 -No vulnerabilities found. - - -Ty-WDFW/Flask-Tickets -https://github.com/Ty-WDFW/Flask-Tickets -Entry file: Flask-Tickets/main.py -Scanned: 2016-10-25 23:37:09.749956 -Vulnerability 1: -File: Flask-Tickets/main.py - > User input at line 15, trigger word "form[": - fishticket = request.form['text'] -Reassigned in: - File: Flask-Tickets/main.py - > Line 16: response = get_fish_ticket(fishticket) -File: Flask-Tickets/main.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('bioinfo.html',entries=response, ticket=fishticket) - - - -makudesu/flask-thesis -https://github.com/makudesu/flask-thesis -Entry file: flask-thesis/bnhs.py -Scanned: 2016-10-25 23:37:11.673170 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ivanenko/flask-webcrawler -https://github.com/ivanenko/flask-webcrawler -Entry file: flask-webcrawler/ww2.py -Scanned: 2016-10-25 23:37:13.210278 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pyx/flask-simplemde -https://github.com/pyx/flask-simplemde -Entry file: flask-simplemde/examples/simple/app.py -Scanned: 2016-10-25 23:37:14.862723 -No vulnerabilities found. - - -kubabu/flask_blog -https://github.com/kubabu/flask_blog -Entry file: flask_blog/app.py -Scanned: 2016-10-25 23:37:17.073967 -Vulnerability 1: -File: flask_blog/views.py - > User input at line 50, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -Reassigned in: - File: flask_blog/views.py - > Line 52: next_url = '/drafts' - File: flask_blog/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=RegisterForm(), error=error) - File: flask_blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_blog/views.py - > reaches line 66, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 2: -File: flask_blog/views.py - > User input at line 50, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -Reassigned in: - File: flask_blog/views.py - > Line 52: next_url = '/drafts' - File: flask_blog/views.py - > Line 78: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=RegisterForm(), error=error) - File: flask_blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('login')) -File: flask_blog/views.py - > reaches line 66, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 3: -File: flask_blog/views.py - > User input at line 99, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -Reassigned in: - File: flask_blog/views.py - > Line 101: next_url = '/drafts' - File: flask_blog/views.py - > Line 118: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=LoginForm()) - File: flask_blog/views.py - > Line 89: ret_MAYBE_FUNCTION_NAME = redirect(url_for('register')) - File: flask_blog/views.py - > Line 93: ret_MAYBE_FUNCTION_NAME = redirect(url_for('drafts')) -File: flask_blog/views.py - > reaches line 112, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 4: -File: flask_blog/views.py - > User input at line 99, trigger word "get(": - next_url = request.args.get('next') or request.form.get('next') -Reassigned in: - File: flask_blog/views.py - > Line 101: next_url = '/drafts' - File: flask_blog/views.py - > Line 118: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=LoginForm()) - File: flask_blog/views.py - > Line 89: ret_MAYBE_FUNCTION_NAME = redirect(url_for('register')) - File: flask_blog/views.py - > Line 93: ret_MAYBE_FUNCTION_NAME = redirect(url_for('drafts')) -File: flask_blog/views.py - > reaches line 112, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next_url or url_for('index')) - -Vulnerability 5: -File: flask_blog/views.py - > User input at line 151, trigger word "get(": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 157, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 6: -File: flask_blog/views.py - > User input at line 151, trigger word "form[": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 157, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 7: -File: flask_blog/views.py - > User input at line 151, trigger word "get(": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 157, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 8: -File: flask_blog/views.py - > User input at line 151, trigger word "form[": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 157, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('detail',slug=entry.slug)) - -Vulnerability 9: -File: flask_blog/views.py - > User input at line 151, trigger word "get(": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 159, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - -Vulnerability 10: -File: flask_blog/views.py - > User input at line 151, trigger word "form[": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 159, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - -Vulnerability 11: -File: flask_blog/views.py - > User input at line 151, trigger word "get(": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 159, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - -Vulnerability 12: -File: flask_blog/views.py - > User input at line 151, trigger word "form[": - entry = Entry.create(title=request.form['title'], content=request.form['content'], published=request.form.get('published') or False) -Reassigned in: - File: flask_blog/views.py - > Line 162: ret_MAYBE_FUNCTION_NAME = render_template('create.html') -File: flask_blog/views.py - > reaches line 159, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('edit',slug=entry.slug)) - - - -MichaelDaniello/LearnFlask -https://github.com/MichaelDaniello/LearnFlask -Entry file: LearnFlask/cyoa/lib/python2.7/site-packages/flask/sessions.py -Scanned: 2016-10-25 23:37:22.008365 -No vulnerabilities found. - - -bplabombarda/fdr -https://github.com/bplabombarda/fdr -Entry file: fdr/server/__init__.py -Scanned: 2016-10-25 23:37:23.934689 -No vulnerabilities found. - - -metajemo/testapp -https://github.com/metajemo/testapp -Entry file: testapp/testapp.py -Scanned: 2016-10-25 23:37:25.256699 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -gzxultra/FlaskLoginManagement -https://github.com/gzxultra/FlaskLoginManagement -Entry file: FlaskLoginManagement/app/__init__.py -Scanned: 2016-10-25 23:37:27.188084 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -victorcuervo/FlaskMongoDB -https://github.com/victorcuervo/FlaskMongoDB -Entry file: FlaskMongoDB/welcome.py -Scanned: 2016-10-25 23:37:28.603431 -No vulnerabilities found. - - -ChellsChen/FlaskSocketIOChart -https://github.com/ChellsChen/FlaskSocketIOChart -Entry file: FlaskSocketIOChart/app/__init__.py -Scanned: 2016-10-25 23:37:30.234168 -Vulnerability 1: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 31, trigger word "get(": - name = session.get('name', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - -Vulnerability 2: -File: FlaskSocketIOChart/app/main/routes.py - > User input at line 32, trigger word "get(": - room = session.get('room', '') -Reassigned in: - File: FlaskSocketIOChart/app/main/routes.py - > Line 34: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskSocketIOChart/app/main/routes.py - > reaches line 35, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('chat.html',name=name, room=room) - - - -sasha42/Mailchimp-utility -https://github.com/sasha42/Mailchimp-utility -Entry file: None -Scanned: 2016-10-25 23:37:31.528054 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sasha42/Mailchimp-utility. - -auliude/flask_hello_world -https://github.com/auliude/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 23:37:35.160033 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yogeshdixit41/PyFlaskWebApp -https://github.com/yogeshdixit41/PyFlaskWebApp -Entry file: PyFlaskWebApp/hello.py -Scanned: 2016-10-25 23:37:38.948655 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: PyFlaskWebApp/venv/lib/python2.7/sre_compile.py - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-25 23:37:40.289174 -No vulnerabilities found. - - -liuenyan/micro-flask-blog -https://github.com/liuenyan/micro-flask-blog -Entry file: micro-flask-blog/app/__init__.py -Scanned: 2016-10-25 23:37:41.748837 -Vulnerability 1: -File: micro-flask-blog/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 18: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 19: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 20, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',posts=posts, pagination=pagination) - -Vulnerability 2: -File: micro-flask-blog/app/main/views.py - > User input at line 124, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: micro-flask-blog/app/main/views.py - > Line 125: pagination = Post.query.filter_by(category_id=category_id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: micro-flask-blog/app/main/views.py - > Line 126: posts = pagination.items -File: micro-flask-blog/app/main/views.py - > reaches line 127, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('category.html',posts=posts, pagination=pagination, username=username, category_id=category_id) - - - -rtorres90/rest-flask-tutorial -https://github.com/rtorres90/rest-flask-tutorial -Entry file: rest-flask-tutorial/rest_flask/endpointsproject3.py -Scanned: 2016-10-25 23:37:46.101684 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jz314/flask-demo-copy -https://github.com/jz314/flask-demo-copy -Entry file: None -Scanned: 2016-10-25 23:37:47.567003 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jz314/flask-demo-copy. - -willelson/flask-app-template -https://github.com/willelson/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-25 23:37:52.024156 -No vulnerabilities found. - - -acbart/lti-flask-skeleton -https://github.com/acbart/lti-flask-skeleton -Entry file: lti-flask-skeleton/main.py -Scanned: 2016-10-25 23:37:53.516094 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -GreatBedAwake/flask_lab_web -https://github.com/GreatBedAwake/flask_lab_web -Entry file: flask_lab_web/app/__init__.py -Scanned: 2016-10-25 23:37:54.949158 -Vulnerability 1: -File: flask_lab_web/app/views.py - > User input at line 46, trigger word "form[": - find_component = request.form['find_component'] -Reassigned in: - File: flask_lab_web/app/views.py - > Line 47: dates = select_where_db(find_component) - File: flask_lab_web/app/views.py - > Line 54: dates = select_data() - File: flask_lab_web/app/views.py - > Line 56: dates = select_data() -File: flask_lab_web/app/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',component=dates) - - - -Derfirm/hello-docker-flask -https://github.com/Derfirm/hello-docker-flask -Entry file: hello-docker-flask/app.py -Scanned: 2016-10-25 23:37:56.262321 -No vulnerabilities found. - - -arvvvs/Flask-Practice-Metis-Delivery -https://github.com/arvvvs/Flask-Practice-Metis-Delivery -Entry file: Flask-Practice-Metis-Delivery/app.py -Scanned: 2016-10-25 23:37:58.355550 -Vulnerability 1: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 30, trigger word "form(": - form = request_phone_form() -Reassigned in: - File: Flask-Practice-Metis-Delivery/app.py - > Line 32: session['phone'] = form.phone.data - File: Flask-Practice-Metis-Delivery/app.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('lookup')) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form) - -Vulnerability 2: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 57, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 3: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 59, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 65, trigger word "execute(": - cur.execute('INSERT INTO tbl_deliveries (customer_name, delivery_status, customer_address, delivery_person) VALUES("' + name + '", "' + status + '","' + address + '","' + driver + '");') - -Vulnerability 4: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 127, trigger word "form[": - _phone = request.form['submitPhone'] -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 128, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('lookup.html',phone=_phone) - -Vulnerability 5: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 148, trigger word "get(": - phone = request.args.get('phone', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 6: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 149, trigger word "get(": - name = request.args.get('name', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 7: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 150, trigger word "get(": - address = request.args.get('address', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - -Vulnerability 8: -File: Flask-Practice-Metis-Delivery/app.py - > User input at line 151, trigger word "get(": - phone_value = request.args.get('phone_value', 0,type=str) -File: Flask-Practice-Metis-Delivery/app.py - > reaches line 154, trigger word "execute(": - cur.execute('UPDATE tbl_customer_info SET name="' + name + '", address="' + address + '",phone_number = "' + phone + '" WHERE phone_number = "' + phone_value + '"') - - - -jideobs/flask-gae-ndb-starter -https://github.com/jideobs/flask-gae-ndb-starter -Entry file: flask-gae-ndb-starter/server/main.py -Scanned: 2016-10-25 23:38:00.037804 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mml1/flask_multiple_forms -https://github.com/mml1/flask_multiple_forms -Entry file: flask_multiple_forms/server.py -Scanned: 2016-10-25 23:38:01.438306 -No vulnerabilities found. - - -dv3/sample-Flask-Application -https://github.com/dv3/sample-Flask-Application -Entry file: None -Scanned: 2016-10-25 23:38:01.983433 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dv3/sample-Flask-Application. - -blackmad/flask-google-login-example -https://github.com/blackmad/flask-google-login-example -Entry file: flask-google-login-example/main.py -Scanned: 2016-10-25 23:38:06.414134 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Tim9Liu9/Flask_Bootstrap_Blog -https://github.com/Tim9Liu9/Flask_Bootstrap_Blog -Entry file: Flask_Bootstrap_Blog/doc/app.py -Scanned: 2016-10-25 23:38:09.109493 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-25 23:38:11.253045 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/knight-zhou/Web.py_Flask. - -DEV3L/openshift-python-flask-example -https://github.com/DEV3L/openshift-python-flask-example -Entry file: openshift-python-flask-example/wsgi/run.py -Scanned: 2016-10-25 23:38:12.697688 -No vulnerabilities found. - - -nosuchip/flask-video-streaming -https://github.com/nosuchip/flask-video-streaming -Entry file: flask-video-streaming/main.py -Scanned: 2016-10-25 23:38:14.588338 -No vulnerabilities found. - - -cerealcake/flask-ldap3 -https://github.com/cerealcake/flask-ldap3 -Entry file: flask-ldap3/app.py -Scanned: 2016-10-25 23:38:15.892656 -No vulnerabilities found. - - -VistaarJ/REST-API-Using-Flask- -https://github.com/VistaarJ/REST-API-Using-Flask- -Entry file: REST-API-Using-Flask-/app.py -Scanned: 2016-10-25 23:38:20.251310 -No vulnerabilities found. - - -n-batalha/flask-api-template -https://github.com/n-batalha/flask-api-template -Entry file: flask-api-template/web/journey_predict/__init__.py -Scanned: 2016-10-25 23:38:21.671449 -No vulnerabilities found. - - -willelson/flask-login-template -https://github.com/willelson/flask-login-template -Entry file: flask-login-template/app/__init__.py -Scanned: 2016-10-25 23:38:27.019436 -No vulnerabilities found. - - -zolaneta/books_flask_app -https://github.com/zolaneta/books_flask_app -Entry file: None -Scanned: 2016-10-25 23:38:28.900405 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zolaneta/books_flask_app. - -Anivarth/quiz-python-flask -https://github.com/Anivarth/quiz-python-flask -Entry file: quiz-python-flask/quiz.py -Scanned: 2016-10-25 23:38:30.214591 -No vulnerabilities found. - - -richyvk/flask-url-shortener -https://github.com/richyvk/flask-url-shortener -Entry file: flask-url-shortener/app.py -Scanned: 2016-10-25 23:38:31.872255 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zbc/Flask -https://github.com/zbc/Flask -Entry file: None -Scanned: 2016-10-25 23:38:34.366536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -cobra0914/flask -https://github.com/cobra0914/flask -Entry file: None -Scanned: 2016-10-25 23:38:34.869945 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -susantshrestha/flask -https://github.com/susantshrestha/flask -Entry file: None -Scanned: 2016-10-25 23:38:36.403247 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SunchunZhou/flask -https://github.com/SunchunZhou/flask -Entry file: None -Scanned: 2016-10-25 23:38:40.008830 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-25 23:38:44.442809 -No vulnerabilities found. - - -k-hung/FlaskApp -https://github.com/k-hung/FlaskApp -Entry file: FlaskApp/FeelsApp/__init__.py -Scanned: 2016-10-25 23:38:49.579341 -No vulnerabilities found. - - -yoshiya0503/Flask-Best-Practices -https://github.com/yoshiya0503/Flask-Best-Practices -Entry file: Flask-Best-Practices/methodview.py -Scanned: 2016-10-25 23:38:50.904651 -No vulnerabilities found. - - -ThunderousFigs/Genomes -https://github.com/ThunderousFigs/Genomes -Entry file: Genomes/server.py -Scanned: 2016-10-25 23:39:03.881296 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Python-Project-Simple/flask-blog -https://github.com/Python-Project-Simple/flask-blog -Entry file: None -Scanned: 2016-10-25 23:39:05.428143 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -adrianneperedo/flaskr -https://github.com/adrianneperedo/flaskr -Entry file: None -Scanned: 2016-10-25 23:39:05.944521 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/adrianneperedo/flaskr. - -mirukushake/flaskr -https://github.com/mirukushake/flaskr -Entry file: None -Scanned: 2016-10-25 23:39:06.454136 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mirukushake/flaskr. - -schen2011/flaskandazure -https://github.com/schen2011/flaskandazure -Entry file: flaskandazure/FlaskWebProject3/FlaskWebProject3/__init__.py -Scanned: 2016-10-25 23:39:08.605681 -No vulnerabilities found. - - -DXZ/flaskr -https://github.com/DXZ/flaskr -Entry file: None -Scanned: 2016-10-25 23:39:09.139123 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DXZ/flaskr. - -tim1978/flasktaskr -https://github.com/tim1978/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:39:09.678210 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -keer2345/flasky -https://github.com/keer2345/flasky -Entry file: None -Scanned: 2016-10-25 23:39:10.195297 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PansFortress/flasktasker -https://github.com/PansFortress/flasktasker -Entry file: flasktasker/views.py -Scanned: 2016-10-25 23:39:11.658058 -No vulnerabilities found. - - -olegzhoglo/flasktaskr -https://github.com/olegzhoglo/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:39:12.171829 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Kriordan/flasktaskr -https://github.com/Kriordan/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:39:13.678748 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/app/__init__.py -Scanned: 2016-10-25 23:39:21.416440 -No vulnerabilities found. - - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-25 23:39:24.830268 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -liteng123/flaskr -https://github.com/liteng123/flaskr -Entry file: None -Scanned: 2016-10-25 23:39:25.398094 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/liteng123/flaskr. - -salazar35/FlaskWeb -https://github.com/salazar35/FlaskWeb -Entry file: FlaskWeb/Flask Web Development.py -Scanned: 2016-10-25 23:39:26.686224 -No vulnerabilities found. - - -pchartrand/FlaskTemp -https://github.com/pchartrand/FlaskTemp -Entry file: FlaskTemp/tempreport.py -Scanned: 2016-10-25 23:39:29.460548 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -hattwick/flask2 -https://github.com/hattwick/flask2 -Entry file: flask2/flask2mod-template.py -Scanned: 2016-10-25 23:39:32.371182 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -narakai/FlaskServer -https://github.com/narakai/FlaskServer -Entry file: FlaskServer/flaskServer.py -Scanned: 2016-10-25 23:39:33.764558 -No vulnerabilities found. - - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/app/__init__.py -Scanned: 2016-10-25 23:39:35.284808 -Vulnerability 1: -File: FlaskBlog/app/main/views.py - > User input at line 20, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 21: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 24: posts = pagination.items - File: FlaskBlog/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: FlaskBlog/app/main/views.py - > User input at line 32, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 33: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 36: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -julywoo/flaskWeb -https://github.com/julywoo/flaskWeb -Entry file: flaskWeb/flaskWeb.py -Scanned: 2016-10-25 23:39:37.164342 -No vulnerabilities found. - - -tmlima/flask-intro -https://github.com/tmlima/flask-intro -Entry file: flask-intro/project/__init__.py -Scanned: 2016-10-25 23:39:41.250489 -No vulnerabilities found. - - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/flask_mongo/server.py -Scanned: 2016-10-25 23:39:42.559125 -No vulnerabilities found. - - -mmingle/flask-blog -https://github.com/mmingle/flask-blog -Entry file: None -Scanned: 2016-10-25 23:39:43.072217 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -justinwp/flask-urs -https://github.com/justinwp/flask-urs -Entry file: flask-urs/tests/conftest.py -Scanned: 2016-10-25 23:39:44.591753 -No vulnerabilities found. - - -SawHigh/flask_cdn -https://github.com/SawHigh/flask_cdn -Entry file: flask_cdn/cdn.py -Scanned: 2016-10-25 23:39:45.874521 -No vulnerabilities found. - - -crq/flask-scaffold -https://github.com/crq/flask-scaffold -Entry file: None -Scanned: 2016-10-25 23:39:47.426715 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/crq/flask-scaffold. - -asielen/Woodles_Flask -https://github.com/asielen/Woodles_Flask -Entry file: Woodles_Flask/app/__init__.py -Scanned: 2016-10-25 23:39:51.985714 -Vulnerability 1: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - -Vulnerability 2: -File: Woodles_Flask/app/views/app_views.py - > User input at line 22, trigger word "get(": - current_card = Card.query.get(card_id) -File: Woodles_Flask/app/views/app_views.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('card',card_id=current_card.id_string)) - - - -amitbn/flask-docker -https://github.com/amitbn/flask-docker -Entry file: flask-docker/app.py -Scanned: 2016-10-25 23:40:05.855696 -No vulnerabilities found. - - -julywoo/flask_login -https://github.com/julywoo/flask_login -Entry file: None -Scanned: 2016-10-25 23:40:06.894315 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/julywoo/flask_login. - -LovroM/Flask-test -https://github.com/LovroM/Flask-test -Entry file: Flask-test/webserver.py -Scanned: 2016-10-25 23:40:08.732177 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-25 23:40:10.028498 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -OpenTrons/labsuite_flask -https://github.com/OpenTrons/labsuite_flask -Entry file: labsuite_flask/app.py -Scanned: 2016-10-25 23:40:12.057944 -No vulnerabilities found. - - -YaGiNA/study-flask -https://github.com/YaGiNA/study-flask -Entry file: study-flask/flaskr/__init__.py -Scanned: 2016-10-25 23:40:14.850987 -No vulnerabilities found. - - -seanhelm/flask-test -https://github.com/seanhelm/flask-test -Entry file: flask-test/app/__init__.py -Scanned: 2016-10-25 23:40:16.140327 -No vulnerabilities found. - - -Viredery/python_flask -https://github.com/Viredery/python_flask -Entry file: python_flask/hello.py -Scanned: 2016-10-25 23:40:17.861728 -No vulnerabilities found. - - -josanabr/flask-vbox -https://github.com/josanabr/flask-vbox -Entry file: flask-vbox/flask-vbox.py -Scanned: 2016-10-25 23:40:19.164406 -No vulnerabilities found. - - -simeon-xx/simeon-flask -https://github.com/simeon-xx/simeon-flask -Entry file: simeon-flask/app/init.py -Scanned: 2016-10-25 23:40:20.495908 -No vulnerabilities found. - - -cherry-hyx/flask_t -https://github.com/cherry-hyx/flask_t -Entry file: None -Scanned: 2016-10-25 23:40:21.908130 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cherry-hyx/flask_t. - -abcsds/flask-tests -https://github.com/abcsds/flask-tests -Entry file: flask-tests/flaskr/flaskr.py -Scanned: 2016-10-25 23:40:23.458250 -No vulnerabilities found. - - -tanzhixu/Flask-oauth -https://github.com/tanzhixu/Flask-oauth -Entry file: Flask-oauth/app/__init__.py -Scanned: 2016-10-25 23:40:27.316197 -Vulnerability 1: -File: Flask-oauth/app/user_manager_views.py - > User input at line 32, trigger word "get(": - password = request.json.get('password', None) -Reassigned in: - File: Flask-oauth/app/user_manager_views.py - > Line 38: newpasswd = pwd_context.encrypt(password) -File: Flask-oauth/app/user_manager_views.py - > reaches line 41, trigger word "filter(": - query.filter(User.id == userid).update(User.password_hashnewpasswd) - - - -brandonfujii/flask-microblog -https://github.com/brandonfujii/flask-microblog -Entry file: None -Scanned: 2016-10-25 23:40:27.840553 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/brandonfujii/flask-microblog. - -dylannnnn/flask_study -https://github.com/dylannnnn/flask_study -Entry file: flask_study/views.py -Scanned: 2016-10-25 23:40:29.293667 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -huasu/InstantFlask -https://github.com/huasu/InstantFlask -Entry file: InstantFlask/app_return_values.py -Scanned: 2016-10-25 23:40:31.865496 -No vulnerabilities found. - - -maricante/flask-blog -https://github.com/maricante/flask-blog -Entry file: None -Scanned: 2016-10-25 23:40:32.406762 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-25 23:40:33.691394 -No vulnerabilities found. - - -ysicing/Pangu -https://github.com/ysicing/Pangu -Entry file: Pangu/Pangu.py -Scanned: 2016-10-25 23:40:49.728954 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -rbcolson9/flask4kids -https://github.com/rbcolson9/flask4kids -Entry file: flask4kids/hello.py -Scanned: 2016-10-25 23:40:51.072244 -No vulnerabilities found. - - -charlestondance/FlaskStartUp -https://github.com/charlestondance/FlaskStartUp -Entry file: FlaskStartUp/app/__init__.py -Scanned: 2016-10-25 23:40:52.521911 -No vulnerabilities found. - - -erik-farmer/flask-auth-wysiwyg-blog -https://github.com/erik-farmer/flask-auth-wysiwyg-blog -Entry file: flask-auth-wysiwyg-blog/app.py -Scanned: 2016-10-25 23:40:53.909175 -No vulnerabilities found. - - -guilleJB/flask-web-book -https://github.com/guilleJB/flask-web-book -Entry file: flask-web-book/hello.py -Scanned: 2016-10-25 23:40:55.330972 -Vulnerability 1: -File: flask-web-book/hello.py - > User input at line 120, trigger word ".data": - name = form.name.data -Reassigned in: - File: flask-web-book/hello.py - > Line 117: name = None -File: flask-web-book/hello.py - > reaches line 122, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('boots.html',name=name, form=form) - - - -dongheelee1/simple_flask_wall -https://github.com/dongheelee1/simple_flask_wall -Entry file: simple_flask_wall/server.py -Scanned: 2016-10-25 23:40:56.740665 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ynifamily3/CRUD-with-Flask-MVC -https://github.com/ynifamily3/CRUD-with-Flask-MVC -Entry file: CRUD-with-Flask-MVC/set_table.py -Scanned: 2016-10-25 23:40:58.218021 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-25 23:40:59.530834 -No vulnerabilities found. - - -mnzr/Flask-Blueprint-test -https://github.com/mnzr/Flask-Blueprint-test -Entry file: Flask-Blueprint-test/app/__init__.py -Scanned: 2016-10-25 23:41:00.848876 -Vulnerability 1: -File: Flask-Blueprint-test/app/users/views.py - > User input at line 33, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: Flask-Blueprint-test/app/users/views.py - > Line 38: session['user_id'] = user.id -File: Flask-Blueprint-test/app/users/views.py - > reaches line 39, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -znss1989/flask_blog_ex -https://github.com/znss1989/flask_blog_ex -Entry file: flask_blog_ex/blog.py -Scanned: 2016-10-25 23:41:02.407922 -No vulnerabilities found. - - -aquang9124/flask_semi_restful_routes -https://github.com/aquang9124/flask_semi_restful_routes -Entry file: flask_semi_restful_routes/server.py -Scanned: 2016-10-25 23:41:06.748247 -No vulnerabilities found. - - -PeggyZWY/blog-with-flask -https://github.com/PeggyZWY/blog-with-flask -Entry file: blog-with-flask/app/__init__.py -Scanned: 2016-10-25 23:41:08.755738 -Vulnerability 1: -File: blog-with-flask/app/main/views.py - > User input at line 186, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 189: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: blog-with-flask/app/main/views.py - > Line 192: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 195: comments = pagination.items - File: blog-with-flask/app/main/views.py - > Line 184: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id)) -File: blog-with-flask/app/main/views.py - > reaches line 204, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, categories=category, comments=comments, pagination=pagination) - -Vulnerability 2: -File: blog-with-flask/app/main/views.py - > User input at line 293, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 294: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 298: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: blog-with-flask/app/main/views.py - > Line 291: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: blog-with-flask/app/main/views.py - > reaches line 301, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='他们关注了', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 3: -File: blog-with-flask/app/main/views.py - > User input at line 311, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 312: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 315: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: blog-with-flask/app/main/views.py - > Line 310: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: blog-with-flask/app/main/views.py - > reaches line 317, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='关注了他们', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 4: -File: blog-with-flask/app/main/views.py - > User input at line 349, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 350: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 353: comments = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 354, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - -Vulnerability 5: -File: blog-with-flask/app/main/views.py - > User input at line 431, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 452: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 456: posts = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 460, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('article.html',posts=posts, categories=category, show_followed=show_followed, pagination=pagination) - -Vulnerability 6: -File: blog-with-flask/app/main/views.py - > User input at line 471, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: blog-with-flask/app/main/views.py - > Line 475: pagination = Post.query.filter_by(category_id=_category.id).order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: blog-with-flask/app/main/views.py - > Line 478: posts = pagination.items -File: blog-with-flask/app/main/views.py - > reaches line 482, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('article.html',posts=posts, categories=category, show_followed=show_followed, pagination=pagination) - - - -TwilioDevEd/browser-calls-flask -https://github.com/TwilioDevEd/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-25 23:41:11.177937 -No vulnerabilities found. - - -terryllowery/flask-hello-world -https://github.com/terryllowery/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:41:12.221270 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aquang9124/flask_wall_test -https://github.com/aquang9124/flask_wall_test -Entry file: flask_wall_test/server.py -Scanned: 2016-10-25 23:41:13.543876 -No vulnerabilities found. - - -ynejati/MyFlaskApp -https://github.com/ynejati/MyFlaskApp -Entry file: MyFlaskApp/MyFlaskWebApp.py -Scanned: 2016-10-25 23:41:14.954289 -No vulnerabilities found. - - -TheCypher/flask-boiler-plate -https://github.com/TheCypher/flask-boiler-plate -Entry file: flask-boiler-plate/app/__init__.py -Scanned: 2016-10-25 23:41:16.348550 -Vulnerability 1: -File: flask-boiler-plate/app/module_one/views.py - > User input at line 30, trigger word ".data": - user = User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: flask-boiler-plate/app/module_one/views.py - > Line 34: session['user_id'] = user.id -File: flask-boiler-plate/app/module_one/views.py - > reaches line 36, trigger word "flash(": - flash('Welcome %s' % user.name) - - - -TheCypher/flask-api-test -https://github.com/TheCypher/flask-api-test -Entry file: flask-api-test/api.py -Scanned: 2016-10-25 23:41:20.114275 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-api-test/lib/python2.7/sre_compile.py - -vstanev1/heroku-flask-app -https://github.com/vstanev1/heroku-flask-app -Entry file: heroku-flask-app/app.py -Scanned: 2016-10-25 23:41:22.027918 -No vulnerabilities found. - - -bellcodo/bellcodo-flask-microblog -https://github.com/bellcodo/bellcodo-flask-microblog -Entry file: bellcodo-flask-microblog/app/__init__.py -Scanned: 2016-10-25 23:41:23.864442 -No vulnerabilities found. - - -megrela/python-flask-skeleton -https://github.com/megrela/python-flask-skeleton -Entry file: None -Scanned: 2016-10-25 23:41:25.170257 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/megrela/python-flask-skeleton. - -plablo09/minimal-flask-dev -https://github.com/plablo09/minimal-flask-dev -Entry file: minimal-flask-dev/hello.py -Scanned: 2016-10-25 23:41:26.460475 -No vulnerabilities found. - - -knight-zhou/Web.py_Flask -https://github.com/knight-zhou/Web.py_Flask -Entry file: None -Scanned: 2016-10-25 23:41:27.543176 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shyba/browser-calls-flask -https://github.com/shyba/browser-calls-flask -Entry file: browser-calls-flask/browser_calls_flask/__init__.py -Scanned: 2016-10-25 23:41:28.834959 -No vulnerabilities found. - - -jdgramajo/LearningFlaskFramework -https://github.com/jdgramajo/LearningFlaskFramework -Entry file: LearningFlaskFramework/blog/app/app.py -Scanned: 2016-10-25 23:41:30.141717 -No vulnerabilities found. - - -liuer99cn/awesome-flask-todo -https://github.com/liuer99cn/awesome-flask-todo -Entry file: awesome-flask-todo/app.py -Scanned: 2016-10-25 23:41:32.438078 -No vulnerabilities found. - - -seiya-tsukada/instant_flask_server -https://github.com/seiya-tsukada/instant_flask_server -Entry file: instant_flask_server/main.py -Scanned: 2016-10-25 23:41:33.746580 -No vulnerabilities found. - - -Journo-App/flask-by-example -https://github.com/Journo-App/flask-by-example -Entry file: None -Scanned: 2016-10-25 23:41:34.315104 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Journo-App/flask-by-example. - -bobquest33/testRestFlask -https://github.com/bobquest33/testRestFlask -Entry file: testRestFlask/testRestFlask/testRestFlask/apps/testRest/models.py -Scanned: 2016-10-25 23:41:36.740895 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jjapp/flask-hello-world -https://github.com/jjapp/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:41:51.266993 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -snehasankavaram/donorRegistryFlask -https://github.com/snehasankavaram/donorRegistryFlask -Entry file: donorRegistryFlask/run.py -Scanned: 2016-10-25 23:41:52.581513 -No vulnerabilities found. - - -ayusharma/Drug-discovery-flask -https://github.com/ayusharma/Drug-discovery-flask -Entry file: Drug-discovery-flask/app.py -Scanned: 2016-10-25 23:41:53.897898 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -vishaljain3991/flask_oauth_example_template -https://github.com/vishaljain3991/flask_oauth_example_template -Entry file: flask_oauth_example_template/app/__init__.py -Scanned: 2016-10-25 23:41:57.874968 -No vulnerabilities found. - - -F483/flask-data-migration-example -https://github.com/F483/flask-data-migration-example -Entry file: flask-data-migration-example/app.py -Scanned: 2016-10-25 23:41:59.208025 -No vulnerabilities found. - - -studiomezklador/flask_api_2 -https://github.com/studiomezklador/flask_api_2 -Entry file: flask_api_2/__init__.py -Scanned: 2016-10-25 23:42:00.664601 -No vulnerabilities found. - - -SarthakS93/Flask-WebApp -https://github.com/SarthakS93/Flask-WebApp -Entry file: Flask-WebApp/app/__init__.py -Scanned: 2016-10-25 23:42:02.365033 -No vulnerabilities found. - - -dorneanu/flask-app-template -https://github.com/dorneanu/flask-app-template -Entry file: flask-app-template/app/__init__.py -Scanned: 2016-10-25 23:42:03.677410 -No vulnerabilities found. - - -aquang9124/flask_friends_full -https://github.com/aquang9124/flask_friends_full -Entry file: flask_friends_full/server.py -Scanned: 2016-10-25 23:42:04.986020 -No vulnerabilities found. - - -huasu/LearningFlaskFramework -https://github.com/huasu/LearningFlaskFramework -Entry file: LearningFlaskFramework/hello.py -Scanned: 2016-10-25 23:42:07.286545 -No vulnerabilities found. - - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-25 23:42:10.183442 -No vulnerabilities found. - - -ZhenghaoZhu/Flask -https://github.com/ZhenghaoZhu/Flask -Entry file: None -Scanned: 2016-10-25 23:42:11.710102 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -octt/flask -https://github.com/octt/flask -Entry file: None -Scanned: 2016-10-25 23:42:12.251612 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Bwooklyn/flask -https://github.com/Bwooklyn/flask -Entry file: None -Scanned: 2016-10-25 23:42:12.764850 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: None -Scanned: 2016-10-25 23:42:14.303283 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pavelrib/flask -https://github.com/pavelrib/flask -Entry file: None -Scanned: 2016-10-25 23:42:15.864361 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -SeanVaysburd/flask -https://github.com/SeanVaysburd/flask -Entry file: None -Scanned: 2016-10-25 23:42:17.404072 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kartheek3011/Flask -https://github.com/kartheek3011/Flask -Entry file: None -Scanned: 2016-10-25 23:42:20.931408 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -TerbiumLabs/flask-developer-challenge -https://github.com/TerbiumLabs/flask-developer-challenge -Entry file: flask-developer-challenge/gistapi/gistapi.py -Scanned: 2016-10-25 23:42:24.339711 -No vulnerabilities found. - - -w84miracle/flask-sb-admin2 -https://github.com/w84miracle/flask-sb-admin2 -Entry file: flask-sb-admin2/sbadmin.py -Scanned: 2016-10-25 23:42:26.376555 -No vulnerabilities found. - - -sunscrapers/flask-boilerplate -https://github.com/sunscrapers/flask-boilerplate -Entry file: None -Scanned: 2016-10-25 23:42:26.925242 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sunscrapers/flask-boilerplate. - -jabbalaci/DigitalOceanFlask -https://github.com/jabbalaci/DigitalOceanFlask -Entry file: DigitalOceanFlask/home/demo/projects/ave_caesar/main.py -Scanned: 2016-10-25 23:42:28.330175 -No vulnerabilities found. - - -pyx/flask-diced -https://github.com/pyx/flask-diced -Entry file: flask-diced/examples/simple/app.py -Scanned: 2016-10-25 23:42:29.737793 -No vulnerabilities found. - - -basco-johnkevin/note-taking-app -https://github.com/basco-johnkevin/note-taking-app -Entry file: note-taking-app/part2/main.py -Scanned: 2016-10-25 23:42:31.051648 -No vulnerabilities found. - - -Miserlou/serverless-imagehost -https://github.com/Miserlou/serverless-imagehost -Entry file: serverless-imagehost/my_app.py -Scanned: 2016-10-25 23:42:32.347536 -No vulnerabilities found. - - -zhangyuhaomei/flasky -https://github.com/zhangyuhaomei/flasky -Entry file: None -Scanned: 2016-10-25 23:42:32.878855 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hellohuangjin/flaskblog -https://github.com/hellohuangjin/flaskblog -Entry file: None -Scanned: 2016-10-25 23:42:33.388905 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hellohuangjin/flaskblog. - -coolmile23/flaskr -https://github.com/coolmile23/flaskr -Entry file: None -Scanned: 2016-10-25 23:42:34.906373 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/coolmile23/flaskr. - -MRamakri/flaskworkshop -https://github.com/MRamakri/flaskworkshop -Entry file: flaskworkshop/app.py -Scanned: 2016-10-25 23:42:37.214616 -No vulnerabilities found. - - -imhuwq/flasky -https://github.com/imhuwq/flasky -Entry file: None -Scanned: 2016-10-25 23:42:51.761861 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -antonsoroko/flaskapimongo -https://github.com/antonsoroko/flaskapimongo -Entry file: flaskapimongo/flaskapimongo/__init__.py -Scanned: 2016-10-25 23:42:53.206251 -No vulnerabilities found. - - -haoweibo1987/flasker -https://github.com/haoweibo1987/flasker -Entry file: flasker/app/__init__.py -Scanned: 2016-10-25 23:43:02.253845 -No vulnerabilities found. - - -egonvb/flaskplayground -https://github.com/egonvb/flaskplayground -Entry file: flaskplayground/api.py -Scanned: 2016-10-25 23:43:08.140634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhkmxx9302013/flaskmysql -https://github.com/zhkmxx9302013/flaskmysql -Entry file: flaskmysql/flaskmysql.py -Scanned: 2016-10-25 23:43:09.513149 -No vulnerabilities found. - - -xiaomao361/flaskr -https://github.com/xiaomao361/flaskr -Entry file: None -Scanned: 2016-10-25 23:43:10.028724 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiaomao361/flaskr. - -alvaro893/flaskcinemaapp -https://github.com/alvaro893/flaskcinemaapp -Entry file: flaskcinemaapp/FlaskWebProject/__init__.py -Scanned: 2016-10-25 23:43:11.902610 -No vulnerabilities found. - - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: None -Scanned: 2016-10-25 23:43:12.414459 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yuyiwei305/flaskr. - -uklineale/flaskTut -https://github.com/uklineale/flaskTut -Entry file: None -Scanned: 2016-10-25 23:43:13.952897 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saurabh1e/FlaskStructure -https://github.com/saurabh1e/FlaskStructure -Entry file: FlaskStructure/src/utils/__init__.py -Scanned: 2016-10-25 23:43:15.383674 -No vulnerabilities found. - - -retozero/FlaskDemo -https://github.com/retozero/FlaskDemo -Entry file: FlaskDemo/flaskr/flaskr.py -Scanned: 2016-10-25 23:43:16.790604 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zupeiza/FlaskTaskr -https://github.com/zupeiza/FlaskTaskr -Entry file: None -Scanned: 2016-10-25 23:43:17.363784 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zupeiza/FlaskTaskr. - -yxun/FlaskSample -https://github.com/yxun/FlaskSample -Entry file: FlaskSample/url_building.py -Scanned: 2016-10-25 23:43:18.668471 -No vulnerabilities found. - - -paoloo1995/FlaskBlog -https://github.com/paoloo1995/FlaskBlog -Entry file: FlaskBlog/app/__init__.py -Scanned: 2016-10-25 23:43:20.149380 -Vulnerability 1: -File: FlaskBlog/app/main/views.py - > User input at line 20, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 21: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 24: posts = pagination.items - File: FlaskBlog/app/main/views.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: FlaskBlog/app/main/views.py - > User input at line 32, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 33: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 36: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 37, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -DearX-dlx/FlaskBlog -https://github.com/DearX-dlx/FlaskBlog -Entry file: FlaskBlog/FlaskBlog.py -Scanned: 2016-10-25 23:43:21.475497 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sourcelair-blueprints/flask-mongo -https://github.com/sourcelair-blueprints/flask-mongo -Entry file: flask-mongo/flask_mongo/server.py -Scanned: 2016-10-25 23:43:22.749764 -No vulnerabilities found. - - -sohje/__flask_psgr -https://github.com/sohje/__flask_psgr -Entry file: __flask_psgr/app.py -Scanned: 2016-10-25 23:43:24.054859 -No vulnerabilities found. - - -farridav/flask_friends -https://github.com/farridav/flask_friends -Entry file: flask_friends/src/friends/__init__.py -Scanned: 2016-10-25 23:43:25.598591 -No vulnerabilities found. - - -gh-tcbd/flask-test -https://github.com/gh-tcbd/flask-test -Entry file: flask-test/hello.py -Scanned: 2016-10-25 23:43:26.944897 -No vulnerabilities found. - - -doubtingben/flask-jobs -https://github.com/doubtingben/flask-jobs -Entry file: flask-jobs/code/web.py -Scanned: 2016-10-25 23:43:28.230751 -No vulnerabilities found. - - -askewseth/StatsFlask -https://github.com/askewseth/StatsFlask -Entry file: StatsFlask/run.py -Scanned: 2016-10-25 23:43:30.022428 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -BlackMud/flask_blog -https://github.com/BlackMud/flask_blog -Entry file: flask_blog/app/__init__.py -Scanned: 2016-10-25 23:43:31.790234 -Vulnerability 1: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 19: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 19: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: flask_blog/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: flask_blog/app/api_1_0/posts.py - > Line 16: prev = None - File: flask_blog/app/api_1_0/posts.py - > Line 19: next = None -File: flask_blog/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: flask_blog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 20: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 23: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: flask_blog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 20: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 23: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: flask_blog/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 20: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 23: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: flask_blog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 42: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 45: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: flask_blog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 42: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 45: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: flask_blog/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: flask_blog/app/api_1_0/users.py - > Line 42: prev = None - File: flask_blog/app/api_1_0/users.py - > Line 45: next = None -File: flask_blog/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: flask_blog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 18: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: flask_blog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 18: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: flask_blog/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 15: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 18: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: flask_blog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 46: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: flask_blog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 46: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: flask_blog/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: flask_blog/app/api_1_0/comments.py - > Line 43: prev = None - File: flask_blog/app/api_1_0/comments.py - > Line 46: next = None -File: flask_blog/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: flask_blog/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 52: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 55: posts = pagination.items - File: flask_blog/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: flask_blog/app/main/views.py - > User input at line 47, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 45: show_followed = False - File: flask_blog/app/main/views.py - > Line 43: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: flask_blog/app/main/views.py - > User input at line 63, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 64: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 67: posts = pagination.items -File: flask_blog/app/main/views.py - > reaches line 68, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: flask_blog/app/main/views.py - > User input at line 127, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 129: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flask_blog/app/main/views.py - > Line 131: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 134: comments = pagination.items - File: flask_blog/app/main/views.py - > Line 126: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask_blog/app/main/views.py - > reaches line 135, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: flask_blog/app/main/views.py - > User input at line 194, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 195: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 198: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_blog/app/main/views.py - > Line 193: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 200, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: flask_blog/app/main/views.py - > User input at line 211, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 212: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 215: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_blog/app/main/views.py - > Line 210: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_blog/app/main/views.py - > reaches line 217, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: flask_blog/app/main/views.py - > User input at line 242, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_blog/app/main/views.py - > Line 243: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flask_blog/app/main/views.py - > Line 246: comments = pagination.items -File: flask_blog/app/main/views.py - > reaches line 247, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -bzerroug/flask_appbuilder -https://github.com/bzerroug/flask_appbuilder -Entry file: flask_appbuilder/meteo/__init__.py -Scanned: 2016-10-25 23:43:33.358555 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhkmxx9302013/RPiFlask -https://github.com/zhkmxx9302013/RPiFlask -Entry file: RPiFlask/main.py -Scanned: 2016-10-25 23:43:34.658838 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tahoe/flask-restless -https://github.com/tahoe/flask-restless -Entry file: flask-restless/tests/helpers.py -Scanned: 2016-10-25 23:43:36.777417 -No vulnerabilities found. - - -PavelMPD/flask_oauth -https://github.com/PavelMPD/flask_oauth -Entry file: flask_oauth/server.py -Scanned: 2016-10-25 23:43:38.066277 -No vulnerabilities found. - - -doubtingben/flask-mongo -https://github.com/doubtingben/flask-mongo -Entry file: flask-mongo/code/tumblelog/__init__.py -Scanned: 2016-10-25 23:43:39.477253 -No vulnerabilities found. - - -hoikin-yiu/flask-blog -https://github.com/hoikin-yiu/flask-blog -Entry file: None -Scanned: 2016-10-25 23:43:39.998689 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Cloudwick-BT/flask_project -https://github.com/Cloudwick-BT/flask_project -Entry file: flask_project/hello.py -Scanned: 2016-10-25 23:43:53.347153 -No vulnerabilities found. - - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: None -Scanned: 2016-10-25 23:43:53.863799 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -g-rich/flask-blog -https://github.com/g-rich/flask-blog -Entry file: None -Scanned: 2016-10-25 23:43:54.388400 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/blog/__init__.py -Scanned: 2016-10-25 23:44:03.871786 -No vulnerabilities found. - - -chensdream/learn-flask -https://github.com/chensdream/learn-flask -Entry file: None -Scanned: 2016-10-25 23:44:09.445062 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -coolmile23/flask_practice -https://github.com/coolmile23/flask_practice -Entry file: None -Scanned: 2016-10-25 23:44:17.333565 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -k9luo/Flask-Tutorial -https://github.com/k9luo/Flask-Tutorial -Entry file: Flask-Tutorial/microblog-version-0.10/app/__init__.py -Scanned: 2016-10-25 23:44:24.871458 -No vulnerabilities found. - - -Harry-Yao/learn-flask -https://github.com/Harry-Yao/learn-flask -Entry file: None -Scanned: 2016-10-25 23:44:25.503462 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -danleyb2/flask-cloudinary -https://github.com/danleyb2/flask-cloudinary -Entry file: None -Scanned: 2016-10-25 23:44:26.015627 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danleyb2/flask-cloudinary. - -juan-castano/todo-flask -https://github.com/juan-castano/todo-flask -Entry file: todo-flask/app.py -Scanned: 2016-10-25 23:44:27.331178 -No vulnerabilities found. - - -mullaned/Flask-Test -https://github.com/mullaned/Flask-Test -Entry file: Flask-Test/flask_test.py -Scanned: 2016-10-25 23:44:28.675178 -Vulnerability 1: -File: Flask-Test/flask_test.py - > User input at line 13, trigger word "get(": - age = ages.get(user) -File: Flask-Test/flask_test.py - > reaches line 14, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('users.html',user=user, age=age) - - - -zupeiza/flask-blog -https://github.com/zupeiza/flask-blog -Entry file: None -Scanned: 2016-10-25 23:44:29.193144 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -shopetan/flask-api -https://github.com/shopetan/flask-api -Entry file: None -Scanned: 2016-10-25 23:44:29.705152 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shopetan/flask-api. - -jungkoo/flask-dmango -https://github.com/jungkoo/flask-dmango -Entry file: flask-dmango/sample/blueprint_find.py -Scanned: 2016-10-25 23:44:31.141741 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -raghureddyram/flask-hello -https://github.com/raghureddyram/flask-hello -Entry file: flask-hello/hello_world.py -Scanned: 2016-10-25 23:44:32.435927 -No vulnerabilities found. - - -hrushikesh198/flask-server -https://github.com/hrushikesh198/flask-server -Entry file: None -Scanned: 2016-10-25 23:44:32.965794 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hrushikesh198/flask-server. - -omarkurt/flask-injection -https://github.com/omarkurt/flask-injection -Entry file: flask-injection/index.py -Scanned: 2016-10-25 23:44:35.257675 -No vulnerabilities found. - - -Datalker/Flask_sandbox -https://github.com/Datalker/Flask_sandbox -Entry file: Flask_sandbox/hello.py -Scanned: 2016-10-25 23:44:36.674368 -No vulnerabilities found. - - -getsentry/demo-flask -https://github.com/getsentry/demo-flask -Entry file: demo-flask/app.py -Scanned: 2016-10-25 23:44:38.958011 -No vulnerabilities found. -An Error occurred while scanning the repo: 'Node' object has no attribute 'first_statement' - -technocake/flask-eksempel -https://github.com/technocake/flask-eksempel -Entry file: flask-eksempel/webserver.py -Scanned: 2016-10-25 23:44:40.271863 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wkzhu/flask_example -https://github.com/wkzhu/flask_example -Entry file: None -Scanned: 2016-10-25 23:44:41.964027 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/wkzhu/flask_example. - -rgsingh/flask-timetrack -https://github.com/rgsingh/flask-timetrack -Entry file: flask-timetrack/app/__init__.py -Scanned: 2016-10-25 23:44:43.357404 -Vulnerability 1: -File: flask-timetrack/app/views.py - > User input at line 29, trigger word "get(": - taskid = request.args.get('id') -Reassigned in: - File: flask-timetrack/app/views.py - > Line 33: filtered_task = [x for x in tasks_file] - File: flask-timetrack/app/views.py - > Line 35: task = json.dumps(filtered_task) -File: flask-timetrack/app/views.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('edittask.html',taskid=taskid, task=task) - - - -pultitom/study-flask -https://github.com/pultitom/study-flask -Entry file: study-flask/microblog/app/__init__.py -Scanned: 2016-10-25 23:44:44.675856 -No vulnerabilities found. - - -StarsHu/ll-flask -https://github.com/StarsHu/ll-flask -Entry file: ll-flask/LikeLines/server.py -Scanned: 2016-10-25 23:44:46.114986 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-25 23:44:46.659879 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morphee31/flask_example. - -wumb0/flask-examples -https://github.com/wumb0/flask-examples -Entry file: flask-examples/bitly/app/__init__.py -Scanned: 2016-10-25 23:44:48.454325 -Vulnerability 1: -File: flask-examples/bitly/app/views/main.py - > User input at line 19, trigger word ".data": - suffix = form.suffix.data -Reassigned in: - File: flask-examples/bitly/app/views/main.py - > Line 24: suffix = tmp - File: flask-examples/bitly/app/views/main.py - > Line 42: link = Link(suffix=suffix, link=form.link.data, expiry=expiry) - File: flask-examples/bitly/app/views/main.py - > Line 25: link = Link.query.filter_by(suffix=suffix).first() -File: flask-examples/bitly/app/views/main.py - > reaches line 47, trigger word "flash(": - flash('Your link is {}://{}/{}'.format(u.scheme, u.netloc, suffix),category='good') - - - -vladimirdotk/flask-boilerplate -https://github.com/vladimirdotk/flask-boilerplate -Entry file: None -Scanned: 2016-10-25 23:44:54.471311 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vladimirdotk/flask-boilerplate. - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-25 23:44:55.956975 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ramwin/flask_tutorial -https://github.com/ramwin/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:45:10.008558 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ramwin/flask_tutorial. - -christopherL91/pythonflask -https://github.com/christopherL91/pythonflask -Entry file: pythonflask/app/main.py -Scanned: 2016-10-25 23:45:12.342404 -No vulnerabilities found. - - -f-guitart/progcoms3-flask -https://github.com/f-guitart/progcoms3-flask -Entry file: progcoms3-flask/app.py -Scanned: 2016-10-25 23:45:19.572903 -Vulnerability 1: -File: progcoms3-flask/app.py - > User input at line 73, trigger word "get(": - zone = request.form.get('area') -Reassigned in: - File: progcoms3-flask/app.py - > Line 75: zone_data = get_zone_data(zone) - File: progcoms3-flask/app.py - > Line 71: zone_data = [] -File: progcoms3-flask/app.py - > reaches line 76, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('zone_data_table.html',zone_data=zone_data, zones=zones) - - - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-25 23:45:30.467342 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/sre_compile.py - -jackeylu/microblog -https://github.com/jackeylu/microblog -Entry file: None -Scanned: 2016-10-25 23:45:31.026061 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jackeylu/microblog. - -garaud/pyris -https://github.com/garaud/pyris -Entry file: pyris/pyris/api/__init__.py -Scanned: 2016-10-25 23:45:32.609690 -No vulnerabilities found. - - -nicc777/flask-webservice-wsgi-python3-demo -https://github.com/nicc777/flask-webservice-wsgi-python3-demo -Entry file: flask-webservice-wsgi-python3-demo/fwsdemo/app.py -Scanned: 2016-10-25 23:45:34.030047 -No vulnerabilities found. - - -MicahSteinbrecher/mini-blog -https://github.com/MicahSteinbrecher/mini-blog -Entry file: mini-blog/flaskr.py -Scanned: 2016-10-25 23:45:35.839145 -No vulnerabilities found. - - -remarcbalisi/rest-demo-flask- -https://github.com/remarcbalisi/rest-demo-flask- -Entry file: rest-demo-flask-/app.py -Scanned: 2016-10-25 23:45:37.580959 -No vulnerabilities found. - - -duncan60/flask-github-api -https://github.com/duncan60/flask-github-api -Entry file: flask-github-api/app/__init__.py -Scanned: 2016-10-25 23:45:38.895769 -No vulnerabilities found. - - -mattvisco/flask_test_2 -https://github.com/mattvisco/flask_test_2 -Entry file: flask_test_2/insta.py -Scanned: 2016-10-25 23:45:40.332269 -No vulnerabilities found. - - -pavelchalyk/blackjack_on_flask -https://github.com/pavelchalyk/blackjack_on_flask -Entry file: blackjack_on_flask/blackjack.py -Scanned: 2016-10-25 23:45:41.643115 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -merryHunter/chat-flask-socketio -https://github.com/merryHunter/chat-flask-socketio -Entry file: chat-flask-socketio/chat.py -Scanned: 2016-10-25 23:45:47.312254 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:45:47.928046 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sd16spring/Toolbox-Flask -https://github.com/sd16spring/Toolbox-Flask -Entry file: Toolbox-Flask/hello.py -Scanned: 2016-10-25 23:45:51.623039 -No vulnerabilities found. - - -HRKpython/flask -https://github.com/HRKpython/flask -Entry file: None -Scanned: 2016-10-25 23:45:52.172810 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bsteinberg/flask -https://github.com/bsteinberg/flask -Entry file: None -Scanned: 2016-10-25 23:45:52.679903 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ninadmhatre/zual -https://github.com/ninadmhatre/zual -Entry file: zual/local_mods/flask-blogging/flask_blogging/engine.py -Scanned: 2016-10-25 23:45:55.503281 -Vulnerability 1: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 104, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 106: meta = _get_meta(storage, count, page) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 107: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 111: posts = storage.get_posts(count=count, offset=offset, include_draft=False, tag=None, user_id=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 115, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 2: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 141, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 142: meta = _get_meta(storage, count, page,tag=tag) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 143: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 147: posts = storage.get_posts(count=count, offset=offset, tag=tag, include_draft=False, user_id=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 3: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 159, trigger word "get(": - count = count or config.get('BLOGGING_POSTS_PER_PAGE', 10) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 160: meta = _get_meta(storage, count, page,user_id=user_id) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 161: offset = meta['offset'] - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 164: posts = storage.get_posts(count=count, offset=offset, user_id=user_id, include_draft=False, tag=None, recent=True) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 172, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blogging/index.html',posts=posts, meta=meta, config=config) - -Vulnerability 4: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 199, trigger word ".data": - slug = post_processor.create_slug(form.title.data) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 204: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 214: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 220: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 224: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 200, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.page_by_id',post_id=pid, slug=slug)) - -Vulnerability 5: -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > User input at line 199, trigger word ".data": - slug = post_processor.create_slug(form.title.data) -Reassigned in: - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 204: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 214: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 220: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 224: ret_MAYBE_FUNCTION_NAME = render_template('blogging/editor.html',form=form, post_id=post_id, config=config) - File: zual/local_mods/flask-blogging/flask_blogging/views.py - > Line 228: ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.index',post_id=None)) -File: zual/local_mods/flask-blogging/flask_blogging/views.py - > reaches line 200, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('blogging.page_by_id',post_id=pid, slug=slug)) - - - -taogeT/flask-celery -https://github.com/taogeT/flask-celery -Entry file: flask-celery/example/app/__init__.py -Scanned: 2016-10-25 23:45:56.958816 -No vulnerabilities found. - - -frankV/flask-sendgrid -https://github.com/frankV/flask-sendgrid -Entry file: flask-sendgrid/setup.py -Scanned: 2016-10-25 23:45:58.252627 -No vulnerabilities found. - - -gyonghua/flasktaskr -https://github.com/gyonghua/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:45:58.782933 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Rothschild0120/flaskyblog -https://github.com/Rothschild0120/flaskyblog -Entry file: flaskyblog/app/__init__.py -Scanned: 2016-10-25 23:46:00.666745 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -islandev/flaskweb -https://github.com/islandev/flaskweb -Entry file: None -Scanned: 2016-10-25 23:46:01.217316 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yuyiwei305/flaskr -https://github.com/yuyiwei305/flaskr -Entry file: None -Scanned: 2016-10-25 23:46:01.754498 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yuyiwei305/flaskr. - -stalwart201/flaskimgupload -https://github.com/stalwart201/flaskimgupload -Entry file: flaskimgupload/upload.py -Scanned: 2016-10-25 23:46:03.217039 -Vulnerability 1: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - -Vulnerability 2: -File: flaskimgupload/upload.py - > User input at line 19, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: flaskimgupload/upload.py - > Line 21: filename = secure_filename(file.filename) - File: flaskimgupload/upload.py - > Line 25: ret_MAYBE_FUNCTION_NAME = ' - - Upload new File -

Upload new File

-
-

- -

- ' -File: flaskimgupload/upload.py - > reaches line 23, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('uploaded_file',filename=filename)) - - - -zixuzhang/flasky -https://github.com/zixuzhang/flasky -Entry file: None -Scanned: 2016-10-25 23:46:03.783766 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: None -Scanned: 2016-10-25 23:46:10.301180 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -azureappserviceoss/FlaskAzure -https://github.com/azureappserviceoss/FlaskAzure -Entry file: FlaskAzure/FlaskWebProject1/__init__.py -Scanned: 2016-10-25 23:46:20.523675 -No vulnerabilities found. - - -yhappy/FlaskProjects -https://github.com/yhappy/FlaskProjects -Entry file: FlaskProjects/FlaskProjects.py -Scanned: 2016-10-25 23:46:27.880363 -No vulnerabilities found. - - -tajihiro/FlaskBluemix -https://github.com/tajihiro/FlaskBluemix -Entry file: FlaskBluemix/index.py -Scanned: 2016-10-25 23:46:32.203790 -No vulnerabilities found. - - -Leyawiin/FlaskDemo -https://github.com/Leyawiin/FlaskDemo -Entry file: FlaskDemo/app/__init__.py -Scanned: 2016-10-25 23:46:34.137264 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -KotiyaSenya/FlaskLearn -https://github.com/KotiyaSenya/FlaskLearn -Entry file: FlaskLearn/flask_learn/__init__.py -Scanned: 2016-10-25 23:46:35.599607 -Vulnerability 1: -File: FlaskLearn/flask_learn/main/views/index.py - > User input at line 10, trigger word "get(": - user_agent = request.headers.get('User-Agent') -File: FlaskLearn/flask_learn/main/views/index.py - > reaches line 11, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',user_agent=user_agent, current_time=datetime.utcnow()) - - - -Patreon/cartographer -https://github.com/Patreon/cartographer -Entry file: cartographer/example/generic_social_network/app/__init__.py -Scanned: 2016-10-25 23:46:37.410876 -No vulnerabilities found. - - -Ketouem/flask-boto3 -https://github.com/Ketouem/flask-boto3 -Entry file: flask-boto3/example.py -Scanned: 2016-10-25 23:46:38.843061 -No vulnerabilities found. - - -bellkev/docker-flask-browserify -https://github.com/bellkev/docker-flask-browserify -Entry file: docker-flask-browserify/src/python/hello.py -Scanned: 2016-10-25 23:46:40.138625 -No vulnerabilities found. - - -Pushould/pushould-flask-sample -https://github.com/Pushould/pushould-flask-sample -Entry file: pushould-flask-sample/app.py -Scanned: 2016-10-25 23:46:41.450236 -No vulnerabilities found. - - -miaoihan/qulook_flask -https://github.com/miaoihan/qulook_flask -Entry file: qulook_flask/qulook.py -Scanned: 2016-10-25 23:46:45.526538 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: qulook_flask/ENV/lib/python2.7/sre_compile.py - -rogerpence/Flask-App -https://github.com/rogerpence/Flask-App -Entry file: Flask-App/app/__init__.py -Scanned: 2016-10-25 23:46:47.221679 -No vulnerabilities found. - - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: None -Scanned: 2016-10-25 23:46:47.744717 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-25 23:46:49.135503 -No vulnerabilities found. - - -kessiacastro/flask-hello -https://github.com/kessiacastro/flask-hello -Entry file: flask-hello/app.py -Scanned: 2016-10-25 23:46:53.215063 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -renaldopringle/flask_heroku -https://github.com/renaldopringle/flask_heroku -Entry file: flask_heroku/app.py -Scanned: 2016-10-25 23:46:56.914129 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sunhughees/flask-blog -https://github.com/sunhughees/flask-blog -Entry file: None -Scanned: 2016-10-25 23:46:57.978887 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/__init__.py -Scanned: 2016-10-25 23:47:01.836003 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_blog/venv/lib/python3.4/operator.py - -uyoaix/learn-flask -https://github.com/uyoaix/learn-flask -Entry file: None -Scanned: 2016-10-25 23:47:02.403185 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -frenos/flask-sample -https://github.com/frenos/flask-sample -Entry file: flask-sample/app/__init__.py -Scanned: 2016-10-25 23:47:03.857786 -No vulnerabilities found. - - -gyonghua/flask-blog -https://github.com/gyonghua/flask-blog -Entry file: None -Scanned: 2016-10-25 23:47:04.394218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Zhgong/flask_microblog -https://github.com/Zhgong/flask_microblog -Entry file: flask_microblog/blog/__init__.py -Scanned: 2016-10-25 23:47:05.769293 -No vulnerabilities found. - - -zhangcheng/flask-example -https://github.com/zhangcheng/flask-example -Entry file: flask-example/example/app.py -Scanned: 2016-10-25 23:47:07.106592 -No vulnerabilities found. - - -gemimarosier/flask_project -https://github.com/gemimarosier/flask_project -Entry file: flask_project/tv_routes.py -Scanned: 2016-10-25 23:47:10.264218 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_project/env/lib/python2.7/sre_compile.py - -gchange/flask_server -https://github.com/gchange/flask_server -Entry file: flask_server/flask_server/main.py -Scanned: 2016-10-25 23:47:11.606793 -Vulnerability 1: -File: flask_server/flask_server/main.py - > User input at line 21, trigger word "form[": - account = request.form['account'] -Reassigned in: - File: flask_server/flask_server/main.py - > Line 31: account = generator.generator(account, account, account_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') - File: flask_server/flask_server/main.py - > Line 22: password = request.form['password'] -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - -Vulnerability 2: -File: flask_server/flask_server/main.py - > User input at line 22, trigger word "form[": - password = request.form['password'] -Reassigned in: - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - -Vulnerability 3: -File: flask_server/flask_server/main.py - > User input at line 23, trigger word "form[": - account_length = int(request.form['account_length']) -Reassigned in: - File: flask_server/flask_server/main.py - > Line 31: account = generator.generator(account, account, account_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') - File: flask_server/flask_server/main.py - > Line 21: account = request.form['account'] - File: flask_server/flask_server/main.py - > Line 22: password = request.form['password'] -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - -Vulnerability 4: -File: flask_server/flask_server/main.py - > User input at line 24, trigger word "form[": - password_length = int(request.form['password_length']) -Reassigned in: - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') - File: flask_server/flask_server/main.py - > Line 22: password = request.form['password'] -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - -Vulnerability 5: -File: flask_server/flask_server/main.py - > User input at line 25, trigger word "form[": - is_digit = request.form['is_digit'] -Reassigned in: - File: flask_server/flask_server/main.py - > Line 28: is_digit = is_digit.lower() == 'true'TrueFalse - File: flask_server/flask_server/main.py - > Line 31: account = generator.generator(account, account, account_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') - File: flask_server/flask_server/main.py - > Line 21: account = request.form['account'] - File: flask_server/flask_server/main.py - > Line 22: password = request.form['password'] -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - -Vulnerability 6: -File: flask_server/flask_server/main.py - > User input at line 26, trigger word "form[": - is_uplow = request.form['is_uplow'] -Reassigned in: - File: flask_server/flask_server/main.py - > Line 29: is_uplow = is_uplow.lower() == 'true'TrueFalse - File: flask_server/flask_server/main.py - > Line 31: account = generator.generator(account, account, account_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 32: password = generator.generator(account, password, password_length, is_digit, is_uplow) - File: flask_server/flask_server/main.py - > Line 19: ret_MAYBE_FUNCTION_NAME = redirect('/password/') - File: flask_server/flask_server/main.py - > Line 21: account = request.form['account'] - File: flask_server/flask_server/main.py - > Line 22: password = request.form['password'] -File: flask_server/flask_server/main.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('generator.html',account=account, password=password) - - - -Nickyzj/flask-first -https://github.com/Nickyzj/flask-first -Entry file: flask-first/flask-first-notes.py -Scanned: 2016-10-25 23:47:13.177572 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -propupul/Flask_app -https://github.com/propupul/Flask_app -Entry file: Flask_app/hello.py -Scanned: 2016-10-25 23:47:16.720423 -Vulnerability 1: -File: Flask_app/hello.py - > User input at line 43, trigger word ".data": - name = form.name.data -Reassigned in: - File: Flask_app/hello.py - > Line 44: prod_name = location(name)[0] - File: Flask_app/hello.py - > Line 45: loc_name = location(name)[1] + '-' + location(name)[2] + '-' + location(name)[3] - File: Flask_app/hello.py - > Line 49: prod_name = '' - File: Flask_app/hello.py - > Line 38: prod_name = '' - File: Flask_app/hello.py - > Line 39: loc_name = '' -File: Flask_app/hello.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, prod_name=prod_name, loc_name=loc_name) - - - -m18664319351/Blog_Flask -https://github.com/m18664319351/Blog_Flask -Entry file: Blog_Flask/app/__init__.py -Scanned: 2016-10-25 23:47:18.174589 -No vulnerabilities found. - - -testforvln/flask-learning -https://github.com/testforvln/flask-learning -Entry file: flask-learning/hello.py -Scanned: 2016-10-25 23:47:19.472930 -No vulnerabilities found. - - -Unicomcat/flask_test -https://github.com/Unicomcat/flask_test -Entry file: None -Scanned: 2016-10-25 23:47:19.999228 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jidn/flask-obscure -https://github.com/jidn/flask-obscure -Entry file: flask-obscure/tests/test_url.py -Scanned: 2016-10-25 23:47:28.458800 -No vulnerabilities found. - - -cdaidone/small_flask -https://github.com/cdaidone/small_flask -Entry file: small_flask/small_flask.py -Scanned: 2016-10-25 23:47:34.876770 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -morphee31/flask_example -https://github.com/morphee31/flask_example -Entry file: None -Scanned: 2016-10-25 23:47:35.425716 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morphee31/flask_example. - -pedrogaudencio/refunite-flask -https://github.com/pedrogaudencio/refunite-flask -Entry file: refunite-flask/app.py -Scanned: 2016-10-25 23:47:36.970458 -No vulnerabilities found. - - -master105/flask_server -https://github.com/master105/flask_server -Entry file: flask_server/project.py -Scanned: 2016-10-25 23:47:39.992457 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -d3prof3t/flask-intro -https://github.com/d3prof3t/flask-intro -Entry file: flask-intro/flasktaskr/__init__.py -Scanned: 2016-10-25 23:47:41.427171 -No vulnerabilities found. - - -zubairah/Flask_App -https://github.com/zubairah/Flask_App -Entry file: Flask_App/Flask_App/app.py -Scanned: 2016-10-25 23:47:42.826008 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -shinstev/flask_server -https://github.com/shinstev/flask_server -Entry file: flask_server/app.py -Scanned: 2016-10-25 23:47:46.301702 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_server/venv/lib/python2.7/sre_compile.py - -vramakin/LearnFlask -https://github.com/vramakin/LearnFlask -Entry file: LearnFlask/flaskr.py -Scanned: 2016-10-25 23:47:47.744531 -No vulnerabilities found. - - -nbeede/docker-flask -https://github.com/nbeede/docker-flask -Entry file: docker-flask/app.py -Scanned: 2016-10-25 23:47:49.044002 -No vulnerabilities found. - - -runningstrawberry/microblog -https://github.com/runningstrawberry/microblog -Entry file: None -Scanned: 2016-10-25 23:47:49.604090 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/runningstrawberry/microblog. - -kolapapa/blog_kola -https://github.com/kolapapa/blog_kola -Entry file: blog_kola/db.py -Scanned: 2016-10-25 23:47:53.598359 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: blog_kola/.venv/lib/python2.7/sre_compile.py - -B2Crypt/Random-Gamemode- -https://github.com/B2Crypt/Random-Gamemode- -Entry file: Random-Gamemode-/FLASK/__init__.py -Scanned: 2016-10-25 23:47:55.410779 -No vulnerabilities found. - - -Lich2013/learnflask -https://github.com/Lich2013/learnflask -Entry file: None -Scanned: 2016-10-25 23:47:57.069508 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Lich2013/learnflask. - -jbisasky/flaskProtoBuffer -https://github.com/jbisasky/flaskProtoBuffer -Entry file: flaskProtoBuffer/flaskHello.py -Scanned: 2016-10-25 23:48:00.664132 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -WangShengguang/FlaskWebDevelopment -https://github.com/WangShengguang/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/hello.py -Scanned: 2016-10-25 23:48:02.733082 -Vulnerability 1: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 17, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 25: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskWebDevelopment/app/main/views.py - > Line 27: posts = pagination.items - File: FlaskWebDevelopment/app/main/views.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskWebDevelopment/app/main/views.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 20, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 18: show_followed = False - File: FlaskWebDevelopment/app/main/views.py - > Line 16: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskWebDevelopment/app/main/views.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 108, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 110: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: FlaskWebDevelopment/app/main/views.py - > Line 111: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskWebDevelopment/app/main/views.py - > Line 113: comments = pagination.items - File: FlaskWebDevelopment/app/main/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskWebDevelopment/app/main/views.py - > reaches line 114, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 170, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 171: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWS_PER_PAGE'], error_out=False) - File: FlaskWebDevelopment/app/main/views.py - > Line 172: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskWebDevelopment/app/main/views.py - > Line 169: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskWebDevelopment/app/main/views.py - > reaches line 173, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 183, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 184: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: FlaskWebDevelopment/app/main/views.py - > Line 187: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: FlaskWebDevelopment/app/main/views.py - > Line 182: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskWebDevelopment/app/main/views.py - > reaches line 189, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 6: -File: FlaskWebDevelopment/app/main/views.py - > User input at line 198, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskWebDevelopment/app/main/views.py - > Line 199: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskWebDevelopment/app/main/views.py - > Line 201: comments = pagination.items -File: FlaskWebDevelopment/app/main/views.py - > reaches line 202, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -JunliuHub/FlaskWebDevelopment -https://github.com/JunliuHub/FlaskWebDevelopment -Entry file: FlaskWebDevelopment/src/helloflask.py -Scanned: 2016-10-25 23:48:05.058306 -No vulnerabilities found. - - -adrianomaringolo/py-flask-tuts -https://github.com/adrianomaringolo/py-flask-tuts -Entry file: None -Scanned: 2016-10-25 23:48:11.239641 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rjantos/flask-hello-world -https://github.com/rjantos/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:48:11.747538 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ishwarya-iyer/nuage_proj_flask_app -https://github.com/ishwarya-iyer/nuage_proj_flask_app -Entry file: nuage_proj_flask_app/app.py -Scanned: 2016-10-25 23:48:13.974662 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SamirKanaan/PlantillaFlaskREST1 -https://github.com/SamirKanaan/PlantillaFlaskREST1 -Entry file: PlantillaFlaskREST1/plantilla1.py -Scanned: 2016-10-25 23:48:15.877151 -No vulnerabilities found. - - -remarcbalisi/flask-angular-auth -https://github.com/remarcbalisi/flask-angular-auth -Entry file: flask-angular-auth/project/__init__.py -Scanned: 2016-10-25 23:48:17.183057 -No vulnerabilities found. - - -jarosenb/flask_ionratio_V2 -https://github.com/jarosenb/flask_ionratio_V2 -Entry file: flask_ionratio_V2/hello.py -Scanned: 2016-10-25 23:48:18.615204 -No vulnerabilities found. - - -themuppet2/flask-hello-world -https://github.com/themuppet2/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:48:19.163639 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kindoprec/Flask-SecureHeaders -https://github.com/kindoprec/Flask-SecureHeaders -Entry file: Flask-SecureHeaders/tests/core_test.py -Scanned: 2016-10-25 23:48:20.486198 -No vulnerabilities found. - - -ishwarya-iyer/nuage_flask_app -https://github.com/ishwarya-iyer/nuage_flask_app -Entry file: nuage_flask_app/app.py -Scanned: 2016-10-25 23:48:23.676666 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Christomas/flask_project_skeleton -https://github.com/Christomas/flask_project_skeleton -Entry file: flask_project_skeleton/app/__init__.py -Scanned: 2016-10-25 23:48:25.128863 -No vulnerabilities found. - - -pranavn-cuelogic/flask_video_conference_room -https://github.com/pranavn-cuelogic/flask_video_conference_room -Entry file: flask_video_conference_room/video_conf/main.py -Scanned: 2016-10-25 23:48:26.540450 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -llxxee/A-website-by-Flask -https://github.com/llxxee/A-website-by-Flask -Entry file: None -Scanned: 2016-10-25 23:48:27.860845 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/llxxee/A-website-by-Flask. - -micah-cal-sandbox/flask-heroku-sandbox -https://github.com/micah-cal-sandbox/flask-heroku-sandbox -Entry file: flask-heroku-sandbox/app.py -Scanned: 2016-10-25 23:48:29.138487 -No vulnerabilities found. - - -lkpanganiban/flask-rest-example -https://github.com/lkpanganiban/flask-rest-example -Entry file: flask-rest-example/app.py -Scanned: 2016-10-25 23:48:33.456492 -Vulnerability 1: -File: flask-rest-example/app.py - > User input at line 48, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flask-rest-example/app.py - > reaches line 55, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -rodcox89/flask-restful-blueprint-boilerplate -https://github.com/rodcox89/flask-restful-blueprint-boilerplate -Entry file: flask-restful-blueprint-boilerplate/main.py -Scanned: 2016-10-25 23:48:36.926773 -No vulnerabilities found. - - -braddmiller/flask-by-example -https://github.com/braddmiller/flask-by-example -Entry file: None -Scanned: 2016-10-25 23:48:37.455173 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/braddmiller/flask-by-example. - -tych0/flask-demo-app -https://github.com/tych0/flask-demo-app -Entry file: flask-demo-app/app/__init__.py -Scanned: 2016-10-25 23:48:42.248457 -No vulnerabilities found. - - -technocake/flask-user-profiles-example -https://github.com/technocake/flask-user-profiles-example -Entry file: flask-user-profiles-example/pyhtml.py -Scanned: 2016-10-25 23:48:43.536913 -No vulnerabilities found. - - -Christomas/i_dev_flask -https://github.com/Christomas/i_dev_flask -Entry file: i_dev_flask/app/__init__.py -Scanned: 2016-10-25 23:48:44.983972 -Vulnerability 1: -File: i_dev_flask/app/auth/views.py - > User input at line 121, trigger word ".data": - user = models.User.query.filter_by(email=form.email.data).first() -Reassigned in: - File: i_dev_flask/app/auth/views.py - > Line 123: token = options.dump_token('reset_password', user.id) -File: i_dev_flask/app/auth/views.py - > reaches line 124, trigger word "url_for(": - options.send_email(user.email, '重置密码', 'auth/mail/reset_password',user=user, url=url_for('auth.reset_confirm',token=token, _external=True)) - -Vulnerability 2: -File: i_dev_flask/app/auth/views.py - > User input at line 139, trigger word "get(": - user = models.User.query.get(user_id) -Reassigned in: - File: i_dev_flask/app/auth/views.py - > Line 143: form = forms.ResetPasswordForm(email=user.email) - File: i_dev_flask/app/auth/views.py - > Line 147: user.password = form.password.data - File: i_dev_flask/app/auth/views.py - > Line 138: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.login')) - File: i_dev_flask/app/auth/views.py - > Line 142: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.lgoin')) - File: i_dev_flask/app/auth/views.py - > Line 150: ret_MAYBE_FUNCTION_NAME = redirect(url_for('auth.login')) -File: i_dev_flask/app/auth/views.py - > reaches line 151, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('auth/reset_confirm.html',form=form) - - - -paulsavala/flask_aws_demo -https://github.com/paulsavala/flask_aws_demo -Entry file: None -Scanned: 2016-10-25 23:48:53.968114 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -udpcloud/flask-rest-api -https://github.com/udpcloud/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-25 23:48:55.280709 -Vulnerability 1: -File: flask-rest-api/app/api_v1/spaces.py - > User input at line 16, trigger word "get(": - space = Spaces.query.get(id) -File: flask-rest-api/app/api_v1/spaces.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(space_schema.dump(space).data) - - - -AndersonQ/appengine-flask-contacts-api -https://github.com/AndersonQ/appengine-flask-contacts-api -Entry file: appengine-flask-contacts-api/application/__init__.py -Scanned: 2016-10-25 23:48:56.920150 -No vulnerabilities found. - - -dhiraka/flask_basic_app -https://github.com/dhiraka/flask_basic_app -Entry file: flask_basic_app/test_rest_app.py -Scanned: 2016-10-25 23:48:58.240582 -No vulnerabilities found. - - -aaronja38/assignment10-flask -https://github.com/aaronja38/assignment10-flask -Entry file: assignment10-flask/winners.py -Scanned: 2016-10-25 23:49:01.965394 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: assignment10-flask/env/lib/python2.7/sre_compile.py - -avikantz/Flask-API-Demo -https://github.com/avikantz/Flask-API-Demo -Entry file: Flask-API-Demo/app/__init__.py -Scanned: 2016-10-25 23:49:03.778078 -No vulnerabilities found. - - -deenaacree/flask_app1 -https://github.com/deenaacree/flask_app1 -Entry file: flask_app1/songsapp.py -Scanned: 2016-10-25 23:49:07.179749 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_app1/env/lib/python2.7/sre_compile.py - -AMontalva/flask_hello_world -https://github.com/AMontalva/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 23:49:09.504498 -No vulnerabilities found. - - -xiewenlongs/Flask-CacheOBJ -https://github.com/xiewenlongs/Flask-CacheOBJ -Entry file: Flask-CacheOBJ/tests.py -Scanned: 2016-10-25 23:49:11.078192 -No vulnerabilities found. - - -thefunkjunky/python-flask-boilerplate -https://github.com/thefunkjunky/python-flask-boilerplate -Entry file: python-flask-boilerplate/mainapp/__init__.py -Scanned: 2016-10-25 23:49:12.495352 -No vulnerabilities found. - - -harryoh/flask-rest-api -https://github.com/harryoh/flask-rest-api -Entry file: flask-rest-api/app/__init__.py -Scanned: 2016-10-25 23:49:13.802946 -Vulnerability 1: -File: flask-rest-api/app/api_v1/spaces.py - > User input at line 16, trigger word "get(": - space = Spaces.query.get(id) -File: flask-rest-api/app/api_v1/spaces.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(space_schema.dump(space).data) - - - -DanBlakeman/flask-deploy-practice -https://github.com/DanBlakeman/flask-deploy-practice -Entry file: flask-deploy-practice/src/app.py -Scanned: 2016-10-25 23:49:15.213206 -No vulnerabilities found. - - -MoxmiNu/flask-mongo-test -https://github.com/MoxmiNu/flask-mongo-test -Entry file: flask-mongo-test/provisioning/files/dr-app.py -Scanned: 2016-10-25 23:49:32.249793 -No vulnerabilities found. - - -medev21/Social-Network---Flask -https://github.com/medev21/Social-Network---Flask -Entry file: Social-Network---Flask/app.py -Scanned: 2016-10-25 23:49:33.605512 -No vulnerabilities found. - - -sealzjh/flask-celery-test -https://github.com/sealzjh/flask-celery-test -Entry file: None -Scanned: 2016-10-25 23:49:34.918659 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sealzjh/flask-celery-test. - -Glaun/flask-hello-world -https://github.com/Glaun/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:49:35.455788 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -acouderc/flask -https://github.com/acouderc/flask -Entry file: None -Scanned: 2016-10-25 23:49:37.869313 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aintmetho/flask -https://github.com/aintmetho/flask -Entry file: None -Scanned: 2016-10-25 23:49:38.400136 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MapEntryManagement/flask -https://github.com/MapEntryManagement/flask -Entry file: None -Scanned: 2016-10-25 23:49:38.915544 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -klen/flask-pw -https://github.com/klen/flask-pw -Entry file: flask-pw/tests.py -Scanned: 2016-10-25 23:49:40.369728 -No vulnerabilities found. - - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-25 23:49:41.790955 -No vulnerabilities found. - - -colingorrie/flask-boilerplate -https://github.com/colingorrie/flask-boilerplate -Entry file: None -Scanned: 2016-10-25 23:49:42.303438 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/colingorrie/flask-boilerplate. - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-25 23:49:45.002406 -No vulnerabilities found. - - -gene1wood/flaskoktaapp -https://github.com/gene1wood/flaskoktaapp -Entry file: flaskoktaapp/flaskoktaapp/__init__.py -Scanned: 2016-10-25 23:49:46.438064 -Vulnerability 1: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 196, trigger word "url_for(": - url = url_for('user') - -Vulnerability 2: -File: flaskoktaapp/flaskoktaapp/__init__.py - > User input at line 201, trigger word "form[": - url = request.form['RelayState'] -File: flaskoktaapp/flaskoktaapp/__init__.py - > reaches line 204, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url) - - - -yu66s/flaskr -https://github.com/yu66s/flaskr -Entry file: None -Scanned: 2016-10-25 23:49:46.974597 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yu66s/flaskr. - -xiaohu2015/Flasky -https://github.com/xiaohu2015/Flasky -Entry file: None -Scanned: 2016-10-25 23:49:47.491295 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/xiaohu2015/Flasky. - -cwywang/flasky -https://github.com/cwywang/flasky -Entry file: None -Scanned: 2016-10-25 23:49:48.024507 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wangxuan007/flasky -https://github.com/wangxuan007/flasky -Entry file: None -Scanned: 2016-10-25 23:49:48.578362 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lambdaplus/flasko -https://github.com/lambdaplus/flasko -Entry file: flasko/Flasko.py -Scanned: 2016-10-25 23:49:53.021558 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flasko/lib/python3.4/operator.py - -SSUHan/flasktutorial -https://github.com/SSUHan/flasktutorial -Entry file: None -Scanned: 2016-10-25 23:49:54.601370 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SSUHan/flasktutorial. - -ma53192190/flaskwork -https://github.com/ma53192190/flaskwork -Entry file: flaskwork/flaskwork.py -Scanned: 2016-10-25 23:49:56.949303 -No vulnerabilities found. - - -hoobalias/Flaskr -https://github.com/hoobalias/Flaskr -Entry file: None -Scanned: 2016-10-25 23:49:57.473068 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/MyFirstWebServer/app/__init__.py -Scanned: 2016-10-25 23:50:03.029763 -Vulnerability 1: -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > User input at line 15, trigger word ".data": - name = form.name.data -Reassigned in: - File: FlaskWeb/MyFirstWebServer/app/main/views.py - > Line 12: name = None -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name) - - - -zhouyang2640/FlaskInit -https://github.com/zhouyang2640/FlaskInit -Entry file: FlaskInit/hello.py -Scanned: 2016-10-25 23:50:04.519087 -No vulnerabilities found. - - -s3c0nDD/FlaskTutorial -https://github.com/s3c0nDD/FlaskTutorial -Entry file: FlaskTutorial/app/__init__.py -Scanned: 2016-10-25 23:50:05.834080 -No vulnerabilities found. - - -ZaighumRajput/flaskPractice -https://github.com/ZaighumRajput/flaskPractice -Entry file: flaskPractice/chapter2/hello.py -Scanned: 2016-10-25 23:50:09.297750 -No vulnerabilities found. - - -rmotr/flask-api-example -https://github.com/rmotr/flask-api-example -Entry file: flask-api-example/api/_01_manual_response_class.py -Scanned: 2016-10-25 23:50:13.151900 -No vulnerabilities found. - - -jjapp/flask-blog -https://github.com/jjapp/flask-blog -Entry file: None -Scanned: 2016-10-25 23:50:13.662303 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -frankpiva/mastering-flask -https://github.com/frankpiva/mastering-flask -Entry file: mastering-flask/main.py -Scanned: 2016-10-25 23:50:15.956640 -No vulnerabilities found. - - -engfilipe/curso_flask -https://github.com/engfilipe/curso_flask -Entry file: None -Scanned: 2016-10-25 23:50:21.452681 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sandmarq/flask_test -https://github.com/sandmarq/flask_test -Entry file: None -Scanned: 2016-10-25 23:50:32.969623 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -barcai/Flask_Megatutorial -https://github.com/barcai/Flask_Megatutorial -Entry file: Flask_Megatutorial/app/__init__.py -Scanned: 2016-10-25 23:50:35.374413 -No vulnerabilities found. - - -zhang-zhang/learning-flask -https://github.com/zhang-zhang/learning-flask -Entry file: learning-flask/flaskr.py -Scanned: 2016-10-25 23:50:36.684811 -No vulnerabilities found. - - -kosen10spajam/f-flask -https://github.com/kosen10spajam/f-flask -Entry file: f-flask/main.py -Scanned: 2016-10-25 23:50:38.099954 -Vulnerability 1: -File: f-flask/main.py - > User input at line 132, trigger word "get(": - since = int(request.args.get('since')) -File: f-flask/main.py - > reaches line 134, trigger word "execute(": - sql.execute('SELECT time, animal, message FROM messages WHERE time >= %d' % since) - -Vulnerability 2: -File: f-flask/main.py - > User input at line 142, trigger word "get(": - animal = request.values.get('animal') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 3: -File: f-flask/main.py - > User input at line 143, trigger word "get(": - message = request.values.get('message') -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - -Vulnerability 4: -File: f-flask/main.py - > User input at line 144, trigger word "get(": - time = int(request.values.get('time')) -File: f-flask/main.py - > reaches line 146, trigger word "execute(": - sql.execute('INSERT INTO messages (time, animal, message) VALUES (%d, '%s', $$%s$$)' % (time, animal, message)) - - - -mihai011/flask_server -https://github.com/mihai011/flask_server -Entry file: flask_server/app.py -Scanned: 2016-10-25 23:50:39.990400 -No vulnerabilities found. - - -morganvdavis/boilerplate-flask -https://github.com/morganvdavis/boilerplate-flask -Entry file: None -Scanned: 2016-10-25 23:50:41.294880 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/morganvdavis/boilerplate-flask. - -jwg4/flask_converter -https://github.com/jwg4/flask_converter -Entry file: flask_converter/examples/app_with_constructor.py -Scanned: 2016-10-25 23:50:42.712177 -No vulnerabilities found. - - -AVandelay/flask_blog -https://github.com/AVandelay/flask_blog -Entry file: flask_blog/__init__.py -Scanned: 2016-10-25 23:50:46.021547 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_blog/venv/lib/python3.4/operator.py - -Davidthecoolsmartguy/weasyprint-Flask -https://github.com/Davidthecoolsmartguy/weasyprint-Flask -Entry file: weasyprint-Flask/app.py -Scanned: 2016-10-25 23:50:47.359240 -No vulnerabilities found. - - -rajdeepd/flask-helloworld -https://github.com/rajdeepd/flask-helloworld -Entry file: flask-helloworld/app.py -Scanned: 2016-10-25 23:50:50.820277 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-helloworld/venv/lib/python2.7/sre_compile.py - -honeeWong/Flask-Blog -https://github.com/honeeWong/Flask-Blog -Entry file: Flask-Blog/application/__init__.py -Scanned: 2016-10-25 23:50:52.676873 -No vulnerabilities found. - - -frenos/flask-sample -https://github.com/frenos/flask-sample -Entry file: flask-sample/app/__init__.py -Scanned: 2016-10-25 23:50:54.071440 -No vulnerabilities found. - - -lockie/flask_ldap -https://github.com/lockie/flask_ldap -Entry file: flask_ldap/index.py -Scanned: 2016-10-25 23:50:55.384394 -Vulnerability 1: -File: flask_ldap/index.py - > User input at line 28, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask_ldap/index.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask_ldap/index.py - > reaches line 29, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - -Vulnerability 2: -File: flask_ldap/index.py - > User input at line 28, trigger word "get(": - next = request.args.get('next') -Reassigned in: - File: flask_ldap/index.py - > Line 30: ret_MAYBE_FUNCTION_NAME = render_template('login.html',form=form) -File: flask_ldap/index.py - > reaches line 29, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(next or url_for('index')) - - - -AndreyBalandin/flask-test -https://github.com/AndreyBalandin/flask-test -Entry file: flask-test/app.py -Scanned: 2016-10-25 23:50:56.677561 -No vulnerabilities found. - - -kessiacastro/imdb-flask -https://github.com/kessiacastro/imdb-flask -Entry file: imdb-flask/app.py -Scanned: 2016-10-25 23:51:01.865563 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -AmI-2016/python-Flask -https://github.com/AmI-2016/python-Flask -Entry file: python-Flask/flask-ex.py -Scanned: 2016-10-25 23:51:03.862636 -Vulnerability 1: -File: python-Flask/flask-ex.py - > User input at line 30, trigger word "form[": - user = request.form['user'] -Reassigned in: - File: python-Flask/flask-ex.py - > Line 33: session['user'] = user - File: python-Flask/flask-ex.py - > Line 34: session['valid'] = True -File: python-Flask/flask-ex.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',user=user) - - - -anazard/zardify_flask -https://github.com/anazard/zardify_flask -Entry file: zardify_flask/main/__init__.py -Scanned: 2016-10-25 23:51:08.481199 -No vulnerabilities found. - - -buckeye76guy/learning-flask -https://github.com/buckeye76guy/learning-flask -Entry file: learning-flask/curious.py -Scanned: 2016-10-25 23:51:10.310590 -No vulnerabilities found. - - -thewhitedingo/MenuFlask -https://github.com/thewhitedingo/MenuFlask -Entry file: MenuFlask/flaskserver.py -Scanned: 2016-10-25 23:51:11.781226 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -anazard/flask_project -https://github.com/anazard/flask_project -Entry file: flask_project/main/__init__.py -Scanned: 2016-10-25 23:51:16.294195 -No vulnerabilities found. - - -lizmeister321/flask_practice -https://github.com/lizmeister321/flask_practice -Entry file: None -Scanned: 2016-10-25 23:51:16.872664 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -phillip-hopper/flask-test -https://github.com/phillip-hopper/flask-test -Entry file: flask-test/flaskr.py -Scanned: 2016-10-25 23:51:18.280888 -No vulnerabilities found. - - -wkqzxh/flask_leaklib -https://github.com/wkqzxh/flask_leaklib -Entry file: flask_leaklib/flask_leaklib/leaklib_app/__init__.py -Scanned: 2016-10-25 23:51:19.610322 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Y-Rookie/flask_blog -https://github.com/Y-Rookie/flask_blog -Entry file: None -Scanned: 2016-10-25 23:51:24.429489 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -brightforme/flask-sqlalchemy -https://github.com/brightforme/flask-sqlalchemy -Entry file: flask-sqlalchemy/flask_sqlalchemy/__init__.py -Scanned: 2016-10-25 23:51:26.410195 -No vulnerabilities found. - - -pedrogaudencio/refunite-flask -https://github.com/pedrogaudencio/refunite-flask -Entry file: refunite-flask/app.py -Scanned: 2016-10-25 23:51:34.458777 -No vulnerabilities found. - - -holmandw/flask-arduino -https://github.com/holmandw/flask-arduino -Entry file: flask-arduino/app/__init__.py -Scanned: 2016-10-25 23:51:36.041854 -No vulnerabilities found. - - -zenyui/flask-test -https://github.com/zenyui/flask-test -Entry file: flask-test/api-test/api2.py -Scanned: 2016-10-25 23:51:37.370877 -No vulnerabilities found. - - -vobine/JobFlask -https://github.com/vobine/JobFlask -Entry file: None -Scanned: 2016-10-25 23:51:38.912695 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vobine/JobFlask. - -Lobster1991/learn_flask -https://github.com/Lobster1991/learn_flask -Entry file: learn_flask/app/models.py -Scanned: 2016-10-25 23:51:42.997782 -No vulnerabilities found. - - -SarahJaine/flask-tutorial -https://github.com/SarahJaine/flask-tutorial -Entry file: None -Scanned: 2016-10-25 23:51:43.537462 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SarahJaine/flask-tutorial. - -vatseek/flask_lessons -https://github.com/vatseek/flask_lessons -Entry file: flask_lessons/app/__init__.py -Scanned: 2016-10-25 23:51:44.869209 -No vulnerabilities found. - - -Michael-F-Bryan/flask_template -https://github.com/Michael-F-Bryan/flask_template -Entry file: flask_template/app/__init__.py -Scanned: 2016-10-25 23:51:46.298082 -No vulnerabilities found. - - -ol3j/azureday-flask -https://github.com/ol3j/azureday-flask -Entry file: azureday-flask/FlaskWebProject/__init__.py -Scanned: 2016-10-25 23:51:48.101965 -Vulnerability 1: -File: azureday-flask/FlaskWebProject/views.py - > User input at line 57, trigger word "form[": - mobile = request.form['yourmobile'] -Reassigned in: - File: azureday-flask/FlaskWebProject/views.py - > Line 74: task = 'PartitionKey''RowKey''mobile''file''tasksPoznan'suffixmobilefilename - File: azureday-flask/FlaskWebProject/views.py - > Line 77: new = db.Log(suffix=suffix, mobile=mobile, image=filename) -File: azureday-flask/FlaskWebProject/views.py - > reaches line 86, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',mobile=mobile, url=url, important_metric=important_metric) - -Vulnerability 2: -File: azureday-flask/FlaskWebProject/views.py - > User input at line 58, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: azureday-flask/FlaskWebProject/views.py - > Line 59: basename = file.filename - File: azureday-flask/FlaskWebProject/views.py - > Line 61: filename = '_'.join([suffix, basename]) - File: azureday-flask/FlaskWebProject/views.py - > Line 68: url = blob_service.make_blob_url(container_name='images', blob_name=filename) - File: azureday-flask/FlaskWebProject/views.py - > Line 72: body = json.dumps('suffix''image'str(suffix)str(url)) - File: azureday-flask/FlaskWebProject/views.py - > Line 74: task = 'PartitionKey''RowKey''mobile''file''tasksPoznan'suffixmobilefilename - File: azureday-flask/FlaskWebProject/views.py - > Line 77: new = db.Log(suffix=suffix, mobile=mobile, image=filename) -File: azureday-flask/FlaskWebProject/views.py - > reaches line 86, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('form_action.html',mobile=mobile, url=url, important_metric=important_metric) - - - -runningstrawberry/microblog -https://github.com/runningstrawberry/microblog -Entry file: None -Scanned: 2016-10-25 23:51:48.660785 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/runningstrawberry/microblog. - -ShivamMahajan/my_first_flask_project -https://github.com/ShivamMahajan/my_first_flask_project -Entry file: my_first_flask_project/hello.py -Scanned: 2016-10-25 23:51:57.296164 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: my_first_flask_project/venv/lib/python2.7/sre_compile.py - -sakib3/flask_Cartridge_openshift -https://github.com/sakib3/flask_Cartridge_openshift -Entry file: flask_Cartridge_openshift/flaskapp.py -Scanned: 2016-10-25 23:51:58.711077 -No vulnerabilities found. - - -mfyock/flask_hello_world -https://github.com/mfyock/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-25 23:52:02.091711 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sakib3/flask_cartridge_Heroku -https://github.com/sakib3/flask_cartridge_Heroku -Entry file: flask_cartridge_Heroku/app.py -Scanned: 2016-10-25 23:52:03.505062 -No vulnerabilities found. - - -gclabon/Twilio-Flask-CSV -https://github.com/gclabon/Twilio-Flask-CSV -Entry file: Twilio-Flask-CSV/twilioFlaskBasic/twilioFlaskBasic.py -Scanned: 2016-10-25 23:52:04.953511 -No vulnerabilities found. - - -AdamHumphrey/housing2016flask -https://github.com/AdamHumphrey/housing2016flask -Entry file: None -Scanned: 2016-10-25 23:52:06.491980 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/AdamHumphrey/housing2016flask. - -SamirKanaan/PlantillaFlaskREST2 -https://github.com/SamirKanaan/PlantillaFlaskREST2 -Entry file: PlantillaFlaskREST2/inicia.py -Scanned: 2016-10-25 23:52:07.909877 -No vulnerabilities found. - - -pravinthsam/MnistFlaskKeras -https://github.com/pravinthsam/MnistFlaskKeras -Entry file: MnistFlaskKeras/flaskserver.py -Scanned: 2016-10-25 23:52:10.323396 -No vulnerabilities found. - - -rfmapp/flask-by-example -https://github.com/rfmapp/flask-by-example -Entry file: None -Scanned: 2016-10-25 23:52:10.851899 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rfmapp/flask-by-example. - -dschuler36/SimpleFlaskBlog -https://github.com/dschuler36/SimpleFlaskBlog -Entry file: SimpleFlaskBlog/main.py -Scanned: 2016-10-25 23:53:19.365335 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -macloo/flask_project1 -https://github.com/macloo/flask_project1 -Entry file: flask_project1/winners_BAK.py -Scanned: 2016-10-25 23:53:20.833543 -No vulnerabilities found. - - -3130000547/musicbox-base-on-flask -https://github.com/3130000547/musicbox-base-on-flask -Entry file: musicbox-base-on-flask/musicbox.py -Scanned: 2016-10-25 23:53:22.364640 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AjithPanneerselvam/my_flask_project -https://github.com/AjithPanneerselvam/my_flask_project -Entry file: my_flask_project/project.py -Scanned: 2016-10-25 23:53:23.798359 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -avikantz/Flask-API-Demo -https://github.com/avikantz/Flask-API-Demo -Entry file: Flask-API-Demo/app/__init__.py -Scanned: 2016-10-25 23:53:25.557104 -No vulnerabilities found. - - -dengjonathan/flask_first_project -https://github.com/dengjonathan/flask_first_project -Entry file: flask_first_project/final_project.py -Scanned: 2016-10-25 23:53:27.363730 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -boyombo/asterisk-pycall-flask -https://github.com/boyombo/asterisk-pycall-flask -Entry file: asterisk-pycall-flask/calldemo/app.py -Scanned: 2016-10-25 23:53:28.668767 -No vulnerabilities found. - - -kaslemr/sample_flask_project -https://github.com/kaslemr/sample_flask_project -Entry file: sample_flask_project/app2.py -Scanned: 2016-10-25 23:53:30.163842 -Vulnerability 1: -File: sample_flask_project/app2.py - > User input at line 129, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: sample_flask_project/app2.py - > Line 135: user = User(username=username) -File: sample_flask_project/app2.py - > reaches line 139, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 2: -File: sample_flask_project/app2.py - > User input at line 129, trigger word "get(": - username = request.json.get('username') -Reassigned in: - File: sample_flask_project/app2.py - > Line 135: user = User(username=username) -File: sample_flask_project/app2.py - > reaches line 139, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('username'user.username), 201, 'Location'url_for('get_user',id=user.id, _external=True)) - -Vulnerability 3: -File: sample_flask_project/app2.py - > User input at line 145, trigger word "get(": - user = User.query.get(id) -File: sample_flask_project/app2.py - > reaches line 148, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('username'user.username) - -Vulnerability 4: -File: sample_flask_project/app.py - > User input at line 81, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: sample_flask_project/app.py - > reaches line 88, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'make_public_task(task)), 201) - - - -mapingfan/Flask-Mail-Test -https://github.com/mapingfan/Flask-Mail-Test -Entry file: Flask-Mail-Test/Mail-Test.py -Scanned: 2016-10-25 23:53:32.460840 -No vulnerabilities found. - - -4Catalyzer/flask-resty-tenants -https://github.com/4Catalyzer/flask-resty-tenants -Entry file: flask-resty-tenants/tests/conftest.py -Scanned: 2016-10-25 23:53:33.868301 -No vulnerabilities found. - - -lucaswadedavis/iguanodon -https://github.com/lucaswadedavis/iguanodon -Entry file: iguanodon/server.py -Scanned: 2016-10-25 23:53:35.503703 -No vulnerabilities found. - - -ederavilaprado/paas-app-example-python-flask -https://github.com/ederavilaprado/paas-app-example-python-flask -Entry file: paas-app-example-python-flask/app.py -Scanned: 2016-10-25 23:53:37.295368 -No vulnerabilities found. - - -afh/yabab -https://github.com/afh/yabab -Entry file: yabab/yabab/__init__.py -Scanned: 2016-10-25 23:53:39.216623 -No vulnerabilities found. - - -Michael-F-Bryan/mfb_website -https://github.com/Michael-F-Bryan/mfb_website -Entry file: mfb_website/app/__init__.py -Scanned: 2016-10-25 23:53:40.657338 -No vulnerabilities found. - - -Yelloworking/SlackWebservice -https://github.com/Yelloworking/SlackWebservice -Entry file: None -Scanned: 2016-10-25 23:53:41.959974 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Yelloworking/SlackWebservice. - -TrailBlazerZ/imgaptcha--api -https://github.com/TrailBlazerZ/imgaptcha--api -Entry file: imgaptcha--api/app.py -Scanned: 2016-10-25 23:53:43.657140 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -NSBum/AnkiStatsServer -https://github.com/NSBum/AnkiStatsServer -Entry file: AnkiStatsServer/app.py -Scanned: 2016-10-25 23:53:45.630148 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yobuntu/laboratory -https://github.com/yobuntu/laboratory -Entry file: laboratory/laboratory/fooflask.py -Scanned: 2016-10-25 23:53:46.925954 -Vulnerability 1: -File: laboratory/laboratory/tests/test_base.py - > User input at line 5, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 5, trigger word "url_for(": - response = client.get(url_for('hello')) - -Vulnerability 2: -File: laboratory/laboratory/tests/test_base.py - > User input at line 11, trigger word "get(": - r = client.get(url_for('add',name='test')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 11, trigger word "url_for(": - r = client.get(url_for('add',name='test')) - -Vulnerability 3: -File: laboratory/laboratory/tests/test_base.py - > User input at line 12, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 11, trigger word "url_for(": - r = client.get(url_for('add',name='test')) - -Vulnerability 4: -File: laboratory/laboratory/tests/test_base.py - > User input at line 11, trigger word "get(": - r = client.get(url_for('add',name='test')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 12, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 5: -File: laboratory/laboratory/tests/test_base.py - > User input at line 12, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 12, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 6: -File: laboratory/laboratory/tests/test_base.py - > User input at line 19, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 19, trigger word "url_for(": - response = client.get(url_for('hello')) - -Vulnerability 7: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 8: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 9: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 26, trigger word "url_for(": - r = client.get(url_for('add',name='test0')) - -Vulnerability 10: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 11: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 12: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 27, trigger word "url_for(": - r = client.get(url_for('add',name='test1')) - -Vulnerability 13: -File: laboratory/laboratory/tests/test_base.py - > User input at line 26, trigger word "get(": - r = client.get(url_for('add',name='test0')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 14: -File: laboratory/laboratory/tests/test_base.py - > User input at line 27, trigger word "get(": - r = client.get(url_for('add',name='test1')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 15: -File: laboratory/laboratory/tests/test_base.py - > User input at line 28, trigger word "get(": - r = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 28, trigger word "url_for(": - r = client.get(url_for('hello')) - -Vulnerability 16: -File: laboratory/laboratory/tests/test_base.py - > User input at line 36, trigger word "get(": - response = client.get(url_for('hello')) -File: laboratory/laboratory/tests/test_base.py - > reaches line 36, trigger word "url_for(": - response = client.get(url_for('hello')) - - - -hkalexling/Twitter-Like-Count -https://github.com/hkalexling/Twitter-Like-Count -Entry file: Twitter-Like-Count/__init__.py -Scanned: 2016-10-25 23:53:48.467972 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ljxxcaijing/flask -https://github.com/ljxxcaijing/flask -Entry file: None -Scanned: 2016-10-25 23:53:50.399875 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -PacktPublishing/Mastering-Flask -https://github.com/PacktPublishing/Mastering-Flask -Entry file: Mastering-Flask/Chapter 13_Code/Chapter 13/webapp/__init__.py -Scanned: 2016-10-25 23:53:52.549179 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -migrateup/flaskr -https://github.com/migrateup/flaskr -Entry file: None -Scanned: 2016-10-25 23:53:53.086162 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/migrateup/flaskr. - -reparadocs/Flask-HelloWorldBot -https://github.com/reparadocs/Flask-HelloWorldBot -Entry file: Flask-HelloWorldBot/HelloWorldBot.py -Scanned: 2016-10-25 23:53:54.484699 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -singingwolfboy/flask-sse -https://github.com/singingwolfboy/flask-sse -Entry file: flask-sse/tests/conftest.py -Scanned: 2016-10-25 23:53:55.926372 -No vulnerabilities found. - - -pankajpant22/flask -https://github.com/pankajpant22/flask -Entry file: None -Scanned: 2016-10-25 23:54:13.497423 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -underdogio/flask-graylog -https://github.com/underdogio/flask-graylog -Entry file: flask-graylog/example/app.py -Scanned: 2016-10-25 23:54:20.844714 -No vulnerabilities found. - - -adyouri/flask-basics -https://github.com/adyouri/flask-basics -Entry file: flask-basics/lesson5/app.py -Scanned: 2016-10-25 23:54:22.289456 -No vulnerabilities found. - - -KujiraProject/Flask-PAM -https://github.com/KujiraProject/Flask-PAM -Entry file: Flask-PAM/example/www.py -Scanned: 2016-10-25 23:54:24.708633 -No vulnerabilities found. - - -TwilioDevEd/automated-survey-flask -https://github.com/TwilioDevEd/automated-survey-flask -Entry file: automated-survey-flask/automated_survey_flask/__init__.py -Scanned: 2016-10-25 23:54:27.368360 -No vulnerabilities found. - - -gucxufangling/flask-- -https://github.com/gucxufangling/flask-- -Entry file: flask--/app/__init__.py -Scanned: 2016-10-25 23:54:31.837086 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pragmaticcoders/flask-react-seed -https://github.com/pragmaticcoders/flask-react-seed -Entry file: None -Scanned: 2016-10-25 23:54:32.437875 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pragmaticcoders/flask-react-seed. - -danil3d/flaskblog -https://github.com/danil3d/flaskblog -Entry file: None -Scanned: 2016-10-25 23:54:32.952405 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/danil3d/flaskblog. - -ailtoncsf/flasklearn -https://github.com/ailtoncsf/flasklearn -Entry file: flasklearn/flask-basics/app.py -Scanned: 2016-10-25 23:54:40.494439 -No vulnerabilities found. - - -VimDong/flaskme -https://github.com/VimDong/flaskme -Entry file: flaskme/app/__init__.py -Scanned: 2016-10-25 23:54:42.119872 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -axavio/flasky -https://github.com/axavio/flasky -Entry file: None -Scanned: 2016-10-25 23:54:42.634264 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -annoys-parrot/flaskbook -https://github.com/annoys-parrot/flaskbook -Entry file: flaskbook/application.py -Scanned: 2016-10-25 23:54:44.246705 -Vulnerability 1: -File: flaskbook/user/views.py - > User input at line 24, trigger word ".data": - user = User.objects.filter(username=form.username.data).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 37: user = None -File: flaskbook/user/views.py - > reaches line 24, trigger word "filter(": - user = User.objects.filter(username=form.username.data).first() - -Vulnerability 2: -File: flaskbook/user/views.py - > User input at line 31, trigger word "get(": - next = session.get('next') -Reassigned in: - File: flaskbook/user/views.py - > Line 35: ret_MAYBE_FUNCTION_NAME = 'User logged in' - File: flaskbook/user/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = render_template('user/login.html',form=form, error=error) -File: flaskbook/user/views.py - > reaches line 33, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(next) - -Vulnerability 3: -File: flaskbook/user/views.py - > User input at line 47, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 49: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 62, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 4: -File: flaskbook/user/views.py - > User input at line 49, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 62, trigger word "render_template(": - body_html = render_template('mail/user/register.html',user=user) - -Vulnerability 5: -File: flaskbook/user/views.py - > User input at line 47, trigger word ".data": - hashed_password = bcrypt.hashpw(form.password.data, salt) -Reassigned in: - File: flaskbook/user/views.py - > Line 49: user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 63, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 6: -File: flaskbook/user/views.py - > User input at line 49, trigger word ".data": - user = User(username=form.username.data, password=hashed_password, email=form.email.data, first_name=form.first_name.data, last_name=form.last_name.data, change_configuration='new_email''confirmation_code'form.email.datacode) -File: flaskbook/user/views.py - > reaches line 63, trigger word "render_template(": - body_text = render_template('mail/user/register.txt',user=user) - -Vulnerability 7: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 90, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - -Vulnerability 8: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 106, trigger word "filter(": - if User.objects.filter(username=form.username.data.lower()).first(): - -Vulnerability 9: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 113, trigger word "filter(": - if User.objects.filter(email=form.email.data.lower()).first(): - -Vulnerability 10: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 126, trigger word "render_template(": - body_html = render_template('mail/user/change_email.html',user=user) - -Vulnerability 11: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 127, trigger word "render_template(": - body_text = render_template('mail/user/change_email.txt',user=user) - -Vulnerability 12: -File: flaskbook/user/views.py - > User input at line 90, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -Reassigned in: - File: flaskbook/user/views.py - > Line 92: form = EditForm(obj=user) - File: flaskbook/user/views.py - > Line 99: filename = secure_filename(form.image.data.filename) - File: flaskbook/user/views.py - > Line 100: file_path = os.path.join(UPLOAD_FOLDER, 'user', filename) - File: flaskbook/user/views.py - > Line 102: image_ts = str(thumbnail_process(file_path, 'user', str(user.id))) - File: flaskbook/user/views.py - > Line 122: form.email.data = user.email - File: flaskbook/user/views.py - > Line 133: user.profile_image = image_ts - File: flaskbook/user/views.py - > Line 97: image_ts = None -File: flaskbook/user/views.py - > reaches line 137, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user/edit.html',form=form, error=error, message=message, user=user) - -Vulnerability 13: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 160, trigger word "filter(": - user = User.objects.filter(email=form.email.data).first() - -Vulnerability 14: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 168, trigger word "render_template(": - body_html = render_template('mail/user/password_reset.html',user=user) - -Vulnerability 15: -File: flaskbook/user/views.py - > User input at line 160, trigger word ".data": - user = User.objects.filter(email=form.email.data).first() -File: flaskbook/user/views.py - > reaches line 169, trigger word "render_template(": - body_text = render_template('mail/user/password_reset.txt',user=user) - -Vulnerability 16: -File: flaskbook/user/views.py - > User input at line 215, trigger word "get(": - user = User.objects.filter(username=session.get('username')).first() -File: flaskbook/user/views.py - > reaches line 215, trigger word "filter(": - user = User.objects.filter(username=session.get('username')).first() - - - -jinxiaoyuan/flaskr -https://github.com/jinxiaoyuan/flaskr -Entry file: None -Scanned: 2016-10-25 23:54:44.770027 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jinxiaoyuan/flaskr. - -fkirwin/flaskhelloworld -https://github.com/fkirwin/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-25 23:54:48.043076 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wang7lu6qiang5/flasky -https://github.com/wang7lu6qiang5/flasky -Entry file: None -Scanned: 2016-10-25 23:54:48.557326 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ak042/flasktaskr -https://github.com/ak042/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:54:49.080037 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wanghaa/flasky -https://github.com/wanghaa/flasky -Entry file: None -Scanned: 2016-10-25 23:54:49.591341 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -omshankar1/flaskapp -https://github.com/omshankar1/flaskapp -Entry file: None -Scanned: 2016-10-25 23:54:50.104846 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/omshankar1/flaskapp. - -maxwang051/flasktaskr -https://github.com/maxwang051/flasktaskr -Entry file: None -Scanned: 2016-10-25 23:54:50.618328 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -joanna-solomiewicz/FlaskWorkshop -https://github.com/joanna-solomiewicz/FlaskWorkshop -Entry file: FlaskWorkshop/app.py -Scanned: 2016-10-25 23:54:53.669451 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskWorkshop/venv/lib/python3.5/operator.py - -NapoleonYoung/FlaskWeb -https://github.com/NapoleonYoung/FlaskWeb -Entry file: FlaskWeb/MyFirstWebServer/app/__init__.py -Scanned: 2016-10-25 23:54:58.520162 -Vulnerability 1: -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > User input at line 15, trigger word ".data": - name = form.name.data -Reassigned in: - File: FlaskWeb/MyFirstWebServer/app/main/views.py - > Line 12: name = None -File: FlaskWeb/MyFirstWebServer/app/main/views.py - > reaches line 18, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, name=name) - - - -rmGuarachi/flaskTutorial -https://github.com/rmGuarachi/flaskTutorial -Entry file: flaskTutorial/webapp.py -Scanned: 2016-10-25 23:54:59.853424 -No vulnerabilities found. - - -mion00/flaskSQLAlchemy -https://github.com/mion00/flaskSQLAlchemy -Entry file: flaskSQLAlchemy/app.py -Scanned: 2016-10-25 23:55:01.218388 -Vulnerability 1: -File: flaskSQLAlchemy/app.py - > User input at line 32, trigger word "get(": - service = request.args.get('service') -File: flaskSQLAlchemy/app.py - > reaches line 34, trigger word "filter(": - users = User.query.filter(User.json.has_key(service)).all() - - - -GriMel/FlaskFirst -https://github.com/GriMel/FlaskFirst -Entry file: FlaskFirst/app/__init__.py -Scanned: 2016-10-25 23:55:02.957350 -No vulnerabilities found. - - -Pazoles/Geocoder -https://github.com/Pazoles/Geocoder -Entry file: Geocoder/app.py -Scanned: 2016-10-25 23:55:06.939965 -No vulnerabilities found. - - -spring3th/flask-blogdemo -https://github.com/spring3th/flask-blogdemo -Entry file: flask-blogdemo/app/__init__.py -Scanned: 2016-10-25 23:55:08.562780 -Vulnerability 1: -File: flask-blogdemo/app/main/views.py - > User input at line 27, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 35: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['SIKA_POSTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 38: posts = pagination.items - File: flask-blogdemo/app/main/views.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flask-blogdemo/app/main/views.py - > User input at line 30, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 28: show_followed = False - File: flask-blogdemo/app/main/views.py - > Line 26: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flask-blogdemo/app/main/views.py - > User input at line 44, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 45: pagination = User.query.order_by(User.member_since.desc()).paginate(page,per_page=current_app.config['SIKA_USERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 46: alluser = pagination.items -File: flask-blogdemo/app/main/views.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('alluser.html',alluser=alluser, pagination=pagination, page=page) - -Vulnerability 4: -File: flask-blogdemo/app/main/views.py - > User input at line 106, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 108: page = post.comments.count() - 1 // current_app.config['SIKA_COMMENTS_PER_PAGE'] + 1 - File: flask-blogdemo/app/main/views.py - > Line 110: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['SIKA_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 111: comments = pagination.items - File: flask-blogdemo/app/main/views.py - > Line 105: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flask-blogdemo/app/main/views.py - > reaches line 112, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flask-blogdemo/app/main/views.py - > User input at line 184, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 185: pagination = user.followers.paginate(page,per_page=current_app.config['SIKA_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 188: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask-blogdemo/app/main/views.py - > Line 183: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 190, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flask-blogdemo/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 202: pagination = user.followed.paginate(page,per_page=current_app.config['SIKA_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask-blogdemo/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask-blogdemo/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: flask-blogdemo/app/main/views.py - > User input at line 230, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask-blogdemo/app/main/views.py - > Line 231: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['SIKA_COMMENTS_PER_PAGE'], error_out=False) - File: flask-blogdemo/app/main/views.py - > Line 232: comments = pagination.items -File: flask-blogdemo/app/main/views.py - > reaches line 233, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -NixonInnes/Flask-Blueprints -https://github.com/NixonInnes/Flask-Blueprints -Entry file: Flask-Blueprints/app/__init__.py -Scanned: 2016-10-25 23:55:10.831447 -No vulnerabilities found. - - -isichkodmitry/flask-caesar -https://github.com/isichkodmitry/flask-caesar -Entry file: flask-caesar/app/__init__.py -Scanned: 2016-10-25 23:55:12.269001 -No vulnerabilities found. - - -and3rson/flask-testsite -https://github.com/and3rson/flask-testsite -Entry file: flask-testsite/app.py -Scanned: 2016-10-25 23:55:13.588264 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SShayashi/flask-test -https://github.com/SShayashi/flask-test -Entry file: flask-test/flaskr/__init__.py -Scanned: 2016-10-25 23:55:14.991249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tyrelsouza/flask_vagrant -https://github.com/tyrelsouza/flask_vagrant -Entry file: flask_vagrant/code/src/app.py -Scanned: 2016-10-25 23:55:21.391221 -No vulnerabilities found. - - -ak042/flask-blog -https://github.com/ak042/flask-blog -Entry file: None -Scanned: 2016-10-25 23:55:21.934922 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhang-zhang/learning-flask -https://github.com/zhang-zhang/learning-flask -Entry file: learning-flask/flaskr.py -Scanned: 2016-10-25 23:55:25.238595 -No vulnerabilities found. - - -syniuhin/storyteller-flask -https://github.com/syniuhin/storyteller-flask -Entry file: storyteller-flask/app/__init__.py -Scanned: 2016-10-25 23:55:26.714668 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -arushijain/flask_tutorial -https://github.com/arushijain/flask_tutorial -Entry file: None -Scanned: 2016-10-25 23:55:28.267683 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/arushijain/flask_tutorial. - -iooop/flask-blog -https://github.com/iooop/flask-blog -Entry file: None -Scanned: 2016-10-25 23:55:32.822191 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -AndreyBalandin/flask-test -https://github.com/AndreyBalandin/flask-test -Entry file: flask-test/app.py -Scanned: 2016-10-25 23:55:34.137959 -No vulnerabilities found. - - -mastershao/lening-flask -https://github.com/mastershao/lening-flask -Entry file: None -Scanned: 2016-10-25 23:55:42.056314 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mastershao/lening-flask. - -markchodges/mastering-flask -https://github.com/markchodges/mastering-flask -Entry file: mastering-flask/webapp/__init__.py -Scanned: 2016-10-25 23:55:46.259644 -Vulnerability 1: -File: mastering-flask/webapp/controllers/blog.py - > User input at line 71, trigger word ".data": - filename = secure_filename(form.photo.data.filename) -Reassigned in: - File: mastering-flask/webapp/controllers/blog.py - > Line 74: filename = None -File: mastering-flask/webapp/controllers/blog.py - > reaches line 75, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('upload.html',form=form, filename=filename) - - - -keeleys/flask_RESTful -https://github.com/keeleys/flask_RESTful -Entry file: flask_RESTful/api/__init__.py -Scanned: 2016-10-25 23:55:47.702369 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Datamine/PokerTexter -https://github.com/Datamine/PokerTexter -Entry file: PokerTexter/run-pokertexter.py -Scanned: 2016-10-25 23:55:49.880586 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AmI-2016/python-Flask -https://github.com/AmI-2016/python-Flask -Entry file: python-Flask/flask-ex.py -Scanned: 2016-10-25 23:55:51.307774 -Vulnerability 1: -File: python-Flask/flask-ex.py - > User input at line 30, trigger word "form[": - user = request.form['user'] -Reassigned in: - File: python-Flask/flask-ex.py - > Line 33: session['user'] = user - File: python-Flask/flask-ex.py - > Line 34: session['valid'] = True -File: python-Flask/flask-ex.py - > reaches line 36, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('login.html',user=user) - - - -SorenPeterson/flask-intro -https://github.com/SorenPeterson/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-25 23:55:54.995539 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-intro/venv/lib/python2.7/sre_compile.py - -an5rag/flask-tutorial -https://github.com/an5rag/flask-tutorial -Entry file: None -Scanned: 2016-10-25 23:55:55.568995 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/an5rag/flask-tutorial. - -sugarguo/Flask_Blog -https://github.com/sugarguo/Flask_Blog -Entry file: Flask_Blog/app/__init__.py -Scanned: 2016-10-25 23:56:00.044832 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -andresgariglio/poc-flask -https://github.com/andresgariglio/poc-flask -Entry file: poc-flask/poc-flask/flask_rest_service/__init__.py -Scanned: 2016-10-25 23:56:01.498249 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -stuncyilmaz/flask_init -https://github.com/stuncyilmaz/flask_init -Entry file: flask_init/hello.py -Scanned: 2016-10-25 23:56:03.074105 -No vulnerabilities found. - - -mrpatiwi/flask-starter -https://github.com/mrpatiwi/flask-starter -Entry file: None -Scanned: 2016-10-25 23:56:03.600368 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mrpatiwi/flask-starter. - -jmccutchan/raspi_flask -https://github.com/jmccutchan/raspi_flask -Entry file: raspi_flask/app.py -Scanned: 2016-10-25 23:56:07.414160 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -priyankt68/flask_example -https://github.com/priyankt68/flask_example -Entry file: None -Scanned: 2016-10-25 23:56:07.969120 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/priyankt68/flask_example. - -zeratullich/flask_maizi -https://github.com/zeratullich/flask_maizi -Entry file: flask_maizi/app/__init__.py -Scanned: 2016-10-25 23:56:10.513983 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mtimebombm/python-flask -https://github.com/mtimebombm/python-flask -Entry file: python-flask/app/__init__.py -Scanned: 2016-10-25 23:56:12.239294 -No vulnerabilities found. - - -Lobster1991/learn_flask -https://github.com/Lobster1991/learn_flask -Entry file: learn_flask/app/models.py -Scanned: 2016-10-25 23:56:17.119633 -No vulnerabilities found. - - -JessyHurbain/Flask_test -https://github.com/JessyHurbain/Flask_test -Entry file: Flask_test/coucou.py -Scanned: 2016-10-25 23:56:18.439453 -No vulnerabilities found. - - -achinnac/microblog-flask -https://github.com/achinnac/microblog-flask -Entry file: microblog-flask/app/__init__.py -Scanned: 2016-10-25 23:56:19.728384 -No vulnerabilities found. - - -jpirih/Flask-Blog -https://github.com/jpirih/Flask-Blog -Entry file: None -Scanned: 2016-10-25 23:56:25.190999 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhaokefei/web_flask -https://github.com/zhaokefei/web_flask -Entry file: web_flask/app/__init__.py -Scanned: 2016-10-25 23:56:26.962714 -Vulnerability 1: -File: web_flask/app/main/views.py - > User input at line 24, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: web_flask/app/main/views.py - > Line 25: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: web_flask/app/main/views.py - > Line 28: posts = pagination.items - File: web_flask/app/main/views.py - > Line 23: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: web_flask/app/main/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - - - -BaichuanWu/Blog_flask -https://github.com/BaichuanWu/Blog_flask -Entry file: Blog_flask/flaskpractise.py -Scanned: 2016-10-25 23:56:28.261975 -No vulnerabilities found. - - -sreyemnayr/jss-flask -https://github.com/sreyemnayr/jss-flask -Entry file: jss-flask/jss-flask.py -Scanned: 2016-10-25 23:56:29.582612 -No vulnerabilities found. - - -hectorip/TinyFlaskExperiment -https://github.com/hectorip/TinyFlaskExperiment -Entry file: TinyFlaskExperiment/hello.py -Scanned: 2016-10-25 23:56:30.870668 -No vulnerabilities found. - - -WhiteShirts/windowsflask -https://github.com/WhiteShirts/windowsflask -Entry file: windowsflask/flasky/app/__init__.py -Scanned: 2016-10-25 23:56:32.625957 -Vulnerability 1: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: windowsflask/flasky/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 16: prev = None - File: windowsflask/flasky/app/api_1_0/posts.py - > Line 19: next = None -File: windowsflask/flasky/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 20: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 23: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: windowsflask/flasky/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: windowsflask/flasky/app/api_1_0/users.py - > Line 42: prev = None - File: windowsflask/flasky/app/api_1_0/users.py - > Line 45: next = None -File: windowsflask/flasky/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 15: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 18: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: windowsflask/flasky/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 43: prev = None - File: windowsflask/flasky/app/api_1_0/comments.py - > Line 46: next = None -File: windowsflask/flasky/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: windowsflask/flasky/app/main/views.py - > User input at line 27, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 37: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 40: posts = pagination.items - File: windowsflask/flasky/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: windowsflask/flasky/app/main/views.py - > User input at line 32, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 30: show_followed = False - File: windowsflask/flasky/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 42, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: windowsflask/flasky/app/main/views.py - > User input at line 67, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 68: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 71: posts = pagination.items -File: windowsflask/flasky/app/main/views.py - > reaches line 72, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: windowsflask/flasky/app/main/views.py - > User input at line 135, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 137: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: windowsflask/flasky/app/main/views.py - > Line 139: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 142: comments = pagination.items - File: windowsflask/flasky/app/main/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: windowsflask/flasky/app/main/views.py - > reaches line 143, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: windowsflask/flasky/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 202: pagination = user.followers.paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: windowsflask/flasky/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of ', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: windowsflask/flasky/app/main/views.py - > User input at line 217, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 218: pagination = user.followed.paginate(page,per_page=current_app.config['FLASK_POSTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 221: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: windowsflask/flasky/app/main/views.py - > Line 216: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: windowsflask/flasky/app/main/views.py - > reaches line 223, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: windowsflask/flasky/app/main/views.py - > User input at line 231, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: windowsflask/flasky/app/main/views.py - > Line 232: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: windowsflask/flasky/app/main/views.py - > Line 235: comments = pagination.items -File: windowsflask/flasky/app/main/views.py - > reaches line 236, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -ptomelle/appflask -https://github.com/ptomelle/appflask -Entry file: appflask/wsgi/myflaskapp.py -Scanned: 2016-10-25 23:56:34.175690 -No vulnerabilities found. - - -globocom/gbix -https://github.com/globocom/gbix -Entry file: gbix/src/server_jsonrpc.py -Scanned: 2016-10-25 23:56:35.614339 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -martinpeck/bedlam-slack -https://github.com/martinpeck/bedlam-slack -Entry file: bedlam-slack/bedlam_slack/__init__.py -Scanned: 2016-10-25 23:56:37.062273 -Vulnerability 1: -File: bedlam-slack/bedlam_slack/ud.py - > User input at line 11, trigger word "get(": - phrase = parse.quote_plus(request.values.get('text').strip()) -Reassigned in: - File: bedlam-slack/bedlam_slack/ud.py - > Line 13: response = 'response_type''text''unfurl_links''in_channel''http://www.urbandictionary.com/define.php?term=' + phrase'true' -File: bedlam-slack/bedlam_slack/ud.py - > reaches line 19, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -kud-i/FlaskRestAPI -https://github.com/kud-i/FlaskRestAPI -Entry file: FlaskRestAPI/REST_API.py -Scanned: 2016-10-25 23:56:38.368209 -Vulnerability 1: -File: FlaskRestAPI/REST_API.py - > User input at line 75, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: FlaskRestAPI/REST_API.py - > reaches line 82, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -mapingfan/Flask-Web-Dev -https://github.com/mapingfan/Flask-Web-Dev -Entry file: Flask-Web-Dev/app.py -Scanned: 2016-10-25 23:56:46.733269 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -opendatakosovo/flask-app-framework -https://github.com/opendatakosovo/flask-app-framework -Entry file: flask-app-framework/app/__init__.py -Scanned: 2016-10-25 23:56:48.252284 -No vulnerabilities found. - - -cbeasley92/Flask-REST-API-Testing -https://github.com/cbeasley92/Flask-REST-API-Testing -Entry file: Flask-REST-API-Testing/rest_api.py -Scanned: 2016-10-25 23:56:49.560717 -Vulnerability 1: -File: Flask-REST-API-Testing/rest_api.py - > User input at line 88, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: Flask-REST-API-Testing/rest_api.py - > reaches line 95, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -kriesbeck/flask_heroku_practice -https://github.com/kriesbeck/flask_heroku_practice -Entry file: flask_heroku_practice/app/__init__.py -Scanned: 2016-10-25 23:56:51.123626 -No vulnerabilities found. - - -zelinlee0303/python-flask-mysql -https://github.com/zelinlee0303/python-flask-mysql -Entry file: python-flask-mysql/app/__init__.py -Scanned: 2016-10-25 23:56:52.720275 -Vulnerability 1: -File: python-flask-mysql/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 26: posts = pagination.items - File: python-flask-mysql/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: python-flask-mysql/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: python-flask-mysql/app/main/views.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 42: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 45: posts = pagination.items - File: python-flask-mysql/app/main/views.py - > Line 40: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 46, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('mindtrace.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 3: -File: python-flask-mysql/app/main/views.py - > User input at line 118, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 119: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 122: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: python-flask-mysql/app/main/views.py - > Line 117: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 124, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='被', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 4: -File: python-flask-mysql/app/main/views.py - > User input at line 135, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 136: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 139: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: python-flask-mysql/app/main/views.py - > Line 134: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.mindtrace')) -File: python-flask-mysql/app/main/views.py - > reaches line 141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 5: -File: python-flask-mysql/app/main/views.py - > User input at line 154, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: python-flask-mysql/app/main/views.py - > Line 155: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: python-flask-mysql/app/main/views.py - > Line 158: posts = pagination.items -File: python-flask-mysql/app/main/views.py - > reaches line 159, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - - - -ZAGJAB/Flask_OAuth2 -https://github.com/ZAGJAB/Flask_OAuth2 -Entry file: Flask_OAuth2/app.py -Scanned: 2016-10-25 23:56:54.023385 -Vulnerability 1: -File: Flask_OAuth2/app.py - > User input at line 75, trigger word "get(": - code = request.args.get('code') -Reassigned in: - File: Flask_OAuth2/app.py - > Line 76: uri = 'http://localhost:5000/oauth?response_type=%s&client_id=%s&redirect_uri=%s' % (code, client_id, redirect_uri) -File: Flask_OAuth2/app.py - > reaches line 77, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(uri) - - - -k-funk/flask-bower-bootstrap-compass -https://github.com/k-funk/flask-bower-bootstrap-compass -Entry file: flask-bower-bootstrap-compass/app_name/__init__.py -Scanned: 2016-10-25 23:56:57.380250 -No vulnerabilities found. - - -SamirKanaan/PlantillaFlaskREST3 -https://github.com/SamirKanaan/PlantillaFlaskREST3 -Entry file: PlantillaFlaskREST3/inicia.py -Scanned: 2016-10-25 23:56:58.795844 -No vulnerabilities found. - - -cruor99/heartbeat-flask-app -https://github.com/cruor99/heartbeat-flask-app -Entry file: heartbeat-flask-app/flaskheartbeat/__init__.py -Scanned: 2016-10-25 23:57:00.469314 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sakib3/flask_cartridge_Heroku -https://github.com/sakib3/flask_cartridge_Heroku -Entry file: flask_cartridge_Heroku/app.py -Scanned: 2016-10-25 23:57:01.954065 -No vulnerabilities found. - - -gclabon/Twilio-Flask-CSV -https://github.com/gclabon/Twilio-Flask-CSV -Entry file: Twilio-Flask-CSV/twilioFlaskBasic/twilioFlaskBasic.py -Scanned: 2016-10-25 23:57:03.408805 -No vulnerabilities found. - - -ak042/flask-hello-world -https://github.com/ak042/flask-hello-world -Entry file: None -Scanned: 2016-10-25 23:57:03.991417 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -king100/Flask-Hello-World- -https://github.com/king100/Flask-Hello-World- -Entry file: Flask-Hello-World-/app.py -Scanned: 2016-10-25 23:57:08.278334 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: Flask-Hello-World-/flask/lib/python2.7/sre_compile.py - -MMohan1/Flask_with_celery -https://github.com/MMohan1/Flask_with_celery -Entry file: Flask_with_celery/flask_app_test/flask_app/edge/__init__.py -Scanned: 2016-10-25 23:57:09.644395 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jhelgren/flask_movie_reviews -https://github.com/jhelgren/flask_movie_reviews -Entry file: flask_movie_reviews/server.py -Scanned: 2016-10-25 23:57:11.066976 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -NixonInnes/Flask-Blueprints-Logins -https://github.com/NixonInnes/Flask-Blueprints-Logins -Entry file: Flask-Blueprints-Logins/app/__init__.py -Scanned: 2016-10-25 23:57:12.877117 -No vulnerabilities found. - - -nejohnson2/flask-template-app -https://github.com/nejohnson2/flask-template-app -Entry file: flask-template-app/app.py -Scanned: 2016-10-25 23:57:14.285872 -No vulnerabilities found. - - -xlmn/DiplomFlaskAngular -https://github.com/xlmn/DiplomFlaskAngular -Entry file: DiplomFlaskAngular/app/__init__.py -Scanned: 2016-10-25 23:57:19.120151 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -AMontalva/flask-thinkful-api -https://github.com/AMontalva/flask-thinkful-api -Entry file: flask-thinkful-api/posts/__init__.py -Scanned: 2016-10-25 23:57:20.443705 -Vulnerability 1: -File: flask-thinkful-api/posts/api.py - > User input at line 16, trigger word "get(": - title_like = request.args.get('title_like') -Reassigned in: - File: flask-thinkful-api/posts/api.py - > Line 22: posts = posts.order_by(models.Post.id) - File: flask-thinkful-api/posts/api.py - > Line 25: data = json.dumps([post.as_dictionary() for post in posts]) - File: flask-thinkful-api/posts/api.py - > Line 26: ret_MAYBE_FUNCTION_NAME = Response(data, 200,mimetype='application/json') - File: flask-thinkful-api/posts/api.py - > Line 19: posts = session.query(models.Post) -File: flask-thinkful-api/posts/api.py - > reaches line 21, trigger word "filter(": - posts = posts.filter(models.Post.title.contains(title_like)) - - - -davidnuon/flask-falcon-example -https://github.com/davidnuon/flask-falcon-example -Entry file: flask-falcon-example/flask-demo.py -Scanned: 2016-10-25 23:57:21.746998 -No vulnerabilities found. - - -genedex/flask-neo4j -https://github.com/genedex/flask-neo4j -Entry file: flask-neo4j/blog/views.py -Scanned: 2016-10-25 23:57:27.078727 -No vulnerabilities found. - - -yazquez/example-rest-flask.python -https://github.com/yazquez/example-rest-flask.python -Entry file: None -Scanned: 2016-10-25 23:57:30.001066 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yazquez/example-rest-flask.python. - -sceene/test-flask-app -https://github.com/sceene/test-flask-app -Entry file: None -Scanned: 2016-10-25 23:57:31.403399 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sceene/test-flask-app. - -mtnriver/docker-flask-app -https://github.com/mtnriver/docker-flask-app -Entry file: docker-flask-app/app.py -Scanned: 2016-10-25 23:57:32.683300 -No vulnerabilities found. - - -josephmuli/Flask -https://github.com/josephmuli/Flask -Entry file: None -Scanned: 2016-10-25 23:57:35.509860 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -janukobytsch/flask-autofixture -https://github.com/janukobytsch/flask-autofixture -Entry file: flask-autofixture/tests/conftest.py -Scanned: 2016-10-25 23:57:39.551860 -No vulnerabilities found. - - -paceko/shopping-site -https://github.com/paceko/shopping-site -Entry file: shopping-site/shoppingsite.py -Scanned: 2016-10-25 23:57:45.819025 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pragmaticcoders/flask-react-seed -https://github.com/pragmaticcoders/flask-react-seed -Entry file: None -Scanned: 2016-10-25 23:57:47.331670 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/pragmaticcoders/flask-react-seed. - -axavio/flasky -https://github.com/axavio/flasky -Entry file: None -Scanned: 2016-10-25 23:57:48.837954 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rahulballal/flasktemplate -https://github.com/rahulballal/flasktemplate -Entry file: flasktemplate/app.py -Scanned: 2016-10-25 23:57:51.268915 -No vulnerabilities found. - - -dimdal/flasktutorial -https://github.com/dimdal/flasktutorial -Entry file: None -Scanned: 2016-10-25 23:57:51.788685 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/dimdal/flasktutorial. - -bspaans/flaskal -https://github.com/bspaans/flaskal -Entry file: flaskal/flaskal/imports.py -Scanned: 2016-10-25 23:57:54.222465 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -stoodsteal/flasky -https://github.com/stoodsteal/flasky -Entry file: None -Scanned: 2016-10-25 23:57:56.739733 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -fkirwin/flaskhelloworld -https://github.com/fkirwin/flaskhelloworld -Entry file: flaskhelloworld/hello_world.py -Scanned: 2016-10-25 23:58:02.248294 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -thedrew82/flaskr -https://github.com/thedrew82/flaskr -Entry file: None -Scanned: 2016-10-25 23:58:02.789718 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thedrew82/flaskr. - -shenmj053/flaskr -https://github.com/shenmj053/flaskr -Entry file: None -Scanned: 2016-10-25 23:58:03.332328 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shenmj053/flaskr. - -zverxw13/flaskr -https://github.com/zverxw13/flaskr -Entry file: None -Scanned: 2016-10-25 23:58:03.847553 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zverxw13/flaskr. - -allergier/flaskr -https://github.com/allergier/flaskr -Entry file: None -Scanned: 2016-10-25 23:58:04.370358 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/allergier/flaskr. - -liuhuai0217/flasky -https://github.com/liuhuai0217/flasky -Entry file: None -Scanned: 2016-10-25 23:58:04.892758 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -erk52/FlaskDynamics -https://github.com/erk52/FlaskDynamics -Entry file: FlaskDynamics/view.py -Scanned: 2016-10-25 23:58:10.218006 -Vulnerability 1: -File: FlaskDynamics/view.py - > User input at line 18, trigger word ".data": - result = phasePlot(form.XPrime.data, form.YPrime.data) -Reassigned in: - File: FlaskDynamics/view.py - > Line 20: result = None -File: FlaskDynamics/view.py - > reaches line 22, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('new_view.html',form=form, result=result) - - - -KentaYamada/flaskr2 -https://github.com/KentaYamada/flaskr2 -Entry file: flaskr2/__init__.py -Scanned: 2016-10-25 23:58:11.526383 -No vulnerabilities found. - - -HaarisKhan/FlaskDemos -https://github.com/HaarisKhan/FlaskDemos -Entry file: None -Scanned: 2016-10-25 23:58:12.059973 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gnu4cn/flaskLearnings -https://github.com/gnu4cn/flaskLearnings -Entry file: flaskLearnings/demos/request_attributes.py -Scanned: 2016-10-25 23:58:19.533069 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -pepemontana7/flaskFinal -https://github.com/pepemontana7/flaskFinal -Entry file: flaskFinal/firstapp/hello.py -Scanned: 2016-10-25 23:58:20.846296 -No vulnerabilities found. - - -rishilification/Flask_Sql -https://github.com/rishilification/Flask_Sql -Entry file: Flask_Sql/app.py -Scanned: 2016-10-25 23:58:22.560721 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -marvelaz/Flask_python -https://github.com/marvelaz/Flask_python -Entry file: Flask_python/app.py -Scanned: 2016-10-25 23:58:23.859755 -Vulnerability 1: -File: Flask_python/app.py - > User input at line 30, trigger word ".data": - url = form.url.data -File: Flask_python/app.py - > reaches line 33, trigger word "flash(": - flash('Stored bookmark '{}''.format(url)) - - - -HDking/flask-blog -https://github.com/HDking/flask-blog -Entry file: None -Scanned: 2016-10-25 23:58:26.407804 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Topytops/nice-flask -https://github.com/Topytops/nice-flask -Entry file: nice-flask/nice.py -Scanned: 2016-10-25 23:58:28.716148 -No vulnerabilities found. - - -Bluepig/flask-blog -https://github.com/Bluepig/flask-blog -Entry file: None -Scanned: 2016-10-25 23:58:29.230339 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -groovycol/flask-intro -https://github.com/groovycol/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:31.544786 -No vulnerabilities found. - - -lyoness1/flask-intro -https://github.com/lyoness1/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:32.858454 -No vulnerabilities found. - - -kelseyoo14/flask-intro -https://github.com/kelseyoo14/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:34.159351 -No vulnerabilities found. - - -filiplasak/flask-skeleton -https://github.com/filiplasak/flask-skeleton -Entry file: flask-skeleton/app/__init__.py -Scanned: 2016-10-25 23:58:36.506210 -No vulnerabilities found. - - -tyrelsouza/flask_vagrant -https://github.com/tyrelsouza/flask_vagrant -Entry file: flask_vagrant/code/src/app.py -Scanned: 2016-10-25 23:58:37.797094 -No vulnerabilities found. - - -HBKO/flask-test -https://github.com/HBKO/flask-test -Entry file: None -Scanned: 2016-10-25 23:58:40.159625 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HBKO/flask-test. - -wolfram74/flask_exploration -https://github.com/wolfram74/flask_exploration -Entry file: flask_exploration/app2.py -Scanned: 2016-10-25 23:58:45.487183 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -CrustyBarnacle/flask_app -https://github.com/CrustyBarnacle/flask_app -Entry file: None -Scanned: 2016-10-25 23:58:46.010252 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Weilor/learn_flask -https://github.com/Weilor/learn_flask -Entry file: learn_flask/app/__init__.py -Scanned: 2016-10-25 23:58:48.570424 -No vulnerabilities found. - - -cristinamclarkin/flask-intro -https://github.com/cristinamclarkin/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:49.876735 -No vulnerabilities found. - - -emilydowgialo/flask-intro -https://github.com/emilydowgialo/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:51.179484 -No vulnerabilities found. - - -roboticmonkey/flask-intro -https://github.com/roboticmonkey/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:53.492151 -No vulnerabilities found. - - -sarahcstringer/flask-intro -https://github.com/sarahcstringer/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:54.794641 -No vulnerabilities found. - - -askiefer/flask-intro -https://github.com/askiefer/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:58.098786 -No vulnerabilities found. - - -lachilles/flask-intro -https://github.com/lachilles/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:58:59.414936 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dencynluv/Flask--Intro -https://github.com/dencynluv/Flask--Intro -Entry file: Flask--Intro/nice.py -Scanned: 2016-10-25 23:59:03.767091 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -holmandw/flask-pi -https://github.com/holmandw/flask-pi -Entry file: flask-pi/app/__init__.py -Scanned: 2016-10-25 23:59:05.314026 -No vulnerabilities found. - - -amiceli/flask-blog -https://github.com/amiceli/flask-blog -Entry file: None -Scanned: 2016-10-25 23:59:05.831127 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kellyhiggins/flask-intro -https://github.com/kellyhiggins/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:59:07.129127 -No vulnerabilities found. - - -hollywoodno/flask-intro -https://github.com/hollywoodno/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:59:08.451205 -No vulnerabilities found. - - -k-hub/flask-intro -https://github.com/k-hub/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:59:10.775423 -No vulnerabilities found. - - -sunshine-water/Flask_Exercise -https://github.com/sunshine-water/Flask_Exercise -Entry file: Flask_Exercise/nice.py -Scanned: 2016-10-25 23:59:12.085747 -No vulnerabilities found. - - -loopDelicious/flask-intro -https://github.com/loopDelicious/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:59:13.401136 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -mastershao/lening-flask -https://github.com/mastershao/lening-flask -Entry file: None -Scanned: 2016-10-25 23:59:13.938467 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/mastershao/lening-flask. - -bulain/flask-demo -https://github.com/bulain/flask-demo -Entry file: flask-demo/hello.py -Scanned: 2016-10-25 23:59:21.267201 -No vulnerabilities found. - - -diannaowa/flask-blog -https://github.com/diannaowa/flask-blog -Entry file: None -Scanned: 2016-10-25 23:59:21.785422 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hyhlinux/stu_flask -https://github.com/hyhlinux/stu_flask -Entry file: stu_flask/part3/h.py -Scanned: 2016-10-25 23:59:29.554143 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -wOstensen/flask-first -https://github.com/wOstensen/flask-first -Entry file: None -Scanned: 2016-10-25 23:59:38.009563 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Tacolizard/flask-kott -https://github.com/Tacolizard/flask-kott -Entry file: flask-kott/kott.py -Scanned: 2016-10-25 23:59:39.328800 -No vulnerabilities found. - - -wattanar/flask-sample -https://github.com/wattanar/flask-sample -Entry file: flask-sample/app.py -Scanned: 2016-10-25 23:59:40.617864 -No vulnerabilities found. - - -rpalo/flask-headlines -https://github.com/rpalo/flask-headlines -Entry file: flask-headlines/headlines.py -Scanned: 2016-10-25 23:59:41.933384 -No vulnerabilities found. - - -stanliski/flask_dev -https://github.com/stanliski/flask_dev -Entry file: None -Scanned: 2016-10-25 23:59:45.310883 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -an5rag/flask-tutorial -https://github.com/an5rag/flask-tutorial -Entry file: None -Scanned: 2016-10-25 23:59:45.824040 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/an5rag/flask-tutorial. - -sugarguo/Flask_Blog -https://github.com/sugarguo/Flask_Blog -Entry file: Flask_Blog/app/__init__.py -Scanned: 2016-10-25 23:59:51.529525 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tlwlmy/flask_base -https://github.com/tlwlmy/flask_base -Entry file: flask_base/app/__init__.py -Scanned: 2016-10-25 23:59:53.021424 -No vulnerabilities found. - - -themuppet2/flask-blog -https://github.com/themuppet2/flask-blog -Entry file: None -Scanned: 2016-10-25 23:59:53.574207 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Aaver69/Python-Flask -https://github.com/Aaver69/Python-Flask -Entry file: None -Scanned: 2016-10-25 23:59:55.314038 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Aaver69/Python-Flask. - -Aperyon/flask-base -https://github.com/Aperyon/flask-base -Entry file: flask-base/src/__init__.py -Scanned: 2016-10-25 23:59:56.775982 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ak042/flask-bdd -https://github.com/ak042/flask-bdd -Entry file: flask-bdd/flaskr.py -Scanned: 2016-10-25 23:59:58.097900 -No vulnerabilities found. - - -k-wiz/flask-intro -https://github.com/k-wiz/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-25 23:59:59.404702 -No vulnerabilities found. - - -dflee/flask-intro -https://github.com/dflee/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:00.712178 -No vulnerabilities found. - - -glasses4days/flask-intro -https://github.com/glasses4days/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:02.714538 -No vulnerabilities found. - - -maheskett/flask-intro -https://github.com/maheskett/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:04.727552 -No vulnerabilities found. - - -kelly4strength/flask-lab -https://github.com/kelly4strength/flask-lab -Entry file: flask-lab/nice.py -Scanned: 2016-10-26 00:00:06.418146 -No vulnerabilities found. - - -kjlundsgaard/flask-intro -https://github.com/kjlundsgaard/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:07.784670 -No vulnerabilities found. - - -laurensila/flask-intro -https://github.com/laurensila/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:09.258034 -No vulnerabilities found. - - -Munnu/flask-intro -https://github.com/Munnu/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:10.696697 -No vulnerabilities found. - - -nanoha25/flask_local -https://github.com/nanoha25/flask_local -Entry file: flask_local/setup.py -Scanned: 2016-10-26 00:00:17.294218 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -yaoice/flask-micblog -https://github.com/yaoice/flask-micblog -Entry file: flask-micblog/micblog/app/__init__.py -Scanned: 2016-10-26 00:00:19.281283 -Vulnerability 1: -File: flask-micblog/micblog/app/views.py - > User input at line 92, trigger word "get(": - user_name = request.form.get('user_name') -Reassigned in: - File: flask-micblog/micblog/app/views.py - > Line 102: user.nickname = user_name -File: flask-micblog/micblog/app/views.py - > reaches line 95, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - -Vulnerability 2: -File: flask-micblog/micblog/app/views.py - > User input at line 93, trigger word "get(": - user_email = request.form.get('user_email') -Reassigned in: - File: flask-micblog/micblog/app/views.py - > Line 103: user.email = user_email -File: flask-micblog/micblog/app/views.py - > reaches line 95, trigger word "filter(": - register_check = User.query.filter(db.or_(User.nickname == user_name, User.email == user_email)).first() - - - -Wynndow/flask_skeleton -https://github.com/Wynndow/flask_skeleton -Entry file: None -Scanned: 2016-10-26 00:00:19.808733 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Wynndow/flask_skeleton. - -chiubaca/flask-app -https://github.com/chiubaca/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-26 00:00:28.233520 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -afarges/flask-intro -https://github.com/afarges/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:30.060593 -No vulnerabilities found. - - -paceko/flask-intro -https://github.com/paceko/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:31.556022 -No vulnerabilities found. - - -ucgyyf/yaoke-flask -https://github.com/ucgyyf/yaoke-flask -Entry file: yaoke-flask/app/__init__.py -Scanned: 2016-10-26 00:00:33.190444 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -SethHWeidman/flask-test -https://github.com/SethHWeidman/flask-test -Entry file: None -Scanned: 2016-10-26 00:00:34.236593 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/SethHWeidman/flask-test. - -rpalo/flask-firstapp -https://github.com/rpalo/flask-firstapp -Entry file: flask-firstapp/hello.py -Scanned: 2016-10-26 00:00:39.563565 -No vulnerabilities found. - - -Jar-win/Flask-Pratice -https://github.com/Jar-win/Flask-Pratice -Entry file: Flask-Pratice/8a-login/app/__init__.py -Scanned: 2016-10-26 00:00:41.048843 -No vulnerabilities found. - - -stuncyilmaz/flask_init -https://github.com/stuncyilmaz/flask_init -Entry file: flask_init/hello.py -Scanned: 2016-10-26 00:00:42.345476 -No vulnerabilities found. - - -tageee/test_Flask -https://github.com/tageee/test_Flask -Entry file: test_Flask/hello.py -Scanned: 2016-10-26 00:00:44.125295 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Aisling-Dempsey/flask-intro -https://github.com/Aisling-Dempsey/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:47.443455 -No vulnerabilities found. - - -tkahnhau/flask-intro -https://github.com/tkahnhau/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:48.789481 -No vulnerabilities found. - - -ubermelon/Flask_exercise -https://github.com/ubermelon/Flask_exercise -Entry file: Flask_exercise/nice.py -Scanned: 2016-10-26 00:00:50.144074 -No vulnerabilities found. - - -lsylk/flask-intro -https://github.com/lsylk/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:51.456416 -No vulnerabilities found. - - -minyisme/flask-intro -https://github.com/minyisme/flask-intro -Entry file: flask-intro/nice.py -Scanned: 2016-10-26 00:00:53.759826 -No vulnerabilities found. - - -allisonscofield/flask-lab -https://github.com/allisonscofield/flask-lab -Entry file: flask-lab/nice.py -Scanned: 2016-10-26 00:00:55.074137 -No vulnerabilities found. - - -TiyaBelay/Flask-intro -https://github.com/TiyaBelay/Flask-intro -Entry file: Flask-intro/nice.py -Scanned: 2016-10-26 00:00:56.416045 -No vulnerabilities found. - - -chck/flask-sandbox -https://github.com/chck/flask-sandbox -Entry file: flask-sandbox/app.py -Scanned: 2016-10-26 00:00:57.773992 -Vulnerability 1: -File: flask-sandbox/controllers.py - > User input at line 22, trigger word "get(": - limit = request.args.get('limit', 20) -Reassigned in: - File: flask-sandbox/controllers.py - > Line 27: ret_MAYBE_FUNCTION_NAME = jsonify(data=[material.serialize for material in materials]) -File: flask-sandbox/controllers.py - > reaches line 24, trigger word "filter(": - materials = idMaterial.query.filter(Material.id == id)Material.query.order_by(Material.updated_at.desc()).limit(limit) - - - -NixonInnes/Flask-Calendar -https://github.com/NixonInnes/Flask-Calendar -Entry file: Flask-Calendar/app/__init__.py -Scanned: 2016-10-26 00:00:59.613498 -Vulnerability 1: -File: Flask-Calendar/app/blueprints/calendar/views.py - > User input at line 30, trigger word ".data": - calendar = Calendar(author_id=current_user.id, name=form.name.data) -Reassigned in: - File: Flask-Calendar/app/blueprints/calendar/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = render_template('calendar/calendar_form.html',form=form) -File: Flask-Calendar/app/blueprints/calendar/views.py - > reaches line 37, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('calendar.get',id=calendar.id)) - -Vulnerability 2: -File: Flask-Calendar/app/blueprints/calendar/views.py - > User input at line 30, trigger word ".data": - calendar = Calendar(author_id=current_user.id, name=form.name.data) -Reassigned in: - File: Flask-Calendar/app/blueprints/calendar/views.py - > Line 38: ret_MAYBE_FUNCTION_NAME = render_template('calendar/calendar_form.html',form=form) -File: Flask-Calendar/app/blueprints/calendar/views.py - > reaches line 37, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('calendar.get',id=calendar.id)) - - - -aurigadl/flask-base -https://github.com/aurigadl/flask-base -Entry file: flask-base/app.py -Scanned: 2016-10-26 00:01:01.151266 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -tageee/Blog -https://github.com/tageee/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-26 00:01:03.290213 -Vulnerability 1: -File: Blog/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 33: posts = pagination.items - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Blog/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Blog/app/main/views.py - > Line 23: show_followed = False - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Blog/app/main/views.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 60: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 63: posts = pagination.items -File: Blog/app/main/views.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Blog/app/main/views.py - > User input at line 122, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 124: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Blog/app/main/views.py - > Line 126: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 129: comments = pagination.items - File: Blog/app/main/views.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Blog/app/main/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Blog/app/main/views.py - > User input at line 189, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 190: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 193: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 188: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Blog/app/main/views.py - > User input at line 206, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 207: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 210: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 205: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 212, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Blog/app/main/views.py - > User input at line 221, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 222: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 225: comments = pagination.items -File: Blog/app/main/views.py - > reaches line 226, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -amateurPotato/flask -https://github.com/amateurPotato/flask -Entry file: None -Scanned: 2016-10-26 00:01:05.571778 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ahdrage/flask -https://github.com/ahdrage/flask -Entry file: None -Scanned: 2016-10-26 00:01:06.083534 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Goomah/flask -https://github.com/Goomah/flask -Entry file: None -Scanned: 2016-10-26 00:01:07.660084 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ultramarine7/flask -https://github.com/ultramarine7/flask -Entry file: None -Scanned: 2016-10-26 00:01:09.200302 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -od210291jpv/flask -https://github.com/od210291jpv/flask -Entry file: None -Scanned: 2016-10-26 00:01:10.718133 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MonPower/Flask -https://github.com/MonPower/Flask -Entry file: None -Scanned: 2016-10-26 00:01:11.281314 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -wenzi0595/flask -https://github.com/wenzi0595/flask -Entry file: None -Scanned: 2016-10-26 00:01:18.804282 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -singingwolfboy/build-a-flask-api -https://github.com/singingwolfboy/build-a-flask-api -Entry file: build-a-flask-api/step08/puppy.py -Scanned: 2016-10-26 00:01:21.962900 -Vulnerability 1: -File: build-a-flask-api/step08/puppy.py - > User input at line 25, trigger word "get(": - name = request.form.get('name') -Reassigned in: - File: build-a-flask-api/step08/puppy.py - > Line 31: slug = slugify(name) - File: build-a-flask-api/step08/puppy.py - > Line 34: puppy = Puppy(slug=slug, name=name, image_url=image_url) - File: build-a-flask-api/step08/puppy.py - > Line 43: resp.headers['Location'] = location -File: build-a-flask-api/step08/puppy.py - > reaches line 40, trigger word "url_for(": - location = url_for('get_puppy',slug=slug) - - - -sunary/flask-optimize -https://github.com/sunary/flask-optimize -Entry file: flask-optimize/tests/flask_app.py -Scanned: 2016-10-26 00:01:23.380848 -No vulnerabilities found. - - -kashyap32/flask-REST -https://github.com/kashyap32/flask-REST -Entry file: None -Scanned: 2016-10-26 00:01:31.455674 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/kashyap32/flask-REST. - -Julzmbugua/flasky -https://github.com/Julzmbugua/flasky -Entry file: None -Scanned: 2016-10-26 00:01:34.493307 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rsk7/flaskapp -https://github.com/rsk7/flaskapp -Entry file: None -Scanned: 2016-10-26 00:01:35.012896 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/rsk7/flaskapp. - -Sarmacid/flaskr -https://github.com/Sarmacid/flaskr -Entry file: None -Scanned: 2016-10-26 00:01:39.534942 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Sarmacid/flaskr. - -skhe/flasky -https://github.com/skhe/flasky -Entry file: None -Scanned: 2016-10-26 00:01:41.440749 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -baloo98/flasky -https://github.com/baloo98/flasky -Entry file: None -Scanned: 2016-10-26 00:01:41.964335 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sanketg10/flaskapp -https://github.com/sanketg10/flaskapp -Entry file: None -Scanned: 2016-10-26 00:01:43.547681 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/sanketg10/flaskapp. - -neotrinity/flaskavro -https://github.com/neotrinity/flaskavro -Entry file: flaskavro/main.py -Scanned: 2016-10-26 00:01:47.880805 -No vulnerabilities found. - - -zeroisme/flaskblog -https://github.com/zeroisme/flaskblog -Entry file: None -Scanned: 2016-10-26 00:01:48.401907 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/zeroisme/flaskblog. - -Mendurim/flasktut -https://github.com/Mendurim/flasktut -Entry file: flasktut/hello.py -Scanned: 2016-10-26 00:01:50.731251 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -HDking/flasktaskr -https://github.com/HDking/flasktaskr -Entry file: None -Scanned: 2016-10-26 00:01:51.279327 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gjcooper/flaskprac -https://github.com/gjcooper/flaskprac -Entry file: flaskprac/app/__init__.py -Scanned: 2016-10-26 00:01:54.723192 -No vulnerabilities found. - - -deliveryyyyguy/flaskapp -https://github.com/deliveryyyyguy/flaskapp -Entry file: None -Scanned: 2016-10-26 00:01:55.242693 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/deliveryyyyguy/flaskapp. - -aaron077/flaskblog -https://github.com/aaron077/flaskblog -Entry file: None -Scanned: 2016-10-26 00:01:55.794680 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/aaron077/flaskblog. - -DaBaiLi/FlaskBlog -https://github.com/DaBaiLi/FlaskBlog -Entry file: FlaskBlog/app/__init__.py -Scanned: 2016-10-26 00:01:58.275685 -Vulnerability 1: -File: FlaskBlog/app/main/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 23: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 26: posts = pagination.items - File: FlaskBlog/app/main/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskBlog/app/main/views.py - > reaches line 27, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 2: -File: FlaskBlog/app/main/views.py - > User input at line 34, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 35: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 38: posts = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 39, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 3: -File: FlaskBlog/app/main/views.py - > User input at line 98, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 100: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: FlaskBlog/app/main/views.py - > Line 102: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 105: comments = pagination.items - File: FlaskBlog/app/main/views.py - > Line 97: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskBlog/app/main/views.py - > reaches line 106, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 4: -File: FlaskBlog/app/main/views.py - > User input at line 131, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskBlog/app/main/views.py - > Line 132: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskBlog/app/main/views.py - > Line 135: comments = pagination.items -File: FlaskBlog/app/main/views.py - > reaches line 136, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -cs207-project/FlaskAPI -https://github.com/cs207-project/FlaskAPI -Entry file: None -Scanned: 2016-10-26 00:01:58.792453 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/cs207-project/FlaskAPI. - -Thetides/FlaskyTut -https://github.com/Thetides/FlaskyTut -Entry file: FlaskyTut/app.py -Scanned: 2016-10-26 00:02:01.135535 -No vulnerabilities found. - - -prrateekk/FlaskTesting -https://github.com/prrateekk/FlaskTesting -Entry file: FlaskTesting/hello.py -Scanned: 2016-10-26 00:02:05.290408 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: FlaskTesting/venv/lib/python2.7/sre_compile.py - -kolapapa/flasky2 -https://github.com/kolapapa/flasky2 -Entry file: flasky2/app/__init__.py -Scanned: 2016-10-26 00:02:06.789481 -No vulnerabilities found. - - -argenis2021/FlaskTutorial -https://github.com/argenis2021/FlaskTutorial -Entry file: FlaskTutorial/app/__init__.py -Scanned: 2016-10-26 00:02:08.428851 -No vulnerabilities found. - - -konglx90/flask_study -https://github.com/konglx90/flask_study -Entry file: flask_study/hello.py -Scanned: 2016-10-26 00:02:09.887808 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -datademofun/congress-flask -https://github.com/datademofun/congress-flask -Entry file: congress-flask/app.py -Scanned: 2016-10-26 00:02:12.243705 -No vulnerabilities found. - - -ifwenvlook/flask-celery -https://github.com/ifwenvlook/flask-celery -Entry file: flask-celery/app.py -Scanned: 2016-10-26 00:02:13.563204 -Vulnerability 1: -File: flask-celery/app.py - > User input at line 66, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/app.py - > Line 67: session['email'] = email -File: flask-celery/app.py - > reaches line 76, trigger word "flash(": - flash('Sending email to {0}'.format(email)) - -Vulnerability 2: -File: flask-celery/app.py - > User input at line 66, trigger word "form[": - email = request.form['email'] -Reassigned in: - File: flask-celery/app.py - > Line 67: session['email'] = email -File: flask-celery/app.py - > reaches line 80, trigger word "flash(": - flash('An email will be sent to {0} in one minute'.format(email)) - -Vulnerability 3: -File: flask-celery/app.py - > User input at line 103, trigger word "get(": - response = 'state''current''total''status'task.statetask.info.get('current', 0)task.info.get('total', 1)task.info.get('status', '') -Reassigned in: - File: flask-celery/app.py - > Line 96: response = 'state''current''total''status'task.state01'Pending...' - File: flask-celery/app.py - > Line 113: response = 'state''current''total''status'task.state11str(task.info) -File: flask-celery/app.py - > reaches line 119, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(response) - - - -jonalligood/flask-diary -https://github.com/jonalligood/flask-diary -Entry file: flask-diary/app/__init__.py -Scanned: 2016-10-26 00:02:26.171263 -No vulnerabilities found. - - -HDking/flask-blog -https://github.com/HDking/flask-blog -Entry file: None -Scanned: 2016-10-26 00:02:26.776073 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -sugarguo/flask-login -https://github.com/sugarguo/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-26 00:02:33.008711 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Afghary/bloggingFlask -https://github.com/Afghary/bloggingFlask -Entry file: bloggingFlask/src/app.py -Scanned: 2016-10-26 00:02:34.368859 -No vulnerabilities found. - - -abaratif/flask_sms -https://github.com/abaratif/flask_sms -Entry file: flask_sms/app.py -Scanned: 2016-10-26 00:02:35.707017 -No vulnerabilities found. - - -full-stakk/flask-rest -https://github.com/full-stakk/flask-rest -Entry file: flask-rest/app.py -Scanned: 2016-10-26 00:02:37.163694 -No vulnerabilities found. - - -ikolito/flask-yahoomarket -https://github.com/ikolito/flask-yahoomarket -Entry file: None -Scanned: 2016-10-26 00:02:38.469506 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ikolito/flask-yahoomarket. - -kunalj101/flask-blog -https://github.com/kunalj101/flask-blog -Entry file: None -Scanned: 2016-10-26 00:02:38.997597 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RiverAge/flask-mongodb -https://github.com/RiverAge/flask-mongodb -Entry file: flask-mongodb/app/__init__.py -Scanned: 2016-10-26 00:02:41.311489 -No vulnerabilities found. - - -natedoyle/flask-cyoa -https://github.com/natedoyle/flask-cyoa -Entry file: flask-cyoa/src/app.py -Scanned: 2016-10-26 00:02:42.605850 -No vulnerabilities found. - - -ShakedFadi/flask_blog -https://github.com/ShakedFadi/flask_blog -Entry file: None -Scanned: 2016-10-26 00:02:43.127476 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -makensy/flask_alchemy -https://github.com/makensy/flask_alchemy -Entry file: flask_alchemy/app/__init__.py -Scanned: 2016-10-26 00:02:44.424792 -No vulnerabilities found. - - -28sui/dao-flask -https://github.com/28sui/dao-flask -Entry file: dao-flask/app.py -Scanned: 2016-10-26 00:02:48.739736 -No vulnerabilities found. - - -quvide/docker-flask -https://github.com/quvide/docker-flask -Entry file: docker-flask/flask/app/main.py -Scanned: 2016-10-26 00:02:50.245853 -No vulnerabilities found. - - -carlsagan21/flask-crawler -https://github.com/carlsagan21/flask-crawler -Entry file: flask-crawler/flask-crawler.py -Scanned: 2016-10-26 00:02:51.541421 -No vulnerabilities found. - - -Ouro130Ros/LearningFlask -https://github.com/Ouro130Ros/LearningFlask -Entry file: LearningFlask/1-HelloWorld/helloWorld.py -Scanned: 2016-10-26 00:02:52.823103 -No vulnerabilities found. - - -mandshaw/flask_microbrewery -https://github.com/mandshaw/flask_microbrewery -Entry file: flask_microbrewery/flask_microbrewery/run.py -Scanned: 2016-10-26 00:02:55.246671 -No vulnerabilities found. - - -kindoprec/flask-boot -https://github.com/kindoprec/flask-boot -Entry file: flask-boot/app.py -Scanned: 2016-10-26 00:02:56.553486 -Vulnerability 1: -File: flask-boot/app.py - > User input at line 15, trigger word "get(": - out = 'Hello ' + request.args.get('name', '') -File: flask-boot/app.py - > reaches line 16, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(output=out) - - - -liuyun90/learn_flask -https://github.com/liuyun90/learn_flask -Entry file: learn_flask/app/__init__.py -Scanned: 2016-10-26 00:02:58.058311 -Vulnerability 1: -File: learn_flask/app/api_1_0/posts.py - > User input at line 12, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/posts.py - > Line 13: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: learn_flask/app/api_1_0/posts.py - > Line 15: prev = None - File: learn_flask/app/api_1_0/posts.py - > Line 18: next = None -File: learn_flask/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: learn_flask/app/api_1_0/posts.py - > User input at line 12, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/posts.py - > Line 13: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: learn_flask/app/api_1_0/posts.py - > Line 15: prev = None - File: learn_flask/app/api_1_0/posts.py - > Line 18: next = None -File: learn_flask/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: learn_flask/app/api_1_0/posts.py - > User input at line 12, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/posts.py - > Line 13: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: learn_flask/app/api_1_0/posts.py - > Line 15: prev = None - File: learn_flask/app/api_1_0/posts.py - > Line 18: next = None -File: learn_flask/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: learn_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 20: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 23: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',id=id, page=page - 1, _external=True) - -Vulnerability 5: -File: learn_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 20: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 23: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',id=id, page=page + 1, _external=True) - -Vulnerability 6: -File: learn_flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 20: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 23: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: learn_flask/app/api_1_0/users.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 39: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 42: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 45: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_user_followed_posts',id=user.id, page=page - 1, _external=True) - -Vulnerability 8: -File: learn_flask/app/api_1_0/users.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 39: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 42: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 45: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_user_followed_posts',id=user.id, page=page + 1, _external=True) - -Vulnerability 9: -File: learn_flask/app/api_1_0/users.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/users.py - > Line 39: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: learn_flask/app/api_1_0/users.py - > Line 42: prev = None - File: learn_flask/app/api_1_0/users.py - > Line 45: next = None -File: learn_flask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: learn_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 13: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 14: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 17: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 16, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: learn_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 13: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 14: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 17: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 19, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: learn_flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 13: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 14: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 17: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: learn_flask/app/api_1_0/comments.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 38: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 40: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 41: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 44: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 43, trigger word "url_for(": - prev = url_for('api.get_post_comments',id=post.id, page=page - 1, _external=True) - -Vulnerability 14: -File: learn_flask/app/api_1_0/comments.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 38: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 40: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 41: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 44: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 46, trigger word "url_for(": - next = url_for('api.get_post_comments',id=post.id, page=page + 1, _external=True) - -Vulnerability 15: -File: learn_flask/app/api_1_0/comments.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/api_1_0/comments.py - > Line 38: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/api_1_0/comments.py - > Line 40: comments = pagination.items - File: learn_flask/app/api_1_0/comments.py - > Line 41: prev = None - File: learn_flask/app/api_1_0/comments.py - > Line 44: next = None -File: learn_flask/app/api_1_0/comments.py - > reaches line 47, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('comments''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: learn_flask/app/main/views.py - > User input at line 20, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 18: show_followed = False - File: learn_flask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: learn_flask/app/main/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 17: -File: learn_flask/app/main/views.py - > User input at line 25, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 26: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 28: posts = pagination.items - File: learn_flask/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: learn_flask/app/main/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 18: -File: learn_flask/app/main/views.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 38: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 40: posts = pagination.items -File: learn_flask/app/main/views.py - > reaches line 41, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: learn_flask/app/main/views.py - > User input at line 98, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 100: page = int(post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1) - File: learn_flask/app/main/views.py - > Line 101: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 104: comments = pagination.items - File: learn_flask/app/main/views.py - > Line 97: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: learn_flask/app/main/views.py - > reaches line 105, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: learn_flask/app/main/views.py - > User input at line 162, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 163: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 165: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: learn_flask/app/main/views.py - > Line 161: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: learn_flask/app/main/views.py - > reaches line 166, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of ', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: learn_flask/app/main/views.py - > User input at line 176, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 177: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 179: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: learn_flask/app/main/views.py - > Line 175: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: learn_flask/app/main/views.py - > reaches line 180, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by ', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: learn_flask/app/main/views.py - > User input at line 204, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: learn_flask/app/main/views.py - > Line 205: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: learn_flask/app/main/views.py - > Line 208: comments = pagination.items -File: learn_flask/app/main/views.py - > reaches line 209, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -richardqlin/flask_app -https://github.com/richardqlin/flask_app -Entry file: None -Scanned: 2016-10-26 00:02:58.600864 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -blarneyosullivan/flask_blog -https://github.com/blarneyosullivan/flask_blog -Entry file: None -Scanned: 2016-10-26 00:02:59.134074 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -MUICProgrammingClub/flask-tutorial -https://github.com/MUICProgrammingClub/flask-tutorial -Entry file: None -Scanned: 2016-10-26 00:03:00.651008 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/MUICProgrammingClub/flask-tutorial. - -AuthentiqID/examples-flask -https://github.com/AuthentiqID/examples-flask -Entry file: examples-flask/example_basic.py -Scanned: 2016-10-26 00:03:04.127335 -Vulnerability 1: -File: examples-flask/example_basic.py - > User input at line 135, trigger word "get(": - userinfo = authentiq.get(USERINFO_URL).json() -File: examples-flask/example_basic.py - > reaches line 149, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(userinfo) - -Vulnerability 2: -File: examples-flask/test_example_basic.py - > User input at line 71, trigger word "get(": - res = test_app.get(url_for('index')) -Reassigned in: - File: examples-flask/test_example_basic.py - > Line 76: res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 3: -File: examples-flask/test_example_basic.py - > User input at line 75, trigger word "get(": - url = res.headers.get('Location') -Reassigned in: - File: examples-flask/test_example_basic.py - > Line 76: res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 4: -File: examples-flask/test_example_basic.py - > User input at line 76, trigger word "get(": - res = requests.get(url,allow_redirects=1) -File: examples-flask/test_example_basic.py - > reaches line 71, trigger word "url_for(": - res = test_app.get(url_for('index')) - -Vulnerability 5: -File: examples-flask/example_2fa.py - > User input at line 159, trigger word "get(": - userinfo = authentiq.get(USERINFO_URL).json() -File: examples-flask/example_2fa.py - > reaches line 173, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(userinfo) - - - -rpalo/flask-headlines -https://github.com/rpalo/flask-headlines -Entry file: flask-headlines/headlines.py -Scanned: 2016-10-26 00:03:07.440340 -No vulnerabilities found. - - -stanliski/flask_dev -https://github.com/stanliski/flask_dev -Entry file: None -Scanned: 2016-10-26 00:03:08.002870 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -s4ayub/FirstFlask -https://github.com/s4ayub/FirstFlask -Entry file: FirstFlask/app.py -Scanned: 2016-10-26 00:03:12.656815 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -emilydowgialo/skills-flask -https://github.com/emilydowgialo/skills-flask -Entry file: skills-flask/application.py -Scanned: 2016-10-26 00:03:15.395671 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: skills-flask/env/lib/python2.7/sre_compile.py - -condemnedbachelor/flask-skills -https://github.com/condemnedbachelor/flask-skills -Entry file: flask-skills/application.py -Scanned: 2016-10-26 00:03:19.121224 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'ingoing' - -jimlambrt-roadscholar/udemy-flask -https://github.com/jimlambrt-roadscholar/udemy-flask -Entry file: udemy-flask/hello.py -Scanned: 2016-10-26 00:03:20.464275 -No vulnerabilities found. - - -CharAct3/flask_test -https://github.com/CharAct3/flask_test -Entry file: None -Scanned: 2016-10-26 00:03:20.999941 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -jlberzal/Flask-User -https://github.com/jlberzal/Flask-User -Entry file: Flask-User/flask_user/tests/tst_app.py -Scanned: 2016-10-26 00:03:23.913987 -Vulnerability 1: -File: Flask-User/flask_user/tests/tst_app.py - > User input at line 119, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserInvitationClass=UserInvitation) -Reassigned in: - File: Flask-User/flask_user/tests/tst_app.py - > Line 120: user_manager = UserManager(db_adapter, app) -File: Flask-User/flask_user/tests/tst_app.py - > reaches line 123, trigger word "filter(": - if not User.query.filter(User.username == 'member').first(): - -Vulnerability 2: -File: Flask-User/flask_user/tests/tst_app.py - > User input at line 119, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserInvitationClass=UserInvitation) -Reassigned in: - File: Flask-User/flask_user/tests/tst_app.py - > Line 120: user_manager = UserManager(db_adapter, app) -File: Flask-User/flask_user/tests/tst_app.py - > reaches line 130, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 59, trigger word "url_for(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) - -Vulnerability 4: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 59, trigger word "url_for(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) - -Vulnerability 5: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 71, trigger word "url_for(": - response = client.get_valid_page(url_for('user.manage_emails')) - -Vulnerability 6: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 71, trigger word "url_for(": - response = client.get_valid_page(url_for('user.manage_emails')) - -Vulnerability 7: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 75, trigger word "url_for(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) - -Vulnerability 8: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 75, trigger word "url_for(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) - -Vulnerability 9: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 98, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='confirm')) - -Vulnerability 10: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 98, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='confirm')) - -Vulnerability 11: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 101, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='make-primary')) - -Vulnerability 12: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 101, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='make-primary')) - -Vulnerability 13: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 104, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email1.id, action='delete')) - -Vulnerability 14: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 104, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email1.id, action='delete')) - - - -kstripp/flask-crud -https://github.com/kstripp/flask-crud -Entry file: flask-crud/app/__init__.py -Scanned: 2016-10-26 00:03:28.356051 -Vulnerability 1: -File: flask-crud/app/views.py - > User input at line 25, trigger word "get(": - post = models.Post.query.get(id) -File: flask-crud/app/views.py - > reaches line 28, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('show.html',post=post) - - - -iceihehe/flask-test -https://github.com/iceihehe/flask-test -Entry file: None -Scanned: 2016-10-26 00:03:28.880519 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/iceihehe/flask-test. - -gonza-peralta/flask-celery -https://github.com/gonza-peralta/flask-celery -Entry file: flask-celery/app/factory.py -Scanned: 2016-10-26 00:03:35.330716 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -girishramnani/flask-facebookbot -https://github.com/girishramnani/flask-facebookbot -Entry file: flask-facebookbot/app.py -Scanned: 2016-10-26 00:03:36.670935 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Master-Yan/flask_template -https://github.com/Master-Yan/flask_template -Entry file: flask_template/app/__init__.py -Scanned: 2016-10-26 00:03:38.326550 -No vulnerabilities found. - - -zjqzero/flask_migrate -https://github.com/zjqzero/flask_migrate -Entry file: flask_migrate/add_index/test.py -Scanned: 2016-10-26 00:03:39.758977 -No vulnerabilities found. - - -nanoha25/flask_local -https://github.com/nanoha25/flask_local -Entry file: flask_local/setup.py -Scanned: 2016-10-26 00:03:43.770472 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Wynndow/flask_skeleton -https://github.com/Wynndow/flask_skeleton -Entry file: None -Scanned: 2016-10-26 00:03:44.295301 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Wynndow/flask_skeleton. - -chiubaca/flask-app -https://github.com/chiubaca/flask-app -Entry file: flask-app/app.py -Scanned: 2016-10-26 00:03:48.551668 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -bdhammel/asteroid-flask -https://github.com/bdhammel/asteroid-flask -Entry file: asteroid-flask/game.py -Scanned: 2016-10-26 00:03:57.300410 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -FizLBQ/Flask_fiz -https://github.com/FizLBQ/Flask_fiz -Entry file: Flask_fiz/demo.py -Scanned: 2016-10-26 00:03:58.635997 -No vulnerabilities found. - - -rpalo/flask-firstapp -https://github.com/rpalo/flask-firstapp -Entry file: flask-firstapp/hello.py -Scanned: 2016-10-26 00:03:59.914069 -No vulnerabilities found. - - -rpalo/flask-crimemap -https://github.com/rpalo/flask-crimemap -Entry file: flask-crimemap/crimemap.py -Scanned: 2016-10-26 00:04:01.456921 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -singleyoungtao/myblog-flask -https://github.com/singleyoungtao/myblog-flask -Entry file: myblog-flask/app/__init__.py -Scanned: 2016-10-26 00:04:03.394910 -Vulnerability 1: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 18, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: myblog-flask/app/api_1_0/posts.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/posts.py - > Line 12: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/posts.py - > Line 15: posts = pagination.items - File: myblog-flask/app/api_1_0/posts.py - > Line 16: prev = None - File: myblog-flask/app/api_1_0/posts.py - > Line 19: next = None -File: myblog-flask/app/api_1_0/posts.py - > reaches line 22, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 4: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 5: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 6: -File: myblog-flask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 20: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 23: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 7: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 44, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 47, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: myblog-flask/app/api_1_0/users.py - > User input at line 37, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/users.py - > Line 38: pagination = user.followed_posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/users.py - > Line 41: posts = pagination.items - File: myblog-flask/app/api_1_0/users.py - > Line 42: prev = None - File: myblog-flask/app/api_1_0/users.py - > Line 45: next = None -File: myblog-flask/app/api_1_0/users.py - > reaches line 48, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 10: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 11: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 12: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 15: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 18: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 13: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 45, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 14: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 48, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 15: -File: myblog-flask/app/api_1_0/comments.py - > User input at line 38, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/api_1_0/comments.py - > Line 39: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/api_1_0/comments.py - > Line 42: comments = pagination.items - File: myblog-flask/app/api_1_0/comments.py - > Line 43: prev = None - File: myblog-flask/app/api_1_0/comments.py - > Line 46: next = None -File: myblog-flask/app/api_1_0/comments.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 16: -File: myblog-flask/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 55: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 58: posts = pagination.items - File: myblog-flask/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 17: -File: myblog-flask/app/main/views.py - > User input at line 50, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 48: show_followed = False - File: myblog-flask/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 18: -File: myblog-flask/app/main/views.py - > User input at line 66, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 67: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 70: posts = pagination.items -File: myblog-flask/app/main/views.py - > reaches line 71, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 19: -File: myblog-flask/app/main/views.py - > User input at line 133, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 135: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: myblog-flask/app/main/views.py - > Line 137: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 140: comments = pagination.items - File: myblog-flask/app/main/views.py - > Line 132: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: myblog-flask/app/main/views.py - > reaches line 141, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 20: -File: myblog-flask/app/main/views.py - > User input at line 201, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 202: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 205: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: myblog-flask/app/main/views.py - > Line 200: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 207, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 21: -File: myblog-flask/app/main/views.py - > User input at line 218, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 219: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 222: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: myblog-flask/app/main/views.py - > Line 217: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: myblog-flask/app/main/views.py - > reaches line 224, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 22: -File: myblog-flask/app/main/views.py - > User input at line 249, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: myblog-flask/app/main/views.py - > Line 250: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: myblog-flask/app/main/views.py - > Line 253: comments = pagination.items -File: myblog-flask/app/main/views.py - > reaches line 254, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -rpalo/flask-waitercaller -https://github.com/rpalo/flask-waitercaller -Entry file: flask-waitercaller/waitercaller.py -Scanned: 2016-10-26 00:04:04.710233 -No vulnerabilities found. - - -NJUPole/Flask_tickets -https://github.com/NJUPole/Flask_tickets -Entry file: Flask_tickets/tickets.py -Scanned: 2016-10-26 00:04:06.671048 -Vulnerability 1: -File: Flask_tickets/tickets.py - > User input at line 62, trigger word "get(": - movieDate = request.args.get('date') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 70, trigger word "filter(": - queryRes = queryRes.filter(data.cinemaName.like('%{}%'.format(searchWords))) - -Vulnerability 2: -File: Flask_tickets/tickets.py - > User input at line 63, trigger word "get(": - searchWords = request.args.get('search') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 70, trigger word "filter(": - queryRes = queryRes.filter(data.cinemaName.like('%{}%'.format(searchWords))) - -Vulnerability 3: -File: Flask_tickets/tickets.py - > User input at line 61, trigger word "get(": - page = request.args.get('page') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 68: page = pageint(page) - 10 -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - -Vulnerability 4: -File: Flask_tickets/tickets.py - > User input at line 62, trigger word "get(": - movieDate = request.args.get('date') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - -Vulnerability 5: -File: Flask_tickets/tickets.py - > User input at line 63, trigger word "get(": - searchWords = request.args.get('search') -Reassigned in: - File: Flask_tickets/tickets.py - > Line 71: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 72: dateList = list(set(map(x.date, results))) - File: Flask_tickets/tickets.py - > Line 74: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 75: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 78: queryRes = queryRes.filter_by(date=movieDate) - File: Flask_tickets/tickets.py - > Line 79: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 81: resultNum = len(results) - File: Flask_tickets/tickets.py - > Line 82: pageNum = resultNum % 20 == 0int(resultNum / 20)int(resultNum / 20) + 1 - File: Flask_tickets/tickets.py - > Line 64: queryRes = data.query.filter_by(movieName=movieName).order_by(data.price) - File: Flask_tickets/tickets.py - > Line 65: results = queryRes[] - File: Flask_tickets/tickets.py - > Line 66: dateList = list(set(map(x.date, results))) -File: Flask_tickets/tickets.py - > reaches line 83, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('showtimeTable.html',results=results[20 * page20 * page + 1], page=page, pageNum=pageNum, movieList=movieList, dateList=dateList, movieDate=movieDate, searchWords=searchWords) - - - -Mingz2013/demo.flasky -https://github.com/Mingz2013/demo.flasky -Entry file: None -Scanned: 2016-10-26 00:04:08.087680 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Mingz2013/demo.flasky. - -LaundryOrder/Backend -https://github.com/LaundryOrder/Backend -Entry file: Backend/app.py -Scanned: 2016-10-26 00:04:09.540130 -No vulnerabilities found. - - -tageee/Blog -https://github.com/tageee/Blog -Entry file: Blog/app/__init__.py -Scanned: 2016-10-26 00:04:11.804298 -Vulnerability 1: -File: Blog/app/main/views.py - > User input at line 21, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 30: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 33: posts = pagination.items - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: Blog/app/main/views.py - > User input at line 25, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: Blog/app/main/views.py - > Line 23: show_followed = False - File: Blog/app/main/views.py - > Line 20: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: Blog/app/main/views.py - > User input at line 59, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 60: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 63: posts = pagination.items -File: Blog/app/main/views.py - > reaches line 64, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: Blog/app/main/views.py - > User input at line 122, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 124: page = post.comments.count() - 1 // current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: Blog/app/main/views.py - > Line 126: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 129: comments = pagination.items - File: Blog/app/main/views.py - > Line 121: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: Blog/app/main/views.py - > reaches line 130, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: Blog/app/main/views.py - > User input at line 189, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 190: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 193: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 188: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 195, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: Blog/app/main/views.py - > User input at line 206, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 207: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 210: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: Blog/app/main/views.py - > Line 205: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Blog/app/main/views.py - > reaches line 212, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - -Vulnerability 7: -File: Blog/app/main/views.py - > User input at line 221, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Blog/app/main/views.py - > Line 222: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: Blog/app/main/views.py - > Line 225: comments = pagination.items -File: Blog/app/main/views.py - > reaches line 226, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -ahumeijun/RestfulTest -https://github.com/ahumeijun/RestfulTest -Entry file: RestfulTest/app/__init__.py -Scanned: 2016-10-26 00:04:13.606577 -No vulnerabilities found. - - -jlberzal/my_app -https://github.com/jlberzal/my_app -Entry file: my_app/app/__init__.py -Scanned: 2016-10-26 00:04:15.175230 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zzq2015/myFirstWeb -https://github.com/zzq2015/myFirstWeb -Entry file: None -Scanned: 2016-10-26 00:04:20.695862 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -thomasroulin/SpreadPoll -https://github.com/thomasroulin/SpreadPoll -Entry file: SpreadPoll/SpreadPoll.py -Scanned: 2016-10-26 00:04:22.027926 -No vulnerabilities found. - - -vincentdnl/flask-facebook-messenger-bot-boilerplate -https://github.com/vincentdnl/flask-facebook-messenger-bot-boilerplate -Entry file: flask-facebook-messenger-bot-boilerplate/app.py -Scanned: 2016-10-26 00:04:23.328485 -No vulnerabilities found. - - -vishwanath79/FlaskRestAPI -https://github.com/vishwanath79/FlaskRestAPI -Entry file: FlaskRestAPI/rest.py -Scanned: 2016-10-26 00:04:24.649867 -Vulnerability 1: -File: FlaskRestAPI/rest.py - > User input at line 41, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: FlaskRestAPI/rest.py - > reaches line 49, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -GrantJamesPowell/FlaskRaffleApp -https://github.com/GrantJamesPowell/FlaskRaffleApp -Entry file: FlaskRaffleApp/raffleapp.py -Scanned: 2016-10-26 00:04:26.184511 -No vulnerabilities found. - - -catmin/flask49erStore -https://github.com/catmin/flask49erStore -Entry file: flask49erStore/flask49erStore.py -Scanned: 2016-10-26 00:04:29.014960 -Vulnerability 1: -File: flask49erStore/flask49erStore.py - > User input at line 253, trigger word "get(": - offer = Offer.query.get(id) -Reassigned in: - File: flask49erStore/flask49erStore.py - > Line 254: hulls = Hull.query.filter_by(offer_id=offer.id) - File: flask49erStore/flask49erStore.py - > Line 255: masts = Mast.query.filter_by(offer_id=offer.id) - File: flask49erStore/flask49erStore.py - > Line 256: sails = Sail.query.filter_by(offer_id=offer.id) -File: flask49erStore/flask49erStore.py - > reaches line 261, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('offer_details.html',offer=offer, sails=sails, hulls=hulls, masts=masts) - - - -leavyli/flaskWebDevelopment -https://github.com/leavyli/flaskWebDevelopment -Entry file: flaskWebDevelopment/hello/hello.py -Scanned: 2016-10-26 00:04:30.322748 -No vulnerabilities found. - - -thedod/boilerplate-peewee-flask -https://github.com/thedod/boilerplate-peewee-flask -Entry file: None -Scanned: 2016-10-26 00:04:35.882961 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/thedod/boilerplate-peewee-flask. - -shn7798/FlaskZhihu -https://github.com/shn7798/FlaskZhihu -Entry file: FlaskZhihu/tests/test_orm.py -Scanned: 2016-10-26 00:04:39.028828 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -syntaxSizer/flask -https://github.com/syntaxSizer/flask -Entry file: None -Scanned: 2016-10-26 00:04:39.596681 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gabrielecker/Flask -https://github.com/gabrielecker/Flask -Entry file: None -Scanned: 2016-10-26 00:04:41.108810 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Dianalim209/flask -https://github.com/Dianalim209/flask -Entry file: None -Scanned: 2016-10-26 00:04:41.683585 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -luojiyin1987/flask -https://github.com/luojiyin1987/flask -Entry file: None -Scanned: 2016-10-26 00:04:45.228063 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chrislinan/flask -https://github.com/chrislinan/flask -Entry file: None -Scanned: 2016-10-26 00:04:45.743435 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -lagougou/flask -https://github.com/lagougou/flask -Entry file: None -Scanned: 2016-10-26 00:04:49.250078 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tkirkland/Flask -https://github.com/tkirkland/Flask -Entry file: None -Scanned: 2016-10-26 00:04:58.791634 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ooohiroyukiooo/flask -https://github.com/ooohiroyukiooo/flask -Entry file: None -Scanned: 2016-10-26 00:04:59.300265 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -RoseOu/Flask-learning -https://github.com/RoseOu/Flask-learning -Entry file: None -Scanned: 2016-10-26 00:05:00.841186 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yassipo/webservice -https://github.com/yassipo/webservice -Entry file: webservice/app.py -Scanned: 2016-10-26 00:05:05.853225 -No vulnerabilities found. - - -amey-sam/Flask-MailGun -https://github.com/amey-sam/Flask-MailGun -Entry file: None -Scanned: 2016-10-26 00:05:06.368888 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amey-sam/Flask-MailGun. - -efrainmunoz/flasktaskr -https://github.com/efrainmunoz/flasktaskr -Entry file: None -Scanned: 2016-10-26 00:05:06.883108 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HansKramer/flaskr -https://github.com/HansKramer/flaskr -Entry file: None -Scanned: 2016-10-26 00:05:07.398492 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/HansKramer/flaskr. - -shorian/flaskr -https://github.com/shorian/flaskr -Entry file: None -Scanned: 2016-10-26 00:05:08.916893 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shorian/flaskr. - -mmoran0032/flaskwork -https://github.com/mmoran0032/flaskwork -Entry file: flaskwork/hello.py -Scanned: 2016-10-26 00:05:11.492943 -No vulnerabilities found. - - -Maxwell-Ying/flaskbook -https://github.com/Maxwell-Ying/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-26 00:05:13.962236 -Vulnerability 1: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 2: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 3: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 4: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 5: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 6: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 7: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 84, trigger word "filter(": - results = results.filter(books.name.like('%' + form.name.data + '%')) - -Vulnerability 8: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 9: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 10: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 11: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 12: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 13: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 14: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 86, trigger word "filter(": - results = results.filter(books.author.like('%' + form.author.data + '%')) - -Vulnerability 15: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 16: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 17: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 18: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 19: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 20: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 21: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 88, trigger word "filter(": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) - -Vulnerability 22: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 23: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 24: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 25: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 26: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 27: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 28: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 90, trigger word "filter(": - results = results.filter(books.public.like('%' + form.public.data + '%')) - -Vulnerability 29: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 30: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 31: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 32: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 33: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 34: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 35: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 92, trigger word "filter(": - results = results.filter(books.home.like('%' + form.home.data + '%')) - -Vulnerability 36: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 37: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 38: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 39: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 40: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 41: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 42: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 94, trigger word "filter(": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) - -Vulnerability 43: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 44: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 45: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 46: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 47: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 48: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 49: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 97, trigger word "filter(": - results = results.filter(books.name == form.name.data) - -Vulnerability 50: -File: flaskbook/app/views.py - > User input at line 84, trigger word ".data": - results = results.filter(books.name.like('%' + form.name.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 51: -File: flaskbook/app/views.py - > User input at line 86, trigger word ".data": - results = results.filter(books.author.like('%' + form.author.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 52: -File: flaskbook/app/views.py - > User input at line 88, trigger word ".data": - results = results.filter(books.age < form.age.data + 10, books.age > form.age.data - 10) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 53: -File: flaskbook/app/views.py - > User input at line 90, trigger word ".data": - results = results.filter(books.public.like('%' + form.public.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 54: -File: flaskbook/app/views.py - > User input at line 92, trigger word ".data": - results = results.filter(books.home.like('%' + form.home.data + '%')) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 55: -File: flaskbook/app/views.py - > User input at line 94, trigger word ".data": - results = results.filter(books.pages < form.pages.data + 20, books.pages > form.pages.data - 20) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - -Vulnerability 56: -File: flaskbook/app/views.py - > User input at line 97, trigger word ".data": - results = results.filter(books.name == form.name.data) -Reassigned in: - File: flaskbook/app/views.py - > Line 81: results = books.query -File: flaskbook/app/views.py - > reaches line 108, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('result.html',title='search', results=results.all()) - - - -yoophi/flaskygram -https://github.com/yoophi/flaskygram -Entry file: None -Scanned: 2016-10-26 00:05:16.486849 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/yoophi/flaskygram. - -Ifresher/Flaskr -https://github.com/Ifresher/Flaskr -Entry file: None -Scanned: 2016-10-26 00:05:22.007264 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hongmaoxiao/flasky -https://github.com/hongmaoxiao/flasky -Entry file: None -Scanned: 2016-10-26 00:05:23.519621 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ojgoyal/flaskr -https://github.com/ojgoyal/flaskr -Entry file: None -Scanned: 2016-10-26 00:05:24.029489 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ojgoyal/flaskr. - -hoorn91/flaskproject -https://github.com/hoorn91/flaskproject -Entry file: flaskproject/app/hello.py -Scanned: 2016-10-26 00:05:26.476151 -Vulnerability 1: -File: flaskproject/app/hello.py - > User input at line 70, trigger word "get(": - task = 'id''title''description''done'tasks[-1]['id'] + 1request.json['title']request.json.get('description', '')False -File: flaskproject/app/hello.py - > reaches line 77, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = (jsonify('task'task), 201) - - - -jiuhuandao/Flaskr -https://github.com/jiuhuandao/Flaskr -Entry file: None -Scanned: 2016-10-26 00:05:27.017705 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ansel333/flaskr -https://github.com/ansel333/flaskr -Entry file: None -Scanned: 2016-10-26 00:05:28.562201 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ansel333/flaskr. - -richardqlin/flaskralchemy -https://github.com/richardqlin/flaskralchemy -Entry file: None -Scanned: 2016-10-26 00:05:35.600190 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flaskralchemy. - -shen5630/FlaskProject -https://github.com/shen5630/FlaskProject -Entry file: FlaskProject/myRestful/healthcareApi.py -Scanned: 2016-10-26 00:05:37.990174 -No vulnerabilities found. - - -viprs/FlaskyBlog -https://github.com/viprs/FlaskyBlog -Entry file: FlaskyBlog/app/__init__.py -Scanned: 2016-10-26 00:05:39.842410 -Vulnerability 1: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 21, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 2: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 24, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 3: -File: FlaskyBlog/app/api_1_0/posts.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/posts.py - > Line 15: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/posts.py - > Line 18: posts = pagination.items - File: FlaskyBlog/app/api_1_0/posts.py - > Line 25: post_list = [post.to_json() for post in posts] - File: FlaskyBlog/app/api_1_0/posts.py - > Line 19: prev_page = None - File: FlaskyBlog/app/api_1_0/posts.py - > Line 22: next_page = None -File: FlaskyBlog/app/api_1_0/posts.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev_page''next_page''total_count''page_count'post_listprev_pagenext_pagepagination.totalpost_list.__len__()) - -Vulnerability 4: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 18, trigger word "url_for(": - prev_page = url_for('api.get_users',page=page - 1, _external=True) - -Vulnerability 5: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 21, trigger word "url_for(": - next_page = url_for('api.get_users',page=page + 1, _external=True) - -Vulnerability 6: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 11, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 12: pagination = User.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 15: users = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 22: user_list = [user.to_json() for user in users] - File: FlaskyBlog/app/api_1_0/users.py - > Line 16: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 19: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 23, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users''prev_page''next_page''total_count''page_count'user_listprev_pagenext_pagepagination.totaluser_list.__len__()) - -Vulnerability 7: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 48, trigger word "url_for(": - prev_page = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 8: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 51, trigger word "url_for(": - next_page = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 9: -File: FlaskyBlog/app/api_1_0/users.py - > User input at line 41, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/api_1_0/users.py - > Line 42: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/api_1_0/users.py - > Line 45: posts = pagination.items - File: FlaskyBlog/app/api_1_0/users.py - > Line 46: prev_page = None - File: FlaskyBlog/app/api_1_0/users.py - > Line 49: next_page = None -File: FlaskyBlog/app/api_1_0/users.py - > reaches line 52, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev_page''next_page''count'[post.to_json() for post in posts]prev_pagenext_pagepagination.total) - -Vulnerability 10: -File: FlaskyBlog/app/main/views.py - > User input at line 26, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 27: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 31: posts = pagination.items - File: FlaskyBlog/app/main/views.py - > Line 24: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 32, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination) - -Vulnerability 11: -File: FlaskyBlog/app/main/views.py - > User input at line 47, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 50: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: FlaskyBlog/app/main/views.py - > Line 52: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 55: comments = pagination.items - File: FlaskyBlog/app/main/views.py - > Line 46: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: FlaskyBlog/app/main/views.py - > reaches line 56, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 12: -File: FlaskyBlog/app/main/views.py - > User input at line 170, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 171: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 175: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskyBlog/app/main/views.py - > Line 169: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 177, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 13: -File: FlaskyBlog/app/main/views.py - > User input at line 187, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 188: pagination = user.follower.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 192: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: FlaskyBlog/app/main/views.py - > Line 186: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: FlaskyBlog/app/main/views.py - > reaches line 194, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 14: -File: FlaskyBlog/app/main/views.py - > User input at line 203, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: FlaskyBlog/app/main/views.py - > Line 204: pagination = Comment.query.order_by(Comment.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: FlaskyBlog/app/main/views.py - > Line 207: comments = pagination.items -File: FlaskyBlog/app/main/views.py - > reaches line 208, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('moderate.html',comments=comments, pagination=pagination, page=page) - - - -thunn/Flaskr1 -https://github.com/thunn/Flaskr1 -Entry file: Flaskr1/flaskr.py -Scanned: 2016-10-26 00:05:41.159625 -No vulnerabilities found. - - -thejojo87/FlaskBlog -https://github.com/thejojo87/FlaskBlog -Entry file: FlaskBlog/final/app/__init__.py -Scanned: 2016-10-26 00:05:43.496421 -No vulnerabilities found. - - -er3456qi/FlaskTutorial -https://github.com/er3456qi/FlaskTutorial -Entry file: FlaskTutorial/flaskr.py -Scanned: 2016-10-26 00:05:44.866023 -No vulnerabilities found. - - -PaperAndColours/flaskImage -https://github.com/PaperAndColours/flaskImage -Entry file: flaskImage/app.py -Scanned: 2016-10-26 00:05:47.621161 -No vulnerabilities found. - - -hamartia0/FlaskWeb -https://github.com/hamartia0/FlaskWeb -Entry file: FlaskWeb/web3b.py -Scanned: 2016-10-26 00:05:51.660757 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -rmGuarachi/flask2 -https://github.com/rmGuarachi/flask2 -Entry file: flask2/flask2/app/__init__.py -Scanned: 2016-10-26 00:05:53.478082 -No vulnerabilities found. - - -maheskett/flask-testing -https://github.com/maheskett/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:06:00.413746 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kellyhiggins/Flask-testing -https://github.com/kellyhiggins/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-26 00:06:02.520113 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -laurensila/flask-testing -https://github.com/laurensila/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:06:04.309419 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sugarguo/flask-login -https://github.com/sugarguo/flask-login -Entry file: flask-login/yan.py -Scanned: 2016-10-26 00:06:11.067297 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Afghary/bloggingFlask -https://github.com/Afghary/bloggingFlask -Entry file: bloggingFlask/src/app.py -Scanned: 2016-10-26 00:06:12.505446 -No vulnerabilities found. - - -DANWINS-LLC/flask-starter -https://github.com/DANWINS-LLC/flask-starter -Entry file: None -Scanned: 2016-10-26 00:06:13.021728 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/DANWINS-LLC/flask-starter. - -coffee-world/flask_wd -https://github.com/coffee-world/flask_wd -Entry file: flask_wd/hello.py -Scanned: 2016-10-26 00:06:14.595107 -No vulnerabilities found. - - -jiang2/flask-rest -https://github.com/jiang2/flask-rest -Entry file: None -Scanned: 2016-10-26 00:06:16.387055 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jiang2/flask-rest. - -progBill/flask_blueprint -https://github.com/progBill/flask_blueprint -Entry file: flask_blueprint/__init__.py -Scanned: 2016-10-26 00:06:17.751660 -No vulnerabilities found. - - -carlsagan21/flask-crawler -https://github.com/carlsagan21/flask-crawler -Entry file: flask-crawler/flask-crawler.py -Scanned: 2016-10-26 00:06:19.031588 -No vulnerabilities found. - - -jdesilvio/flask-deploy -https://github.com/jdesilvio/flask-deploy -Entry file: None -Scanned: 2016-10-26 00:06:19.546025 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jdesilvio/flask-deploy. - -stanliski/flask-dev -https://github.com/stanliski/flask-dev -Entry file: None -Scanned: 2016-10-26 00:06:22.895051 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -paceko/testing-flask -https://github.com/paceko/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:06:24.788009 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -minyisme/flask-testing -https://github.com/minyisme/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:06:26.593665 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cristinamclarkin/Flask-testing -https://github.com/cristinamclarkin/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-26 00:06:28.478066 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kindoprec/flask-boot -https://github.com/kindoprec/flask-boot -Entry file: flask-boot/app.py -Scanned: 2016-10-26 00:06:29.805945 -Vulnerability 1: -File: flask-boot/app.py - > User input at line 15, trigger word "get(": - out = 'Hello ' + request.args.get('name', '') -File: flask-boot/app.py - > reaches line 16, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(output=out) - - - -enlacee/appFlask -https://github.com/enlacee/appFlask -Entry file: appFlask/web/hello.py -Scanned: 2016-10-26 00:06:31.105936 -No vulnerabilities found. - - -shuangfu/learnFlask -https://github.com/shuangfu/learnFlask -Entry file: None -Scanned: 2016-10-26 00:06:32.123709 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/shuangfu/learnFlask. - -andresmguk/flask-blog -https://github.com/andresmguk/flask-blog -Entry file: None -Scanned: 2016-10-26 00:06:36.157098 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -tnygren/flask-testing -https://github.com/tnygren/flask-testing -Entry file: flask-testing/megaTutorial/app/__init__.py -Scanned: 2016-10-26 00:06:38.595947 -No vulnerabilities found. - - -licsh/flask_app -https://github.com/licsh/flask_app -Entry file: None -Scanned: 2016-10-26 00:06:39.115364 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -saampandit/flask-intro -https://github.com/saampandit/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-26 00:06:46.113105 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-intro/venv/lib/python2.7/sre_compile.py - -jlberzal/Flask-User -https://github.com/jlberzal/Flask-User -Entry file: Flask-User/flask_user/tests/tst_app.py -Scanned: 2016-10-26 00:06:48.396747 -Vulnerability 1: -File: Flask-User/flask_user/tests/tst_app.py - > User input at line 119, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserInvitationClass=UserInvitation) -Reassigned in: - File: Flask-User/flask_user/tests/tst_app.py - > Line 120: user_manager = UserManager(db_adapter, app) -File: Flask-User/flask_user/tests/tst_app.py - > reaches line 123, trigger word "filter(": - if not User.query.filter(User.username == 'member').first(): - -Vulnerability 2: -File: Flask-User/flask_user/tests/tst_app.py - > User input at line 119, trigger word "SQLAlchemy": - db_adapter = SQLAlchemyAdapter(db, User,UserInvitationClass=UserInvitation) -Reassigned in: - File: Flask-User/flask_user/tests/tst_app.py - > Line 120: user_manager = UserManager(db_adapter, app) -File: Flask-User/flask_user/tests/tst_app.py - > reaches line 130, trigger word "filter(": - if not User.query.filter(User.username == 'user007').first(): - -Vulnerability 3: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 59, trigger word "url_for(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) - -Vulnerability 4: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 59, trigger word "url_for(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) - -Vulnerability 5: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 71, trigger word "url_for(": - response = client.get_valid_page(url_for('user.manage_emails')) - -Vulnerability 6: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 71, trigger word "url_for(": - response = client.get_valid_page(url_for('user.manage_emails')) - -Vulnerability 7: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 75, trigger word "url_for(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) - -Vulnerability 8: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 75, trigger word "url_for(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) - -Vulnerability 9: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 98, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='confirm')) - -Vulnerability 10: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 98, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='confirm')) - -Vulnerability 11: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 101, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='make-primary')) - -Vulnerability 12: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 101, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email2.id, action='make-primary')) - -Vulnerability 13: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 59, trigger word "form(": - response = client.post_valid_form(url_for('user.register'),email=EMAIL1, password=PASSWORD) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 104, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email1.id, action='delete')) - -Vulnerability 14: -File: Flask-User/flask_user/tests/test_multiple_emails.py - > User input at line 75, trigger word "form(": - response = client.post_valid_form(url_for('user.manage_emails'),email=EMAIL2) -File: Flask-User/flask_user/tests/test_multiple_emails.py - > reaches line 104, trigger word "url_for(": - response = client.get_valid_page(url_for('user.email_action',id=user_email1.id, action='delete')) - - - -Danielyao0312/flask-intro -https://github.com/Danielyao0312/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-26 00:06:50.157671 -No vulnerabilities found. - - -eduardoferrandezr/flask-bokeh -https://github.com/eduardoferrandezr/flask-bokeh -Entry file: flask-bokeh/app.py -Scanned: 2016-10-26 00:06:51.466521 -No vulnerabilities found. - - -zachwooddoughty/flask-tester -https://github.com/zachwooddoughty/flask-tester -Entry file: flask-tester/hello.py -Scanned: 2016-10-26 00:06:52.749383 -No vulnerabilities found. - - -rd82/flask-tute -https://github.com/rd82/flask-tute -Entry file: flask-tute/app/__init__.py -Scanned: 2016-10-26 00:06:54.182937 -No vulnerabilities found. - - -dencynluv/testing-flask -https://github.com/dencynluv/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:07:01.100973 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -efrainmunoz/flask-blog -https://github.com/efrainmunoz/flask-blog -Entry file: None -Scanned: 2016-10-26 00:07:01.633959 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -bdhammel/asteroid-flask -https://github.com/bdhammel/asteroid-flask -Entry file: asteroid-flask/game.py -Scanned: 2016-10-26 00:07:11.269929 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -dflee/testing-flask -https://github.com/dflee/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:07:13.191784 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Ihyatt/testing-flask -https://github.com/Ihyatt/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:07:14.974621 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -gyermolenko/flask-modelhistory -https://github.com/gyermolenko/flask-modelhistory -Entry file: flask-modelhistory/example/app/__init__.py -Scanned: 2016-10-26 00:07:16.377808 -No vulnerabilities found. - - -hiro93n/sample_flask -https://github.com/hiro93n/sample_flask -Entry file: sample_flask/tutorial/flaskr/__init__.py -Scanned: 2016-10-26 00:07:17.717242 -No vulnerabilities found. - - -DraZoro/flask_learning -https://github.com/DraZoro/flask_learning -Entry file: flask_learning/flaskr.py -Scanned: 2016-10-26 00:07:19.017833 -No vulnerabilities found. - - -skols/flask_blog -https://github.com/skols/flask_blog -Entry file: None -Scanned: 2016-10-26 00:07:19.534686 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -eleweek/Mastering_Flask -https://github.com/eleweek/Mastering_Flask -Entry file: Mastering_Flask/section2/app.py -Scanned: 2016-10-26 00:07:21.993239 -No vulnerabilities found. - - -Mingz2013/demo.flasky -https://github.com/Mingz2013/demo.flasky -Entry file: None -Scanned: 2016-10-26 00:07:22.547960 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ahumeijun/RestfulTest -https://github.com/ahumeijun/RestfulTest -Entry file: RestfulTest/app/__init__.py -Scanned: 2016-10-26 00:07:23.836500 -No vulnerabilities found. - - -jlberzal/my_app -https://github.com/jlberzal/my_app -Entry file: my_app/app/__init__.py -Scanned: 2016-10-26 00:07:25.409671 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Kathure/microblg -https://github.com/Kathure/microblg -Entry file: microblg/app/__init__.py -Scanned: 2016-10-26 00:07:37.485208 -No vulnerabilities found. - - -hufan-Akari/BookLibrary -https://github.com/hufan-Akari/BookLibrary -Entry file: BookLibrary/app/__init__.py -Scanned: 2016-10-26 00:07:39.818030 -Vulnerability 1: -File: BookLibrary/app/main/auth/views.py - > User input at line 14, trigger word ".data": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() -File: BookLibrary/app/main/auth/views.py - > reaches line 14, trigger word "filter(": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() - -Vulnerability 2: -File: BookLibrary/app/main/auth/views.py - > User input at line 14, trigger word ".data": - the_user = User.query.filter(User.email.ilike(login_form.email.data)).first() -File: BookLibrary/app/main/auth/views.py - > reaches line 17, trigger word "flash(": - flash('登录成功! 欢迎您 %s!' % the_user.name, 'success') - -Vulnerability 3: -File: BookLibrary/app/main/book/views.py - > User input at line 14, trigger word "get(": - search_word = request.args.get('search', None) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 23: search_word = search_word.strip() - File: BookLibrary/app/main/book/views.py - > Line 28: search_form.search.data = search_word -File: BookLibrary/app/main/book/views.py - > reaches line 24, trigger word "filter(": - the_books = the_books.filter(db.or_(Book.title.ilike('%%%s%%' % search_word), Book.author.ilike('%%%s%%' % search_word), Book.isbn.ilike('%%%s%%' % search_word), Book.tags.any(Tag.name.ilike('%%%s%%' % search_word)), Book.subtitle.ilike('%%%s%%' % search_word))).outerjoin(Log).group_by(Book.id).order_by(db.func.count(Log.id).desc()) - -Vulnerability 4: -File: BookLibrary/app/main/book/views.py - > User input at line 16, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 32: pagination = the_books.paginate(page,per_page=8) - File: BookLibrary/app/main/book/views.py - > Line 33: result_books = pagination.items -File: BookLibrary/app/main/book/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book.html',books=result_books, pagination=pagination, search_form=search_form, title='书籍清单') - -Vulnerability 5: -File: BookLibrary/app/main/book/views.py - > User input at line 46, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 50: pagination = the_book.logs.filter_by(returned=show - 1).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/book/views.py - > Line 53: pagination = the_book.comments.filter_by(deleted=0).order_by(Comment.edit_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/book/views.py - > Line 56: data = pagination.items -File: BookLibrary/app/main/book/views.py - > reaches line 57, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book_detail.html',book=the_book, data=data, pagination=pagination, form=form, title=the_book.title) - -Vulnerability 6: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 131, trigger word "flash(": - flash('书籍 %s 已添加至图书馆!' % new_book.title, 'success') - -Vulnerability 7: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 132, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book.detail',book_id=new_book.id)) - -Vulnerability 8: -File: BookLibrary/app/main/book/views.py - > User input at line 112, trigger word ".data": - new_book = Book(isbn=form.isbn.data, title=form.title.data, origin_title=form.origin_title.data, subtitle=form.subtitle.data, author=form.author.data, translator=form.translator.data, publisher=form.publisher.data, image=form.image.data, pubdate=form.pubdate.data, tags_string=form.tags.data, pages=form.pages.data, price=form.price.data, binding=form.binding.data, numbers=form.numbers.data, summary=form.summary.data or '', catalog=form.catalog.data or '') -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 133: ret_MAYBE_FUNCTION_NAME = render_template('book_edit.html',form=form, title='添加新书') -File: BookLibrary/app/main/book/views.py - > reaches line 132, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(url_for('book.detail',book_id=new_book.id)) - -Vulnerability 9: -File: BookLibrary/app/main/book/views.py - > User input at line 161, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/book/views.py - > Line 179: pagination = the_books.paginate(page,per_page=8) - File: BookLibrary/app/main/book/views.py - > Line 180: data = pagination.items - File: BookLibrary/app/main/book/views.py - > Line 167: data = None - File: BookLibrary/app/main/book/views.py - > Line 168: pagination = None -File: BookLibrary/app/main/book/views.py - > reaches line 182, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('book_tag.html',tags=the_tags, title='Tags', search_form=search_form, books=data, pagination=pagination) - -Vulnerability 10: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 20, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 11: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 22, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=book_id)) - -Vulnerability 12: -File: BookLibrary/app/main/log/views.py - > User input at line 14, trigger word "get(": - book_id = request.args.get('book_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 15: the_book = Book.query.get_or_404(book_id) - File: BookLibrary/app/main/log/views.py - > Line 19: result = current_user.borrow_book(the_book) - File: BookLibrary/app/main/log/views.py - > Line 19: message = current_user.borrow_book(the_book) -File: BookLibrary/app/main/log/views.py - > reaches line 22, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=book_id)) - -Vulnerability 13: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 40, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 14: -File: BookLibrary/app/main/log/views.py - > User input at line 33, trigger word "get(": - the_log = Log.query.get(log_id) -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) -File: BookLibrary/app/main/log/views.py - > reaches line 40, trigger word "flash(": - flash(message, result'success''danger') - -Vulnerability 15: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 42, trigger word "redirect(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=log_id)) - -Vulnerability 16: -File: BookLibrary/app/main/log/views.py - > User input at line 29, trigger word "get(": - log_id = request.args.get('log_id') -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 33: the_log = Log.query.get(log_id) - File: BookLibrary/app/main/log/views.py - > Line 35: the_log = Log.query.filter_by(user_id=current_user.id, book_id=book_id).first() - File: BookLibrary/app/main/log/views.py - > Line 39: result = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 39: message = current_user.return_book(the_log) - File: BookLibrary/app/main/log/views.py - > Line 31: the_log = None -File: BookLibrary/app/main/log/views.py - > reaches line 42, trigger word "url_for(": - ret_MAYBE_FUNCTION_NAME = redirect(request.args.get('next') or url_for('book.detail',book_id=log_id)) - -Vulnerability 17: -File: BookLibrary/app/main/log/views.py - > User input at line 52, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/log/views.py - > Line 53: pagination = Log.query.filter_by(returned=show).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=10) - File: BookLibrary/app/main/log/views.py - > Line 54: logs = pagination.items -File: BookLibrary/app/main/log/views.py - > reaches line 55, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('logs_info.html',logs=logs, pagination=pagination, title='借阅信息') - -Vulnerability 18: -File: BookLibrary/app/main/user/views.py - > User input at line 14, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/user/views.py - > Line 15: pagination = User.query.order_by(User.id.desc()).paginate(page,per_page=10) - File: BookLibrary/app/main/user/views.py - > Line 16: users = pagination.items -File: BookLibrary/app/main/user/views.py - > reaches line 17, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',users=users, pagination=pagination, title='已注册用户') - -Vulnerability 19: -File: BookLibrary/app/main/user/views.py - > User input at line 28, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: BookLibrary/app/main/user/views.py - > Line 29: pagination = the_user.logs.filter_by(returned=show).order_by(Log.borrow_timestamp.desc()).paginate(page,per_page=5) - File: BookLibrary/app/main/user/views.py - > Line 31: logs = pagination.items -File: BookLibrary/app/main/user/views.py - > reaches line 33, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user_detail.html',user=the_user, logs=logs, pagination=pagination, title='用户: ' + the_user.name) - - - -katietarng/hb-testing-flask -https://github.com/katietarng/hb-testing-flask -Entry file: hb-testing-flask/party.py -Scanned: 2016-10-26 00:07:41.713939 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lkpanganiban/flask-restful-example -https://github.com/lkpanganiban/flask-restful-example -Entry file: flask-restful-example/run.py -Scanned: 2016-10-26 00:07:43.038584 -No vulnerabilities found. - - -qefir/Black-Jack-Flask-game -https://github.com/qefir/Black-Jack-Flask-game -Entry file: Black-Jack-Flask-game/BJenv/lib/python3.4/site-packages/flask_openid.py -Scanned: 2016-10-26 00:07:52.507948 -No vulnerabilities found. -An Error occurred while scanning the repo: 'NoneType' object has no attribute 'label' - -p00gz/OLD-flask-imdbratings-app -https://github.com/p00gz/OLD-flask-imdbratings-app -Entry file: OLD-flask-imdbratings-app/imdbRatings/__init__.py -Scanned: 2016-10-26 00:07:55.904411 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lysdexia/flask-svg-barcode -https://github.com/lysdexia/flask-svg-barcode -Entry file: None -Scanned: 2016-10-26 00:07:57.324881 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/lysdexia/flask-svg-barcode. - -Tiago-Lira/cookiecutter-flask-websocket -https://github.com/Tiago-Lira/cookiecutter-flask-websocket -Entry file: None -Scanned: 2016-10-26 00:07:58.740094 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Tiago-Lira/cookiecutter-flask-websocket. - -davejonesbkk/flask_by_example -https://github.com/davejonesbkk/flask_by_example -Entry file: flask_by_example/app.py -Scanned: 2016-10-26 00:08:03.889146 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask_by_example/venv/lib/python3.5/operator.py - -efrainmunoz/flask-hello-world -https://github.com/efrainmunoz/flask-hello-world -Entry file: None -Scanned: 2016-10-26 00:08:04.479567 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -pankajkmrgupta/flask-video-stream -https://github.com/pankajkmrgupta/flask-video-stream -Entry file: flask-video-stream/app.py -Scanned: 2016-10-26 00:08:06.283379 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -askiefer/flask-testing-2 -https://github.com/askiefer/flask-testing-2 -Entry file: flask-testing-2/party.py -Scanned: 2016-10-26 00:08:08.084469 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -apaoing/apaoing-one-flask -https://github.com/apaoing/apaoing-one-flask -Entry file: apaoing-one-flask/hello.py -Scanned: 2016-10-26 00:08:09.435053 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -njurgens/cookbook-api-flask -https://github.com/njurgens/cookbook-api-flask -Entry file: cookbook-api-flask/cookbook_api/app.py -Scanned: 2016-10-26 00:08:11.354814 -No vulnerabilities found. - - -jestoc01/flask-hello-world -https://github.com/jestoc01/flask-hello-world -Entry file: None -Scanned: 2016-10-26 00:08:11.877066 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -responsible/Flask-Restful-Role-Auth -https://github.com/responsible/Flask-Restful-Role-Auth -Entry file: Flask-Restful-Role-Auth/App/__init__.py -Scanned: 2016-10-26 00:08:13.206243 -Vulnerability 1: -File: Flask-Restful-Role-Auth/App/__init__.py - > User input at line 9, trigger word "SQLAlchemy": - db = SQLAlchemy(app) -Reassigned in: - File: Flask-Restful-Role-Auth/App/__init__.py - > Line 15: user_datastore = SQLAlchemyUserDatastore(db, User, Role) - File: Flask-Restful-Role-Auth/App/__init__.py - > Line 16: security = Security().init_app(app, user_datastore,register_blueprint=False) -File: Flask-Restful-Role-Auth/App/__init__.py - > reaches line 25, trigger word "execute(": - db.engine.execute(roles_users.insert(),user_id=1, role_id=1) - - - -dyllanwli/MyFlaskProject -https://github.com/dyllanwli/MyFlaskProject -Entry file: MyFlaskProject/hello.py -Scanned: 2016-10-26 00:08:14.522639 -No vulnerabilities found. - - -Almazi/1.flask_hello_world -https://github.com/Almazi/1.flask_hello_world -Entry file: None -Scanned: 2016-10-26 00:08:19.060641 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/Almazi/1.flask_hello_world. - -johnwheeler/flask-ask -https://github.com/johnwheeler/flask-ask -Entry file: flask-ask/samples/session/session.py -Scanned: 2016-10-26 00:08:22.267073 -Vulnerability 1: -File: flask-ask/samples/session/session.py - > User input at line 39, trigger word "get(": - color = session.attributes.get(COLOR_KEY) -Reassigned in: - File: flask-ask/samples/session/session.py - > Line 42: ret_MAYBE_FUNCTION_NAME = statement(statement_text).simple_card(card_title, statement_text) - File: flask-ask/samples/session/session.py - > Line 45: ret_MAYBE_FUNCTION_NAME = question(question_text).reprompt(question_text).simple_card(card_title, question_text) -File: flask-ask/samples/session/session.py - > reaches line 41, trigger word "render_template(": - statement_text = render_template('known_color_bye',color=color) - - - -parampara/flask -https://github.com/parampara/flask -Entry file: None -Scanned: 2016-10-26 00:08:22.811614 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -maxweiber/flask -https://github.com/maxweiber/flask -Entry file: None -Scanned: 2016-10-26 00:08:23.339498 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -syntaxSizer/flask -https://github.com/syntaxSizer/flask -Entry file: None -Scanned: 2016-10-26 00:08:23.881442 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -gabrielecker/Flask -https://github.com/gabrielecker/Flask -Entry file: None -Scanned: 2016-10-26 00:08:24.408281 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -ryanmthompson/flask -https://github.com/ryanmthompson/flask -Entry file: None -Scanned: 2016-10-26 00:08:24.911699 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -miguelgrinberg/flack -https://github.com/miguelgrinberg/flack -Entry file: flack/flack/__init__.py -Scanned: 2016-10-26 00:08:26.485313 -Vulnerability 1: -File: flack/flack/api/messages.py - > User input at line 36, trigger word "get(": - since = int(request.args.get('updated_since', '0')) -Reassigned in: - File: flack/flack/api/messages.py - > Line 40: since = day_ago -File: flack/flack/api/messages.py - > reaches line 41, trigger word "filter(": - msgs = Message.query.filter(Message.updated_at > since).order_by(Message.updated_at) - -Vulnerability 2: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 3: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 40, trigger word "filter(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) - -Vulnerability 4: -File: flack/flack/api/users.py - > User input at line 38, trigger word "get(": - users = users.filter_by(online=request.args.get('online') != '0') -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - -Vulnerability 5: -File: flack/flack/api/users.py - > User input at line 40, trigger word "get(": - users = users.filter(User.updated_at > int(request.args.get('updated_since'))) -Reassigned in: - File: flack/flack/api/users.py - > Line 36: users = User.query.order_by(User.updated_at.asc(), User.nickname.asc()) - File: flack/flack/api/users.py - > Line 38: users = users.filter_by(online=request.args.get('online') != '0') -File: flack/flack/api/users.py - > reaches line 42, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('users'[user.to_dict() for user in users.all()]) - - - -TwilioDevEd/sms2fa-flask -https://github.com/TwilioDevEd/sms2fa-flask -Entry file: sms2fa-flask/sms2fa_flask/__init__.py -Scanned: 2016-10-26 00:08:29.288598 -Vulnerability 1: -File: sms2fa-flask/sms2fa_flask/views.py - > User input at line 51, trigger word "get(": - user = User.query.get(session.get('user_email', '')) or abort(401) -Reassigned in: - File: sms2fa-flask/sms2fa_flask/views.py - > Line 56: ret_MAYBE_FUNCTION_NAME = redirect(url_for('secret_page')) -File: sms2fa-flask/sms2fa_flask/views.py - > reaches line 59, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('confirmation.html',user=user) - - - -RoseOu/Flask-learning -https://github.com/RoseOu/Flask-learning -Entry file: None -Scanned: 2016-10-26 00:08:29.819319 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -https://github.com/YUX-IO/uwsgi-nginx-flask-docker-for-sinaimg -Entry file: uwsgi-nginx-flask-docker-for-sinaimg/flask/app/main.py -Scanned: 2016-10-26 00:08:31.600523 -No vulnerabilities found. - - -datademofun/heroku-basic-flask -https://github.com/datademofun/heroku-basic-flask -Entry file: heroku-basic-flask/app.py -Scanned: 2016-10-26 00:08:33.644797 -No vulnerabilities found. - - -amey-sam/Flask-MailGun -https://github.com/amey-sam/Flask-MailGun -Entry file: None -Scanned: 2016-10-26 00:08:38.165889 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/amey-sam/Flask-MailGun. - -efrainmunoz/flasktaskr -https://github.com/efrainmunoz/flasktaskr -Entry file: None -Scanned: 2016-10-26 00:08:40.677028 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -DullSmile/flasky -https://github.com/DullSmile/flasky -Entry file: None -Scanned: 2016-10-26 00:08:43.678052 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -andresmguk/flasktaskr -https://github.com/andresmguk/flasktaskr -Entry file: None -Scanned: 2016-10-26 00:08:53.216222 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -minc-yang/flaskdemo -https://github.com/minc-yang/flaskdemo -Entry file: None -Scanned: 2016-10-26 00:08:56.741432 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -yvonnendutaw/flaskbook -https://github.com/yvonnendutaw/flaskbook -Entry file: flaskbook/app/__init__.py -Scanned: 2016-10-26 00:08:59.215027 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zjl1110/flaskdemo -https://github.com/zjl1110/flaskdemo -Entry file: None -Scanned: 2016-10-26 00:08:59.758179 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -chestnutme/flaskie -https://github.com/chestnutme/flaskie -Entry file: flaskie/app/__init__.py -Scanned: 2016-10-26 00:09:06.375724 -Vulnerability 1: -File: flaskie/app/main/views.py - > User input at line 18, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 26: pagination = query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 29: posts = pagination.items - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 2: -File: flaskie/app/main/views.py - > User input at line 21, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flaskie/app/main/views.py - > Line 19: show_followed = False - File: flaskie/app/main/views.py - > Line 17: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flaskie/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, show_followed=show_followed, pagination=pagination) - -Vulnerability 3: -File: flaskie/app/main/views.py - > User input at line 36, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 37: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 39: posts = pagination.items -File: flaskie/app/main/views.py - > reaches line 40, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flaskie/app/main/views.py - > User input at line 95, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 97: page = post.comments.count() - 1 / current_app.config['FLASKY_COMMENTS_PER_PAGE'] + 1 - File: flaskie/app/main/views.py - > Line 99: pagination = post.comments.order_by(Comment.timestamp.asc()).paginate(page,per_page=current_app.config['FLASKY_COMMENTS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 102: comments = pagination.items - File: flaskie/app/main/views.py - > Line 94: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.post',id=post.id, page=-1)) -File: flaskie/app/main/views.py - > reaches line 103, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('post.html',posts=[post], form=form, comments=comments, pagination=pagination) - -Vulnerability 5: -File: flaskie/app/main/views.py - > User input at line 158, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 159: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flaskie/app/main/views.py - > Line 162: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 157: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 164, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 6: -File: flaskie/app/main/views.py - > User input at line 174, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flaskie/app/main/views.py - > Line 175: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE']) - File: flaskie/app/main/views.py - > Line 177: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flaskie/app/main/views.py - > Line 173: ret_MAYBE_FUNCTION_NAME = redirect(url_for('index')) -File: flaskie/app/main/views.py - > reaches line 179, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -fengyu225/flaskr -https://github.com/fengyu225/flaskr -Entry file: None -Scanned: 2016-10-26 00:09:06.907765 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/fengyu225/flaskr. - -jbussdieker/flaskr -https://github.com/jbussdieker/flaskr -Entry file: None -Scanned: 2016-10-26 00:09:07.425537 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/jbussdieker/flaskr. - -richardqlin/flaskralchemy -https://github.com/richardqlin/flaskralchemy -Entry file: None -Scanned: 2016-10-26 00:09:08.946938 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/richardqlin/flaskralchemy. - -garaud/flask-restplus-meetup -https://github.com/garaud/flask-restplus-meetup -Entry file: flask-restplus-meetup/musicapp.py -Scanned: 2016-10-26 00:09:11.400852 -No vulnerabilities found. - - -ibrahimirdem/flask-numaradan-isim -https://github.com/ibrahimirdem/flask-numaradan-isim -Entry file: flask-numaradan-isim/app.py -Scanned: 2016-10-26 00:09:12.799141 -Vulnerability 1: -File: flask-numaradan-isim/app.py - > User input at line 18, trigger word "form[": - gelen = request.form['numara'] -Reassigned in: - File: flask-numaradan-isim/app.py - > Line 22: sonuc = fonksiyonlar.numara_denetim(gelen) - File: flask-numaradan-isim/app.py - > Line 29: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home')) - File: flask-numaradan-isim/app.py - > Line 33: ret_MAYBE_FUNCTION_NAME = redirect(url_for('home')) -File: flask-numaradan-isim/app.py - > reaches line 25, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('sonuc.html',dogruluk=sonuc[0], isim=sonuc[1], id=sonuc[2]) - - - -andresmguk/flasktaskr1 -https://github.com/andresmguk/flasktaskr1 -Entry file: flasktaskr1/views.py -Scanned: 2016-10-26 00:09:15.990151 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -andresmguk/flasktaskr2 -https://github.com/andresmguk/flasktaskr2 -Entry file: flasktaskr2/views.py -Scanned: 2016-10-26 00:09:19.313147 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -belljustin/FlaskDeploy -https://github.com/belljustin/FlaskDeploy -Entry file: FlaskDeploy/deploy.py -Scanned: 2016-10-26 00:09:20.652692 -No vulnerabilities found. - - -ArvidQuarshie/FlaskAuthentication -https://github.com/ArvidQuarshie/FlaskAuthentication -Entry file: None -Scanned: 2016-10-26 00:09:23.549071 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/ArvidQuarshie/FlaskAuthentication. - -zjyExcelsior/FlaskSkeleton -https://github.com/zjyExcelsior/FlaskSkeleton -Entry file: FlaskSkeleton/myapp/__init__.py -Scanned: 2016-10-26 00:09:24.884187 -No vulnerabilities found. - - -er3456qi/FlaskTutorial -https://github.com/er3456qi/FlaskTutorial -Entry file: FlaskTutorial/flaskr.py -Scanned: 2016-10-26 00:09:26.300329 -No vulnerabilities found. - - -kelvinmuchui/flaskApp -https://github.com/kelvinmuchui/flaskApp -Entry file: flaskApp/app.py -Scanned: 2016-10-26 00:09:29.510769 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ptomelle/flaskNew -https://github.com/ptomelle/flaskNew -Entry file: flaskNew/wsgi/myflaskapp.py -Scanned: 2016-10-26 00:09:31.305153 -No vulnerabilities found. - - -sr77/Restaurant-Web-Application -https://github.com/sr77/Restaurant-Web-Application -Entry file: Restaurant-Web-Application/project.py -Scanned: 2016-10-26 00:09:32.752271 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Almazi/Flask_Project_RealPython -https://github.com/Almazi/Flask_Project_RealPython -Entry file: Flask_Project_RealPython/app.py -Scanned: 2016-10-26 00:09:34.670104 -No vulnerabilities found. - - -hamidfzm/Rest-in-Flask -https://github.com/hamidfzm/Rest-in-Flask -Entry file: Rest-in-Flask/application/__init__.py -Scanned: 2016-10-26 00:09:36.143317 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zhujinliang/flask-based-web-framework -https://github.com/zhujinliang/flask-based-web-framework -Entry file: flask-based-web-framework/core/__init__.py -Scanned: 2016-10-26 00:09:38.798631 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -lipemorais/todo-flask -https://github.com/lipemorais/todo-flask -Entry file: todo-flask/server.py -Scanned: 2016-10-26 00:09:40.106621 -No vulnerabilities found. - - -tonuidavies/Blog-flask -https://github.com/tonuidavies/Blog-flask -Entry file: None -Scanned: 2016-10-26 00:09:48.976528 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -LpanatoPlanzi/flask-app -https://github.com/LpanatoPlanzi/flask-app -Entry file: flask-app/wsgi/myflaskapp.py -Scanned: 2016-10-26 00:09:50.570046 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -ksripathi/flask-app -https://github.com/ksripathi/flask-app -Entry file: flask-app/apilayer.py -Scanned: 2016-10-26 00:09:52.054956 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -maheskett/flask-testing -https://github.com/maheskett/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:09:53.843421 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -kellyhiggins/Flask-testing -https://github.com/kellyhiggins/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-26 00:09:55.708156 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -laurensila/flask-testing -https://github.com/laurensila/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:09:57.473096 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -jaronoff97/Flask-Boilerplate -https://github.com/jaronoff97/Flask-Boilerplate -Entry file: Flask-Boilerplate/flaskapp.py -Scanned: 2016-10-26 00:09:58.924337 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -zjl1110/flask-demo -https://github.com/zjl1110/flask-demo -Entry file: None -Scanned: 2016-10-26 00:10:03.885769 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -hadesong/Flask_Issues -https://github.com/hadesong/Flask_Issues -Entry file: None -Scanned: 2016-10-26 00:10:05.193312 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/hadesong/Flask_Issues. - -jayanth2810/Heroku_Flask -https://github.com/jayanth2810/Heroku_Flask -Entry file: Heroku_Flask/app/app.py -Scanned: 2016-10-26 00:10:06.505511 -No vulnerabilities found. - - -ArvidQuarshie/DiscoverFlask -https://github.com/ArvidQuarshie/DiscoverFlask -Entry file: None -Scanned: 2016-10-26 00:10:10.725640 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -kosma24/labrat-flask -https://github.com/kosma24/labrat-flask -Entry file: labrat-flask/lab.py -Scanned: 2016-10-26 00:10:12.544968 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -paceko/testing-flask -https://github.com/paceko/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:10:14.431727 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -minyisme/flask-testing -https://github.com/minyisme/flask-testing -Entry file: flask-testing/party.py -Scanned: 2016-10-26 00:10:16.320005 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -cristinamclarkin/Flask-testing -https://github.com/cristinamclarkin/Flask-testing -Entry file: Flask-testing/party.py -Scanned: 2016-10-26 00:10:18.284386 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -sangqt/learn-flask -https://github.com/sangqt/learn-flask -Entry file: None -Scanned: 2016-10-26 00:10:18.830988 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -nathanism/flask-app -https://github.com/nathanism/flask-app -Entry file: flask-app/app/__init__.py -Scanned: 2016-10-26 00:10:24.111059 -No vulnerabilities found. - - -iuhsihsow/hello_flask -https://github.com/iuhsihsow/hello_flask -Entry file: hello_flask/app/__init__.py -Scanned: 2016-10-26 00:10:25.531939 -No vulnerabilities found. - - -amsuny/flask-site -https://github.com/amsuny/flask-site -Entry file: flask-site/flask-site.py -Scanned: 2016-10-26 00:10:26.858006 -No vulnerabilities found. - - -bigzhao/Flask-Tasks -https://github.com/bigzhao/Flask-Tasks -Entry file: Flask-Tasks/flasktask/app/__init__.py -Scanned: 2016-10-26 00:10:29.151660 -Vulnerability 1: -File: Flask-Tasks/flasktask/app/auth/views.py - > User input at line 124, trigger word "files[": - file = request.files['file'] -Reassigned in: - File: Flask-Tasks/flasktask/app/auth/views.py - > Line 129: filename = secure_filename(file.filename) -File: Flask-Tasks/flasktask/app/auth/views.py - > reaches line 131, trigger word "url_for(": - current_user.image_url = url_for('auth.static',filename='%s/%s' % ('avatar', filename)) - -Vulnerability 2: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_posts',page=page - 1, _external=True) - -Vulnerability 3: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_posts',page=page + 1, _external=True) - -Vulnerability 4: -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 11: pagination = Post.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 14: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/posts.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 5: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 22, trigger word "url_for(": - prev = url_for('api.get_user_posts',page=page - 1, _external=True) - -Vulnerability 6: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 25, trigger word "url_for(": - next = url_for('api.get_user_posts',page=page + 1, _external=True) - -Vulnerability 7: -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > User input at line 15, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 16: pagination = user.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 19: posts = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 20: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/users.py - > Line 23: next = None -File: Flask-Tasks/flasktask/app/api_1_0/users.py - > reaches line 26, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[post.to_json() for post in posts]prevnextpagination.total) - -Vulnerability 8: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 17, trigger word "url_for(": - prev = url_for('api.get_comments',page=page - 1, _external=True) - -Vulnerability 9: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 20, trigger word "url_for(": - next = url_for('api.get_comments',page=page + 1, _external=True) - -Vulnerability 10: -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > User input at line 10, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 11: pagination = Comment.query.order_by(Comment.create_at.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 14: comments = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 15: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > Line 18: next = None -File: Flask-Tasks/flasktask/app/api_1_0/comments.py - > reaches line 21, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('posts''prev''next''count'[comment.to_json() for comment in comments]prevnextpagination.total) - -Vulnerability 11: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 16, trigger word "url_for(": - prev = url_for('api.get_tasks',page=page - 1, _external=True) - -Vulnerability 12: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 19, trigger word "url_for(": - next = url_for('api.get_tasks',page=page + 1, _external=True) - -Vulnerability 13: -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > User input at line 9, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 10: pagination = Task.query.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 13: tasks = pagination.items - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 14: prev = None - File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > Line 17: next = None -File: Flask-Tasks/flasktask/app/api_1_0/tasks.py - > reaches line 20, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify('tasks''prev''next''count'[task.to_json() for task in tasks]prevnextpagination.total) - -Vulnerability 14: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 26, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 28: pagination = current_user.circles[-1].tasks.order_by(Task.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/main/views.py - > Line 31: tasks = pagination.items - File: Flask-Tasks/flasktask/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 15: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 33, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 25: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 34, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 16: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 53, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 57: pagination = c.tasks.order_by(Task.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/main/views.py - > Line 60: tasks = pagination.items - File: Flask-Tasks/flasktask/app/main/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=c.id)) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 17: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 62, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 52: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=c.id)) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 63, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, tasks=tasks, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 18: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 167, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 168, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('circle.html',new_messages=int(new_messages)) - -Vulnerability 19: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 189, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message') -Reassigned in: - File: Flask-Tasks/flasktask/app/main/views.py - > Line 187: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.circle')) -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 190, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('create_circle.html',new_messages=int(new_messages), form=form) - -Vulnerability 20: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 196, trigger word "get(": - message = request.form.get('message') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 200, trigger word "filter(": - c = db.session.query(Circle).filter(Circle.name.like('%' + message + '%')).all() - -Vulnerability 21: -File: Flask-Tasks/flasktask/app/main/views.py - > User input at line 202, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/main/views.py - > reaches line 203, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('search_circle.html',new_messages=int(new_messages), circles=c) - -Vulnerability 22: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 22, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 23: pagination = current_user.circles[-1].posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 26: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 23: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 28, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 21: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 29, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=current_user.circles[-1].name, new_messages=int(new_messages)) - -Vulnerability 24: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 45, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 46: pagination = c.posts.order_by(Post.create_at.desc()).paginate(page,per_page=current_app.config['TASK_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 49: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=circle_id)) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 25: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 51, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 44: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index_circles',circle_id=circle_id)) -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 52, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/blogs.html',postform=postform, posts=posts, pagination=pagination, circle_name=c.name, new_messages=int(new_messages)) - -Vulnerability 26: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 94, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 95: pagination = user.posts.paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 98: posts = pagination.items - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 100: posts = [] - File: Flask-Tasks/flasktask/app/blog/views.py - > Line 101: posts = pagination.items -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 104, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/user_blogs.html',user=user, posts=posts, pagination=pagination, new_messages=int(new_messages)) - -Vulnerability 27: -File: Flask-Tasks/flasktask/app/blog/views.py - > User input at line 103, trigger word "get(": - new_messages = redis_client.hget(current_user.id, 'new_message').decode('utf-8') -File: Flask-Tasks/flasktask/app/blog/views.py - > reaches line 104, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('blog/user_blogs.html',user=user, posts=posts, pagination=pagination, new_messages=int(new_messages)) - - - -nlesc-sherlock/spark-flask -https://github.com/nlesc-sherlock/spark-flask -Entry file: spark-flask/app.py -Scanned: 2016-10-26 00:10:30.566900 -No vulnerabilities found. - - -linked0/first-flask -https://github.com/linked0/first-flask -Entry file: first-flask/main.py -Scanned: 2016-10-26 00:10:31.881987 -No vulnerabilities found. - - -mprather1/flask_hello -https://github.com/mprather1/flask_hello -Entry file: flask_hello/hello_world.py -Scanned: 2016-10-26 00:10:33.193567 -No vulnerabilities found. - - -9217392354A/flask-stuff -https://github.com/9217392354A/flask-stuff -Entry file: flask-stuff/__init__.py -Scanned: 2016-10-26 00:10:37.211168 -No vulnerabilities found. - - -M4riacg/api-flask -https://github.com/M4riacg/api-flask -Entry file: api-flask/api_flask.py -Scanned: 2016-10-26 00:10:38.522176 -No vulnerabilities found. - - -gpgomes/pyFlask -https://github.com/gpgomes/pyFlask -Entry file: pyFlask/server.py -Scanned: 2016-10-26 00:10:39.834313 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Nana2mini/Flask-Blog -https://github.com/Nana2mini/Flask-Blog -Entry file: None -Scanned: 2016-10-26 00:10:40.495536 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -dencynluv/testing-flask -https://github.com/dencynluv/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:10:42.301526 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -efrainmunoz/flask-blog -https://github.com/efrainmunoz/flask-blog -Entry file: None -Scanned: 2016-10-26 00:10:49.843646 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -BethMwangi/flask-intro -https://github.com/BethMwangi/flask-intro -Entry file: flask-intro/app.py -Scanned: 2016-10-26 00:10:54.341849 -No vulnerabilities found. -An Error occurred while scanning the repo: Input needs to be a file. Path: flask-intro/flask/lib/python2.7/sre_compile.py - -zjl1110/flask-blogmy -https://github.com/zjl1110/flask-blogmy -Entry file: None -Scanned: 2016-10-26 00:10:58.861506 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -skrillex581/flask-insight -https://github.com/skrillex581/flask-insight -Entry file: flask-insight/app/__init__.py -Scanned: 2016-10-26 00:11:00.352910 -No vulnerabilities found. - - -balalay12/flask-cachlka -https://github.com/balalay12/flask-cachlka -Entry file: flask-cachlka/app/__init__.py -Scanned: 2016-10-26 00:11:02.105224 -Vulnerability 1: -File: flask-cachlka/app/views.py - > User input at line 230, trigger word "get(": - repeat = Repeats.query.get(int(id)) -Reassigned in: - File: flask-cachlka/app/views.py - > Line 231: s = Sets.query.get(repeat.set_id) - File: flask-cachlka/app/views.py - > Line 233: ret_MAYBE_FUNCTION_NAME = return_response(404, jsonify(error='Отказано в доступе')) - File: flask-cachlka/app/views.py - > Line 235: ret_MAYBE_FUNCTION_NAME = return_response(500, jsonify(error='Произошлка ошибка во время запроса.')) -File: flask-cachlka/app/views.py - > reaches line 236, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(repeat=repeat.serialize) - -Vulnerability 2: -File: flask-cachlka/app/views.py - > User input at line 293, trigger word "get(": - category = Categories.query.get(int(id)) -File: flask-cachlka/app/views.py - > reaches line 294, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(exercises=[exercise.serialize for exercise in category.exercises.all()]) - -Vulnerability 3: -File: flask-cachlka/app/views.py - > User input at line 312, trigger word "get(": - body_size = BodySize.query.get(int(id)) -Reassigned in: - File: flask-cachlka/app/views.py - > Line 314: ret_MAYBE_FUNCTION_NAME = return_response(404, jsonify(error='Отказано в доступе')) - File: flask-cachlka/app/views.py - > Line 316: ret_MAYBE_FUNCTION_NAME = return_response(500, jsonify(error='Произошлка ошибка во время запроса.')) -File: flask-cachlka/app/views.py - > reaches line 317, trigger word "jsonify(": - ret_MAYBE_FUNCTION_NAME = jsonify(body_size=body_size.serialize) - - - -mythreyaraj/python-flask -https://github.com/mythreyaraj/python-flask -Entry file: python-flask/app.py -Scanned: 2016-10-26 00:11:03.583590 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Lypzero/flask_studing -https://github.com/Lypzero/flask_studing -Entry file: flask_studing/app/__init__.py -Scanned: 2016-10-26 00:11:05.172535 -Vulnerability 1: -File: flask_studing/app/main/views.py - > User input at line 20, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 28: pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 29: posts = pagination.items - File: flask_studing/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 2: -File: flask_studing/app/main/views.py - > User input at line 23, trigger word "get(": - show_followed = bool(request.cookies.get('show_followed', '')) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 21: show_followed = False - File: flask_studing/app/main/views.py - > Line 18: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 30, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('index.html',form=form, posts=posts, pagination=pagination, show_followed=show_followed) - -Vulnerability 3: -File: flask_studing/app/main/views.py - > User input at line 42, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 43: pagination = user.posts.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['FLASKY_POSTS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 46: posts = pagination.items -File: flask_studing/app/main/views.py - > reaches line 47, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('user.html',user=user, posts=posts, pagination=pagination) - -Vulnerability 4: -File: flask_studing/app/main/views.py - > User input at line 108, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 109: pagination = user.followers.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 110: follows = ['user''timestamp'item.followeritem.timestamp for item in pagination.items] - File: flask_studing/app/main/views.py - > Line 107: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 111, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followers of', endpoint='.followers', pagination=pagination, follows=follows) - -Vulnerability 5: -File: flask_studing/app/main/views.py - > User input at line 119, trigger word "get(": - page = request.args.get('page', 1,type=int) -Reassigned in: - File: flask_studing/app/main/views.py - > Line 120: pagination = user.followed.paginate(page,per_page=current_app.config['FLASKY_FOLLOWERS_PER_PAGE'], error_out=False) - File: flask_studing/app/main/views.py - > Line 123: follows = ['user''timestamp'item.followeditem.timestamp for item in pagination.items] - File: flask_studing/app/main/views.py - > Line 118: ret_MAYBE_FUNCTION_NAME = redirect(url_for('.index')) -File: flask_studing/app/main/views.py - > reaches line 125, trigger word "render_template(": - ret_MAYBE_FUNCTION_NAME = render_template('followers.html',user=user, title='Followed by', endpoint='.followed_by', pagination=pagination, follows=follows) - - - -dflee/testing-flask -https://github.com/dflee/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:11:07.094088 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Ihyatt/testing-flask -https://github.com/Ihyatt/testing-flask -Entry file: testing-flask/party.py -Scanned: 2016-10-26 00:11:08.888637 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -stefanbro/flask-circle -https://github.com/stefanbro/flask-circle -Entry file: flask-circle/app/__init__.py -Scanned: 2016-10-26 00:11:10.693165 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -Clemenshemmerling/flask-docker -https://github.com/Clemenshemmerling/flask-docker -Entry file: flask-docker/app/app.py -Scanned: 2016-10-26 00:11:12.058812 -No vulnerabilities found. - - -rajatgermany/Rajat5 -https://github.com/rajatgermany/Rajat5 -Entry file: Rajat5/newforms.py -Scanned: 2016-10-26 00:11:13.409854 -No vulnerabilities found. - - -amirthn/irpycoderzz -https://github.com/amirthn/irpycoderzz -Entry file: irpycoderzz/app.py -Scanned: 2016-10-26 00:11:14.712784 -No vulnerabilities found. - - -chxy325/studyflask -https://github.com/chxy325/studyflask -Entry file: studyflask/hello.py -Scanned: 2016-10-26 00:11:16.024243 -No vulnerabilities found. - - -moling3650/microblog -https://github.com/moling3650/microblog -Entry file: None -Scanned: 2016-10-26 00:11:17.555613 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/moling3650/microblog. - -gekorob/liebraryrest -https://github.com/gekorob/liebraryrest -Entry file: liebraryrest/liebraryrest/app.py -Scanned: 2016-10-26 00:11:20.114302 -Vulnerability 1: -File: liebraryrest/liebraryrest/api/authors.py - > User input at line 14, trigger word "get(": - qry = qry.filter(Author.name.contains(request.args.get('name'))) -Reassigned in: - File: liebraryrest/liebraryrest/api/authors.py - > Line 11: qry = Author.query -File: liebraryrest/liebraryrest/api/authors.py - > reaches line 14, trigger word "filter(": - qry = qry.filter(Author.name.contains(request.args.get('name'))) - - - -jlanio/Flask-RestlessLoginToken -https://github.com/jlanio/Flask-RestlessLoginToken -Entry file: Flask-RestlessLoginToken/models.py -Scanned: 2016-10-26 00:11:25.446055 -No vulnerabilities found. - - -vibhor1510/COMS-6156-Flask-App -https://github.com/vibhor1510/COMS-6156-Flask-App -Entry file: None -Scanned: 2016-10-26 00:11:29.833980 -No vulnerabilities found. -An Error occurred while scanning the repo: No entry path found in repo https://github.com/vibhor1510/COMS-6156-Flask-App. - -azedlee/flask_hello_world -https://github.com/azedlee/flask_hello_world -Entry file: flask_hello_world/hello_world.py -Scanned: 2016-10-26 00:11:32.600006 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown :-( - -BeenzSyed/flask-random-quote -https://github.com/BeenzSyed/flask-random-quote -Entry file: flask-random-quote/app.py -Scanned: 2016-10-26 00:11:33.920832 -No vulnerabilities found. - - -Firdaus1/Hello_world_Flask -https://github.com/Firdaus1/Hello_world_Flask -Entry file: Hello_world_Flask/FirdausCS3320.py -Scanned: 2016-10-26 00:11:35.235462 -No vulnerabilities found. - - -JesseE/flask-demo-viewer -https://github.com/JesseE/flask-demo-viewer -Entry file: None -Scanned: 2016-10-26 00:11:39.623371 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -katietarng/hb-testing-flask -https://github.com/katietarng/hb-testing-flask -Entry file: None -Scanned: 2016-10-26 00:11:40.162192 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -HenryZivers/Flask-Microblog-App -https://github.com/HenryZivers/Flask-Microblog-App -Entry file: None -Scanned: 2016-10-26 00:11:40.711889 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -stack-templates/cde-flask-init-project -https://github.com/stack-templates/cde-flask-init-project -Entry file: None -Scanned: 2016-10-26 00:11:41.269722 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Skycker/lsa-flask-preview -https://github.com/Skycker/lsa-flask-preview -Entry file: None -Scanned: 2016-10-26 00:11:41.808073 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -aurora71/flask-Smart-seat-realtime -https://github.com/aurora71/flask-Smart-seat-realtime -Entry file: None -Scanned: 2016-10-26 00:11:42.350985 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -s4swadhin/flask-hello-world -https://github.com/s4swadhin/flask-hello-world -Entry file: None -Scanned: 2016-10-26 00:11:42.881762 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -matthewR1993/flask-gant-fun -https://github.com/matthewR1993/flask-gant-fun -Entry file: None -Scanned: 2016-10-26 00:11:50.456578 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -parampara/flask -https://github.com/parampara/flask -Entry file: None -Scanned: 2016-10-26 00:12:00.028840 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -glrh111/flask -https://github.com/glrh111/flask -Entry file: None -Scanned: 2016-10-26 00:12:01.549573 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -rakeshkirola/Flask -https://github.com/rakeshkirola/Flask -Entry file: None -Scanned: 2016-10-26 00:12:03.067923 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -caibitim/Flask -https://github.com/caibitim/Flask -Entry file: None -Scanned: 2016-10-26 00:12:04.598459 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -zhangsen1992/flask -https://github.com/zhangsen1992/flask -Entry file: None -Scanned: 2016-10-26 00:12:06.110296 -No vulnerabilities found. -An Error occurred while scanning the repo: Other Error Unknown while cloning :-( - -Mufflerman/Flask -https://github.com/Mufflerman/Flask -Entry file: None -Scanned: 2016-10-26 00:12:07 \ No newline at end of file From 41f378930b4b666dea0fe4670cb2eae81eec664f Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 14 Apr 2018 18:14:05 -0700 Subject: [PATCH 246/541] Move django_open_source_apps.csv, flask_open_source_apps.csv, func_counter.py, make_dependency_graph.sh, profiling/ to readthedocs repo --- MANIFEST.in | 1 - analyse_scan_results.py | 68 - django_open_source_apps.csv | 1 - flask_open_source_apps.csv | 853 ------ func_counter.py | 49 - make_dependency_graph.sh | 5 - profiling/db.txt | 2598 ----------------- profiling/fine_timer.py | 91 - profiling/profiler.py | 38 - profiling/profiling_runner.py | 38 - .../flaskbb_lite_1/.landscape.yml | 27 - .../test_projects/flaskbb_lite_1/.travis.yml | 15 - .../test_projects/flaskbb_lite_1/.tx/config | 8 - .../test_projects/flaskbb_lite_1/AUTHORS | 14 - .../test_projects/flaskbb_lite_1/CHANGES | 7 - .../test_projects/flaskbb_lite_1/LICENSE | 33 - .../test_projects/flaskbb_lite_1/Makefile | 26 - .../test_projects/flaskbb_lite_1/README.md | 58 - .../test_projects/flaskbb_lite_1/babel.cfg | 4 - .../flaskbb_lite_1/docs/.gitignore | 1 - .../flaskbb_lite_1/docs/Makefile | 177 -- .../flaskbb_lite_1/docs/_static/logo-full.png | Bin 10951 -> 0 bytes .../docs/_templates/sidebarintro.html | 12 - .../test_projects/flaskbb_lite_1/docs/conf.py | 272 -- .../flaskbb_lite_1/docs/contents.rst.inc | 14 - .../flaskbb_lite_1/docs/events.rst | 77 - .../flaskbb_lite_1/docs/index.rst | 16 - .../flaskbb_lite_1/docs/installation.rst | 329 --- .../flaskbb_lite_1/docs/make.bat | 242 -- .../flaskbb_lite_1/docs/models.rst | 79 - .../flaskbb_lite_1/docs/permissions.rst | 11 - .../docs/plugin_tutorial/index.rst | 17 - .../docs/plugin_tutorial/structure.rst | 4 - .../flaskbb_lite_1/docs/plugins.rst | 179 -- .../flaskbb_lite_1/docs/settings.rst | 59 - .../flaskbb_lite_1/docs/theming.rst | 4 - .../flaskbb_lite_1/flaskbb/__init__.py | 15 - .../flaskbb_lite_1/flaskbb/_compat.py | 29 - .../flaskbb_lite_1/flaskbb/app.py | 315 -- .../flaskbb_lite_1/flaskbb/auth/__init__.py | 1 - .../flaskbb_lite_1/flaskbb/auth/crazy.py | 8 - .../flaskbb_lite_1/flaskbb/auth/forms.py | 118 - .../flaskbb_lite_1/flaskbb/auth/hest/empty.py | 0 .../flaskbb_lite_1/flaskbb/auth/views.py | 165 -- .../flaskbb/configs/__init__.py | 0 .../flaskbb_lite_1/flaskbb/configs/default.py | 99 - .../flaskbb/configs/development.py.example | 61 - .../flaskbb/configs/production.py.example | 92 - .../flaskbb_lite_1/flaskbb/configs/testing.py | 64 - .../flaskbb_lite_1/flaskbb/email.py | 39 - .../flaskbb_lite_1/flaskbb/exceptions.py | 19 - .../flaskbb_lite_1/flaskbb/extensions.py | 61 - .../flaskbb/fixtures/__init__.py | 0 .../flaskbb_lite_1/flaskbb/fixtures/groups.py | 106 - .../flaskbb/fixtures/settings.py | 159 - .../flaskbb/plugins/__init__.py | 73 - .../flaskbb/plugins/portal/__init__.py | 64 - .../flaskbb/plugins/portal/info.json | 9 - .../plugins/portal/templates/index.html | 204 -- .../portal/templates/navigation_snippet.html | 5 - .../translations/de/LC_MESSAGES/messages.po | 24 - .../translations/en/LC_MESSAGES/messages.po | 25 - .../flaskbb/plugins/portal/views.py | 64 - .../flaskbb_lite_1/flaskbb/static/.gitkeep | 0 .../flaskbb/static/css/pygments.css | 64 - .../flaskbb/static/css/styles.css | 10 - .../flaskbb/static/emoji/.gitkeep | 1 - .../flaskbb/static/emoji/flaskbb.png | Bin 11014 -> 0 bytes .../flaskbb_lite_1/flaskbb/static/favicon.ico | Bin 1150 -> 0 bytes .../flaskbb/static/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../glyphicons-halflings-regular.svg | 288 -- .../glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../static/fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../static/fonts/fontawesome-webfont.svg | 655 ----- .../static/fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../static/fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../static/fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes .../flaskbb/static/img/avatar.svg | 4 - .../flaskbb/static/img/avatar100x100.png | Bin 866 -> 0 bytes .../flaskbb/static/img/avatar150x150.png | Bin 1286 -> 0 bytes .../flaskbb/static/img/avatar400x400.png | Bin 3776 -> 0 bytes .../flaskbb/static/img/avatar80x80.png | Bin 690 -> 0 bytes .../flaskbb/static/img/megalist-icons.png | Bin 3641 -> 0 bytes .../flaskbb/static/js/editor.js | 53 - .../flaskbb/static/js/editor.min.js | 3 - .../flaskbb_lite_1/flaskbb/static/js/emoji.js | 164 -- .../flaskbb/static/js/flaskbb.js | 138 - .../flaskbb/static/js/scripts.min.js | 4 - .../flaskbb_lite_1/flaskbb/static/robots.txt | 1 - .../templates/auth/forgot_password.html | 21 - .../flaskbb/templates/auth/login.html | 30 - .../flaskbb/templates/auth/reauth.html | 22 - .../flaskbb/templates/auth/register.html | 31 - .../templates/auth/reset_password.html | 18 - .../flaskbb/templates/editor_help.html | 60 - .../templates/email/reset_password.html | 5 - .../templates/email/reset_password.txt | 11 - .../templates/errors/forbidden_page.html | 16 - .../templates/errors/page_not_found.html | 16 - .../templates/errors/server_error.html | 15 - .../flaskbb/templates/flashed_messages.html | 18 - .../flaskbb/templates/forum/category.html | 16 - .../templates/forum/category_layout.html | 132 - .../flaskbb/templates/forum/edit_forum.html | 175 -- .../flaskbb/templates/forum/forum.html | 135 - .../flaskbb/templates/forum/index.html | 32 - .../flaskbb/templates/forum/memberlist.html | 65 - .../flaskbb/templates/forum/new_post.html | 50 - .../flaskbb/templates/forum/new_topic.html | 52 - .../flaskbb/templates/forum/online_users.html | 24 - .../flaskbb/templates/forum/report_post.html | 23 - .../flaskbb/templates/forum/search_form.html | 27 - .../templates/forum/search_result.html | 345 --- .../flaskbb/templates/forum/topic.html | 178 -- .../templates/forum/topic_controls.html | 102 - .../templates/forum/topic_horizontal.html | 187 -- .../flaskbb/templates/forum/topictracker.html | 124 - .../flaskbb/templates/layout.html | 183 -- .../flaskbb/templates/macros.html | 415 --- .../templates/management/banned_users.html | 125 - .../templates/management/category_form.html | 55 - .../templates/management/forum_form.html | 59 - .../flaskbb/templates/management/forums.html | 175 -- .../templates/management/group_form.html | 68 - .../flaskbb/templates/management/groups.html | 91 - .../management/management_layout.html | 28 - .../templates/management/overview.html | 130 - .../flaskbb/templates/management/plugins.html | 76 - .../flaskbb/templates/management/reports.html | 64 - .../templates/management/settings.html | 71 - .../templates/management/unread_reports.html | 96 - .../templates/management/user_form.html | 64 - .../flaskbb/templates/management/users.html | 162 - .../templates/message/conversation.html | 146 - .../templates/message/conversation_list.html | 93 - .../flaskbb/templates/message/drafts.html | 13 - .../flaskbb/templates/message/inbox.html | 12 - .../templates/message/message_form.html | 45 - .../templates/message/message_layout.html | 38 - .../flaskbb/templates/message/sent.html | 12 - .../flaskbb/templates/message/trash.html | 13 - .../flaskbb/templates/navigation.html | 73 - .../flaskbb/templates/user/all_posts.html | 80 - .../flaskbb/templates/user/all_topics.html | 82 - .../flaskbb/templates/user/change_email.html | 19 - .../templates/user/change_password.html | 19 - .../templates/user/change_user_details.html | 31 - .../templates/user/general_settings.html | 18 - .../flaskbb/templates/user/profile.html | 90 - .../templates/user/profile_layout.html | 103 - .../templates/user/settings_layout.html | 28 - .../flaskbb/themes/aurora/Gulpfile.js | 147 - .../flaskbb/themes/aurora/README.md | 112 - .../flaskbb/themes/aurora/bower.json | 31 - .../flaskbb/themes/aurora/info.json | 9 - .../flaskbb/themes/aurora/package.json | 22 - .../flaskbb/themes/aurora/src/_aurora.scss | 16 - .../aurora/src/_bootstrap-variables.scss | 842 ------ .../flaskbb/themes/aurora/src/_button.scss | 49 - .../flaskbb/themes/aurora/src/_category.scss | 62 - .../flaskbb/themes/aurora/src/_editor.scss | 53 - .../flaskbb/themes/aurora/src/_fixes.scss | 67 - .../flaskbb/themes/aurora/src/_forum.scss | 64 - .../themes/aurora/src/_management.scss | 206 -- .../flaskbb/themes/aurora/src/_misc.scss | 132 - .../flaskbb/themes/aurora/src/_mixins.scss | 1 - .../themes/aurora/src/_navigation.scss | 125 - .../flaskbb/themes/aurora/src/_panel.scss | 48 - .../flaskbb/themes/aurora/src/_profile.scss | 214 -- .../flaskbb/themes/aurora/src/_topic.scss | 159 - .../flaskbb/themes/aurora/src/_variables.scss | 51 - .../flaskbb/themes/aurora/src/styles.scss | 11 - .../flaskbb/themes/aurora/static | 1 - .../translations/de/LC_MESSAGES/messages.po | 1627 ----------- .../translations/en/LC_MESSAGES/messages.po | 1875 ------------ .../translations/es/LC_MESSAGES/messages.po | 1627 ----------- .../pt_BR/LC_MESSAGES/messages.po | 1627 ----------- .../translations/ru/LC_MESSAGES/messages.po | 1751 ----------- .../zh_CN/LC_MESSAGES/messages.po | 1608 ---------- .../zh_TW/LC_MESSAGES/messages.po | 1615 ---------- .../flaskbb_lite_1/logs/.gitkeep | 0 .../test_projects/flaskbb_lite_1/manage.py | 317 -- .../flaskbb_lite_1/migrations/README | 1 - .../flaskbb_lite_1/migrations/alembic.ini | 45 - .../flaskbb_lite_1/migrations/env.py | 73 - .../flaskbb_lite_1/migrations/script.py.mako | 22 - ...127be3fb000_added_m2m_forumgroups_table.py | 31 - .../versions/514ca0a3282c_private_messages.py | 70 - .../migrations/versions/8ad96e49dc6_init.py | 225 -- .../test_projects/flaskbb_lite_1/mprof.py | 512 ---- .../test_projects/flaskbb_lite_1/pytest.ini | 3 - .../flaskbb_lite_1/requirements.txt | 38 - .../test_projects/flaskbb_lite_1/setup.py | 123 - .../flaskbb_lite_1/test_requirements.txt | 5 - .../flaskbb_lite_1/tests/__init__.py | 0 .../flaskbb_lite_1/tests/conftest.py | 3 - .../tests/endtoend/.test_auth_views.py.swp | Bin 12288 -> 0 bytes .../tests/endtoend/test_auth_views.py | 32 - .../flaskbb_lite_1/tests/fixtures/__init__.py | 0 .../flaskbb_lite_1/tests/fixtures/app.py | 42 - .../flaskbb_lite_1/tests/fixtures/forum.py | 94 - .../flaskbb_lite_1/tests/fixtures/user.py | 62 - .../flaskbb_lite_1/tests/unit/__init__.py | 0 .../tests/unit/test_forum_models.py | 570 ---- .../tests/unit/test_requirements.py | 83 - .../tests/unit/utils/__init__.py | 0 .../tests/unit/utils/test_fields.py | 21 - .../tests/unit/utils/test_helpers.py | 165 -- .../tests/unit/utils/test_markup.py | 28 - .../tests/unit/utils/test_populate.py | 94 - .../tests/unit/utils/test_settings.py | 15 - .../tests/unit/utils/test_translations.py | 48 - .../tests/unit/utils/test_widgets.py | 37 - .../test_projects/flaskbb_lite_1/wsgi.py | 4 - .../flaskbb_lite_2/.landscape.yml | 27 - .../test_projects/flaskbb_lite_2/.travis.yml | 15 - .../test_projects/flaskbb_lite_2/.tx/config | 8 - .../test_projects/flaskbb_lite_2/AUTHORS | 14 - .../test_projects/flaskbb_lite_2/CHANGES | 7 - .../test_projects/flaskbb_lite_2/LICENSE | 33 - .../test_projects/flaskbb_lite_2/Makefile | 26 - .../test_projects/flaskbb_lite_2/README.md | 58 - .../test_projects/flaskbb_lite_2/babel.cfg | 4 - .../flaskbb_lite_2/docs/.gitignore | 1 - .../flaskbb_lite_2/docs/Makefile | 177 -- .../flaskbb_lite_2/docs/_static/logo-full.png | Bin 10951 -> 0 bytes .../docs/_templates/sidebarintro.html | 12 - .../test_projects/flaskbb_lite_2/docs/conf.py | 272 -- .../flaskbb_lite_2/docs/contents.rst.inc | 14 - .../flaskbb_lite_2/docs/events.rst | 77 - .../flaskbb_lite_2/docs/index.rst | 16 - .../flaskbb_lite_2/docs/installation.rst | 329 --- .../flaskbb_lite_2/docs/make.bat | 242 -- .../flaskbb_lite_2/docs/models.rst | 79 - .../flaskbb_lite_2/docs/permissions.rst | 11 - .../docs/plugin_tutorial/index.rst | 17 - .../docs/plugin_tutorial/structure.rst | 4 - .../flaskbb_lite_2/docs/plugins.rst | 179 -- .../flaskbb_lite_2/docs/settings.rst | 59 - .../flaskbb_lite_2/docs/theming.rst | 4 - .../flaskbb_lite_2/flaskbb/__init__.py | 15 - .../flaskbb_lite_2/flaskbb/_compat.py | 29 - .../flaskbb_lite_2/flaskbb/app.py | 315 -- .../flaskbb_lite_2/flaskbb/auth/__init__.py | 1 - .../flaskbb_lite_2/flaskbb/auth/crazy.py | 8 - .../flaskbb_lite_2/flaskbb/auth/forms.py | 118 - .../flaskbb_lite_2/flaskbb/auth/hest/empty.py | 0 .../flaskbb_lite_2/flaskbb/auth/views.py | 165 -- .../flaskbb/configs/__init__.py | 0 .../flaskbb_lite_2/flaskbb/configs/default.py | 99 - .../flaskbb/configs/development.py.example | 61 - .../flaskbb/configs/production.py.example | 92 - .../flaskbb_lite_2/flaskbb/configs/testing.py | 64 - .../flaskbb_lite_2/flaskbb/email.py | 39 - .../flaskbb_lite_2/flaskbb/exceptions.py | 19 - .../flaskbb_lite_2/flaskbb/extensions.py | 61 - .../flaskbb/fixtures/__init__.py | 0 .../flaskbb_lite_2/flaskbb/fixtures/groups.py | 106 - .../flaskbb/fixtures/settings.py | 159 - .../flaskbb/plugins/__init__.py | 73 - .../flaskbb/plugins/portal/__init__.py | 64 - .../flaskbb/plugins/portal/info.json | 9 - .../plugins/portal/templates/index.html | 204 -- .../portal/templates/navigation_snippet.html | 5 - .../translations/de/LC_MESSAGES/messages.po | 24 - .../translations/en/LC_MESSAGES/messages.po | 25 - .../flaskbb/plugins/portal/views.py | 64 - .../flaskbb_lite_2/flaskbb/static/.gitkeep | 0 .../flaskbb/static/css/pygments.css | 64 - .../flaskbb/static/css/styles.css | 10 - .../flaskbb/static/emoji/.gitkeep | 1 - .../flaskbb/static/emoji/flaskbb.png | Bin 11014 -> 0 bytes .../flaskbb_lite_2/flaskbb/static/favicon.ico | Bin 1150 -> 0 bytes .../flaskbb/static/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../glyphicons-halflings-regular.svg | 288 -- .../glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../static/fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../static/fonts/fontawesome-webfont.svg | 655 ----- .../static/fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../static/fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../static/fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes .../flaskbb/static/img/avatar.svg | 4 - .../flaskbb/static/img/avatar100x100.png | Bin 866 -> 0 bytes .../flaskbb/static/img/avatar150x150.png | Bin 1286 -> 0 bytes .../flaskbb/static/img/avatar400x400.png | Bin 3776 -> 0 bytes .../flaskbb/static/img/avatar80x80.png | Bin 690 -> 0 bytes .../flaskbb/static/img/megalist-icons.png | Bin 3641 -> 0 bytes .../flaskbb/static/js/editor.js | 53 - .../flaskbb/static/js/editor.min.js | 3 - .../flaskbb_lite_2/flaskbb/static/js/emoji.js | 164 -- .../flaskbb/static/js/flaskbb.js | 138 - .../flaskbb/static/js/scripts.min.js | 4 - .../flaskbb_lite_2/flaskbb/static/robots.txt | 1 - .../templates/auth/forgot_password.html | 21 - .../flaskbb/templates/auth/login.html | 30 - .../flaskbb/templates/auth/reauth.html | 22 - .../flaskbb/templates/auth/register.html | 31 - .../templates/auth/reset_password.html | 18 - .../flaskbb/templates/editor_help.html | 60 - .../templates/email/reset_password.html | 5 - .../templates/email/reset_password.txt | 11 - .../templates/errors/forbidden_page.html | 16 - .../templates/errors/page_not_found.html | 16 - .../templates/errors/server_error.html | 15 - .../flaskbb/templates/flashed_messages.html | 18 - .../flaskbb/templates/forum/category.html | 16 - .../templates/forum/category_layout.html | 132 - .../flaskbb/templates/forum/edit_forum.html | 175 -- .../flaskbb/templates/forum/forum.html | 135 - .../flaskbb/templates/forum/index.html | 32 - .../flaskbb/templates/forum/memberlist.html | 65 - .../flaskbb/templates/forum/new_post.html | 50 - .../flaskbb/templates/forum/new_topic.html | 52 - .../flaskbb/templates/forum/online_users.html | 24 - .../flaskbb/templates/forum/report_post.html | 23 - .../flaskbb/templates/forum/search_form.html | 27 - .../templates/forum/search_result.html | 345 --- .../flaskbb/templates/forum/topic.html | 178 -- .../templates/forum/topic_controls.html | 102 - .../templates/forum/topic_horizontal.html | 187 -- .../flaskbb/templates/forum/topictracker.html | 124 - .../flaskbb/templates/layout.html | 183 -- .../flaskbb/templates/macros.html | 415 --- .../templates/management/banned_users.html | 125 - .../templates/management/category_form.html | 55 - .../templates/management/forum_form.html | 59 - .../flaskbb/templates/management/forums.html | 175 -- .../templates/management/group_form.html | 68 - .../flaskbb/templates/management/groups.html | 91 - .../management/management_layout.html | 28 - .../templates/management/overview.html | 130 - .../flaskbb/templates/management/plugins.html | 76 - .../flaskbb/templates/management/reports.html | 64 - .../templates/management/settings.html | 71 - .../templates/management/unread_reports.html | 96 - .../templates/management/user_form.html | 64 - .../flaskbb/templates/management/users.html | 162 - .../templates/message/conversation.html | 146 - .../templates/message/conversation_list.html | 93 - .../flaskbb/templates/message/drafts.html | 13 - .../flaskbb/templates/message/inbox.html | 12 - .../templates/message/message_form.html | 45 - .../templates/message/message_layout.html | 38 - .../flaskbb/templates/message/sent.html | 12 - .../flaskbb/templates/message/trash.html | 13 - .../flaskbb/templates/navigation.html | 73 - .../flaskbb/templates/user/all_posts.html | 80 - .../flaskbb/templates/user/all_topics.html | 82 - .../flaskbb/templates/user/change_email.html | 19 - .../templates/user/change_password.html | 19 - .../templates/user/change_user_details.html | 31 - .../templates/user/general_settings.html | 18 - .../flaskbb/templates/user/profile.html | 90 - .../templates/user/profile_layout.html | 103 - .../templates/user/settings_layout.html | 28 - .../flaskbb/themes/aurora/Gulpfile.js | 147 - .../flaskbb/themes/aurora/README.md | 112 - .../flaskbb/themes/aurora/bower.json | 31 - .../flaskbb/themes/aurora/info.json | 9 - .../flaskbb/themes/aurora/package.json | 22 - .../flaskbb/themes/aurora/src/_aurora.scss | 16 - .../aurora/src/_bootstrap-variables.scss | 842 ------ .../flaskbb/themes/aurora/src/_button.scss | 49 - .../flaskbb/themes/aurora/src/_category.scss | 62 - .../flaskbb/themes/aurora/src/_editor.scss | 53 - .../flaskbb/themes/aurora/src/_fixes.scss | 67 - .../flaskbb/themes/aurora/src/_forum.scss | 64 - .../themes/aurora/src/_management.scss | 206 -- .../flaskbb/themes/aurora/src/_misc.scss | 132 - .../flaskbb/themes/aurora/src/_mixins.scss | 1 - .../themes/aurora/src/_navigation.scss | 125 - .../flaskbb/themes/aurora/src/_panel.scss | 48 - .../flaskbb/themes/aurora/src/_profile.scss | 214 -- .../flaskbb/themes/aurora/src/_topic.scss | 159 - .../flaskbb/themes/aurora/src/_variables.scss | 51 - .../flaskbb/themes/aurora/src/styles.scss | 11 - .../flaskbb/themes/aurora/static | 1 - .../translations/de/LC_MESSAGES/messages.po | 1627 ----------- .../translations/en/LC_MESSAGES/messages.po | 1875 ------------ .../translations/es/LC_MESSAGES/messages.po | 1627 ----------- .../pt_BR/LC_MESSAGES/messages.po | 1627 ----------- .../translations/ru/LC_MESSAGES/messages.po | 1751 ----------- .../zh_CN/LC_MESSAGES/messages.po | 1608 ---------- .../zh_TW/LC_MESSAGES/messages.po | 1615 ---------- .../flaskbb_lite_2/flaskbb/user/__init__.py | 0 .../flaskbb_lite_2/flaskbb/user/forms.py | 116 - .../flaskbb_lite_2/flaskbb/user/models.py | 509 ---- .../flaskbb_lite_2/flaskbb/user/views.py | 109 - .../flaskbb_lite_2/logs/.gitkeep | 0 .../test_projects/flaskbb_lite_2/manage.py | 317 -- .../flaskbb_lite_2/migrations/README | 1 - .../flaskbb_lite_2/migrations/alembic.ini | 45 - .../flaskbb_lite_2/migrations/env.py | 73 - .../flaskbb_lite_2/migrations/script.py.mako | 22 - ...127be3fb000_added_m2m_forumgroups_table.py | 31 - .../versions/514ca0a3282c_private_messages.py | 70 - .../migrations/versions/8ad96e49dc6_init.py | 225 -- .../test_projects/flaskbb_lite_2/mprof.py | 512 ---- .../test_projects/flaskbb_lite_2/pytest.ini | 3 - .../flaskbb_lite_2/requirements.txt | 38 - .../test_projects/flaskbb_lite_2/setup.py | 123 - .../flaskbb_lite_2/test_requirements.txt | 5 - .../flaskbb_lite_2/tests/__init__.py | 0 .../flaskbb_lite_2/tests/conftest.py | 3 - .../tests/endtoend/.test_auth_views.py.swp | Bin 12288 -> 0 bytes .../tests/endtoend/test_auth_views.py | 32 - .../flaskbb_lite_2/tests/fixtures/__init__.py | 0 .../flaskbb_lite_2/tests/fixtures/app.py | 42 - .../flaskbb_lite_2/tests/fixtures/forum.py | 94 - .../flaskbb_lite_2/tests/fixtures/user.py | 62 - .../flaskbb_lite_2/tests/unit/__init__.py | 0 .../tests/unit/test_forum_models.py | 570 ---- .../tests/unit/test_requirements.py | 83 - .../tests/unit/utils/__init__.py | 0 .../tests/unit/utils/test_fields.py | 21 - .../tests/unit/utils/test_helpers.py | 165 -- .../tests/unit/utils/test_markup.py | 28 - .../tests/unit/utils/test_populate.py | 94 - .../tests/unit/utils/test_settings.py | 15 - .../tests/unit/utils/test_translations.py | 48 - .../tests/unit/utils/test_widgets.py | 37 - .../test_projects/flaskbb_lite_2/wsgi.py | 4 - .../flaskbb_lite_3/.landscape.yml | 27 - .../test_projects/flaskbb_lite_3/.travis.yml | 15 - .../test_projects/flaskbb_lite_3/.tx/config | 8 - .../test_projects/flaskbb_lite_3/AUTHORS | 14 - .../test_projects/flaskbb_lite_3/CHANGES | 7 - .../test_projects/flaskbb_lite_3/LICENSE | 33 - .../test_projects/flaskbb_lite_3/Makefile | 26 - .../test_projects/flaskbb_lite_3/README.md | 58 - .../test_projects/flaskbb_lite_3/babel.cfg | 4 - .../flaskbb_lite_3/docs/.gitignore | 1 - .../flaskbb_lite_3/docs/Makefile | 177 -- .../flaskbb_lite_3/docs/_static/logo-full.png | Bin 10951 -> 0 bytes .../docs/_templates/sidebarintro.html | 12 - .../test_projects/flaskbb_lite_3/docs/conf.py | 272 -- .../flaskbb_lite_3/docs/contents.rst.inc | 14 - .../flaskbb_lite_3/docs/events.rst | 77 - .../flaskbb_lite_3/docs/index.rst | 16 - .../flaskbb_lite_3/docs/installation.rst | 329 --- .../flaskbb_lite_3/docs/make.bat | 242 -- .../flaskbb_lite_3/docs/models.rst | 79 - .../flaskbb_lite_3/docs/permissions.rst | 11 - .../docs/plugin_tutorial/index.rst | 17 - .../docs/plugin_tutorial/structure.rst | 4 - .../flaskbb_lite_3/docs/plugins.rst | 179 -- .../flaskbb_lite_3/docs/settings.rst | 59 - .../flaskbb_lite_3/docs/theming.rst | 4 - .../flaskbb_lite_3/flaskbb/__init__.py | 15 - .../flaskbb_lite_3/flaskbb/_compat.py | 29 - .../flaskbb_lite_3/flaskbb/app.py | 315 -- .../flaskbb_lite_3/flaskbb/auth/__init__.py | 1 - .../flaskbb_lite_3/flaskbb/auth/crazy.py | 8 - .../flaskbb_lite_3/flaskbb/auth/forms.py | 118 - .../flaskbb_lite_3/flaskbb/auth/hest/empty.py | 0 .../flaskbb_lite_3/flaskbb/auth/views.py | 165 -- .../flaskbb/configs/__init__.py | 0 .../flaskbb_lite_3/flaskbb/configs/default.py | 99 - .../flaskbb/configs/development.py.example | 61 - .../flaskbb/configs/production.py.example | 92 - .../flaskbb_lite_3/flaskbb/configs/testing.py | 64 - .../flaskbb_lite_3/flaskbb/email.py | 39 - .../flaskbb_lite_3/flaskbb/exceptions.py | 19 - .../flaskbb_lite_3/flaskbb/extensions.py | 61 - .../flaskbb/fixtures/__init__.py | 0 .../flaskbb_lite_3/flaskbb/fixtures/groups.py | 106 - .../flaskbb/fixtures/settings.py | 159 - .../flaskbb/plugins/__init__.py | 73 - .../flaskbb/plugins/portal/__init__.py | 64 - .../flaskbb/plugins/portal/info.json | 9 - .../plugins/portal/templates/index.html | 204 -- .../portal/templates/navigation_snippet.html | 5 - .../translations/de/LC_MESSAGES/messages.po | 24 - .../translations/en/LC_MESSAGES/messages.po | 25 - .../flaskbb/plugins/portal/views.py | 64 - .../flaskbb_lite_3/flaskbb/static/.gitkeep | 0 .../flaskbb/static/css/pygments.css | 64 - .../flaskbb/static/css/styles.css | 10 - .../flaskbb/static/emoji/.gitkeep | 1 - .../flaskbb/static/emoji/flaskbb.png | Bin 11014 -> 0 bytes .../flaskbb_lite_3/flaskbb/static/favicon.ico | Bin 1150 -> 0 bytes .../flaskbb/static/fonts/FontAwesome.otf | Bin 109688 -> 0 bytes .../glyphicons-halflings-regular.eot | Bin 20127 -> 0 bytes .../glyphicons-halflings-regular.svg | 288 -- .../glyphicons-halflings-regular.ttf | Bin 45404 -> 0 bytes .../glyphicons-halflings-regular.woff | Bin 23424 -> 0 bytes .../glyphicons-halflings-regular.woff2 | Bin 18028 -> 0 bytes .../static/fonts/fontawesome-webfont.eot | Bin 70807 -> 0 bytes .../static/fonts/fontawesome-webfont.svg | 655 ----- .../static/fonts/fontawesome-webfont.ttf | Bin 142072 -> 0 bytes .../static/fonts/fontawesome-webfont.woff | Bin 83588 -> 0 bytes .../static/fonts/fontawesome-webfont.woff2 | Bin 66624 -> 0 bytes .../flaskbb/static/img/avatar.svg | 4 - .../flaskbb/static/img/avatar100x100.png | Bin 866 -> 0 bytes .../flaskbb/static/img/avatar150x150.png | Bin 1286 -> 0 bytes .../flaskbb/static/img/avatar400x400.png | Bin 3776 -> 0 bytes .../flaskbb/static/img/avatar80x80.png | Bin 690 -> 0 bytes .../flaskbb/static/img/megalist-icons.png | Bin 3641 -> 0 bytes .../flaskbb/static/js/editor.js | 53 - .../flaskbb/static/js/editor.min.js | 3 - .../flaskbb_lite_3/flaskbb/static/js/emoji.js | 164 -- .../flaskbb/static/js/flaskbb.js | 138 - .../flaskbb/static/js/scripts.min.js | 4 - .../flaskbb_lite_3/flaskbb/static/robots.txt | 1 - .../templates/auth/forgot_password.html | 21 - .../flaskbb/templates/auth/login.html | 30 - .../flaskbb/templates/auth/reauth.html | 22 - .../flaskbb/templates/auth/register.html | 31 - .../templates/auth/reset_password.html | 18 - .../flaskbb/templates/editor_help.html | 60 - .../templates/email/reset_password.html | 5 - .../templates/email/reset_password.txt | 11 - .../templates/errors/forbidden_page.html | 16 - .../templates/errors/page_not_found.html | 16 - .../templates/errors/server_error.html | 15 - .../flaskbb/templates/flashed_messages.html | 18 - .../flaskbb/templates/forum/category.html | 16 - .../templates/forum/category_layout.html | 132 - .../flaskbb/templates/forum/edit_forum.html | 175 -- .../flaskbb/templates/forum/forum.html | 135 - .../flaskbb/templates/forum/index.html | 32 - .../flaskbb/templates/forum/memberlist.html | 65 - .../flaskbb/templates/forum/new_post.html | 50 - .../flaskbb/templates/forum/new_topic.html | 52 - .../flaskbb/templates/forum/online_users.html | 24 - .../flaskbb/templates/forum/report_post.html | 23 - .../flaskbb/templates/forum/search_form.html | 27 - .../templates/forum/search_result.html | 345 --- .../flaskbb/templates/forum/topic.html | 178 -- .../templates/forum/topic_controls.html | 102 - .../templates/forum/topic_horizontal.html | 187 -- .../flaskbb/templates/forum/topictracker.html | 124 - .../flaskbb/templates/layout.html | 183 -- .../flaskbb/templates/macros.html | 415 --- .../templates/management/banned_users.html | 125 - .../templates/management/category_form.html | 55 - .../templates/management/forum_form.html | 59 - .../flaskbb/templates/management/forums.html | 175 -- .../templates/management/group_form.html | 68 - .../flaskbb/templates/management/groups.html | 91 - .../management/management_layout.html | 28 - .../templates/management/overview.html | 130 - .../flaskbb/templates/management/plugins.html | 76 - .../flaskbb/templates/management/reports.html | 64 - .../templates/management/settings.html | 71 - .../templates/management/unread_reports.html | 96 - .../templates/management/user_form.html | 64 - .../flaskbb/templates/management/users.html | 162 - .../templates/message/conversation.html | 146 - .../templates/message/conversation_list.html | 93 - .../flaskbb/templates/message/drafts.html | 13 - .../flaskbb/templates/message/inbox.html | 12 - .../templates/message/message_form.html | 45 - .../templates/message/message_layout.html | 38 - .../flaskbb/templates/message/sent.html | 12 - .../flaskbb/templates/message/trash.html | 13 - .../flaskbb/templates/navigation.html | 73 - .../flaskbb/templates/user/all_posts.html | 80 - .../flaskbb/templates/user/all_topics.html | 82 - .../flaskbb/templates/user/change_email.html | 19 - .../templates/user/change_password.html | 19 - .../templates/user/change_user_details.html | 31 - .../templates/user/general_settings.html | 18 - .../flaskbb/templates/user/profile.html | 90 - .../templates/user/profile_layout.html | 103 - .../templates/user/settings_layout.html | 28 - .../flaskbb/themes/aurora/Gulpfile.js | 147 - .../flaskbb/themes/aurora/README.md | 112 - .../flaskbb/themes/aurora/bower.json | 31 - .../flaskbb/themes/aurora/info.json | 9 - .../flaskbb/themes/aurora/package.json | 22 - .../flaskbb/themes/aurora/src/_aurora.scss | 16 - .../aurora/src/_bootstrap-variables.scss | 842 ------ .../flaskbb/themes/aurora/src/_button.scss | 49 - .../flaskbb/themes/aurora/src/_category.scss | 62 - .../flaskbb/themes/aurora/src/_editor.scss | 53 - .../flaskbb/themes/aurora/src/_fixes.scss | 67 - .../flaskbb/themes/aurora/src/_forum.scss | 64 - .../themes/aurora/src/_management.scss | 206 -- .../flaskbb/themes/aurora/src/_misc.scss | 132 - .../flaskbb/themes/aurora/src/_mixins.scss | 1 - .../themes/aurora/src/_navigation.scss | 125 - .../flaskbb/themes/aurora/src/_panel.scss | 48 - .../flaskbb/themes/aurora/src/_profile.scss | 214 -- .../flaskbb/themes/aurora/src/_topic.scss | 159 - .../flaskbb/themes/aurora/src/_variables.scss | 51 - .../flaskbb/themes/aurora/src/styles.scss | 11 - .../flaskbb/themes/aurora/static | 1 - .../translations/de/LC_MESSAGES/messages.po | 1627 ----------- .../translations/en/LC_MESSAGES/messages.po | 1875 ------------ .../translations/es/LC_MESSAGES/messages.po | 1627 ----------- .../pt_BR/LC_MESSAGES/messages.po | 1627 ----------- .../translations/ru/LC_MESSAGES/messages.po | 1751 ----------- .../zh_CN/LC_MESSAGES/messages.po | 1608 ---------- .../zh_TW/LC_MESSAGES/messages.po | 1615 ---------- .../flaskbb_lite_3/flaskbb/utils/__init__.py | 0 .../flaskbb_lite_3/flaskbb/utils/database.py | 28 - .../flaskbb/utils/datastructures.py | 16 - .../flaskbb_lite_3/flaskbb/utils/fields.py | 34 - .../flaskbb_lite_3/flaskbb/utils/helpers.py | 505 ---- .../flaskbb_lite_3/flaskbb/utils/markup.py | 90 - .../flaskbb_lite_3/flaskbb/utils/populate.py | 322 -- .../flaskbb/utils/requirements.py | 341 --- .../flaskbb_lite_3/flaskbb/utils/settings.py | 41 - .../flaskbb/utils/translations.py | 64 - .../flaskbb_lite_3/flaskbb/utils/views.py | 12 - .../flaskbb_lite_3/flaskbb/utils/widgets.py | 125 - .../flaskbb_lite_3/logs/.gitkeep | 0 .../test_projects/flaskbb_lite_3/manage.py | 317 -- .../flaskbb_lite_3/migrations/README | 1 - .../flaskbb_lite_3/migrations/alembic.ini | 45 - .../flaskbb_lite_3/migrations/env.py | 73 - .../flaskbb_lite_3/migrations/script.py.mako | 22 - ...127be3fb000_added_m2m_forumgroups_table.py | 31 - .../versions/514ca0a3282c_private_messages.py | 70 - .../migrations/versions/8ad96e49dc6_init.py | 225 -- .../test_projects/flaskbb_lite_3/mprof.py | 512 ---- .../test_projects/flaskbb_lite_3/pytest.ini | 3 - .../flaskbb_lite_3/requirements.txt | 38 - .../test_projects/flaskbb_lite_3/setup.py | 123 - .../flaskbb_lite_3/test_requirements.txt | 5 - .../flaskbb_lite_3/tests/__init__.py | 0 .../flaskbb_lite_3/tests/conftest.py | 3 - .../tests/endtoend/.test_auth_views.py.swp | Bin 12288 -> 0 bytes .../tests/endtoend/test_auth_views.py | 32 - .../flaskbb_lite_3/tests/fixtures/__init__.py | 0 .../flaskbb_lite_3/tests/fixtures/app.py | 42 - .../flaskbb_lite_3/tests/fixtures/forum.py | 94 - .../flaskbb_lite_3/tests/fixtures/user.py | 62 - .../flaskbb_lite_3/tests/unit/__init__.py | 0 .../tests/unit/test_forum_models.py | 570 ---- .../tests/unit/test_requirements.py | 83 - .../tests/unit/utils/__init__.py | 0 .../tests/unit/utils/test_fields.py | 21 - .../tests/unit/utils/test_helpers.py | 165 -- .../tests/unit/utils/test_markup.py | 28 - .../tests/unit/utils/test_populate.py | 94 - .../tests/unit/utils/test_settings.py | 15 - .../tests/unit/utils/test_translations.py | 48 - .../tests/unit/utils/test_widgets.py | 37 - .../test_projects/flaskbb_lite_3/wsgi.py | 4 - pydocstyle.py | 28 - readme_static_files/pyt_example.png | Bin 48706 -> 0 bytes 649 files changed, 85615 deletions(-) delete mode 100644 MANIFEST.in delete mode 100644 analyse_scan_results.py delete mode 100644 django_open_source_apps.csv delete mode 100644 flask_open_source_apps.csv delete mode 100644 func_counter.py delete mode 100644 make_dependency_graph.sh delete mode 100644 profiling/db.txt delete mode 100644 profiling/fine_timer.py delete mode 100644 profiling/profiler.py delete mode 100644 profiling/profiling_runner.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/.landscape.yml delete mode 100644 profiling/test_projects/flaskbb_lite_1/.travis.yml delete mode 100644 profiling/test_projects/flaskbb_lite_1/.tx/config delete mode 100644 profiling/test_projects/flaskbb_lite_1/AUTHORS delete mode 100644 profiling/test_projects/flaskbb_lite_1/CHANGES delete mode 100644 profiling/test_projects/flaskbb_lite_1/LICENSE delete mode 100644 profiling/test_projects/flaskbb_lite_1/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_1/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_1/babel.cfg delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/.gitignore delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/_static/logo-full.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/_templates/sidebarintro.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/conf.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/contents.rst.inc delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/events.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/installation.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/make.bat delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/models.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/permissions.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/structure.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/plugins.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/settings.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/docs/theming.rst delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/_compat.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/auth/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/auth/crazy.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/auth/forms.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/auth/hest/empty.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/auth/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/configs/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/configs/default.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/configs/development.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/configs/production.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/configs/testing.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/email.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/exceptions.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/extensions.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/groups.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/navigation_snippet.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/pygments.css delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/styles.css delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/flaskbb.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/favicon.ico delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/FontAwesome.otf delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.eot delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.svg delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.eot delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.svg delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.woff delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar.svg delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar100x100.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar150x150.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar400x400.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar80x80.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/megalist-icons.png delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/emoji.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/flaskbb.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/scripts.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/static/robots.txt delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/auth/forgot_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/auth/login.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/auth/reauth.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/auth/register.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/auth/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/editor_help.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/email/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/email/reset_password.txt delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/errors/forbidden_page.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/errors/page_not_found.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/errors/server_error.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/flashed_messages.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/category.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/category_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/edit_forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/memberlist.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/new_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/new_topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/online_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/report_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_result.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_controls.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_horizontal.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topictracker.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/macros.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/banned_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/category_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forum_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forums.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/group_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/groups.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/management_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/overview.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/plugins.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/unread_reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/user_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/users.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation_list.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/drafts.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/inbox.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/sent.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/trash.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/navigation.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_posts.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_topics.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_email.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_user_details.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/general_settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/settings_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/Gulpfile.js delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/bower.json delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/package.json delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_aurora.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_bootstrap-variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_button.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_category.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_editor.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_fixes.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_forum.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_management.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_misc.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_mixins.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_navigation.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_panel.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_profile.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_topic.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/styles.scss delete mode 120000 profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/static delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/es/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/ru/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_1/logs/.gitkeep delete mode 100755 profiling/test_projects/flaskbb_lite_1/manage.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/README delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/alembic.ini delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/env.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/script.py.mako delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/versions/514ca0a3282c_private_messages.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/migrations/versions/8ad96e49dc6_init.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/mprof.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/pytest.ini delete mode 100644 profiling/test_projects/flaskbb_lite_1/requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_1/setup.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/test_requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/conftest.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/endtoend/.test_auth_views.py.swp delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/endtoend/test_auth_views.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/fixtures/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/fixtures/forum.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/fixtures/user.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/test_forum_models.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/test_requirements.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_fields.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_helpers.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_markup.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_populate.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_translations.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_widgets.py delete mode 100644 profiling/test_projects/flaskbb_lite_1/wsgi.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/.landscape.yml delete mode 100644 profiling/test_projects/flaskbb_lite_2/.travis.yml delete mode 100644 profiling/test_projects/flaskbb_lite_2/.tx/config delete mode 100644 profiling/test_projects/flaskbb_lite_2/AUTHORS delete mode 100644 profiling/test_projects/flaskbb_lite_2/CHANGES delete mode 100644 profiling/test_projects/flaskbb_lite_2/LICENSE delete mode 100644 profiling/test_projects/flaskbb_lite_2/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_2/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_2/babel.cfg delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/.gitignore delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/_static/logo-full.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/_templates/sidebarintro.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/conf.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/contents.rst.inc delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/events.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/installation.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/make.bat delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/models.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/permissions.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/structure.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/plugins.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/settings.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/docs/theming.rst delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/_compat.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/auth/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/auth/crazy.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/auth/forms.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/auth/hest/empty.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/auth/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/configs/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/configs/default.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/configs/development.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/configs/production.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/configs/testing.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/email.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/exceptions.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/extensions.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/groups.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/navigation_snippet.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/pygments.css delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/styles.css delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/flaskbb.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/favicon.ico delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/FontAwesome.otf delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.eot delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.svg delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.eot delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.svg delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.woff delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar.svg delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar100x100.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar150x150.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar400x400.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar80x80.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/megalist-icons.png delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/emoji.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/flaskbb.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/scripts.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/static/robots.txt delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/auth/forgot_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/auth/login.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/auth/reauth.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/auth/register.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/auth/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/editor_help.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/email/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/email/reset_password.txt delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/errors/forbidden_page.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/errors/page_not_found.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/errors/server_error.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/flashed_messages.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/category.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/category_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/edit_forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/memberlist.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/new_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/new_topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/online_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/report_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_result.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_controls.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_horizontal.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topictracker.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/macros.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/banned_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/category_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forum_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forums.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/group_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/groups.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/management_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/overview.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/plugins.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/unread_reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/user_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/users.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation_list.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/drafts.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/inbox.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/sent.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/trash.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/navigation.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_posts.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_topics.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_email.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_user_details.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/general_settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/settings_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/Gulpfile.js delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/bower.json delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/package.json delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_aurora.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_bootstrap-variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_button.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_category.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_editor.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_fixes.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_forum.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_management.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_misc.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_mixins.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_navigation.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_panel.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_profile.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_topic.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/styles.scss delete mode 120000 profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/static delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/es/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/ru/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/user/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/user/forms.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/user/models.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/flaskbb/user/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/logs/.gitkeep delete mode 100755 profiling/test_projects/flaskbb_lite_2/manage.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/README delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/alembic.ini delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/env.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/script.py.mako delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/versions/514ca0a3282c_private_messages.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/migrations/versions/8ad96e49dc6_init.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/mprof.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/pytest.ini delete mode 100644 profiling/test_projects/flaskbb_lite_2/requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_2/setup.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/test_requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/conftest.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/endtoend/.test_auth_views.py.swp delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/endtoend/test_auth_views.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/fixtures/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/fixtures/forum.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/fixtures/user.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/test_forum_models.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/test_requirements.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_fields.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_helpers.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_markup.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_populate.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_translations.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_widgets.py delete mode 100644 profiling/test_projects/flaskbb_lite_2/wsgi.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/.landscape.yml delete mode 100644 profiling/test_projects/flaskbb_lite_3/.travis.yml delete mode 100644 profiling/test_projects/flaskbb_lite_3/.tx/config delete mode 100644 profiling/test_projects/flaskbb_lite_3/AUTHORS delete mode 100644 profiling/test_projects/flaskbb_lite_3/CHANGES delete mode 100644 profiling/test_projects/flaskbb_lite_3/LICENSE delete mode 100644 profiling/test_projects/flaskbb_lite_3/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_3/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_3/babel.cfg delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/.gitignore delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/Makefile delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/_static/logo-full.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/_templates/sidebarintro.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/conf.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/contents.rst.inc delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/events.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/installation.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/make.bat delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/models.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/permissions.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/index.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/structure.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/plugins.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/settings.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/docs/theming.rst delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/_compat.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/auth/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/auth/crazy.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/auth/forms.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/auth/hest/empty.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/auth/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/configs/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/configs/default.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/configs/development.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/configs/production.py.example delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/configs/testing.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/email.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/exceptions.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/extensions.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/groups.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/navigation_snippet.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/pygments.css delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/styles.css delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/.gitkeep delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/flaskbb.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/favicon.ico delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/FontAwesome.otf delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.eot delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.svg delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.eot delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.svg delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.ttf delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.woff delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.woff2 delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar.svg delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar100x100.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar150x150.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar400x400.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar80x80.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/megalist-icons.png delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/emoji.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/flaskbb.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/scripts.min.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/static/robots.txt delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/auth/forgot_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/auth/login.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/auth/reauth.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/auth/register.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/auth/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/editor_help.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/email/reset_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/email/reset_password.txt delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/errors/forbidden_page.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/errors/page_not_found.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/errors/server_error.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/flashed_messages.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/category.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/category_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/edit_forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/forum.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/index.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/memberlist.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/new_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/new_topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/online_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/report_post.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_result.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_controls.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_horizontal.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topictracker.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/macros.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/banned_users.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/category_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forum_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forums.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/group_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/groups.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/management_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/overview.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/plugins.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/unread_reports.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/user_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/users.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation_list.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/drafts.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/inbox.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_form.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/sent.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/trash.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/navigation.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_posts.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_topics.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_email.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_password.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_user_details.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/general_settings.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/settings_layout.html delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/Gulpfile.js delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/README.md delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/bower.json delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/info.json delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/package.json delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_aurora.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_bootstrap-variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_button.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_category.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_editor.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_fixes.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_forum.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_management.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_misc.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_mixins.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_navigation.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_panel.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_profile.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_topic.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_variables.scss delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/styles.scss delete mode 120000 profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/static delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/de/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/en/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/es/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/ru/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/database.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/datastructures.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/fields.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/helpers.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/markup.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/populate.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/requirements.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/translations.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/views.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/flaskbb/utils/widgets.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/logs/.gitkeep delete mode 100755 profiling/test_projects/flaskbb_lite_3/manage.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/README delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/alembic.ini delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/env.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/script.py.mako delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/versions/514ca0a3282c_private_messages.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/migrations/versions/8ad96e49dc6_init.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/mprof.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/pytest.ini delete mode 100644 profiling/test_projects/flaskbb_lite_3/requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_3/setup.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/test_requirements.txt delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/conftest.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/endtoend/.test_auth_views.py.swp delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/endtoend/test_auth_views.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/fixtures/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/fixtures/app.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/fixtures/forum.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/fixtures/user.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/test_forum_models.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/test_requirements.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/__init__.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_fields.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_helpers.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_markup.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_populate.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_settings.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_translations.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_widgets.py delete mode 100644 profiling/test_projects/flaskbb_lite_3/wsgi.py delete mode 100644 pydocstyle.py delete mode 100644 readme_static_files/pyt_example.png diff --git a/MANIFEST.in b/MANIFEST.in deleted file mode 100644 index a54c65d3..00000000 --- a/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include pyt/trigger_definitions/* \ No newline at end of file diff --git a/analyse_scan_results.py b/analyse_scan_results.py deleted file mode 100644 index a000fe20..00000000 --- a/analyse_scan_results.py +++ /dev/null @@ -1,68 +0,0 @@ -class Repo: - def __init__(self, url=None, vulnerabilities=None): - self.url = url - self.vulnerabilities = vulnerabilities - - -class Vulnerability: - def __init__(self): - self.filename = None - self.source = None - self.sink = None - self.source_line = None - self.sink_source = None - - -def parse_vulnerabilities(file_descriptor): - vulnerabilities = list() - vulnerability = Vulnerability() - for line in file_descriptor: - next_line = next(file_descriptor) - if line.strip() == '' and 'Vulnerability:' not in next_line: - return vulnerabilities - elif line.strip() == '': - vulnerabilities.append(vulnerability) - vulnerability = Vulnerability() - else: - if 'File:' in line: - vulnerability.filename = line.split(':')[1].strip() - elif ' > User input at line' in line: - vulnerability.source = line.split('"')[-2] - vulnerability.source_line = next_line - elif ' > reaches line' in line: - vulnerability.source = line.split('"')[-2] - vulnerability.source_line = next_line - - -def get_repos(filename): - repos = list() - repo = Repo() - previous_line = None - with open(filename, 'r') as fd: - for line in fd: - next_line = next(fd) - if not line.strip() == '' or 'Vulnera' in next_line: - if 'https://' in line: - repo.url = line.strip() - elif 'Vulnera' in next_line: - repo.vulnerabilities = parse_vulnerabilities(fd) - elif next_line.strip() == '': - continue - else: - repos.append(repo) - repo = Repo() - previous_line = line - return repos - - -def get_urls(filename): - with open(filename, 'r') as fd: - return sorted({line for line in fd if 'https' in line}) - - -if __name__ == '__main__': - filename = 'scan_results/archived_26_10_scan.pyt' - filename = 'scan_results/test.pyt' - repos = get_repos(filename) - print([b.url for b in repos]) - print(len(repos)) diff --git a/django_open_source_apps.csv b/django_open_source_apps.csv deleted file mode 100644 index f3d2250f..00000000 --- a/django_open_source_apps.csv +++ /dev/null @@ -1 +0,0 @@ -https://github.com/vitorfs/bootcamp.git, bootcamp/urls.py \ No newline at end of file diff --git a/flask_open_source_apps.csv b/flask_open_source_apps.csv deleted file mode 100644 index c87dd329..00000000 --- a/flask_open_source_apps.csv +++ /dev/null @@ -1,853 +0,0 @@ -https://github.com/mattmakai/choose-your-own-adventure-presentations.git, /cyoa/views.py -https://github.com/miguelgrinberg/microblog.git, app/views.py -https://github.com/mjhea0/flaskr-tdd.git, app.py -https://gist.github.com/coleifer/632d3c9aa6b2ea519384, views.py -https://github.com/BouncyNudibranch/bean-counter.git, app/views.py -https://github.com/sh4nks/flaskbb.git, flaskbb/app.py -https://github.com/Jahaja/psdash.git, web.py -https://github.com/j4mie/brightonpy.org.git, brighton.py -https://github.com/sopython/sopython-site.git, sopy/canon/views.py -https://github.com/sharms/HomePage.git, homepage.py -https://github.com/dcolish/Cockerel.git, cockerel/webapp/frontend.py -https://github.com/rafaelmartins/blohg.git, blohg/views.py -https://github.com/docker/docker-registry.git, docker_registry/index.py -https://github.com/baijum/getpython3.git, py3k/main.py -https://github.com/peterhend/schools.git, schools.py -https://github.com/mitsuhiko/flask-pastebin.git, pastebin.py -https://github.com/Runscope/httpbin.git, httpbin/core.py -https://github.com/Thalmann/sync-engine, inbox/mailsync/frontend.py -https://github.com/mitsuhiko/bf3-aggregator.git, bf3.py -https://github.com/sfermigier/Planet-GTLL.git, ring/server.py -https://github.com/hasgeek/hasjob.git, hasjob/views/helper.py -https://github.com/reddit/reddit.git, scripts/tracker.py -https://github.com/lincolnloop/emailed-me.git, application.py -https://github.com/skylines-project/skylines.git, skylines/app.py -https://github.com/viniciusfs/pasted-flask, pasted-flask/pasted.py -https://github.com/Cornu/Brain, Brain/brain/__init__.py -https://github.com/fsouza/flask-rest-example, flask-rest-example/library.py -https://github.com/tokibito/flask-hgwebcommit, flask-hgwebcommit/hgwebcommit/__init__.py -https://github.com/viniciusfs/pasted-flask, pasted-flask/pasted.py -https://github.com/Cornu/Brain, Brain/brain/__init__.py -https://github.com/fsouza/flask-rest-example, flask-rest-example/library.py -https://github.com/tokibito/flask-hgwebcommit, flask-hgwebcommit/hgwebcommit/__init__.py -https://github.com/teohm/flitter, flitter/flitter/__init__.py -https://github.com/viniciusfs/pasted-flask, pasted-flask/pasted.py -https://github.com/Cornu/Brain, Brain/brain/__init__.py -https://github.com/fsouza/flask-rest-example, flask-rest-example/library.py -https://github.com/tokibito/flask-hgwebcommit, flask-hgwebcommit/hgwebcommit/__init__.py -https://github.com/teohm/flitter, flitter/flitter/__init__.py -https://github.com/crisisking/bsg-raffle, bsg-raffle/raffle.py -https://github.com/almet/semantic-bookclub, semantic-bookclub/app/web.py -https://github.com/tdryer/flask-forum, flask-forum/app.py -https://github.com/barnslig/foreveralonebook, foreveralonebook/foreveralonebook.py -https://github.com/coleifer/flask-peewee, flask-peewee/example/app.py -https://github.com/amehta/Flaskly, Flaskly/flaskly.py -https://github.com/RDFLib/rdflib-web, rdflib-web/rdflib_web/lod.py -https://github.com/maxcountryman/flask-login, flask-login/test_login.py -https://github.com/wooptoo/flask-seed, flask-seed/app.py -https://github.com/dtotheb/Flask-Control, Flask-Control/FlaskControl.py -https://github.com/gofetch/fetchweb, fetchweb/fetchweb/__init__.py -https://github.com/gofetch/fetchweb, fetchweb/fetchweb/__init__.py -https://github.com/svieira/Flask-HipPocket, Flask-HipPocket/flask_hippocket/pocket.py -https://github.com/mfa/weight-app, weight-app/weight/main.py -https://github.com/Senso/fiasco-flask, fiasco-flask/fiasco/__init__.py -https://github.com/encodes/flask-snippet, flask-snippet/app/__init__.py -https://github.com/ciaron/pandaflask_old, pandaflask_old/pandachrome.py -https://github.com/encodes/flask-snippet, flask-snippet/app/__init__.py -https://github.com/sijinjoseph/multunus-puzzle, multunus-puzzle/src/app.py -https://github.com/addumb/toyapp, toyapp/toy/__init__.py -https://github.com/fallingfree/flask-principal-simple-example, flask-principal-simple-example/auth.py -https://github.com/DartmouthHackerClub/flask_template, flask_template/app.py -https://github.com/Citizen01/Kozea-project1, Kozea-project1/index.py -https://github.com/ipedrazas/surl, surl/shortener.py -https://github.com/MalphasWats/pyDimension, pyDimension/pyDimension/__init__.py -https://github.com/jvoisin/pyste, pyste/flaskr.py -https://github.com/jualvarez/worktracker, worktracker/worktracker.py -https://github.com/pengfei-xue/openshift-flask-mongdb, openshift-flask-mongdb/blog/main.py -https://github.com/drawcode/flask-template-basic, flask-template-basic/app/__init__.py -https://github.com/JunilJacob/Paint-app-using-Flask, Paint-app-using-Flask/hello.py -https://github.com/DanielleSucher/BookQueue, BookQueue/app.py -https://github.com/bazerk/baz-flask-base, baz-flask-base/app/app.py -https://github.com/rehandalal/flask-mobility, flask-mobility/flask_mobility/tests/test_decorators.py -https://github.com/danillosouza/flask-boilerplate, flask-boilerplate/app/__init__.py -https://github.com/honestappalachia/honest_site, honest_site/run.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask, Paintapp-Javascript-Canvas-Flask/test.py -https://github.com/soniacs/cabinet, cabinet/app/__init__.py -https://github.com/Treeki/bitBoard, bitBoard/bitBoard/__init__.py -https://github.com/maxcountryman/flask-simpleoauth, flask-simpleoauth/flask_simpleoauth/app.py -https://github.com/codergirl/flaskbabar, flaskbabar/hello.py -https://github.com/fabin/Flask-Upload, Flask-Upload/upload/__init__.py -https://github.com/Joinhack/agent, agent/flask_sqlalchemy.py -https://github.com/liontree/lemonbook, lemonbook/__init__.py -https://github.com/lepture/flask-oauthlib, flask-oauthlib/flask_oauthlib/provider/oauth1.py -https://github.com/plastboks/Flaskmarks, Flaskmarks/flaskmarks/__init__.py -https://github.com/Joinhack/agent, agent/flask_sqlalchemy.py -https://github.com/ricardorego/FlaskTaskr, FlaskTaskr/flasktaskr.py -https://github.com/col42dev/todoAPIServer, todoAPIServer/todo.py -https://github.com/pnelson/flask-passport, flask-passport/flask_passport.py -https://github.com/turnkey-commerce/flask-notes, flask-notes/app.py -https://github.com/NathanKleekamp/social-login, social-login/app/__init__.py -https://github.com/duncanmurray/Python-Flask-Training, Python-Flask-Training/app1.py -https://github.com/viniciusfs/pasted-flask, pasted-flask/pasted.py -https://github.com/Cornu/Brain, Brain/brain/__init__.py -https://github.com/harmon25/flask_base, flask_base/base_flask/__init__.py -https://github.com/rainulf/flask-init, flask-init/app/__init__.py -https://github.com/Ottermad/Python-Flask-Odot, Python-Flask-Odot/app.py -https://github.com/myevan/creating-in-flask, creating-in-flask/official_tutorial/05_the_view_functions/flaskr/flaskr_the_view_functions_main.py -https://github.com/cwilkes/turbo-wookie, turbo-wookie/api/app.py -https://github.com/unite128/scorpius, scorpius/__init__.py -https://github.com/tsaltas/posts-api, posts-api/posts/__init__.py -https://github.com/bear/python-indieweb, python-indieweb/indieweb.py -https://github.com/wright8191/flask-echo-server, flask-echo-server/echo.py -https://github.com/nakulpathak3/flask-rest-api, flask-rest-api/app.py -https://github.com/amydshelton/API_tutorial, API_tutorial/app.py -https://github.com/gergob/flask_web, flask_web/app.py -https://github.com/bobcolner/material-girl, material-girl/app/__init__.py -https://github.com/greedo/flask-oauth2-devices, flask-oauth2-devices/myservice.py -https://github.com/mattgathu/flask-celery, flask-celery/flascelery/__init__.py -https://github.com/nsnitesh7/Rest-Api-Flask, Rest-Api-Flask/app.py -https://github.com/LiQing8839/flask-mysql-exemplo, flask-mysql-exemplo/app.py -https://github.com/ArunRamachandran/Student_App_using-Flask, Student_App_using-Flask/app/__init__.py -https://github.com/Flask-Framework-Cookbook/Chapter-6, Chapter-6/my_app/__init__.py -https://github.com/mattgathu/flask-celery, flask-celery/flascelery/__init__.py -https://github.com/ArunRamachandran/Student_App_using-Flask, Student_App_using-Flask/app/__init__.py -https://github.com/SPRIME01/Flask-Boilerplate, Flask-Boilerplate/Application/__init__.py -https://github.com/george-silva/speed-flask, speed-flask/src/flaskr/flaskr.py -https://github.com/Dit81/links-saver, links-saver/links_app.py -https://github.com/mbyta/socially, socially/app/__init__.py -https://github.com/patrickbeeson/has-it-ever-been, has-it-ever-been/tests.py -https://github.com/aachik/blog_flask_practica, blog_flask_practica/blog.py -https://github.com/moranned/flask_api_example, flask_api_example/app.py -https://github.com/goncharovms/flask_library, flask_library/app/__init__.py -https://github.com/moranned/flask_api_example, flask_api_example/app.py -https://github.com/goncharovms/flask_library, flask_library/app/__init__.py -https://github.com/johnwook/flask-restful-todo, flask-restful-todo/app.py -https://github.com/rmotr/example-flask-app, example-flask-app/rmotr/app.py -https://github.com/mbasanta/QR5Server, QR5Server/qr5server/__init__.py -https://github.com/donalcarpenter/lolcatfancier, lolcatfancier/app.py -https://github.com/jinpark/imageresizer, imageresizer/app.py -https://github.com/JoeAcanfora/CrowdSite, CrowdSite/flask_app.py -https://github.com/andrej2704/flaskplayground, flaskplayground/flaskAuth.py -https://github.com/decodigoyalgomas/Flask-Tutorial-RPG-Manager, Flask-Tutorial-RPG-Manager/app/__init__.py -https://github.com/syndbg/flask-url-shortener, flask-url-shortener/url_shortener/app.py -https://github.com/jpf/okta-pysaml2-example, okta-pysaml2-example/app.py -https://github.com/jjk425/FlaskFun, FlaskFun/app.py -https://github.com/decodigoyalgomas/Flask-Tutorial-RPG-Manager, Flask-Tutorial-RPG-Manager/app/__init__.py -https://github.com/johanneshhl/johanness-flask-boilerplate, johanness-flask-boilerplate/application/__init__.py -https://github.com/thatarchguy/FFA-CTF-Scoring-Engine-Flask, FFA-CTF-Scoring-Engine-Flask/ctfscore/__init__.py -https://github.com/firebender/thinkful-flask, thinkful-flask/blog/__init__.py -https://github.com/hipol/Discussion-Forum-Api, Discussion-Forum-Api/app/__init__.py -https://github.com/ichris56/login-form, login-form/index.py -https://github.com/oakie/oauth-flask-template, oauth-flask-template/auth.py -https://github.com/war-room-game/war_room-flask, war_room-flask/src/server.py -https://github.com/BurningPixel/FlaskLoginExample, FlaskLoginExample/app.py -https://github.com/jon-engelbert/flask-oauth-restaurant, flask-oauth-restaurant/pkg/__init__.py -https://github.com/kcart/FLASKHW, FLASKHW/directory.py -https://github.com/BurningPixel/FlaskLoginExample, FlaskLoginExample/app.py -https://github.com/jon-engelbert/flask-oauth-restaurant, flask-oauth-restaurant/pkg/__init__.py -https://github.com/00000111/flask_rma, flask_rma/app/__init__.py -https://github.com/michaelreid/flask-api-posts, flask-api-posts/posts/__init__.py -https://github.com/rubenwardy/minetest_web_panel, minetest_web_panel/web_panel/__init__.py -https://github.com/imidya/WebCalculator, WebCalculator/run.py -https://github.com/miguelgrinberg/flasky-with-celery, flasky-with-celery/app/__init__.py -https://github.com/russomi/flasky-appengine, flasky-appengine/app/__init__.py -https://github.com/dannguyen/flask-firerain, flask-firerain/app.py -https://github.com/Leo-G/Flask-Search, Flask-Search/app/__init__.py -https://github.com/infoliebich123/Web-Application-with-Flask, Web-Application-with-Flask/app/__init__.py -https://github.com/KolevDarko/flasky-extended, flasky-extended/app/__init__.py -https://github.com/varunrisbud/StarBucks, StarBucks/OrderQueue.py -https://github.com/miguelgrinberg/flasky-with-celery, flasky-with-celery/app/__init__.py -https://github.com/russomi/flasky-appengine, flasky-appengine/app/__init__.py -https://github.com/Leo-G/Flask-Search, Flask-Search/app/__init__.py -https://github.com/aantonw/notesapi, notesapi/notesapi.py -https://github.com/matteotiziano/secret-harbor, secret-harbor/app.py -https://github.com/jlybianto/flask_api_posts, flask_api_posts/posts/__init__.py -https://github.com/travelton/pork, pork/pork/pork.py -https://github.com/aantonw/notesapi, notesapi/notesapi.py -https://github.com/markmuetz/flask-1000earths, flask-1000earths/app.py -https://github.com/nicovogelaar/time-tracker-flask, time-tracker-flask/app/__init__.py -https://github.com/nmaltais/python_flask_project, python_flask_project/hello.py -https://github.com/ShermanMorrison/taskapp, taskapp/project/__init__.py -https://github.com/pkulev/mblog, mblog/mblog/__init__.py -https://github.com/VicarEscaped/xlsgen_service, xlsgen_service/app/__init__.py -https://github.com/prashannth/flask-cassandra, flask-cassandra/app/__init__.py -https://github.com/eon01/flask_restful_sample, flask_restful_sample/apirest.py -https://github.com/haydarmiftahul/flask-microblogging, flask-microblogging/app.py -https://github.com/Turbo87/flask-oauth2-test, flask-oauth2-test/server.py -https://github.com/pkulev/mblog, mblog/mblog/__init__.py -https://github.com/bidhan-a/flasknotes, flasknotes/api.py -https://github.com/BlaiseGratton/which_flask, which_flask/app.py -https://github.com/Yanze/restau_management_flask, restau_management_flask/restau_management_flask/__init__.py -https://github.com/bidhan-a/flasknotes, flasknotes/api.py -https://github.com/nausheenfatma/WebAppWithFlask, WebAppWithFlask/model.py -https://github.com/RicoChou/MyFlasky, MyFlasky/app/__init__.py -https://github.com/heamon7/learn-restful, learn-restful/app.py -https://github.com/brittanymcgarr/learningFlask, learningFlask/FlaskPractice/app/app.py -https://github.com/RodrigoVillatoro/flask_social_network, flask_social_network/app/__init__.py -https://github.com/nausheenfatma/WebAppWithFlask, WebAppWithFlask/model.py -https://github.com/sheldonsmickley/flaskemail_app, flaskemail_app/emails.py -https://github.com/shas15/Betting-Chips, Betting-Chips/test.py -https://github.com/aetherwu/Flask-Docker-Template, Flask-Docker-Template/flask/web/__init__.py -https://github.com/AngelMunoz/Flask-Blueprints-Template, Flask-Blueprints-Template/app/__init__.py -https://github.com/saviour123/flaskStudentData, flaskStudentData/app.py -https://github.com/AngelMunoz/Flask-Blueprints-Template, Flask-Blueprints-Template/app/__init__.py -https://github.com/tolmun/flask-ng-sample, flask-ng-sample/project/__init__.py -https://github.com/awind/FlaskRestful, FlaskRestful/app/__init__.py -https://github.com/IvanBodnar/fromzero_flask_blog, fromzero_flask_blog/__init__.py -https://github.com/AllyW/flaskyDeb, flaskyDeb/app/__init__.py -https://github.com/ubbochum/hb2_flask, hb2_flask/hb2_flask.py -https://github.com/billyfung/flask_shortener, flask_shortener/app.py -https://github.com/AllyW/flaskyDeb, flaskyDeb/app/__init__.py -https://github.com/billyfung/flask_shortener, flask_shortener/app.py -https://github.com/s-kovacevic/elearning-flask, elearning-flask/main.py -https://github.com/xpleaf/flask_catalog, flask_catalog/my_app/__init__.py -https://github.com/HYL13/flask_project_0, flask_project_0/app/__init__.py -https://github.com/kfiras/cloudfoundry-flask-webservice, cloudfoundry-flask-webservice/app.py -https://github.com/ssam123/flask-blog-tutorial, flask-blog-tutorial/__init__.py -https://github.com/kloudsec/py-webkit2png-flask-api, py-webkit2png-flask-api/api/app.py -https://github.com/s-kovacevic/elearning-flask, elearning-flask/main.py -https://github.com/rholmes69/flasky2_1, flasky2_1/app/__init__.py -https://github.com/jcerise/openspacesboard-python, openspacesboard-python/osbp_app/__init__.py -https://github.com/icecraft/ZhiHuDaemon, ZhiHuDaemon/app/__init__.py -https://github.com/NJIT-SIG-WEBDEV/Flask-URL-Shortner, Flask-URL-Shortner/app.py -https://github.com/danleyb2/flaskMe, flaskMe/flaskREST.py -https://github.com/honmaple/flask-word, flask-word/app/__init__.py -https://github.com/arvvvs/Flask-Practice-Metis-Delivery, Flask-Practice-Metis-Delivery/app.py -https://github.com/tanzhixu/Flask-oauth, Flask-oauth/app/__init__.py -https://github.com/mnzr/Flask-Blueprint-test, Flask-Blueprint-test/app/__init__.py -https://github.com/TheCypher/flask-boiler-plate, flask-boiler-plate/app/__init__.py -https://github.com/lkpanganiban/flask-rest-example, flask-rest-example/app.py -https://github.com/Christomas/i_dev_flask, i_dev_flask/app/__init__.py -https://github.com/gene1wood/flaskoktaapp, flaskoktaapp/flaskoktaapp/__init__.py -https://github.com/kosen10spajam/f-flask, f-flask/main.py -https://github.com/engfilipe/curso_flask, curso_flask/photolog/__init__.py -https://github.com/Mamun-dueee/flask, flask/setup.py -https://github.com/13923858795/Tutorial, Tutorial/my/app/__init__.py -https://github.com/feocco/flaskLab, flaskLab/app.py -https://github.com/novking/Flask_AWS, Flask_AWS/PlagiarismDefender/home.py -https://github.com/umutcoskun/flask-ready, flask-ready/src/app/__init__.py -https://github.com/natfoster82/flask-alcohol, flask-alcohol/example/app.py -https://github.com/Nonja/FlaskArticleSearchNYT, FlaskArticleSearchNYT/app/__init__.py -https://github.com/thomasobrien99/flask-movie-crud, flask-movie-crud/app.py -https://github.com/kmalfatti/library-flask-app, library-flask-app/app.py -https://github.com/aaossa/flask-openshift, flask-openshift/flask_openshift_template.py -https://github.com/Qqlick/flaskRP, flaskRP/flaskRP.py -https://github.com/coder-zhuyu/flask-framework, flask-framework/app/__init__.py -https://github.com/stephenjjones/flask-auth-service, flask-auth-service/app/__init__.py -https://github.com/Athsheep/Flask_Web_Development, Flask_Web_Development/app/__init__.py -https://github.com/learningpython08/flask-file-sharing, flask-file-sharing/upload/handlers.py -https://github.com/beibeiyang/cf-flask-bokeh-demo, cf-flask-bokeh-demo/stocks.py -https://github.com/Kontiomaa/flask-sqlalchemy-demo, flask-sqlalchemy-demo/app.py -https://github.com/PythonWorkshop/TensorFlowFlask, TensorFlowFlask/main.py -https://github.com/ja8zyjits/redis-flask, redis-flask/flask_app.py -https://github.com/cooleo/flask-cassandra, flask-cassandra/app/__init__.py -https://github.com/botheredbybees/flask-rss, flask-rss/headlines.py -https://github.com/wwpika/flaskww, flaskww/app/__init__.py -https://github.com/aig-/flask_google, flask_google/app.py -https://github.com/dhan12/Flaskblog, Flaskblog/run.py -https://github.com/Wangbicong/flask-newspaper, flask-newspaper/app/__init__.py -https://github.com/welserjr/Flask_Recaptcha, Flask_Recaptcha/app.py -https://github.com/brevno/test_pg_flask, test_pg_flask/app/__init__.py -https://github.com/feistiller/LearnPythonFlask, LearnPythonFlask/Demo1HelloWorld.py -https://github.com/afropolymath/papers, papers/api/__init__.py -https://github.com/Eyali1001/flaskcalculator, flaskcalculator/calculator.py -https://github.com/nenodias/flask-webservice, flask-webservice/app.py -https://github.com/aripddev/cms_flask, cms_flask/app/__init__.py -https://github.com/XiongZhijun/simple-flask, simple-flask/app/app.py -https://github.com/brizow/FlaskTriviaApp, FlaskTriviaApp/FlaskWebProject1/__init__.py -https://github.com/Chi-Qingjun/FlaskWechatDev, FlaskWechatDev/app/__init__.py -https://github.com/NexusRJ/react_flask_blog, react_flask_blog/app/__init__.py -https://github.com/jordanagreen/flask-todo-lists, flask-todo-lists/app.py -https://github.com/sampathweb/ml-cookiecutter-starter-flask-app, ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/__init__.py -https://github.com/thippo/FlaskFrame, FlaskFrame/myweb/__init__.py -https://github.com/fantingdong/flasky1, flasky1/app/__init__.py -https://github.com/wccosby/flaskML, flaskML/app/__init__.py -https://github.com/nenodias/flask-webservice, flask-webservice/app.py -https://github.com/kwin-wang/flask-learn, flask-learn/hello.py -https://github.com/guoqiao/flask-examples, flask-examples/minitwit/minitwit.py -https://github.com/xawei/flask_gw, flask_gw/app/__init__.py -https://github.com/NataKuskova/Classwork_flask, Classwork_flask/script.py -https://github.com/BadSol/flask-vendor, flask-vendor/vendor/__init__.py -https://github.com/csyouk/faust-register-py, faust-register-py/register_server.py -https://github.com/lizTheDeveloper/__g26_flask, __g26_flask/model.py -https://github.com/thippo/FlaskFrame, FlaskFrame/myweb/__init__.py -https://github.com/JonathanFrederick/flask-cards, flask-cards/app.py -https://github.com/crhowell/plj-flask, plj-flask/app.py -https://github.com/HCT118/Flask-web, Flask-web/app/__init__.py -https://github.com/shutdown57/learning_flask, learning_flask/src/app.py -https://github.com/kuaiwu/MyFlask, MyFlask/app/__init__.py -https://github.com/upbit/flask_whiteboard, flask_whiteboard/main.py -https://github.com/lieuhon/First-Flask, First-Flask/app/__init__.py -https://github.com/csyouk/faust-register-py, faust-register-py/register_server.py -https://github.com/13923858795/Tutorial, Tutorial/my/app/__init__.py -https://github.com/feocco/flaskLab, flaskLab/app.py -https://github.com/asap/weather-wizard, weather-wizard/weather/__init__.py -https://github.com/pierrelux/flask-zotero, flask-zotero/zotero.py -https://github.com/nokurn/webhook, webhook/webhook/__init__.py -https://github.com/JGaard/GoogleDomain---AD-web-console, GoogleDomain---AD-web-console/__init__.py -https://github.com/1stvamp/flask-straw-poll, flask-straw-poll/flask_straw_poll/__init__.py -https://github.com/internetfett/flask-timekeeper, flask-timekeeper/main.py -https://github.com/merisbahti/mongodb-flask-fun, mongodb-flask-fun/index.py -https://github.com/andrewmetersky/spotify-flaskapp, spotify-flaskapp/routes.py -https://github.com/marselester/upload-a-file, upload-a-file/uploader/__init__.py -https://github.com/nouyang/WTFisThisRegister, WTFisThisRegister/WTFisThisRegister.py -https://github.com/JGaard/GoogleDomain---AD-web-console, GoogleDomain---AD-web-console/__init__.py -https://github.com/kylewmoser/HistoryEmergent, HistoryEmergent/historyemergent/__init__.py -https://github.com/petertbernhardt/FlaskPostGetTest, FlaskPostGetTest/main/__init__.py -https://github.com/insom/dogefaucet, dogefaucet/main.py -https://github.com/johnrork/skeletor, skeletor/__init__.py -https://github.com/Zizzamia/tasty-flask-app, tasty-flask-app/shared.py -https://github.com/mjp2220/my_first_flask, my_first_flask/app.py -https://github.com/cogell/learningPythonFlask, learningPythonFlask/app/__init__.py -https://github.com/johnrork/skeletor, skeletor/__init__.py -https://github.com/moremorefor/flask-fileupload-ajax-example, flask-fileupload-ajax-example/app.py -https://github.com/Zizzamia/tasty-flask-app, tasty-flask-app/shared.py -https://github.com/mjhea0/music-streaming-flask, music-streaming-flask/app/__init__.py -https://github.com/rram/moneypenny, moneypenny/moneypenny.py -https://github.com/cogell/learningPythonFlask, learningPythonFlask/app/__init__.py -https://github.com/willfong/okgotit, okgotit/app.py -https://github.com/aliyarahman/code-for-progress-curriculum, code-for-progress-curriculum/app/__init__.py -https://github.com/Jahaja/psdash, psdash/psdash/run.py -https://github.com/drawcode/deployee-flask, deployee-flask/app/__init__.py -https://github.com/drawcode/blueprints-flask, blueprints-flask/app/__init__.py -https://github.com/vladkrylov/FlaskLoginTest, FlaskLoginTest/app/__init__.py -https://github.com/lingthio/Flask-User, Flask-User/example_apps/multi_email_app.py -https://github.com/Jahaja/psdash, psdash/psdash/run.py -https://github.com/sloria/webargs, webargs/examples/annotations_example.py -https://github.com/thinkingserious/api-design-with-apiaryio-python-and-flask, api-design-with-apiaryio-python-and-flask/app.py -https://github.com/tehpug/TehPUG-flask, TehPUG-flask/wsgi/app/__init__.py -https://github.com/moloch/flask_addressbook, flask_addressbook/addressbook/__init__.py -https://github.com/h4k1m0u/flask-rdv, flask-rdv/app.py -https://github.com/ko/sandbox-flask, sandbox-flask/flask-httpauth/main.py -https://github.com/vladkrylov/FlaskLoginTest, FlaskLoginTest/app/__init__.py -https://github.com/cevaris/flask-hk5, flask-hk5/mongoFlask/__init__.py -https://github.com/wiliamsouza/cars, cars/cars/__init__.py -https://github.com/artran/MyMdb, MyMdb/application.py -https://github.com/scjackson/twiceurl, twiceurl/twiceurl.py -https://github.com/okaram/learnmongo, learnmongo/FlaskApplication/__init__.py -https://github.com/lingthio/Flask-User, Flask-User/example_apps/multi_email_app.py -https://github.com/MarioZX/flask_thi, flask_thi/app/__init__.py -https://github.com/cevaris/flask-dating, flask-dating/dating/__init__.py -https://github.com/bradcypert/PyComoFlaskDemo, PyComoFlaskDemo/FlaskApi.py -https://github.com/ahh2131/pebmo-authorization-flask, pebmo-authorization-flask/__init__.py -https://github.com/scjackson/twiceurl, twiceurl/twiceurl.py -https://github.com/okaram/learnmongo, learnmongo/FlaskApplication/__init__.py -https://github.com/mikejamesthompson/magic-bins, magic-bins/app/__init__.py -https://github.com/miguelgrinberg/flask-pycon2014, flask-pycon2014/app/__init__.py -https://github.com/easonhan007/flyback_blog, flyback_blog/app.py -https://github.com/bradcypert/PyComoFlaskDemo, PyComoFlaskDemo/FlaskApi.py -https://github.com/avezhenya/musicstream, musicstream/app/__init__.py -https://github.com/qadeer05/qanalytics, qanalytics/qanalytics/__init__.py -https://github.com/cyberved/simple-web-proxy, simple-web-proxy/app.py -https://github.com/mapleoin/shorter, shorter/shorter/web.py -https://github.com/fogleman/RssToJson, RssToJson/rss_json/__init__.py -https://github.com/crimsoneer/FlaskQueueManager, FlaskQueueManager/app/__init__.py -https://github.com/nakul225/command-module, command-module/application.py -https://github.com/yhuili/Schedule, Schedule/sched/app.py -https://github.com/brianfarris/simplelogin, simplelogin/app/__init__.py -https://github.com/nfb-onf/nfbsearch-flask, nfbsearch-flask/nfbsearch_flask/nfbsearch_flask.py -https://github.com/ochen/flask-notification, flask-notification/app/__init__.py -https://github.com/oceanboy2012/flask-dev, flask-dev/app.py -https://github.com/crimsoneer/FlaskQueueManager, FlaskQueueManager/app/__init__.py -https://github.com/olegarioca/BDD-Behave-Flask, BDD-Behave-Flask/app.py -https://github.com/todo1991/doanpython, doanpython/app/__init__.py -https://github.com/gregimba/WhoRu, WhoRu/app.py -https://github.com/Albertorio/tweetBot, tweetBot/app.py -https://github.com/paddycarey/speelchecker, speelchecker/app.py -https://github.com/oceanboy2012/flask-dev, flask-dev/app.py -https://github.com/ochen/flask-notification, flask-notification/app/__init__.py -https://github.com/andriy-kulish/flask-book-library, flask-book-library/app/__init__.py -https://github.com/irdan/valorem-vis, valorem-vis/valoremvis/main.py -https://github.com/pahaz/FaceMash-flask, FaceMash-flask/_old/f_mash.py -https://github.com/saml/flask_contentnego, flask_contentnego/app.py -https://github.com/davedg629/RedditRatings, RedditRatings/app/__init__.py -https://github.com/ashleymcnamara/social_project_flask, social_project_flask/app.py -https://github.com/danilobellini/pyturing, pyturing/main.py -https://github.com/irdan/valorem-vis, valorem-vis/valoremvis/main.py -https://github.com/pallets/flask-website, flask-website/flask_website/__init__.py -https://github.com/disavowd/flask-pastebin, flask-pastebin/pastebin.py -https://github.com/saml/flask_contentnego, flask_contentnego/app.py -https://github.com/davidtwco/flask-markdown-app, flask-markdown-app/app/__init__.py -https://github.com/nicholsonjf/abacus, abacus/abacus.py -https://github.com/relsqui/openqdb, openqdb/app/__init__.py -https://github.com/fubuki/python-bookmark-service, python-bookmark-service/app.py -https://github.com/pallets/flask-website, flask-website/flask_website/__init__.py -https://github.com/ppmi-bsu/belt-server, belt-server/src/main.py -https://github.com/mskog/cheapskate, cheapskate/cheapskate.py -https://github.com/simonm/flaskCamel, flaskCamel/flaskcamel/__init__.py -https://github.com/Bloodevil/flask_cache_server, flask_cache_server/main.py -https://github.com/DMzda/cann-tables, cann-tables/cann_tables/__init__.py -https://github.com/elvinyung/quimbu, quimbu/quimbu.py -https://github.com/Rosk/flasqlite, flasqlite/app/__init__.py -https://github.com/marshmallow-code/flask-marshmallow, flask-marshmallow/flask_marshmallow/__init__.py -https://github.com/alyssaq/celery-flask-demo, celery-flask-demo/app.py -https://github.com/simonm/flaskCamel, flaskCamel/flaskcamel/__init__.py -https://github.com/tasti/Twittre, Twittre/twittre.py -https://github.com/elvinyung/quimbu, quimbu/quimbu.py -https://github.com/Amanda-Clark/BartStats, BartStats/BartStats/BartStats/BartStats.py -https://github.com/miguelgrinberg/flask-webcast, flask-webcast/03-forms/hello.py -https://github.com/yjroot/domainserver, domainserver/dnsserver/__init__.py -https://github.com/nyakiss/nyanblog, nyanblog/blogpy/__init__.py -https://github.com/miguelgrinberg/flask-webcast, flask-webcast/03-forms/hello.py -https://github.com/florije1988/FlaskJson, FlaskJson/FlaskJson/FlaskJson.py -https://github.com/LaunchKey/launchkey-flask, launchkey-flask/example/app.py -https://github.com/tildedave/cassandra-flask-sessions, cassandra-flask-sessions/server.py -https://github.com/elvinyung/florum, florum/app/__init__.py -https://github.com/ATRAN2/batimer, batimer/batimer.py -https://github.com/nyakiss/nyanblog, nyanblog/blogpy/__init__.py -https://github.com/karen-mikaela/terra_tv, terra_tv/terra_tv_car/__init__.py -https://github.com/gelioz/prom-test, prom-test/library/__init__.py -https://github.com/Smirl/teaflask, teaflask/app/__init__.py -https://github.com/dadadel/codelauncher, codelauncher/webdev.py -https://github.com/Rosuav/Flask1, Flask1/1.py -https://github.com/florije1988/FlaskJson, FlaskJson/FlaskJson/FlaskJson.py -https://github.com/lucasmcastro/pymdb, pymdb/manage.py -https://github.com/elvinyung/wiski, wiski/app.py -https://github.com/elvinyung/florum, florum/app/__init__.py -https://github.com/niijv/webvita, webvita/wsgi/webvita/__init__.py -https://github.com/gelioz/prom-test, prom-test/library/__init__.py -https://github.com/Rosuav/Flask1, Flask1/1.py -https://github.com/daboross/qxlc, qxlc/qxlc/__init__.py -https://github.com/xsteadfastx/praeger, praeger/app/app.py -https://github.com/Robpol86/Flask-Celery-Helper, Flask-Celery-Helper/tests/instances.py -https://github.com/itsnauman/shrt, shrt/app/__init__.py -https://github.com/jefftriplett/flask-whois, flask-whois/app.py -https://github.com/GandalfTheGandalf/twitter, twitter/hello.py -https://github.com/fernandojunior/rest_flaskr, rest_flaskr/app/__init__.py -https://github.com/miabbott/reserve-flask, reserve-flask/app/__init__.py -https://github.com/frimmy/flask-uploads-demo, flask-uploads-demo/app.py -https://github.com/ZCT/social_login, social_login/github.py -https://github.com/bembu/tidy, tidy/app/__init__.py -https://github.com/psychopenguin/wikiwarrior, wikiwarrior/wikiwarrior.py -https://github.com/yoniLavi/guess_me, guess_me/guess_me.py -https://github.com/mcgoddard/chatta, chatta/chatta.py -https://github.com/mcgoddard/HALON, HALON/halon.py -https://github.com/miguelgrinberg/Flask-SocketIO-Chat, Flask-SocketIO-Chat/app/__init__.py -https://github.com/jdiez17/flask-paypal, flask-paypal/app.py -https://github.com/CMGS/poll, poll/app.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/DanielleSucher/BookQueue, BookQueue/app.py -https://github.com/50onRed/phillypug-flask, phillypug-flask/phillypug/app.py -https://github.com/JunilJacob/Paint-app-using-Flask, Paint-app-using-Flask/hello.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/takosuke/pizzasuicideclub, pizzasuicideclub/psc_app/__init__.py -https://github.com/eadmundo/flask-static-blog, flask-static-blog/app/__init__.py -https://github.com/crcsmnky/thehotspot, thehotspot/v2/app.py -https://github.com/aranasaurus/android-demo-server, android-demo-server/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/bazerk/baz-flask-base, baz-flask-base/app/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/nthfloor/Flask_learn, Flask_learn/login_system/flskr.py -https://github.com/mmcgahan/flask-labs-bb, flask-labs-bb/flask_labs/__init__.py -https://github.com/penpyt/flask-couchdb-auth, flask-couchdb-auth/example/guestbook.py -https://github.com/honestappalachia/honest_site, honest_site/run.py -https://github.com/rehandalal/flask-mobility, flask-mobility/flask_mobility/tests/test_decorators.py -https://github.com/flyingsparx/MongoFlask, MongoFlask/application.py -https://github.com/fabionatali/DigiWebStats, DigiWebStats/app.py -https://github.com/danielholmstrom/flask-alchemyview, flask-alchemyview/tests/test_with_flask_sqlalchemy.py -https://github.com/futuregrid/flask_cm, flask_cm/examples/forms/app.py -https://github.com/craneon/debutante, debutante/app.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask, Paintapp-Javascript-Canvas-Flask/test.py -https://github.com/godber/flask-mobile-switch, flask-mobile-switch/missionops/missionops/__init__.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB, Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -https://github.com/soniacs/mockup-boot, mockup-boot/build.py -https://github.com/trustrachel/Flask-FeatureFlags, Flask-FeatureFlags/tests/fixtures.py -https://github.com/landakram/squeak, squeak/app.py -https://github.com/soniacs/cabinet, cabinet/app/__init__.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB, Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -https://github.com/landakram/squeak, squeak/app.py -https://github.com/flebel/yt-redirector, yt-redirector/yt-redirector.py -https://github.com/codergirl/flaskbabar, flaskbabar/hello.py -https://github.com/mykolasmith/flask-leaderboard, flask-leaderboard/leaderboard/__init__.py -https://github.com/elimgoodman/Personnel-Flask, Personnel-Flask/app/__init__.py -https://github.com/subdesign/temp_Flaskblog, temp_Flaskblog/app.py -https://github.com/maxcountryman/flask-simpleoauth, flask-simpleoauth/flask_simpleoauth/app.py -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade, proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -https://github.com/fabin/Flask-Upload, Flask-Upload/upload/__init__.py -https://github.com/manuclementz/shrt, shrt/app.py -https://github.com/liontree/lemonbook, lemonbook/__init__.py -https://github.com/fabin/Flask-Upload, Flask-Upload/upload/__init__.py -https://github.com/Treeki/bitBoard, bitBoard/bitBoard/__init__.py -https://github.com/marcilioleite/flask-saude, flask-saude/app/__init__.py -https://github.com/lepture/flask-oauthlib, flask-oauthlib/flask_oauthlib/provider/oauth1.py -https://github.com/plastboks/Flaskmarks, Flaskmarks/flaskmarks/__init__.py -https://github.com/AlexeyMK/gglto_flask, gglto_flask/gglto.py -https://github.com/sammyrulez/flask-grolla, flask-grolla/tests.py -https://github.com/Joinhack/agent, agent/flask_sqlalchemy.py -https://github.com/jdiez17/flask-paypal, flask-paypal/app.py -https://github.com/jdiez17/flask-paypal, flask-paypal/app.py -https://github.com/jdiez17/flask-paypal, flask-paypal/app.py -https://github.com/tarbell-project/tarbell, tarbell/tarbell/app.py -https://github.com/CMGS/poll, poll/app.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/DanielleSucher/BookQueue, BookQueue/app.py -https://github.com/50onRed/phillypug-flask, phillypug-flask/phillypug/app.py -https://github.com/JunilJacob/Paint-app-using-Flask, Paint-app-using-Flask/hello.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/takosuke/pizzasuicideclub, pizzasuicideclub/psc_app/__init__.py -https://github.com/eadmundo/flask-static-blog, flask-static-blog/app/__init__.py -https://github.com/crcsmnky/thehotspot, thehotspot/v2/app.py -https://github.com/aranasaurus/android-demo-server, android-demo-server/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/bazerk/baz-flask-base, baz-flask-base/app/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/nthfloor/Flask_learn, Flask_learn/login_system/flskr.py -https://github.com/mmcgahan/flask-labs-bb, flask-labs-bb/flask_labs/__init__.py -https://github.com/penpyt/flask-couchdb-auth, flask-couchdb-auth/example/guestbook.py -https://github.com/honestappalachia/honest_site, honest_site/run.py -https://github.com/rehandalal/flask-mobility, flask-mobility/flask_mobility/tests/test_decorators.py -https://github.com/flyingsparx/MongoFlask, MongoFlask/application.py -https://github.com/fabionatali/DigiWebStats, DigiWebStats/app.py -https://github.com/danielholmstrom/flask-alchemyview, flask-alchemyview/tests/test_with_flask_sqlalchemy.py -https://github.com/futuregrid/flask_cm, flask_cm/examples/forms/app.py -https://github.com/jdiez17/flask-paypal, flask-paypal/app.py -https://github.com/CMGS/poll, poll/app.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/DanielleSucher/BookQueue, BookQueue/app.py -https://github.com/50onRed/phillypug-flask, phillypug-flask/phillypug/app.py -https://github.com/JunilJacob/Paint-app-using-Flask, Paint-app-using-Flask/hello.py -https://github.com/perjo927/Portfolio, Portfolio/server.py -https://github.com/takosuke/pizzasuicideclub, pizzasuicideclub/psc_app/__init__.py -https://github.com/eadmundo/flask-static-blog, flask-static-blog/app/__init__.py -https://github.com/crcsmnky/thehotspot, thehotspot/v2/app.py -https://github.com/aranasaurus/android-demo-server, android-demo-server/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/bazerk/baz-flask-base, baz-flask-base/app/app.py -https://github.com/ryanolson/flask-couchdb-schematics, flask-couchdb-schematics/example/guestbook.py -https://github.com/nutrislice/mandrill-webhook-redirector, mandrill-webhook-redirector/webhook-router.py -https://github.com/nthfloor/Flask_learn, Flask_learn/login_system/flskr.py -https://github.com/mmcgahan/flask-labs-bb, flask-labs-bb/flask_labs/__init__.py -https://github.com/penpyt/flask-couchdb-auth, flask-couchdb-auth/example/guestbook.py -https://github.com/honestappalachia/honest_site, honest_site/run.py -https://github.com/rehandalal/flask-mobility, flask-mobility/flask_mobility/tests/test_decorators.py -https://github.com/flyingsparx/MongoFlask, MongoFlask/application.py -https://github.com/fabionatali/DigiWebStats, DigiWebStats/app.py -https://github.com/danielholmstrom/flask-alchemyview, flask-alchemyview/tests/test_with_flask_sqlalchemy.py -https://github.com/futuregrid/flask_cm, flask_cm/examples/forms/app.py -https://github.com/craneon/debutante, debutante/app.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask, Paintapp-Javascript-Canvas-Flask/test.py -https://github.com/godber/flask-mobile-switch, flask-mobile-switch/missionops/missionops/__init__.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB, Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -https://github.com/soniacs/mockup-boot, mockup-boot/build.py -https://github.com/trustrachel/Flask-FeatureFlags, Flask-FeatureFlags/tests/fixtures.py -https://github.com/landakram/squeak, squeak/app.py -https://github.com/soniacs/cabinet, cabinet/app/__init__.py -https://github.com/prabeesh/Paintapp-Javascript-Canvas-Flask-MongoDB, Paintapp-Javascript-Canvas-Flask-MongoDB/test.py -https://github.com/landakram/squeak, squeak/app.py -https://github.com/flebel/yt-redirector, yt-redirector/yt-redirector.py -https://github.com/codergirl/flaskbabar, flaskbabar/hello.py -https://github.com/mykolasmith/flask-leaderboard, flask-leaderboard/leaderboard/__init__.py -https://github.com/elimgoodman/Personnel-Flask, Personnel-Flask/app/__init__.py -https://github.com/subdesign/temp_Flaskblog, temp_Flaskblog/app.py -https://github.com/maxcountryman/flask-simpleoauth, flask-simpleoauth/flask_simpleoauth/app.py -https://github.com/dorajistyle/proposal_center_python_flask_sqlalchemy_jade, proposal_center_python_flask_sqlalchemy_jade/application/__init__.py -https://github.com/fabin/Flask-Upload, Flask-Upload/upload/__init__.py -https://github.com/manuclementz/shrt, shrt/app.py -https://github.com/liontree/lemonbook, lemonbook/__init__.py -https://github.com/fabin/Flask-Upload, Flask-Upload/upload/__init__.py -https://github.com/Treeki/bitBoard, bitBoard/bitBoard/__init__.py -https://github.com/marcilioleite/flask-saude, flask-saude/app/__init__.py -https://github.com/lepture/flask-oauthlib, flask-oauthlib/flask_oauthlib/provider/oauth1.py -https://github.com/plastboks/Flaskmarks, Flaskmarks/flaskmarks/__init__.py -https://github.com/AlexeyMK/gglto_flask, gglto_flask/gglto.py -https://github.com/sammyrulez/flask-grolla, flask-grolla/tests.py -https://github.com/Joinhack/agent, agent/flask_sqlalchemy.py -https://github.com/raejoon/lype-flask, lype-flask/lyre.py -https://github.com/jmsalcido/python-flask-microblog, python-flask-microblog/microblog/app/__init__.py -https://github.com/nausheenfatma/WebAppWithFlask, WebAppWithFlask/model.py -https://github.com/RicoChou/MyFlasky, MyFlasky/app/__init__.py -https://github.com/heamon7/learn-restful, learn-restful/app.py -https://github.com/mauriciorey/learning_flask, learning_flask/routes.py -https://github.com/rookiebulls/flask-learn, flask-learn/app/__init__.py -https://github.com/FinleySmile/flask_blog_demo, flask_blog_demo/flask_blog_demo.py -https://github.com/RodrigoVillatoro/flask_social_network, flask_social_network/app/__init__.py -https://github.com/nausheenfatma/WebAppWithFlask, WebAppWithFlask/model.py -https://github.com/sheldonsmickley/flaskemail_app, flaskemail_app/emails.py -https://github.com/shas15/Betting-Chips, Betting-Chips/test.py -https://github.com/soasme/flask-perm, flask-perm/example.py -https://github.com/hnb2/flask-customers, flask-customers/customers/__init__.py -https://github.com/LeonNie52/Learn_Flask, Learn_Flask/hello.py -https://github.com/mauriciorey/learning_flask, learning_flask/routes.py -https://github.com/nivanko/flask-catalog, flask-catalog/application.py -https://github.com/aetherwu/Flask-Docker-Template, Flask-Docker-Template/flask/web/__init__.py -https://github.com/AngelMunoz/Flask-Blueprints-Template, Flask-Blueprints-Template/app/__init__.py -https://github.com/posenberg/Flask-Kickstarter-Clone, Flask-Kickstarter-Clone/punchstarter/__init__.py -https://github.com/pythonvietnam/meetup01-flask, meetup01-flask/hello_world.py -https://github.com/shane-kercheval/flask-postgresql-template, flask-postgresql-template/app_factory.py -https://github.com/soasme/flask-personal-access-token, flask-personal-access-token/example.py -https://github.com/YoungGer/FlaskApps, FlaskApps/pdClassifier/app.py -https://github.com/nivanko/flask-catalog, flask-catalog/application.py -https://github.com/saviour123/flaskStudentData, flaskStudentData/app.py -https://github.com/QLGu/flask-zhihu-demo, flask-zhihu-demo/www/__init__.py -https://github.com/jkravanja/paypal_flask_payment, paypal_flask_payment/payment.py -https://github.com/tolmun/flask-ng-sample, flask-ng-sample/project/__init__.py -https://github.com/AngelMunoz/Flask-Blueprints-Template, Flask-Blueprints-Template/app/__init__.py -https://github.com/graphql-python/flask-graphql, flask-graphql/tests/app.py -https://github.com/AnshuOnGit/FlaskServices, FlaskServices/read_file.py -https://github.com/shank7485/Flask-APIs, Flask-APIs/APIs/__init__.py -https://github.com/mattyait/Flask_webapp, Flask_webapp/routes.py -https://github.com/info3180/python-flask-example, python-flask-example/hello.py -https://github.com/imperio-wxm/flask-learn, flask-learn/app/myapp/__init__.py -https://github.com/msopentechcn/aad-graphapi-flask-demo, aad-graphapi-flask-demo/app.py -https://github.com/awind/FlaskRestful, FlaskRestful/app/__init__.py -https://github.com/hbldh/flask-pybankid, flask-pybankid/flask_pybankid.py -https://github.com/mattyait/Flask_webapp, Flask_webapp/routes.py -https://github.com/njnr/onece, onece/app/__init__.py -https://github.com/IvanBodnar/fromzero_flask_blog, fromzero_flask_blog/__init__.py -https://github.com/nescode/punchstarter, punchstarter/punchstarter/__init__.py -https://github.com/AllyW/flaskyDeb, flaskyDeb/app/__init__.py -https://github.com/TwilioDevEd/eta-notifications-flask, eta-notifications-flask/eta_notifications_flask/__init__.py -https://github.com/yetship/flask-usages, flask-usages/application/__init__.py -https://github.com/cynrick/kickstarter-flask, kickstarter-flask/kickstarter/__init__.py -https://github.com/ubbochum/hb2_flask, hb2_flask/hb2_flask.py -https://github.com/billyfung/flask_shortener, flask_shortener/app.py -https://github.com/AllyW/flaskyDeb, flaskyDeb/app/__init__.py -https://github.com/asimonia/FlaskJeopardy, FlaskJeopardy/app/__init__.py -https://github.com/yetship/flask-usages, flask-usages/application/__init__.py -https://github.com/materialsvirtuallab/flamyngo, flamyngo/flamyngo/app.py -https://github.com/Upflask/Upflask, Upflask/server.py -https://github.com/billyfung/flask_shortener, flask_shortener/app.py -https://github.com/boydjohnson/flasktwilio, flasktwilio/app.py -https://github.com/s-kovacevic/elearning-flask, elearning-flask/main.py -https://github.com/xpleaf/flask_catalog, flask_catalog/my_app/__init__.py -https://github.com/poppuyo/FlaskUrlShortener, FlaskUrlShortener/FlaskUrlShortener/urlshortener.py -https://github.com/HYL13/flask_project_0, flask_project_0/app/__init__.py -https://github.com/kfiras/cloudfoundry-flask-webservice, cloudfoundry-flask-webservice/app.py -https://github.com/ssam123/flask-blog-tutorial, flask-blog-tutorial/__init__.py -https://github.com/kcunning/flask-class-c9, flask-class-c9/flaskclass/app/__init__.py -https://github.com/MarHelen/FlaskLogin, FlaskLogin/sql_declarative.py -https://github.com/kloudsec/py-webkit2png-flask-api, py-webkit2png-flask-api/api/app.py -https://github.com/s-kovacevic/elearning-flask, elearning-flask/main.py -https://github.com/rholmes69/flasky2_1, flasky2_1/app/__init__.py -https://github.com/ChellsChen/FlaskSocketIOChart, FlaskSocketIOChart/app/__init__.py -https://github.com/jcerise/openspacesboard-python, openspacesboard-python/osbp_app/__init__.py -https://github.com/icecraft/ZhiHuDaemon, ZhiHuDaemon/app/__init__.py -https://github.com/liuenyan/micro-flask-blog, micro-flask-blog/app/__init__.py -https://github.com/NJIT-SIG-WEBDEV/Flask-URL-Shortner, Flask-URL-Shortner/app.py -https://github.com/commandknight/cs125-fooddy-flask, cs125-fooddy-flask/fooddy2.py -https://github.com/sinscary/Flask-Social-Networking, Flask-Social-Networking/app.py -https://github.com/danleyb2/flaskMe, flaskMe/flaskREST.py -https://github.com/asielen/Woodles_Flask, Woodles_Flask/app/__init__.py -https://github.com/honmaple/flask-word, flask-word/app/__init__.py -https://github.com/textbook/flask-forecaster, flask-forecaster/flask_forecaster/flask_app.py -https://github.com/Ty-WDFW/Flask-Tickets, Flask-Tickets/main.py -https://github.com/ChellsChen/FlaskSocketIOChart, FlaskSocketIOChart/app/__init__.py -https://github.com/liuenyan/micro-flask-blog, micro-flask-blog/app/__init__.py -https://github.com/GreatBedAwake/flask_lab_web, flask_lab_web/app/__init__.py -https://github.com/arvvvs/Flask-Practice-Metis-Delivery, Flask-Practice-Metis-Delivery/app.py -https://github.com/asielen/Woodles_Flask, Woodles_Flask/app/__init__.py -https://github.com/tanzhixu/Flask-oauth, Flask-oauth/app/__init__.py -https://github.com/guilleJB/flask-web-book, flask-web-book/hello.py -https://github.com/mnzr/Flask-Blueprint-test, Flask-Blueprint-test/app/__init__.py -https://github.com/PeggyZWY/blog-with-flask, blog-with-flask/app/__init__.py -https://github.com/TheCypher/flask-boiler-plate, flask-boiler-plate/app/__init__.py -https://github.com/mullaned/Flask-Test, Flask-Test/flask_test.py -https://github.com/rgsingh/flask-timetrack, flask-timetrack/app/__init__.py -https://github.com/f-guitart/progcoms3-flask, progcoms3-flask/app.py -https://github.com/stalwart201/flaskimgupload, flaskimgupload/upload.py -https://github.com/KotiyaSenya/FlaskLearn, FlaskLearn/flask_learn/__init__.py -https://github.com/lkpanganiban/flask-rest-example, flask-rest-example/app.py -https://github.com/Christomas/i_dev_flask, i_dev_flask/app/__init__.py -https://github.com/gene1wood/flaskoktaapp, flaskoktaapp/flaskoktaapp/__init__.py -https://github.com/kosen10spajam/f-flask, f-flask/main.py -https://github.com/engfilipe/curso_flask, curso_flask/photolog/__init__.py -https://github.com/lockie/flask_ldap, flask_ldap/index.py -https://github.com/ol3j/azureday-flask, azureday-flask/FlaskWebProject/__init__.py -https://github.com/kaslemr/sample_flask_project, sample_flask_project/app2.py -https://github.com/yobuntu/laboratory, laboratory/laboratory/fooflask.py -https://github.com/mion00/flaskSQLAlchemy, flaskSQLAlchemy/app.py -https://github.com/spring3th/flask-blogdemo, flask-blogdemo/app/__init__.py -https://github.com/markchodges/mastering-flask, mastering-flask/webapp/__init__.py -https://github.com/zhaokefei/web_flask, web_flask/app/__init__.py -https://github.com/WhiteShirts/windowsflask, windowsflask/flasky/app/__init__.py -https://github.com/martinpeck/bedlam-slack, bedlam-slack/bedlam_slack/__init__.py -https://github.com/kud-i/FlaskRestAPI, FlaskRestAPI/REST_API.py -https://github.com/ZAGJAB/Flask_OAuth2, Flask_OAuth2/app.py -https://github.com/cbeasley92/Flask-REST-API-Testing, Flask-REST-API-Testing/rest_api.py -https://github.com/zelinlee0303/python-flask-mysql, python-flask-mysql/app/__init__.py -https://github.com/AMontalva/flask-thinkful-api, flask-thinkful-api/posts/__init__.py -https://github.com/erk52/FlaskDynamics, FlaskDynamics/view.py -https://github.com/marvelaz/Flask_python, Flask_python/app.py -https://github.com/yaoice/flask-micblog, flask-micblog/micblog/app/__init__.py -https://github.com/NixonInnes/Flask-Calendar, Flask-Calendar/app/__init__.py -https://github.com/tageee/Blog, Blog/app/__init__.py -https://github.com/ifwenvlook/flask-celery, flask-celery/app.py -https://github.com/kindoprec/flask-boot, flask-boot/app.py -https://github.com/AuthentiqID/examples-flask, examples-flask/example_basic.py -https://github.com/jlberzal/Flask-User, Flask-User/example_apps/multi_email_app.py -https://github.com/kstripp/flask-crud, flask-crud/app/__init__.py -https://github.com/singleyoungtao/myblog-flask, myblog-flask/app/__init__.py -https://github.com/NJUPole/Flask_tickets, Flask_tickets/tickets.py -https://github.com/tageee/Blog, Blog/app/__init__.py -https://github.com/zzq2015/myFirstWeb, myFirstWeb/hello/app/__init__.py -https://github.com/vishwanath79/FlaskRestAPI, FlaskRestAPI/rest.py -https://github.com/catmin/flask49erStore, flask49erStore/flask49erStore.py -https://github.com/viprs/FlaskyBlog, FlaskyBlog/app/__init__.py -https://github.com/kindoprec/flask-boot, flask-boot/app.py -https://github.com/jlberzal/Flask-User, Flask-User/example_apps/multi_email_app.py -https://github.com/hufan-Akari/BookLibrary, BookLibrary/app/__init__.py -https://github.com/responsible/Flask-Restful-Role-Auth, Flask-Restful-Role-Auth/App/__init__.py -https://github.com/miguelgrinberg/flack, flack/flack/__init__.py -https://github.com/TwilioDevEd/sms2fa-flask, sms2fa-flask/sms2fa_flask/__init__.py -https://github.com/chestnutme/flaskie, flaskie/app/__init__.py -https://github.com/ibrahimirdem/flask-numaradan-isim, flask-numaradan-isim/app.py -https://github.com/bigzhao/Flask-Tasks, Flask-Tasks/flasktask/app/__init__.py -https://github.com/balalay12/flask-cachlka, flask-cachlka/app/__init__.py -https://github.com/Lypzero/flask_studing, flask_studing/app/__init__.py -https://github.com/gekorob/liebraryrest, liebraryrest/liebraryrest/app.py -https://github.com/Skycker/lsa-flask-preview, lsa-flask-preview/lsa-flask-preview.py -https://github.com/sisyphus1993/flaskreview, flaskreview/app/__init__.py -https://github.com/sajjadAI/FlaskSocial, FlaskSocial/app.py -https://github.com/kua-hosi-GRUp/Flask-Bones, Flask-Bones/app/__init__.py -https://github.com/liyocee/flask_biggy, flask_biggy/app/__init__.py -https://github.com/jake-bladt/flasksandbox, flasksandbox/app/app.py -https://github.com/er3456qi/FlaskPolls, FlaskPolls/polls/__init__.py -https://github.com/nad2000/Flask-Timesheets, Flask-Timesheets/__init__.py -https://github.com/yitingfan/flask-adminlte, flask-adminlte/app/__init__.py -https://github.com/ByakuyaKuchiki/firstFlask, firstFlask/app/__init__.py -https://github.com/sarosicami/ReviewerFlask, ReviewerFlask/rest_server.py -https://github.com/Theviajerock/mvaFlask, mvaFlask/app.py -https://github.com/renejahn/flask-fastbill, flask-fastbill/test_basics.py -https://github.com/charup/Python_Flask, Python_Flask/hello_dynamicVar.py -https://github.com/pazzo83/restaurant_reservation_flask, restaurant_reservation_flask/app/__init__.py -https://github.com/zjyExcelsior/Flask-Login-examples, Flask-Login-examples/myapp/__init__.py -https://github.com/Blockshare/blockshare-flask-template, blockshare-flask-template/app/__init__.py -https://github.com/bwghughes/flaskdev, flaskdev/hello.py -https://github.com/halilkaya/pymock, pymock/app.py -https://github.com/yitingfan/flask-adminlte, flask-adminlte/app/__init__.py -https://github.com/smirnov-am/flask-ablog, flask-ablog/app/__init__.py -https://github.com/charup/Python_Flask, Python_Flask/hello_dynamicVar.py -https://github.com/Blockshare/blockshare-flask-template, blockshare-flask-template/app/__init__.py -https://github.com/lpty/a-web-use-flask, a-web-use-flask/app/__init__.py -https://github.com/lixutang/Python_Web_Flask, Python_Web_Flask/app/__init__.py -https://github.com/William0423/flaskybooklearn, flaskybooklearn/app/__init__.py -https://github.com/getser/flaskapiblog, flaskapiblog/__init__.py -https://github.com/kirazz/flaskywebblog, flaskywebblog/PycharmProjects/webblog/app/__init__.py -https://github.com/pbabik/flask-lipsum, flask-lipsum/app.py -https://github.com/encima/flask-task, flask-task/app/__init__.py -https://github.com/DivisionMax/mover-flask, mover-flask/index.py -https://github.com/TunedMystic/docker-flask-base, docker-flask-base/app/app.py -https://github.com/getser/flaskapiblog, flaskapiblog/__init__.py -https://github.com/gabrielssilva/flasktasks, flasktasks/flasktasks/__init__.py -https://github.com/dodoru/flask_bbs, flask_bbs/src/app.py -https://github.com/lbatalha/imagething, imagething/main.py -https://github.com/ArtemKran/site_on_flask, site_on_flask/app/__init__.py -https://github.com/postrational/rest_api_demo, rest_api_demo/rest_api_demo/app.py -https://github.com/DanceCats/DanceCat, DanceCat/DanceCat/__init__.py -https://github.com/juanferreira/social-flask, social-flask/app.py -https://github.com/dodoru/flask_bbs, flask_bbs/src/app.py -https://github.com/decentfox/relask, relask/example/sqlalchemy/relasksa/__init__.py -https://github.com/spenserhale/social-network-flask, social-network-flask/app.py -https://github.com/arajago6/flask-json-api, flask-json-api/app.py -https://github.com/kmalfatti/library-flask-app, library-flask-app/app.py -https://github.com/Millyn/flask_py3_hr, flask_py3_hr/app/__init__.py -https://github.com/13923858795/Tutorial, Tutorial/my/app/__init__.py -https://github.com/feocco/flaskLab, flaskLab/app.py -https://github.com/umutcoskun/flask-ready, flask-ready/src/app/__init__.py -https://github.com/novking/Flask_AWS, Flask_AWS/PlagiarismDefender/home.py -https://github.com/natfoster82/flask-alcohol, flask-alcohol/example/app.py -https://github.com/Nonja/FlaskArticleSearchNYT, FlaskArticleSearchNYT/app/__init__.py -https://github.com/stephenjjones/flask-auth-service, flask-auth-service/app/__init__.py -https://github.com/thomasobrien99/flask-movie-crud, flask-movie-crud/app.py -https://github.com/kmalfatti/library-flask-app, library-flask-app/app.py -https://github.com/aaossa/flask-openshift, flask-openshift/flask_openshift_template.py -https://github.com/Qqlick/flaskRP, flaskRP/flaskRP.py -https://github.com/coder-zhuyu/flask-framework, flask-framework/app/__init__.py -https://github.com/stephenjjones/flask-auth-service, flask-auth-service/app/__init__.py -https://github.com/learningpython08/flask-file-sharing, flask-file-sharing/upload/handlers.py -https://github.com/beibeiyang/cf-flask-bokeh-demo, cf-flask-bokeh-demo/stocks.py -https://github.com/Athsheep/Flask_Web_Development, Flask_Web_Development/app/__init__.py -https://github.com/Kontiomaa/flask-sqlalchemy-demo, flask-sqlalchemy-demo/app.py -https://github.com/PythonWorkshop/TensorFlowFlask, TensorFlowFlask/main.py -https://github.com/cooleo/flask-cassandra, flask-cassandra/app/__init__.py -https://github.com/ja8zyjits/redis-flask, redis-flask/flask_app.py -https://github.com/botheredbybees/flask-rss, flask-rss/headlines.py -https://github.com/wwpika/flaskww, flaskww/app/__init__.py -https://github.com/aig-/flask_google, flask_google/app.py -https://github.com/dhan12/Flaskblog, Flaskblog/run.py -https://github.com/Wangbicong/flask-newspaper, flask-newspaper/app/__init__.py -https://github.com/welserjr/Flask_Recaptcha, Flask_Recaptcha/app.py -https://github.com/brevno/test_pg_flask, test_pg_flask/app/__init__.py -https://github.com/feistiller/LearnPythonFlask, LearnPythonFlask/Demo1HelloWorld.py -https://github.com/afropolymath/papers, papers/api/__init__.py -https://github.com/Eyali1001/flaskcalculator, flaskcalculator/calculator.py -https://github.com/nenodias/flask-webservice, flask-webservice/app.py -https://github.com/aripddev/cms_flask, cms_flask/app/__init__.py -https://github.com/XiongZhijun/simple-flask, simple-flask/app/app.py -https://github.com/brizow/FlaskTriviaApp, FlaskTriviaApp/FlaskWebProject1/__init__.py -https://github.com/Chi-Qingjun/FlaskWechatDev, FlaskWechatDev/app/__init__.py -https://github.com/NexusRJ/react_flask_blog, react_flask_blog/app/__init__.py -https://github.com/jordanagreen/flask-todo-lists, flask-todo-lists/app.py -https://github.com/sampathweb/ml-cookiecutter-starter-flask-app, ml-cookiecutter-starter-flask-app/{{cookiecutter.repo_name}}/app/__init__.py -https://github.com/thippo/FlaskFrame, FlaskFrame/myweb/__init__.py -https://github.com/fantingdong/flasky1, flasky1/app/__init__.py -https://github.com/wccosby/flaskML, flaskML/app/__init__.py -https://github.com/nenodias/flask-webservice, flask-webservice/app.py -https://github.com/kwin-wang/flask-learn, flask-learn/hello.py -https://github.com/xawei/flask_gw, flask_gw/app/__init__.py -https://github.com/NataKuskova/Classwork_flask, Classwork_flask/script.py -https://github.com/BadSol/flask-vendor, flask-vendor/vendor/__init__.py -https://github.com/csyouk/faust-register-py, faust-register-py/register_server.py -https://github.com/lizTheDeveloper/__g26_flask, __g26_flask/model.py -https://github.com/thippo/FlaskFrame, FlaskFrame/myweb/__init__.py -https://github.com/JonathanFrederick/flask-cards, flask-cards/app.py -https://github.com/crhowell/plj-flask, plj-flask/app.py -https://github.com/HCT118/Flask-web, Flask-web/app/__init__.py -https://github.com/shutdown57/learning_flask, learning_flask/src/app.py -https://github.com/GuanYQ0926/flask-restful, flask-restful/app.py -https://github.com/kuaiwu/MyFlask, MyFlask/app/__init__.py -https://github.com/upbit/flask_whiteboard, flask_whiteboard/main.py -https://github.com/lieuhon/First-Flask, First-Flask/app/__init__.py -https://github.com/csyouk/faust-register-py, faust-register-py/register_server.py -https://github.com/allbegray/flask_mvc, flask_mvc/app.py -https://github.com/Kentovski/Flask_Battlefield, Flask_Battlefield/server.py -https://github.com/tjgrist/Flask-psql, Flask-psql/app.py -https://github.com/brizow/FlaskBookmarkSite, FlaskBookmarkSite/FlaskAdvancedTutorial/FlaskAdvancedTutorial/__init__.py -https://github.com/roselmamendes/security-on-flask, security-on-flask/black_girls/black_girls_app.py -https://github.com/EenTang/flaskdev, flaskdev/app/__init__.py -https://github.com/harish-rajendran/Flask-Project, Flask-Project/routes.py -https://github.com/gunavara/guniFlask, guniFlask/app.py -https://github.com/yuriymironov96/flask-webservice, flask-webservice/app/__init__.py -https://github.com/sternmatt/FLASK_DEMO, FLASK_DEMO/app.py -https://github.com/andbraga/ProbotFlask, ProbotFlask/flask_starter/flaskstarter/__init__.py -https://github.com/xxxxsars/Flask_SQLite, Flask_SQLite/draw_member.py -https://github.com/qqxx6661/micblog, micblog/app/__init__.py -https://github.com/kkweon/price_alert_flask, price_alert_flask/src/app.py -https://github.com/artempronevskiy/Small-test-Flask-app, Small-test-Flask-app/main.py -https://github.com/ajeyamk/flask-python-epoch, flask-python-epoch/controller.py -https://github.com/YuiJL/myweblog, myweblog/www/app/__init__.py -https://github.com/harish-rajendran/Flask-Project, Flask-Project/routes.py -https://github.com/hazybluedot/indie_flask, indie_flask/indie_flask/__init__.py -https://github.com/sternmatt/FLASK_DEMO, FLASK_DEMO/app.py -https://github.com/breezeofjune/flask-todolist, flask-todolist/todolist/app/__init__.py -https://github.com/antoniocsz/LivroFlask, LivroFlask/app/__init__.py -https://github.com/Ben0mega/SimpleFlaskWiki, SimpleFlaskWiki/main.py -https://github.com/vimalloc/flask-jwt-extended, flask-jwt-extended/examples/simple.py -https://github.com/jehuston/text_classifier, text_classifier/app.py -https://github.com/mcquam/flasky2, flasky2/app/__init__.py -https://github.com/Lijin111/Flask-Web, Flask-Web/Flask.py -https://github.com/Atheloses/Flask-Bones, Flask-Bones/app/__init__.py -https://github.com/KingOkay/flask-book, flask-book/app/__init__.py -https://github.com/buttercms/buttercms-flask, buttercms-flask/app.py -https://github.com/MagicRoc/flaskoc, flaskoc/hello.py -https://github.com/TangXinCN/flaskdev, flaskdev/app/__init__.py -https://github.com/Caynosadler/user-Authentication-using-flask, user-Authentication-using-flask/register.py -https://github.com/luolidong/SaltFlask, SaltFlask/app/__init__.py -https://github.com/Atheloses/Flask-Bones, Flask-Bones/app/__init__.py -https://github.com/KingOkay/flask-book, flask-book/app/__init__.py -https://github.com/imhuwq/read_flask, read_flask/app/__init__.py -https://github.com/Horla74/Flask-bbs, Flask-bbs/app.py -https://github.com/clivegross/flask-usermgr, flask-usermgr/app/__init__.py -https://github.com/garibo/Flask-Social, Flask-Social/app.py -https://github.com/clivegross/flask-usermgr, flask-usermgr/app/__init__.py -https://github.com/dhurataK/flask_mysql, flask_mysql/email_validation_with_db/server.py -https://github.com/Urumasi/Flask-Bones, Flask-Bones/app/__init__.py -https://github.com/ysalimi/flaskRestCrud, flaskRestCrud/project/__init__.py -https://github.com/mustafawm/Flask-LocationApp, Flask-LocationApp/routes.py -https://github.com/Original-heapsters/FlaskPortal, FlaskPortal/Portal_Main/app.py -https://github.com/neilmaldy/flask_upload, flask_upload/test.py \ No newline at end of file diff --git a/func_counter.py b/func_counter.py deleted file mode 100644 index 82c7ff6e..00000000 --- a/func_counter.py +++ /dev/null @@ -1,49 +0,0 @@ -"""Module used for counting number of functions - to get an estimate og how big the CFG should be""" -import ast - -from pyt.cfg import generate_ast, get_call_names_as_string -from pyt.project_handler import get_modules - - -function_calls = list() -functions = dict() -classes = dict() - - -class Counter(ast.NodeVisitor): - def visit_Call(self, node): - n = get_call_names_as_string(node.func) - function_calls.append(n) - self.generic_visit(node) - # Husk return, save vars overhead - - def visit_FunctionDef(self, node): - if node.name in functions: - node.name += '~' - functions[node.name] = len(node.body) - for n in node.body: - self.visit(n) - - def visit_ClassDef(self, node): - if node.name in classes: - node.name += '~' - classes[node.name] = len(node.body) - for n in node.body: - self.visit(n) - - -if __name__ == '__main__': - module_paths = (m[1] for m in get_modules('../flaskbb/flaskbb')) - for p in module_paths: - print(p) - t = generate_ast(p) - c = Counter() - c.visit(t) - - max_func_len = max(functions.values()) - max_class_len = max(classes.values()) - restore_stuff = 6 # varies - print(len(function_calls)) - print('estimate stuff: ', max_func_len*len(function_calls)) - print('estimate stuff: ', max_class_len*len(function_calls)) diff --git a/make_dependency_graph.sh b/make_dependency_graph.sh deleted file mode 100644 index c7cf5b8e..00000000 --- a/make_dependency_graph.sh +++ /dev/null @@ -1,5 +0,0 @@ -# This script uses the pydepgraph to draw a dependency graph between modules -# install pydepgraph from your linux package manager - -pydepgraph -p pyt/ -g 1 | dot -Tpng -o graph.png -xdg-open graph.png diff --git a/profiling/db.txt b/profiling/db.txt deleted file mode 100644 index 622b75aa..00000000 --- a/profiling/db.txt +++ /dev/null @@ -1,2598 +0,0 @@ -############################################### Profiling 2016-08-10 13:53:08.742765 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.100027 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 34596 19687 0.6 19.7 JOIN = set() - 14 64654 36026 0.6 36.0 for ingoing in cfg_node.ingoing: - 15 30058 30505 1.0 30.5 JOIN |= ingoing.old_constraint - 16 34596 13809 0.4 13.8 return JOIN - -Total time: 1.30757 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 30657 17686 0.6 1.4 result = set() - 21 899053 393007 0.4 30.1 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 868396 424534 0.5 32.5 if _id is not cfg_node.left_hand_side: - 24 863528 459466 0.5 35.1 result.add(cfg_node) - 25 30657 12879 0.4 1.0 return result - -Total time: 2.6588 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 34596 26784 0.8 1.0 if isinstance(cfg_node, AssignmentNode): - 31 30657 230261 7.5 8.7 JOIN = self.join(cfg_node) - 32 30657 14232 0.5 0.5 arrow_result = JOIN - 33 30657 20338 0.7 0.8 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 30657 2303651 75.1 86.6 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 30657 20023 0.7 0.8 arrow_result.add(cfg_node) - 36 30657 18586 0.6 0.7 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 3939 24928 6.3 0.9 cfg_node.new_constraint = self.join(cfg_node) - -Wed Aug 10 13:53:09 2016 stats.prof - - 1115433 function calls (1109189 primitive calls) in 0.435 seconds - - Ordered by: cumulative time - List reduced from 751 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.435 0.435 {built-in method builtins.exec} - 1 0.000 0.000 0.435 0.435 ../pyt/pyt.py:1() - 1 0.000 0.000 0.357 0.357 ../pyt/fixed_point.py:41(analyse) - 7 0.000 0.000 0.356 0.051 ../pyt/fixed_point.py:28(fixpoint_runner) - 194 0.018 0.000 0.330 0.002 ../pyt/fixed_point.py:35(fixpoint_iteration) - 34596 0.041 0.000 0.312 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 30657 0.177 0.000 0.239 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 894220 0.064 0.000 0.064 0.000 {method 'add' of 'set' objects} - 44/9 0.000 0.000 0.041 0.005 :966(_find_and_load) - 44/9 0.000 0.000 0.041 0.005 :939(_find_and_load_unlocked) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 7.80966 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 1548602 1023302 0.7 13.1 JOIN = set() - 14 2994137 1996115 0.7 25.6 for ingoing in cfg_node.ingoing: - 15 1445535 4154997 2.9 53.2 JOIN |= ingoing.old_constraint - 16 1548602 635246 0.4 8.1 return JOIN - -Total time: 374.495 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 1467058 974029 0.7 0.3 result = set() - 21 254661642 109700721 0.4 29.3 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 253194584 129272131 0.5 34.5 if _id is not cfg_node.left_hand_side: - 24 252813382 133927025 0.5 35.8 result.add(cfg_node) - 25 1467058 621407 0.4 0.2 return result - -Total time: 648.407 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 1548602 1461537 0.9 0.2 if isinstance(cfg_node, AssignmentNode): - 31 1467058 14371167 9.8 2.2 JOIN = self.join(cfg_node) - 32 1467058 686717 0.5 0.1 arrow_result = JOIN - 33 1467058 1226815 0.8 0.2 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 1467058 628106513 428.1 96.9 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 1467058 986740 0.7 0.2 arrow_result.add(cfg_node) - 36 1467058 1027157 0.7 0.2 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 81544 540392 6.6 0.1 cfg_node.new_constraint = self.join(cfg_node) - -Wed Aug 10 13:54:42 2016 stats.prof - - 261667345 function calls (261646062 primitive calls) in 90.121 seconds - - Ordered by: cumulative time - List reduced from 754 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 90.121 90.121 {built-in method builtins.exec} - 1 0.000 0.000 90.121 90.121 ../pyt/pyt.py:1() - 1 0.000 0.000 89.886 89.886 ../pyt/fixed_point.py:41(analyse) - 14 0.007 0.000 89.886 6.420 ../pyt/fixed_point.py:28(fixpoint_runner) - 1102 1.791 0.002 84.617 0.077 ../pyt/fixed_point.py:35(fixpoint_iteration) - 1548602 2.404 0.000 82.826 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 1467058 56.285 0.000 75.867 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) -254280475 19.708 0.000 19.708 0.000 {method 'add' of 'set' objects} - 1548602 4.236 0.000 4.236 0.000 ../pyt/reaching_definitions_taint.py:11(join) - 1102 0.007 0.000 2.950 0.003 ../pyt/fixed_point.py:18(constraints_changed) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 1.36268 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 360436 245064 0.7 18.0 JOIN = set() - 14 696038 456391 0.7 33.5 for ingoing in cfg_node.ingoing: - 15 335602 512314 1.5 37.6 JOIN |= ingoing.old_constraint - 16 360436 148911 0.4 10.9 return JOIN - -Total time: 39.8733 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 332441 232814 0.7 0.6 result = set() - 21 25459412 11771649 0.5 29.5 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 25126971 12591490 0.5 31.6 if _id is not cfg_node.left_hand_side: - 24 25049392 15128989 0.6 37.9 result.add(cfg_node) - 25 332441 148387 0.4 0.4 return result - -Total time: 69.2388 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 360436 328782 0.9 0.5 if isinstance(cfg_node, AssignmentNode): - 31 332441 2875202 8.6 4.2 JOIN = self.join(cfg_node) - 32 332441 168029 0.5 0.2 arrow_result = JOIN - 33 332441 255674 0.8 0.4 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 332441 64963372 195.4 93.8 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 332441 229760 0.7 0.3 arrow_result.add(cfg_node) - 36 332441 208997 0.6 0.3 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 27995 208969 7.5 0.3 cfg_node.new_constraint = self.join(cfg_node) - -Wed Aug 10 14:05:57 2016 stats.prof - - 27061502 function calls (27053131 primitive calls) in 9.258 seconds - - Ordered by: cumulative time - List reduced from 755 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.005 0.000 9.258 9.258 {built-in method builtins.exec} - 1 0.000 0.000 9.258 9.258 ../pyt/pyt.py:1() - 1 0.000 0.000 9.111 9.111 ../pyt/fixed_point.py:41(analyse) - 7 0.002 0.000 9.111 1.302 ../pyt/fixed_point.py:28(fixpoint_runner) - 412 0.261 0.001 8.550 0.021 ../pyt/fixed_point.py:35(fixpoint_iteration) - 360436 0.518 0.000 8.288 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 332441 5.368 0.000 7.166 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 25381868 1.825 0.000 1.825 0.000 {method 'add' of 'set' objects} - 360436 0.531 0.000 0.531 0.000 ../pyt/reaching_definitions_taint.py:11(join) - 405 0.307 0.001 0.307 0.001 ../pyt/fixed_point.py:22(swap_constraints) - - - -############################################### Profiling 2016-08-11 08:42:50.417640 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.001953 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 658 380 0.6 19.5 JOIN = set() - 14 1239 695 0.6 35.6 for ingoing in cfg_node.ingoing: - 15 581 599 1.0 30.7 JOIN |= ingoing.old_constraint - 16 658 279 0.4 14.3 return JOIN - -Total time: 0.02661 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 582 314 0.5 1.2 result = set() - 21 19000 7620 0.4 28.6 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 18418 8705 0.5 32.7 if _id is not cfg_node.left_hand_side: - 24 18340 9730 0.5 36.6 result.add(cfg_node) - 25 582 241 0.4 0.9 return result - -Total time: 0.053916 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 658 551 0.8 1.0 if isinstance(cfg_node, AssignmentNode): - 31 582 4296 7.4 8.0 JOIN = self.join(cfg_node) - 32 582 273 0.5 0.5 arrow_result = JOIN - 33 582 409 0.7 0.8 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 582 47140 81.0 87.4 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 582 357 0.6 0.7 arrow_result.add(cfg_node) - 36 582 362 0.6 0.7 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 76 528 6.9 1.0 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 11 08:42:50 2016 stats.prof - - 84825 function calls (78581 primitive calls) in 0.086 seconds - - Ordered by: cumulative time - List reduced from 747 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.086 0.086 {built-in method builtins.exec} - 1 0.000 0.000 0.086 0.086 ../pyt/pyt.py:1() - 44/9 0.000 0.000 0.037 0.004 :966(_find_and_load) - 44/9 0.000 0.000 0.037 0.004 :939(_find_and_load_unlocked) - 44/9 0.000 0.000 0.036 0.004 :659(_load_unlocked) - 38/9 0.000 0.000 0.036 0.004 :656(exec_module) - 54/10 0.000 0.000 0.034 0.003 :214(_call_with_frames_removed) - 7 0.000 0.000 0.026 0.004 ../pyt/cfg.py:236(__init__) - 63/7 0.002 0.000 0.026 0.004 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.003 0.000 0.026 0.001 /usr/local/lib/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.020054 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 3656 2798 0.8 14.0 JOIN = set() - 14 7101 4968 0.7 24.8 for ingoing in cfg_node.ingoing: - 15 3445 10665 3.1 53.2 JOIN |= ingoing.old_constraint - 16 3656 1623 0.4 8.1 return JOIN - -Total time: 1.29135 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 3478 2512 0.7 0.2 result = set() - 21 804342 377045 0.5 29.2 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 800864 424803 0.5 32.9 if _id is not cfg_node.left_hand_side: - 24 800044 485403 0.6 37.6 result.add(cfg_node) - 25 3478 1590 0.5 0.1 return result - -Total time: 2.10662 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 3656 4501 1.2 0.2 if isinstance(cfg_node, AssignmentNode): - 31 3478 37120 10.7 1.8 JOIN = self.join(cfg_node) - 32 3478 1644 0.5 0.1 arrow_result = JOIN - 33 3478 3123 0.9 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 3478 2053746 590.5 97.5 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 3478 2435 0.7 0.1 arrow_result.add(cfg_node) - 36 3478 2762 0.8 0.1 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 178 1292 7.3 0.1 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 11 08:42:51 2016 stats.prof - - 1046554 function calls (1025271 primitive calls) in 0.794 seconds - - Ordered by: cumulative time - List reduced from 750 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.794 0.794 {built-in method builtins.exec} - 1 0.000 0.000 0.794 0.794 ../pyt/pyt.py:1() - 1 0.000 0.000 0.524 0.524 ../pyt/fixed_point.py:54(analyse) - 14 0.255 0.018 0.524 0.037 ../pyt/fixed_point.py:28(fixpoint_runner) - 3656 0.007 0.000 0.268 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 3478 0.177 0.000 0.249 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 14 0.000 0.000 0.131 0.009 ../pyt/cfg.py:236(__init__) - 166/14 0.003 0.000 0.130 0.009 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.014 0.000 0.130 0.002 /usr/local/lib/python3.5/ast.py:241(visit) - 47/3 0.000 0.000 0.122 0.041 ../pyt/cfg.py:381(visit_Module) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.008095 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 2128 1415 0.7 17.5 JOIN = set() - 14 4125 2746 0.7 33.9 for ingoing in cfg_node.ingoing: - 15 1997 3046 1.5 37.6 JOIN |= ingoing.old_constraint - 16 2128 888 0.4 11.0 return JOIN - -Total time: 0.30566 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 2000 1280 0.6 0.4 result = set() - 21 206036 90598 0.4 29.6 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 204036 102302 0.5 33.5 if _id is not cfg_node.left_hand_side: - 24 203570 110652 0.5 36.2 result.add(cfg_node) - 25 2000 828 0.4 0.3 return result - -Total time: 0.542601 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 2128 2286 1.1 0.4 if isinstance(cfg_node, AssignmentNode): - 31 2000 17395 8.7 3.2 JOIN = self.join(cfg_node) - 32 2000 995 0.5 0.2 arrow_result = JOIN - 33 2000 1656 0.8 0.3 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 2000 516530 258.3 95.2 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 2000 1343 0.7 0.2 arrow_result.add(cfg_node) - 36 2000 1452 0.7 0.3 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 128 944 7.4 0.2 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 11 08:42:55 2016 stats.prof - - 311837 function calls (303466 primitive calls) in 0.277 seconds - - Ordered by: cumulative time - List reduced from 751 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.278 0.278 {built-in method builtins.exec} - 1 0.000 0.000 0.278 0.278 ../pyt/pyt.py:1() - 1 0.000 0.000 0.165 0.165 ../pyt/fixed_point.py:54(analyse) - 7 0.094 0.013 0.165 0.024 ../pyt/fixed_point.py:28(fixpoint_runner) - 2128 0.004 0.000 0.071 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 2000 0.046 0.000 0.063 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 7 0.000 0.000 0.061 0.009 ../pyt/cfg.py:236(__init__) - 113/7 0.002 0.000 0.061 0.009 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.005 0.000 0.060 0.002 /usr/local/lib/python3.5/ast.py:241(visit) - 30/3 0.000 0.000 0.054 0.018 ../pyt/cfg.py:381(visit_Module) - - - -############################################### Profiling 2016-08-11 15:16:20.611658 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.199352 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 11 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 11 @profile - 12 def join(self, cfg_node): - 13 53882 41174 0.8 20.7 JOIN = set() - 14 100291 74362 0.7 37.3 for ingoing in cfg_node.ingoing: - 15 46409 61079 1.3 30.6 JOIN |= ingoing.old_constraint - 16 53882 22737 0.4 11.4 return JOIN - -Total time: 2.83935 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 47426 34092 0.7 1.2 result = set() - 21 1966577 811851 0.4 28.6 for cfg_node in JOIN: - 22 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 23 1919151 901967 0.5 31.8 if _id is not cfg_node.left_hand_side: - 24 1910922 1072742 0.6 37.8 result.add(cfg_node) - 25 47426 18697 0.4 0.7 return result - -Total time: 5.77989 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 27 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 27 @profile - 28 def fixpointmethod(self, cfg_node): - 29 # Assignment: JOIN(v) arrow(id) join(v) - 30 53882 64655 1.2 1.1 if isinstance(cfg_node, AssignmentNode): - 31 47426 426010 9.0 7.4 JOIN = self.join(cfg_node) - 32 47426 22625 0.5 0.4 arrow_result = JOIN - 33 47426 38035 0.8 0.7 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 34 47426 5082041 107.2 87.9 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 35 47426 33748 0.7 0.6 arrow_result.add(cfg_node) - 36 47426 63677 1.3 1.1 cfg_node.new_constraint = arrow_result - 37 - 38 else: - 39 # Default case join(v) - 40 6456 49096 7.6 0.8 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 11 15:16:25 2016 stats.prof - - 2337803 function calls (2331559 primitive calls) in 4.504 seconds - - Ordered by: cumulative time - List reduced from 734 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.005 0.000 4.505 4.505 {built-in method builtins.exec} - 1 0.000 0.000 4.505 4.505 ../pyt/pyt.py:1() - 1 0.000 0.000 4.419 4.419 ../pyt/fixed_point.py:57(analyse) - 7 3.615 0.516 4.419 0.631 ../pyt/fixed_point.py:32(fixpoint_runner) - 53882 0.123 0.000 0.796 0.000 ../pyt/reaching_definitions_taint.py:25(fixpointmethod) - 47426 0.430 0.000 0.580 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 1958383 0.154 0.000 0.154 0.000 {method 'add' of 'set' objects} - 53882 0.079 0.000 0.079 0.000 ../pyt/reaching_definitions_taint.py:11(join) - 44/9 0.000 0.000 0.045 0.005 :966(_find_and_load) - 44/9 0.000 0.000 0.045 0.005 :939(_find_and_load_unlocked) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### ->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Rest could not be run took over 30 minutes <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< -############################################### Profiling 2016-08-12 10:44:38.439564 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.002 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 652 385 0.6 19.2 JOIN = set() - 13 1262 758 0.6 37.9 for ingoing in cfg_node.ingoing: - 14 610 610 1.0 30.5 JOIN |= ingoing.old_constraint - 15 652 247 0.4 12.3 return JOIN - -Total time: 0.027763 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 540 318 0.6 1.1 result = set() - 20 18969 7851 0.4 28.3 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 18429 8910 0.5 32.1 if _id is not cfg_node.left_hand_side: - 23 18351 10458 0.6 37.7 result.add(cfg_node) - 24 540 226 0.4 0.8 return result - -Total time: 0.053986 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 652 537 0.8 1.0 if isinstance(cfg_node, AssignmentNode): - 30 540 4140 7.7 7.7 JOIN = self.join(cfg_node) - 31 540 270 0.5 0.5 arrow_result = JOIN - 32 540 413 0.8 0.8 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 540 47147 87.3 87.3 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 540 326 0.6 0.6 arrow_result.add(cfg_node) - 35 540 362 0.7 0.7 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 112 791 7.1 1.5 cfg_node.new_constraint = self.join(cfg_node) - -Fri Aug 12 10:44:38 2016 stats.prof - - 85065 function calls (78821 primitive calls) in 0.104 seconds - - Ordered by: cumulative time - List reduced from 734 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.005 0.000 0.104 0.104 {built-in method builtins.exec} - 1 0.000 0.000 0.104 0.104 ../pyt/pyt.py:1() - 44/9 0.000 0.000 0.051 0.006 :966(_find_and_load) - 44/9 0.000 0.000 0.051 0.006 :939(_find_and_load_unlocked) - 44/9 0.000 0.000 0.050 0.006 :659(_load_unlocked) - 38/9 0.000 0.000 0.049 0.005 :656(exec_module) - 53/9 0.000 0.000 0.047 0.005 :214(_call_with_frames_removed) - 7 0.000 0.000 0.032 0.005 ../pyt/cfg.py:236(__init__) - 63/7 0.001 0.000 0.032 0.005 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.004 0.000 0.031 0.001 /usr/local/lib/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.018728 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 3614 2501 0.7 13.4 JOIN = set() - 13 7096 4799 0.7 25.6 for ingoing in cfg_node.ingoing: - 14 3482 9925 2.9 53.0 JOIN |= ingoing.old_constraint - 15 3614 1503 0.4 8.0 return JOIN - -Total time: 1.13656 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 3373 2237 0.7 0.2 result = set() - 20 804260 331135 0.4 29.1 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 800887 385626 0.5 33.9 if _id is not cfg_node.left_hand_side: - 23 800067 416192 0.5 36.6 result.add(cfg_node) - 24 3373 1370 0.4 0.1 return result - -Total time: 2.04951 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 3614 3641 1.0 0.2 if isinstance(cfg_node, AssignmentNode): - 30 3373 35163 10.4 1.7 JOIN = self.join(cfg_node) - 31 3373 1505 0.4 0.1 arrow_result = JOIN - 32 3373 2933 0.9 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 3373 1999637 592.8 97.6 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 3373 2197 0.7 0.1 arrow_result.add(cfg_node) - 35 3373 2614 0.8 0.1 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 241 1820 7.6 0.1 cfg_node.new_constraint = self.join(cfg_node) - -Fri Aug 12 10:44:39 2016 stats.prof - - 1048103 function calls (1026820 primitive calls) in 0.538 seconds - - Ordered by: cumulative time - List reduced from 751 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.539 0.539 {built-in method builtins.exec} - 1 0.000 0.000 0.539 0.539 ../pyt/pyt.py:1() - 1 0.000 0.000 0.313 0.313 ../pyt/fixed_point.py:53(analyse) - 14 0.032 0.002 0.313 0.022 ../pyt/fixed_point.py:32(fixpoint_runner) - 3614 0.007 0.000 0.279 0.000 ../pyt/reaching_definitions_taint.py:24(fixpointmethod) - 3373 0.185 0.000 0.259 0.000 ../pyt/reaching_definitions_taint.py:16(arrow) - 14 0.000 0.000 0.135 0.010 ../pyt/cfg.py:236(__init__) - 166/14 0.003 0.000 0.134 0.010 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.014 0.000 0.134 0.002 /usr/local/lib/python3.5/ast.py:241(visit) - 47/3 0.000 0.000 0.125 0.042 ../pyt/cfg.py:381(visit_Module) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.009342 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 2214 1576 0.7 16.9 JOIN = set() - 13 4370 3591 0.8 38.4 for ingoing in cfg_node.ingoing: - 14 2156 3332 1.5 35.7 JOIN |= ingoing.old_constraint - 15 2214 843 0.4 9.0 return JOIN - -Total time: 0.308219 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 2026 1299 0.6 0.4 result = set() - 20 216582 88340 0.4 28.7 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 214556 106752 0.5 34.6 if _id is not cfg_node.left_hand_side: - 23 214050 110978 0.5 36.0 result.add(cfg_node) - 24 2026 850 0.4 0.3 return result - -Total time: 0.552934 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 2214 2364 1.1 0.4 if isinstance(cfg_node, AssignmentNode): - 30 2026 18966 9.4 3.4 JOIN = self.join(cfg_node) - 31 2026 867 0.4 0.2 arrow_result = JOIN - 32 2026 1802 0.9 0.3 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 2026 524454 258.9 94.8 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 2026 1287 0.6 0.2 arrow_result.add(cfg_node) - 35 2026 1626 0.8 0.3 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 188 1568 8.3 0.3 cfg_node.new_constraint = self.join(cfg_node) - -Fri Aug 12 10:44:42 2016 stats.prof - - 323905 function calls (315534 primitive calls) in 0.194 seconds - - Ordered by: cumulative time - List reduced from 752 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.194 0.194 {built-in method builtins.exec} - 1 0.000 0.000 0.194 0.194 ../pyt/pyt.py:1() - 1 0.000 0.000 0.083 0.083 ../pyt/fixed_point.py:53(analyse) - 7 0.011 0.002 0.083 0.012 ../pyt/fixed_point.py:32(fixpoint_runner) - 2214 0.004 0.000 0.069 0.000 ../pyt/reaching_definitions_taint.py:24(fixpointmethod) - 2026 0.045 0.000 0.062 0.000 ../pyt/reaching_definitions_taint.py:16(arrow) - 7 0.000 0.000 0.060 0.009 ../pyt/cfg.py:236(__init__) - 113/7 0.002 0.000 0.060 0.009 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.005 0.000 0.059 0.002 /usr/local/lib/python3.5/ast.py:241(visit) - 30/3 0.000 0.000 0.052 0.017 ../pyt/cfg.py:381(visit_Module) - - - -############################################### Profiling 2016-08-18 10:23:59.655422 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.002118 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 652 423 0.6 20.0 JOIN = set() - 13 1262 786 0.6 37.1 for ingoing in cfg_node.ingoing: - 14 610 633 1.0 29.9 JOIN |= ingoing.old_constraint - 15 652 276 0.4 13.0 return JOIN - -Total time: 0.029002 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 540 363 0.7 1.3 result = set() - 20 18969 8526 0.4 29.4 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 18429 9398 0.5 32.4 if _id is not cfg_node.left_hand_side: - 23 18351 10494 0.6 36.2 result.add(cfg_node) - 24 540 221 0.4 0.8 return result - -Total time: 0.05723 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 652 598 0.9 1.0 if isinstance(cfg_node, AssignmentNode): - 30 540 4381 8.1 7.7 JOIN = self.join(cfg_node) - 31 540 287 0.5 0.5 arrow_result = JOIN - 32 540 410 0.8 0.7 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 540 49912 92.4 87.2 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 540 392 0.7 0.7 arrow_result.add(cfg_node) - 35 540 418 0.8 0.7 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 112 832 7.4 1.5 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 18 10:23:59 2016 stats.prof - - 85308 function calls (79064 primitive calls) in 0.101 seconds - - Ordered by: cumulative time - List reduced from 734 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.005 0.000 0.101 0.101 {built-in method builtins.exec} - 1 0.000 0.000 0.101 0.101 ../pyt/pyt.py:1() - 44/9 0.000 0.000 0.048 0.005 :966(_find_and_load) - 44/9 0.000 0.000 0.048 0.005 :939(_find_and_load_unlocked) - 44/9 0.000 0.000 0.047 0.005 :659(_load_unlocked) - 38/9 0.000 0.000 0.046 0.005 :656(exec_module) - 53/9 0.000 0.000 0.044 0.005 :214(_call_with_frames_removed) - 7 0.000 0.000 0.031 0.004 ../pyt/cfg.py:236(__init__) - 63/7 0.002 0.000 0.031 0.004 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.004 0.000 0.031 0.001 /usr/local/lib/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.019442 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 3614 2857 0.8 14.7 JOIN = set() - 13 7096 5094 0.7 26.2 for ingoing in cfg_node.ingoing: - 14 3482 9924 2.9 51.0 JOIN |= ingoing.old_constraint - 15 3614 1567 0.4 8.1 return JOIN - -Total time: 1.27334 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 3373 2596 0.8 0.2 result = set() - 20 804260 370963 0.5 29.1 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 800887 424856 0.5 33.4 if _id is not cfg_node.left_hand_side: - 23 800067 473427 0.6 37.2 result.add(cfg_node) - 24 3373 1496 0.4 0.1 return result - -Total time: 2.09352 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 3614 3917 1.1 0.2 if isinstance(cfg_node, AssignmentNode): - 30 3373 35525 10.5 1.7 JOIN = self.join(cfg_node) - 31 3373 1690 0.5 0.1 arrow_result = JOIN - 32 3373 2883 0.9 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 3373 2042614 605.6 97.6 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 3373 2407 0.7 0.1 arrow_result.add(cfg_node) - 35 3373 2695 0.8 0.1 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 241 1788 7.4 0.1 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 18 10:24:01 2016 stats.prof - - 1049695 function calls (1028412 primitive calls) in 0.644 seconds - - Ordered by: cumulative time - List reduced from 751 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.005 0.000 0.644 0.644 {built-in method builtins.exec} - 1 0.000 0.000 0.644 0.644 ../pyt/pyt.py:1() - 1 0.000 0.000 0.295 0.295 ../pyt/fixed_point.py:51(analyse) - 14 0.033 0.002 0.295 0.021 ../pyt/fixed_point.py:28(fixpoint_runner) - 3614 0.007 0.000 0.259 0.000 ../pyt/reaching_definitions_taint.py:24(fixpointmethod) - 3373 0.174 0.000 0.241 0.000 ../pyt/reaching_definitions_taint.py:16(arrow) - 14 0.000 0.000 0.235 0.017 ../pyt/cfg.py:236(__init__) - 166/14 0.006 0.000 0.235 0.017 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.024 0.000 0.234 0.004 /usr/local/lib/python3.5/ast.py:241(visit) - 47/3 0.000 0.000 0.224 0.075 ../pyt/cfg.py:381(visit_Module) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.009086 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 10 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 10 @profile - 11 def join(self, cfg_node): - 12 2214 1669 0.8 18.4 JOIN = set() - 13 4370 3233 0.7 35.6 for ingoing in cfg_node.ingoing: - 14 2156 3181 1.5 35.0 JOIN |= ingoing.old_constraint - 15 2214 1003 0.5 11.0 return JOIN - -Total time: 0.356335 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 17 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 17 @profile - 18 def arrow(self, JOIN, _id): - 19 2026 1499 0.7 0.4 result = set() - 20 216582 112749 0.5 31.6 for cfg_node in JOIN: - 21 # if _id is not found in the LHS of cfg_node, the node will not be deleted - 22 214556 114815 0.5 32.2 if _id is not cfg_node.left_hand_side: - 23 214050 126361 0.6 35.5 result.add(cfg_node) - 24 2026 911 0.4 0.3 return result - -Total time: 0.598776 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 26 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 26 @profile - 27 def fixpointmethod(self, cfg_node): - 28 # Assignment: JOIN(v) arrow(id) join(v) - 29 2214 2448 1.1 0.4 if isinstance(cfg_node, AssignmentNode): - 30 2026 18215 9.0 3.0 JOIN = self.join(cfg_node) - 31 2026 1123 0.6 0.2 arrow_result = JOIN - 32 2026 1793 0.9 0.3 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 33 2026 570531 281.6 95.3 arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - 34 2026 1370 0.7 0.2 arrow_result.add(cfg_node) - 35 2026 1686 0.8 0.3 cfg_node.new_constraint = arrow_result - 36 - 37 else: - 38 # Default case join(v) - 39 188 1610 8.6 0.3 cfg_node.new_constraint = self.join(cfg_node) - -Thu Aug 18 10:24:04 2016 stats.prof - - 324937 function calls (316566 primitive calls) in 0.203 seconds - - Ordered by: cumulative time - List reduced from 752 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 48/1 0.004 0.000 0.203 0.203 {built-in method builtins.exec} - 1 0.000 0.000 0.203 0.203 ../pyt/pyt.py:1() - 1 0.000 0.000 0.083 0.083 ../pyt/fixed_point.py:51(analyse) - 7 0.012 0.002 0.083 0.012 ../pyt/fixed_point.py:28(fixpoint_runner) - 2214 0.004 0.000 0.069 0.000 ../pyt/reaching_definitions_taint.py:24(fixpointmethod) - 2026 0.044 0.000 0.061 0.000 ../pyt/reaching_definitions_taint.py:16(arrow) - 7 0.000 0.000 0.061 0.009 ../pyt/cfg.py:236(__init__) - 113/7 0.002 0.000 0.061 0.009 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.005 0.000 0.061 0.002 /usr/local/lib/python3.5/ast.py:241(visit) - 30/3 0.000 0.000 0.054 0.018 ../pyt/cfg.py:381(visit_Module) - - - -############################################### Profiling 2016-08-30 10:25:44.817073 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.069463 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 8 1.1 0.0 q = self.cfg.nodes - 23 - 24 659 361 0.5 0.5 while q != []: - 25 652 438 0.7 0.6 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 652 65521 100.5 94.3 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 652 492 0.8 0.7 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 652 356 0.5 0.5 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 612 977 1.6 1.4 for node in self.analysis.dep(q[0]): - 37 285 278 1.0 0.4 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 327 248 0.8 0.4 self.lattice.table[q[0]] = y - 40 652 784 1.2 1.1 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.00122 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 652 1220 1.9 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 0.048607 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 540 231 0.4 0.5 r = JOIN - 26 11621 42935 3.7 88.3 for node in self.lattice.get_elements(JOIN): - 27 11081 5158 0.5 10.6 if node.left_hand_side == _id.left_hand_side: - 28 156 106 0.7 0.2 r = r ^ self.lattice.d[node] - 29 540 177 0.3 0.4 return r - -Total time: 0.061903 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 652 3097 4.8 5.0 JOIN = self.join(cfg_node) - 34 652 500 0.8 0.8 if isinstance(cfg_node, AssignmentNode): - 35 540 202 0.4 0.3 arrow_result = JOIN - 36 - 37 540 302 0.6 0.5 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 540 56973 105.5 92.0 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 540 416 0.8 0.7 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 540 339 0.6 0.5 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 112 74 0.7 0.1 self.lattice.table[cfg_node] = JOIN - -Tue Aug 30 10:25:45 2016 stats.prof - - 80451 function calls (74211 primitive calls) in 0.087 seconds - - Ordered by: cumulative time - List reduced from 757 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.004 0.000 0.087 0.087 {built-in method builtins.exec} - 1 0.000 0.000 0.087 0.087 ../pyt/pyt.py:1() - 45/10 0.000 0.000 0.039 0.004 :966(_find_and_load) - 45/10 0.000 0.000 0.039 0.004 :939(_find_and_load_unlocked) - 45/10 0.000 0.000 0.038 0.004 :659(_load_unlocked) - 39/10 0.000 0.000 0.037 0.004 :656(exec_module) - 56/12 0.000 0.000 0.035 0.003 :214(_call_with_frames_removed) - 7 0.000 0.000 0.025 0.004 ../pyt/cfg.py:236(__init__) - 63/7 0.001 0.000 0.025 0.004 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.003 0.000 0.025 0.001 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 2.26101 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 14 16 1.1 0.0 q = self.cfg.nodes - 23 - 24 3628 2255 0.6 0.1 while q != []: - 25 3614 2727 0.8 0.1 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 3614 2223851 615.3 98.4 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 3614 2856 0.8 0.1 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 3614 2047 0.6 0.1 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 3499 6451 1.8 0.3 for node in self.analysis.dep(q[0]): - 37 1697 2633 1.6 0.1 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1802 1485 0.8 0.1 self.lattice.table[q[0]] = y - 40 3614 16685 4.6 0.7 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.008056 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 3614 8056 2.2 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 2.0357 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 3373 1361 0.4 0.1 r = JOIN - 26 219544 1930711 8.8 94.8 for node in self.lattice.get_elements(JOIN): - 27 216171 101084 0.5 5.0 if node.left_hand_side == _id.left_hand_side: - 28 1640 1381 0.8 0.1 r = r ^ self.lattice.d[node] - 29 3373 1160 0.3 0.1 return r - -Total time: 2.20298 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 3614 18910 5.2 0.9 JOIN = self.join(cfg_node) - 34 3614 3010 0.8 0.1 if isinstance(cfg_node, AssignmentNode): - 35 3373 1313 0.4 0.1 arrow_result = JOIN - 36 - 37 3373 2628 0.8 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 3373 2171401 643.8 98.6 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 3373 3157 0.9 0.1 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 3373 2403 0.7 0.1 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 241 155 0.6 0.0 self.lattice.table[cfg_node] = JOIN - -Tue Aug 30 10:25:46 2016 stats.prof - - 479707 function calls (458428 primitive calls) in 0.602 seconds - - Ordered by: cumulative time - List reduced from 760 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.003 0.000 0.602 0.602 {built-in method builtins.exec} - 1 0.000 0.000 0.602 0.602 ../pyt/pyt.py:1() - 1 0.000 0.000 0.398 0.398 ../pyt/fixed_point.py:47(analyse) - 14 0.021 0.002 0.398 0.028 ../pyt/fixed_point.py:19(fixpoint_runner) - 3614 0.006 0.000 0.375 0.000 ../pyt/reaching_definitions_taint.py:29(fixpointmethod) - 3373 0.024 0.000 0.363 0.000 ../pyt/reaching_definitions_taint.py:22(arrow) - 3373 0.318 0.000 0.339 0.000 ../pyt/lattice.py:51(get_elements) - 14 0.000 0.000 0.119 0.008 ../pyt/cfg.py:236(__init__) - 166/14 0.003 0.000 0.119 0.008 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.013 0.000 0.118 0.002 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 1.02124 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 8 1.1 0.0 q = self.cfg.nodes - 23 - 24 2221 1400 0.6 0.1 while q != []: - 25 2214 1678 0.8 0.2 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 2214 1001477 452.3 98.1 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 2214 1776 0.8 0.2 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 2214 1243 0.6 0.1 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 2226 4046 1.8 0.4 for node in self.analysis.dep(q[0]): - 37 1086 1414 1.3 0.1 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1140 970 0.9 0.1 self.lattice.table[q[0]] = y - 40 2214 7228 3.3 0.7 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.004865 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 2214 4865 2.2 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 0.896483 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 2026 875 0.4 0.1 r = JOIN - 26 109372 841661 7.7 93.9 for node in self.lattice.get_elements(JOIN): - 27 107346 52415 0.5 5.8 if node.left_hand_side == _id.left_hand_side: - 28 950 806 0.8 0.1 r = r ^ self.lattice.d[node] - 29 2026 726 0.4 0.1 return r - -Total time: 0.988904 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 2214 11317 5.1 1.1 JOIN = self.join(cfg_node) - 34 2214 1853 0.8 0.2 if isinstance(cfg_node, AssignmentNode): - 35 2026 802 0.4 0.1 arrow_result = JOIN - 36 - 37 2026 1472 0.7 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 2026 970265 478.9 98.1 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 2026 1764 0.9 0.2 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 2026 1325 0.7 0.1 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 188 106 0.6 0.0 self.lattice.table[cfg_node] = JOIN - -Tue Aug 30 10:25:49 2016 stats.prof - - 226558 function calls (218191 primitive calls) in 0.274 seconds - - Ordered by: cumulative time - List reduced from 761 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.003 0.000 0.274 0.274 {built-in method builtins.exec} - 1 0.000 0.000 0.274 0.274 ../pyt/pyt.py:1() - 1 0.000 0.000 0.169 0.169 ../pyt/fixed_point.py:47(analyse) - 7 0.010 0.001 0.169 0.024 ../pyt/fixed_point.py:19(fixpoint_runner) - 2214 0.004 0.000 0.158 0.000 ../pyt/reaching_definitions_taint.py:29(fixpointmethod) - 2026 0.012 0.000 0.152 0.000 ../pyt/reaching_definitions_taint.py:22(arrow) - 2026 0.129 0.000 0.140 0.000 ../pyt/lattice.py:51(get_elements) - 7 0.000 0.000 0.053 0.008 ../pyt/cfg.py:236(__init__) - 113/7 0.001 0.000 0.053 0.008 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.005 0.000 0.053 0.002 /usr/lib64/python3.5/ast.py:241(visit) - - - -############################################### Profiling 2016-09-01 13:59:09.479503 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.072167 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 7 1.0 0.0 q = self.cfg.nodes - 23 - 24 659 369 0.6 0.5 while q != []: - 25 652 539 0.8 0.7 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 652 67639 103.7 93.7 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 652 480 0.7 0.7 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 652 762 1.2 1.1 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 612 1027 1.7 1.4 for node in self.analysis.dep(q[0]): - 37 285 251 0.9 0.3 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 327 263 0.8 0.4 self.lattice.table[q[0]] = y - 40 652 830 1.3 1.2 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.001285 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 652 1285 2.0 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 0.049356 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 540 217 0.4 0.4 r = JOIN - 26 11621 43488 3.7 88.1 for node in self.lattice.get_elements(JOIN): - 27 11081 5349 0.5 10.8 if node.left_hand_side == _id.left_hand_side: - 28 156 112 0.7 0.2 r = r ^ self.lattice.d[node] - 29 540 190 0.4 0.4 return r - -Total time: 0.0639 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 652 3179 4.9 5.0 JOIN = self.join(cfg_node) - 34 652 529 0.8 0.8 if isinstance(cfg_node, AssignmentNode): - 35 540 211 0.4 0.3 arrow_result = JOIN - 36 - 37 540 352 0.7 0.6 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 540 58747 108.8 91.9 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 540 447 0.8 0.7 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 540 367 0.7 0.6 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 112 68 0.6 0.1 self.lattice.table[cfg_node] = JOIN - -Thu Sep 1 13:59:09 2016 stats.prof - - 81594 function calls (75354 primitive calls) in 0.117 seconds - - Ordered by: cumulative time - List reduced from 761 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.005 0.000 0.117 0.117 {built-in method builtins.exec} - 1 0.000 0.000 0.117 0.117 ../pyt/pyt.py:1() - 45/10 0.000 0.000 0.057 0.006 :966(_find_and_load) - 45/10 0.000 0.000 0.057 0.006 :939(_find_and_load_unlocked) - 45/10 0.000 0.000 0.055 0.006 :659(_load_unlocked) - 39/10 0.000 0.000 0.055 0.005 :656(exec_module) - 57/13 0.000 0.000 0.052 0.004 :214(_call_with_frames_removed) - 7 0.000 0.000 0.032 0.005 ../pyt/cfg.py:236(__init__) - 63/7 0.001 0.000 0.031 0.004 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.004 0.000 0.031 0.001 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 2.22713 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 14 14 1.0 0.0 q = self.cfg.nodes - 23 - 24 3628 2285 0.6 0.1 while q != []: - 25 3614 3431 0.9 0.2 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 3614 2186964 605.1 98.2 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 3614 2946 0.8 0.1 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 3614 4554 1.3 0.2 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 3499 6172 1.8 0.3 for node in self.analysis.dep(q[0]): - 37 1697 2499 1.5 0.1 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1802 1525 0.8 0.1 self.lattice.table[q[0]] = y - 40 3614 16735 4.6 0.8 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.008001 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 3614 8001 2.2 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 1.99811 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 3373 1350 0.4 0.1 r = JOIN - 26 219544 1894684 8.6 94.8 for node in self.lattice.get_elements(JOIN): - 27 216171 99447 0.5 5.0 if node.left_hand_side == _id.left_hand_side: - 28 1640 1497 0.9 0.1 r = r ^ self.lattice.d[node] - 29 3373 1134 0.3 0.1 return r - -Total time: 2.16572 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 3614 18819 5.2 0.9 JOIN = self.join(cfg_node) - 34 3614 2983 0.8 0.1 if isinstance(cfg_node, AssignmentNode): - 35 3373 1270 0.4 0.1 arrow_result = JOIN - 36 - 37 3373 2529 0.7 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 3373 2134597 632.8 98.6 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 3373 3140 0.9 0.1 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 3373 2227 0.7 0.1 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 241 158 0.7 0.0 self.lattice.table[cfg_node] = JOIN - -Thu Sep 1 13:59:10 2016 stats.prof - - 485366 function calls (464087 primitive calls) in 0.654 seconds - - Ordered by: cumulative time - List reduced from 764 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.004 0.000 0.654 0.654 {built-in method builtins.exec} - 1 0.000 0.000 0.654 0.654 ../pyt/pyt.py:1() - 1 0.000 0.000 0.410 0.410 ../pyt/fixed_point.py:47(analyse) - 14 0.023 0.002 0.409 0.029 ../pyt/fixed_point.py:19(fixpoint_runner) - 3614 0.006 0.000 0.384 0.000 ../pyt/reaching_definitions_taint.py:29(fixpointmethod) - 3373 0.026 0.000 0.373 0.000 ../pyt/reaching_definitions_taint.py:22(arrow) - 3373 0.326 0.000 0.347 0.000 ../pyt/lattice.py:53(get_elements) - 14 0.000 0.000 0.145 0.010 ../pyt/cfg.py:236(__init__) - 166/14 0.004 0.000 0.145 0.010 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.016 0.000 0.144 0.003 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.976384 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 8 1.1 0.0 q = self.cfg.nodes - 23 - 24 2221 1375 0.6 0.1 while q != []: - 25 2214 1990 0.9 0.2 x_i = self.lattice.table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 2214 955243 431.5 97.8 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 2214 1802 0.8 0.2 y = self.lattice.table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 2214 2712 1.2 0.3 if y != x_i: - 35 # for (v in dep(v_i)) q.append(v): - 36 2226 3941 1.8 0.4 for node in self.analysis.dep(q[0]): - 37 1086 999 0.9 0.1 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1140 935 0.8 0.1 self.lattice.table[q[0]] = y - 40 2214 7379 3.3 0.8 q = q[1:] # q = q.tail() - -Total time: 0 s -File: ../pyt/fixed_point.py -Function: fixpoint_iteration at line 42 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 42 @profile - 43 def fixpoint_iteration(self): - 44 """A fixpoint iteration.""" - 45 for node in self.cfg.nodes: - 46 self.analysis.fixpointmethod(node) - -Total time: 0.00497 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def join(self, cfg_node): - 18 #if isinstance(cfg_node, AssignmentNode): - 19 # return self.lattice.join([cfg_node], self.get_assignment_nodes(cfg_node.ingoing)) - 20 #else: - 21 2214 4970 2.2 100.0 return self.lattice.constraint_join(cfg_node.ingoing) - -Total time: 0.844564 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 23 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 23 @profile - 24 def arrow(self, JOIN, _id): - 25 2026 860 0.4 0.1 r = JOIN - 26 109372 790705 7.2 93.6 for node in self.lattice.get_elements(JOIN): - 27 107346 51460 0.5 6.1 if node.left_hand_side == _id.left_hand_side: - 28 950 837 0.9 0.1 r = r ^ self.lattice.d[node] - 29 2026 702 0.3 0.1 return r - -Total time: 0.941991 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 31 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 31 @profile - 32 def fixpointmethod(self, cfg_node): - 33 2214 11688 5.3 1.2 JOIN = self.join(cfg_node) - 34 2214 1853 0.8 0.2 if isinstance(cfg_node, AssignmentNode): - 35 2026 783 0.4 0.1 arrow_result = JOIN - 36 - 37 2026 1545 0.8 0.2 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 38 2026 922854 455.5 98.0 arrow_result = self.arrow(JOIN, cfg_node) - 39 - 40 2026 1768 0.9 0.2 arrow_result = arrow_result | self.lattice.d[cfg_node] - 41 2026 1376 0.7 0.1 self.lattice.table[cfg_node] = arrow_result - 42 else: - 43 188 124 0.7 0.0 self.lattice.table[cfg_node] = JOIN - -Thu Sep 1 13:59:13 2016 stats.prof - - 229906 function calls (221539 primitive calls) in 0.328 seconds - - Ordered by: cumulative time - List reduced from 766 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 49/1 0.004 0.000 0.328 0.328 {built-in method builtins.exec} - 1 0.000 0.000 0.328 0.328 ../pyt/pyt.py:1() - 1 0.000 0.000 0.180 0.180 ../pyt/fixed_point.py:47(analyse) - 7 0.012 0.002 0.180 0.026 ../pyt/fixed_point.py:19(fixpoint_runner) - 2214 0.004 0.000 0.167 0.000 ../pyt/reaching_definitions_taint.py:29(fixpointmethod) - 2026 0.013 0.000 0.160 0.000 ../pyt/reaching_definitions_taint.py:22(arrow) - 2026 0.137 0.000 0.147 0.000 ../pyt/lattice.py:53(get_elements) - 7 0.000 0.000 0.081 0.012 ../pyt/cfg.py:236(__init__) - 113/7 0.002 0.000 0.081 0.012 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.007 0.000 0.081 0.003 /usr/lib64/python3.5/ast.py:241(visit) - - - -############################################### Profiling 2016-09-06 12:07:06.419946 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.071465 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 7 1.0 0.0 q = self.cfg.nodes - 23 - 24 659 402 0.6 0.6 while q != []: - 25 652 415 0.6 0.6 x_i = constraint_table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 652 66983 102.7 93.7 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 652 460 0.7 0.6 y = constraint_table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 652 808 1.2 1.1 if not self.analysis.equal(y, x_i): - 35 # for (v in dep(v_i)) q.append(v): - 36 612 1012 1.7 1.4 for node in self.analysis.dep(q[0]): - 37 285 256 0.9 0.4 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 327 244 0.7 0.3 constraint_table[q[0]] = y - 40 652 878 1.3 1.2 q = q[1:] # q = q.tail() - -Total time: 0.001261 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 12 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 12 @profile - 13 def join(self, cfg_node): - 14 """Joins all constraints of the ingoing nodes and returns them. - 15 This represents the JOIN auxiliary definition from Schwartzbach.""" - 16 652 1261 1.9 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 0.049712 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 """Removes all assignments from JOIN that has _id on the left hand side. - 21 This represents the arrow id definition from Schwartzbach.""" - 22 540 237 0.4 0.5 r = JOIN - 23 11621 43736 3.8 88.0 for node in self.lattice.get_elements(JOIN): - 24 11081 5422 0.5 10.9 if node.left_hand_side == _id.left_hand_side: - 25 156 138 0.9 0.3 r = r ^ self.lattice.el2bv[node] - 26 540 179 0.3 0.4 return r - -Total time: 0.063448 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 28 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 28 @profile - 29 def fixpointmethod(self, cfg_node): - 30 652 3192 4.9 5.0 JOIN = self.join(cfg_node) - 31 # Assignment check - 32 652 492 0.8 0.8 if isinstance(cfg_node, AssignmentNode): - 33 540 210 0.4 0.3 arrow_result = JOIN - 34 - 35 # Reassignment check: - 36 540 337 0.6 0.5 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 37 540 58367 108.1 92.0 arrow_result = self.arrow(JOIN, cfg_node) - 38 - 39 540 457 0.8 0.7 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 40 540 326 0.6 0.5 constraint_table[cfg_node] = arrow_result - 41 # Default case: - 42 else: - 43 112 67 0.6 0.1 constraint_table[cfg_node] = JOIN - -Tue Sep 6 12:07:06 2016 stats.prof - - 82573 function calls (76322 primitive calls) in 0.088 seconds - - Ordered by: cumulative time - List reduced from 747 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 50/1 0.004 0.000 0.089 0.089 {built-in method builtins.exec} - 1 0.000 0.000 0.089 0.089 ../pyt/pyt.py:1() - 46/9 0.000 0.000 0.040 0.004 :966(_find_and_load) - 46/9 0.000 0.000 0.039 0.004 :939(_find_and_load_unlocked) - 46/9 0.000 0.000 0.038 0.004 :659(_load_unlocked) - 40/9 0.000 0.000 0.038 0.004 :656(exec_module) - 55/9 0.000 0.000 0.037 0.004 :214(_call_with_frames_removed) - 7 0.000 0.000 0.025 0.004 ../pyt/cfg.py:236(__init__) - 63/7 0.001 0.000 0.025 0.004 ../pyt/cfg.py:354(stmt_star_handler) - 3524/31 0.003 0.000 0.025 0.001 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 2.28445 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 14 10 0.7 0.0 q = self.cfg.nodes - 23 - 24 3628 2237 0.6 0.1 while q != []: - 25 3614 2500 0.7 0.1 x_i = constraint_table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 3614 2246194 621.5 98.3 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 3614 2506 0.7 0.1 y = constraint_table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 3614 4813 1.3 0.2 if not self.analysis.equal(y, x_i): - 35 # for (v in dep(v_i)) q.append(v): - 36 3499 6194 1.8 0.3 for node in self.analysis.dep(q[0]): - 37 1697 1787 1.1 0.1 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1802 1290 0.7 0.1 constraint_table[q[0]] = y - 40 3614 16915 4.7 0.7 q = q[1:] # q = q.tail() - -Total time: 0.007693 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 12 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 12 @profile - 13 def join(self, cfg_node): - 14 """Joins all constraints of the ingoing nodes and returns them. - 15 This represents the JOIN auxiliary definition from Schwartzbach.""" - 16 3614 7693 2.1 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 2.04542 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 """Removes all assignments from JOIN that has _id on the left hand side. - 21 This represents the arrow id definition from Schwartzbach.""" - 22 3373 1339 0.4 0.1 r = JOIN - 23 219544 1936173 8.8 94.7 for node in self.lattice.get_elements(JOIN): - 24 216171 105314 0.5 5.1 if node.left_hand_side == _id.left_hand_side: - 25 1640 1377 0.8 0.1 r = r ^ self.lattice.el2bv[node] - 26 3373 1219 0.4 0.1 return r - -Total time: 2.22468 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 28 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 28 @profile - 29 def fixpointmethod(self, cfg_node): - 30 3614 18448 5.1 0.8 JOIN = self.join(cfg_node) - 31 # Assignment check - 32 3614 2868 0.8 0.1 if isinstance(cfg_node, AssignmentNode): - 33 3373 1334 0.4 0.1 arrow_result = JOIN - 34 - 35 # Reassignment check: - 36 3373 2671 0.8 0.1 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 37 3373 2193781 650.4 98.6 arrow_result = self.arrow(JOIN, cfg_node) - 38 - 39 3373 3096 0.9 0.1 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 40 3373 2352 0.7 0.1 constraint_table[cfg_node] = arrow_result - 41 # Default case: - 42 else: - 43 241 126 0.5 0.0 constraint_table[cfg_node] = JOIN - -Tue Sep 6 12:07:07 2016 stats.prof - - 490803 function calls (469512 primitive calls) in 0.627 seconds - - Ordered by: cumulative time - List reduced from 764 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 50/1 0.003 0.000 0.628 0.628 {built-in method builtins.exec} - 1 0.000 0.000 0.628 0.628 ../pyt/pyt.py:1() - 1 0.000 0.000 0.423 0.423 ../pyt/fixed_point.py:42(analyse) - 14 0.022 0.002 0.421 0.030 ../pyt/fixed_point.py:19(fixpoint_runner) - 3614 0.006 0.000 0.396 0.000 ../pyt/reaching_definitions_taint.py:26(fixpointmethod) - 3373 0.025 0.000 0.384 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 3373 0.337 0.000 0.359 0.000 ../pyt/lattice.py:12(get_elements) - 14 0.000 0.000 0.120 0.009 ../pyt/cfg.py:236(__init__) - 166/14 0.003 0.000 0.119 0.009 ../pyt/cfg.py:354(stmt_star_handler) - 15012/55 0.013 0.000 0.119 0.002 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.959401 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def fixpoint_runner(self): - 21 """Work list algorithm that runs the fixpoint algorithm.""" - 22 7 6 0.9 0.0 q = self.cfg.nodes - 23 - 24 2221 1446 0.7 0.2 while q != []: - 25 2214 1523 0.7 0.2 x_i = constraint_table[q[0]] # to get old constraint has to be here before fixpointmethod - 26 - 27 # y = F_i(x_1, ..., x_n): - 28 2214 938271 423.8 97.8 self.analysis.fixpointmethod(q[0]) - 29 #y = q[0].new_constraint - 30 2214 1628 0.7 0.2 y = constraint_table[q[0]] - 31 #x_i = q[0].old_constraint - 32 - 33 - 34 2214 2819 1.3 0.3 if not self.analysis.equal(y, x_i): - 35 # for (v in dep(v_i)) q.append(v): - 36 2226 4031 1.8 0.4 for node in self.analysis.dep(q[0]): - 37 1086 1524 1.4 0.2 q.append(node) - 38 #q[0].old_constraint = q[0].new_constraint # x_1 = y - 39 1140 835 0.7 0.1 constraint_table[q[0]] = y - 40 2214 7318 3.3 0.8 q = q[1:] # q = q.tail() - -Total time: 0.004699 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 12 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 12 @profile - 13 def join(self, cfg_node): - 14 """Joins all constraints of the ingoing nodes and returns them. - 15 This represents the JOIN auxiliary definition from Schwartzbach.""" - 16 2214 4699 2.1 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 0.835913 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 18 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 18 @profile - 19 def arrow(self, JOIN, _id): - 20 """Removes all assignments from JOIN that has _id on the left hand side. - 21 This represents the arrow id definition from Schwartzbach.""" - 22 2026 861 0.4 0.1 r = JOIN - 23 109372 782369 7.2 93.6 for node in self.lattice.get_elements(JOIN): - 24 107346 51234 0.5 6.1 if node.left_hand_side == _id.left_hand_side: - 25 950 766 0.8 0.1 r = r ^ self.lattice.el2bv[node] - 26 2026 683 0.3 0.1 return r - -Total time: 0.925831 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 28 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 28 @profile - 29 def fixpointmethod(self, cfg_node): - 30 2214 11338 5.1 1.2 JOIN = self.join(cfg_node) - 31 # Assignment check - 32 2214 1848 0.8 0.2 if isinstance(cfg_node, AssignmentNode): - 33 2026 781 0.4 0.1 arrow_result = JOIN - 34 - 35 # Reassignment check: - 36 2026 1515 0.7 0.2 if not cfg_node.left_hand_side in cfg_node.right_hand_side_variables: - 37 2026 907091 447.7 98.0 arrow_result = self.arrow(JOIN, cfg_node) - 38 - 39 2026 1786 0.9 0.2 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 40 2026 1364 0.7 0.1 constraint_table[cfg_node] = arrow_result - 41 # Default case: - 42 else: - 43 188 108 0.6 0.0 constraint_table[cfg_node] = JOIN - -Tue Sep 6 12:07:10 2016 stats.prof - - 233220 function calls (224841 primitive calls) in 0.313 seconds - - Ordered by: cumulative time - List reduced from 765 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 50/1 0.003 0.000 0.313 0.313 {built-in method builtins.exec} - 1 0.000 0.000 0.313 0.313 ../pyt/pyt.py:1() - 1 0.000 0.000 0.180 0.180 ../pyt/fixed_point.py:42(analyse) - 7 0.010 0.001 0.179 0.026 ../pyt/fixed_point.py:19(fixpoint_runner) - 2214 0.004 0.000 0.167 0.000 ../pyt/reaching_definitions_taint.py:26(fixpointmethod) - 2026 0.014 0.000 0.161 0.000 ../pyt/reaching_definitions_taint.py:17(arrow) - 2026 0.137 0.000 0.147 0.000 ../pyt/lattice.py:12(get_elements) - 7 0.000 0.000 0.080 0.011 ../pyt/cfg.py:236(__init__) - 113/7 0.002 0.000 0.079 0.011 ../pyt/cfg.py:354(stmt_star_handler) - 5140/31 0.007 0.000 0.079 0.003 /usr/lib64/python3.5/ast.py:241(visit) - - - -############################################### Profiling 2016-09-13 17:20:42.332121 ############################################### - -##### Profiling test_projects/flaskbb_lite_1/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_1/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_1/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.070036 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def fixpoint_runner(self): - 18 """Work list algorithm that runs the fixpoint algorithm.""" - 19 7 7 1.0 0.0 q = self.cfg.nodes - 20 - 21 659 387 0.6 0.6 while q != []: - 22 652 383 0.6 0.5 x_i = constraint_table[q[0]] - 23 - 24 # y = F_i(x_1, ..., x_n): - 25 652 65752 100.8 93.9 self.analysis.fixpointmethod(q[0]) - 26 # y = q[0].new_constraint - 27 652 441 0.7 0.6 y = constraint_table[q[0]] - 28 # x_i = q[0].old_constraint - 29 - 30 652 794 1.2 1.1 if not self.analysis.equal(y, x_i): - 31 # for (v in dep(v_i)) q.append(v): - 32 612 989 1.6 1.4 for node in self.analysis.dep(q[0]): - 33 285 240 0.8 0.3 q.append(node) - 34 # q[0].old_constraint = q[0].new_constraint # x_1 = y - 35 327 218 0.7 0.3 constraint_table[q[0]] = y - 36 652 825 1.3 1.2 q = q[1:] # q = q.tail() - -Total time: 0.001186 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 13 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 13 @profile - 14 def join(self, cfg_node): - 15 """Joins all constraints of the ingoing nodes and returns them. - 16 This represents the JOIN auxiliary definition from Schwartzbach.""" - 17 652 1186 1.8 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 0.048351 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def arrow(self, JOIN, _id): - 21 """Removes all assignments from JOIN that has _id on the left hand side. - 22 This represents the arrow id definition from Schwartzbach.""" - 23 540 251 0.5 0.5 r = JOIN - 24 11621 42696 3.7 88.3 for node in self.lattice.get_elements(JOIN): - 25 11081 5115 0.5 10.6 if node.left_hand_side == _id.left_hand_side: - 26 156 113 0.7 0.2 r = r ^ self.lattice.el2bv[node] - 27 540 176 0.3 0.4 return r - -Total time: 0.062018 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 29 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 29 @profile - 30 def fixpointmethod(self, cfg_node): - 31 652 3119 4.8 5.0 JOIN = self.join(cfg_node) - 32 # Assignment check - 33 652 499 0.8 0.8 if isinstance(cfg_node, AssignmentNode): - 34 540 206 0.4 0.3 arrow_result = JOIN - 35 - 36 # Reassignment check: - 37 540 251 0.5 0.4 if cfg_node.left_hand_side not in\ - 38 540 269 0.5 0.4 cfg_node.right_hand_side_variables: - 39 540 56836 105.3 91.6 arrow_result = self.arrow(JOIN, cfg_node) - 40 - 41 540 442 0.8 0.7 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 42 540 328 0.6 0.5 constraint_table[cfg_node] = arrow_result - 43 # Default case: - 44 else: - 45 112 68 0.6 0.1 constraint_table[cfg_node] = JOIN - -Tue Sep 13 17:20:42 2016 stats.prof - - 83009 function calls (76764 primitive calls) in 0.099 seconds - - Ordered by: cumulative time - List reduced from 751 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 51/1 0.004 0.000 0.099 0.099 {built-in method builtins.exec} - 1 0.000 0.000 0.099 0.099 ../pyt/pyt.py:1() - 47/11 0.000 0.000 0.042 0.004 :966(_find_and_load) - 47/11 0.000 0.000 0.041 0.004 :939(_find_and_load_unlocked) - 47/11 0.000 0.000 0.040 0.004 :659(_load_unlocked) - 41/11 0.000 0.000 0.040 0.004 :656(exec_module) - 56/11 0.000 0.000 0.038 0.003 :214(_call_with_frames_removed) - 7 0.000 0.000 0.032 0.005 ../pyt/cfg.py:233(__init__) - 63/7 0.001 0.000 0.032 0.005 ../pyt/cfg.py:377(stmt_star_handler) - 3522/31 0.004 0.000 0.032 0.001 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_2/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_2/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_2/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 2.31025 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def fixpoint_runner(self): - 18 """Work list algorithm that runs the fixpoint algorithm.""" - 19 14 12 0.9 0.0 q = self.cfg.nodes - 20 - 21 3628 2384 0.7 0.1 while q != []: - 22 3614 2619 0.7 0.1 x_i = constraint_table[q[0]] - 23 - 24 # y = F_i(x_1, ..., x_n): - 25 3614 2270496 628.3 98.3 self.analysis.fixpointmethod(q[0]) - 26 # y = q[0].new_constraint - 27 3614 2513 0.7 0.1 y = constraint_table[q[0]] - 28 # x_i = q[0].old_constraint - 29 - 30 3614 5159 1.4 0.2 if not self.analysis.equal(y, x_i): - 31 # for (v in dep(v_i)) q.append(v): - 32 3499 6344 1.8 0.3 for node in self.analysis.dep(q[0]): - 33 1697 1823 1.1 0.1 q.append(node) - 34 # q[0].old_constraint = q[0].new_constraint # x_1 = y - 35 1802 1324 0.7 0.1 constraint_table[q[0]] = y - 36 3614 17576 4.9 0.8 q = q[1:] # q = q.tail() - -Total time: 0.008139 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 13 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 13 @profile - 14 def join(self, cfg_node): - 15 """Joins all constraints of the ingoing nodes and returns them. - 16 This represents the JOIN auxiliary definition from Schwartzbach.""" - 17 3614 8139 2.3 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 2.06312 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def arrow(self, JOIN, _id): - 21 """Removes all assignments from JOIN that has _id on the left hand side. - 22 This represents the arrow id definition from Schwartzbach.""" - 23 3373 1320 0.4 0.1 r = JOIN - 24 219544 1954633 8.9 94.7 for node in self.lattice.get_elements(JOIN): - 25 216171 104412 0.5 5.1 if node.left_hand_side == _id.left_hand_side: - 26 1640 1575 1.0 0.1 r = r ^ self.lattice.el2bv[node] - 27 3373 1176 0.3 0.1 return r - -Total time: 2.24694 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 29 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 29 @profile - 30 def fixpointmethod(self, cfg_node): - 31 3614 19579 5.4 0.9 JOIN = self.join(cfg_node) - 32 # Assignment check - 33 3614 3085 0.9 0.1 if isinstance(cfg_node, AssignmentNode): - 34 3373 1367 0.4 0.1 arrow_result = JOIN - 35 - 36 # Reassignment check: - 37 3373 1761 0.5 0.1 if cfg_node.left_hand_side not in\ - 38 3373 2653 0.8 0.1 cfg_node.right_hand_side_variables: - 39 3373 2212710 656.0 98.5 arrow_result = self.arrow(JOIN, cfg_node) - 40 - 41 3373 3396 1.0 0.2 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 42 3373 2249 0.7 0.1 constraint_table[cfg_node] = arrow_result - 43 # Default case: - 44 else: - 45 241 140 0.6 0.0 constraint_table[cfg_node] = JOIN - -Tue Sep 13 17:20:43 2016 stats.prof - - 491218 function calls (469940 primitive calls) in 0.677 seconds - - Ordered by: cumulative time - List reduced from 768 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 51/1 0.003 0.000 0.677 0.677 {built-in method builtins.exec} - 1 0.000 0.000 0.677 0.677 ../pyt/pyt.py:1() - 1 0.000 0.000 0.461 0.461 ../pyt/fixed_point.py:38(analyse) - 14 0.022 0.002 0.459 0.033 ../pyt/fixed_point.py:16(fixpoint_runner) - 3614 0.006 0.000 0.434 0.000 ../pyt/reaching_definitions_taint.py:27(fixpointmethod) - 3373 0.025 0.000 0.422 0.000 ../pyt/reaching_definitions_taint.py:18(arrow) - 3373 0.376 0.000 0.397 0.000 ../pyt/lattice.py:14(get_elements) - 14 0.000 0.000 0.126 0.009 ../pyt/cfg.py:233(__init__) - 166/14 0.003 0.000 0.125 0.009 ../pyt/cfg.py:377(stmt_star_handler) - 15003/55 0.014 0.000 0.125 0.002 /usr/lib64/python3.5/ast.py:241(visit) - - -##### Profiling test_projects/flaskbb_lite_3/flaskbb/app.py ##### - -1 vulnerability found: -Vulnerability 1: -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > User input at line 249, trigger word "get(": - param = request.args.get('param', 'not set') -Reassigned in: - File: test_projects/flaskbb_lite_3/flaskbb/app.py - > Line 253: ret_make_response = resp -File: test_projects/flaskbb_lite_3/flaskbb/app.py - > reaches line 252, trigger word "replace(": - resp = make_response(html.replace('{{ param }}', param)) - -Wrote profile results to pyt.py.lprof -Timer unit: 1e-06 s - -Total time: 0.980438 s -File: ../pyt/fixed_point.py -Function: fixpoint_runner at line 16 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 16 @profile - 17 def fixpoint_runner(self): - 18 """Work list algorithm that runs the fixpoint algorithm.""" - 19 7 7 1.0 0.0 q = self.cfg.nodes - 20 - 21 2221 1487 0.7 0.2 while q != []: - 22 2214 1630 0.7 0.2 x_i = constraint_table[q[0]] - 23 - 24 # y = F_i(x_1, ..., x_n): - 25 2214 958176 432.8 97.7 self.analysis.fixpointmethod(q[0]) - 26 # y = q[0].new_constraint - 27 2214 1670 0.8 0.2 y = constraint_table[q[0]] - 28 # x_i = q[0].old_constraint - 29 - 30 2214 3024 1.4 0.3 if not self.analysis.equal(y, x_i): - 31 # for (v in dep(v_i)) q.append(v): - 32 2226 4353 2.0 0.4 for node in self.analysis.dep(q[0]): - 33 1086 1609 1.5 0.2 q.append(node) - 34 # q[0].old_constraint = q[0].new_constraint # x_1 = y - 35 1140 948 0.8 0.1 constraint_table[q[0]] = y - 36 2214 7534 3.4 0.8 q = q[1:] # q = q.tail() - -Total time: 0.004956 s -File: ../pyt/reaching_definitions_taint.py -Function: join at line 13 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 13 @profile - 14 def join(self, cfg_node): - 15 """Joins all constraints of the ingoing nodes and returns them. - 16 This represents the JOIN auxiliary definition from Schwartzbach.""" - 17 2214 4956 2.2 100.0 return constraint_join(cfg_node.ingoing) - -Total time: 0.852994 s -File: ../pyt/reaching_definitions_taint.py -Function: arrow at line 19 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 19 @profile - 20 def arrow(self, JOIN, _id): - 21 """Removes all assignments from JOIN that has _id on the left hand side. - 22 This represents the arrow id definition from Schwartzbach.""" - 23 2026 869 0.4 0.1 r = JOIN - 24 109372 798781 7.3 93.6 for node in self.lattice.get_elements(JOIN): - 25 107346 51788 0.5 6.1 if node.left_hand_side == _id.left_hand_side: - 26 950 840 0.9 0.1 r = r ^ self.lattice.el2bv[node] - 27 2026 716 0.4 0.1 return r - -Total time: 0.944209 s -File: ../pyt/reaching_definitions_taint.py -Function: fixpointmethod at line 29 - -Line # Hits Time Per Hit % Time Line Contents -============================================================== - 29 @profile - 30 def fixpointmethod(self, cfg_node): - 31 2214 11840 5.3 1.3 JOIN = self.join(cfg_node) - 32 # Assignment check - 33 2214 1898 0.9 0.2 if isinstance(cfg_node, AssignmentNode): - 34 2026 824 0.4 0.1 arrow_result = JOIN - 35 - 36 # Reassignment check: - 37 2026 1047 0.5 0.1 if cfg_node.left_hand_side not in\ - 38 2026 1271 0.6 0.1 cfg_node.right_hand_side_variables: - 39 2026 923940 456.0 97.9 arrow_result = self.arrow(JOIN, cfg_node) - 40 - 41 2026 1889 0.9 0.2 arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - 42 2026 1390 0.7 0.1 constraint_table[cfg_node] = arrow_result - 43 # Default case: - 44 else: - 45 188 110 0.6 0.0 constraint_table[cfg_node] = JOIN - -Tue Sep 13 17:20:46 2016 stats.prof - - 233642 function calls (225273 primitive calls) in 0.287 seconds - - Ordered by: cumulative time - List reduced from 769 to 10 due to restriction <10> - - ncalls tottime percall cumtime percall filename:lineno(function) - 51/1 0.003 0.000 0.287 0.287 {built-in method builtins.exec} - 1 0.000 0.000 0.287 0.287 ../pyt/pyt.py:1() - 1 0.000 0.000 0.175 0.175 ../pyt/fixed_point.py:38(analyse) - 7 0.010 0.001 0.174 0.025 ../pyt/fixed_point.py:16(fixpoint_runner) - 2214 0.004 0.000 0.162 0.000 ../pyt/reaching_definitions_taint.py:27(fixpointmethod) - 2026 0.013 0.000 0.156 0.000 ../pyt/reaching_definitions_taint.py:18(arrow) - 2026 0.132 0.000 0.143 0.000 ../pyt/lattice.py:14(get_elements) - 7 0.000 0.000 0.059 0.008 ../pyt/cfg.py:233(__init__) - 113/7 0.002 0.000 0.059 0.008 ../pyt/cfg.py:377(stmt_star_handler) - 5134/31 0.005 0.000 0.059 0.002 /usr/lib64/python3.5/ast.py:241(visit) - - - diff --git a/profiling/fine_timer.py b/profiling/fine_timer.py deleted file mode 100644 index 468cf6d8..00000000 --- a/profiling/fine_timer.py +++ /dev/null @@ -1,91 +0,0 @@ -import os -import pstats -from subprocess import PIPE, run as sub_run - - -KERNPROF = 'kernprof-3.5' -LINE_PROFILER_FILE = 'pyt.py.lprof' -PYTHON = 'python3' -PYT_PATH = '../pyt/pyt.py' -SNAKEVIZ = 'snakeviz' -STATS_FILENAME = 'stats.prof' - - -def clean_up(): - if os.path.isfile(STATS_FILENAME): - os.remove(STATS_FILENAME) - if os.path.isfile(LINE_PROFILER_FILE): - os.remove(LINE_PROFILER_FILE) - -def prepare_results(number_of_results): - stats = pstats.Stats(STATS_FILENAME) - stats.sort_stats('cumulative') - stats.print_stats(number_of_results) - -def visualise(): - try: - sub_run([SNAKEVIZ, STATS_FILENAME], stdout=PIPE, stderr=PIPE) - except KeyboardInterrupt: - pass - except: - print('It seems that snakeviz is not installed.') - print('To install snakeviz see: https://jiffyclub.github.io/snakeviz/ .') - exit(0) - -def run(project, project_file, number_of_results): - if project: - sub_run([PYTHON, '-m', 'cProfile', '-o', STATS_FILENAME, - PYT_PATH, '-pr', project, project_file], stdout=PIPE) - else: - sub_run([PYTHON, '-m', 'cProfile', '-o', STATS_FILENAME, - PYT_PATH, project_file], stdout=PIPE) - - prepare_results(number_of_results) - -def get_indendation(line): - return line.split('def')[0] - -def insert_profile(filename, list_of_functions): - out = list() - old_line = '' - with open(filename, 'r') as fd: - for line in fd: - for func in list_of_functions: - if '@profile' not in old_line and 'def ' + func in line: - out.append(get_indendation(line) + '@profile\n') - old_line = line - out.append(line) - - with open(filename, 'w') as fd: - for line in out: - fd.write(line) - -def remove_profile(filename): - out = list() - with open(filename, 'r') as fd: - for line in fd: - if '@profile' not in line: - out.append(line) - with open(filename, 'w') as fd: - for line in out: - fd.write(line) - -def fixed_point_timer(project, project_file): - analysis_filename = '../pyt/reaching_definitions_taint.py' - list_of_functions = ['arrow', 'join', 'fixpointmethod'] - insert_profile(analysis_filename, list_of_functions) - fixed_point_filename = '../pyt/fixed_point.py' - list_of_functions = ['fixpoint_runner'] - insert_profile(fixed_point_filename, list_of_functions) - lattice_filename = '../pyt/lattice.py' - list_of_functions = ['get_elements'] - insert_profile(fixed_point_filename, list_of_functions) - - if project: - sub_run([KERNPROF, '-l', '-v', PYT_PATH, '-pr', project, project_file]) - else: - sub_run([KERNPROF, '-l', '-v', PYT_PATH, project_file]) - - remove_profile(analysis_filename) - remove_profile(fixed_point_filename) - remove_profile(lattice_filename) diff --git a/profiling/profiler.py b/profiling/profiler.py deleted file mode 100644 index c38b247c..00000000 --- a/profiling/profiler.py +++ /dev/null @@ -1,38 +0,0 @@ -import argparse - -from . import fine_timer - - -parser = argparse.ArgumentParser() - -parser.add_argument('project_file', help='Path to the file where PyT should start to analyse.', type=str) -parser.add_argument('-pr', '--project', help='Path to where the project is located which PyT should analyse.', type=str) -parser.add_argument('-n', '--number-of-results', help='Number of results to be shown. Default: 10.', type=int) -parser.add_argument('-v', '--visualise', help='Visualise the results in an interactive way.', action='store_true') -parser.add_argument('-fp', '--fixed-point', help='Run line profiling on the fixed point algorithm.', action='store_true') -parser.add_argument('-k', '--keep-intermediate-files', help='Keep files from cProfile and the line profiler.', action='store_true') - -args = parser.parse_args() - -number_of_results = 10 -if args.number_of_results: - number_of_results = args.number_of_results - -fine_timer.run(args.project, args.project_file, number_of_results) - -if args.fixed_point: - fine_timer.fixed_point_timer(args.project, args.project_file) - -if args.visualise: - try: - print() - print('#############################') - print('C-c to to clean up and exit.') - print('#############################') - print() - fine_timer.visualise() - except KeyboardInterrupt: - pass - -if not args.keep_intermediate_files: - fine_timer.clean_up() diff --git a/profiling/profiling_runner.py b/profiling/profiling_runner.py deleted file mode 100644 index 4f126217..00000000 --- a/profiling/profiling_runner.py +++ /dev/null @@ -1,38 +0,0 @@ -"""Runs the profiler everytime travis is building. - -Saves the result for future reference. -""" -from datetime import datetime -from shutil import which -from subprocess import Popen - - -FIXED_POINT_FLAG = '-fp' -KERNPROF = 'kernprof-3.5' -PROFILER = 'profiler.py' -PROFILING_DB = 'db.txt' -TEST_PROJECT_1 = 'test_projects/flaskbb_lite_1/flaskbb/app.py' -TEST_PROJECT_2 = 'test_projects/flaskbb_lite_2/flaskbb/app.py' -TEST_PROJECT_3 = 'test_projects/flaskbb_lite_3/flaskbb/app.py' -TEST_PROJECTS = [TEST_PROJECT_1, TEST_PROJECT_2, TEST_PROJECT_3] -TRAVIS_PYTHON = 'python' - - -if which(KERNPROF) is None: - print('You need "kernprof" to run this script. Install: "pip3 install line_profiler".') - exit(1) - -with open(PROFILING_DB, 'a') as fd: - fd.write('############################################### Profiling \ -{} ###############################################\n\n'.format(datetime.now())) - -for tp in TEST_PROJECTS: - print('Profiling: ', tp) - with open(PROFILING_DB, 'a') as fd: - fd.write('##### Profiling {} #####\n\n'.format(tp)) - with open(PROFILING_DB, 'a') as fd: - p = Popen(['python3', PROFILER, tp, FIXED_POINT_FLAG], stdout=fd) - p.wait() - -with open(PROFILING_DB, 'a') as fd: - fd.write('\n') diff --git a/profiling/test_projects/flaskbb_lite_1/.landscape.yml b/profiling/test_projects/flaskbb_lite_1/.landscape.yml deleted file mode 100644 index a96b2f63..00000000 --- a/profiling/test_projects/flaskbb_lite_1/.landscape.yml +++ /dev/null @@ -1,27 +0,0 @@ -doc-warnings: false -test-warnings: false -strictness: veryhigh -max-line-length: 80 -autodetect: yes -requirements: - - requirements.txt -ignore-paths: - - docs - - migrations - - wsgi.py - - setup.py - - flaskbb/configs - - flaskbb/_compat.py -pep8: - full: true - disable: - - E711 - - E712 - -pylint: - disable: - - too-few-public-methods - - too-many-public-methods - - too-many-locals - - invalid-name - - unused-argument diff --git a/profiling/test_projects/flaskbb_lite_1/.travis.yml b/profiling/test_projects/flaskbb_lite_1/.travis.yml deleted file mode 100644 index 15e65f9a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python -sudo: false -python: - - "2.7" - - "3.3" -# command to install dependencies -install: - - "pip install -r test_requirements.txt" - - "pip install coveralls" -# command to run tests -script: - - python manage.py compile_translations - - py.test --cov=flaskbb --cov-report=term-missing tests -after_success: - - coveralls diff --git a/profiling/test_projects/flaskbb_lite_1/.tx/config b/profiling/test_projects/flaskbb_lite_1/.tx/config deleted file mode 100644 index bd1d913f..00000000 --- a/profiling/test_projects/flaskbb_lite_1/.tx/config +++ /dev/null @@ -1,8 +0,0 @@ -[main] -host = https://www.transifex.com - -[flaskbb.messagespot] -file_filter = flaskbb/translations//LC_MESSAGES/messages.po -source_file = flaskbb/translations/messages.pot -source_lang = en -type = PO diff --git a/profiling/test_projects/flaskbb_lite_1/AUTHORS b/profiling/test_projects/flaskbb_lite_1/AUTHORS deleted file mode 100644 index 3333b4d9..00000000 --- a/profiling/test_projects/flaskbb_lite_1/AUTHORS +++ /dev/null @@ -1,14 +0,0 @@ -FlaskBB is written and maintained by the FlaskBB Team and various -contributors: - -# FlaskBB Team - -* sh4nks -* Looking for more people! - - -# Contributors - -* CasperVg -* Alec Reiter -* Feel free to join! :) diff --git a/profiling/test_projects/flaskbb_lite_1/CHANGES b/profiling/test_projects/flaskbb_lite_1/CHANGES deleted file mode 100644 index 30a3b111..00000000 --- a/profiling/test_projects/flaskbb_lite_1/CHANGES +++ /dev/null @@ -1,7 +0,0 @@ -# FlaskBB Changelog - -Here you can see the full list of changes between each release. - -## Version 0.1 - -* Not finished yet diff --git a/profiling/test_projects/flaskbb_lite_1/LICENSE b/profiling/test_projects/flaskbb_lite_1/LICENSE deleted file mode 100644 index 67d600cf..00000000 --- a/profiling/test_projects/flaskbb_lite_1/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2014 by the FlaskBB Team and contributors. See AUTHORS -for more details. - -Some rights reserved. - -Redistribution and use in source and binary forms of the software as well -as documentation, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. diff --git a/profiling/test_projects/flaskbb_lite_1/Makefile b/profiling/test_projects/flaskbb_lite_1/Makefile deleted file mode 100644 index 64389b4e..00000000 --- a/profiling/test_projects/flaskbb_lite_1/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -.PHONY: clean install help test run dependencies - -help: - @echo " clean remove unwanted stuff" - @echo " install install flaskbb and setup" - @echo " test run the testsuite" - @echo " run run the development server" - -dependencies:requirements.txt - pip install -r requirements.txt - -clean: - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -rf {} + - -test: - py.test --cov=flaskbb --cov-report=term-missing tests - -run: - python manage.py runserver -dr - -install:dependencies - clear - python manage.py install diff --git a/profiling/test_projects/flaskbb_lite_1/README.md b/profiling/test_projects/flaskbb_lite_1/README.md deleted file mode 100644 index 7bb09c59..00000000 --- a/profiling/test_projects/flaskbb_lite_1/README.md +++ /dev/null @@ -1,58 +0,0 @@ -[![Build Status](https://travis-ci.org/sh4nks/flaskbb.svg?branch=master)](https://travis-ci.org/sh4nks/flaskbb) -[![Coverage Status](https://coveralls.io/repos/sh4nks/flaskbb/badge.png)](https://coveralls.io/r/sh4nks/flaskbb) -[![Code Health](https://landscape.io/github/sh4nks/flaskbb/master/landscape.svg?style=flat)](https://landscape.io/github/sh4nks/flaskbb/master) -[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://flaskbb.org) - -# INTRODUCTION - -[FlaskBB](http://flaskbb.org) is a forum software written in python -using the micro framework Flask. - - -## FEATURES - -* A Bulletin Board like FluxBB or DjangoBB in Flask -* Private Messages -* Admin Interface -* Group based permissions -* BBCode Support -* Topic Tracker -* Unread Topics/Forums -* i18n Support -* Completely Themeable -* Plugin System - - -## TODO - -* See the github [issues](https://github.com/sh4nks/flaskbb/issues?state=open) - - -## INSTALLATION - -For a complete installation guide please visit the installation documentation -[here](https://flaskbb.readthedocs.org/en/latest/installation.html). - -* Create a virtualenv -* Configuration (_adjust them accordingly to your needs_) - * For development copy `flaskbb/configs/development.py.example` to `flaskbb/configs/development.py` -* Install dependencies and FlaskBB - * `make install` -* Run the development server - * `make runserver` -* Visit [localhost:8080](http://localhost:8080) - - -## DOCUMENTATION - -The documentation is located [here](http://flaskbb.readthedocs.org/en/latest/). - - -## LICENSE - -[BSD LICENSE](http://flask.pocoo.org/docs/license/#flask-license) - - -## ACKNOWLEDGEMENTS - -[/r/flask](http://reddit.com/r/flask), [Flask](http://flask.pocoo.org), it's [extensions](http://flask.pocoo.org/extensions/) and everyone who has helped me! diff --git a/profiling/test_projects/flaskbb_lite_1/babel.cfg b/profiling/test_projects/flaskbb_lite_1/babel.cfg deleted file mode 100644 index b1ba4bf5..00000000 --- a/profiling/test_projects/flaskbb_lite_1/babel.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[ignore: **/plugins/**] -[python: **.py] -[jinja2: **/templates/**.html] -extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/profiling/test_projects/flaskbb_lite_1/docs/.gitignore b/profiling/test_projects/flaskbb_lite_1/docs/.gitignore deleted file mode 100644 index e35d8850..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_build diff --git a/profiling/test_projects/flaskbb_lite_1/docs/Makefile b/profiling/test_projects/flaskbb_lite_1/docs/Makefile deleted file mode 100644 index bbae2f6a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/Makefile +++ /dev/null @@ -1,177 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FlaskBB.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FlaskBB.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/FlaskBB" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FlaskBB" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/profiling/test_projects/flaskbb_lite_1/docs/_static/logo-full.png b/profiling/test_projects/flaskbb_lite_1/docs/_static/logo-full.png deleted file mode 100644 index 5118e7235a27872a6df9c7acb813a51b72f112df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10951 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 diff --git a/profiling/test_projects/flaskbb_lite_1/docs/_templates/sidebarintro.html b/profiling/test_projects/flaskbb_lite_1/docs/_templates/sidebarintro.html deleted file mode 100644 index 73e7379a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/_templates/sidebarintro.html +++ /dev/null @@ -1,12 +0,0 @@ -

About

-

- FlaskBB is forum software built with Flask. You can very easy create - new topics, posts and send other users private messages. It also includes - basic administration and moderation tools. -

-

Useful Links

- diff --git a/profiling/test_projects/flaskbb_lite_1/docs/conf.py b/profiling/test_projects/flaskbb_lite_1/docs/conf.py deleted file mode 100644 index 47d45ea5..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/conf.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- coding: utf-8 -*- -# -# FlaskBB documentation build configuration file, created by -# sphinx-quickstart on Fri Feb 14 19:56:59 2014. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('..')) -sys.path.append(os.path.abspath('_themes')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc' -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'FlaskBB' -copyright = u'2014, sh4nks' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1-dev' -# The full version, including alpha/beta/rc tags. -release = '0.1-dev' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'flask' -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] -html_theme_options = { - 'index_logo': "../_static/logo-full.png", -} -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = { - 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], - '**': ['localtoc.html', 'relations.html', - 'sourcelink.html', 'searchbox.html'] -} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = False - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'FlaskBBdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'FlaskBB.tex', u'FlaskBB Documentation', - u'sh4nks', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'flaskbb', u'FlaskBB Documentation', - [u'sh4nks'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'FlaskBB', u'FlaskBB Documentation', - u'sh4nks', 'FlaskBB', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'http://docs.python.org/': None} - -autodoc_member_order = 'bysource' diff --git a/profiling/test_projects/flaskbb_lite_1/docs/contents.rst.inc b/profiling/test_projects/flaskbb_lite_1/docs/contents.rst.inc deleted file mode 100644 index 5c44c99e..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/contents.rst.inc +++ /dev/null @@ -1,14 +0,0 @@ -Contents --------- - -.. toctree:: - :maxdepth: 2 - - installation - plugins - plugin_tutorial/index - events - theming - settings - permissions - models diff --git a/profiling/test_projects/flaskbb_lite_1/docs/events.rst b/profiling/test_projects/flaskbb_lite_1/docs/events.rst deleted file mode 100644 index 4a44fd6b..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/events.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. _events: - -Events -====== - -In order to extend FlaskBB you will need to connect your callbacks with -events. - -.. admonition:: Additional events - - If you miss an event, feel free to open a new issue or create a pull - request. The pull request should always contain a entry in this document - with a small example. - - A event can be created by placing a :func:`~flask.ext.plugins.emit_event` - function at specific places in the code which then can modify the behavior - of FlaskBB. The same thing applies for template events. - - Python Event: - - .. sourcecode:: python - - def foobar(data) - somedata = "foobar" - emit_event("your-newly-contributed-event", somedata) - - - Template Event: - - .. sourcecode:: html+jinja - - {{ emit_event("your-newly-contributed-template-event") }} - - -Available Events ----------------- - - -Python Events -~~~~~~~~~~~~~ - -None at the moment. :( - - -Template Events -~~~~~~~~~~~~~~~ - -.. data:: before-first-navigation-element - - This event inserts a navigation link **before** the **first** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("before-first-navigation-element", inject_navigation_element) - - -.. data:: after-last-navigation-element - - This event inserts a navigation link **after** the **last** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("after-last-navigation-element", inject_navigation_element) - - diff --git a/profiling/test_projects/flaskbb_lite_1/docs/index.rst b/profiling/test_projects/flaskbb_lite_1/docs/index.rst deleted file mode 100644 index cd82f675..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:orphan: - -Welcome to FlaskBB -================== - -FlaskBB is a lightweight forum software in Flask. - - -Links ------ - -`documentation `_ -| `source `_ - - -.. include:: contents.rst.inc diff --git a/profiling/test_projects/flaskbb_lite_1/docs/installation.rst b/profiling/test_projects/flaskbb_lite_1/docs/installation.rst deleted file mode 100644 index b499c9c0..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/installation.rst +++ /dev/null @@ -1,329 +0,0 @@ -Installation -============ - -- `Basic Setup <#basic-setup>`_ -- `Configuration <#configuration>`_ -- `Deplyoing <#deploying>`_ - - - -Basic Setup ------------ - -Virtualenv Setup -~~~~~~~~~~~~~~~~ - -Before you can start, you need to create a `virtualenv`. -You can install the virtualenvwrapper with your package manager or via pip. -Be sure that pip is installed. If you don't know how to install pip, have a -look at their `documentation `_. - -For example, on archlinux you can install it with -:: - - $ sudo pacman -S python2-virtualenvwrapper - -or, if you own a Mac, you can simply install it with -:: - - $ sudo pip install virtualenvwrapper - -For more information checkout the `virtualenvwrapper `_ installation. - -After that you can create your virtualenv with -:: - - $ mkvirtualenv -a /path/to/flaskbb -p $(which python2) flaskbb - -and you should be switched automatically to your newly created virtualenv. -To deactivate it you just have to type ``deactivate`` and if you want to work -on it again, you need to type ``workon flaskbb``. - - -Required Dependencies -~~~~~~~~~~~~~~~~~~~~~ - -Now you can install the required dependencies. -:: - - $ pip install -r requirements.txt - -Alternatively, you can use the `make` command to install the dependencies. -:: - - $ make dependencies - - -Optional Dependencies -~~~~~~~~~~~~~~~~~~~~~~ - -We have one optional dependency, redis (the python package is installed automatically). -If you want to use it, be sure that a redis-server is running. If you decide -to use redis, the `online guests` and `online users` are being tracked by redis, -else it will only track the `online users` via a simple SQL query. - -**On Archlinux** -:: - - # Install redis - $ sudo pacman -S redis - - # Check if redis is already running. - $ systemctl status redis - - # If not, start it. - $ sudo systemctl start redis - - # Optional: Start redis everytime you boot your machine - $ sudo systemctl enable redis - -**On Debian 7.0 (Wheezy)** -:: - - # Install redis - $ sudo apt-get install redis-server - - # Check if redis is already running. - $ service redis-server status - - # If not, start it - $ sudo service redis-server start - - # Optional: Start redis everytime you boot your machine - # I can't remember if this is done automatically.. - $ sudo update-rc.d redis-server defaults - - -Configuration -------------- - -Before you can start, you need to configure `FlaskBB`. - - -Development -~~~~~~~~~~~ - -For development, you need to copy ``flaskbb/configs/development.py.example`` to -``flaskbb/configs/development.py``. -:: - - cp flaskbb/configs/development.py.example flaskbb/configs/development.py - -The reCAPTCHA keys should work fine on localhost. - - -Production -~~~~~~~~~~ - -If you plan, to use `FlaskBB` in a production environment (not recommended at -the moment, because it's still in development), you need to copy -``flaskbb/configs/production.py.example`` to ``flaskbb/configs/production.py``. -:: - - cp flaskbb/configs/production.py.example flaskbb/configs/production.py - -Now open ``flaskbb/configs/production.py`` with your favourite editor and adjust -the config variables to your needs. - - -Mail Examples -~~~~~~~~~~~~~ - -Both methods are included in the example configs. - -**Google Mail** -:: - - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - -**Local SMTP Server** -:: - - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USERNAME = "" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = "noreply@example.org" - - -Installation ------------- - -For a guided install, run -:: - - $ make install - -or: - - python manage.py install - -During the installation process you are asked about your username, -your email address and the password for your administrator user. Using the -`make install` command is recommended as it checks that the dependencies are also -installed. - - -Upgrading ---------- - -If the database models changed after a release, you have to run the ``upgrade`` -command -:: - - python manage.py db upgrade - - -Deploying ---------- - -I prefer to use supervisor, uWSGI and nginx to deploy my apps, but if you have -figured out how to deploy it in another way, please let me know, so I -(or you if you create a pull request) can add it to the documentation. - -**NOTE:** I have only used Debian to deploy it, if someone is using a other -distribution, could you let me know if that works too? `Also, if you have better -configurations for uWSGI, supervisor or nginx let me know that too.` - - -Supervisor -~~~~~~~~~~ - -`Supervisor is a client/server system that allows its users to monitor and -control a number of processes on UNIX-like operating systems.` - -To install `supervisor` on Debian, you need to fire up this command: -:: - - $ sudo apt-get install supervisor - -There are two ways to configure supervisor. The first one is, you just put -the configuration to the end in the ``/etc/supervisor/supervisord.conf`` file. - -The second way would be to create a new file in the ``/etc/supervisor/conf.d/`` -directory. For example, such a file could be named ``uwsgi.conf``. - -After you have choosen the you way you like, simply put the snippet below in the -configuration file. - -:: - - [program:uwsgi] - command=/usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled - user=apps - stopsignal=QUIT - autostart=true - autorestart=true - redirect_stderr=true - - -uWSGI -~~~~~ - -`uWSGI is a web application solution with batteries included.` - -To get started with uWSGI, you need to install it first. -You'll also need the python plugin to serve python apps. -This can be done with: - -:: - - $ sudo apt-get install uwsgi uwsgi-plugin-python - -For the configuration, you need to create a file in the -``/etc/uwsgi/apps-available`` directory. In this example, I will call the -file ``flaskbb.ini``. After that, you can start with configuring it. -My config looks like this for `flaskbb.org` (see below). As you might have noticed, I'm -using a own user for my apps whose home directory is located at `/var/apps/`. -In this directory there are living all my Flask apps. - -:: - - [uwsgi] - base = /var/apps/flaskbb - home = /var/apps/.virtualenvs/flaskbb/ - pythonpath = %(base) - socket = 127.0.0.1:30002 - module = wsgi - callable = flaskbb - uid = apps - gid = apps - logto = /var/apps/flaskbb/logs/uwsgi.log - plugins = python - - -=============== ========================== =============== -**base** /path/to/flaskbb The folder where your flaskbb application lives -**home** /path/to/virtualenv/folder The virtualenv folder for your flaskbb application -**pythonpath** /path/to/flaskbb The same as base -**socket** socket This can be either a ip or the path to a socket (don't forget to change that in your nginx config) -**module** wsgi.py This is the file located in the root directory from flaskbb (where manage.py lives). -**callable** flaskbb The callable is application you have created in the ``wsgi.py`` file -**uid** your_user The user who should be used. **NEVER** use root! -**gid** your_group The group who should be used. -**logto** /path/to/log/file The path to your uwsgi logfile -**plugins** python We need the python plugin -=============== ========================== =============== - -Don't forget to create a symlink to ``/etc/uwsgi/apps-enabled``. - -:: - - ln -s /etc/uwsgi/apps-available/flaskbb /etc/uwsgi/apps-enabled/flaskbb - - -nginx -~~~~~ - -`nginx [engine x] is an HTTP and reverse proxy server, -as well as a mail proxy server, written by Igor Sysoev.` - -The nginx config is pretty straightforward. Again, this is how I use it for -`FlaskBB`. Just copy the snippet below and paste it to, for example -``/etc/nginx/sites-available/flaskbb``. -The only thing left is, that you need to adjust the ``server_name`` to your -domain and the paths in ``access_log``, ``error_log``. Also, don't forget to -adjust the paths in the ``alias`` es, as well as the socket adress in ``uwsgi_pass``. - -:: - - server { - listen 80; - server_name forums.flaskbb.org; - - access_log /var/log/nginx/access.forums.flaskbb.log; - error_log /var/log/nginx/error.forums.flaskbb.log; - - location / { - try_files $uri @flaskbb; - } - - # Static files - location /static { - alias /var/apps/flaskbb/flaskbb/static/; - } - - location ~ ^/_themes/([^/]+)/(.*)$ { - alias /var/apps/flaskbb/flaskbb/themes/$1/static/$2; - } - - # robots.txt - location /robots.txt { - alias /var/apps/flaskbb/flaskbb/static/robots.txt; - } - - location @flaskbb { - uwsgi_pass 127.0.0.1:30002; - include uwsgi_params; - } - } - - -Like in the `uWSGI <#uwsgi>`_ chapter, don't forget to create a symlink to -``/etc/nginx/sites-enabled/``. diff --git a/profiling/test_projects/flaskbb_lite_1/docs/make.bat b/profiling/test_projects/flaskbb_lite_1/docs/make.bat deleted file mode 100644 index 5f1369be..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/make.bat +++ /dev/null @@ -1,242 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\FlaskBB.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\FlaskBB.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/profiling/test_projects/flaskbb_lite_1/docs/models.rst b/profiling/test_projects/flaskbb_lite_1/docs/models.rst deleted file mode 100644 index 503a981f..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/models.rst +++ /dev/null @@ -1,79 +0,0 @@ -.. _models: - -Available Models -================ - -FlaskBB uses SQLAlchemy as it's ORM. The models are split in three modules -which are covered below. - - -Forum Models ------------- - -.. module:: flaskbb.forum.models - -This module contains all related models for the forums. - -The hierarchy looks like this: Category > Forum > Topic > Post. In the Report -model are stored the reports and the TopicsRead and ForumsRead models are -used to store the status if the user has read a specific forum or not. - - -.. autoclass:: Category - :members: - - -.. autoclass:: Forum - :members: - - -.. autoclass:: Topic - :members: - - -.. autoclass:: Post - :members: - - -.. autoclass:: TopicsRead - :members: - - -.. autoclass:: ForumsRead - :members: - - -.. autoclass:: Report - :members: - - - -User Models ------------ - -.. module:: flaskbb.user.models - -The user modules contains all related models for the users. - -.. autoclass:: User - :members: - -.. autoclass:: Group - :members: - -.. autoclass:: PrivateMessage - :members: - - -Management Models ------------------ - -.. module:: flaskbb.management.models - -The management module contains all related models for the management of FlaskBB. - -.. autoclass:: SettingsGroup - :members: - -.. autoclass:: Setting - :members: diff --git a/profiling/test_projects/flaskbb_lite_1/docs/permissions.rst b/profiling/test_projects/flaskbb_lite_1/docs/permissions.rst deleted file mode 100644 index bdfeb509..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/permissions.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _permissions: - -Permission (WIP) -================ - -a moderator is allowed to do the following things: - - enter the management panel - process reports - edit user (if he has the permission) - ban users (if he has the permission) diff --git a/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/index.rst b/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/index.rst deleted file mode 100644 index cb352e84..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _tutorial: - -Plugin Tutorial (WIP) -===================== - - -This tutorial is based on the plugin which is shipped by default with FlaskBB. -If you want the full sourcecode in advance or for comparison, check out -the `portal plugin`_. - -.. _portal plugin: - https://github.com/sh4nks/flaskbb/tree/master/flaskbb/plugins/portal - -.. toctree:: - :maxdepth: 2 - - structure diff --git a/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/structure.rst b/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/structure.rst deleted file mode 100644 index a788d00d..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/plugin_tutorial/structure.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _structure: - -Step 1: Structure -================= diff --git a/profiling/test_projects/flaskbb_lite_1/docs/plugins.rst b/profiling/test_projects/flaskbb_lite_1/docs/plugins.rst deleted file mode 100644 index 1a134ad3..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/plugins.rst +++ /dev/null @@ -1,179 +0,0 @@ -.. _plugins: - -Plugins -======= - -.. module:: flaskbb.plugins - -FlaskBB provides an easy way to extend the functionality of your forum -via so called `Plugins`. Plugins do not modify the `core` of FlaskBB, so -you can easily activate and deactivate them anytime. This part of the -documentation only covers the basic things for creating plugins. If you are -looking for a tutorial you need to go to this section of the documentation: -:doc:`plugin_tutorial/index`. - - -Structure ---------- - -A plugin has it's own folder where all the plugin specific files are living. -For example, the structure of a plugin could look like this - -.. sourcecode:: text - - my_plugin - |-- info.json Contains the Plugin's metadata - |-- license.txt The full license text of your plugin - |-- __init__.py The plugin's main class is located here - |-- views.py - |-- models.py - |-- forms.py - |-- static - | |-- style.css - |-- templates - |-- myplugin.html - - -Management ----------- - -Deactivating -~~~~~~~~~~~~ - -The only way to disable a plugin without removing it is, to add a ``DISABLED`` -file in the plugin's root folder. You need to reload your application in order -to have the plugin fully disabled. A disabled plugin could look like this:: - - my_plugin - |-- DISABLED # Just add a empty file named "DISABLED" to disable a plugin - |-- info.json - |-- __init__.py - -.. important:: Restart the server. - - You must restart the wsgi/in-built server in order to make the changes - effect your forum. - - -Activating -~~~~~~~~~~ - -Simply remove the ``DISABLED`` file in the plugin directory and restart the -server. - - -Example Plugin --------------- - -A really simple Plugin could look like this: - -.. sourcecode:: python - - from flask import flash - from flask.ext.plugins import connect_event - - from flaskbb.plugins import FlaskBBPlugin - - - # This is the name of your Plugin class which implements FlaskBBPlugin. - # The exact name is needed in order to be recognized as a plugin. - __plugin__ "HelloWorldPlugin" - - - def flash_index(): - """Flashes a message when visiting the index page.""" - - flash("This is just a demonstration plugin", "success") - - - class HelloWorldPlugin(FlaskBBPlugin): - def setup(self): - connect_event(before-forum-index-rendered, flash_index) - - def install(self): - # there is nothing to install - pass - - def uninstall(self): - # and nothing to uninstall - pass - - -Your plugins also needs a ``info.json`` file, where it stores some meta data -about the plugin. For more information see the `Metadata <#metadata>`_ -section below. - - -Metadata -~~~~~~~~ - -In order to get a working plugin, following metadata should be defined -in a ``info.json`` file. - -``identifier`` : **required** - The plugin's identifier. It should be a Python identifier (starts with a - letter or underscore, the rest can be letters, underscores, or numbers) - and should match the name of the plugin's folder. - -``name`` : **required** - A human-readable name for the plugin. - -``author`` : **required** - The name of the plugin's author, that is, you. It does not have to include - an e-mail address, and should be displayed verbatim. - -``description`` - A description of the plugin in a few sentences. If you can write multiple - languages, you can include additional fields in the form - ``description_lc``, where ``lc`` is a two-letter language code like ``es`` - or ``de``. They should contain the description, but in the indicated - language. - -``website`` - The URL of the plugin's Web site. This can be a Web site specifically for - this plugin, Web site for a collection of plugins that includes this plugin, - or just the author's Web site. - -``license`` - A simple phrase indicating your plugin's license, like ``GPL``, - ``MIT/X11``, ``Public Domain``, or ``Creative Commons BY-SA 3.0``. You - can put the full license's text in the ``license.txt`` file. - -``version`` - This is simply to make it easier to distinguish between what version - of your plugin people are using. It's up to the theme/layout to decide - whether or not to show this, though. - - -Events ------- - -A full list with events can be found here :doc:`events`. - - -Plugin Class ------------- - -.. autoclass:: FlaskBBPlugin - - .. autoattribute:: settings_key - - .. autoattribute:: installable - - .. autoattribute:: uninstallable - - .. automethod:: setup - - .. automethod:: install - - .. automethod:: uninstall - - .. automethod:: register_blueprint - - .. automethod:: create_table - - .. automethod:: drop_table - - .. automethod:: create_all_tables - - .. automethod:: drop_all_tables diff --git a/profiling/test_projects/flaskbb_lite_1/docs/settings.rst b/profiling/test_projects/flaskbb_lite_1/docs/settings.rst deleted file mode 100644 index 76fd4dcb..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/settings.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _settings: - -Settings -======== - -This part covers which setting fields are available. -This is especially useful if you plan on develop a plugin a want to contribute -to FlaskBB. - - - -The available fields are shown below. - -.. note:: - For a full list of available methods, visit - `Settings Model `__. - - -.. module:: flaskbb.management.models - - -.. autoclass:: Setting - - .. attribute:: key - - **TODO** - - .. attribute:: value - - **TODO** - - .. attribute:: settingsgroup - - **TODO** - - .. attribute:: name - - **TODO** - - .. attribute:: description - - **TODO** - - .. attribute:: value_type - - **TODO** - string - integer - float - boolean - select # 1 value - selectmultiple # multiple values - - .. attribute:: extra - - **TODO** - min - max - choices with or without coerce diff --git a/profiling/test_projects/flaskbb_lite_1/docs/theming.rst b/profiling/test_projects/flaskbb_lite_1/docs/theming.rst deleted file mode 100644 index 55863d07..00000000 --- a/profiling/test_projects/flaskbb_lite_1/docs/theming.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _theming: - -Theming (WIP) -============= diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/__init__.py deleted file mode 100644 index 7d7d50d8..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb - ~~~~~~~~~~~~~~~~~~~~ - - FlaskBB is a forum software written in python using the - microframework Flask. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -__version__ = '1.0.dev0' - -from flaskbb.app import create_app diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/_compat.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/_compat.py deleted file mode 100644 index 5bc10e04..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/_compat.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Look here for more information: -https://github.com/mitsuhiko/flask/blob/master/flask/_compat.py -""" - -import sys - -PY2 = sys.version_info[0] == 2 - -if not PY2: # pragma: no cover - text_type = str - string_types = (str,) - integer_types = (int, ) - intern_method = sys.intern - range_method = range - iterkeys = lambda d: iter(d.keys()) - itervalues = lambda d: iter(d.values()) - iteritems = lambda d: iter(d.items()) - max_integer = sys.maxsize -else: # pragma: no cover - text_type = unicode - string_types = (str, unicode) - integer_types = (int, long) - intern_method = intern - range_method = xrange - iterkeys = lambda d: d.iterkeys() - itervalues = lambda d: d.itervalues() - iteritems = lambda d: d.iteritems() - max_integer = sys.maxint diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/app.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/app.py deleted file mode 100644 index faa4bfea..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/app.py +++ /dev/null @@ -1,315 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.app - ~~~~~~~~~~~~~~~~~~~~ - - manages the app creation and configuration process - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import logging -import datetime -import time -from functools import partial - -from sqlalchemy import event -from sqlalchemy.engine import Engine - -from flask import Flask, request -from flask_login import current_user -from flask_whooshalchemy import whoosh_index - -# Import the user blueprint -from flaskbb.user.views import user -from flaskbb.user.models import User, Guest -# Import the (private) message blueprint -from flaskbb.message.views import message -# Import the auth blueprint -from flaskbb.auth.views import auth -# Import the admin blueprint -from flaskbb.management.views import management -# Import the forum blueprint -from flaskbb.forum.views import forum -from flaskbb.forum.models import Post, Topic, Category, Forum -# extensions -from flaskbb.extensions import db, login_manager, mail, cache, redis_store, \ - debugtoolbar, migrate, themes, plugin_manager, babel, csrf, allows -# various helpers -from flaskbb.utils.helpers import format_date, time_since, crop_title, \ - is_online, render_markup, mark_online, forum_is_unread, topic_is_unread, \ - render_template -from flaskbb.utils.translations import FlaskBBDomain -# permission checks (here they are used for the jinja filters) -from flaskbb.utils.requirements import ( - IsAdmin, IsAtleastModerator, TplCanModerate, - CanBanUser, CanEditUser, TplCanDeletePost, TplCanDeleteTopic, - TplCanEditPost, TplCanPostTopic, TplCanPostReply -) -# app specific configurations -from flaskbb.utils.settings import flaskbb_config - - -def create_app(config=None): - """Creates the app.""" - - # Initialize the app - app = Flask("flaskbb") - - # Use the default config and override it afterwards - app.config.from_object('flaskbb.configs.default.DefaultConfig') - # Update the config - app.config.from_object(config) - # try to update the config via the environment variable - app.config.from_envvar("FLASKBB_SETTINGS", silent=True) - - configure_blueprints(app) - configure_extensions(app) - configure_template_filters(app) - configure_context_processors(app) - configure_before_handlers(app) - configure_errorhandlers(app) - configure_logging(app) - - return app - - -def configure_blueprints(app): - app.register_blueprint(forum, url_prefix=app.config["FORUM_URL_PREFIX"]) - app.register_blueprint(user, url_prefix=app.config["USER_URL_PREFIX"]) - app.register_blueprint(auth, url_prefix=app.config["AUTH_URL_PREFIX"]) - app.register_blueprint( - management, url_prefix=app.config["ADMIN_URL_PREFIX"] - ) - app.register_blueprint( - message, url_prefix=app.config["MESSAGE_URL_PREFIX"] - ) - - -def configure_extensions(app): - """Configures the extensions.""" - - # Flask-WTF CSRF - csrf.init_app(app) - - # Flask-Plugins - plugin_manager.init_app(app) - - # Flask-SQLAlchemy - db.init_app(app) - - # Flask-Migrate - migrate.init_app(app, db) - - # Flask-Mail - mail.init_app(app) - - # Flask-Cache - cache.init_app(app) - - # Flask-Debugtoolbar - debugtoolbar.init_app(app) - - # Flask-Themes - themes.init_themes(app, app_identifier="flaskbb") - - # Flask-And-Redis - redis_store.init_app(app) - - # Flask-WhooshAlchemy - with app.app_context(): - whoosh_index(app, Post) - whoosh_index(app, Topic) - whoosh_index(app, Forum) - whoosh_index(app, Category) - whoosh_index(app, User) - - # Flask-Login - login_manager.login_view = app.config["LOGIN_VIEW"] - login_manager.refresh_view = app.config["REAUTH_VIEW"] - login_manager.login_message_category = app.config["LOGIN_MESSAGE_CATEGORY"] - login_manager.needs_refresh_message_category = \ - app.config["REFRESH_MESSAGE_CATEGORY"] - login_manager.anonymous_user = Guest - - @login_manager.user_loader - def load_user(user_id): - """Loads the user. Required by the `login` extension.""" - - user_instance = User.query.filter_by(id=user_id).first() - if user_instance: - return user_instance - else: - return None - - login_manager.init_app(app) - - # Flask-BabelEx - babel.init_app(app=app, default_domain=FlaskBBDomain(app)) - - @babel.localeselector - def get_locale(): - # if a user is logged in, use the locale from the user settings - if current_user.is_authenticated and current_user.language: - return current_user.language - # otherwise we will just fallback to the default language - return flaskbb_config["DEFAULT_LANGUAGE"] - - # Flask-Allows - allows.init_app(app) - allows.identity_loader(lambda: current_user) - - -def configure_template_filters(app): - """Configures the template filters.""" - filters = {} - - filters['markup'] = render_markup - filters['format_date'] = format_date - filters['time_since'] = time_since - filters['is_online'] = is_online - filters['crop_title'] = crop_title - filters['forum_is_unread'] = forum_is_unread - filters['topic_is_unread'] = topic_is_unread - - permissions = [ - ('is_admin', IsAdmin), - ('is_moderator', IsAtleastModerator), - ('is_admin_or_moderator', IsAtleastModerator), - ('can_edit_user', CanEditUser), - ('can_ban_user', CanBanUser), - ] - - filters.update([ - (name, partial(perm, request=request)) for name, perm in permissions - ]) - - # these create closures - filters['can_moderate'] = TplCanModerate(request) - filters['post_reply'] = TplCanPostReply(request) - filters['edit_post'] = TplCanEditPost(request) - filters['delete_post'] = TplCanDeletePost(request) - filters['post_topic'] = TplCanPostTopic(request) - filters['delete_topic'] = TplCanDeleteTopic(request) - - app.jinja_env.filters.update(filters) - - -def configure_context_processors(app): - """Configures the context processors.""" - - @app.context_processor - def inject_flaskbb_config(): - """Injects the ``flaskbb_config`` config variable into the - templates. - """ - - return dict(flaskbb_config=flaskbb_config) - - -def configure_before_handlers(app): - """Configures the before request handlers.""" - - @app.before_request - def update_lastseen(): - """Updates `lastseen` before every reguest if the user is - authenticated.""" - - if current_user.is_authenticated: - current_user.lastseen = datetime.datetime.utcnow() - db.session.add(current_user) - db.session.commit() - - if app.config["REDIS_ENABLED"]: - @app.before_request - def mark_current_user_online(): - if current_user.is_authenticated: - mark_online(current_user.username) - else: - mark_online(request.remote_addr, guest=True) - - -def configure_errorhandlers(app): - """Configures the error handlers.""" - - @app.errorhandler(403) - def forbidden_page(error): - return render_template("errors/forbidden_page.html"), 403 - - @app.errorhandler(404) - def page_not_found(error): - return render_template("errors/page_not_found.html"), 404 - - @app.errorhandler(500) - def server_error_page(error): - return render_template("errors/server_error.html"), 500 - -def XSS1(): - param = request.args.get('param', 'not set') - - html = open('templates/XSS_param.html').read() - resp = make_response(html.replace('{{ param }}', param)) - return resp - -a = XSS1() -def configure_logging(app): - """Configures logging.""" - - a = XSS1() - logs_folder = os.path.join(app.root_path, os.pardir, "logs") - from logging.handlers import SMTPHandler - formatter = logging.Formatter( - '%(asctime)s %(levelname)s: %(message)s ' - '[in %(pathname)s:%(lineno)d]') - - info_log = os.path.join(logs_folder, app.config['INFO_LOG']) - - info_file_handler = logging.handlers.RotatingFileHandler( - info_log, - maxBytes=100000, - backupCount=10 - ) - - info_file_handler.setLevel(logging.INFO) - info_file_handler.setFormatter(formatter) - app.logger.addHandler(info_file_handler) - - error_log = os.path.join(logs_folder, app.config['ERROR_LOG']) - - error_file_handler = logging.handlers.RotatingFileHandler( - error_log, - maxBytes=100000, - backupCount=10 - ) - - error_file_handler.setLevel(logging.ERROR) - error_file_handler.setFormatter(formatter) - app.logger.addHandler(error_file_handler) - - if app.config["SEND_LOGS"]: - mail_handler = \ - SMTPHandler( - app.config['MAIL_SERVER'], - app.config['MAIL_DEFAULT_SENDER'], - app.config['ADMINS'], - 'application error, no admins specified', - (app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD']) - ) - - mail_handler.setLevel(logging.ERROR) - mail_handler.setFormatter(formatter) - app.logger.addHandler(mail_handler) - - if app.config["SQLALCHEMY_ECHO"]: - # Ref: http://stackoverflow.com/a/8428546 - @event.listens_for(Engine, "before_cursor_execute") - def before_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - conn.info.setdefault('query_start_time', []).append(time.time()) - - @event.listens_for(Engine, "after_cursor_execute") - def after_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - total = time.time() - conn.info['query_start_time'].pop(-1) - app.logger.debug("Total Time: %f", total) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/crazy.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/crazy.py deleted file mode 100644 index be692035..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/crazy.py +++ /dev/null @@ -1,8 +0,0 @@ -class Test(): - def __init__(self, a): - self.a = a - def foo(self): - pass - -t = Test() -t.foo() diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/forms.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/forms.py deleted file mode 100644 index ce29f010..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/forms.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.forms - ~~~~~~~~~~~~~~~~~~~~ - - It provides the forms that are needed for the auth views. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from datetime import datetime - -from flask_wtf import Form, RecaptchaField -from wtforms import (StringField, PasswordField, BooleanField, HiddenField, - SubmitField, SelectField) -from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo, - regexp, ValidationError) -from flask_babelplus import lazy_gettext as _ -from flaskbb.user.models import User - -USERNAME_RE = r'^[\w.+-]+$' -is_username = regexp(USERNAME_RE, - message=_("You can only use letters, numbers or dashes.")) - - -class LoginForm(Form): - login = StringField(_("Username or E-Mail Address"), validators=[ - DataRequired(message=_("A Username or E-Mail Address is required."))] - ) - - password = PasswordField(_("Password"), validators=[ - DataRequired(message=_("A Password is required."))]) - - remember_me = BooleanField(_("Remember Me"), default=False) - - submit = SubmitField(_("Login")) - - -class RegisterForm(Form): - username = StringField(_("Username"), validators=[ - DataRequired(message=_("A Username is required.")), - is_username]) - - email = StringField(_("E-Mail Address"), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email(message=_("Invalid E-Mail Address."))]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - - language = SelectField(_('Language')) - - accept_tos = BooleanField(_("I accept the Terms of Service"), default=True) - - submit = SubmitField(_("Register")) - - def validate_username(self, field): - user = User.query.filter_by(username=field.data).first() - if user: - raise ValidationError(_("This Username is already taken.")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if email: - raise ValidationError(_("This E-Mail Address is already taken.")) - - def save(self): - user = User(username=self.username.data, - email=self.email.data, - password=self.password.data, - date_joined=datetime.utcnow(), - primary_group_id=4, - language=self.language.data) - return user.save() - - -class RegisterRecaptchaForm(RegisterForm): - recaptcha = RecaptchaField(_("Captcha")) - - -class ReauthForm(Form): - password = PasswordField(_('Password'), validators=[ - DataRequired(message=_("A Password is required."))]) - - submit = SubmitField(_("Refresh Login")) - - -class ForgotPasswordForm(Form): - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is reguired.")), - Email()]) - - submit = SubmitField(_("Request Password")) - - -class ResetPasswordForm(Form): - token = HiddenField('Token') - - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email()]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - submit = SubmitField(_("Reset Password")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if not email: - raise ValidationError(_("Wrong E-Mail Address.")) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/hest/empty.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/hest/empty.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/views.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/views.py deleted file mode 100644 index c4d00896..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/auth/views.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.views - ~~~~~~~~~~~~~~~~~~~~ - - This view provides user authentication, registration and a view for - resetting the password of a user if he has lost his password - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import Blueprint, flash, redirect, url_for, request, current_app -from flask_login import (current_user, login_user, login_required, - logout_user, confirm_login, login_fresh) -from flask_babelplus import gettext as _ - -from flaskbb.utils.helpers import render_template -from flaskbb.email import send_reset_token -from flaskbb.auth.forms import (LoginForm, ReauthForm, ForgotPasswordForm, - ResetPasswordForm) -from flaskbb.user.models import User -from flaskbb.fixtures.settings import available_languages -from flaskbb.utils.settings import flaskbb_config - -auth = Blueprint("auth", __name__) - - -@auth.route("/login", methods=["GET", "POST"]) -def login(): - """ - Logs the user in - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile")) - - form = LoginForm(request.form) - if form.validate_on_submit(): - user, authenticated = User.authenticate(form.login.data, - form.password.data) - - if user and authenticated: - login_user(user, remember=form.remember_me.data) - return redirect(request.args.get("next") or - url_for("forum.index")) - - flash(_("Wrong Username or Password."), "danger") - return render_template("auth/login.html", form=form) - - -@auth.route("/reauth", methods=["GET", "POST"]) -@login_required -def reauth(): - """ - Reauthenticates a user - """ - - if not login_fresh(): - form = ReauthForm(request.form) - if form.validate_on_submit(): - if current_user.check_password(form.password.data): - confirm_login() - flash(_("Reauthenticated."), "success") - return redirect(request.args.get("next") or current_user.url) - - flash(_("Wrong password."), "danger") - return render_template("auth/reauth.html", form=form) - return redirect(request.args.get("next") or current_user.url) - - -@auth.route("/logout") -@login_required -def logout(): - logout_user() - flash(("Logged out"), "success") - return redirect(url_for("forum.index")) - - -@auth.route("/register", methods=["GET", "POST"]) -def register(): - """ - Register a new user - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile", - username=current_user.username)) - - if current_app.config["RECAPTCHA_ENABLED"]: - from flaskbb.auth.forms import RegisterRecaptchaForm - form = RegisterRecaptchaForm(request.form) - else: - from flaskbb.auth.forms import RegisterForm - form = RegisterForm(request.form) - - form.language.choices = available_languages() - form.language.default = flaskbb_config['DEFAULT_LANGUAGE'] - form.process(request.form) # needed because a default is overriden - - if form.validate_on_submit(): - user = form.save() - login_user(user) - - flash(_("Thanks for registering."), "success") - return redirect(url_for("user.profile", - username=current_user.username)) - - return render_template("auth/register.html", form=form) - - -@auth.route('/resetpassword', methods=["GET", "POST"]) -def forgot_password(): - """ - Sends a reset password token to the user. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ForgotPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - - if user: - token = user.make_reset_token() - send_reset_token(user, token=token) - - flash(_("E-Mail sent! Please check your inbox."), "info") - return redirect(url_for("auth.forgot_password")) - else: - flash(_("You have entered a Username or E-Mail Address that is " - "not linked with your account."), "danger") - return render_template("auth/forgot_password.html", form=form) - - -@auth.route("/resetpassword/", methods=["GET", "POST"]) -def reset_password(token): - """ - Handles the reset password process. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ResetPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - expired, invalid, data = user.verify_reset_token(form.token.data) - - if invalid: - flash(_("Your Password Token is invalid."), "danger") - return redirect(url_for("auth.forgot_password")) - - if expired: - flash(_("Your Password Token is expired."), "danger") - return redirect(url_for("auth.forgot_password")) - - if user and data: - user.password = form.password.data - user.save() - flash(_("Your Password has been updated."), "success") - return redirect(url_for("auth.login")) - - form.token.data = token - return render_template("auth/reset_password.html", form=form) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/default.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/default.py deleted file mode 100644 index dd1afb84..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/default.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.configs.default - ~~~~~~~~~~~~~~~~~~~~~~~ - - This is the default configuration for FlaskBB that every site should have. - You can override these configuration variables in another class. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import sys - -_VERSION_STR = '{0.major}{0.minor}'.format(sys.version_info) - - -class DefaultConfig(object): - - # Get the app root path - # <_basedir> - # ../../ --> flaskbb/flaskbb/configs/base.py - _basedir = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname( - os.path.dirname(__file__))))) - - DEBUG = False - TESTING = False - - # Logs - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Default Database - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + _basedir + '/' + \ - 'flaskbb.sqlite' - - # This option will be removed as soon as Flask-SQLAlchemy removes it. - # At the moment it is just used to suppress the super annoying warning - SQLALCHEMY_TRACK_MODIFICATIONS = False - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # Protection against form post fraud - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Searching - WHOOSH_BASE = os.path.join(_basedir, "whoosh_index", _VERSION_STR) - - # Auth - LOGIN_VIEW = "auth.login" - REAUTH_VIEW = "auth.reauth" - LOGIN_MESSAGE_CATEGORY = "info" - REFRESH_MESSAGE_CATEGORY = "info" - - # Caching - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - ## Captcha - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - ## Mail - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USE_TLS = False - MAIL_USERNAME = "noreply@example.org" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = ("Default Sender", "noreply@example.org") - # Where to logger should send the emails to - ADMINS = ["admin@example.org"] - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - MESSAGE_URL_PREFIX = "/message" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/development.py.example b/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/development.py.example deleted file mode 100644 index cd3b7834..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/development.py.example +++ /dev/null @@ -1,61 +0,0 @@ -""" - flaskbb.configs.development - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's development config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class DevelopmentConfig(DefaultConfig): - - # Indicates that it is a dev environment - DEBUG = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - #SQLALCHEMY_DATABASE_URI = "postgresql://flaskbb@localhost:5432/flaskbb" - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - 'flaskbb.sqlite' - - # This will print all SQL statements - SQLALCHEMY_ECHO = True - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/production.py.example b/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/production.py.example deleted file mode 100644 index 22103f20..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/production.py.example +++ /dev/null @@ -1,92 +0,0 @@ -""" - flaskbb.configs.example - ~~~~~~~~~~~~~~~~~~~~ - - This is how a production configuration can look like. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class ProductionConfig(DefaultConfig): - - ## Database - # If no SQL service is choosen, it will fallback to sqlite - # For PostgresSQL: - #SQLALCHEMY_DATABASE_URI = "postgresql://localhost/example" - # For SQLite: - #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - # 'flaskbb.sqlite' - - ## Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # You can generate the WTF_CSRF_SECRET_KEY the same way as you have - # generated the SECRET_KEY. If no WTF_CSRF_SECRET_KEY is provided, it will - # use the SECRET_KEY. - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - - ## Caching - # For all available caching types, take a look at the Flask-Cache docs - # https://pythonhosted.org/Flask-Cache/#configuring-flask-cache - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - - ## Captcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - - ## Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] - - - ## Error/Info Logging - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes. Only change it when you know what you are doing. - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/testing.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/testing.py deleted file mode 100644 index b96e9a79..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/configs/testing.py +++ /dev/null @@ -1,64 +0,0 @@ -""" - flaskbb.configs.testing - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's testing config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class TestingConfig(DefaultConfig): - - # Indicates that it is a testing environment - DEBUG = False - TESTING = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - SQLALCHEMY_DATABASE_URI = ( - 'sqlite://' - ) - - SERVER_NAME = "localhost:5000" - - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/email.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/email.py deleted file mode 100644 index 9079200a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/email.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.emails - ~~~~~~~~~~~~~~~~~~~~ - - This module adds the functionality to send emails - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import render_template -from flask_mail import Message -from flask_babelplus import lazy_gettext as _ - -from flaskbb.extensions import mail - - -def send_reset_token(user, token): - send_email( - subject=_("Password Reset"), - recipients=[user.email], - text_body=render_template( - "email/reset_password.txt", - user=user, - token=token - ), - html_body=render_template( - "email/reset_password.html", - user=user, - token=token - ) - ) - - -def send_email(subject, recipients, text_body, html_body, sender=None): - msg = Message(subject, recipients=recipients, sender=sender) - msg.body = text_body - msg.html = html_body - mail.send(msg) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/exceptions.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/exceptions.py deleted file mode 100644 index 16d00f1a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/exceptions.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - flaskbb.exceptions - ~~~~~~~~~~~~~~~~~~ - - Exceptions implemented by FlaskBB. - - :copyright: (c) 2015 by the FlaskBBB Team. - :license: BSD, see LICENSE for more details -""" -from werkzeug.exceptions import HTTPException, Forbidden - - -class FlaskBBError(HTTPException): - "Root exception for FlaskBB" - description = "An internal error has occured" - - -class AuthorizationRequired(FlaskBBError, Forbidden): - description = "Authorization is required to access this area." diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/extensions.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/extensions.py deleted file mode 100644 index d677d939..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/extensions.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.extensions - ~~~~~~~~~~~~~~~~~~~~ - - The extensions that are used by FlaskBB. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_allows import Allows -from flask_sqlalchemy import SQLAlchemy -from flask_login import LoginManager -from flask_mail import Mail -from flask_cache import Cache -from flask_debugtoolbar import DebugToolbarExtension -from flask_redis import Redis -from flask_migrate import Migrate -from flask_themes2 import Themes -from flask_plugins import PluginManager -from flask_babelplus import Babel -from flask_wtf.csrf import CsrfProtect - -from flaskbb.exceptions import AuthorizationRequired - - -# Permissions Manager -allows = Allows(throws=AuthorizationRequired) - -# Database -db = SQLAlchemy() - -# Login -login_manager = LoginManager() - -# Mail -mail = Mail() - -# Caching -cache = Cache() - -# Redis -redis_store = Redis() - -# Debugtoolbar -debugtoolbar = DebugToolbarExtension() - -# Migrations -migrate = Migrate() - -# Themes -themes = Themes() - -# PluginManager -plugin_manager = PluginManager() - -# Babel -babel = Babel() - -# CSRF -csrf = CsrfProtect() diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/groups.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/groups.py deleted file mode 100644 index a9629854..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/groups.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.groups - ~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our groups. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -from collections import OrderedDict - - -fixture = OrderedDict(( - ('Administrator', { - 'description': 'The Administrator Group', - 'admin': True, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Super Moderator', { - 'description': 'The Super Moderator Group', - 'admin': False, - 'super_mod': True, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Moderator', { - 'description': 'The Moderator Group', - 'admin': False, - 'super_mod': False, - 'mod': True, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Member', { - 'description': 'The Member Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Banned', { - 'description': 'The Banned Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': True, - 'guest': False, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Guest', { - 'description': 'The Guest Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': True, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }) -)) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/settings.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/settings.py deleted file mode 100644 index 47d7a2d7..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/fixtures/settings.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.settings - ~~~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our settings. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_themes2 import get_themes_list - -from flaskbb.extensions import babel - - -def available_themes(): - return [(theme.identifier, theme.name) for theme in get_themes_list()] - - -def available_avatar_types(): - return [("image/png", "PNG"), ("image/jpeg", "JPG"), ("image/gif", "GIF")] - - -def available_languages(): - return [(locale.language, locale.display_name) - for locale in babel.list_translations()] - - -fixture = ( - # Settings Group - ('general', { - 'name': "General Settings", - 'description': "How many items per page are displayed.", - 'settings': ( - ('project_title', { - 'value': "FlaskBB", - 'value_type': "string", - 'name': "Project title", - 'description': "The title of the project.", - }), - ('project_subtitle', { - 'value': "A lightweight forum software in Flask", - 'value_type': "string", - 'name': "Project subtitle", - 'description': "A short description of the project.", - }), - ('posts_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Posts per page", - 'description': "Number of posts displayed per page.", - }), - ('topics_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Topics per page", - 'description': "Number of topics displayed per page.", - }), - ('users_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Users per page", - 'description': "Number of users displayed per page.", - }), - ), - }), - ('misc', { - 'name': "Misc Settings", - 'description': "Miscellaneous settings.", - 'settings': ( - ('message_quota', { - 'value': 50, - 'value_type': "integer", - 'extra': {"min": 0}, - 'name': "Private Message Quota", - 'description': "The amount of messages a user can have." - }), - ('online_last_minutes', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Online last minutes", - 'description': "How long a user can be inactive before he is marked as offline. 0 to disable it.", - }), - ('title_length', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Topic title length", - 'description': "The length of the topic title shown on the index." - }), - ('tracker_length', { - 'value': 7, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Tracker length", - 'description': "The days for how long the forum should deal with unread topics. 0 to disable it." - }), - ('avatar_height', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Height", - 'description': "The allowed height of an avatar in pixels." - }), - ('avatar_width', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Width", - 'description': "The allowed width of an avatar in pixels." - }), - ('avatar_size', { - 'value': 200, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Size", - 'description': "The allowed size of the avatar in kilobytes." - }), - ('avatar_types', { - 'value': ["image/png", "image/jpeg", "image/gif"], - 'value_type': "selectmultiple", - 'extra': {"choices": available_avatar_types}, - 'name': "Avatar Types", - 'description': "The allowed types of an avatar. Such as JPEG, GIF or PNG." - }), - ('signature_enabled', { - 'value': True, - 'value_type': "boolean", - 'extra': {}, - 'name': "Enable Signatures", - 'description': "Enable signatures in posts." - }) - ), - }), - ('appearance', { - 'name': "Appearance Settings", - "description": "Change the theme and language for your forum.", - "settings": ( - ('default_theme', { - 'value': "aurora", - 'value_type': "select", - 'extra': {'choices': available_themes}, - 'name': "Default Theme", - 'description': "Change the default theme for your forum." - }), - ('default_language', { - 'value': "en", - 'value_type': "select", - 'extra': {'choices': available_languages}, - 'name': "Default Language", - 'description': "Change the default language for your forum." - }), - ), - }), -) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/__init__.py deleted file mode 100644 index c0aa49cd..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -from flask import current_app -from flask_plugins import Plugin - -from flaskbb.management.models import SettingsGroup - - -class FlaskBBPlugin(Plugin): - - #: This is the :class:`SettingsGroup` key - if your the plugin needs to - #: install additional things you must set it, else it won't install - #: anything. - settings_key = None - - @property - def installable(self): - """Is ``True`` if the Plugin can be installed.""" - if self.settings_key is not None: - return True - return False - - @property - def uninstallable(self): - """Is ``True`` if the Plugin can be uninstalled.""" - if self.installable: - group = SettingsGroup.query.filter_by(key=self.settings_key).first() - if group and len(group.settings.all()) > 0: - return True - return False - return False - - # Some helpers - def register_blueprint(self, blueprint, **kwargs): - """Registers a blueprint. - - :param blueprint: The blueprint which should be registered. - """ - current_app.register_blueprint(blueprint, **kwargs) - - def create_table(self, model, db): - """Creates the relation for the model - - :param model: The Model which should be created - :param db: The database instance. - """ - if not model.__table__.exists(bind=db.engine): - model.__table__.create(bind=db.engine) - - def drop_table(self, model, db): - """Drops the relation for the bounded model. - - :param model: The model on which the table is bound. - :param db: The database instance. - """ - model.__table__.drop(bind=db.engine) - - def create_all_tables(self, models, db): - """A interface for creating all models specified in ``models``. - - :param models: A list with models - :param db: The database instance - """ - for model in models: - self.create_table(model, db) - - def drop_all_tables(self, models, db): - """A interface for dropping all models specified in the - variable ``models``. - - :param models: A list with models - :param db: The database instance. - """ - for model in models: - self.drop_table(model, db) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/__init__.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/__init__.py deleted file mode 100644 index aed2fd06..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/__init__.py +++ /dev/null @@ -1,64 +0,0 @@ -from flask.ext.plugins import connect_event - -from flaskbb.plugins import FlaskBBPlugin -from flaskbb.utils.populate import (create_settings_from_fixture, - delete_settings_from_fixture) -from flaskbb.forum.models import Forum - -from .views import portal, inject_portal_link - -__version__ = "0.1" -__plugin__ = "PortalPlugin" - - -def available_forums(): - forums = Forum.query.order_by(Forum.id.asc()).all() - return [(forum.id, forum.title) for forum in forums] - -fixture = ( - ('plugin_portal', { - 'name': "Portal Settings", - "description": "Configure the portal", - "settings": ( - ('plugin_portal_forum_ids', { - 'value': [1], - 'value_type': "selectmultiple", - 'name': "Forum IDs", - 'description': "The forum ids from which forums the posts should be displayed on the portal.", - 'extra': {"choices": available_forums, "coerce": int} - }), - ('plugin_portal_recent_topics', { - 'value': 10, - 'value_type': "integer", - 'name': "Number of Recent Topics", - 'description': "The number of topics in Recent Topics portlet.", - 'extra': {"min": 1}, - }), - ), - }), -) - - -class PortalPlugin(FlaskBBPlugin): - - name = "Portal Plugin" - - description = ("This Plugin provides a simple portal for FlaskBB.") - - author = "sh4nks" - - license = "BSD" - - version = __version__ - - settings_key = 'plugin_portal' - - def setup(self): - self.register_blueprint(portal, url_prefix="/portal") - connect_event("before-first-navigation-element", inject_portal_link) - - def install(self): - create_settings_from_fixture(fixture) - - def uninstall(self): - delete_settings_from_fixture(fixture) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/info.json b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/info.json deleted file mode 100644 index bd82b571..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "identifier": "portal", - "name": "Portal", - "author": "sh4nks", - "website": "http://flaskbb.org", - "license": "BSD", - "description": "A Portal Plugin for FlaskBB", - "version": "0.1" -} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/index.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/index.html deleted file mode 100644 index dda400b4..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/index.html +++ /dev/null @@ -1,204 +0,0 @@ -{% extends theme("layout.html") %} - -{% block css %} - {{ super() }} - - -{% endblock %} - -{% block content %} -
- - -
-
-
-

News

-
-
- - {% for topic in news.items %} -

{{ topic.title }}

- -
- {{ topic.first_post.content | markup | safe }}
-
- {% if not loop.last %}
{% endif %} - {% endfor %} - -
-
- -
- - -
-
-
-

Recent Topics

-
-
- {% for topic in recent_topics %} - -
- - -
- {{ topic.date_created | time_since }} -
-
- - {% endfor %} -
-
- -
-
-

Statistics

-
-
- -
-
- Topics -
-
- {{ topic_count }} -
-
- -
-
- Posts -
-
- {{ post_count }} -
-
- -
-
- Registered Users -
-
- {{ user_count }} -
-
- - {% if newest_user %} -
-
- Newest User -
- -
- {% endif %} - -
-
- Online Users -
- -
- {{ online_users }} -
-
- - {% if config["REDIS_ENABLED"] %} -
-
- Guests online -
- -
- {{ online_guests }} -
-
- {% endif %} -
-
-
- -
-{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/navigation_snippet.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/navigation_snippet.html deleted file mode 100644 index e24fcbae..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/templates/navigation_snippet.html +++ /dev/null @@ -1,5 +0,0 @@ -
  • - - Portal - -
  • diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po deleted file mode 100644 index 3681636e..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# German translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-01-05 21:38+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Bitte installieren sie das Plugin zuerst. Danach können sie es in der Administration konfigurieren." diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po deleted file mode 100644 index 438e2979..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po +++ /dev/null @@ -1,25 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-02-13 14:26+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Please install the plugin first in order to configure which forums are displayed." - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/views.py b/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/views.py deleted file mode 100644 index a3643889..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/plugins/portal/views.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from flask import Blueprint, current_app, flash, request -from flask_babelplus import gettext as _ -from flask_login import current_user - -from flaskbb.utils.helpers import render_template -from flaskbb.forum.models import Topic, Post, Forum -from flaskbb.user.models import User, Group -from flaskbb.utils.helpers import time_diff, get_online_users -from flaskbb.utils.settings import flaskbb_config - -portal = Blueprint("portal", __name__, template_folder="templates") - - -def inject_portal_link(): - return render_template("navigation_snippet.html") - - -@portal.route("/") -def index(): - page = request.args.get('page', 1, type=int) - - try: - forum_ids = flaskbb_config["PLUGIN_PORTAL_FORUM_IDS"] - except KeyError: - forum_ids = [] - flash(_("Please install the plugin first to configure the forums " - "which should be displayed"), "warning") - - - group_ids = [group.id for group in current_user.groups] - forums = Forum.query.filter(Forum.groups.any(Group.id.in_(group_ids))) - - # get the news forums - check for permissions - news_ids = [f.id for f in forums.filter(Forum.id.in_(forum_ids)).all()] - news = Topic.query.filter(Topic.forum_id.in_(news_ids)).\ - order_by(Topic.id.desc()).\ - paginate(page, flaskbb_config["TOPICS_PER_PAGE"], True) - - # get the recent topics from all to the user available forums (not just the - # configured ones) - all_ids = [f.id for f in forums.all()] - recent_topics = Topic.query.filter(Topic.forum_id.in_(all_ids)).\ - order_by(Topic.last_updated.desc()).\ - limit(flaskbb_config.get("PLUGIN_PORTAL_RECENT_TOPICS", 10)) - - user_count = User.query.count() - topic_count = Topic.query.count() - post_count = Post.query.count() - newest_user = User.query.order_by(User.id.desc()).first() - - # Check if we use redis or not - if not current_app.config["REDIS_ENABLED"]: - online_users = User.query.filter(User.lastseen >= time_diff()).count() - online_guests = None - else: - online_users = len(get_online_users()) - online_guests = len(get_online_users(guest=True)) - - return render_template("index.html", news=news, recent_topics=recent_topics, - user_count=user_count, topic_count=topic_count, - post_count=post_count, newest_user=newest_user, - online_guests=online_guests, - online_users=online_users) diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/.gitkeep b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/pygments.css b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/pygments.css deleted file mode 100644 index 2e01f06a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/pygments.css +++ /dev/null @@ -1,64 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight .c { color: #408080; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ -.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #7D9029 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #A0A000 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/styles.css b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/styles.css deleted file mode 100644 index 79c3cb7c..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/css/styles.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot");src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#F6F9FC}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#F6F9FC}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#F6F9FC;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#F6F9FC}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:0}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#cad7e1}.navbar-default .navbar-brand{color:#555}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#3c3c3c;background-color:transparent}.navbar-default .navbar-text{color:#555}.navbar-default .navbar-nav>li>a{color:#555}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#cad7e1}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#555}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#555}.navbar-default .navbar-link:hover{color:#555}.navbar-default .btn-link{color:#555}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#555}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #cad7e1;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:-1;border-top-right-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:-1;border-bottom-right-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #cad7e1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #cad7e1}.panel-default{border-color:#cad7e1}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#cad7e1}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.5.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.5.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.5.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.5.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}html{position:relative;min-height:100%}body{margin-bottom:60px}.emoji{vertical-align:middle;width:20px;height:20px}.flaskbb-footer{position:absolute;bottom:0;height:60px;width:100%;padding-top:1em}.flaskbb-layout{padding-top:20px}.flaskbb-header{color:#fff;text-align:left;text-shadow:0 1px 0 rgba(0,0,0,0.1);background-color:#08c;background-image:-webkit-linear-gradient(top, #285e8e 0%, #08c 100%);background-image:linear-gradient(to bottom, #285e8e 0%, #08c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);border:1px solid #cad7e1;border-bottom:0;position:relative;height:12em;padding:2.5em 2em;margin-top:2.5em}.flaskbb-header .flaskbb-meta .flaskbb-title{color:#fff;font-size:3em;font-weight:bold}.flaskbb-header .flaskbb-meta .flaskbb-subtitle{color:#E8F1F2}.flaskbb-breadcrumb{border:1px solid #cad7e1;border-radius:0}p.flaskbb-stats{margin:0;padding:0}.controls-row{padding:0.5em 0;margin:0}.controls-row .pagination{padding:0;margin:0}.controls-col{margin:0;padding:0}.settings-col{padding:0}.inline-form{display:inline}.cheatsheet h2{text-align:center;font-size:1.6em;-webkit-border-radius:2px;-webkit-background-clip:padding-box;-moz-border-radius:2px;-moz-background-clip:padding;padding:10px 0}.cheatsheet .emojis{text-align:center}.cheatsheet .typography{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:4px;-moz-column-gap:4px;column-gap:4px;text-align:center}.cheatsheet .code-example{width:100%;position:relative;margin-bottom:1em;-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:-4px;-moz-column-gap:-4px;column-gap:-4px}.cheatsheet .code-example .markup{padding:0}.navbar .navbar-btn>a.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.navbar .navbar-btn>a.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.navbar .navbar-btn>a.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.navbar .navbar-nav .user-btn{padding-right:2em;padding-left:1em}.dropdown-menu>li .btn-link{display:block;padding:3px 20px;width:100%;text-align:left;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li .btn-link:hover,.dropdown-menu>li .btn-link:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active .btn-link,.dropdown-menu>.active .btn-link:hover,.dropdown-menu>.active .btn-link:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled .btn-link,.dropdown-menu>.disabled .btn-link:hover,.dropdown-menu>.disabled .btn-link:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.dropdown-messages{min-width:15em}.dropdown-messages .message-subject{font-style:italic}.dropdown-messages .author-name{font-weight:bold}.sidebar{padding-top:1em;padding-bottom:1em;text-shadow:none;background-color:#f8f8f8;border:1px solid #cad7e1}.sidebar .sidenav-header{display:block;padding-left:1.25em;padding-bottom:1em;font-size:12px;font-weight:bold;line-height:20px;color:#555;text-transform:uppercase}.sidebar .sidenav-btn{padding-bottom:1em;text-transform:uppercase;text-align:center}.sidebar .nav>li>a{display:block}.sidebar .nav>li>a:hover,.sidebar .nav>li>a:focus{text-decoration:none;background-color:#e7e7e7}.sidebar .nav>.active>a,.sidebar .nav>.active:hover>a,.sidebar .nav>.active:focus>a{font-weight:normal;color:#555;background-color:#e7e7e7}.nav-sidebar{width:100%;padding:0}.nav-sidebar a{color:#555}.nav-sidebar .active a{cursor:default;background-color:#f8f8f8;color:#555}.nav-sidebar li.active{border-top:1px solid #cad7e1;border-bottom:1px solid #cad7e1}.nav-sidebar li.active:first-child{border-top:none}.nav-sidebar .active a:hover{background-color:#f8f8f8}.panel.panel-tabs>.panel-heading{padding:0;font-weight:500}.panel.panel-tabs .nav-tabs{border-bottom:none}.panel.panel-tabs .nav-justified{margin-bottom:-1px}.panel-tabs .nav-tabs>li a{color:#E8F1F2;border:1px solid #337ab7}.panel-tabs .nav-tabs>li a:hover,.panel-tabs .nav-tabs>li a:focus{background-color:#08c;border:1px solid #08c}.panel-tabs .nav-tabs>li.active a,.panel-tabs .nav-tabs>li.active a:hover,.panel-tabs .nav-tabs>li.active a:focus{color:#fff;background-color:#08c;border:1px solid #08c}.editor-box .editor-submit .btn{margin:0.75em 0.25em 0 0}.editor-box>.quickreply{padding:0}.editor{min-height:0}.editor .editor-options{margin-top:0.5em}.editor .new-message{background:#fff;border:0;height:12em;outline:none;width:100%}.editor>.md-editor{border-color:#cad7e1}.editor>.md-editor.active{border-color:#cad7e1}.editor>.md-editor>.md-footer,.editor>.md-editor>.md-header{background:#f8f8f8}.editor>.md-editor>textarea{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1em;border-top:1px solid #cad7e1;border-bottom:none;background:#fff;padding:0 0.25em}.editor>.md-editor>.md-preview{border-top:1px solid #cad7e1;border-right:1px solid #cad7e1;border-bottom:none;padding:0 0.25em;background:#eee}.btn.btn-link{border:none;color:#337ab7;text-decoration:none;padding:0;margin-bottom:2px}.btn.btn-link:focus,.btn.btn-link:hover{color:#23527c;text-decoration:underline}.btn-icon{font-family:'FontAwesome';font-size:1.15em;line-height:1.50em;font-weight:normal;background:none;border-radius:0}.icon-delete:before{content:"\f014";color:#d9534f}.icon-report:before{content:"\f024";color:#f0ad4e}.icon-edit:before{content:"\f040";color:#5cb85c}.icon-reply:before{content:"\f10e";color:#337ab7}.icon-replyall:before{content:"\f122";color:#5bc0de}.category-panel{border-color:#cad7e1}.category-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.category-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.category-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.category-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.category-panel .panel-heading{font-weight:bold}.category-panel .category-body{padding:0}.category-panel .category-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.category-panel .category-meta .forum-name,.category-panel .category-meta .forum-stats,.category-panel .category-meta .forum-last-post{font-weight:bold}.category-panel .category-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.category-panel .category-row:not(:last-child){border-bottom:1px solid #cad7e1}.category-panel .category-row.hover:hover{background-color:#f8f8f8}.category-panel .forum-info{position:relative}.category-panel .forum-info .forum-status{float:left;font-size:2em;padding-right:0.5em}.category-panel .forum-info .forum-name{font-weight:bold}.category-panel .forum-info .forum-moderators{font-style:italic}.category-panel .forum-last-post .last-post-title{font-weight:bold}.forum-panel{border-color:#cad7e1;margin-bottom:0}.forum-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.forum-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.forum-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.forum-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.forum-panel .panel-heading{font-weight:bold}.forum-panel .forum-body{padding:0}.forum-panel .forum-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.forum-panel .forum-meta .topic-name,.forum-panel .forum-meta .topic-stats,.forum-panel .forum-meta .topic-last-post{font-weight:bold}.forum-panel .topic-info{position:relative}.forum-panel .topic-info .topic-status{float:left;font-size:1.5em;padding-right:0.5em}.forum-panel .topic-info .topic-status .topic-locked{font-size:1.5em}.forum-panel .topic-info .topic-name{font-weight:bold}.forum-panel .topic-info .topic-pages{font-weight:normal;font-size:small}.forum-panel .forum-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.forum-panel .forum-row:not(:last-child){border-bottom:1px solid #cad7e1}.forum-panel .forum-row.hover:hover{background-color:#f8f8f8}.topic-panel{border-color:#cad7e1;margin-bottom:0}.topic-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.topic-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.topic-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.topic-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.topic-panel .panel-heading{font-weight:bold}.topic-panel .topic-body{padding-top:0;padding-bottom:0}.post-row{background:#e8ecf1;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}.post-row:not(:last-child){border-bottom:1px solid #cad7e1}.post-box{background:#fff;border-left:1px solid #cad7e1;padding-bottom:3em;padding-left:0;padding-right:0;min-height:19em;position:relative}.post-box.post-horizontal{border-left:none;min-height:14em}.post-box .post-meta{padding-top:0.5em;padding-left:0.5em;padding-right:0.5em;margin:0;background-color:#fff;border-bottom:1px solid #eaf1f5}.post-box .post-content{padding-left:0.5em;padding-right:0.5em;padding-top:0.5em}.post-box .post-content img{max-width:100%;max-height:100%}.post-box .post-signature{margin-top:2em}.post-box .post-signature hr{height:1px;color:#eaf1f5;background-color:#eaf1f5;border:none;margin:0;width:25%}.post-box .post-footer{border-top:1px solid #cad7e1;background-color:#fff;width:100%;left:0;bottom:0;position:absolute}.post-box .post-footer .post-menu{padding-left:0}.post-box .post-footer .post-menu .btn-icon:hover{background-color:#f8f8f8}.author{text-shadow:0px 1px 0px #fff}.author.author-horizontal{min-height:9em;border-bottom:1px solid #cad7e1}.author.author-horizontal .author-box{float:left;margin-top:0.5em}.author.author-horizontal .author-box .author-avatar{margin-top:0em;margin-right:1em}.author.author-horizontal .author-box .author-online,.author.author-horizontal .author-box .author-offline{margin-top:0.5em}.author.author-horizontal .author-box .author-name{margin-top:-0.5em}.author .author-name h4{float:left;margin-bottom:0}.author .author-title h5{margin-top:0;font-weight:600;clear:both}.author .author-avatar{margin:0.5em 0}.author .author-avatar img{border-radius:0.25em;height:auto;width:8em}.author .author-online,.author .author-offline{margin-top:0.75em;margin-left:0.25em;float:left;width:0.5em;height:0.5em;border-radius:50%}.author .author-online{background:#5cb85c}.author .author-offline{background:#555}.page-panel{border-color:#cad7e1}.page-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.page-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.page-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.page-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.page-panel .panel-heading{font-weight:bold}.page-panel .page-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.page-panel .page-body{padding:0}.page-panel .page-body>:not(.page-meta){padding-top:0.5em}.page-panel .page-body img{max-width:100%;max-height:100%}.page-panel .page-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.page-panel .page-row:not(:last-child){border-bottom:1px solid #cad7e1}.page-panel .page-row.hover:hover{background-color:#f8f8f8}.page-panel .row>.page-row:not(:last-child){border-bottom:1px solid #cad7e1}.profile-sidebar{padding:7px 0}.profile-sidebar ul li:last-child{border-bottom:none}.profile-sidebar ul li a{color:#555;font-size:14px;font-weight:400;border-left:2px solid transparent}.profile-sidebar ul li a:hover,.profile-sidebar ul li a:visited{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.profile-sidebar ul li a i{margin-right:8px;font-size:14px}.profile-sidebar ul li.active a{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.page-body.profile-body{background-color:#e8ecf1}.profile-content{background-color:#fff;border-left:1px solid #cad7e1;min-height:32.25em}.profile-content .topic-head{font-weight:normal}.profile-content .topic-created{font-size:0.75em;padding-bottom:0.75em}.profile-picture{text-align:center}.profile-picture img{float:none;margin:0 auto;width:50%;height:50%;-webkit-border-radius:50% !important;-moz-border-radius:50% !important;border-radius:50% !important}.profile-sidebar-stats{text-shadow:0 1px 0 #fff}.profile-groupname,.profile-online,.profile-location,.profile-posts,.profile-date,.profile-buttons{text-align:center;margin-top:0.2em}.profile-groupname{text-align:center;margin-top:0.75em;color:#08c;font-size:1.2em;font-weight:600}.profile-buttons{text-align:center;margin-top:10px;margin-bottom:15px}.profile-buttons .btn{text-shadow:none;text-transform:uppercase;font-size:11px;font-weight:700;padding:6px 15px;margin-right:5px}.conversation-panel{border-color:#cad7e1;margin-bottom:0}.conversation-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.conversation-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.conversation-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.conversation-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.conversation-panel .panel-heading{font-weight:bold}.conversation-panel .conversation-body{padding:0}.conversation-panel .conversation-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.conversation-panel .conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-row.hover:hover{background-color:#f8f8f8}.conversation-panel .conversation-body .row>.conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-message{min-height:16em;padding:0.5em;border:1px solid #cad7e1;border-radius:5px}.conversation-panel .conversation-message .message-content{padding-top:0.5em}.conversation-panel .conversation-message .message-footer{width:100%;bottom:0;position:absolute}.conversation-panel .conversation-message .message-footer .right{margin-right:46px;float:right}.conversation-panel .conversation-message .message-footer .left{float:left}@media (min-width: 992px){.conversation-panel .arrow:after,.conversation-panel .arrow:before{content:"";position:absolute;width:0;height:0;border:solid transparent}.conversation-panel .arrow.left:after,.conversation-panel .arrow.left:before{border-left:0}.conversation-panel .arrow.left:before{left:0px;top:40px;border-right-color:inherit;border-width:16px}.conversation-panel .arrow.left:after{left:1px;top:41px;border-right-color:#FFFFFF;border-width:15px}.conversation-panel .arrow.right:before{right:-16px;top:40px;border-left-color:inherit;border-width:16px}.conversation-panel .arrow.right:after{right:-14px;top:41px;border-left-color:#FFFFFF;border-width:15px}}.conversation-reply{padding-top:2em}.management-panel{border-color:#cad7e1}.management-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.management-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.management-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.management-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.management-panel .search-form{display:none;padding:15px}.management-panel .management-head{background-color:#337ab7}.management-panel .management-body{padding:0}.panel.settings-panel{border:none;margin-bottom:0}.panel.settings-panel .settings-head{background-color:#f8f8f8;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-body{padding:0}.panel.settings-panel .settings-body .settings-form{padding-top:10px}.panel.settings-panel .settings-meta{background-color:#eaf1f5;margin:0;padding:5px 0 5px 0;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-meta .meta-item{font-weight:bold}.panel.settings-panel .settings-content>.category-panel{border-left:none;border-right:none;border-bottom:none;margin-bottom:0}.panel.settings-panel .settings-content>.category-panel:first-child{border-top:none}.panel.settings-panel .settings-content>.category-panel:last-child{border-bottom:1px solid #cad7e1;margin-bottom:1em}.panel.settings-panel .settings-row{padding:5px 0 5px 0;margin:0}.panel.settings-panel .settings-row:last-child{padding-bottom:10px;border-bottom:none !important}.panel.settings-panel .settings-row.hover:hover{background-color:#f8f8f8}.panel.settings-panel .settings-row .btn-icon{padding:0 6px}.panel.settings-panel .settings-footer{padding-top:5px;padding-left:5px;padding-bottom:0px}.panel.settings-panel .settings-footer .pagination{margin:0}.with-left-border{border-left:1px solid #cad7e1}.with-border-bottom{border-bottom:1px solid #cad7e1}.stats{margin-top:15px;margin-bottom:15px}.stats .stats-widget{text-align:center;padding-top:20px;padding-bottom:20px;border:1px solid #cad7e1}.stats .stats-widget .icon{display:block;font-size:96px;line-height:96px;margin-bottom:10px;text-align:center}.stats .stats-widget var{display:block;height:64px;font-size:64px;line-height:64px;font-style:normal}.stats .stats-widget label{font-size:17px}.stats .stats-widget .options{margin-top:10px}.stats .stats-heading{font-size:1.25em;font-weight:bold;margin:0;border-bottom:1px solid #cad7e1}.stats .stats-row{margin:0 0 15px 0;padding-bottom:15px}.stats .stats-row .stats-item{margin:0;padding-top:5px}.stats .stats-row:last-child{border:none}.alert-message{margin:0;padding:20px;border-radius:5px;border:1px solid #3C763D;border-left:3px solid #eee}.alert-message h4{margin-top:0;margin-bottom:5px}.alert-message p:last-child{margin-bottom:0}.alert-message code{background-color:#fff;border-radius:3px}.alert-message.alert-message-success{background-color:#F4FDF0;border-color:#3C763D}.alert-message.alert-message-success h4{color:#3C763D}.alert-message.alert-message-danger{background-color:#fdf7f7;border-color:#d9534f}.alert-message.alert-message-danger h4{color:#d9534f}.alert-message.alert-message-warning{background-color:#fcf8f2;border-color:#f0ad4e}.alert-message.alert-message-warning h4{color:#f0ad4e}.alert-message.alert-message-info{background-color:#f4f8fa;border-color:#5bc0de}.alert-message.alert-message-info h4{color:#5bc0de}.alert-message.alert-message-default{background-color:#EEE;border-color:#555}.alert-message.alert-message-default h4{color:#000}.alert-message.alert-message-notice{background-color:#FCFCDD;border-color:#BDBD89}.alert-message.alert-message-notice h4{color:#444} - -.md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5}.md-editor>.md-header{margin:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;overflow:auto}.md-editor>textarea{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px;outline:0;margin:0;display:block;padding:0;width:100%;border:0;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#eee}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.md-editor .md-controls{float:right;padding:3px}.md-editor .md-controls .md-control{right:5px;color:#bebebe;padding:3px 3px 3px 10px}.md-editor .md-controls .md-control:hover{color:#333}.md-editor.md-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999;padding:60px 30px 15px;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-footer{display:none}.md-editor.md-fullscreen-mode .md-input,.md-editor.md-fullscreen-mode .md-preview{margin:0 auto!important;height:100%!important;font-size:20px!important;padding:20px!important;color:#999;line-height:1.6em!important;resize:none!important;box-shadow:none!important;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-preview{color:#333;overflow:auto}.md-editor.md-fullscreen-mode .md-input:focus,.md-editor.md-fullscreen-mode .md-input:hover{color:#333;background:#fff!important}.md-editor.md-fullscreen-mode .md-header{background:0 0;text-align:center;position:fixed;width:100%;top:20px}.md-editor.md-fullscreen-mode .btn-group{float:none}.md-editor.md-fullscreen-mode .btn{border:0;background:0 0;color:#b3b3b3}.md-editor.md-fullscreen-mode .btn.active,.md-editor.md-fullscreen-mode .btn:active,.md-editor.md-fullscreen-mode .btn:focus,.md-editor.md-fullscreen-mode .btn:hover{box-shadow:none;color:#333}.md-editor.md-fullscreen-mode .md-fullscreen-controls{position:absolute;top:20px;right:20px;text-align:right;z-index:1002;display:block}.md-editor.md-fullscreen-mode .md-fullscreen-controls a{color:#b3b3b3;clear:right;margin:10px;width:30px;height:30px;text-align:center}.md-editor.md-fullscreen-mode .md-fullscreen-controls a:hover{color:#333;text-decoration:none}.md-editor.md-fullscreen-mode .md-editor{height:100%!important;position:relative}.md-editor .md-fullscreen-controls{display:none}.md-nooverflow{overflow:hidden;position:fixed;width:100%} \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/.gitkeep b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/.gitkeep deleted file mode 100644 index 8d1c8b69..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/flaskbb.png b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/emoji/flaskbb.png deleted file mode 100644 index 9846b80c1d252e334a7523bd89381dcd47911413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11014 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 Jua)cZ{0d({uNnXV diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/FontAwesome.otf b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/FontAwesome.otf deleted file mode 100644 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 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 G`u_lkUM?>H diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 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 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.eot b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.eot deleted file mode 100644 index 9b6afaedc0fd7aaf927a07f82da9c11022251b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70807 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 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.svg b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e9..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.ttf b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 - - - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar100x100.png b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar100x100.png deleted file mode 100644 index 35fb5725fb4d4096c163df6d2451320bd0479fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^DImaSW-r^>&VDpOT?~YwiEd zhUY(52$cVyrn4|a)zh?7Ip^M^e1<@+{Uv7{ciew3_%rZ<07DZ4lK_iA!;DuocE=xo zl=%L;_Ria~|0NbOk6xB^ZNJT{V7Y`jUT=D#jok5r2^Us9ERa}!IrC25_K#J2nU>_g zRD01d-?3uZ(Ii3r>D&(Yruy{reXe&j$v>O6xiJ6S9j1vZE1!pL$+VllyG>}%y`GaP zm#lk)7VKcTG<{~(va4CF6T+2O`XBZP>fo8c7kpLp(l^bY8VxoRC+&$bm?RR!yu`I= z+s?)l@r+B3#%PA0;B~1NR?xj!ktgA~s+)0%qA2^?28~V39?n|X5sViPGYB*=uuKl^ z;Qu&fqj2iqsmtR|UVpBrb#+4fmKVZ*`}Njd&u*wFdNXg5)AXzN=A?OVHD0w>Ht6w- z==^qXg;z`a-IT4`?j5VM%iNW=S<<#tpD!*^FIe4gL4`b{R#H)*>QuWk(`(!~jrY6u zOj@-?argZ*p_u&Fr_NQXnOy}2~8>tv&yc& zUZb2c!RyH<=B`P*&P=^`U1OEq`$CCz5ei;HrQCH=^DZw`-z)U$Rkha*(L(E-wahg( zZ|szGYui`texkVF#J7L)`}rqslqTD3&An^3LXNxJa@9UBk-alFK45k06K&ac`w^$t z2bRN&T4yh)@RVyd?YXjTYtzRWK2;nOeH$Zuc9***UVEk;A;xQa&?BfNT~dsFb<6o% zE|qW9W-(-j<=LKEWgxl6XX8 zDbMzaRXg$he`u>+zx71~tAMDGcl*Q;)(KKFRes0+6)ITPE3Rw%`trltUXAq=!xWx; z{VFWOP#EUK*s=MPz5_6E0;5!cfsum*riZJ83IFMw^_yj#|0-AQ@(NoQ`&FqvYfl;@ fivouN>r4JLFK>gTe~DWM4fxzTR| diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar150x150.png b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar150x150.png deleted file mode 100644 index 2db71ddcaf23ec8912a06cb4126db99d3a89db13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 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 SdElQZ#d6PnvjVnD)IR{_U&B8D diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar80x80.png b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/avatar80x80.png deleted file mode 100644 index 57668cfba880213db8b28e44cfeb9a6fe23e50c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)-rI*bx+_^iN+6VJ-n|d=09r-LVLZ0ShIG5#GUM||L?9pm2`CuX z>op&b$GqR~^LD$h{ghUA{Es?7eFj@CE8dKvd^s>gGQ)y z?X%v2xB{ZkzuU%-H1me&NJ}7MLh?Rjay=6PB8KxPH4#l&uVEYRSQ8MKo&Q_n02>Df61JH1gtuK Y0B=(y>Hmj(H2?qr07*qoM6N<$g2?tU_W%F@ diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/megalist-icons.png b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/img/megalist-icons.png deleted file mode 100644 index f00ee657dae94929f258080f6b357a2bd6879766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 LNkvXXu0mjfltC&7 diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.js b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.js deleted file mode 100644 index 18555dd1..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.js +++ /dev/null @@ -1,53 +0,0 @@ -/* This file just holds some configuration values for the editor */ -marked.setOptions({ - gfm: true, - tables: true, - breaks: true, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false -}); - -$(".flaskbb-editor").markdown({ - iconlibrary: "fa", - additionalButtons: [ - [{ - name: "groupHelp", - data: [{ - name: "cmdHelp", - toggle: false, // this param only take effect if you load bootstrap.js - title: "Help", - icon: "fa fa-question", - btnClass: 'btn btn-success', - callback: function(e){ - $('#editor-help').modal('show') - } - }] - }] - ] -}); - -$('.flaskbb-editor').textcomplete([ - { // emoji strategy - match: /\B:([\-+\w]*)$/, - search: function (term, callback) { - callback($.map(emojies, function (emoji) { - return emoji.indexOf(term) === 0 ? emoji : null; - })); - }, - template: function (value) { - return '' + value; - }, - replace: function (value) { - return ':' + value + ': '; - }, - index: 1 - }, -], { - onKeydown: function (e, commands) { - if (e.ctrlKey && e.keyCode === 74) { // CTRL-J - return commands.KEY_ENTER; - } - } -}); diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.min.js b/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.min.js deleted file mode 100644 index 391d7ccf..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/static/js/editor.min.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||c.defaults,this.rules=h.normal,this.options.gfm&&(this.options.tables?this.rules=h.tables:this.rules=h.gfm)}function t(e,t){if(this.options=t||c.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=u.breaks:this.rules=u.gfm:this.options.pedantic&&(this.rules=u.pedantic)}function n(e){this.options=e||{}}function i(e){this.tokens=[],this.token=null,this.options=e||c.defaults,this.options.renderer=this.options.renderer||new n,this.renderer=this.options.renderer,this.renderer.options=this.options}function o(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function s(e,t){return e=e.source,t=t||"",function n(i,o){return i?(o=o.source||o,o=o.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(i,o),n):new RegExp(e,t)}}function a(){}function l(e){for(var t,n,i=1;iAn error occured:

    "+o(d.message+"",!0)+"
    ";throw d}}var h={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:a,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:a,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:a,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};h.bullet=/(?:[*+-]|\d+\.)/,h.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,h.item=s(h.item,"gm")(/bull/g,h.bullet)(),h.list=s(h.list)(/bull/g,h.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+h.def.source+")")(),h.blockquote=s(h.blockquote)("def",h.def)(),h._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",h.html=s(h.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,h._tag)(),h.paragraph=s(h.paragraph)("hr",h.hr)("heading",h.heading)("lheading",h.lheading)("blockquote",h.blockquote)("tag","<"+h._tag)("def",h.def)(),h.normal=l({},h),h.gfm=l({},h.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),h.gfm.paragraph=s(h.paragraph)("(?!","(?!"+h.gfm.fences.source.replace("\\1","\\2")+"|"+h.list.source.replace("\\1","\\3")+"|")(),h.tables=l({},h.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=h,e.lex=function(t,n){var i=new e(n);return i.lex(t)},e.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},e.prototype.token=function(e,t,n){for(var i,o,r,s,a,l,c,u,d,e=e.replace(/^ +$/gm,"");e;)if((r=this.rules.newline.exec(e))&&(e=e.substring(r[0].length),r[0].length>1&&this.tokens.push({type:"space"})),r=this.rules.code.exec(e))e=e.substring(r[0].length),r=r[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?r:r.replace(/\n+$/,"")});else if(r=this.rules.fences.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"code",lang:r[2],text:r[3]||""});else if(r=this.rules.heading.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"heading",depth:r[1].length,text:r[2]});else if(t&&(r=this.rules.nptable.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/\n$/,"").split("\n")},u=0;u ?/gm,""),this.token(r,t,!0),this.tokens.push({type:"blockquote_end"});else if(r=this.rules.list.exec(e)){for(e=e.substring(r[0].length),s=r[2],this.tokens.push({type:"list_start",ordered:s.length>1}),r=r[0].match(this.rules.item),i=!1,d=r.length,u=0;d>u;u++)l=r[u],c=l.length,l=l.replace(/^ *([*+-]|\d+\.) +/,""),~l.indexOf("\n ")&&(c-=l.length,l=this.options.pedantic?l.replace(/^ {1,4}/gm,""):l.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==d-1&&(a=h.bullet.exec(r[u+1])[0],s===a||s.length>1&&a.length>1||(e=r.slice(u+1).join("\n")+e,u=d-1)),o=i||/\n\n(?!\s*$)/.test(l),u!==d-1&&(i="\n"===l.charAt(l.length-1),o||(o=i)),this.tokens.push({type:o?"loose_item_start":"list_item_start"}),this.token(l,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(r=this.rules.html.exec(e))e=e.substring(r[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===r[1]||"script"===r[1]||"style"===r[1]),text:r[0]});else if(!n&&t&&(r=this.rules.def.exec(e)))e=e.substring(r[0].length),this.tokens.links[r[1].toLowerCase()]={href:r[2],title:r[3]};else if(t&&(r=this.rules.table.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:a,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:a,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,u.link=s(u.link)("inside",u._inside)("href",u._href)(),u.reflink=s(u.reflink)("inside",u._inside)(),u.normal=l({},u),u.pedantic=l({},u.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),u.gfm=l({},u.normal,{escape:s(u.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(u.text)("]|","~]|")("|","|https?://|")()}),u.breaks=l({},u.gfm,{br:s(u.br)("{2,}","*")(),text:s(u.gfm.text)("{2,}","*")()}),t.rules=u,t.output=function(e,n,i){var o=new t(n,i);return o.output(e)},t.prototype.output=function(e){for(var t,n,i,r,s="";e;)if(r=this.rules.escape.exec(e))e=e.substring(r[0].length),s+=r[1];else if(r=this.rules.autolink.exec(e))e=e.substring(r[0].length),"@"===r[2]?(n=":"===r[1].charAt(6)?this.mangle(r[1].substring(7)):this.mangle(r[1]),i=this.mangle("mailto:")+n):(n=o(r[1]),i=n),s+=this.renderer.link(i,null,n);else if(this.inLink||!(r=this.rules.url.exec(e))){if(r=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(r[0])&&(this.inLink=!1),e=e.substring(r[0].length),s+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):o(r[0]):r[0];else if(r=this.rules.link.exec(e))e=e.substring(r[0].length),this.inLink=!0,s+=this.outputLink(r,{href:r[2],title:r[3]}),this.inLink=!1;else if((r=this.rules.reflink.exec(e))||(r=this.rules.nolink.exec(e))){if(e=e.substring(r[0].length),t=(r[2]||r[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){s+=r[0].charAt(0),e=r[0].substring(1)+e;continue}this.inLink=!0,s+=this.outputLink(r,t),this.inLink=!1}else if(r=this.rules.strong.exec(e))e=e.substring(r[0].length),s+=this.renderer.strong(this.output(r[2]||r[1]));else if(r=this.rules.em.exec(e))e=e.substring(r[0].length),s+=this.renderer.em(this.output(r[2]||r[1]));else if(r=this.rules.code.exec(e))e=e.substring(r[0].length),s+=this.renderer.codespan(o(r[2],!0));else if(r=this.rules.br.exec(e))e=e.substring(r[0].length),s+=this.renderer.br();else if(r=this.rules.del.exec(e))e=e.substring(r[0].length),s+=this.renderer.del(this.output(r[1]));else if(r=this.rules.text.exec(e))e=e.substring(r[0].length),s+=this.renderer.text(o(this.smartypants(r[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(r[0].length),n=o(r[1]),i=n,s+=this.renderer.link(i,null,n);return s},t.prototype.outputLink=function(e,t){var n=o(t.href),i=t.title?o(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,i,this.output(e[1])):this.renderer.image(n,i,o(e[1]))},t.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},t.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",i=e.length,o=0;i>o;o++)t=e.charCodeAt(o),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},n.prototype.code=function(e,t,n){if(this.options.highlight){var i=this.options.highlight(e,t);null!=i&&i!==e&&(n=!0,e=i)}return t?'
    '+(n?e:o(e,!0))+"\n
    \n":"
    "+(n?e:o(e,!0))+"\n
    "},n.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},n.prototype.html=function(e){return e},n.prototype.heading=function(e,t,n){return"'+e+"\n"},n.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},n.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"\n"},n.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},n.prototype.paragraph=function(e){return"

    "+e+"

    \n"},n.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},n.prototype.tablerow=function(e){return"\n"+e+"\n"},n.prototype.tablecell=function(e,t){var n=t.header?"th":"td",i=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return i+e+"\n"},n.prototype.strong=function(e){return""+e+""},n.prototype.em=function(e){return""+e+""},n.prototype.codespan=function(e){return""+e+""},n.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},n.prototype.del=function(e){return""+e+""},n.prototype.link=function(e,t,n){if(this.options.sanitize){try{var i=decodeURIComponent(r(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(o){return""}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:"))return""}var s='
    "},n.prototype.image=function(e,t,n){var i=''+n+'":">"},n.prototype.text=function(e){return e},i.parse=function(e,t,n){var o=new i(t,n);return o.parse(e)},i.prototype.parse=function(e){this.inline=new t(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var n="";this.next();)n+=this.tok();return n},i.prototype.next=function(){return this.token=this.tokens.pop()},i.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},i.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},i.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,i,o,r="",s="";for(n="",e=0;e",{"class":"btn-group"});for(c=0;c"),d.text(" "+this.__localize(m)).addClass("btn-default btn-sm").addClass(b),b.match(/btn\-(primary|success|info|warning|danger|link)/)&&d.removeClass("btn-default"),d.attr({type:"button",title:this.__localize(f.title)+k,tabindex:y,"data-provider":o,"data-handler":g,"data-hotkey":v}),f.toggle===!0&&d.attr("data-toggle","button"),p=e(""),p.addClass(_),p.prependTo(d),u.append(d),r.push(g),s.push(f.callback)}n.append(u)}}return n},__setListener:function(){var t="undefined"!=typeof this.$textarea.attr("rows"),n=this.$textarea.val().split("\n").length>5?this.$textarea.val().split("\n").length:"5",i=t?this.$textarea.attr("rows"):n;this.$textarea.attr("rows",i),this.$options.resize&&this.$textarea.css("resize",this.$options.resize),this.$textarea.on({focus:e.proxy(this.focus,this),keyup:e.proxy(this.keyup,this),change:e.proxy(this.change,this),select:e.proxy(this.select,this)}),this.eventSupported("keydown")&&this.$textarea.on("keydown",e.proxy(this.keydown,this)),this.eventSupported("keypress")&&this.$textarea.on("keypress",e.proxy(this.keypress,this)),this.$textarea.data("markdown",this)},__handle:function(t){var n=e(t.currentTarget),i=this.$handler,o=this.$callback,r=n.attr("data-handler"),s=i.indexOf(r),a=o[s];e(t.currentTarget).focus(),a(this),this.change(this),r.indexOf("cmdSave")<0&&this.$textarea.focus(),t.preventDefault()},__localize:function(t){var n=e.fn.markdown.messages,i=this.$options.language;return"undefined"!=typeof n&&"undefined"!=typeof n[i]&&"undefined"!=typeof n[i][t]?n[i][t]:t},__getIcon:function(e){return"object"==typeof e?e[this.$options.iconlibrary]:e},setFullscreen:function(t){var n=this.$editor,i=this.$textarea;t===!0?(n.addClass("md-fullscreen-mode"),e("body").addClass("md-nooverflow"),this.$options.onFullscreen(this)):(n.removeClass("md-fullscreen-mode"),e("body").removeClass("md-nooverflow"),1==this.$isPreview&&this.hidePreview().showPreview()),this.$isFullscreen=t,i.focus()},showEditor:function(){var t,n=this,i=this.$ns,o=this.$element,r=(o.css("height"),o.css("width"),this.$editable),s=this.$handler,a=this.$callback,l=this.$options,c=e("
    ",{"class":"md-editor",click:function(){n.focus()}});if(null===this.$editor){var h=e("
    ",{"class":"md-header btn-toolbar"}),u=[];if(l.buttons.length>0&&(u=u.concat(l.buttons[0])),l.additionalButtons.length>0&&e.each(l.additionalButtons[0],function(t,n){var i=e.grep(u,function(e,t){return e.name===n.name});i.length>0?i[0].data=i[0].data.concat(n.data):u.push(l.additionalButtons[0][t])}),l.reorderButtonGroups.length>0&&(u=u.filter(function(e){return l.reorderButtonGroups.indexOf(e.name)>-1}).sort(function(e,t){return l.reorderButtonGroups.indexOf(e.name)l.reorderButtonGroups.indexOf(t.name)?1:0})),u.length>0&&(h=this.__buildButtons([u],h)),l.fullscreen.enable&&h.append('
    ').on("click",".md-control-fullscreen",function(e){e.preventDefault(),n.setFullscreen(!0)}),c.append(h),o.is("textarea"))o.before(c),t=o,t.addClass("md-input"),c.append(t);else{var d="function"==typeof toMarkdown?toMarkdown(o.html()):o.html(),p=e.trim(d);t=e("",it.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Pt=/^key/,Ft=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Wt=/^([^.]*)(?:\.(.+)|)/;rt.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.get(t);if(v)for(n.handler&&(r=n,n=r.handler,o=r.selector),n.guid||(n.guid=rt.guid++),(l=v.events)||(l=v.events={}),(s=v.handle)||(s=v.handle=function(e){return"undefined"!=typeof rt&&rt.event.triggered!==e.type?rt.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(wt)||[""],c=e.length;c--;)a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f&&(p=rt.event.special[f]||{},f=(o?p.delegateType:p.bindType)||f,p=rt.event.special[f]||{},u=rt.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&rt.expr.match.needsContext.test(o),namespace:h.join(".")},r),(d=l[f])||(d=l[f]=[],d.delegateCount=0,p.setup&&p.setup.call(t,i,h,s)!==!1||t.addEventListener&&t.addEventListener(f,s)),p.add&&(p.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?d.splice(d.delegateCount++,0,u):d.push(u),rt.event.global[f]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.hasData(t)&&kt.get(t);if(v&&(l=v.events)){for(e=(e||"").match(wt)||[""],c=e.length;c--;)if(a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f){for(p=rt.event.special[f]||{},f=(i?p.delegateType:p.bindType)||f,d=l[f]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=d.length;r--;)u=d[r],!o&&g!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(r,1),u.selector&&d.delegateCount--,p.remove&&p.remove.call(t,u));s&&!d.length&&(p.teardown&&p.teardown.call(t,h,v.handle)!==!1||rt.removeEvent(t,f,v.handle),delete l[f])}else for(f in l)rt.event.remove(t,f+e[c],n,i,!0);rt.isEmptyObject(l)&&kt.remove(t,"handle events")}},dispatch:function(t){t=rt.event.fix(t);var e,n,i,o,r,s=[],a=G.call(arguments),l=(kt.get(this,"events")||{})[t.type]||[],c=rt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=rt.event.handlers.call(this,t,l),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,n=0;(r=o.handlers[n++])&&!t.isImmediatePropagationStopped();)t.rnamespace&&!t.rnamespace.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((rt.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,a),void 0!==i&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,r,s=[],a=e.delegateCount,l=t.target;if(a&&l.nodeType&&("click"!==t.type||isNaN(t.button)||t.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==t.type)){for(i=[],n=0;a>n;n++)r=e[n],o=r.selector+" ",void 0===i[o]&&(i[o]=r.needsContext?rt(o,this).index(l)>-1:rt.find(o,this,null,[l]).length),i[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return a]*)\/>/gi,_t=/\s*$/g;rt.extend({htmlPrefilter:function(t){return t.replace(Mt,"<$1>")},clone:function(t,e,n){var i,o,r,s,a=t.cloneNode(!0),l=rt.contains(t.ownerDocument,t);if(!(it.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||rt.isXMLDoc(t)))for(s=u(a),r=u(t),i=0,o=r.length;o>i;i++)w(r[i],s[i]);if(e)if(n)for(r=r||u(t),s=s||u(a),i=0,o=r.length;o>i;i++)x(r[i],s[i]);else x(t,a);return s=u(a,"script"),s.length>0&&p(s,!l&&u(t,"script")),a},cleanData:function(t){for(var e,n,i,o=rt.event.special,r=0;void 0!==(n=t[r]);r++)if($t(n)){if(e=n[kt.expando]){if(e.events)for(i in e.events)o[i]?rt.event.remove(n,i):rt.removeEvent(n,i,e.handle);n[kt.expando]=void 0}n[Et.expando]&&(n[Et.expando]=void 0)}}}),rt.fn.extend({domManip:T,detach:function(t){return C(this,t,!0)},remove:function(t){return C(this,t)},text:function(t){return Ct(this,function(t){return void 0===t?rt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(rt.cleanData(u(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null==t?!1:t,e=null==e?t:e,this.map(function(){return rt.clone(this,t,e)})},html:function(t){return Ct(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!_t.test(t)&&!qt[(Lt.exec(t)||["",""])[1].toLowerCase()]){t=rt.htmlPrefilter(t);try{for(;i>n;n++)e=this[n]||{},1===e.nodeType&&(rt.cleanData(u(e,!1)),e.innerHTML=t);e=0}catch(o){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return T(this,arguments,function(e){var n=this.parentNode;rt.inArray(this,t)<0&&(rt.cleanData(u(this)),n&&n.replaceChild(e,this))},t)}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var n,i=[],o=rt(t),r=o.length-1,s=0;r>=s;s++)n=s===r?this:this.clone(!0),rt(o[s])[e](n),K.apply(i,n.get());return this.pushStack(i)}});var Xt,Vt={HTML:"block",BODY:"block"},Qt=/^margin/,Yt=new RegExp("^("+Dt+")(?!px)[a-z%]+$","i"),Gt=function(e){var n=e.ownerDocument.defaultView;return n&&n.opener||(n=t),n.getComputedStyle(e)},Jt=function(t,e,n,i){var o,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];o=n.apply(t,i||[]);for(r in e)t.style[r]=s[r];return o},Kt=Y.documentElement;!function(){function e(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",Kt.appendChild(s);var e=t.getComputedStyle(a);n="1%"!==e.top,r="2px"===e.marginLeft,i="4px"===e.width,a.style.marginRight="50%",o="4px"===e.marginRight,Kt.removeChild(s)}var n,i,o,r,s=Y.createElement("div"),a=Y.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",it.clearCloneStyle="content-box"===a.style.backgroundClip,s.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",s.appendChild(a),rt.extend(it,{pixelPosition:function(){return e(),n},boxSizingReliable:function(){return null==i&&e(),i},pixelMarginRight:function(){return null==i&&e(),o},reliableMarginLeft:function(){return null==i&&e(),r},reliableMarginRight:function(){var e,n=a.appendChild(Y.createElement("div"));return n.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",a.style.width="1px",Kt.appendChild(s),e=!parseFloat(t.getComputedStyle(n).marginRight),Kt.removeChild(s),a.removeChild(n),e}}))}();var Zt=/^(none|table(?!-c[ea]).+)/,te={position:"absolute",visibility:"hidden",display:"block"},ee={letterSpacing:"0",fontWeight:"400"},ne=["Webkit","O","Moz","ms"],ie=Y.createElement("div").style;rt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=E(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=rt.camelCase(e),l=t.style;return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],void 0===n?s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:l[e]:(r=typeof n,"string"===r&&(o=At.exec(n))&&o[1]&&(n=c(t,e,o),r="number"),void(null!=n&&n===n&&("number"===r&&(n+=o&&o[3]||(rt.cssNumber[a]?"":"px")),it.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l[e]=n))))}},css:function(t,e,n,i){var o,r,s,a=rt.camelCase(e);return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],s&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=E(t,e,i)),"normal"===o&&e in ee&&(o=ee[e]),""===n||n?(r=parseFloat(o),n===!0||isFinite(r)?r||0:o):o}}),rt.each(["height","width"],function(t,e){rt.cssHooks[e]={get:function(t,n,i){return n?Zt.test(rt.css(t,"display"))&&0===t.offsetWidth?Jt(t,te,function(){return j(t,e,i)}):j(t,e,i):void 0},set:function(t,n,i){var o,r=i&&Gt(t),s=i&&A(t,e,i,"border-box"===rt.css(t,"boxSizing",!1,r),r);return s&&(o=At.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=rt.css(t,e)),D(t,n,s)}}}),rt.cssHooks.marginLeft=S(it.reliableMarginLeft,function(t,e){return e?(parseFloat(E(t,"marginLeft"))||t.getBoundingClientRect().left-Jt(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px":void 0}),rt.cssHooks.marginRight=S(it.reliableMarginRight,function(t,e){return e?Jt(t,{display:"inline-block"},E,[t,"marginRight"]):void 0}),rt.each({margin:"",padding:"",border:"Width"},function(t,e){rt.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[t+jt[i]+e]=r[i]||r[i-2]||r[0];return o}},Qt.test(t)||(rt.cssHooks[t+e].set=D)}),rt.fn.extend({css:function(t,e){return Ct(this,function(t,e,n){var i,o,r={},s=0;if(rt.isArray(e)){for(i=Gt(t),o=e.length;o>s;s++)r[e[s]]=rt.css(t,e[s],!1,i);return r}return void 0!==n?rt.style(t,e,n):rt.css(t,e)},t,e,arguments.length>1)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ot(this)?rt(this).show():rt(this).hide()})}}),rt.Tween=I,I.prototype={constructor:I,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||rt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(rt.cssNumber[n]?"":"px")},cur:function(){var t=I.propHooks[this.prop];return t&&t.get?t.get(this):I.propHooks._default.get(this)},run:function(t){var e,n=I.propHooks[this.prop];return this.options.duration?this.pos=e=rt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=rt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){rt.fx.step[t.prop]?rt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[rt.cssProps[t.prop]]&&!rt.cssHooks[t.prop]?t.elem[t.prop]=t.now:rt.style(t.elem,t.prop,t.now+t.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},rt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},rt.fx=I.prototype.init,rt.fx.step={};var oe,re,se=/^(?:toggle|show|hide)$/,ae=/queueHooks$/;rt.Animation=rt.extend(F,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return c(n.elem,t,At.exec(e),n),n}]},tweener:function(t,e){rt.isFunction(t)?(e=t,t=["*"]):t=t.match(wt);for(var n,i=0,o=t.length;o>i;i++)n=t[i],F.tweeners[n]=F.tweeners[n]||[],F.tweeners[n].unshift(e)},prefilters:[H],prefilter:function(t,e){e?F.prefilters.unshift(t):F.prefilters.push(t)}}),rt.speed=function(t,e,n){var i=t&&"object"==typeof t?rt.extend({},t):{complete:n||!n&&e||rt.isFunction(t)&&t,duration:t,easing:n&&e||e&&!rt.isFunction(e)&&e};return i.duration=rt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in rt.fx.speeds?rt.fx.speeds[i.duration]:rt.fx.speeds._default,null!=i.queue&&i.queue!==!0||(i.queue="fx"),i.old=i.complete,i.complete=function(){rt.isFunction(i.old)&&i.old.call(this),i.queue&&rt.dequeue(this,i.queue)},i},rt.fn.extend({fadeTo:function(t,e,n,i){return this.filter(Ot).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var o=rt.isEmptyObject(t),r=rt.speed(e,n,i),s=function(){var e=F(this,rt.extend({},t),r);(o||kt.get(this,"finish"))&&e.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,o=null!=t&&t+"queueHooks",r=rt.timers,s=kt.get(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&ae.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=t&&r[o].queue!==t||(r[o].anim.stop(n),e=!1,r.splice(o,1));!e&&n||rt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,n=kt.get(this),i=n[t+"queue"],o=n[t+"queueHooks"],r=rt.timers,s=i?i.length:0;for(n.finish=!0,rt.queue(this,t,[]),o&&o.stop&&o.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),rt.each(["toggle","show","hide"],function(t,e){var n=rt.fn[e];rt.fn[e]=function(t,i,o){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(R(e,!0),t,i,o)}}),rt.each({slideDown:R("show"),slideUp:R("hide"),slideToggle:R("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){rt.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),rt.timers=[],rt.fx.tick=function(){var t,e=0,n=rt.timers; -for(oe=rt.now();e1)},removeAttr:function(t){return this.each(function(){rt.removeAttr(this,t)})}}),rt.extend({attr:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?"undefined"==typeof t.getAttribute?rt.prop(t,e,n):(1===r&&rt.isXMLDoc(t)||(e=e.toLowerCase(),o=rt.attrHooks[e]||(rt.expr.match.bool.test(e)?le:void 0)),void 0!==n?null===n?void rt.removeAttr(t,e):o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(i=o.get(t,e))?i:(i=rt.find.attr(t,e),null==i?void 0:i)):void 0},attrHooks:{type:{set:function(t,e){if(!it.radioValue&&"radio"===e&&rt.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i,o=0,r=e&&e.match(wt);if(r&&1===t.nodeType)for(;n=r[o++];)i=rt.propFix[n]||n,rt.expr.match.bool.test(n)&&(t[i]=!1),t.removeAttribute(n)}}),le={set:function(t,e,n){return e===!1?rt.removeAttr(t,n):t.setAttribute(n,n),n}},rt.each(rt.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ce[e]||rt.find.attr;ce[e]=function(t,e,i){var o,r;return i||(r=ce[e],ce[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,ce[e]=r),o}});var ue=/^(?:input|select|textarea|button)$/i,pe=/^(?:a|area)$/i;rt.fn.extend({prop:function(t,e){return Ct(this,rt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[rt.propFix[t]||t]})}}),rt.extend({prop:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?(1===r&&rt.isXMLDoc(t)||(e=rt.propFix[e]||e,o=rt.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]):void 0},propHooks:{tabIndex:{get:function(t){var e=rt.find.attr(t,"tabindex");return e?parseInt(e,10):ue.test(t.nodeName)||pe.test(t.nodeName)&&t.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),it.optSelected||(rt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),rt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){rt.propFix[this.toLowerCase()]=this});var de=/[\t\r\n\f]/g;rt.fn.extend({addClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).addClass(t.call(this,e,W(this)))});if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).removeClass(t.call(this,e,W(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)for(;i.indexOf(" "+r+" ")>-1;)i=i.replace(" "+r+" "," ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):rt.isFunction(t)?this.each(function(n){rt(this).toggleClass(t.call(this,n,W(this),e),e)}):this.each(function(){var e,i,o,r;if("string"===n)for(i=0,o=rt(this),r=t.match(wt)||[];e=r[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||(e=W(this),e&&kt.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||t===!1?"":kt.get(this,"__className__")||""))})},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+W(n)+" ").replace(de," ").indexOf(e)>-1)return!0;return!1}});var fe=/\r/g,he=/[\x20\t\r\n\f]+/g;rt.fn.extend({val:function(t){var e,n,i,o=this[0];return arguments.length?(i=rt.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,rt(this).val()):t,null==o?o="":"number"==typeof o?o+="":rt.isArray(o)&&(o=rt.map(o,function(t){return null==t?"":t+""})),e=rt.valHooks[this.type]||rt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))})):o?(e=rt.valHooks[o.type]||rt.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(fe,""):null==n?"":n)):void 0}}),rt.extend({valHooks:{option:{get:function(t){var e=rt.find.attr(t,"value");return null!=e?e:rt.trim(rt.text(t)).replace(he," ")}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,r="select-one"===t.type||0>o,s=r?null:[],a=r?o+1:i.length,l=0>o?a:r?o:0;a>l;l++)if(n=i[l],(n.selected||l===o)&&(it.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!rt.nodeName(n.parentNode,"optgroup"))){if(e=rt(n).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var n,i,o=t.options,r=rt.makeArray(e),s=o.length;s--;)i=o[s],(i.selected=rt.inArray(rt.valHooks.option.get(i),r)>-1)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),rt.each(["radio","checkbox"],function(){rt.valHooks[this]={set:function(t,e){return rt.isArray(e)?t.checked=rt.inArray(rt(t).val(),e)>-1:void 0}},it.checkOn||(rt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var ge=/^(?:focusinfocus|focusoutblur)$/;rt.extend(rt.event,{trigger:function(e,n,i,o){var r,s,a,l,c,u,p,d=[i||Y],f=nt.call(e,"type")?e.type:e,h=nt.call(e,"namespace")?e.namespace.split("."):[];if(s=a=i=i||Y,3!==i.nodeType&&8!==i.nodeType&&!ge.test(f+rt.event.triggered)&&(f.indexOf(".")>-1&&(h=f.split("."),f=h.shift(),h.sort()),c=f.indexOf(":")<0&&"on"+f,e=e[rt.expando]?e:new rt.Event(f,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:rt.makeArray(n,[e]),p=rt.event.special[f]||{},o||!p.trigger||p.trigger.apply(i,n)!==!1)){if(!o&&!p.noBubble&&!rt.isWindow(i)){for(l=p.delegateType||f,ge.test(l+f)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(i.ownerDocument||Y)&&d.push(a.defaultView||a.parentWindow||t)}for(r=0;(s=d[r++])&&!e.isPropagationStopped();)e.type=r>1?l:p.bindType||f,u=(kt.get(s,"events")||{})[e.type]&&kt.get(s,"handle"),u&&u.apply(s,n),u=c&&s[c],u&&u.apply&&$t(s)&&(e.result=u.apply(s,n),e.result===!1&&e.preventDefault());return e.type=f,o||e.isDefaultPrevented()||p._default&&p._default.apply(d.pop(),n)!==!1||!$t(i)||c&&rt.isFunction(i[f])&&!rt.isWindow(i)&&(a=i[c],a&&(i[c]=null),rt.event.triggered=f,i[f](),rt.event.triggered=void 0,a&&(i[c]=a)),e.result}},simulate:function(t,e,n){var i=rt.extend(new rt.Event,n,{type:t,isSimulated:!0});rt.event.trigger(i,null,e),i.isDefaultPrevented()&&n.preventDefault()}}),rt.fn.extend({trigger:function(t,e){return this.each(function(){rt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];return n?rt.event.trigger(t,e,n,!0):void 0}}),rt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){rt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),rt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),it.focusin="onfocusin"in t,it.focusin||rt.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){rt.event.simulate(e,t.target,rt.event.fix(t))};rt.event.special[e]={setup:function(){var i=this.ownerDocument||this,o=kt.access(i,e);o||i.addEventListener(t,n,!0),kt.access(i,e,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=kt.access(i,e)-1;o?kt.access(i,e,o):(i.removeEventListener(t,n,!0),kt.remove(i,e))}}});var ve=t.location,me=rt.now(),ye=/\?/;rt.parseJSON=function(t){return JSON.parse(t+"")},rt.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(i){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||rt.error("Invalid XML: "+e),n};var be=/#.*$/,xe=/([?&])_=[^&]*/,we=/^(.*?):[ \t]*([^\r\n]*)$/gm,Te=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ce=/^(?:GET|HEAD)$/,$e=/^\/\//,ke={},Ee={},Se="*/".concat("*"),Ne=Y.createElement("a");Ne.href=ve.href,rt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ve.href,type:"GET",isLocal:Te.test(ve.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Se,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":rt.parseJSON,"text xml":rt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?B(B(t,rt.ajaxSettings),e):B(rt.ajaxSettings,t)},ajaxPrefilter:M(ke),ajaxTransport:M(Ee),ajax:function(e,n){function i(e,n,i,a){var c,p,y,b,w,C=n;2!==x&&(x=2,l&&t.clearTimeout(l),o=void 0,s=a||"",T.readyState=e>0?4:0,c=e>=200&&300>e||304===e,i&&(b=U(d,T,i)),b=z(d,b,T,c),c?(d.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(rt.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(rt.etag[r]=w)),204===e||"HEAD"===d.type?C="nocontent":304===e?C="notmodified":(C=b.state,p=b.data,y=b.error,c=!y)):(y=C,!e&&C||(C="error",0>e&&(e=0))),T.status=e,T.statusText=(n||C)+"",c?g.resolveWith(f,[p,C,T]):g.rejectWith(f,[T,C,y]),T.statusCode(m),m=void 0,u&&h.trigger(c?"ajaxSuccess":"ajaxError",[T,d,c?p:y]),v.fireWith(f,[T,C]),u&&(h.trigger("ajaxComplete",[T,d]),--rt.active||rt.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=void 0),n=n||{};var o,r,s,a,l,c,u,p,d=rt.ajaxSetup({},n),f=d.context||d,h=d.context&&(f.nodeType||f.jquery)?rt(f):rt.event,g=rt.Deferred(),v=rt.Callbacks("once memory"),m=d.statusCode||{},y={},b={},x=0,w="canceled",T={readyState:0,getResponseHeader:function(t){var e;if(2===x){if(!a)for(a={};e=we.exec(s);)a[e[1].toLowerCase()]=e[2];e=a[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===x?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return x||(t=b[n]=b[n]||t,y[t]=e),this},overrideMimeType:function(t){return x||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>x)for(e in t)m[e]=[m[e],t[e]];else T.always(t[T.status]);return this},abort:function(t){var e=t||w;return o&&o.abort(e),i(0,e),this}};if(g.promise(T).complete=v.add,T.success=T.done,T.error=T.fail,d.url=((e||d.url||ve.href)+"").replace(be,"").replace($e,ve.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=rt.trim(d.dataType||"*").toLowerCase().match(wt)||[""],null==d.crossDomain){c=Y.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=Ne.protocol+"//"+Ne.host!=c.protocol+"//"+c.host}catch(C){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=rt.param(d.data,d.traditional)),_(ke,d,n,T),2===x)return T;u=rt.event&&d.global,u&&0===rt.active++&&rt.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ce.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(ye.test(r)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=xe.test(r)?r.replace(xe,"$1_="+me++):r+(ye.test(r)?"&":"?")+"_="+me++)),d.ifModified&&(rt.lastModified[r]&&T.setRequestHeader("If-Modified-Since",rt.lastModified[r]),rt.etag[r]&&T.setRequestHeader("If-None-Match",rt.etag[r])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",d.contentType),T.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Se+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)T.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(f,T,d)===!1||2===x))return T.abort();w="abort";for(p in{success:1,error:1,complete:1})T[p](d[p]);if(o=_(Ee,d,n,T)){if(T.readyState=1,u&&h.trigger("ajaxSend",[T,d]),2===x)return T;d.async&&d.timeout>0&&(l=t.setTimeout(function(){T.abort("timeout")},d.timeout));try{x=1,o.send(y,i)}catch(C){if(!(2>x))throw C;i(-1,C)}}else i(-1,"No Transport");return T},getJSON:function(t,e,n){return rt.get(t,e,n,"json")},getScript:function(t,e){return rt.get(t,void 0,e,"script")}}),rt.each(["get","post"],function(t,e){rt[e]=function(t,n,i,o){return rt.isFunction(n)&&(o=o||i,i=n,n=void 0),rt.ajax(rt.extend({url:t,type:e,dataType:o,data:n,success:i},rt.isPlainObject(t)&&t))}}),rt._evalUrl=function(t){return rt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},rt.fn.extend({wrapAll:function(t){var e;return rt.isFunction(t)?this.each(function(e){rt(this).wrapAll(t.call(this,e))}):(this[0]&&(e=rt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return rt.isFunction(t)?this.each(function(e){rt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=rt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=rt.isFunction(t);return this.each(function(n){rt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){rt.nodeName(this,"body")||rt(this).replaceWith(this.childNodes)}).end()}}),rt.expr.filters.hidden=function(t){return!rt.expr.filters.visible(t)},rt.expr.filters.visible=function(t){return t.offsetWidth>0||t.offsetHeight>0||t.getClientRects().length>0};var De=/%20/g,Ae=/\[\]$/,je=/\r?\n/g,Oe=/^(?:submit|button|image|reset|file)$/i,Ie=/^(?:input|select|textarea|keygen)/i;rt.param=function(t,e){var n,i=[],o=function(t,e){e=rt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=rt.ajaxSettings&&rt.ajaxSettings.traditional),rt.isArray(t)||t.jquery&&!rt.isPlainObject(t))rt.each(t,function(){o(this.name,this.value)});else for(n in t)X(n,t[n],e,o);return i.join("&").replace(De,"+")},rt.fn.extend({serialize:function(){return rt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=rt.prop(this,"elements");return t?rt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!rt(this).is(":disabled")&&Ie.test(this.nodeName)&&!Oe.test(t)&&(this.checked||!It.test(t))}).map(function(t,e){var n=rt(this).val();return null==n?null:rt.isArray(n)?rt.map(n,function(t){return{name:e.name,value:t.replace(je,"\r\n")}}):{name:e.name,value:n.replace(je,"\r\n")}}).get()}}),rt.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(e){}};var Le={0:200,1223:204},Re=rt.ajaxSettings.xhr();it.cors=!!Re&&"withCredentials"in Re,it.ajax=Re=!!Re,rt.ajaxTransport(function(e){var n,i;return it.cors||Re&&!e.crossDomain?{send:function(o,r){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(t){return function(){n&&(n=i=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?r(0,"error"):r(a.status,a.statusText):r(Le[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),i=a.onerror=n("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&t.setTimeout(function(){n&&i()})},n=n("abort");try{a.send(e.hasContent&&e.data||null)}catch(l){if(n)throw l}},abort:function(){n&&n()}}:void 0}),rt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return rt.globalEval(t),t}}}),rt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),rt.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,o){e=rt(" -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/new_topic.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/new_topic.html deleted file mode 100644 index 08bb670a..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/new_topic.html +++ /dev/null @@ -1,52 +0,0 @@ -{% set page_title = _("New Topic") %} -{% set active_forum_nav=True %} - -{% extends theme("layout.html") %} - -{% block content %} -{% from theme("macros.html") import render_field, render_submit_field, render_quickreply %} - -
    - - - -
    - {{ form.hidden_tag() }} -
    -
    - {% trans %}New Topic{% endtrans %} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.title, div_class="col-md-12 col-sm-12 col-xs-12") }} - -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/online_users.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/online_users.html deleted file mode 100644 index 63d2451b..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/online_users.html +++ /dev/null @@ -1,24 +0,0 @@ -{% set page_title = _("Online Users") %} - -{% extends theme("layout.html") %} - - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - - -{% block content %} - -{% trans %}Online Users{% endtrans %} -{% for user in online_users %} - {% if config["REDIS_ENABLED"] %} - {{ user }}{% if not loop.last %}, {% endif %} - {% else %} - {{ user.username }}{% if not loop.last %}, {% endif %} - {% endif %} -{% endfor %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/report_post.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/report_post.html deleted file mode 100644 index b3c83b58..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/report_post.html +++ /dev/null @@ -1,23 +0,0 @@ -{% set page_title = _("Report Post") %} - -{% extends theme("layout.html") %} - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - -{% block content %} -{% from theme("macros.html") import render_field %} - -
    - {{ form.hidden_tag() }} -

    {% trans %}Report Post{% endtrans %}

    - - {{ render_field(form.reason) }} - - -
    {% trans %}Close{% endtrans %} -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_form.html deleted file mode 100644 index ce27cfa6..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_form.html +++ /dev/null @@ -1,27 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme("macros.html") import horizontal_field %} - -
    - - -
    -
    - {% trans %}Search{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.search_types)}} - {{ horizontal_field(form.search_query)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_result.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_result.html deleted file mode 100644 index 64e2fa83..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/search_result.html +++ /dev/null @@ -1,345 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, group_field, topic_pages %} - -
    - - - {% if result['post'] %} -
    -
    - {% trans %}Posts{% endtrans %} -
    -
    - {% for post in result['post'] %} -
    - -
    - - {% if post.user_id %} - - - - {% if post.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ post.user.primary_group.name }}
    - - {% if post.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ post.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ post.user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if post.user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} -
    -
    -
    - {% else %} - -
    -
    {% trans %}No posts found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['user'] %} -
    -
    - {% trans %}Users{% endtrans %} -
    -
    -
    -
    #
    -
    {% trans %}Username{% endtrans %}
    - - -
    {% trans %}Group{% endtrans %}
    -
    - {% for user in result['user'].all() %} -
    -
    {{ user.id }}
    - - - -
    {{ user.primary_group.name }}
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['topic'] %} -
    -
    - {% trans %}Topics{% endtrans %} -
    - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - - {% for topic in result['topic'].all() %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - - {% else %} - - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - {% else %} -
    -
    - {% trans %}No topics found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['forum'] %} -
    -
    - Forums -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - {% for forum in result['forum'].all() %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - - - - -
    - --- -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - - - - -
    - {% if forum.last_post_id %} -
    - - {{ forum.last_post_title|crop_title }} - -
    - -
    - {{ forum.last_post_created|time_since }} -
    - - - - {% else %} - {% trans %}No posts.{% endtrans %} - {% endif %} {# endif forum.last_post_id #} -
    - - {% endif %} {# endif forum.external #} -
    - {% else %} -
    -
    - {% trans %}No forums found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic.html deleted file mode 100644 index fe4a6e20..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic.html +++ /dev/null @@ -1,178 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    - - {% if post.user_id %} - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    - - {% if user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_controls.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_controls.html deleted file mode 100644 index 1078cf38..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_controls.html +++ /dev/null @@ -1,102 +0,0 @@ -
    -
    -
    - {{ render_pagination(posts, topic.url) }} -
    -
    - -{% if current_user.is_authenticated %} -
    -
    - {% if current_user|can_moderate(topic.forum) or current_user|delete_topic(topic)%} - -
    - - -
    - - {% endif %} - - {% if current_user.is_tracking_topic(topic) %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if current_user|post_reply(topic) %} - - {% trans %}Reply{% endtrans %} - - {% else %} -
    {% trans %}Locked{% endtrans %}
    - {% endif %} -
    -
    -{% endif %} {# end current_user.is_authenticated #} -
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_horizontal.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_horizontal.html deleted file mode 100644 index acc1f166..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topic_horizontal.html +++ /dev/null @@ -1,187 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block css %} - -{% endblock %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    -
    - {% if user.avatar %} -
    - -
    - {% endif %} - -
    - - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    -
    -
    - -
    -
    -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} -
    -
    -
    - -
    - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'id': 'quickreply-editor'}) }} -
    -
    -
    - Markdown - help - emojis -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topictracker.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topictracker.html deleted file mode 100644 index 5788fe35..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/forum/topictracker.html +++ /dev/null @@ -1,124 +0,0 @@ -{% set page_title = _("Topic Tracker") %} -{% set active_forum_nav=False %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -
    -
    - -
    - - - -
    -
    - {{ render_pagination(topics, url_for('forum.topictracker')) }} -
    -
    - -
    - - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    -
    - - {% for topic, topicread in topics.items %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% else %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - -
    -
    - {% else %} -
    -
    - {% trans %}No Topics.{% endtrans %} -
    -
    - {% endfor %} -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/layout.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/layout.html deleted file mode 100644 index 49e9d59d..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/layout.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - {% block title %} - {%- if not page_title -%} - {{ flaskbb_config["PROJECT_TITLE"] }} - {{ flaskbb_config["PROJECT_SUBTITLE"] }} - {%- else -%} - {{ page_title }} - {{ flaskbb_config["PROJECT_TITLE"] }} - {%- endif -%} - {% endblock %} - - - {% block stylesheets %} - - - - - {% endblock %} - - {# for extra stylesheets. e.q. a template has to add something #} - {% block css %} - {% endblock %} - - {# for various extra things #} - {% block head_extra %} - {% endblock %} - - - - - -
    -
    - - - {% block header %} -
    -
    -
    {{ flaskbb_config["PROJECT_TITLE"] }}
    -
    {{ flaskbb_config["PROJECT_SUBTITLE"] }}
    -
    -
    - {% endblock %} - - - {% block navigation %} - - {% endblock %} - - - {% block messages %} -
    - {% include theme('flashed_messages.html') %} -
    - {% endblock %} - - - {% block content %} - {% endblock %} -
    - - - {% block footer %} - - {% endblock %} - -
    - - {% block javascript %} - - - {% endblock %} - - {# for extra scripts in other templates. #} - {% block scripts %} - {% endblock %} - - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/macros.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/macros.html deleted file mode 100644 index 501dbbdc..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/macros.html +++ /dev/null @@ -1,415 +0,0 @@ -{%- macro field_label(field) -%} - -{% endmacro %} - - -{%- macro field_description(field) -%} - {% if field.description %} - {{ field.description|safe }} - {% endif %} -{%- endmacro -%} - - -{%- macro field_errors(field) -%} - {% if field.errors %} - {%- for error in field.errors -%} - {{error}} - {%- endfor -%} - {% endif %} -{%- endmacro -%} - - -{%- macro render_quickreply(field, rows, cols, div_class='') -%} -{%- if kwargs['required'] or field.flags.required -%} - {% if div_class %} - {{ field(class=div_class, required="required", cols=cols, rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", required="required", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- else -%} - {% if div_class %} - {{ field(class=div_class, cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{# Renders a non bootstrap input field #} -{%- macro render_input_field(field, div_class='', placeholder='') -%} -{%- if div_class -%} -
    -{%- endif -%} - -{%- if placeholder -%} - {% set field_placeholder = placeholder %} -{%- else -%} - {% set field_placeholder = field.label.text %} -{%- endif -%} - -{%- if kwargs['required'] or field.flags.required -%} - {{ field(required="required", placeholder=field_placeholder) }} -{%- else -%} - {{ field(placeholder=field_placeholder) }} -{% endif %} - -{%- if div_class -%} -
    -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{%- macro render_boolean_field(field, inline=False) -%} -
    - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro render_select_field(field, div_class='', select_class="form-control") -%} -
    - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class) }} - {% else %} - {{ field(class=select_class) }} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro render_submit_field(field, div_class='', input_class='') -%} -{% if div_class %} -
    -{% endif %} - - {{ field(class=input_class or 'btn btn-success') }} - -{% if div_class %} -
    -{% endif %} -{%- endmacro -%} - - -{%- macro render_field(field, with_label=True, div_class='', rows='') -%} -
    - -
    - {% if with_label %} - - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if rows %} - {{ field(class="form-control", required="required", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", required="required", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- else -%} - {% if rows %} - {{ field(class="form-control", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro inline_field(field, label_text='', label_class='') -%} -
    - {{field.label(class="sr-only")}} - -
    - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro group_field(field, label_text='', label_class='', css_class='form-control form-grouped') -%} -
    - {{field.label(class="sr-only")}} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro input_group_field(field, label_text='', css_class='form-control') -%} - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} -{%- endmacro -%} - - -{%- macro horizontal_select_field(field, div_class='', label_class='', select_class="form-control", surrounded_div="col-sm-4") -%} -
    - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - -
    - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class, surrounded_div=surrounded_div) }} - {% else %} - {{ field(class=select_class, surrounded_div=surrounded_div) }} - {%- endif -%} -
    - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro horizontal_boolean_field(field, div_class='') -%} -
    - {{ render_boolean_field(field, **kwargs) }} -
    -{%- endmacro -%} - - -{%- macro horizontal_submit_field(field, div_class='', input_class='') -%} -
    - {{ field(class=input_class or 'btn btn-success') }} -
    -{%- endmacro -%} - - -{%- macro horizontal_field(field, label_text='', label_class='', div_class='', input_class='') -%} -
    - - {% if field.type == "BooleanField" or field.type == "SubmitField" %} - {% if field.type == "BooleanField" %} - {{ horizontal_boolean_field(field, div_class) }} - {% else %} - {{ horizontal_submit_field(field, div_class) }} - {% endif %} - {% else %} - - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, required="required", **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, required="required", **kwargs) }} - {% endif %} - {%- else -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} -
    - {% endif %} - - {{ field_description(field) }} - {{ field_errors(field) }} - -
    -{%- endmacro -%} - - -{% macro topnav(endpoint, name, icon='', id='', active=False) %} -
  • - - {% if icon %} {% endif %}{{ name }} - -
  • -{% endmacro %} - -{% macro is_active(endpoint, active=False) %} - {%- if endpoint == request.endpoint or active == True -%} - active - {%- endif -%} -{% endmacro %} - -{% macro navlink(endpoint, name, icon='', active=False) %} -
  • - {% if icon %} {% endif %} {{ name }} -
  • -{% endmacro %} - -{% macro tablink_href(endpoint, name, active=False) %} -
  • - {{ name }} -
  • -{% endmacro %} - -{% macro render_pagination(page_obj, url, ul_class='') %} -
      -
    • {% trans %}Pages{% endtrans %}:
    • - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{% macro render_topic_pagination(page_obj, url) %} - -{% endmacro %} - - -{% macro message_pagination(page_obj, url) %} -
      - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{# Generates a some kind of pagination for the posts in topic in the forum view. #} -{%- macro topic_pages(topic_obj, per_page=10) -%} -{% set topic_pages = (topic_obj.post_count / per_page)|round|int %} -{%- if topic_pages > 1 -%} -[ - {%- for page in range(0, topic_pages) -%} - {{ page+1 }}{% if not loop.last %} {% endif %} - {%- endfor -%} -] -{%- endif -%} -{%- endmacro -%} - - -{# Generates a topic url with an anchor to the post #} -{%- macro generate_post_url(topic, post, page) -%} - {%- if page > 1 -%} - {{ topic.url }}?page={{ page }}#pid{{ post.id }} - {%- else -%} - {{ topic.url }}#pid{{ post.id }} - {%- endif -%} -{%- endmacro -%} - - -{# Generates the post id for the topic. Each topic starts with the post id 1 #} -{%- macro generate_post_id(posts, page, per_page) -%} - {%- if posts.page == 1 -%} - {{ page }} - {%- else -%} - {{ page + (posts.page - 1) * per_page }} - {%- endif -%} -{%- endmacro -%} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/banned_users.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/banned_users.html deleted file mode 100644 index afc33799..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/banned_users.html +++ /dev/null @@ -1,125 +0,0 @@ -{% set page_title = _("Banned Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field,navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Banned Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    -
    - {% if current_user|can_ban_user %} -
    - - -
    - {% endif %} -
    -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/category_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/category_form.html deleted file mode 100644 index 48688240..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/category_form.html +++ /dev/null @@ -1,55 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ render_field(form.position) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    - -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forum_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forum_form.html deleted file mode 100644 index 7e7f9049..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forum_form.html +++ /dev/null @@ -1,59 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, render_boolean_field, render_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_field(form.category) }} - {{ render_field(form.position) }} - {{ render_field(form.external) }} - {{ render_field(form.moderators) }} - {{ render_boolean_field(form.show_moderators) }} - {{ render_boolean_field(form.locked) }} - {{ render_select_field(form.groups) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forums.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forums.html deleted file mode 100644 index 0dab63da..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/forums.html +++ /dev/null @@ -1,175 +0,0 @@ -{% set page_title = _("Forums") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - - -
    -
    -
    - {% trans %}Manage Forums{% endtrans %} -
    -
    -
    - {% for category in categories %} -
    -
    -
    - -
    -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - -
    -
    - {% for forum in category.forums %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Link{% endtrans %} - - -
    - - -
    -
    -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Forum{% endtrans %} - - -
    - - -
    -
    -
    - - {% endif %} {# endif forum.external #} -
    - - {% endfor %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/group_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/group_form.html deleted file mode 100644 index 69b0b236..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/group_form.html +++ /dev/null @@ -1,68 +0,0 @@ -{% set page_title = title %} -{% set active_management_group_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_boolean_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.name) }} - - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_boolean_field(form.admin) }} - {{ render_boolean_field(form.super_mod) }} - - {{ render_boolean_field(form.mod) }} - {{ render_boolean_field(form.banned) }} - {{ render_boolean_field(form.guest) }} - - {{ render_boolean_field(form.mod_edituser) }} - {{ render_boolean_field(form.mod_banuser) }} - - {{ render_boolean_field(form.editpost) }} - {{ render_boolean_field(form.deletepost) }} - {{ render_boolean_field(form.deletetopic) }} - {{ render_boolean_field(form.posttopic) }} - {{ render_boolean_field(form.postreply) }} - - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/groups.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/groups.html deleted file mode 100644 index f9c464eb..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/groups.html +++ /dev/null @@ -1,91 +0,0 @@ -{% set page_title = _("Groups") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - -
    -
    -
    - {% trans %}Groups{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Group Name{% endtrans %}
    - -
    -
    - - -
    -
    -
    - - {% for group in groups.items %} -
    -
    -
    {{ group.name }}
    - -
    - - - -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No groups found.{% endtrans %}
    -
    - {% endfor %} -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/management_layout.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/management_layout.html deleted file mode 100644 index d8e88cf2..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/management_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} - -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - -{% block breadcrumb %} -{% endblock %} - -
    -
    - -
    -
    - {% block management_content %}{% endblock %} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/overview.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/overview.html deleted file mode 100644 index 34493224..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/overview.html +++ /dev/null @@ -1,130 +0,0 @@ -{% set page_title = _("Overview") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -
    -
    -
    - {% trans %}Overview{% endtrans %} -
    -
    -
    -
    -
    -
    - -
    -

    {% trans %}Everything seems alright.{% endtrans %}

    -

    {% trans %}No new notifications.{% endtrans %}

    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - {{ all_users }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ post_count }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ topic_count }} - -
    -
    -
    -
    -
    - -
    -
    {% trans %}Statistics{% endtrans %}
    - -
    -
    {% trans %}Registered Users{% endtrans %}
    {{ all_users }}
    -
    -
    -
    {% trans %}Online Users{% endtrans %}
    {{ online_users }}
    -
    -
    -
    {% trans %}Banned Users{% endtrans %}
    {{ banned_users }}
    -
    -
    -
    {% trans %}Groups{% endtrans %}
    {{ all_groups }}
    -
    -
    -
    {% trans %}Topics{% endtrans %}
    {{ topic_count }}
    -
    -
    -
    {% trans %}Posts{% endtrans %}
    {{ post_count }}
    -
    -
    -
    {% trans %}Reports{% endtrans %}
    {{ report_count }}
    -
    -
    - -
    -
    {% trans %}Components{% endtrans %}
    - -
    -
    FlaskBB
    {{ flaskbb_version }}
    -
    - -
    -
    Flask
    {{ flask_version }}
    -
    -
    -
    Python
    {{ python_version }}
    -
    -
    - -
    -
    {% trans %}Plugins{% endtrans %}
    - - {% for plugin in plugins %} - -
    -
    {{ plugin.name }}
    {{ plugin.version }}
    -
    - {% endfor %} -
    -
    -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/plugins.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/plugins.html deleted file mode 100644 index 943d85cf..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/plugins.html +++ /dev/null @@ -1,76 +0,0 @@ -{% set page_title = _("Plugins") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination %} - -
    -
    -
    - {% trans %}Manage Plugins{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Plugin{% endtrans %}
    -
    {% trans %}Information{% endtrans %}
    -
    {% trans %}Manage{% endtrans %}
    -
    -
    - {% for plugin in plugins %} -
    -
    - {% if plugin.website %} - {{ plugin.name }} - {% else %} - {{ plugin.name }} - {% endif %} -
    -
    -
    {% trans %}Version{% endtrans %}: {{ plugin.version }}
    -
    {{ plugin.description }}
    -
    {% trans %}by{% endtrans %} {{ plugin.author }}
    -
    -
    - {% if not plugin.enabled %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if plugin.installable and not plugin.uninstallable %} -
    - - -
    - {% endif %} - {% if plugin.uninstallable %} -
    - - -
    - {% endif %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/reports.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/reports.html deleted file mode 100644 index 39c11ec4..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/reports.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = _("Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}All Reports{% endtrans %} -
    -
    -
    -
    -
    #
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    -
    {% trans %}Reporter{% endtrans %}
    - -
    - {% for report in reports.items %} -
    -
    {{ report.id }}
    - - -
    {{ report.reason }}
    -
    {{ report.reporter.username }}
    - -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/settings.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/settings.html deleted file mode 100644 index c5dd43a0..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/settings.html +++ /dev/null @@ -1,71 +0,0 @@ -{% set page_title = active_group.name %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_boolean_field, render_select_field, render_field, navlink with context %} - - -
    - -
    - -
    -
    -
    - {{ active_group.name }} -
    -
    -
    -
    -
    - - {{ form.hidden_tag() }} - {% for field in form %} - {% if field.type not in ["TextField", "IntegerField"] %} - {% if field.type == "BooleanField" %} - {{ render_boolean_field(field) }} - {% endif %} - - {% if field.type in ["SelectField", "SelectMultipleField"] %} - {{ render_select_field(field) }} - {% endif %} - {% else %} - {{ render_field(field) }} - {% endif %} - {% endfor %} - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/unread_reports.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/unread_reports.html deleted file mode 100644 index 430782c8..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/unread_reports.html +++ /dev/null @@ -1,96 +0,0 @@ -{% set page_title = _("Unread Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}Unread Reports{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    - - -
    -
    - - -
    -
    -
    - {% for report in reports.items %} -
    -
    - - -
    {{ report.reason }}
    - - -
    -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/user_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/user_form.html deleted file mode 100644 index ac574c29..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/user_form.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = title %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.username) }} - {{ horizontal_field(form.email) }} - {{ horizontal_field(form.password) }} - {{ horizontal_select_field(form.birthday, surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.primary_group) }} - {{ horizontal_field(form.secondary_groups) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/users.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/users.html deleted file mode 100644 index 31516cb9..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/management/users.html +++ /dev/null @@ -1,162 +0,0 @@ -{% set page_title = _("Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field, navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    - -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_edit_user and not user|is_admin or current_user|is_admin %} - - - - {% endif %} - - {% if current_user|can_ban_user and not user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|is_admin %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation.html deleted file mode 100644 index 44ae4914..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation.html +++ /dev/null @@ -1,146 +0,0 @@ -{% extends theme("message/message_layout.html") %} - -{% block css %} - -{% endblock %} - -{% block message_content %} -{# quick check if the conversation is a draft #} -{% if conversation.draft %} - {% set messages = [conversation.first_message] %} -{% else %} - {% set messages = conversation.messages %} -{% endif %} - -
    -
    - Subject: {{ conversation.subject }} -
    - -
    -
    - {% for message in messages %} - -
    - {% if current_user.id == message.user_id %} -
    -
    - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - {% if message.user.website %} - - {% endif %} -
    -
    - {% endif %} -
    -
    -
    - -
    - -
    - -
    - {{ message.message|markup }} -
    - - - -
    -
    -
    - {% if current_user.id != message.user_id %} -
    -
    - {% if message.user_id and message.user %} - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - - {% if message.user.website %} - - {% endif %} - - {% else %} -

    {% trans %}Deleted{% endtrans %}

    -
    {% trans %}Guest{% endtrans %}
    - {% endif %} -
    -
    - {% endif %} -
    - {% endfor %} -
    -
    -
    - -{% if not conversation.draft %} -{% from "macros.html" import render_quickreply, render_submit_field %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endif %} - -{% endblock %} - -{% block scripts %} - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation_list.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation_list.html deleted file mode 100644 index df3a1abc..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/conversation_list.html +++ /dev/null @@ -1,93 +0,0 @@ -
    -
    -
    -
    -
    - {% trans %}Conversations{% endtrans %} -
    - -
    - {{ message_count }}/{{ flaskbb_config["MESSAGE_QUOTA"] }} -
    -
    -
    -
    -
    - {% for conversation in conversations.items %} -
    - -
    - {% if conversation.from_user.avatar %} - avatar - {% else %} - avatar - {% endif %} -
    - -
    - - - -
    - From {{ conversation.from_user.username }} - to {{ conversation.to_user.username }} - on {{ conversation.date_created|format_date("%d %B %Y - %H:%M") }} -
    - -
    - {{ conversation.first_message.message|crop_title(150)|markup }} -
    - -
    - {% if include_move %} -
    - - -
    - {% endif %} - - {% if include_delete %} -
    - - -
    - {% endif %} - - {% if include_restore %} -
    - - -
    - {% endif %} - - {% if include_edit %} - - - - {% endif %} -
    -
    -
    - {% else %} -
    -
    - {% trans %}No conversations found.{% endtrans %} -
    -
    - {% endfor %} -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/drafts.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/drafts.html deleted file mode 100644 index 011efa52..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/drafts.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Drafts") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% set include_edit = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.drafts")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/inbox.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/inbox.html deleted file mode 100644 index 3a093288..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/inbox.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Inbox") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.inbox")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_form.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_form.html deleted file mode 100644 index 6354ac36..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_form.html +++ /dev/null @@ -1,45 +0,0 @@ -{% set page_title = title %} - -{% extends theme("message/message_layout.html") %} - -{% block message_content %} -{% from theme("macros.html") import render_submit_field, render_quickreply, render_field %} -
    - {{ form.hidden_tag() }} -
    -
    - {{ title }} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.to_user, div_class="col-md-6 col-sm-6 col-xs-6") }} - {{ render_field(form.subject, div_class="col-md-6 col-sm-6 col-xs-6") }} - -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    -
    - {{ render_submit_field(form.send_message, input_class="btn btn-success") }} - {{ render_submit_field(form.save_message, input_class="btn btn-info") }} -
    -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_layout.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_layout.html deleted file mode 100644 index 687e21aa..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/message_layout.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block message_content %}{% endblock %} -
    -
    -{% endblock %} - - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/sent.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/sent.html deleted file mode 100644 index 90f2290f..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/sent.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Sent Messages") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.sent")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/trash.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/trash.html deleted file mode 100644 index 943cdede..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/message/trash.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Trash") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_restore = True %} -{% set include_delete = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.trash")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/navigation.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/navigation.html deleted file mode 100644 index 8f109734..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/navigation.html +++ /dev/null @@ -1,73 +0,0 @@ -{%- from theme("macros.html") import topnav with context -%} - - diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_posts.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_posts.html deleted file mode 100644 index feb055be..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_posts.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - - -{% block profile_content %} - -
    - - {% for post in posts.items %} -
    - -
    -
    -
    - {{ post.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ post.content|markup }} -
    -
    -
    -
    - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if posts.items|length > 1 %} -
    -
    - {{ render_pagination(posts, url_for('user.view_all_posts', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_topics.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_topics.html deleted file mode 100644 index 3cad0c81..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/all_topics.html +++ /dev/null @@ -1,82 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - -{% block profile_content %} - -
    - - {% for topic in topics.items %} - -
    - - -
    -
    -
    - {{ topic.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ topic.first_post.content|markup }} -
    -
    -
    -
    - - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if topics.items|length > 1 %} -
    -
    - {{ render_pagination(topics, url_for('user.view_all_topics', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_email.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_email.html deleted file mode 100644 index d1b33059..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_email.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change E-Mail Address{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_email)}} - {{ horizontal_field(form.new_email)}} - {{ horizontal_field(form.confirm_new_email)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_password.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_password.html deleted file mode 100644 index 3e6656f3..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_password.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change Password{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_password)}} - {{ horizontal_field(form.new_password)}} - {{ horizontal_field(form.confirm_new_password)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_user_details.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_user_details.html deleted file mode 100644 index 3ed68cdb..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/change_user_details.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends theme("user/settings_layout.html") %} - -{% block settings_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field %} - -
    -
    - {% trans %}Change User Details{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_select_field(form.birthday, select_class="form-control", surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/general_settings.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/general_settings.html deleted file mode 100644 index 46d38db0..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/general_settings.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}General Settings{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.theme) }} - {{ horizontal_field(form.language) }} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile.html deleted file mode 100644 index 61faf5dc..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile.html +++ /dev/null @@ -1,90 +0,0 @@ -{% extends theme("user/profile_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_content %} - -
    - - -
    -
    - -
    -
    {% trans %}Info{% endtrans %}
    -
    -
    - {% if user.notes %} - {{ user.notes|markup }} - {% else %} -

    {% trans %}User has not added any notes about him.{% endtrans %}

    - {% endif %} -
    -
    -
    - - - {% if user.signature %} -
    -
    {% trans %}Signature{% endtrans %}
    -
    -
    - {{ user.signature|markup }} -
    -
    -
    - {% endif %} - -
    - {# Other information available for use: - # TODO: eventually use the information (i don't how i should represent it.. any ideas?) -
    -
    - {% trans %}Group{% endtrans %}: - {{ user.primary_group.name }} -
    -
    - {% trans %}Joined{% endtrans %}: - {{ user.date_joined|format_date('%b %d %Y') }} -
    -
    - {% trans %}Posts{% endtrans %}: - {{ user.post_count }} ({{ user.posts_per_day }} per day) -
    -
    - {% trans %}Last seen{% endtrans %}: - {%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Last post{% endtrans %}: - {%- if user.last_post -%} - {{ user.last_post.date_created|time_since }} - {%- else -%} - {% trans %}Never{% endtrans %} - {%- endif -%} -
    -
    - {% trans %}Location{% endtrans %}: - {%- if user.location -%} {{ user.location }} {%- else -%} {% trans %}No Info{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Birthday{% endtrans %}: - {% if user.birthday %} - {{ user.birthday|format_date('%b %d %Y') }} - {% else %} - {% trans %}No Info{% endtrans %} - {% endif %} - {% if user.gender %} - ({{ user.gender }}) - {% endif %} -
    -
    - #} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile_layout.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile_layout.html deleted file mode 100644 index 43938bea..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/profile_layout.html +++ /dev/null @@ -1,103 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} - -{% block breadcrumb %} -{% endblock %} - -
    -
    -
    -
    - -
    - {% block profile_sidebar %} -
    -
    - {% if user.avatar %} - {{ user.username }}'s Avatar - {% endif %} -
    - -
    - {{ user.primary_group.name }} -
    - -
    - {%- if user|is_online %} - online - {%- else %} - offline - {%- endif %} -
    - -
    -
    - {{ user.post_count }} posts -
    - -
    - {{ user.date_joined|format_date('%b %d %Y') }} -
    - -
    - {% if current_user.is_authenticated %} - - {% trans %}Message{% endtrans %} - - {% endif %} -
    -
    - - {% block profile_navigation %} - - {% endblock %} -
    - {% endblock %} - - {% block profile_content %} - {% endblock %} - -
    -
    -
    -
    -
    - -{% endblock %} {# content #} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/settings_layout.html b/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/settings_layout.html deleted file mode 100644 index 458e667f..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/templates/user/settings_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block settings_content %}{% endblock %} -
    -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/Gulpfile.js b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/Gulpfile.js deleted file mode 100644 index d2efef26..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/Gulpfile.js +++ /dev/null @@ -1,147 +0,0 @@ -var gulp = require('gulp-help')(require('gulp')), - bower = require('gulp-bower') - sass = require('gulp-sass'), - uglify = require('gulp-uglify'), - rename = require('gulp-rename'), - concat = require('gulp-concat'), - notify = require('gulp-notify'), - autoprefixer = require('gulp-autoprefixer'), - imagemin = require('gulp-imagemin'); - -var basicConfig = { - srcDir: './src', - destDir: './static', - bowerDir: './bower_components' -}; - -var config = { - scss: { - src: basicConfig.srcDir + '/scss', - dest: basicConfig.destDir + '/css' - }, - - imgs: { - src: basicConfig.srcDir + '/imgs', - dest: basicConfig.destDir + '/imgs' - }, - - js: { - flaskbb: basicConfig.destDir + '/js/flaskbb.js', - emoji: basicConfig.destDir + '/js/emoji.js', - editorConfig: basicConfig.destDir + '/js/editor.js', - dest: basicConfig.destDir + '/js' - }, - - editor: { - lib: basicConfig.bowerDir + '/bootstrap-markdown/js/bootstrap-markdown.js', - parser: basicConfig.bowerDir + '/marked/lib/marked.js', - textcomplete: basicConfig.bowerDir + '/jquery-textcomplete/dist/jquery.textcomplete.min.js' - }, - - jquery: basicConfig.bowerDir + '/jquery/dist/jquery.min.js', - - bootstrap: { - js: basicConfig.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.min.js', - scss: basicConfig.bowerDir + '/bootstrap-sass/assets/stylesheets' - }, - - font: { - icons: basicConfig.bowerDir + '/font-awesome/fonts/*.**', - scss: basicConfig.bowerDir + '/font-awesome/scss', - dest: basicConfig.destDir + '/fonts' - } -}; - - -gulp.task('bower', 'runs bower', function() { - return bower() - .pipe(gulp.dest(basicConfig.bowerDir)) -}); - - -gulp.task('update', 'updates the bower dependencies', function() { - return bower({ cmd: 'update' }); -}); - - -gulp.task('icons', 'copies the icons to destDir', function() { - return gulp.src(config.font.icons) - .pipe(gulp.dest(config.font.dest)); -}); - - -gulp.task('image', 'optimizes the images', function() { - return gulp.src(config.imgs.src + '/*') - .pipe(imagemin({ - progressive: true, - svgoPlugins: [ - { removeViewBox: false }, - { cleanupIDs: false } - ] - })) - .pipe(gulp.dest(config.imgs.dest)); -}); - - -gulp.task('sass', 'compiles all scss files to one css file', function () { - return gulp.src(config.scss.src + '/**/*.scss') - .pipe(sass({ - outputStyle: 'compressed', - precision: 8, - includePaths: [ - basicConfig.srcDir + '/scss', - config.bootstrap.scss, - config.font.scss - ]}) - .on('error', notify.onError(function(error) { - return "Error: " + error.message; - }))) - .pipe(autoprefixer('last 2 version')) - .pipe(rename({basename: 'styles', extname: '.min.css'})) - .pipe(gulp.dest(config.scss.dest)); -}); - - -gulp.task('main-scripts', 'concates all main js files to one js file', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.js.flaskbb]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('editor-scripts', 'concates all editor related scripts to one file', function() { - return gulp.src([config.editor.parser, - config.editor.lib, - config.editor.textcomplete, - config.js.emoji, - config.js.editorConfig]) - .pipe(concat('editor.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('vendor-scripts', 'concates all vendor js files to one js file (useful for debugging)', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.editor.parser, - config.editor.lib, - config.editor.textcomplete]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('scripts', ['main-scripts', 'editor-scripts'], function() {}); - - -gulp.task('watch', 'watches for .scss and .js changes', function() { - gulp.watch(config.sassPath + '/*.scss', ['sass']); - gulp.watch(config.jsPath + '/*.js', ['scripts']) -}); - -gulp.task('default', 'default command', ['bower', 'icons', 'sass', 'scripts', 'image']); diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/README.md b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/README.md deleted file mode 100644 index b03e5b64..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# INSTALLATION - -Make sure that you have npm (nodejs) installed. You can get it from [ -here](https://nodejs.org). - -This theme uses SASS (http://sass-lang.com/), a CSS preprocessor, for better development. - -Before you can compile the source, you need to get a few dependencies first. -Run (in the directory where **this** README is located): - - -- ``npm install`` - -and afterwards - -- ``node_modules/gulp/bin/gulp.js`` - - -# TASKS - -To get a list of all available tasks you can either read the ``Gulpfile.js`` -or see the list below: - - Usage - gulp [TASK] [OPTIONS...] - - Available tasks - bower runs bower - default default command [bower, icons, sass, scripts, image] - editor-scripts concates all editor related scripts to one file - help Display this help text. - icons copies the icons to destDir - image optimizes the images - main-scripts concates all main js files to one js file - sass compiles all scss files to one css file - scripts [main-scripts, editor-scripts] - update updates the bower dependencies - vendor-scripts concates all vendor js files to one js file (useful for debugging) - watch watches for .scss and .js changes - -You can run a task with gulp like this: - -``node_modules/gulp/bin/gulp.js watch`` - - -# CREATING YOUR OWN THEME - -If you want to create your own theme based on this theme you have to take care -of a few things first. - -1. Create a new folder within the ``themes/`` folder and give it the name -of your theme. -2. Copy the content of the ``aurora/`` folder into your folder theme's folder. -3. Create a new folder called ``static/`` in your themes folder. -4. (Optional) If you plan on modifying templates you also need to create a -``templates/`` folder where your templates are located. To edit a template, -you have to copy them over from flaskbb's template folder into your template -folder -5. Add some information about your theme using the ``info.json``. Have look at -aurora's ``info.json`` for an example. -6. Edit the ``bower.json`` and ``package.json`` to your needs. -7. Happy theming! - -In the end your folder structure should look like this: - - ── example_theme/ - ├── bower_components - │   └── ... - ├── node_modules - │   └── ... - ├── src - │   ├── styles.scss - │   ├── _aurora.scss - │   ├── _bootstrap-variables.scss - │   ├── _button.scss - │   ├── _category.scss - │   ├── _editor.scss - │   ├── _fixes.scss - │   ├── _forum.scss - │   ├── _management.scss - │   ├── _misc.scss - │   ├── _mixins.scss - │   ├── _navigation.scss - │   ├── _panel.scss - │   ├── _profile.scss - │   ├── _topic.scss - │   └── _variables.scss - ├── static - │   ├── css - │   ├── fonts - │   └── js - ├── templates - │   └── layout.html - ├── bower.json - ├── Gulpfile.js - ├── info.json - ├── LICENSE - ├── package.json - └── README.md - - -## info.json - -This file should contain following information about a theme: - -* ``"application": "flaskbb"`` - The name of the application, in our case this should always be flaskbb -* ``"identifier": "aurora"`` - The unique name of the theme. This identifier should match the themes folder name! -* ``"name": "Aurora"`` - Human readable name of the theme -* ``"author": "sh4nks"`` - The name of the author. -* ``"license": "BSD 3-Clause"`` - Every theme should include define a license under which terms the theme can be used. -* ``"description": "The default theme for FlaskBB."`` - A short description about the theme. For example: "A minimalistic blue theme". -* ``"version": "1.0.0"`` - The version of the theme. diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/bower.json b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/bower.json deleted file mode 100644 index fd652f95..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/bower.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "aurora", - "homepage": "https://github.com/sh4nks/flaskbb", - "authors": [ - "Peter Justin " - ], - "description": "The default theme for FlaskBB.", - "main": "static/styles.css", - "moduleType": [], - "keywords": [ - "flaskbb", - "theme" - ], - "license": "BSD", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "jquery": "~2.2.3", - "bootstrap-sass": "~3.3.6", - "font-awesome": "fontawesome#~4.5.0", - "bootstrap-markdown": "~2.10.0", - "marked": "~0.3.5", - "jquery-textcomplete": "~1.3.4" - } -} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/info.json b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/info.json deleted file mode 100644 index 603fb998..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "application": "flaskbb", - "identifier": "aurora", - "name": "Aurora", - "author": "sh4nks", - "license": "BSD 3-Clause", - "description": "The default theme for FlaskBB.", - "version": "1.0.0" -} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/package.json b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/package.json deleted file mode 100644 index 29c0c66c..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "flaskbb-theme-aurora", - "description": "The default theme for FlaskBB.", - "version": "1.0.0", - "license": "BSD-3-Clause", - "author": "Peter Justin", - "url": "https://flaskbb.org", - "private": true, - "devDependencies": { - "bower": "^1.6.9", - "gulp": "^3.8.11", - "gulp-autoprefixer": "^3.1.0", - "gulp-bower": "0.0.13", - "gulp-concat": "~2.6.0", - "gulp-help": "^1.6.1", - "gulp-imagemin": "^2.4.0", - "gulp-notify": "^2.0.1", - "gulp-rename": "^1.2.2", - "gulp-sass": "^2.2.0", - "gulp-uglify": "~1.5.3" - } -} diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_aurora.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_aurora.scss deleted file mode 100644 index 658aa2f6..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_aurora.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "variables"; -@import "mixins"; - -@import "misc"; -@import "fixes"; -@import "navigation"; -@import "editor"; -@import "button"; - -@import "category"; -@import "forum"; -@import "topic"; -@import "panel"; -@import "profile"; - -@import "management"; diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_bootstrap-variables.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_bootstrap-variables.scss deleted file mode 100644 index 7657e775..00000000 --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_bootstrap-variables.scss +++ /dev/null @@ -1,842 +0,0 @@ -// Override Bootstrap variables here (defaults from bootstrap-sass v3.3.5): - -// -// Variables -// -------------------------------------------------- - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -$gray-base: #000; -// $gray-darker: lighten($gray-base, 13.5%) // #222 -$gray-dark: lighten($gray-base, 20%); // #333 -// $gray: lighten($gray-base, 33.5%) // #555 -// $gray-light: lighten($gray-base, 46.7%) // #777 -// $gray-lighter: lighten($gray-base, 93.5%) // #eee - -// $brand-primary: darken(#428bca, 6.5%) // #337ab7 -// $brand-success: #5cb85c -// $brand-info: #5bc0de -// $brand-warning: #f0ad4e -// $brand-danger: #d9534f - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -//$body-bg: #f5f8fa; -// --- or --- -//$body-bg: #e8f1f2; -// --- or --- -$body-bg: #F6F9FC; -//** Global text color on ``. -$text-color: $gray-dark; - -//** Global textual link color. -// $link-color: $brand-primary -//** Link hover color set via `darken()` function. -// $link-hover-color: darken($link-color, 15%) -//** Link hover decoration. -// $link-hover-decoration: underline - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -// $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif -// $font-family-serif: Georgia, "Times New Roman", Times, serif -//** Default monospace fonts for ``, ``, and `
    `.
    -// $font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace
    -// $font-family-base:        $font-family-sans-serif
    -
    -// $font-size-base:          14px
    -// $font-size-large:         ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-small:         ceil(($font-size-base * 0.85)) // ~12px
    -
    -// $font-size-h1:            floor(($font-size-base * 2.6)) // ~36px
    -// $font-size-h2:            floor(($font-size-base * 2.15)) // ~30px
    -// $font-size-h3:            ceil(($font-size-base * 1.7)) // ~24px
    -// $font-size-h4:            ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-h5:            $font-size-base
    -// $font-size-h6:            ceil(($font-size-base * 0.85)) // ~12px
    -
    -//** Unit-less `line-height` for use in components like buttons.
    -// $line-height-base:        1.428571429 // 20/14
    -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    -// $line-height-computed:    floor(($font-size-base * $line-height-base)) // ~20px
    -
    -//** By default, this inherits from the ``.
    -// $headings-font-family:    inherit
    -// $headings-font-weight:    500
    -// $headings-line-height:    1.1
    -// $headings-color:          inherit
    -
    -//== Iconography
    -//
    -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    -
    -//** Load fonts from this directory.
    -
    -// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
    -// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
    -// $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/")
    -
    -//** File name for all font files.
    -// $icon-font-name:          "glyphicons-halflings-regular"
    -//** Element ID within SVG icon file.
    -// $icon-font-svg-id:        "glyphicons_halflingsregular"
    -
    -//== Components
    -//
    -//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    -
    -// $padding-base-vertical:     6px
    -// $padding-base-horizontal:   12px
    -
    -// $padding-large-vertical:    10px
    -// $padding-large-horizontal:  16px
    -
    -// $padding-small-vertical:    5px
    -// $padding-small-horizontal:  10px
    -
    -// $padding-xs-vertical:       1px
    -// $padding-xs-horizontal:     5px
    -
    -// $line-height-large:         1.3333333 // extra decimals for Win 8.1 Chrome
    -// $line-height-small:         1.5
    -
    -// $border-radius-base:        4px
    -// $border-radius-large:       6px
    -// $border-radius-small:       3px
    -
    -//** Global color for active items (e.g., navs or dropdowns).
    -// $component-active-color:    #fff
    -//** Global background color for active items (e.g., navs or dropdowns).
    -// $component-active-bg:       $brand-primary
    -
    -//** Width of the `border` for generating carets that indicator dropdowns.
    -// $caret-width-base:          4px
    -//** Carets increase slightly in size for larger components.
    -// $caret-width-large:         5px
    -
    -//== Tables
    -//
    -//## Customizes the `.table` component with basic values, each used across all table variations.
    -
    -//** Padding for ``s and ``s.
    -// $table-cell-padding:            8px
    -//** Padding for cells in `.table-condensed`.
    -// $table-condensed-cell-padding:  5px
    -
    -//** Default background color used for all tables.
    -// $table-bg:                      transparent
    -//** Background color used for `.table-striped`.
    -// $table-bg-accent:               #f9f9f9
    -//** Background color used for `.table-hover`.
    -// $table-bg-hover:                #f5f5f5
    -// $table-bg-active:               $table-bg-hover
    -
    -//** Border color for table and cell borders.
    -// $table-border-color:            #ddd
    -
    -//== Buttons
    -//
    -//## For each of Bootstrap's buttons, define text, background and border color.
    -
    -// $btn-font-weight:                normal
    -
    -// $btn-default-color:              #333
    -// $btn-default-bg:                 #fff
    -// $btn-default-border:             #ccc
    -
    -// $btn-primary-color:              #fff
    -// $btn-primary-bg:                 $brand-primary
    -// $btn-primary-border:             darken($btn-primary-bg, 5%)
    -
    -// $btn-success-color:              #fff
    -// $btn-success-bg:                 $brand-success
    -// $btn-success-border:             darken($btn-success-bg, 5%)
    -
    -// $btn-info-color:                 #fff
    -// $btn-info-bg:                    $brand-info
    -// $btn-info-border:                darken($btn-info-bg, 5%)
    -
    -// $btn-warning-color:              #fff
    -// $btn-warning-bg:                 $brand-warning
    -// $btn-warning-border:             darken($btn-warning-bg, 5%)
    -
    -// $btn-danger-color:               #fff
    -// $btn-danger-bg:                  $brand-danger
    -// $btn-danger-border:              darken($btn-danger-bg, 5%)
    -
    -// $btn-link-disabled-color:        $gray-light
    -
    -// Allows for customizing button radius independently from global border radius
    -// $btn-border-radius-base:         $border-radius-base
    -// $btn-border-radius-large:        $border-radius-large
    -// $btn-border-radius-small:        $border-radius-small
    -
    -//== Forms
    -//
    -//##
    -
    -//** `` background color
    -// $input-bg:                       #fff
    -//** `` background color
    -// $input-bg-disabled:              $gray-lighter
    -
    -//** Text color for ``s
    -// $input-color:                    $gray
    -//** `` border color
    -// $input-border:                   #ccc
    -
    -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
    -//** Default `.form-control` border radius
    -// This has no effect on ``s in CSS.
    -// $input-border-radius:            $border-radius-base
    -//** Large `.form-control` border radius
    -// $input-border-radius-large:      $border-radius-large
    -//** Small `.form-control` border radius
    -// $input-border-radius-small:      $border-radius-small
    -
    -//** Border color for inputs on focus
    -// $input-border-focus:             #66afe9
    -
    -//** Placeholder text color
    -// $input-color-placeholder:        #999
    -
    -//** Default `.form-control` height
    -// $input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2)
    -//** Large `.form-control` height
    -// $input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2)
    -//** Small `.form-control` height
    -// $input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2)
    -
    -//** `.form-group` margin
    -// $form-group-margin-bottom:       15px
    -
    -// $legend-color:                   $gray-dark
    -// $legend-border-color:            #e5e5e5
    -
    -//** Background color for textual input addons
    -// $input-group-addon-bg:           $gray-lighter
    -//** Border color for textual input addons
    -// $input-group-addon-border-color: $input-border
    -
    -//** Disabled cursor for form controls and buttons.
    -// $cursor-disabled:                not-allowed
    -
    -//== Dropdowns
    -//
    -//## Dropdown menu container and contents.
    -
    -//** Background for the dropdown menu.
    -// $dropdown-bg:                    #fff
    -//** Dropdown menu `border-color`.
    -// $dropdown-border:                rgba(0,0,0,.15)
    -//** Dropdown menu `border-color` **for IE8**.
    -// $dropdown-fallback-border:       #ccc
    -//** Divider color for between dropdown items.
    -// $dropdown-divider-bg:            #e5e5e5
    -
    -//** Dropdown link text color.
    -// $dropdown-link-color:            $gray-dark
    -//** Hover color for dropdown links.
    -// $dropdown-link-hover-color:      darken($gray-dark, 5%)
    -//** Hover background for dropdown links.
    -// $dropdown-link-hover-bg:         #f5f5f5
    -
    -//** Active dropdown menu item text color.
    -// $dropdown-link-active-color:     $component-active-color
    -//** Active dropdown menu item background color.
    -// $dropdown-link-active-bg:        $component-active-bg
    -
    -//** Disabled dropdown menu item background color.
    -// $dropdown-link-disabled-color:   $gray-light
    -
    -//** Text color for headers within dropdown menus.
    -// $dropdown-header-color:          $gray-light
    -
    -//** Deprecated `$dropdown-caret-color` as of v3.1.0
    -// $dropdown-caret-color:           #000
    -
    -//-- Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -//
    -// Note: These variables are not generated into the Customizer.
    -
    -// $zindex-navbar:            1000
    -// $zindex-dropdown:          1000
    -// $zindex-popover:           1060
    -// $zindex-tooltip:           1070
    -// $zindex-navbar-fixed:      1030
    -// $zindex-modal-background:  1040
    -// $zindex-modal:             1050
    -
    -//== Media queries breakpoints
    -//
    -//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    -
    -// Extra small screen / phone
    -//** Deprecated `$screen-xs` as of v3.0.1
    -// $screen-xs:                  480px
    -//** Deprecated `$screen-xs-min` as of v3.2.0
    -// $screen-xs-min:              $screen-xs
    -//** Deprecated `$screen-phone` as of v3.0.1
    -// $screen-phone:               $screen-xs-min
    -
    -// Small screen / tablet
    -//** Deprecated `$screen-sm` as of v3.0.1
    -// $screen-sm:                  768px
    -// $screen-sm-min:              $screen-sm
    -//** Deprecated `$screen-tablet` as of v3.0.1
    -// $screen-tablet:              $screen-sm-min
    -
    -// Medium screen / desktop
    -//** Deprecated `$screen-md` as of v3.0.1
    -// $screen-md:                  992px
    -// $screen-md-min:              $screen-md
    -//** Deprecated `$screen-desktop` as of v3.0.1
    -// $screen-desktop:             $screen-md-min
    -
    -// Large screen / wide desktop
    -//** Deprecated `$screen-lg` as of v3.0.1
    -// $screen-lg:                  1200px
    -// $screen-lg-min:              $screen-lg
    -//** Deprecated `$screen-lg-desktop` as of v3.0.1
    -// $screen-lg-desktop:          $screen-lg-min
    -
    -// So media queries don't overlap when required, provide a maximum
    -// $screen-xs-max:              ($screen-sm-min - 1)
    -// $screen-sm-max:              ($screen-md-min - 1)
    -// $screen-md-max:              ($screen-lg-min - 1)
    -
    -//== Grid system
    -//
    -//## Define your custom responsive grid.
    -
    -//** Number of columns in the grid.
    -// $grid-columns:              12
    -//** Padding between columns. Gets divided in half for the left and right.
    -// $grid-gutter-width:         30px
    -// Navbar collapse
    -//** Point at which the navbar becomes uncollapsed.
    -// $grid-float-breakpoint:     $screen-sm-min
    -//** Point at which the navbar begins collapsing.
    -// $grid-float-breakpoint-max: ($grid-float-breakpoint - 1)
    -
    -//== Container sizes
    -//
    -//## Define the maximum width of `.container` for different screen sizes.
    -
    -// Small screen / tablet
    -// $container-tablet:             (720px + $grid-gutter-width)
    -//** For `$screen-sm-min` and up.
    -// $container-sm:                 $container-tablet
    -
    -// Medium screen / desktop
    -// $container-desktop:            (940px + $grid-gutter-width)
    -//** For `$screen-md-min` and up.
    -// $container-md:                 $container-desktop
    -
    -// Large screen / wide desktop
    -// $container-large-desktop:      (1140px + $grid-gutter-width)
    -//** For `$screen-lg-min` and up.
    -// $container-lg:                 $container-large-desktop
    -
    -//== Navbar
    -//
    -//##
    -
    -// Basics of a navbar
    -// $navbar-height:                    50px
    -// $navbar-margin-bottom:             $line-height-computed
    -$navbar-border-radius:             0; //$border-radius-base
    -// $navbar-padding-horizontal:        floor(($grid-gutter-width / 2))
    -// $navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2)
    -// $navbar-collapse-max-height:       340px
    -
    -$navbar-default-color:             #555; //#777
    -$navbar-default-bg:                #f8f8f8;
    -$navbar-default-border:            #cad7e1; //darken($navbar-default-bg, 6.5%)
    -
    -// Navbar links
    -$navbar-default-link-color:                #555;
    -$navbar-default-link-hover-color:          #555;
    -$navbar-default-link-hover-bg:             #e7e7e7;
    -$navbar-default-link-active-color:         #555;
    -$navbar-default-link-active-bg:            #e7e7e7 ;// darken($navbar-default-bg, 6.5%)
    -$navbar-default-link-disabled-color:       #ccc;
    -$navbar-default-link-disabled-bg:          transparent;
    -
    -// Navbar brand label
    -// $navbar-default-brand-color:               $navbar-default-link-color
    -// $navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%)
    -// $navbar-default-brand-hover-bg:            transparent
    -
    -// Navbar toggle
    -// $navbar-default-toggle-hover-bg:           #ddd
    -// $navbar-default-toggle-icon-bar-bg:        #888
    -// $navbar-default-toggle-border-color:       #ddd
    -
    -//=== Inverted navbar
    -// Reset inverted navbar basics
    -// $navbar-inverse-color:                      lighten($gray-light, 15%)
    -// $navbar-inverse-bg:                         #222
    -// $navbar-inverse-border:                     darken($navbar-inverse-bg, 10%)
    -
    -// Inverted navbar links
    -// $navbar-inverse-link-color:                 lighten($gray-light, 15%)
    -// $navbar-inverse-link-hover-color:           #fff
    -// $navbar-inverse-link-hover-bg:              transparent
    -// $navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color
    -// $navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%)
    -// $navbar-inverse-link-disabled-color:        #444
    -// $navbar-inverse-link-disabled-bg:           transparent
    -
    -// Inverted navbar brand label
    -// $navbar-inverse-brand-color:                $navbar-inverse-link-color
    -// $navbar-inverse-brand-hover-color:          #fff
    -// $navbar-inverse-brand-hover-bg:             transparent
    -
    -// Inverted navbar toggle
    -// $navbar-inverse-toggle-hover-bg:            #333
    -// $navbar-inverse-toggle-icon-bar-bg:         #fff
    -// $navbar-inverse-toggle-border-color:        #333
    -
    -//== Navs
    -//
    -//##
    -
    -//=== Shared nav styles
    -// $nav-link-padding:                          10px 15px
    -// $nav-link-hover-bg:                         $gray-lighter
    -
    -// $nav-disabled-link-color:                   $gray-light
    -// $nav-disabled-link-hover-color:             $gray-light
    -
    -//== Tabs
    -// $nav-tabs-border-color:                     #ddd
    -
    -// $nav-tabs-link-hover-border-color:          $gray-lighter
    -
    -// $nav-tabs-active-link-hover-bg:             $body-bg
    -// $nav-tabs-active-link-hover-color:          $gray
    -// $nav-tabs-active-link-hover-border-color:   #ddd
    -
    -// $nav-tabs-justified-link-border-color:            #ddd
    -// $nav-tabs-justified-active-link-border-color:     $body-bg
    -
    -//== Pills
    -$nav-pills-border-radius:                    0;//$border-radius-base
    -// $nav-pills-active-link-hover-bg:            $component-active-bg
    -// $nav-pills-active-link-hover-color:         $component-active-color
    -
    -//== Pagination
    -//
    -//##
    -
    -// $pagination-color:                     $link-color
    -// $pagination-bg:                        #fff
    -// $pagination-border:                    #ddd
    -
    -// $pagination-hover-color:               $link-hover-color
    -// $pagination-hover-bg:                  $gray-lighter
    -// $pagination-hover-border:              #ddd
    -
    -// $pagination-active-color:              #fff
    -// $pagination-active-bg:                 $brand-primary
    -// $pagination-active-border:             $brand-primary
    -
    -// $pagination-disabled-color:            $gray-light
    -// $pagination-disabled-bg:               #fff
    -// $pagination-disabled-border:           #ddd
    -
    -//== Pager
    -//
    -//##
    -
    -// $pager-bg:                             $pagination-bg
    -// $pager-border:                         $pagination-border
    -// $pager-border-radius:                  15px
    -
    -// $pager-hover-bg:                       $pagination-hover-bg
    -
    -// $pager-active-bg:                      $pagination-active-bg
    -// $pager-active-color:                   $pagination-active-color
    -
    -// $pager-disabled-color:                 $pagination-disabled-color
    -
    -//== Jumbotron
    -//
    -//##
    -
    -// $jumbotron-padding:              30px
    -// $jumbotron-color:                inherit
    -// $jumbotron-bg:                   $gray-lighter
    -// $jumbotron-heading-color:        inherit
    -// $jumbotron-font-size:            ceil(($font-size-base * 1.5))
    -// $jumbotron-heading-font-size:    ceil(($font-size-base * 4.5))
    -
    -//== Form states and alerts
    -//
    -//## Define colors for form feedback states and, by default, alerts.
    -
    -// $state-success-text:             #3c763d
    -// $state-success-bg:               #dff0d8
    -// $state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%)
    -
    -// $state-info-text:                #31708f
    -// $state-info-bg:                  #d9edf7
    -// $state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%)
    -
    -// $state-warning-text:             #8a6d3b
    -// $state-warning-bg:               #fcf8e3
    -// $state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%)
    -
    -// $state-danger-text:              #a94442
    -// $state-danger-bg:                #f2dede
    -// $state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%)
    -
    -//== Tooltips
    -//
    -//##
    -
    -//** Tooltip max width
    -// $tooltip-max-width:           200px
    -//** Tooltip text color
    -// $tooltip-color:               #fff
    -//** Tooltip background color
    -// $tooltip-bg:                  #000
    -// $tooltip-opacity:             .9
    -
    -//** Tooltip arrow width
    -// $tooltip-arrow-width:         5px
    -//** Tooltip arrow color
    -// $tooltip-arrow-color:         $tooltip-bg
    -
    -//== Popovers
    -//
    -//##
    -
    -//** Popover body background color
    -// $popover-bg:                          #fff
    -//** Popover maximum width
    -// $popover-max-width:                   276px
    -//** Popover border color
    -// $popover-border-color:                rgba(0,0,0,.2)
    -//** Popover fallback border color
    -// $popover-fallback-border-color:       #ccc
    -
    -//** Popover title background color
    -// $popover-title-bg:                    darken($popover-bg, 3%)
    -
    -//** Popover arrow width
    -// $popover-arrow-width:                 10px
    -//** Popover arrow color
    -// $popover-arrow-color:                 $popover-bg
    -
    -//** Popover outer arrow width
    -// $popover-arrow-outer-width:           ($popover-arrow-width + 1)
    -//** Popover outer arrow color
    -// $popover-arrow-outer-color:           fade_in($popover-border-color, 0.05)
    -//** Popover outer arrow fallback color
    -// $popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%)
    -
    -//== Labels
    -//
    -//##
    -
    -//** Default label background color
    -// $label-default-bg:            $gray-light
    -//** Primary label background color
    -// $label-primary-bg:            $brand-primary
    -//** Success label background color
    -// $label-success-bg:            $brand-success
    -//** Info label background color
    -// $label-info-bg:               $brand-info
    -//** Warning label background color
    -// $label-warning-bg:            $brand-warning
    -//** Danger label background color
    -// $label-danger-bg:             $brand-danger
    -
    -//** Default label text color
    -// $label-color:                 #fff
    -//** Default text color of a linked label
    -// $label-link-hover-color:      #fff
    -
    -//== Modals
    -//
    -//##
    -
    -//** Padding applied to the modal body
    -// $modal-inner-padding:         15px
    -
    -//** Padding applied to the modal title
    -// $modal-title-padding:         15px
    -//** Modal title line-height
    -// $modal-title-line-height:     $line-height-base
    -
    -//** Background color of modal content area
    -// $modal-content-bg:                             #fff
    -//** Modal content border color
    -// $modal-content-border-color:                   rgba(0,0,0,.2)
    -//** Modal content border color **for IE8**
    -// $modal-content-fallback-border-color:          #999
    -
    -//** Modal backdrop background color
    -// $modal-backdrop-bg:           #000
    -//** Modal backdrop opacity
    -// $modal-backdrop-opacity:      .5
    -//** Modal header border color
    -// $modal-header-border-color:   #e5e5e5
    -//** Modal footer border color
    -// $modal-footer-border-color:   $modal-header-border-color
    -
    -// $modal-lg:                    900px
    -// $modal-md:                    600px
    -// $modal-sm:                    300px
    -
    -//== Alerts
    -//
    -//## Define alert colors, border radius, and padding.
    -
    -// $alert-padding:               15px
    -// $alert-border-radius:         $border-radius-base
    -// $alert-link-font-weight:      bold
    -
    -// $alert-success-bg:            $state-success-bg
    -// $alert-success-text:          $state-success-text
    -// $alert-success-border:        $state-success-border
    -
    -// $alert-info-bg:               $state-info-bg
    -// $alert-info-text:             $state-info-text
    -// $alert-info-border:           $state-info-border
    -
    -// $alert-warning-bg:            $state-warning-bg
    -// $alert-warning-text:          $state-warning-text
    -// $alert-warning-border:        $state-warning-border
    -
    -// $alert-danger-bg:             $state-danger-bg
    -// $alert-danger-text:           $state-danger-text
    -// $alert-danger-border:         $state-danger-border
    -
    -//== Progress bars
    -//
    -//##
    -
    -//** Background color of the whole progress component
    -// $progress-bg:                 #f5f5f5
    -//** Progress bar text color
    -// $progress-bar-color:          #fff
    -//** Variable for setting rounded corners on progress bar.
    -// $progress-border-radius:      $border-radius-base
    -
    -//** Default progress bar color
    -// $progress-bar-bg:             $brand-primary
    -//** Success progress bar color
    -// $progress-bar-success-bg:     $brand-success
    -//** Warning progress bar color
    -// $progress-bar-warning-bg:     $brand-warning
    -//** Danger progress bar color
    -// $progress-bar-danger-bg:      $brand-danger
    -//** Info progress bar color
    -// $progress-bar-info-bg:        $brand-info
    -
    -//== List group
    -//
    -//##
    -
    -//** Background color on `.list-group-item`
    -// $list-group-bg:                 #fff
    -//** `.list-group-item` border color
    -// $list-group-border:             #ddd
    -//** List group border radius
    -// $list-group-border-radius:      $border-radius-base
    -
    -//** Background color of single list items on hover
    -// $list-group-hover-bg:           #f5f5f5
    -//** Text color of active list items
    -// $list-group-active-color:       $component-active-color
    -//** Background color of active list items
    -// $list-group-active-bg:          $component-active-bg
    -//** Border color of active list elements
    -// $list-group-active-border:      $list-group-active-bg
    -//** Text color for content within active list items
    -// $list-group-active-text-color:  lighten($list-group-active-bg, 40%)
    -
    -//** Text color of disabled list items
    -// $list-group-disabled-color:      $gray-light
    -//** Background color of disabled list items
    -// $list-group-disabled-bg:         $gray-lighter
    -//** Text color for content within disabled list items
    -// $list-group-disabled-text-color: $list-group-disabled-color
    -
    -// $list-group-link-color:         #555
    -// $list-group-link-hover-color:   $list-group-link-color
    -// $list-group-link-heading-color: #333
    -
    -//== Panels
    -//
    -//##
    -
    -// $panel-bg:                    #fff
    -
    -// $panel-body-padding:          15px
    -// $panel-heading-padding:       10px 15px
    -// $panel-footer-padding:        $panel-heading-padding
    -$panel-border-radius:         0; //$border-radius-base
    -
    -//** Border color for elements within panels
    -$panel-inner-border:          #cad7e1; // #ddd
    -// $panel-footer-bg:             #f5f5f5;
    -
    -// $panel-default-text:          $gray-dark
    -$panel-default-border:        #cad7e1; //#ddd
    -// $panel-default-heading-bg:    #f5f5f5;
    -
    -// $panel-primary-text:          #fff
    -// $panel-primary-border:        $brand-primary
    -// $panel-primary-heading-bg:    $brand-primary
    -
    -// $panel-success-text:          $state-success-text
    -// $panel-success-border:        $state-success-border
    -// $panel-success-heading-bg:    $state-success-bg
    -
    -// $panel-info-text:             $state-info-text
    -// $panel-info-border:           $state-info-border
    -// $panel-info-heading-bg:       $state-info-bg
    -
    -// $panel-warning-text:          $state-warning-text
    -// $panel-warning-border:        $state-warning-border
    -// $panel-warning-heading-bg:    $state-warning-bg
    -
    -// $panel-danger-text:           $state-danger-text
    -// $panel-danger-border:         $state-danger-border
    -// $panel-danger-heading-bg:     $state-danger-bg
    -
    -//== Thumbnails
    -//
    -//##
    -
    -//** Padding around the thumbnail image
    -// $thumbnail-padding:           4px
    -//** Thumbnail background color
    -// $thumbnail-bg:                $body-bg
    -//** Thumbnail border color
    -// $thumbnail-border:            #ddd
    -//** Thumbnail border radius
    -// $thumbnail-border-radius:     $border-radius-base
    -
    -//** Custom text color for thumbnail captions
    -// $thumbnail-caption-color:     $text-color
    -//** Padding around the thumbnail caption
    -// $thumbnail-caption-padding:   9px
    -
    -//== Wells
    -//
    -//##
    -
    -// $well-bg:                     #f5f5f5
    -// $well-border:                 darken($well-bg, 7%)
    -
    -//== Badges
    -//
    -//##
    -
    -// $badge-color:                 #fff
    -//** Linked badge text color on hover
    -// $badge-link-hover-color:      #fff
    -// $badge-bg:                    $gray-light
    -
    -//** Badge text color in active nav link
    -// $badge-active-color:          $link-color
    -//** Badge background color in active nav link
    -// $badge-active-bg:             #fff
    -
    -// $badge-font-weight:           bold
    -// $badge-line-height:           1
    -// $badge-border-radius:         10px
    -
    -//== Breadcrumbs
    -//
    -//##
    -
    -// $breadcrumb-padding-vertical:   8px
    -// $breadcrumb-padding-horizontal: 15px
    -//** Breadcrumb background color
    -// $breadcrumb-bg:                 #f5f5f5
    -//** Breadcrumb text color
    -// $breadcrumb-color:              #ccc
    -//** Text color of current page in the breadcrumb
    -// $breadcrumb-active-color:       $gray-light
    -//** Textual separator for between breadcrumb elements
    -// $breadcrumb-separator:          "/"
    -
    -//== Carousel
    -//
    -//##
    -
    -// $carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6)
    -
    -// $carousel-control-color:                      #fff
    -// $carousel-control-width:                      15%
    -// $carousel-control-opacity:                    .5
    -// $carousel-control-font-size:                  20px
    -
    -// $carousel-indicator-active-bg:                #fff
    -// $carousel-indicator-border-color:             #fff
    -
    -// $carousel-caption-color:                      #fff
    -
    -//== Close
    -//
    -//##
    -
    -// $close-font-weight:           bold
    -// $close-color:                 #000
    -// $close-text-shadow:           0 1px 0 #fff
    -
    -//== Code
    -//
    -//##
    -
    -// $code-color:                  #c7254e
    -// $code-bg:                     #f9f2f4
    -
    -// $kbd-color:                   #fff
    -// $kbd-bg:                      #333
    -
    -// $pre-bg:                      #f5f5f5
    -// $pre-color:                   $gray-dark
    -// $pre-border-color:            #ccc
    -// $pre-scrollable-max-height:   340px
    -
    -//== Type
    -//
    -//##
    -
    -//** Horizontal offset for forms and lists.
    -// $component-offset-horizontal: 180px
    -//** Text muted color
    -// $text-muted:                  $gray-light
    -//** Abbreviations and acronyms border color
    -// $abbr-border-color:           $gray-light
    -//** Headings small color
    -// $headings-small-color:        $gray-light
    -//** Blockquote small color
    -// $blockquote-small-color:      $gray-light
    -//** Blockquote font size
    -// $blockquote-font-size:        ($font-size-base * 1.25)
    -//** Blockquote border color
    -// $blockquote-border-color:     $gray-lighter
    -//** Page header border color
    -// $page-header-border-color:    $gray-lighter
    -//** Width of horizontal description list titles
    -// $dl-horizontal-offset:        $component-offset-horizontal
    -//** Horizontal line color.
    -// $hr-border:                   $gray-lighter
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_button.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_button.scss
    deleted file mode 100644
    index 3417e117..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_button.scss
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -// a "link" that is actually a button
    -.btn.btn-link {
    -    border: none;
    -    color: #337ab7;
    -    text-decoration: none;
    -    padding: 0;
    -    // for some (yet for me unkown) reasons this required to be on the same
    -    // height as for normal links (happens when using the inline-forms)
    -    margin-bottom: 2px;
    -
    -    &:focus, &:hover {
    -    color: #23527c;
    -    text-decoration: underline;
    -}
    -}
    -
    -.btn-icon {
    -    font-family: 'FontAwesome';
    -    font-size: 1.15em;
    -    line-height: 1.50em;
    -    font-weight: normal;
    -    background: none;
    -    border-radius: 0;
    -}
    -
    -.icon-delete:before {
    -    content: "\f014";
    -    color: $red;
    -}
    -
    -.icon-report:before {
    -    content: "\f024";
    -    color: $orange;
    -}
    -
    -.icon-edit:before {
    -    content: "\f040";
    -    color: $green;
    -}
    -
    -.icon-reply:before {
    -    content: "\f10e";
    -    color: $blue;
    -}
    -
    -.icon-replyall:before {
    -    content: "\f122";
    -    color: $light-blue;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_category.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_category.scss
    deleted file mode 100644
    index b9fc7fca..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_category.scss
    +++ /dev/null
    @@ -1,62 +0,0 @@
    -// category specific values
    -.category-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .category-body {
    -        padding: 0;
    -    }
    -
    -    .category-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .forum-name, .forum-stats, .forum-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .category-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .forum-info {
    -        position: relative;
    -
    -        .forum-status {
    -            float: left;
    -            font-size: 2em;
    -            padding-right: 0.5em;
    -        }
    -
    -        .forum-name {
    -            font-weight: bold;
    -        }
    -
    -        .forum-moderators {
    -            font-style: italic;
    -        }
    -    }
    -
    -    .forum-last-post {
    -        .last-post-title {
    -            font-weight: bold;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_editor.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_editor.scss
    deleted file mode 100644
    index 2e317bc3..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_editor.scss
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -/* Markdown Editor */
    -.editor-box .editor-submit .btn {
    -    margin: 0.75em 0.25em 0 0;
    -}
    -
    -.editor-box > .quickreply {
    -    padding: 0;
    -}
    -
    -.editor {
    -    min-height: 0;
    -
    -    .editor-options {
    -        margin-top: 0.5em;
    -    }
    -
    -    .new-message {
    -        background: #fff;
    -        border: 0;
    -        height: 12em;
    -        outline: none;
    -        width: 100%
    -    }
    -}
    -
    -.editor > .md-editor {
    -    border-color: $border-color;
    -
    -    &.active {
    -        border-color: $border-color;
    -    }
    -
    -    & > .md-footer, & >.md-header {
    -        background: $navigation-bg;
    -    }
    -
    -    & >textarea {
    -        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    -        font-size: 1em;
    -        border-top: 1px solid $border-color;
    -        border-bottom: none;
    -        background: #fff;
    -        padding: 0 0.25em;
    -    }
    -
    -    & >.md-preview {
    -        border-top: 1px solid $border-color;
    -        border-right: 1px solid $border-color;
    -        border-bottom: none;
    -        padding: 0 0.25em;
    -        background: #eee;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_fixes.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_fixes.scss
    deleted file mode 100644
    index 03d7321e..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_fixes.scss
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -// fix for button in 
    -.navbar {
    -    .navbar-btn {
    -        &>a.btn-primary {
    -          color: #fff;
    -          background-color: #337ab7;
    -          border-color: #2e6da4;
    -        }
    -        &>a.btn-primary:focus {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #122b40;
    -        }
    -        &>a.btn-primary:hover {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #204d74;
    -        }
    -    }
    -
    -    .navbar-nav .user-btn {
    -        padding-right: 2em;
    -        padding-left: 1em;
    -    }
    -}
    -
    -
    -// apply the same changes as for "a" for the btn-link
    -.dropdown-menu {
    -    & > li .btn-link {
    -        display: block;
    -        padding: 3px 20px;
    -        width: 100%;
    -        text-align: left;
    -        clear: both;
    -        font-weight: normal;
    -        line-height: 1.42857143;
    -        color: #333;
    -        white-space: nowrap;
    -
    -        &:hover, &:focus {
    -            color: #262626;
    -            text-decoration: none;
    -            background-color: #f5f5f5;
    -        }
    -    }
    -
    -    & > .active {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #fff;
    -            text-decoration: none;
    -            background-color: #337ab7;
    -            outline: 0;
    -        }
    -    }
    -
    -    & > .disabled {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #777;
    -            text-decoration: none;
    -            cursor: not-allowed;
    -            background-color: transparent;
    -            background-image: none;
    -            filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_forum.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_forum.scss
    deleted file mode 100644
    index b21ba8c3..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_forum.scss
    +++ /dev/null
    @@ -1,64 +0,0 @@
    -// forum specific values
    -.forum-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .forum-body {
    -        padding: 0;
    -    }
    -
    -    .forum-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .topic-name, .topic-stats, .topic-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .topic-info {
    -        position: relative;
    -
    -        .topic-status {
    -            float: left;
    -            font-size: 1.5em;
    -            padding-right: 0.5em;
    -
    -            // why is this?
    -            .topic-locked {
    -                font-size: 1.5em;
    -            }
    -
    -        }
    -
    -        .topic-name {
    -            font-weight: bold;
    -        }
    -
    -        .topic-pages {
    -            font-weight: normal;
    -            font-size: small;
    -        }
    -    }
    -
    -    .forum-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_management.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_management.scss
    deleted file mode 100644
    index 7cbed54c..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_management.scss
    +++ /dev/null
    @@ -1,206 +0,0 @@
    -// Management Panel
    -.management-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .search-form {
    -        display: none;
    -        padding: 15px;
    -    }
    -
    -    .management-head {
    -        background-color: $blue;
    -    }
    -    .management-body {
    -        padding: 0;
    -    }
    -}
    -
    -.panel.settings-panel {
    -    border: none;
    -    margin-bottom: 0;
    -
    -    .settings-head {
    -        background-color: $panel-hover;
    -        border-bottom: 1px solid $border-color;
    -    }
    -    .settings-body {
    -        padding: 0;
    -        .settings-form {
    -            padding-top: 10px;
    -        }
    -    }
    -
    -    .settings-meta {
    -        background-color: $panel-meta-bg;
    -        margin: 0;
    -        padding: 5px 0 5px 0;
    -        border-bottom: 1px solid $border-color;
    -        .meta-item {
    -            font-weight: bold;
    -        }
    -    }
    -    .settings-content > .category-panel {
    -        border-left: none;
    -        border-right: none;
    -        border-bottom: none;
    -        margin-bottom: 0;
    -        &:first-child {
    -            border-top: none;
    -        }
    -        &:last-child {
    -            border-bottom: 1px solid $panel-border;
    -            margin-bottom: 1em;
    -        }
    -    }
    -    .settings-row {
    -        padding: 5px 0 5px 0;
    -        margin: 0;
    -
    -        &:last-child {
    -            padding-bottom: 10px;
    -            border-bottom: none !important;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -
    -        .btn-icon {
    -            padding: 0 6px;
    -        }
    -    }
    -
    -    .settings-footer {
    -        padding-top: 5px;
    -        padding-left: 5px;
    -        padding-bottom: 0px;
    -        .pagination {
    -            margin: 0;
    -        }
    -    }
    -}
    -
    -.with-left-border {
    -    border-left: 1px solid $border-color;
    -}
    -
    -.with-border-bottom {
    -    border-bottom: 1px solid $border-color;
    -}
    -
    -.stats {
    -    margin-top: 15px;
    -    margin-bottom: 15px;
    -    .stats-widget {
    -        text-align: center;
    -        padding-top: 20px;
    -        padding-bottom: 20px;
    -        //background-color: $panel-hover;
    -        border: 1px solid $border-color;
    -
    -        .icon {
    -            display: block;
    -            font-size: 96px;
    -            line-height: 96px;
    -            margin-bottom: 10px;
    -            text-align: center;
    -        }
    -        var {
    -            display: block;
    -            height: 64px;
    -            font-size: 64px;
    -            line-height: 64px;
    -            font-style: normal;
    -        }
    -        label {
    -            font-size: 17px;
    -        }
    -        .options {
    -            margin-top: 10px;
    -        }
    -    }
    -
    -    .stats-heading {
    -        font-size: 1.25em;
    -        font-weight: bold;
    -        margin: 0;
    -        border-bottom: 1px solid $border-color;
    -    }
    -
    -    .stats-row {
    -        margin: 0 0 15px 0;
    -        padding-bottom: 15px;
    -        //border-bottom: 1px solid $border-color;
    -
    -        .stats-item {
    -            margin: 0;
    -            padding-top: 5px;
    -        }
    -
    -        &:last-child {
    -            border: none;
    -        }
    -    }
    -}
    -
    -.alert-message {
    -    margin: 0;
    -    padding: 20px;
    -    border-radius: 5px;
    -    border: 1px solid $dark-green;
    -    border-left: 3px solid #eee;
    -    h4 {
    -        margin-top: 0;
    -        margin-bottom: 5px;
    -    }
    -    p:last-child {
    -        margin-bottom: 0;
    -    }
    -    code {
    -        background-color: #fff;
    -        border-radius: 3px;
    -    }
    -
    -    &.alert-message-success {
    -        background-color: #F4FDF0;
    -        border-color: $dark-green;
    -    }
    -    &.alert-message-success h4 {
    -        color: $dark-green;
    -    }
    -    &.alert-message-danger {
    -        background-color: #fdf7f7;
    -        border-color: $red;
    -    }
    -    &.alert-message-danger h4 {
    -        color: $red;
    -    }
    -    &.alert-message-warning {
    -        background-color: #fcf8f2;
    -        border-color: $orange;
    -    }
    -    &.alert-message-warning h4 {
    -        color: $orange;
    -    }
    -    &.alert-message-info {
    -        background-color: #f4f8fa;
    -        border-color: $light-blue;
    -    }
    -    &.alert-message-info h4 {
    -        color: $light-blue;
    -    }
    -    &.alert-message-default {
    -        background-color: #EEE;
    -        border-color: $gray;
    -    }
    -    &.alert-message-default h4 {
    -        color: #000;
    -    }
    -    &.alert-message-notice {
    -        background-color: #FCFCDD;
    -        border-color: #BDBD89;
    -    }
    -    &.alert-message-notice h4 {
    -        color: #444;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_misc.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_misc.scss
    deleted file mode 100644
    index fb117e04..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_misc.scss
    +++ /dev/null
    @@ -1,132 +0,0 @@
    -html {
    -    // push footer to bottom
    -    position: relative;
    -    min-height: 100%;
    -}
    -
    -body {
    -    // Margin bottom by footer height
    -    margin-bottom: 60px;
    -}
    -
    -.emoji {
    -    vertical-align: middle;
    -    width: 20px;
    -    height: 20px;
    -}
    -
    -.flaskbb-footer {
    -    position: absolute;
    -    bottom: 0;
    -    // Set the fixed height of the footer here
    -    height: 60px;
    -    width: 100%;
    -    // use the same width as container
    -    padding-top: 1em;
    -}
    -
    -.flaskbb-layout {
    -    padding-top: 20px;
    -}
    -
    -.flaskbb-header {
    -    color: #fff;
    -    text-align: left;
    -    text-shadow: 0 1px 0 rgba(0,0,0,.1);
    -    background-color: $header-background-primary;
    -    background-image: -webkit-linear-gradient(top, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-image: linear-gradient(to bottom, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-repeat: repeat-x;
    -    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);
    -    border: 1px solid $border-color;
    -    border-bottom: 0;
    -
    -    position: relative;
    -    height: 12em;
    -    padding: 2.5em 2em;
    -    margin-top: 2.5em;
    -
    -    .flaskbb-meta {
    -        .flaskbb-title {
    -            color: $header-title-color;
    -            font-size: 3em;
    -            font-weight: bold;
    -        }
    -        .flaskbb-subtitle {
    -            color: $header-subtitle-color;
    -        }
    -    }
    -}
    -
    -.flaskbb-breadcrumb {
    -    border: 1px solid $border-color;
    -    border-radius: 0;
    -}
    -
    -p.flaskbb-stats {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -
    -.controls-row {
    -    padding: 0.5em 0;
    -    margin: 0;
    -
    -    .pagination {
    -        padding: 0;
    -        margin: 0;
    -    }
    -}
    -
    -.controls-col {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -.settings-col {
    -    padding: 0;
    -}
    -
    -.inline-form {
    -    display: inline;
    -}
    -
    -.cheatsheet {
    -    h2 {
    -        text-align: center;
    -        font-size: 1.6em;
    -        -webkit-border-radius: 2px;
    -        -webkit-background-clip: padding-box;
    -        -moz-border-radius: 2px;
    -        -moz-background-clip: padding;
    -        padding: 10px 0;
    -    }
    -    .emojis {
    -        text-align: center;
    -    }
    -
    -    .typography {
    -        -webkit-column-count: 3;
    -           -moz-column-count: 3;
    -                column-count: 3;
    -        -webkit-column-gap: 4px;
    -           -moz-column-gap: 4px;
    -                column-gap: 4px;
    -        text-align: center;
    -    }
    -    .code-example {
    -        width: 100%;
    -        position: relative;
    -        margin-bottom: 1em;
    -        -webkit-column-count: 2;
    -           -moz-column-count: 2;
    -                column-count: 2;
    -        -webkit-column-gap: -4px;
    -           -moz-column-gap: -4px;
    -                column-gap: -4px;
    -        .markup {
    -            padding: 0;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_mixins.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_mixins.scss
    deleted file mode 100644
    index 058304a2..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_mixins.scss
    +++ /dev/null
    @@ -1 +0,0 @@
    -@import "bootstrap/mixins/_panels.scss";
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_navigation.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_navigation.scss
    deleted file mode 100644
    index 483ec7c6..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_navigation.scss
    +++ /dev/null
    @@ -1,125 +0,0 @@
    -/* The private messages in the main navbar */
    -.dropdown-messages {
    -    min-width: 15em;
    -    .message-subject {
    -        font-style: italic;
    -    }
    -    .author-name {
    -        font-weight: bold;
    -    }
    -}
    -
    -/* Sidebar Nav */
    -.sidebar {
    -    padding-top: 1em;
    -    padding-bottom: 1em;
    -    text-shadow: none;
    -    background-color: $navigation-bg;
    -    border: 1px solid $border-color;
    -
    -    .sidenav-header {
    -        display: block;
    -        padding-left: 1.25em;
    -        padding-bottom: 1em;
    -        font-size: 12px;
    -        font-weight: bold;
    -        line-height: 20px;
    -        color: $navigation-color;
    -        text-transform: uppercase;
    -    }
    -
    -    .sidenav-btn {
    -        padding-bottom: 1em;
    -        text-transform: uppercase;
    -        text-align: center;
    -    }
    -
    -    .nav > li > a {
    -        display: block;
    -    }
    -
    -    .nav > li > a:hover,
    -    .nav > li > a:focus {
    -        text-decoration: none;
    -        background-color: $navigation-hover-color;
    -    }
    -
    -    .nav > .active > a,
    -    .nav > .active:hover > a,
    -    .nav > .active:focus > a {
    -        font-weight: normal;
    -        color: $navigation-color;
    -        background-color: $navigation-hover-color;
    -    }
    -}
    -
    -.nav-sidebar {
    -    width: 100%;
    -    padding: 0;
    -    a {
    -        color: $navigation-color;
    -    }
    -    .active a {
    -        cursor: default;
    -        background-color: $navigation-bg;
    -        color: $navigation-color;
    -    }
    -
    -    li.active {
    -        border-top: 1px solid $border-color;
    -        border-bottom: 1px solid $border-color;
    -        &:first-child {
    -            border-top: none;
    -        }
    -    }
    -    .active a:hover {
    -        background-color: $navigation-bg;
    -    }
    -}
    -
    -
    -/* Panel tabs */
    -.panel {
    -    &.panel-tabs {
    -        > .panel-heading {
    -            padding: 0;
    -            font-weight: 500;
    -        }
    -        .nav-tabs {
    -            border-bottom: none;
    -        }
    -        .nav-justified {
    -            //padding-bottom: 1px;
    -            margin-bottom: -1px;
    -        }
    -    }
    -}
    -
    -.panel-tabs {
    -    .nav-tabs {
    -        &.nav-justified > li > a {
    -        }
    -        // non-active and hover
    -        > li {
    -            a {
    -                color: $header-subtitle-color;
    -                border: 1px solid $blue;
    -
    -                // different background color when hovering
    -                &:hover, &:focus {
    -                    background-color: $fresh-blue;
    -                    border: 1px solid $fresh-blue;
    -                }
    -            }
    -        }
    -        // active and hover
    -        > li.active {
    -            a, a:hover, a:focus {
    -                color: $header-title-color;
    -                background-color: $fresh-blue;
    -                border: 1px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_panel.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_panel.scss
    deleted file mode 100644
    index 255fd97d..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_panel.scss
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -// default values for the panels
    -.page-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .page-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -    }
    -
    -    .page-body {
    -        padding: 0;
    -
    -        // if no meta information is to show, reset padding-top
    -        & > :not(.page-meta) {
    -            padding-top: 0.5em;
    -        }
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .page-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .row > .page-row {
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_profile.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_profile.scss
    deleted file mode 100644
    index d4e4514b..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_profile.scss
    +++ /dev/null
    @@ -1,214 +0,0 @@
    -.profile-sidebar {
    -    padding: 7px 0;
    -
    -    ul li {
    -        &:last-child {
    -            border-bottom: none;
    -        }
    -
    -        a {
    -            color: $navigation-color;
    -            font-size: 14px;
    -            font-weight: 400;
    -            border-left: 2px solid transparent;
    -
    -            &:hover, &:visited {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -
    -            i {
    -                margin-right: 8px;
    -                font-size: 14px;
    -            }
    -        }
    -
    -        &.active {
    -            a {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    -.page-body.profile-body {
    -    background-color: $author-box-bg;
    -}
    -
    -.profile-content {
    -    background-color: #fff;
    -    border-left: 1px solid $border-color;
    -    min-height: 32.25em;
    -
    -    .topic-head {
    -        font-weight: normal;
    -    }
    -
    -    .topic-created {
    -        font-size: 0.75em;
    -        padding-bottom: 0.75em;
    -    }
    -}
    -
    -.profile-picture {
    -    text-align: center;
    -
    -    img {
    -        float: none;
    -        margin: 0 auto;
    -        width: 50%;
    -        height: 50%;
    -        -webkit-border-radius: 50% !important;
    -        -moz-border-radius: 50% !important;
    -        border-radius: 50% !important;
    -    }
    -}
    -
    -.profile-sidebar-stats {
    -    text-shadow: 0 1px 0 #fff;
    -}
    -
    -.profile-groupname,
    -.profile-online,
    -.profile-location,
    -.profile-posts,
    -.profile-date,
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 0.2em;
    -}
    -
    -
    -.profile-groupname {
    -    text-align: center;
    -    margin-top: 0.75em;
    -    color: $fresh-blue;
    -    font-size: 1.2em;
    -    font-weight: 600;
    -}
    -
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 10px;
    -    margin-bottom: 15px;
    -
    -    .btn {
    -        text-shadow: none;
    -        text-transform: uppercase;
    -        font-size: 11px;
    -        font-weight: 700;
    -        padding: 6px 15px;
    -        margin-right: 5px;
    -    }
    -}
    -
    -// conversation specific values
    -.conversation-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .conversation-body {
    -        padding: 0;
    -    }
    -
    -    .conversation-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    -
    -.conversation-panel {
    -    .conversation-body {
    -        .row > .conversation-row {
    -            &:not(:last-child) {
    -                border-bottom: 1px solid $panel-border;
    -            }
    -        }
    -    }
    -
    -    .conversation-message {
    -        min-height: 16em;
    -        padding: 0.5em;
    -        border: 1px solid $border-color;
    -        border-radius: 5px;
    -
    -        .message-content {
    -            padding-top: 0.5em;
    -        }
    -
    -        .message-footer {
    -            width: 100%;
    -            bottom: 0;
    -            position: absolute;
    -            .right {
    -                margin-right: 46px;
    -                float: right;
    -            }
    -            .left {
    -                float: left;
    -            }
    -        }
    -
    -    }
    -
    -    @media (min-width: 992px) {
    -        .arrow:after, .arrow:before {
    -            content: "";
    -            position: absolute;
    -            width: 0;
    -            height: 0;
    -            border: solid transparent;
    -        }
    -
    -        .arrow.left:after, .arrow.left:before {
    -            border-left: 0;
    -        }
    -
    -        // Left Arrow
    -        .arrow.left:before {
    -            left: 0px;
    -            top: 40px;
    -            border-right-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.left:after {
    -            left: 1px;
    -            top: 41px;
    -            border-right-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -
    -        // Right Arrow
    -        .arrow.right:before {
    -            right: -16px;
    -            top: 40px;
    -            border-left-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.right:after {
    -            right: -14px;
    -            top: 41px;
    -            border-left-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -    }
    -}
    -
    -.conversation-reply {
    -    padding-top: 2em;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_topic.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_topic.scss
    deleted file mode 100644
    index e672583d..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_topic.scss
    +++ /dev/null
    @@ -1,159 +0,0 @@
    -.topic-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .topic-body {
    -        padding-top: 0;
    -        padding-bottom: 0;
    -    }
    -}
    -
    -.post-row {
    -    background: $author-box-bg;
    -    margin-top: 0;
    -    margin-bottom: 0;
    -    padding-top: 0;
    -    padding-bottom: 0;
    -
    -    &:not(:last-child) {
    -        border-bottom: 1px solid $panel-border;
    -    }
    -}
    -
    -.post-box {
    -    background: $post-box-bg;
    -    border-left: 1px solid $post-box-border;
    -    padding-bottom: 3em;
    -    padding-left: 0;
    -    padding-right: 0;
    -    min-height: 19em;
    -    position: relative;
    -
    -    &.post-horizontal {
    -        border-left: none;
    -        min-height: 14em;
    -    }
    -
    -    // post meta information
    -    .post-meta {
    -        padding-top: 0.5em;
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        margin: 0;
    -        background-color: $post-meta-bg;
    -        border-bottom: 1px solid $post-meta-border;
    -    }
    -
    -    // post content
    -    .post-content {
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        padding-top: 0.5em;
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .post-signature {
    -        margin-top: 2em;
    -        hr {
    -            height: 1px;
    -            color: $post-signature-border;
    -            background-color: $post-signature-border;
    -            border: none;
    -            margin: 0;
    -            width: 25%;
    -        }
    -    }
    -
    -    // post footer
    -    .post-footer {
    -        border-top: 1px solid $post-footer-border;
    -        background-color: $post-footer-bg;
    -        width: 100%;
    -        left: 0;
    -        // push to bottom
    -        bottom: 0;
    -        position: absolute;
    -
    -        .post-menu {
    -            padding-left: 0;
    -
    -            .btn-icon:hover {
    -                background-color: $panel-hover;
    -            }
    -        }
    -    }
    -}
    -
    -// author
    -.author {
    -    text-shadow: 0px 1px 0px #fff;
    -
    -    // probably not the best name but i couldn't come up with a better one
    -    &.author-horizontal {
    -        min-height: 9em;
    -        border-bottom: 1px solid $post-box-border;
    -        .author-box {
    -            float: left;
    -            margin-top: 0.5em;
    -            .author-avatar {
    -                margin-top: 0em;
    -                margin-right: 1em;
    -            }
    -
    -            .author-online, .author-offline {
    -                margin-top: 0.5em;
    -            }
    -
    -            .author-name {
    -                margin-top: -0.5em;
    -            }
    -        }
    -    }
    -
    -    .author-name h4 {
    -        float: left;
    -        margin-bottom: 0;
    -    }
    -
    -    .author-title h5 {
    -        margin-top: 0;
    -        font-weight: 600;
    -        clear: both;
    -    }
    -
    -    .author-avatar {
    -        margin: 0.5em 0;
    -
    -        img {
    -            border-radius: 0.25em;
    -            height: auto;
    -            width: 8em;
    -        }
    -    }
    -
    -    .author-online, .author-offline {
    -        margin-top: 0.75em;
    -        margin-left: 0.25em;
    -        float: left;
    -        width: 0.5em;
    -        height: 0.5em;
    -        border-radius: 50%;
    -    }
    -
    -    .author-online {
    -        background: $author-online;
    -    }
    -
    -    .author-offline {
    -        background: $author-offline;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_variables.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_variables.scss
    deleted file mode 100644
    index 9dba323d..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/_variables.scss
    +++ /dev/null
    @@ -1,51 +0,0 @@
    -// bootstrap colros
    -$blue: #337ab7;
    -$fresh-blue: #0088cc;
    -$light-blue: #5bc0de;
    -$green: #5cb85c;
    -$dark-green: #3C763D;
    -$orange: #f0ad4e;
    -$red: #d9534f;
    -$gray: #555;
    -
    -
    -// main colors
    -$background-color: #f6f9fc; // old: #e8f1f2
    -$font-color: #333;
    -$border-color: #cad7e1;
    -$head-background: #f5f5f5;
    -$meta-background: #eaf1f5;
    -$hover: #f8f8f8;
    -
    -$navigation-color: #555;
    -$navigation-bg: #f8f8f8;
    -$navigation-hover-color: #e7e7e7;
    -
    -// header colors
    -$header-title-color: #fff;
    -$header-subtitle-color: #E8F1F2;
    -$header-background-primary: #0088cc;  // old: #3276b1
    -$header-background-secondary: #285e8e;
    -
    -// panel colors
    -$panel-bg: #fff;            // panel body background
    -$panel-head-bg: $head-background;    // panel head background
    -$panel-meta-bg: $meta-background;    // panel meta background
    -$panel-meta-border: $border-color;   // panel meta (bottom) border
    -$panel-border: $border-color;        // panel border (all over)
    -$panel-hover: $hover;
    -
    -
    -// post colors
    -$post-box-bg: $panel-bg;
    -$post-box-border: $border-color;
    -$post-meta-border: $panel-meta-bg;
    -$post-meta-bg: $panel-bg;
    -$post-signature-border: $panel-meta-bg;
    -$post-footer-border: $border-color;
    -$post-footer-bg: $panel-bg;
    -
    -
    -$author-box-bg: #e8ecf1;
    -$author-online: $green;
    -$author-offline: $gray;
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/styles.scss b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/styles.scss
    deleted file mode 100644
    index d0f075b3..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/src/styles.scss
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -// Import custom Bootstrap variables
    -@import "bootstrap-variables";
    -
    -// Import Bootstrap for Sass
    -@import "bootstrap";
    -
    -// Import fontawesome icons
    -@import "font-awesome";
    -
    -// Import FlaskBB theme
    -@import "aurora";
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/static b/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/static
    deleted file mode 120000
    index 382349a7..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/themes/aurora/static
    +++ /dev/null
    @@ -1 +0,0 @@
    -../../static/
    \ No newline at end of file
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/de/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b66ed9d7..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/de/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Peter Justin , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-11 10:27+0000\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: German (http://www.transifex.com/projects/p/flaskbb/language/de/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: de\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Es sind nur Buchstaben, Zahlen und Unterstriche erlaubt."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Benutzername oder E-Mail"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Ein Benutzername oder E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Passwort"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Ein Passwort ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Erinnere mich"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Einloggen"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Benutzername"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Ein Benutzername ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "E-Mail Adresse"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Passwörter müssen übereinstimmen."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Passwort bestätigen"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Ich aktzeptiere die Nutzungsbediengungen."
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrieren"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Dieser Benutzername ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Diese E-Mail Adresse ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Login erneuern"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Passwort anfordern"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Falscher Benutzername oder Passwort."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Neuangemeldet"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Vielen Dank für's registrieren!"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-Mail gesendet! Bitte checken sie ihre Mailbox."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Du hast einen Benutzername oder eine E-Mail Adresse eingegeben die nicht mit diesem Account verbunden ist."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Dein Passwort Token ist ungültig."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Dein Passwort Token ist abgelaufen."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Dein Passwort wurde aktualisiert."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Schnellantwort"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Du kannst keine Nachricht ohne Inhalt senden."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Antwort"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Inhalt"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Folge diesem Thema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vorschau"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Thema Titel"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Bitte wähle einen Titel für dein Thema"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Thema abschicken"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Grund"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Warum willst du diesen Beitrag melden?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Beitrag melden"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Suche"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Kriterien"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Beitrag"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Thema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Forum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Benutzer"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Du hast nicht die Berechtigung um ein neues Thema zu erstellen."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu löschen."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu sperren."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu entsperren."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu fixieren."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu lösen."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu verschieben"
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Konnte Thema nicht in Forum %(title)s verschieben."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Thema wurde in Forum %(title)s verschoben."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu vereinen."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Konnte Themen nicht vereinen."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Themen wurden vereint."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Du hast nicht die Berechtigung um in diesem Thema zu Beiträge zu schreiben."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu bearbeiten."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu löschen."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Danke für's melden."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Forum %(forum)s wurde als gelesen markiert."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Alle Foren wurden als gelesen markiert."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Geburtstag"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Geschlecht"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Männlich"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Weiblich"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ort"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Profilbild"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Forum Signatur"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notizen"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Hauptgruppe"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Andere Gruppen"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Speichern"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Gruppenname"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Ein Gruppenname ist erforderlich."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Beschreibung"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Ist diese Gruppe eine Administrator Gruppe?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Mit dieser Option haben alle Benutzer dieser Gruppe zugriff auf das Administrator Panel"
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Ist diese Gruppe eine Super Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe jedes Forum moderieren."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Ist diese Gruppe eine Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe spezifizierte Foren moderieren."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Ist diese Gruppe für Benutzer die verbannt sind?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Nur eine Gruppe für verbannte Benutzer ist erlaubt."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Ist dies eine Gruppe für Gäste?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Nur eine Gruppe für Gäste ist erlaubt."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Kann Beiträge bearbeiten"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge bearbeiten."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Kann Beiträge löschen"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge löschen."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Kann Themen löschen"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Mit dieser Option können Benutzer Themen löschen."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Kann Themen erstellen"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Mit dieser Option können Benutzer Themen erstellen."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Kann Themen beantworten"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Mit dieser Option können Benutzer in Themen Beiträge schreiben."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderatoren können Benutzer bearbeiten"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Erlaube Moderatoren das Bearbeiten eines anderen Benutzers - auch das ändern von Passwort und E-Mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderatoren können Benutzer verbannen"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Erlaube Moderatoren das verbannen von Benutzern."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Dieser Gruppenname ist bereits vergeben."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Es existiert bereits eine Gruppe für verbannte Benutzer."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Es existiert bereits eine Gruppe für Gäste."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Forum Titel"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Ein Forum Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Du kannst deine Beschreibung mit BBCode formatieren."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Position"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Die Forum Position ist erforderlich."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Kategorie"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Die Kategorie die das Forum beinhaltet."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Externe Link"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ein Link zu einer Website wie z.B. 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderatoren"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Komma getrennte Benutzernamen. Freilassen falls du keine Moderatoren setzen willst."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Moderatoren anzeigen"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Willst du die Moderatoren auf der Index Seite anzeigen?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Geschlossen?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Deaktivieren neue Beiträge und Themen in diesem Forum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Du kannst das Forum nicht in einen Externen Link konvertieren da es noch immer Beiträge beinhaltet."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Du musst auch einige Moderatoren spezifizieren."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s ist nicht in einer Moderatoren Gruppe."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Benutzer %(moderator)s wurde nicht gefunden."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Kategorie Titel"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Ein Kategorie Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Die Kategorie Position ist erforderlich."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Einstellungen gespeichert."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Dir ist es nicht erlaubt diesen Benutzer zu bearbeiten."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Benutzer aktualisiert."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Benutzer bearbeiten"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Benutzer gelöscht."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Benutzer hinzugefügt."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Benutzer hinzufügen"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu verbannen."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Ein Moderator kann nicht einen Administrator verbannen."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Benutzer wurde gebannt."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Konnte den Benutzer nicht bannen, sorry."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu entbannen."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Benutzer wurde entbannt."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Konnte den Benutzer nicht entbannen, sorry."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Meldung %(id)s wurde bereits als gelesen markiert."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Meldung %(id)s wurde als gelesen markiert."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Alle Meldungen wurden als gelesen markiert."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Gruppe aktualisiert."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Gruppe bearbeiten"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Gruppe gelöscht."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Gruppe hinzugefügt."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Gruppe hinzufügen"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Forum aktualisiert."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Forum bearbeiten"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Forum gelöscht."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Forum hinzugefügt."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Forum hinzufügen"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Kategorie hinzugefügt."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Kategorie hinzufügen"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Kategorie aktualisiert."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Kategorie bearbeiten"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Kategorie wurde mit allen zugehörigen Foren gelöscht."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin ist aktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber löschen."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Konnte das Plugin nicht aktivieren."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s wurde nicht gefunden."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin ist deaktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber erstellen."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin deinstalliert."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Konnte das Plugin nicht deinstallieren."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin installiert."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Konnte das Plugin nicht installieren."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Benutzerliste"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Thema Tracker"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Verwaltung"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Ausloggen"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Private Nachrichten"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Seiten"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Noch kein Benutzer?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Passwort vergessen?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Lieber %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Um dein Passwort zurückzusetzen, klicke bitte auf den folgenden Link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Mit freundlichen Grüßen,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Die Administration"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Kein Zugriff - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Verbotene Seite"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Du hast nicht die Berechtigung um diese Seite zu sehen."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Zurück zum Forum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh nein! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Ups, Seite wurde nicht gefunden!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "Die Seite existiert nicht."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server Fehler - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server Fehler"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Es ist etwas schief gelaufen."
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Themen"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Beiträge"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Letzer Beitrag"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "von"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Keine Beiträge."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Geschlossen"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Neues Thema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Ansichten"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Keine Themen."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Foren Statistiken"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Wer ist aktiv?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Anzahl an registrierten Benutzern"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Anzahl an Themen"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Anzahl an Beiträgen"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Neuester registrierter Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Keine Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Registrierte Benutzer aktiv"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Gäste aktiv"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Gruppe"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Neuer Beitrag"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Aktive Benutzer"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Meldung"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Schließen"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Thema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Zuletzt geändert"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Gast"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PN"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Bearbeiten"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Löschen"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Zitieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Thema löschen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Thema schließen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Thema öffnen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Thema fixieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Thema lösen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Thema entfolgen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Thema folgen"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Gefolgte Themen"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Verbannte Benutzer"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Benutzer verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Entbannen"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Es wurde kein Benutzer gefunden."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Foren verwalten"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foren"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gruppen verwalten"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Gruppen"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Übersicht"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Meldungen"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Globale Statistiken"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB Version"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python Version"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask Version"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Plugins verwalten"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Information"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Version"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Aktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Deaktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Installieren"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Deinstallieren"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Zeige ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Zeige alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Poster"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Melder"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Gemeldet"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Keine Meldungen."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Keine ungelesene Meldungen."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Bannen"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Entwurf"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Zu"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Datum"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Kein Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Dieser Nachrichtenordner ist leer."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Eingang"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "Von"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "gelöscht"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Private Nachricht"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Neue PN"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Gesendet"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papierkorb"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Gesendete Nachrichten"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Kein Benutzer"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Wiederherstellen"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Keine Nachricht"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Alle Beiträge"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "All Beiträge erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Alle Themen"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Alle Themen erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "E-Mail Adresse ändern"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Passwort ändern"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Benuzer Details ändern"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Allgemeine Einstellungen"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Benutzer Statistiken"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Benutzer hat keine Notizen über ihn hinzugefügt."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Beigetreten"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Zuletzt gesehen"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Noch nie gesehe"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Letzter Beitrag"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nie"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Keine Info"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Konto Einstellunge"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "Es sind nur jpg, jpeg, png und gifs erlaubt."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Sprache"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Thema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Alte E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Neue E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-Mail Adressen müssen übereinstimmen."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "E-Mail Adresse bestätigen"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Altes Passwort"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Passwort erforderlich"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Neues Passwort bestätigen"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Dein Geburtstag"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Zu Benutzer"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Ein Betreff ist erforderlich."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Nachricht"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Eine Nachricht ist erforderlich"
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Nachricht senden"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Nachricht speichern"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "Den Benutzername den du eingeben hast existiert nicht."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Du kannst keine Nachricht an dich selber schreiben."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Einstellungen aktualisiert."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Passwort aktualisiert."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "E-Mail Adresse aktualisiert."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Details aktualisiert."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Nachricht gespeichert."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Nachricht gesendet"
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Du kannst keine Nachricht bearbeiten die bereits gesendet wurde."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Nachricht bearbeiten"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Nachricht in den Papierkorb verschoben."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Nachricht aus dem Papierkorb wieder wiederhergestellt."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Nachricht gelöscht."
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/en/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 89c6ca3e..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/en/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1875 +0,0 @@
    -# German translations for FlaskBB.
    -# Copyright (C) 2015 FlaskBB
    -# This file is distributed under the same license as the FlaskBB project.
    -# Peter Justin , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version:  0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-03 13:45+0100\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: FlaskBB Team\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:150
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:65 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:70 flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr ""
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr ""
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8 flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9 flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr ""
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr ""
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr ""
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr ""
    -
    -#~ msgid ""
    -#~ msgstr ""
    -
    -#~ msgid "All Topics created by"
    -#~ msgstr ""
    -
    -#~ msgid "You can only use letters, numbers or dashes"
    -#~ msgstr ""
    -
    -#~ msgid "Username or E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "This Username is taken."
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is taken."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong E-Mail."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong username or password"
    -#~ msgstr ""
    -
    -#~ msgid "Reauthenticated"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for registering"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "You have entered an username or "
    -#~ "email that is not linked with your"
    -#~ " account"
    -#~ msgstr ""
    -
    -#~ msgid "Your password token is invalid."
    -#~ msgstr ""
    -
    -#~ msgid "Your password is expired."
    -#~ msgstr ""
    -
    -#~ msgid "Your password has been updated."
    -#~ msgstr ""
    -
    -#~ msgid "Quickreply"
    -#~ msgstr ""
    -
    -#~ msgid "Please choose a Topic title."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to delete the topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to lock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to unlock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to highlight this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to trivialize this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to move this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not move the topic to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "Topic was moved to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to merge this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not merge the topic."
    -#~ msgstr ""
    -
    -#~ msgid "Topic succesfully merged."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post here"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post in this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to edit this post"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for reporting!"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate every"
    -#~ " forum"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate "
    -#~ "specified forums"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Banned group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Guest group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Check this if the users in this group can edit posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can create topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can post replies"
    -#~ msgstr ""
    -
    -#~ msgid "Allow moderators to ban other users"
    -#~ msgstr ""
    -
    -#~ msgid "This Group name is taken."
    -#~ msgstr ""
    -
    -#~ msgid "A link to a website i.e. 'http://flaskbb.org'"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot convert a forum that contain topics in a external link"
    -#~ msgstr ""
    -
    -#~ msgid "%(user)s is not in a moderators group"
    -#~ msgstr ""
    -
    -#~ msgid "User %(moderator)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully edited"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully deleted"
    -#~ msgstr ""
    -
    -#~ msgid "User was banned successfully."
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s is already marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "All reports were marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Group successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Forum successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Category successfully created."
    -#~ msgstr ""
    -
    -#~ msgid "Plugin is not enabled"
    -#~ msgstr ""
    -
    -#~ msgid "Plugin %(plugin)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot uninstall Plugin"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot install Plugin"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Please install the plugin first to "
    -#~ "configure the forums which should be "
    -#~ "displayed"
    -#~ msgstr ""
    -
    -#~ msgid "No posts"
    -#~ msgstr ""
    -
    -#~ msgid "No Topics so far."
    -#~ msgstr ""
    -
    -#~ msgid "No users found matching your search query"
    -#~ msgstr ""
    -
    -#~ msgid "No Posts so far."
    -#~ msgstr ""
    -
    -#~ msgid "Change E-Mail Adress"
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is invalid"
    -#~ msgstr ""
    -
    -#~ msgid "A username is required."
    -#~ msgstr ""
    -
    -#~ msgid "A subject is required."
    -#~ msgstr ""
    -
    -#~ msgid "A message is required."
    -#~ msgstr ""
    -
    -#~ msgid "The username you entered doesn't exist"
    -#~ msgstr ""
    -
    -#~ msgid "Your settings have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your password have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your email have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your details have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Message saved!"
    -#~ msgstr ""
    -
    -#~ msgid "Message sent!"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot edit a sent message"
    -#~ msgstr ""
    -
    -#~ msgid "Message moved to Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message restored from Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message deleted!"
    -#~ msgstr ""
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/es/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/es/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bf123bf2..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/es/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Ernesto Avilés Vázquez , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-02-19 16:42+0000\n"
    -"Last-Translator: Ernesto Avilés Vázquez \n"
    -"Language-Team: Spanish (http://www.transifex.com/flaskbb/flaskbb/language/es/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: es\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Restablecer contraseña"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Solo puedes usar letras, números o guiones."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Nombre de usuario o dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Se requiere nombre de usuario o dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Contraseña"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Se requiere una contraseña."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Recordar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Iniciar sesión"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Se requiere un nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Dirección electrónica inválida."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Las contraseñas deben coincidir."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar contraseña"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Acepto los términos del servicio"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este nombre de usuario ya existe."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Esta dirección electrónica ya existe."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Actualizar inicio de sesión"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar contraseña"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Restablecer  contraseña"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Dirección electrónica incorrecta."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuario o contraseña incorrectos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Volver a autenticarse."
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Gracias por registrarse."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "¡Correo enviado! Por favor, revisa tu bandeja de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Has insertado un nombre de usuario o dirección electrónica que no está vinculado con tu cuenta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Tu token de contraseña es inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Tu token de contraseña ha expirado."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Tu contraseña ha sido actualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Respuesta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "No puedes publicar una respuesta sin contenido"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Respuesta"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Contenido"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir este tema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vista previa"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título del tema"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor elije un título para el tema."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Publicar tema"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Razón"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "¿Cuál es la razón por la que reportas este artículo?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Publicar reporte"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Buscar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Criterio"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Publicar"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Foro"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuarios"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Usted no permisos para crear un nuevo tema."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "No tienes los permisos para borrar este tema."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "No tienes permisos para bloquear este tema."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "No tienes permisos para desbloquear este tema."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "No tienes permisos para resaltar este tema."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "No tienes permisos para trivializar este tema."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "No tienes permisos para mover este tema."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "No puedes mover este tema al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tema movido al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "No tienes permisos para mezclar este tema."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "No se pueden mezclar los temas."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Los temas han sido mezclados satisfactoriamente"
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "No tienes permisos para publicar en este tema."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "No tienes permisos para editar este artículo."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "No tienes permisos para borrar este artículo."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Gracias por hacer el reporte."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Foro %(forum)s marcado como leído."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos los foros marcados como leídos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Cumpleaños"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Femenino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ubicación"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Sitio web"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Firma del foro"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primario"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundarios"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Guardar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nombre del grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Se requiere un nombre de grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descripción"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "¿Es del grupo Administración?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Con esta opción el grupo tiene acceso al panel de administración."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "¿Es del grupo Supermoderador?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Comprueba si los usuarios en este grupo tienen permiso para moderar todos los foros."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "¿Es del grupo Moderador?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Comprueba si los usuarios de este grupo tienen permiso para moderar foros específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "¿Es del grupo Baneado?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Solo se permite un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "¿Es del grupo Invitado?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Solo se permite un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Puede editar artículos"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden editar artículos."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Puede borrar artículos"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar artículos."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Puede borrar temas"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar temas."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Puede crear temas"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden crear temas."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Puede publicar respuestas"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Comprueba si los usuarios en este grupo pueden publicar respuestas."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Los moderadores pueden editar perfiles de usuario"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite a los moderadores editar los perfiles de otros usuarios incluyendo contraseñas y cambios de direcciones electrónicas."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Los moderadores pueden banear usuarios"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite a los moderadores banear a otros usuarios."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este nombre de grupo ya existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Ya existe un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Ya existe un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título del foro"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Se requiere un título de foro."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Puedes formatear tu descripción con BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posición"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Se requiere una posición del foro"
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoría"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "La categoría que contiene este foro"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Enlace externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Un enlace a un sitio e.j.: \"http://flaskbb.org\""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nombres de usuarios separados por coma. Déjalo en blanco si no deseas establecer algún moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "¿Deseas mostrar los moderadores en la página de inicio?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "¿Bloqueado?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Inhabilitar nuevos artículos y temas en este foro."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "No puedes convertir un foro que contiene temas en un enlace externo."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "También necesitas especificar algunos moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s no está en el grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "El usuario %(moderator)s  no existe."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título de la categoría"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Se requiere un título de categoría."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Se requiere una posición para la categoría."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Ajustes guardados."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "No tienes permisos para editar este usuario"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuario actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuario"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuario borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuario añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Añadir usuario"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "No tienes permisos para banear a este usuario"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Un moderador no puede banear a un administrador."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "El usuario ha sido baneado."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "No se puede banear al usuario."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "No tienes permisos para desbanear a este usuario"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "El usuario ha sido desbaneado."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "No se puede desbanear al usuario."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "El reporte %(id)s ya está marcado como leído."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Reporte %(id)s marcado como leído."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos los reportes fueron marcados como leídos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Añadir grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Foro actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar foro"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Foro borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Foro añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Añadir foro"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoría añadida satisfactoriamente."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Añadir categoría"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoría actualizada satisfactoriamente."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoría"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoría borrada junto con todos los foros asociados"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "El complemento está habilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que borrar el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "No se puede habilitar el complemento"
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "El complemento %(plugin)s no existe."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "El complemento está inhabilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que crear el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "El complemento ha sido desinstalado."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "No se puede desinstalar el complemento."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "El plugin ha sido instalado."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "No se puede instalar el complemento."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de miembros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Seguidor de tema"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Ajustes"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administración"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Cerrar sesión"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensajes privados"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nuevo mensaje"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "¿Todavía sin ser miembro?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "¿Olvidaste tu contraseña?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Estimado %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restablecer tu contraseña haz clic en el siguiente enlace:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Saludos,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "La administración"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sin acceso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Página prohibida"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "No tienes permisos para ver esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "De regreso a los foros"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "¡Oh no! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oh, ¡La página no existe!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "La página que buscas no existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Erro del servidor - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Error del servidor"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "¡Ha ocurrido algo malo!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Temas"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Artículos"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "No hay artículos."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como leído"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Bloqueado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Nuevo tema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Vistas"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "No hay temas."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estadísticas del foro"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "¿Quién está conectado?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Total de usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Total de temas"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Total de artículos"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Nuevos usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "No hay usuarios"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuarios registrados conectados"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Invitados conectados"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Fecha de registro"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Nuevo artículo"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuarios conectados"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Cerrar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Última modificación"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Invitado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "MP"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Borrar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citar"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Borrar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Bloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Desbloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Resaltar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Trivializar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Dejar de seguir tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tema"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Temas seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuarios baneados"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Administrar usuarios"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Administrar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanear"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "No se encontraron usuarios que coincidan con el criterio de búsqueda."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Administrar foros"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foros"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Administrar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Reseña"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reportes"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Complementos"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estadísticas globales"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "Versión de FlaskBB"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Versión de Python"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Versión de Flask"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Administrar complementos"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Complemento"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Información"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versión"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Inhabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reportes sin leer"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Publicador"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportero"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Sin reportes."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reportes sin leer"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todos como leídos"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "No hay reportes sin leer."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banear"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Borradores"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "A"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Asunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Fecha"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opciones"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sin asunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta carpeta de mensajes está vacía."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Bandeja de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "borrado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensaje privado"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nuevo MP"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviados"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papelera"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensajes enviados"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "No hay usuario"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restablecer"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "No hay mensaje"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos los artículos"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos los artículos creados por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos los temas"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos los temas creados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Cambiar dirección electrónica"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Cambiar contraseña"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Cambiar detalles del usuario"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Ajustes generales"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Información"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Estadísticas de usuario"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "El usuario no ha añadido ninguna nota suya."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Unido"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Visto por última vez"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Sin información"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Ajustes de la cuenta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "¡Solo se permiten jpg, jpeg, png y gifs!"
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Idioma"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Apariencia"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Dirección electrónica anterior"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Dirección electrónica nueva"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "Las direcciones deben coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar dirección electrónica"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Contraseña vieja"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Contraseña requerida"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar la nueva contraseña"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Tu cumpleaños"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Al usuario"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Se requiere un asunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensaje"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Se requiere un mensaje."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensaje"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Guardar mensaje"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "El nombre de usuario que has entrado no existe"
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "No te puedes enviar un MP a ti mismo"
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Ajustes actualizados."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Contraseña actualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Dirección electrónica actualizada."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalles actualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensaje guardado."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensaje enviado."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Componer mensaje."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "No puedes editar un mensaje enviado."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensaje"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensaje movido a la Papelera."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensaje restaurado desde la Papelera."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensaje borrado."
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 822f68f7..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Vinícius Ferreira , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-03-01 21:46+0000\n"
    -"Last-Translator: Vinícius Ferreira \n"
    -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/flaskbb/flaskbb/language/pt_BR/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: pt_BR\n"
    -"Plural-Forms: nplurals=2; plural=(n > 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Recuperar senha"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "São permitidos apenas letras, números e traços."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Usuário ou endereço de e-mail "
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "É necessário um usuário ou endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Senha"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Lembrar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Conectar-se"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Usuário"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "É necessário um usuário."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Endereço de e-mail"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "É necessário um endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "E-mail inválido."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "As senhas devem se coincidir. "
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar senha"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Eu aceito os Termos de Serviço"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este usuário já esta em uso."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Este e-mail já esta em uso."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Atualizar sessão"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar senha"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Endereço de e-mail incorreto."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuário ou senha incorretos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Obrigado por se registrar."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-mail enviado! Por favor, cheque sua caixa de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Você digitou um usuário ou endereço de e-mail que não coincide com a sua conta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "O token da senha é inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "O token da senha expirou."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Sua senha foi atualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Resposta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Você não pode postar uma resposta sem conteúdo. "
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Responder"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Conteúdo"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Prever"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título do tópico"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor, digite um título para o tópico."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Postar tópico"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Motivo"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Qual o motivo para reportar este post?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Reportar post"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Pesquisar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Critérios"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Post"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tópico"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Fórum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuários"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Você não tem permissão para criar um novo tópico."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Você não tem permissão para trancar este tópico."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Você não tem permissão para destrancar este tópico."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Você não tem permissão para ressaltar este tópico."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Você não tem permissão para mover este tópico."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Não foi possível mover este tópico para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tópico movido para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Você não tem permissão para mesclar este tópico."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Não foi possível mesclar os tópicos."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Tópicos mesclados com sucesso."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Você não tem permissão para postar neste tópico."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Você não tem permissão para editar este tópico."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Agradecemos por reportar."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Fórum %(forum)s marcado como lido."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos os fóruns foram marcados como lidos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Aniversário"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Feminino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Localização"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Assinatura"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primário"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundários "
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Salvar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nome do grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "É necessário um nome para o grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descrição "
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Pertence ao grupo de administradores ?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Esta opção permite que os usuários deste grupo tenham acesso ao painel de administrador."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Pertence ao grupo de super-moderadores ?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Esta opção permite que os usuários deste grupo modere todos os fóruns."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Pertence ao grupo de moderadores ?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Esta opção permite que os usuários deste grupo moderem fóruns específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Pertence ao grupo de banidos ?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "É permitido apenas um grupo de banido."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Pertence ao grupo de visitantes ?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "É permitido apenas um grupo de visitante."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Pode editar posts"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Permite que, usuários deste grupo, editem posts."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Pode deletar posts"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Permite que, usuários deste grupo, deletem posts."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Pode deletar tópicos"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Permite que, usuários deste grupo, deletem tópicos."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Pode criar tópicos"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Permite que, usuários deste grupo, criem tópicos."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Pode responder à tópicos"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Permite que, usuários deste grupo, criem respostas nos tópicos."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderadores podem editar o perfil de usuários"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite que moderadores alterem perfis de outros usuários, incluindo senha e e-mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderadores podem banir usuários"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite que moderadores possam banir outros usuários."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este grupo já existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Já existe um grupo para banidos."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Já existe um grupo para visitantes."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título do fórum"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "É necessário um título para o fórum."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Você pode formatar sua descrição com BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posição"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "É necessário uma posição no fórum."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoria"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Categorias que este fórum possui."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Link externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Uma url para um site, ex: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nome de usuários separados por virgula. Deixe em branco caso não deseje nenhum moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Mostrar moderadores na página principal ?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Trancado ?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Desabilitar novos posts e tópicos neste fórum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Também é necessário especificar alguns moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s não pertence ao grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Usuário %(moderator)s não foi encontrado."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título da categoria."
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "É necessário um titulo para a categoria. "
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "É necessário uma posição para a categoria."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Configurações salvas."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Você não tem permissão para editar este usuário."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuário atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuário"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuário deletado com sucesso."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuário cadastrado com sucesso."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Adicionar usuário"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Você não tem permissão para banir este usuário."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Moderadores não podem banir administradores."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Usuário banido."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Não foi possível banir usuário."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Você não tem permissão para desbanir este usuário."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Usuário desbanido."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Não foi possível desbanir usuário."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Report %(id)s já esta marcado como lido."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Report %(id)s marcado como lido."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos os reports marcados como lidos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo deletado com sucesso."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Cadastrar grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Fórum atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar fórum"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Fórum deletado com sucesso."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Fórum adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Adicionar fórum"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoria adicionada com sucesso."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Adicionar categoria"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoria atualizada com sucesso."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoria"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoria com todos os fóruns associados deletada."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin habilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria. "
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Não foi possível habilitar o plugin."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s não encontrado."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin desabilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin desinstalado com sucesso."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Não foi possível desinstalar o plugin."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin instalado com sucesso."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Não foi possível instalar plugin."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de membros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Rastreador de tópicos"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Configurações"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administração"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Sair"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensagens privadas"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nova mensagem"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Ainda não é um membro ?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Esqueci a senha."
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Caro %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restaurar sua senha clique no seguinte link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Atenciosamente,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "A administração "
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sem acesso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Acesso negado"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Você não tem permissão para acessar esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Voltar para o fórum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh não! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oops, página não encontrada!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "A página que você esta procurando não existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server error - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server error"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Alguma coisa deu errado!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Tópicos"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Posts"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Nenhum post disponível."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como lido"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Trancado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Novo tópico"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Visualizações"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Nenhum tópico disponível."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estatísticas do fórum"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Quem esta online ?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Número total de usuários registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Número total de tópicos"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Número total de posts"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Usuário cadastrado mais recente"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Sem usuários."
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuários registrados online"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Convidados online"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Data registrada"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Novo post"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuários online"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Fechar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tópico"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Ultima modificação"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Convidado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PM"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Deletar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citação"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Deletar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Trancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Destrancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Ressaltar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Deixar de seguir este tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Tópicos seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuários banidos"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Gerenciar usuários"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Gerenciar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanir"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Nenhum usuário encontrado com estes critérios de pesquisa."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Gerenciar fórum"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Fóruns"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gerenciar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Visão geral"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reports"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estatísticas globais "
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB versão"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python versão"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask versão"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Gerenciar plugins"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Informação"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versão"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Desabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reports não lidos"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos reports"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos reports"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Postado por"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportado por"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Nenhuma reclamação."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reclamações não lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todas como lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Nenhuma reclamação não lida."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banir"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Rascunhos"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Para"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Assunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Data"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opções"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sem assunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta pasta de mensagens esta vazia."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Caixa de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "deletado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensagem privada"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nova PM"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviado"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Lixo"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensagens enviadas"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Sem usuário"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restaurar"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Sem mensagem"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos os posts"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos os posts feitos por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos os tópicos"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos os tópicos criados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Mudar endereço de e-mail"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Alterar detalhes de usuári"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Configurações gerais"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Status do usuário"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Usuário não adicionou notas sobre ele."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Registrado"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Última visita"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Nenhuma informação"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Configurações de conta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "São permitidos apenas jpg, jpeg, png e gifs."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Lingua "
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Tema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Endereço de e-mail antigo"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Novo endereço de e-mail"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-mails devem se coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar endereço de e-mai"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Senha antiga"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar nova senha"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Nascimento"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Para o usuário"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "É necessário um assunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensagem"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "É necessário uma mensagem."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensagem"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Salvar mensagem"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "O usuário que você inseriu não existe."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Você não pode enviar uma mensagem privada para você mesmo."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Configurações atualizadas."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Senha atualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Endereço de e-mail atualizado."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalhes atualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensagem salva."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensagem enviada."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Escrever mensagem."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Você não pode editar uma mensagem já enviada."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensagem"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensagem movido para a lixeira."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensagem restaurada."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensagem deletada."
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/ru/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/ru/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bb1f10f3..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/ru/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1751 +0,0 @@
    -# Russian translations for FlaskBB.
    -# Copyright (C) 2016 DENIS ROMANOV
    -# This file is distributed under the same license as the FlaskBB project.
    -# DENIS ROMANOV , 2016.
    -
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: PROJECT VERSION\n"
    -"Report-Msgid-Bugs-To: denis.romanow@gmail.com\n"
    -"POT-Creation-Date: 2016-02-29 12:44+0300\n"
    -"PO-Revision-Date: 2016-02-29 12:44+0300\n"
    -"Last-Translator: DENIS ROMANOV \n"
    -"Language: ru\n"
    -"Language-Team: ru \n"
    -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
    -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 2.2.0\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:23 flaskbb/management/forms.py:36
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Используйте только буквы, цифры или символ подчеркивания"
    -
    -#: flaskbb/auth/forms.py:27
    -msgid "Username or E-Mail Address"
    -msgstr "Имя или эл. почта"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Требуется имя пользователя или адрес электронной почты."
    -
    -#: flaskbb/auth/forms.py:31 flaskbb/auth/forms.py:48 flaskbb/auth/forms.py:86
    -#: flaskbb/auth/forms.py:107 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "Пароль"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:87
    -msgid "A Password is required."
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/auth/forms.py:34
    -msgid "Remember Me"
    -msgstr "Запомнить меня"
    -
    -#: flaskbb/auth/forms.py:36 flaskbb/templates/layout.html:134
    -#: flaskbb/templates/navigation.html:60 flaskbb/templates/auth/login.html:1
    -#: flaskbb/templates/auth/login.html:9
    -msgid "Login"
    -msgstr "Вход"
    -
    -#: flaskbb/auth/forms.py:40 flaskbb/management/forms.py:56
    -#: flaskbb/templates/forum/memberlist.html:43
    -#: flaskbb/templates/forum/search_result.html:104
    -#: flaskbb/templates/management/banned_users.html:62
    -#: flaskbb/templates/management/users.html:62
    -msgid "Username"
    -msgstr "Имя"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:57
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "Требуется имя"
    -
    -#: flaskbb/auth/forms.py:44 flaskbb/auth/forms.py:93 flaskbb/auth/forms.py:103
    -#: flaskbb/management/forms.py:60
    -msgid "E-Mail Address"
    -msgstr "Адрес эл. почты"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:104
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/management/forms.py:62
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:50 flaskbb/auth/forms.py:109 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "Пароли должны совпадать."
    -
    -#: flaskbb/auth/forms.py:52 flaskbb/auth/forms.py:111
    -msgid "Confirm Password"
    -msgstr "Подтвердите пароль"
    -
    -#: flaskbb/auth/forms.py:55 flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "Язык"
    -
    -#: flaskbb/auth/forms.py:57
    -msgid "I accept the Terms of Service"
    -msgstr "Я принимаю условия сервиса"
    -
    -#: flaskbb/auth/forms.py:59 flaskbb/templates/layout.html:138
    -#: flaskbb/templates/navigation.html:66 flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:9
    -msgid "Register"
    -msgstr "Регистрация"
    -
    -#: flaskbb/auth/forms.py:64 flaskbb/management/forms.py:117
    -msgid "This Username is already taken."
    -msgstr "Это имя пользователя уже занято."
    -
    -#: flaskbb/auth/forms.py:69 flaskbb/management/forms.py:131
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "Этот адрес эл. почты уже занят"
    -
    -#: flaskbb/auth/forms.py:82
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:89 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:10
    -msgid "Refresh Login"
    -msgstr "Обновить вход"
    -
    -#: flaskbb/auth/forms.py:94
    -msgid "A E-Mail Address is reguired."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:97 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Запрос пароля"
    -
    -#: flaskbb/auth/forms.py:113 flaskbb/templates/layout.html:139
    -#: flaskbb/templates/navigation.html:67
    -#: flaskbb/templates/auth/forgot_password.html:9
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -msgid "Reset Password"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:118
    -msgid "Wrong E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/views.py:47
    -msgid "Wrong Username or Password."
    -msgstr "Неверное имя пользователя или пароль."
    -
    -#: flaskbb/auth/views.py:62
    -msgid "Reauthenticated."
    -msgstr "Повторный вход выполнен."
    -
    -#: flaskbb/auth/views.py:103
    -msgid "Thanks for registering."
    -msgstr "Спасибо за регистрацию."
    -
    -#: flaskbb/auth/views.py:127
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "Вам отправлено сообщение эл. почты. Проверьте входящие письма."
    -
    -#: flaskbb/auth/views.py:130
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "Вы ввели имя пользователя или адрес эл. почты. которые не связаны с Вашей учетной записью."
    -
    -#: flaskbb/auth/views.py:150
    -msgid "Your Password Token is invalid."
    -msgstr "Неверный идентификатор пароля."
    -
    -#: flaskbb/auth/views.py:154
    -msgid "Your Password Token is expired."
    -msgstr "Идентификатор пароля истек."
    -
    -#: flaskbb/auth/views.py:160
    -msgid "Your Password has been updated."
    -msgstr "Ваш пароль был обновлен."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Быстрый ответ"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Вы не можете отправить пустой комментарий."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic_controls.html:94
    -msgid "Reply"
    -msgstr "Ответ"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Содержание"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Отслеживать"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -msgid "Preview"
    -msgstr "Предварительный просмотр"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Заголовок темы"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Пожалуйста выберете заголовок темы."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Опубликовать тему"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:39
    -#: flaskbb/templates/management/unread_reports.html:39
    -msgid "Reason"
    -msgstr "Причина"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Какая причина жалобы на эту тему?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:16
    -msgid "Report Post"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:75
    -#: flaskbb/templates/navigation.html:21
    -#: flaskbb/templates/forum/memberlist.html:26
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:10
    -#: flaskbb/templates/forum/search_form.html:15
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:10
    -#: flaskbb/templates/management/banned_users.html:39
    -#: flaskbb/templates/management/users.html:39
    -msgid "Search"
    -msgstr "Поиск"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Критерий"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Комментарий"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/edit_forum.html:31
    -#: flaskbb/templates/forum/forum.html:49
    -#: flaskbb/templates/forum/search_result.html:134
    -#: flaskbb/templates/forum/topictracker.html:31
    -#: flaskbb/templates/management/reports.html:38
    -#: flaskbb/templates/management/unread_reports.html:38
    -msgid "Topic"
    -msgstr "Тема"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:73
    -#: flaskbb/templates/navigation.html:19 flaskbb/templates/forum/category.html:9
    -#: flaskbb/templates/forum/category_layout.html:8
    -#: flaskbb/templates/forum/edit_forum.html:13
    -#: flaskbb/templates/forum/forum.html:10
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/templates/forum/new_post.html:11
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/forum/search_result.html:213
    -#: flaskbb/templates/forum/topic.html:10
    -#: flaskbb/templates/forum/topic_horizontal.html:14
    -#: flaskbb/templates/forum/topictracker.html:14
    -#: flaskbb/templates/management/banned_users.html:8
    -#: flaskbb/templates/management/category_form.html:8
    -#: flaskbb/templates/management/forum_form.html:8
    -#: flaskbb/templates/management/forums.html:7
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/group_form.html:8
    -#: flaskbb/templates/management/groups.html:7
    -#: flaskbb/templates/management/overview.html:7
    -#: flaskbb/templates/management/plugins.html:7
    -#: flaskbb/templates/management/reports.html:8
    -#: flaskbb/templates/management/settings.html:7
    -#: flaskbb/templates/management/unread_reports.html:8
    -#: flaskbb/templates/management/user_form.html:8
    -#: flaskbb/templates/management/users.html:8
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:5
    -#: flaskbb/templates/user/settings_layout.html:6
    -msgid "Forum"
    -msgstr "Форум"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:99
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/users.html:1
    -#: flaskbb/templates/management/users.html:34
    -msgid "Users"
    -msgstr "Пользователи"
    -
    -#: flaskbb/forum/views.py:180
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "У Вас нет прав создать новую тему."
    -
    -#: flaskbb/forum/views.py:208 flaskbb/utils/helpers.py:96
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "У Вас нет прав удалить эту тему."
    -
    -#: flaskbb/forum/views.py:225
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "У Вас нет прав закрыть эту тему."
    -
    -#: flaskbb/forum/views.py:241
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "У Вас нет прав открыть эту тему."
    -
    -#: flaskbb/forum/views.py:257
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "У Вас нет прав закрепить эту тему."
    -
    -#: flaskbb/forum/views.py:274
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "У Вас нет прав открепить эту тему."
    -
    -#: flaskbb/forum/views.py:297
    -msgid "You do not have the permissions to moderate this forum."
    -msgstr "У Вас нет прав модерировать этот форум."
    -
    -#: flaskbb/forum/views.py:323
    -#, python-format
    -msgid "%(count)s Topics locked."
    -msgstr "%(count)s Тем закрыто."
    -
    -#: flaskbb/forum/views.py:329
    -#, python-format
    -msgid "%(count)s Topics unlocked."
    -msgstr "%(count)s Тем открыто."
    -
    -#: flaskbb/forum/views.py:336
    -#, python-format
    -msgid "%(count)s Topics highlighted."
    -msgstr "%(count)s Тем закреплено."
    -
    -#: flaskbb/forum/views.py:342
    -#, python-format
    -msgid "%(count)s Topics trivialized."
    -msgstr "%(count)s Тем откреплено."
    -
    -#: flaskbb/forum/views.py:349
    -#, python-format
    -msgid "%(count)s Topics deleted."
    -msgstr "%(count)s Тем удалено."
    -
    -#: flaskbb/forum/views.py:357
    -msgid "Please choose a new forum for the topics."
    -msgstr "Пожалуйста, выберите новый форум для создания темы."
    -
    -#: flaskbb/forum/views.py:369
    -msgid "You do not have the permissions to move this topic."
    -msgstr "У Вас нет прав перемещать эту тему."
    -
    -#: flaskbb/forum/views.py:389 flaskbb/forum/views.py:416
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "У Вас нет прав комментировать эту тему."
    -
    -#: flaskbb/forum/views.py:442
    -msgid "You do not have the permissions to edit this post."
    -msgstr "У Вас нет прав редактировать этот комментарий."
    -
    -#: flaskbb/forum/views.py:473
    -msgid "You do not have the permissions to delete this post."
    -msgstr "У Вас нет прав удалять этот комментарий."
    -
    -#: flaskbb/forum/views.py:497
    -msgid "Thanks for reporting."
    -msgstr "Спасибо за сообщение."
    -
    -#: flaskbb/forum/views.py:533
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Форум %(forum)s отмечен как прочитанный."
    -
    -#: flaskbb/forum/views.py:555
    -msgid "All forums marked as read."
    -msgstr "Все форумы отмечены как прочитанные."
    -
    -#: flaskbb/management/forms.py:67 flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "День рождения"
    -
    -#: flaskbb/management/forms.py:71 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Пол"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Мужской"
    -
    -#: flaskbb/management/forms.py:74 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Женский"
    -
    -#: flaskbb/management/forms.py:76 flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Местоположение"
    -
    -#: flaskbb/management/forms.py:79 flaskbb/templates/forum/search_result.html:48
    -#: flaskbb/templates/forum/topic.html:52
    -#: flaskbb/templates/forum/topic_horizontal.html:63
    -#: flaskbb/templates/message/conversation.html:47
    -#: flaskbb/templates/message/conversation.html:101 flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Сайт"
    -
    -#: flaskbb/management/forms.py:82 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Аватар "
    -
    -#: flaskbb/management/forms.py:85 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/management/forms.py:88 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Комментарий"
    -
    -#: flaskbb/management/forms.py:92
    -msgid "Primary Group"
    -msgstr "Первичная группа"
    -
    -#: flaskbb/management/forms.py:97
    -msgid "Secondary Groups"
    -msgstr "Вторичная группа"
    -
    -#: flaskbb/management/forms.py:103 flaskbb/management/forms.py:215
    -#: flaskbb/management/forms.py:332 flaskbb/management/forms.py:411
    -#: flaskbb/templates/management/settings.html:59 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Сохранить"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/templates/management/groups.html:34
    -msgid "Group Name"
    -msgstr "Имя группы"
    -
    -#: flaskbb/management/forms.py:153
    -msgid "A Group name is required."
    -msgstr "Требуется имя группы"
    -
    -#: flaskbb/management/forms.py:155 flaskbb/management/forms.py:284
    -#: flaskbb/management/forms.py:399 flaskbb/templates/management/groups.html:35
    -msgid "Description"
    -msgstr "Описание"
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Admin Group?"
    -msgstr "Группа администраторов?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Отметьте что бы пользователям был предоставлен доступ к панели администрирования."
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Is Super Moderator Group?"
    -msgstr "Группа супермодераторов?"
    -
    -#: flaskbb/management/forms.py:165
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Отметьте что бы пользователи могли модерировать все форумы."
    -
    -#: flaskbb/management/forms.py:169
    -msgid "Is Moderator Group?"
    -msgstr "Группа модераторов?"
    -
    -#: flaskbb/management/forms.py:170
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Отметьте что бы пользователи могли редактировать отдельные форумы."
    -
    -#: flaskbb/management/forms.py:174
    -msgid "Is Banned Group?"
    -msgstr "Группа заблокированных?"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Only one Banned group is allowed."
    -msgstr "Допустима только одна группа заблокированных."
    -
    -#: flaskbb/management/forms.py:178
    -msgid "Is Guest Group?"
    -msgstr "Группа гостей?"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Only one Guest group is allowed."
    -msgstr "Допустима только одна группа гостей."
    -
    -#: flaskbb/management/forms.py:182
    -msgid "Can edit posts"
    -msgstr "Редактировать комментарии"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Отметьте что бы пользователи могли редактировать комментарии."
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Can delete posts"
    -msgstr "Удалять комментарии"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Отметьте что бы пользователи могли удалять комментарии."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Can delete topics"
    -msgstr "Удалять темы"
    -
    -#: flaskbb/management/forms.py:191
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Отметьте что бы пользователи могли удалять темы."
    -
    -#: flaskbb/management/forms.py:195
    -msgid "Can create topics"
    -msgstr "Создавать темы"
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Отметьте что бы пользователи могли создавать темы."
    -
    -#: flaskbb/management/forms.py:200
    -msgid "Can post replies"
    -msgstr "Комментировать темы"
    -
    -#: flaskbb/management/forms.py:201
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Отметьте что бы пользователи могли комментировать темы."
    -
    -#: flaskbb/management/forms.py:205
    -msgid "Moderators can edit user profiles"
    -msgstr "Модераторы могут редактировать профили пользователей"
    -
    -#: flaskbb/management/forms.py:206
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Позволить модераторам редактировать профили других пользователей включая пароли и адреса эл. почты."
    -
    -#: flaskbb/management/forms.py:211
    -msgid "Moderators can ban users"
    -msgstr "Модераторы могут блокировать пользователей"
    -
    -#: flaskbb/management/forms.py:212
    -msgid "Allow moderators to ban other users."
    -msgstr "Позволить модераторам блокировать других пользователей."
    -
    -#: flaskbb/management/forms.py:229
    -msgid "This Group name is already taken."
    -msgstr "Эта группа уже существует"
    -
    -#: flaskbb/management/forms.py:243
    -msgid "There is already a Banned group."
    -msgstr "Уже существует группа заблокированных пользователей."
    -
    -#: flaskbb/management/forms.py:257
    -msgid "There is already a Guest group."
    -msgstr "Уже существует группа гостевых пользователей."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Forum Title"
    -msgstr "Заголовок форума"
    -
    -#: flaskbb/management/forms.py:280
    -msgid "A Forum Title is required."
    -msgstr "Требуется заголовок форума."
    -
    -#: flaskbb/management/forms.py:286 flaskbb/management/forms.py:401
    -msgid "You can format your description with BBCode."
    -msgstr "Вы можете форматировать описание с помощью BBCode"
    -
    -#: flaskbb/management/forms.py:290 flaskbb/management/forms.py:405
    -msgid "Position"
    -msgstr "Позиция"
    -
    -#: flaskbb/management/forms.py:292
    -msgid "The Forum Position is required."
    -msgstr "Требуеться позиция форума."
    -
    -#: flaskbb/management/forms.py:296
    -msgid "Category"
    -msgstr "Категория"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "The category that contains this forum."
    -msgstr "Категория которая содержит данный форум."
    -
    -#: flaskbb/management/forms.py:304
    -msgid "External Link"
    -msgstr "Внешняя ссылка"
    -
    -#: flaskbb/management/forms.py:306
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ссылка на внешний сайт например: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:310
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/search_result.html:283
    -#: flaskbb/templates/management/forums.html:135
    -msgid "Moderators"
    -msgstr "Модераторы"
    -
    -#: flaskbb/management/forms.py:311
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Имена пользователей разделенные запятой. Оставьте пустым если Вы не хотите назначать модераторов."
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Show Moderators"
    -msgstr "Показывать модераторов"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Вы хотите показывать модераторов на главной странице?"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Locked?"
    -msgstr "Заблокирован?"
    -
    -#: flaskbb/management/forms.py:322
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Отключить новые комментарии и темы на этом форуме."
    -
    -#: flaskbb/management/forms.py:326
    -msgid "Group Access to Forum"
    -msgstr "Доступ групп к форуму"
    -
    -#: flaskbb/management/forms.py:329
    -msgid "Select user groups that can access this forum."
    -msgstr "Выбрать группы пользователей у которых есть доступ к форуму."
    -
    -#: flaskbb/management/forms.py:337
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Вы не можете преобразовать форум которые содержит темы во внешнюю ссылку."
    -
    -#: flaskbb/management/forms.py:342
    -msgid "You also need to specify some moderators."
    -msgstr "Вы должны назначить модераторов."
    -
    -#: flaskbb/management/forms.py:354
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s не входит в группу модераторов."
    -
    -#: flaskbb/management/forms.py:395
    -msgid "Category Title"
    -msgstr "Называние категории"
    -
    -#: flaskbb/management/forms.py:396
    -msgid "A Category Title is required."
    -msgstr "Требуется названии категории."
    -
    -#: flaskbb/management/forms.py:407
    -msgid "The Category Position is required."
    -msgstr "Требуется позиция категории."
    -
    -#: flaskbb/management/views.py:104
    -msgid "Settings saved."
    -msgstr "Настройки сохранены."
    -
    -#: flaskbb/management/views.py:143
    -msgid "You are not allowed to edit this user."
    -msgstr "Вам запрещено редактировать этого пользователя."
    -
    -#: flaskbb/management/views.py:177
    -msgid "User successfully updated."
    -msgstr "Пользователь обновлен."
    -
    -#: flaskbb/management/views.py:181
    -msgid "Edit User"
    -msgstr "Редактировать пользователя."
    -
    -#: flaskbb/management/views.py:216
    -msgid "You cannot delete yourself."
    -msgstr "Вы не можете удалить себя."
    -
    -#: flaskbb/management/views.py:220
    -msgid "User successfully deleted."
    -msgstr "Пользователь успешно удален."
    -
    -#: flaskbb/management/views.py:230
    -msgid "User successfully added."
    -msgstr "Пользователь успешно добавлен."
    -
    -#: flaskbb/management/views.py:234
    -#: flaskbb/templates/management/banned_users.html:24
    -#: flaskbb/templates/management/user_form.html:24
    -#: flaskbb/templates/management/users.html:24
    -msgid "Add User"
    -msgstr "Добавить пользователя"
    -
    -#: flaskbb/management/views.py:264
    -msgid "You do not have the permissions to ban this user."
    -msgstr "У Вас нет прав заблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:288
    -#: flaskbb/templates/management/banned_users.html:96
    -#: flaskbb/templates/management/users.html:122
    -msgid "Unban"
    -msgstr "Разблокировать"
    -
    -#: flaskbb/management/views.py:306
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Модератор не может заблокировать администратора сайта."
    -
    -#: flaskbb/management/views.py:310
    -msgid "User is now banned."
    -msgstr "Пользователь заблокирован."
    -
    -#: flaskbb/management/views.py:312
    -msgid "Could not ban user."
    -msgstr "Невозможно заблокировать пользователя."
    -
    -#: flaskbb/management/views.py:322
    -msgid "You do not have the permissions to unban this user."
    -msgstr "У Вас нет прав разблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:337 flaskbb/templates/management/users.html:112
    -msgid "Ban"
    -msgstr "Заблокировать."
    -
    -#: flaskbb/management/views.py:352
    -msgid "User is now unbanned."
    -msgstr "Пользователь разблокирован."
    -
    -#: flaskbb/management/views.py:354
    -msgid "Could not unban user."
    -msgstr "Невозможно разблокировать пользователя."
    -
    -#: flaskbb/management/views.py:415
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Жалоба %(id)s уже отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:422
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Жалоба %(id)s отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:436
    -msgid "All reports were marked as read."
    -msgstr "Все жалобы уже отмечены как прочитанные."
    -
    -#: flaskbb/management/views.py:467
    -msgid "Group successfully updated."
    -msgstr "Группа успешно обновлена."
    -
    -#: flaskbb/management/views.py:471
    -msgid "Edit Group"
    -msgstr "Редактировать группу"
    -
    -#: flaskbb/management/views.py:499
    -msgid "You cannot delete one of the standard groups."
    -msgstr "Вы не можете удалить одну из стандартных групп."
    -
    -#: flaskbb/management/views.py:507
    -msgid "You cannot delete the standard groups. Try renaming them instead."
    -msgstr "Вы не можете удалить стандартную группу. Попробуйте вместо этого переименовать ее."
    -
    -#: flaskbb/management/views.py:513
    -msgid "Group successfully deleted."
    -msgstr "Группа успешно удалена."
    -
    -#: flaskbb/management/views.py:516
    -msgid "No group choosen.."
    -msgstr "Группа не выбрана."
    -
    -#: flaskbb/management/views.py:526
    -msgid "Group successfully added."
    -msgstr "Группа успешно добавлена."
    -
    -#: flaskbb/management/views.py:530
    -#: flaskbb/templates/management/group_form.html:21
    -#: flaskbb/templates/management/groups.html:20
    -msgid "Add Group"
    -msgstr "Добавит группу"
    -
    -#: flaskbb/management/views.py:549
    -msgid "Forum successfully updated."
    -msgstr "Форум успешно обновлен."
    -
    -#: flaskbb/management/views.py:560 flaskbb/templates/management/forums.html:154
    -msgid "Edit Forum"
    -msgstr "Редактирвать форум"
    -
    -#: flaskbb/management/views.py:573
    -msgid "Forum successfully deleted."
    -msgstr "Форум успешно удален."
    -
    -#: flaskbb/management/views.py:585
    -msgid "Forum successfully added."
    -msgstr "Форум успешно добавлен."
    -
    -#: flaskbb/management/views.py:594
    -#: flaskbb/templates/management/category_form.html:21
    -#: flaskbb/templates/management/forum_form.html:21
    -#: flaskbb/templates/management/forums.html:20
    -#: flaskbb/templates/management/forums.html:44
    -msgid "Add Forum"
    -msgstr "Добавить форум"
    -
    -#: flaskbb/management/views.py:604
    -msgid "Category successfully added."
    -msgstr "Категория успешно добавлена."
    -
    -#: flaskbb/management/views.py:608
    -#: flaskbb/templates/management/category_form.html:22
    -#: flaskbb/templates/management/forum_form.html:22
    -#: flaskbb/templates/management/forums.html:21
    -msgid "Add Category"
    -msgstr "Добавит категорию."
    -
    -#: flaskbb/management/views.py:620
    -msgid "Category successfully updated."
    -msgstr "Категория успешно обновлена."
    -
    -#: flaskbb/management/views.py:624 flaskbb/templates/management/forums.html:47
    -msgid "Edit Category"
    -msgstr "Редактировать категорию."
    -
    -#: flaskbb/management/views.py:637
    -msgid "Category with all associated forums deleted."
    -msgstr "Категория со всеми связаными форумами удалена."
    -
    -#: flaskbb/management/views.py:655
    -msgid "Plugin is already enabled."
    -msgstr "Расширение уже включено"
    -
    -#: flaskbb/management/views.py:660
    -#, python-format
    -msgid "Plugin %(plugin)s enabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s включено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:663
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"removing the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте удалить 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:676
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Расширение %(plugin)s не найдено."
    -
    -#: flaskbb/management/views.py:681
    -#, python-format
    -msgid "Plugin %(plugin)s disabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s отключено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:684
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"creating the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте создать 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:699
    -msgid "Plugin has been uninstalled."
    -msgstr "Расширение удалено."
    -
    -#: flaskbb/management/views.py:701
    -msgid "Cannot uninstall Plugin."
    -msgstr "Не могу удалить расширение."
    -
    -#: flaskbb/management/views.py:714
    -msgid "Plugin has been installed."
    -msgstr "Расширение установлено."
    -
    -#: flaskbb/management/views.py:716
    -msgid "Cannot install Plugin."
    -msgstr "Не могу установить расширение."
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "Получатель"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "Тема"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "Тема обязательна."
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:58
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/topic.html:47
    -#: flaskbb/templates/forum/topic_horizontal.html:58
    -#: flaskbb/templates/message/conversation.html:97
    -#: flaskbb/templates/user/profile_layout.html:47
    -msgid "Message"
    -msgstr "Сообщение"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:59
    -msgid "A Message is required."
    -msgstr "Текст сообщения обязательный"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "Начать переписку"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "Сохранить переписку"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "Такого пользователя не существует"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "Вы не можете отправить сообщение сообщение самому себе"
    -
    -#: flaskbb/message/forms.py:60
    -msgid "Send Message"
    -msgstr "Отправить сообщение"
    -
    -#: flaskbb/message/views.py:71 flaskbb/message/views.py:127
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "Вы не можете отправить больше сообщений, потому что Вы достигли своего лимита сообщений."
    -
    -#: flaskbb/message/views.py:144 flaskbb/message/views.py:216
    -msgid "Message saved."
    -msgstr "Сообщение сохранено"
    -
    -#: flaskbb/message/views.py:169 flaskbb/message/views.py:234
    -msgid "Message sent."
    -msgstr "Сообщение отправлено"
    -
    -#: flaskbb/message/views.py:175
    -msgid "Compose Message"
    -msgstr "Написать сообщение"
    -
    -#: flaskbb/message/views.py:202
    -msgid "You cannot edit a sent message."
    -msgstr "Вы не можете редактировать отправленное сообщение."
    -
    -#: flaskbb/message/views.py:242
    -msgid "Edit Message"
    -msgstr "Редактировать сообщение"
    -
    -#: flaskbb/templates/layout.html:74 flaskbb/templates/navigation.html:20
    -#: flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:10
    -#: flaskbb/templates/forum/memberlist.html:36
    -msgid "Memberlist"
    -msgstr "Участники"
    -
    -#: flaskbb/templates/layout.html:103 flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Inbox"
    -msgstr "Входящие"
    -
    -#: flaskbb/templates/layout.html:104 flaskbb/templates/navigation.html:54
    -#: flaskbb/templates/message/message_layout.html:16
    -msgid "New Message"
    -msgstr "Написать"
    -
    -#: flaskbb/templates/layout.html:116 flaskbb/templates/navigation.html:35
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:15
    -#: flaskbb/templates/forum/topictracker.html:26
    -msgid "Topic Tracker"
    -msgstr "Отслеживание тем"
    -
    -#: flaskbb/templates/layout.html:119 flaskbb/templates/navigation.html:38
    -#: flaskbb/templates/management/management_layout.html:17
    -#: flaskbb/templates/user/settings_layout.html:8
    -msgid "Settings"
    -msgstr "Настройки"
    -
    -#: flaskbb/templates/layout.html:121 flaskbb/templates/navigation.html:40
    -#: flaskbb/templates/management/banned_users.html:9
    -#: flaskbb/templates/management/category_form.html:9
    -#: flaskbb/templates/management/forum_form.html:9
    -#: flaskbb/templates/management/forums.html:8
    -#: flaskbb/templates/management/group_form.html:9
    -#: flaskbb/templates/management/groups.html:8
    -#: flaskbb/templates/management/overview.html:8
    -#: flaskbb/templates/management/plugins.html:8
    -#: flaskbb/templates/management/reports.html:9
    -#: flaskbb/templates/management/settings.html:8
    -#: flaskbb/templates/management/unread_reports.html:9
    -#: flaskbb/templates/management/user_form.html:9
    -#: flaskbb/templates/management/users.html:9
    -msgid "Management"
    -msgstr "Управление"
    -
    -#: flaskbb/templates/layout.html:125 flaskbb/templates/navigation.html:44
    -msgid "Logout"
    -msgstr "Выход"
    -
    -#: flaskbb/templates/macros.html:325
    -msgid "Pages"
    -msgstr "Страницы"
    -
    -#: flaskbb/templates/navigation.html:53
    -msgid "Private Messages"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/auth/login.html:22
    -msgid "Not a member yet?"
    -msgstr "Еще не зарегистрированы?"
    -
    -#: flaskbb/templates/auth/login.html:23
    -msgid "Forgot Password?"
    -msgstr "Забыли пароль?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Уважаемый %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Что бы обновить свой пароль пройдите по следующей ссылке:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "С уважением"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Администрация"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Нет доступа - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -msgid "Forbidden Page"
    -msgstr "Заблокированная страница"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:10
    -msgid "You do not have the permission to view this page."
    -msgstr "У Вас нет доступа к этой странице"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:11
    -#: flaskbb/templates/errors/page_not_found.html:11
    -msgid "Back to the Forums"
    -msgstr "Назад на форум"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "О нет! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Oops, Page not found!"
    -msgstr "Страница не найдена!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:10
    -msgid "The page you were looking for does not exist."
    -msgstr "Страницы которую вы ищете не существует"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Ошибка сервера - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:9
    -msgid "Server Error"
    -msgstr "Ошибка сервера"
    -
    -#: flaskbb/templates/errors/server_error.html:10
    -msgid "Something went wrong!"
    -msgstr "Что-то пошло не так но мы работаем над этим!"
    -
    -#: flaskbb/templates/forum/category_layout.html:9
    -#: flaskbb/templates/forum/search_result.html:129
    -#: flaskbb/templates/forum/search_result.html:214
    -#: flaskbb/templates/management/overview.html:85
    -#: flaskbb/templates/user/all_posts.html:28
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile_layout.html:69
    -msgid "Topics"
    -msgstr "Темы"
    -
    -#: flaskbb/templates/forum/category_layout.html:10
    -#: flaskbb/templates/forum/edit_forum.html:32
    -#: flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/memberlist.html:50
    -#: flaskbb/templates/forum/search_result.html:16
    -#: flaskbb/templates/forum/search_result.html:40
    -#: flaskbb/templates/forum/search_result.html:105
    -#: flaskbb/templates/forum/search_result.html:135
    -#: flaskbb/templates/forum/search_result.html:215
    -#: flaskbb/templates/forum/topic.html:44
    -#: flaskbb/templates/forum/topic_horizontal.html:55
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/management/banned_users.html:63
    -#: flaskbb/templates/management/overview.html:88
    -#: flaskbb/templates/management/users.html:63
    -#: flaskbb/templates/message/conversation.html:44
    -#: flaskbb/templates/message/conversation.html:95
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/all_posts.html:34
    -#: flaskbb/templates/user/all_topics.html:34
    -#: flaskbb/templates/user/profile_layout.html:75
    -msgid "Posts"
    -msgstr "Комментарии"
    -
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/edit_forum.html:34
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/search_result.html:137
    -#: flaskbb/templates/forum/search_result.html:216
    -#: flaskbb/templates/forum/topictracker.html:34
    -msgid "Last Post"
    -msgstr "Последний комментарий "
    -
    -#: flaskbb/templates/forum/category_layout.html:27
    -#: flaskbb/templates/forum/search_result.html:232
    -#: flaskbb/templates/management/forums.html:80
    -msgid "Link to"
    -msgstr "Ссылка на"
    -
    -#: flaskbb/templates/forum/category_layout.html:114
    -#: flaskbb/templates/forum/edit_forum.html:68
    -#: flaskbb/templates/forum/edit_forum.html:91
    -#: flaskbb/templates/forum/forum.html:85 flaskbb/templates/forum/forum.html:107
    -#: flaskbb/templates/forum/search_result.html:162
    -#: flaskbb/templates/forum/search_result.html:184
    -#: flaskbb/templates/forum/search_result.html:317
    -#: flaskbb/templates/forum/topictracker.html:68
    -#: flaskbb/templates/forum/topictracker.html:91
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "by"
    -msgstr "от"
    -
    -#: flaskbb/templates/forum/category_layout.html:123
    -#: flaskbb/templates/forum/search_result.html:326
    -msgid "No posts."
    -msgstr "Нет комментариев."
    -
    -#: flaskbb/templates/forum/edit_forum.html:33
    -#: flaskbb/templates/forum/forum.html:51
    -#: flaskbb/templates/forum/search_result.html:136
    -#: flaskbb/templates/forum/topictracker.html:33
    -msgid "Views"
    -msgstr "Просмотры"
    -
    -#: flaskbb/templates/forum/edit_forum.html:107
    -#: flaskbb/templates/forum/forum.html:120
    -#: flaskbb/templates/forum/topictracker.html:107
    -msgid "No Topics."
    -msgstr "Нет тем."
    -
    -#: flaskbb/templates/forum/edit_forum.html:117
    -msgid "Back"
    -msgstr "Назад"
    -
    -#: flaskbb/templates/forum/edit_forum.html:128
    -msgid "Lock"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:131
    -msgid "Unlock"
    -msgstr "Открыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:137
    -msgid "Highlight"
    -msgstr "Закрепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:140
    -msgid "Trivialize"
    -msgstr "Открепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:145
    -#: flaskbb/templates/management/groups.html:64
    -#: flaskbb/templates/management/users.html:132
    -msgid "Delete"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:158
    -msgid "Move to..."
    -msgstr "Переместить в ... "
    -
    -#: flaskbb/templates/forum/edit_forum.html:165
    -msgid "Move"
    -msgstr "Переместить"
    -
    -#: flaskbb/templates/forum/forum.html:25
    -#: flaskbb/templates/management/unread_reports.html:50
    -#: flaskbb/templates/management/unread_reports.html:69
    -msgid "Mark as Read"
    -msgstr "Отметить как прочитанные"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/topic_controls.html:97
    -msgid "Locked"
    -msgstr "Закрыт"
    -
    -#: flaskbb/templates/forum/forum.html:35
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:13
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "New Topic"
    -msgstr "Новая тема"
    -
    -#: flaskbb/templates/forum/forum.html:130
    -msgid "Moderation Mode"
    -msgstr "Режим модерации"
    -
    -#: flaskbb/templates/forum/index.html:11
    -msgid "Board Statistics"
    -msgstr "Статистика форума"
    -
    -#: flaskbb/templates/forum/index.html:12
    -msgid "Who is online?"
    -msgstr "Кто на форуме?"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Total number of registered users"
    -msgstr "Количество зарегистрированных пользователей"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Total number of topics"
    -msgstr "Количество тем"
    -
    -#: flaskbb/templates/forum/index.html:19
    -msgid "Total number of posts"
    -msgstr "Количество комментариев"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "Newest registered user"
    -msgstr "Последний зарегистрированный пользователь"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "No users"
    -msgstr "Нет пользователей"
    -
    -#: flaskbb/templates/forum/index.html:23
    -msgid "Registered users online"
    -msgstr "Зарегистрированных пользователей на сайте"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Guests online"
    -msgstr "Гостей на сайте"
    -
    -#: flaskbb/templates/forum/memberlist.html:46
    -#: flaskbb/templates/forum/search_result.html:106
    -#: flaskbb/templates/management/banned_users.html:64
    -#: flaskbb/templates/management/users.html:64
    -msgid "Date registered"
    -msgstr "Дата регистрация"
    -
    -#: flaskbb/templates/forum/memberlist.html:48
    -#: flaskbb/templates/forum/search_result.html:107
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:65
    -msgid "Group"
    -msgstr "Группа"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:14
    -#: flaskbb/templates/forum/new_post.html:21
    -msgid "New Post"
    -msgstr "Новый комментарий"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:15
    -#: flaskbb/templates/management/overview.html:76
    -msgid "Online Users"
    -msgstr "Пользователи на форуме"
    -
    -#: flaskbb/templates/forum/report_post.html:20
    -msgid "Report"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/templates/forum/report_post.html:21
    -msgid "Close"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/search_result.html:39
    -#: flaskbb/templates/forum/topic.html:43
    -#: flaskbb/templates/forum/topic_horizontal.html:54
    -#: flaskbb/templates/message/conversation.html:43
    -#: flaskbb/templates/message/conversation.html:94
    -msgid "Joined"
    -msgstr "Присоединившиеся"
    -
    -#: flaskbb/templates/forum/search_result.html:54
    -#: flaskbb/templates/forum/topic.html:58
    -#: flaskbb/templates/message/conversation.html:106
    -msgid "Guest"
    -msgstr "Гость"
    -
    -#: flaskbb/templates/forum/search_result.html:89
    -msgid "No posts found matching your search criteria."
    -msgstr "Не найдено комментариев в соответсвии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/management/banned_users.html:104
    -#: flaskbb/templates/management/users.html:140
    -msgid "No users found matching your search criteria."
    -msgstr "Не найдено пользователей в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:197
    -msgid "No topics found matching your search criteria."
    -msgstr "Не найдено тем в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:335
    -msgid "No forums found matching your search criteria."
    -msgstr "Не найдено форумов в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#: flaskbb/templates/forum/topic_horizontal.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Тема"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Moderate"
    -msgstr "Модерировать"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Delete Topic"
    -msgstr "Удалить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Lock Topic"
    -msgstr "Закрыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Unlock Topic"
    -msgstr "Открыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:56
    -msgid "Highlight Topic"
    -msgstr "Закрепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:65
    -msgid "Trivialize Topic"
    -msgstr "Открепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:80
    -msgid "Untrack Topic"
    -msgstr "Не отслеживать тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:87
    -msgid "Track Topic"
    -msgstr "Отслеживать тему"
    -
    -#: flaskbb/templates/forum/topictracker.html:117
    -msgid "Untrack Topics"
    -msgstr "Не отслеживать темы"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:21
    -#: flaskbb/templates/management/banned_users.html:34
    -#: flaskbb/templates/management/overview.html:79
    -#: flaskbb/templates/management/user_form.html:21
    -#: flaskbb/templates/management/users.html:21
    -msgid "Banned Users"
    -msgstr "Заблокированные пользователи"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/user_form.html:20
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Управлять пользователями"
    -
    -#: flaskbb/templates/management/banned_users.html:70
    -#: flaskbb/templates/management/groups.html:39
    -#: flaskbb/templates/management/unread_reports.html:45
    -#: flaskbb/templates/management/users.html:69
    -msgid "Actions"
    -msgstr "Действия"
    -
    -#: flaskbb/templates/management/banned_users.html:74
    -#: flaskbb/templates/management/users.html:79
    -msgid "Are you sure you want to unban these Users?"
    -msgstr "Вы уверены что вы хотите разблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/banned_users.html:75
    -#: flaskbb/templates/management/users.html:80
    -msgid "Unban selected Users"
    -msgstr "Разблокировать пользователей"
    -
    -#: flaskbb/templates/management/category_form.html:20
    -#: flaskbb/templates/management/forum_form.html:20
    -#: flaskbb/templates/management/forums.html:19
    -#: flaskbb/templates/management/forums.html:30
    -msgid "Manage Forums"
    -msgstr "Управлять форумами"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/management_layout.html:19
    -msgid "Forums"
    -msgstr "Форумы"
    -
    -#: flaskbb/templates/management/forums.html:52
    -msgid "Delete Category"
    -msgstr "Удалить категорию"
    -
    -#: flaskbb/templates/management/forums.html:63
    -msgid "Topics / Posts"
    -msgstr "Темы / Комментарии"
    -
    -#: flaskbb/templates/management/forums.html:100
    -msgid "Edit Link"
    -msgstr "Редактировать ссылку"
    -
    -#: flaskbb/templates/management/forums.html:105
    -msgid "Delete Link"
    -msgstr "Удалить ссылку"
    -
    -#: flaskbb/templates/management/forums.html:159
    -msgid "Delete Forum"
    -msgstr "Удалить форум"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/group_form.html:20
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:19
    -msgid "Manage Groups"
    -msgstr "Редактировать группы"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/groups.html:28
    -#: flaskbb/templates/management/management_layout.html:18
    -#: flaskbb/templates/management/overview.html:82
    -msgid "Groups"
    -msgstr "Группы"
    -
    -#: flaskbb/templates/management/groups.html:43
    -msgid "Are you sure you want to delete these Groups?"
    -msgstr "Вы уверены что хотите удалить эти группы?"
    -
    -#: flaskbb/templates/management/groups.html:44
    -msgid "Delete selected Groups"
    -msgstr "Удалить группы"
    -
    -#: flaskbb/templates/management/groups.html:59
    -#: flaskbb/templates/management/users.html:103
    -msgid "Edit"
    -msgstr "Редактировать"
    -
    -#: flaskbb/templates/management/groups.html:71
    -msgid "No groups found."
    -msgstr "Группы не найдены."
    -
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:1
    -#: flaskbb/templates/management/overview.html:16
    -#: flaskbb/templates/user/all_posts.html:16
    -#: flaskbb/templates/user/all_topics.html:16
    -#: flaskbb/templates/user/profile_layout.html:57
    -msgid "Overview"
    -msgstr "Обзор"
    -
    -#: flaskbb/templates/management/management_layout.html:14
    -#: flaskbb/templates/management/overview.html:91
    -#: flaskbb/templates/management/reports.html:1
    -#: flaskbb/templates/management/reports.html:10
    -msgid "Reports"
    -msgstr "Жалобы"
    -
    -#: flaskbb/templates/management/management_layout.html:20
    -#: flaskbb/templates/management/overview.html:115
    -#: flaskbb/templates/management/plugins.html:1
    -#: flaskbb/templates/management/plugins.html:9
    -msgid "Plugins"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/overview.html:25
    -msgid "Everything seems alright."
    -msgstr "Похоже все нормально."
    -
    -#: flaskbb/templates/management/overview.html:26
    -msgid "No new notifications."
    -msgstr "Новых оповещений нет."
    -
    -#: flaskbb/templates/management/overview.html:38
    -msgid "users"
    -msgstr "пользователи"
    -
    -#: flaskbb/templates/management/overview.html:50
    -msgid "posts"
    -msgstr "комментарии"
    -
    -#: flaskbb/templates/management/overview.html:62
    -msgid "topics"
    -msgstr "темы"
    -
    -#: flaskbb/templates/management/overview.html:70
    -msgid "Statistics"
    -msgstr "Статистика"
    -
    -#: flaskbb/templates/management/overview.html:73
    -msgid "Registered Users"
    -msgstr "Зарегистрированные пользователи"
    -
    -#: flaskbb/templates/management/overview.html:96
    -msgid "Components"
    -msgstr "Компоненты"
    -
    -#: flaskbb/templates/management/plugins.html:19
    -msgid "Manage Plugins"
    -msgstr "Управление расширениями"
    -
    -#: flaskbb/templates/management/plugins.html:25
    -msgid "Plugin"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/plugins.html:26
    -msgid "Information"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/management/plugins.html:27
    -msgid "Manage"
    -msgstr "Управлять"
    -
    -#: flaskbb/templates/management/plugins.html:40
    -msgid "Version"
    -msgstr "Версия"
    -
    -#: flaskbb/templates/management/plugins.html:48
    -msgid "Enable"
    -msgstr "Включить"
    -
    -#: flaskbb/templates/management/plugins.html:53
    -msgid "Disable"
    -msgstr "Выключить"
    -
    -#: flaskbb/templates/management/plugins.html:60
    -msgid "Install"
    -msgstr "Установить"
    -
    -#: flaskbb/templates/management/plugins.html:66
    -msgid "Uninstall"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/management/reports.html:21
    -#: flaskbb/templates/management/unread_reports.html:21
    -msgid "Show unread reports"
    -msgstr "Показать непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/reports.html:22
    -#: flaskbb/templates/management/unread_reports.html:22
    -msgid "Show all reports"
    -msgstr "Показать все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:31
    -msgid "All Reports"
    -msgstr "Все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:37
    -#: flaskbb/templates/management/unread_reports.html:37
    -msgid "Poster"
    -msgstr "Комментатор"
    -
    -#: flaskbb/templates/management/reports.html:40
    -#: flaskbb/templates/management/unread_reports.html:40
    -msgid "Reporter"
    -msgstr "Сообщивший"
    -
    -#: flaskbb/templates/management/reports.html:41
    -#: flaskbb/templates/management/unread_reports.html:41
    -msgid "Reported"
    -msgstr "Сообщено"
    -
    -#: flaskbb/templates/management/reports.html:54
    -#: flaskbb/templates/management/unread_reports.html:76
    -msgid "No unread reports."
    -msgstr "Непрочитанных жалоб нет."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Unread Reports"
    -msgstr "Непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "Are you sure you want to mark these Reports as read?"
    -msgstr "Вы уверены что Вы хотите отметить все жалобы как непрочитанные?"
    -
    -#: flaskbb/templates/management/users.html:73
    -msgid "Are you sure you want to ban these Users?"
    -msgstr "Вы уверены что Вы хотите заблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:74
    -msgid "Ban selected Users"
    -msgstr "Заблокировать пользователей"
    -
    -#: flaskbb/templates/management/users.html:85
    -msgid "Are you sure you want to delete these Users?"
    -msgstr "Вы уверены что Вы хотите удалить этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:86
    -msgid "Delete selected Users"
    -msgstr "Удалить пользователей"
    -
    -#: flaskbb/templates/message/conversation.html:105
    -msgid "Deleted"
    -msgstr "Удаленные"
    -
    -#: flaskbb/templates/message/conversation_list.html:6
    -msgid "Conversations"
    -msgstr "Переписки"
    -
    -#: flaskbb/templates/message/conversation_list.html:88
    -msgid "No conversations found."
    -msgstr "Переписок не найдено"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:20
    -msgid "Drafts"
    -msgstr "Черновики"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -msgid "Sent"
    -msgstr "Исходящие"
    -
    -#: flaskbb/templates/message/message_layout.html:21
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Корзина"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Отправленные сообщения"
    -
    -#: flaskbb/templates/user/all_posts.html:65
    -msgid "The user has not written any posts yet."
    -msgstr "Пользователь не написал ни одного комментария."
    -
    -#: flaskbb/templates/user/all_topics.html:67
    -msgid "The user has not opened any topics yet."
    -msgstr "Пользователь не начал ни одной темы."
    -
    -#: flaskbb/templates/user/change_email.html:7
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Изменить адрес эл. почты"
    -
    -#: flaskbb/templates/user/change_password.html:7
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Изменить пароль"
    -
    -#: flaskbb/templates/user/change_user_details.html:8
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Изменить настройки пользователя"
    -
    -#: flaskbb/templates/user/general_settings.html:7
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Общие настройки"
    -
    -#: flaskbb/templates/user/profile.html:19
    -msgid "Info"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/user/profile.html:25
    -msgid "User has not added any notes about him."
    -msgstr "Пользователь не добавил комментарий о себе"
    -
    -#: flaskbb/templates/user/profile.html:34
    -msgid "Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/templates/user/profile_layout.html:27
    -msgid "Never seen"
    -msgstr "Никогда не видели"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Настройки учетной записи"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "Тема"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "Старый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "Новый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "Адреса эл. почты должны совпадать"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "Подтвердите адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "Текущий пароль"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "Подтвердите новый пароль"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "Неверный текущий пароль"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "Настройки обновлены"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "Пароль обновлен."
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "Адрес эл. почты обновлен"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "Детальная информация обновлена."
    -
    -#: flaskbb/utils/helpers.py:79
    -msgid "You do not have the permissions to execute this action."
    -msgstr "У Вас нет прав для этого действия."
    -
    -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 378697ee..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1608 +0,0 @@
    -# Chinese (Simplified, China) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: https://github.com/flaskbb\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-15 10:53+0800\n"
    -"Language-Team: FlaskBB in zh_Hans_CN\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Last-Translator: ZHOU JIAHUI \n"
    -"Language: zh\n"
    -"X-Generator: Poedit 1.8.1\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "密码重置"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "您只能使用字母、数字与短划线"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "用户名或邮箱地址"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "请输入用户名或邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密码"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "请输入密码。"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "记住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登录"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "用户名"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "请输入用户名。"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "邮箱地址"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "请输入邮箱地址"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "不正确的邮箱地址"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "两次输入的密码不一致。"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "校验密码"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我同意并遵守服务条例"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1 flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "注册"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "该用户名已被使用。"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "该邮箱已被使用。"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "验证码"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登录"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "请输入邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "请求重置密码"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密码"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "错误的邮箱地址"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "错误的用户名或密码。"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "重新认证身份。"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感谢您的注册。"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "邮件已发送至您的邮箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "您输入的邮箱没有关联至您的账户。"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的令牌已不合法。"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "你的令牌已过期。"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密码已被更新。"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回复"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34 flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能发表一个空的回复。"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54 flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "内容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "关注该主题"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "预览"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "标题"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "请输入一个标题"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "发表主题"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "您为何报告这个主题?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "报告主题"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89 flaskbb/forum/forms.py:104
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜索"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "条件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主题"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6 flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "论坛"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "用户"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您没有权限创建一个新主题。"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "你没有权限删除该主题。"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您没有权限锁上该主题。"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您没有权限解锁该主题。"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您没有权限高亮该主题。"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您没有权限去高亮该主题。"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您没有权限移动该主题。"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "无法将本主题移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "本主题已被移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您没有权限合并该主题。"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "无法合并主题。"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "主题已被成功合并。"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您没有权限回复该主题。"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您没有权限编辑本条回复。"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您没有权限删除本条回复。"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "感谢您的报告。"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "论坛 %(forum)s 已被标记为已读。"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "所有论坛已被标记为已读。"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性别"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "网站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "头像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "签名"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "个人说明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主用户组"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要用户组"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "保存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "用户组名"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "请输入用户组名。"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "描述"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "管理员组?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "勾上本选项后本群用户能够访问管理员面板。"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "超级版主组?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "勾上本选项后本群用户能够管理所有论坛。"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "版主组?"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified forums."
    -msgstr "勾上本选项后本群用户能够管理特定的论坛。"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "禁止用户组?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只允许存在一个禁止用户组。"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "来宾组?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只允许存在一个来宾用户组。"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "能编辑回复"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "勾上本选项后本群用户可以编辑回复。"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "能删除回复"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "勾上本选项后本群用户可以删除回复。"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "能删除主题"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "勾上本选项后本群用户可以删除主题。"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "能创建主题"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "能创建回复"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "版主能够修改用户资料"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and email "
    -"changes."
    -msgstr "允许版主能够编辑其他用户的资料(包括密码和邮箱地址)"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "版主能够禁止用户"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允许版主能够禁止其他用户。"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "该用户组名已被使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已存在禁止用户组了。"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已存在来宾用户组。"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "论坛标题"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "请输入论坛标题。"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以使用 BBCode 来格式化您的描述。"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "先后位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "请输入一个先后位置。"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "分类"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "该论坛将位与此分类之下。"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部链接"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "链接到外部的网站(例:’http://flaskbb.org')。"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "版主"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "使用逗号来分割用户。如果您不想设置版主的话留空即可。"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "展示版主"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在主页上显示版主?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "加锁?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "在该论坛禁止发表新主题与回复。"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "请选择可以访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您不能改变一个主题包含外部链接的论坛。"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定版主。"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "用户 %(user)s 不在版主组里。"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "分类标题"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "请输入分类标题。"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "请输入分类的先后位置。"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "设置已被保存。"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您没有权限编辑该用户。"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "用户信息已被成功更新。"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "编辑用户。"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "删除用户成功。"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "添加用户成功。"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "添加用户"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您没有权限禁止该用户。"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "一个版主无法禁止一个管理员。"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "该用户已被禁止。"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "无法禁止该用户。"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您没有权限恢复该用户。"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "该用户已被恢复。"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "无法恢复该用户。"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "报告 %(id)s 已被标记为已读。"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "报告 %(id)s 被标记为已读。"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "所有报告被标记为已读。"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "成功更新用户组信息。"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "编辑用户组"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "删除用户组成功。"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "添加用户组成功。"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "添加用户组"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "成功更新论坛信息。"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "编辑论坛"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "删除论坛成功。"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "添加论坛成功。"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "添加论坛"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "添加分类成功。"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "添加分类"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "成功更新分类信息。"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "编辑分类"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "该分类与所有相关联的论坛已被删除。"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "插件启用成功。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "插件已被启用。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己删除 "
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "无法启用插件。"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "没有找到此插件:%(plugin)s。"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "插件已被禁用。请重新载入您的引用。"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己创建"
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "插件已被卸载。"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "无法卸载插件。"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "插件已被安装。"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "无法安装插件。"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "给用户"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主题"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "请输入主题"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "消息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "请输入消息。"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "新建会话"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "保存会话"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您输入的用户不存在。"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您无法给自己发送私人消息。"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "发送消息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message limit."
    -msgstr "由于您超出了限额,因此您将无法继续发送任何消息。"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "消息已被保存。"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "消息已被发送。"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "撰写消息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您无法编辑一条已被发送的消息。"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "编辑消息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "用户列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "设置"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "注销"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新消息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "页面"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "还未注册?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘记密码?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "亲爱的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "点击该链接来重置您的密码:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真诚的"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理人员"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "无法访问 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的页面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "您没有权限访问该页面。"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "返回论坛。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "没有该页面 - 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您查找的页面不存在。"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "服务器报告了一个错误。"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主题"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "回复量"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最后的回复"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "来自"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "暂无回复。"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "标记为已读。"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "锁定"
    -
    -#: flaskbb/templates/forum/forum.html:33 flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新建主题"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "浏览"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "没有主题"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "论坛统计"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "谁在线上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "所有注册用户数量"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "所有主题数量"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "所有回复数量"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新注册用户"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "暂无用户"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "在线注册用户"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "在线来宾用户"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "注册日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新建回复"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "在线用户"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "报告"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "关闭"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "注册于"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "来宾用户"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "没有找到符合条件的回复。"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "没有找到符合条件的用户。"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "没有找到符合条件的主题。"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "论坛"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "没有找到符合条件的论坛。"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主题"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最后修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "编辑"
    -
    -#: flaskbb/templates/forum/topic.html:131 flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "删除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "不再关注"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "关注主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "删除主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "锁上主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解锁主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "高亮主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "普通化主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "暂无主题。"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "被禁止的用户"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理员"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "恢复"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理论坛"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理用户组"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概况"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "报告"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "全局统计"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理插件"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "信息"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "启用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "禁用"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安装"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "卸载"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "显示未读报告"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "显示所有报告"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有报告"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回复者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "报告者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已被报告"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "还没有报告。"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未读报告"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "将所有标记为已读。"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "没有未读的报告。"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "所有会话"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "未找到任何会话。"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿箱"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "发件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "废纸篓"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "发送消息"
    -
    -#: flaskbb/templates/user/all_posts.html:8 flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有回复"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "所有回复由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主题"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "所有主题由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "修改邮箱"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "修改密码"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "修改用户信息"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "通用设置"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "信息"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "用户状态"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "该用户没有添加关于他的备注。"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入于"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最后上线于"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "从未上线"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最后发表回复"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "从未"
    -
    -#: flaskbb/templates/user/profile.html:74 flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "没有信息"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "账户设置"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "语言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主题"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原邮箱地址"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新邮箱地址"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "两次输入的邮箱不一致。"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "校对邮箱地址"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密码"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "请输入密码"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "校对密码"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密码错误。"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "设置更新成功。"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "密码修改成功。"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "邮箱更新成功。"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "更新用户信息成功。"
    diff --git a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b8e31d78..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1615 +0,0 @@
    -# Chinese (Traditional, Taiwan) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -#, fuzzy
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-16 15:04+0800\n"
    -"Last-Translator: Sean Chen \n"
    -"Language-Team: zh_Hant_TW \n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "重設密碼"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "你只可以使用英文字母、數字或短橫線"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "請輸入使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密碼"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "記住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登入"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "使用者名稱"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "請輸入使用者名稱"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "無效的電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "輸入的密碼不一致"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我接受服務條款"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "註冊"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "使用者名稱已使用"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "電子郵件帳號已使用"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "驗證碼"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登入"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "取得密碼"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密碼"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "電子郵件帳號錯誤"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "使用者名稱或密碼錯誤"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "已重新驗證"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感謝註冊"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "已寄出電子郵件!請確認您的信箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "您輸入了未連結到您的帳號的使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的重置密碼記號已失效"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "您的重置密碼記號已過期"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密碼已更新"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回文"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能發表空白的回文"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回文"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "內容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "追蹤這個主題"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "預覽"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "標題"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "請選擇一個標題"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "發表文章"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "為什麼要舉報這篇文章"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "舉報文章"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:50
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜尋"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "搜尋條件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "文章"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主題"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "論壇"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "使用者"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您沒有權限發表一個新的主題"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "您沒有權限刪除這個主題"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您沒有權限鎖定這個主題"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您沒有權限解鎖這個主題"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您沒有權限強調這個主題"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您沒有權限取消強調這個主題"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您沒有權限移動這個主題"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "無法移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "已移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您沒有權限合併這個主題"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "無法合併主題"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "已成功合併主題"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您沒有權限回覆這個主題"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您沒有權限編輯這篇文章"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您沒有權限刪除這篇文章"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "謝謝您的舉報"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "%(forum)s 論壇已經標記為已讀"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "全部論壇已標記為已讀"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性別"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "網站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "頭像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "簽名檔"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主要群組"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要群組"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "儲存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "群組名稱"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "請輸入群組名稱"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "是否為管理者群組?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "選擇這個選項讓這個群組可使用管理者功能"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "是否為超級協調者群組?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "選擇這個選項讓此群組中的使用者可管理每個論壇"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "是否為協調者群組"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "選擇這個選項讓此群組中的使用者可管理特定的論壇"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "是否為禁止群組?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只可選擇一個禁止群組"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "是否為遊客群組?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只可選擇一個遊客群組"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "可編輯文章"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "選擇這個選項讓此群組中的使用者可編輯文章"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "可刪除文章"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除文章"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "可刪除主題"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除主題"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "可新增主題"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "選擇這個選項讓此群組中的使用者可新增主題"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "可發表回覆"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "選擇這個選項讓此群組中的使用者可發表回覆"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "協調者可編輯使用者檔案"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "允許協調者可編輯其他使用者檔案,包含密碼與電子郵件"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "協調者可禁止使用者"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允許協調者可禁止其他使用者"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "群組名稱已使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已有一個禁止群組"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已有一個遊客群組"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "論壇標題"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "請輸入論壇標題"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以用 BBCode 編輯您的說明"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "請選擇論壇所在ㄙ位置"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "類別"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "論壇的類別"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部連結"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "網站連結 如:'http://flaskbb.org'"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "協調者"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "用逗號分開使用者名稱。如果您不想設定任何協調者請留空白"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "顯示協調者"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在首頁顯示協調者?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "鎖定?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "此論壇禁止所有新文章與主題"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "選擇可使用此論壇的使用者群組"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您無法將包含主題的論壇轉換成外部連結"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定幾位協調者"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s 不屬於協調者群組"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "使用者 %(moderator)s 不存在"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "類別標題"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "請輸入類別標題"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "請選擇類別所在位置"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "設定已儲存"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您沒有權限編輯這個使用者"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "已成功更新使用者"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "編輯使用者"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "已成功刪除使用者"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "已成功新增使用者"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "新增使用者"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您沒有權限禁止此使用者"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "協調者不能禁止管理者"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "已禁止此使用者"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "不能禁止此使用者"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您沒有權限取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "已取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "不能取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "舉報 %(id)s 已標記為已讀"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "舉報 %(id)s 標記為已讀"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "全部舉報已標記為已讀"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "已成功更新群組"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "編輯群組"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "已成功刪除群組"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "已成功新增群組"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "新增群組"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "已成功更新論壇"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "編輯論壇"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "已成功刪除論壇"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "已成功新增論壇"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "新增論壇"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "已成功新增類別"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "新增類別"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "已成功更新類別"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "編輯類別"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "已刪除類別與所有相關論壇"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "無法啟用外掛"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "外掛 %(plugin)s 不存在"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "外掛已停用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "外掛已移除"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "無法移除外掛"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "外掛已安裝"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "無法安裝外掛"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "收件者"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主題"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "請輸入主題"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "訊息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "請輸入訊息"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "開始對話"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "儲存對話"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您輸入的使用者不存在"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您無法發送訊息給自己"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "發送訊息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "您無法發送任何訊息,因為您的訊息已達到上限"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "訊息已儲存"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "訊息已送出"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "編寫訊息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您無法編輯一個已送出的訊息"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "編輯訊息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "使用者列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "設定"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "登出"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新訊息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "頁"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "還不是使用者?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘記密碼?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "親愛的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "點擊下面的連結來重設您的密碼:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真誠地,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理團隊"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "無法使用 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的頁面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "回到論壇"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "找不到頁面! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "糟糕,找不到頁面!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您找尋的頁面不存在"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "伺服器錯誤 - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "伺服器錯誤"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "發生錯誤!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主題數"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "文章數"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "由"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "無文章"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "標示為已讀"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "鎖定"
    -
    -#: flaskbb/templates/forum/forum.html:33
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新主題"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "閱覽數"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "誰在線上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "註冊使用者總數"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "主題總數"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "文章總數"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "無使用者"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "線上註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "線上遊客"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "註冊日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "群組"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新增文章"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "線上使用者"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "關閉"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "註冊於"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "遊客"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合文章"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合使用者"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合主題"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "論壇"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合論壇"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主題"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最後修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "發送訊息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "編輯"
    -
    -#: flaskbb/templates/forum/topic.html:131
    -#: flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "刪除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "取消追蹤"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "追蹤主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "刪除主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "鎖定主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解鎖主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "強調主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "取消強調"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "禁止的使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "取消禁止"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理論壇"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理群組"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "群組"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概況"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB 版本"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python 版本"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask 版本"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理外掛"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "啟用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "取消"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安裝"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "移除"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "顯示未讀舉報"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "顯示所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回覆者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "舉報者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已舉報"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "無舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未讀舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "全部標記為已讀"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "沒有未讀舉報"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "對話"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "沒有對話"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "已送出"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "垃圾"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "已送出訊息"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有文章"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "%(user)s 的所有文章"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主題"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "%(user)s 的所有主題"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "變更電子郵件"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "變更密碼"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "變更使用者內容"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "一般設定"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "使用者統計"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "使用者未新增說明"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入於"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最後一次登入"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "從未登入"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "從未"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "沒有資訊"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "帳號設定"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "語言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主題"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "電子郵件帳號需一致"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "確認電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密碼"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密碼錯誤"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "已更新設定"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "已更新密碼"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "已更新電子郵件帳號"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "已更新內容"
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/logs/.gitkeep b/profiling/test_projects/flaskbb_lite_1/logs/.gitkeep
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_1/manage.py b/profiling/test_projects/flaskbb_lite_1/manage.py
    deleted file mode 100755
    index 19e09941..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/manage.py
    +++ /dev/null
    @@ -1,317 +0,0 @@
    -#!/usr/bin/env python
    -
    -"""
    -    flaskbb.manage
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    This script provides some easy to use commands for
    -    creating the database with or without some sample content.
    -    You can also run the development server with it.
    -    Just type `python manage.py` to see the full list of commands.
    -
    -    TODO: When Flask 1.0 is released, get rid of Flask-Script and use click.
    -          Then it's also possible to split the commands in "command groups"
    -          which would make the commands better seperated from each other
    -          and less confusing.
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from __future__ import print_function
    -import sys
    -import os
    -import subprocess
    -import requests
    -
    -from flask import current_app
    -from werkzeug.utils import import_string
    -from sqlalchemy.exc import IntegrityError, OperationalError
    -from flask_script import (Manager, Shell, Server, prompt, prompt_pass,
    -                          prompt_bool)
    -from flask_migrate import MigrateCommand, upgrade
    -
    -from flaskbb import create_app
    -from flaskbb.extensions import db, plugin_manager
    -from flaskbb.utils.populate import (create_test_data, create_welcome_forum,
    -                                    create_admin_user, create_default_groups,
    -                                    create_default_settings, insert_mass_data,
    -                                    update_settings_from_fixture)
    -
    -# Use the development configuration if available
    -try:
    -    from flaskbb.configs.development import DevelopmentConfig as Config
    -except ImportError:
    -    from flaskbb.configs.default import DefaultConfig as Config
    -
    -app = create_app(Config)
    -manager = Manager(app)
    -
    -# Used to get the plugin translations
    -PLUGINS_FOLDER = os.path.join(app.root_path, "plugins")
    -
    -# Run local server
    -manager.add_command("runserver", Server("localhost", port=8080))
    -
    -# Migration commands
    -manager.add_command('db', MigrateCommand)
    -
    -
    -# Add interactive project shell
    -def make_shell_context():
    -    return dict(app=current_app, db=db)
    -manager.add_command("shell", Shell(make_context=make_shell_context))
    -
    -
    -@manager.command
    -def initdb():
    -    """Creates the database."""
    -
    -    upgrade()
    -
    -
    -@manager.command
    -def dropdb():
    -    """Deletes the database."""
    -
    -    db.drop_all()
    -
    -
    -@manager.command
    -def populate(dropdb=False, createdb=False):
    -    """Creates the database with some default data.
    -    To drop or create the databse use the '-d' or '-c' options.
    -    """
    -
    -    if dropdb:
    -        print("Dropping database...")
    -        db.drop_all()
    -
    -    if createdb:
    -        print("Creating database...")
    -        upgrade()
    -
    -    app.logger.info("Creating test data...")
    -    create_test_data()
    -
    -
    -@manager.option('-u', '--username', dest='username')
    -@manager.option('-p', '--password', dest='password')
    -@manager.option('-e', '--email', dest='email')
    -def create_admin(username=None, password=None, email=None):
    -    """Creates the admin user."""
    -
    -    if not (username and password and email):
    -        username = prompt("Username")
    -        email = prompt("A valid email address")
    -        password = prompt_pass("Password")
    -
    -    create_admin_user(username=username, password=password, email=email)
    -
    -
    -@manager.option('-u', '--username', dest='username')
    -@manager.option('-p', '--password', dest='password')
    -@manager.option('-e', '--email', dest='email')
    -def install(username=None, password=None, email=None):
    -    """Installs FlaskBB with all necessary data."""
    -
    -    print("Creating default data...")
    -    try:
    -        create_default_groups()
    -        create_default_settings()
    -    except IntegrityError:
    -        print("Couldn't create the default data because it already exist!")
    -        if prompt_bool("Found an existing database."
    -                       "Do you want to recreate the database? (y/n)"):
    -            db.session.rollback()
    -            db.drop_all()
    -            upgrade()
    -            create_default_groups()
    -            create_default_settings()
    -        else:
    -            sys.exit(0)
    -    except OperationalError:
    -        print("No database found.")
    -        if prompt_bool("Do you want to create the database now? (y/n)"):
    -            db.session.rollback()
    -            upgrade()
    -            create_default_groups()
    -            create_default_settings()
    -        else:
    -            sys.exit(0)
    -
    -    print("Creating admin user...")
    -    if username and password and email:
    -        create_admin_user(username=username, password=password, email=email)
    -    else:
    -        create_admin()
    -
    -    print("Creating welcome forum...")
    -    create_welcome_forum()
    -
    -    print("Compiling translations...")
    -    compile_translations()
    -
    -    if prompt_bool("Do you want to use Emojis? (y/n)"):
    -        print("Downloading emojis. This can take a few minutes.")
    -        download_emoji()
    -
    -    print("Congratulations! FlaskBB has been successfully installed")
    -
    -
    -@manager.command
    -def insertmassdata():
    -    """Warning: This can take a long time!.
    -    Creates 100 topics and each topic contains 100 posts.
    -    """
    -    insert_mass_data()
    -
    -
    -@manager.option('-s', '--settings', dest="settings")
    -@manager.option('-f', '--force', dest="force", default=False)
    -def update(settings=None, force=False):
    -    """Updates the settings via a fixture. All fixtures have to be placed
    -    in the `fixture`.
    -    Usage: python manage.py update -s your_fixture
    -    """
    -
    -    try:
    -        fixture = import_string(
    -            "flaskbb.fixtures.{}".format(settings)
    -        )
    -        fixture = fixture.fixture
    -    except ImportError:
    -        raise "{} fixture is not available".format(settings)
    -
    -    overwrite_group = overwrite_setting = False
    -    if force:
    -        overwrite_group = overwrite_setting = True
    -
    -    count = update_settings_from_fixture(
    -        fixture=fixture,
    -        overwrite_group=overwrite_group,
    -        overwrite_setting=overwrite_setting
    -    )
    -    print("{} groups and {} settings updated.".format(
    -        len(count.keys()), len(count.values()))
    -    )
    -
    -
    -@manager.command
    -def update_translations():
    -    """Updates all translations."""
    -
    -    # update flaskbb translations
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file, "."])
    -    subprocess.call(["pybabel", "update", "-i", source_file,
    -                     "-d", translations_folder])
    -
    -    # updates all plugin translations too
    -    for plugin in plugin_manager.all_plugins:
    -        update_plugin_translations(plugin)
    -
    -
    -@manager.command
    -def add_translations(translation):
    -    """Adds a new language to the translations."""
    -
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file, "."])
    -    subprocess.call(["pybabel", "init", "-i", source_file,
    -                     "-d", translations_folder, "-l", translation])
    -
    -
    -@manager.command
    -def compile_translations():
    -    """Compiles all translations."""
    -
    -    # compile flaskbb translations
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    subprocess.call(["pybabel", "compile", "-d", translations_folder])
    -
    -    # compile all plugin translations
    -    for plugin in plugin_manager.all_plugins:
    -        compile_plugin_translations(plugin)
    -
    -
    -# Plugin translation commands
    -@manager.command
    -def add_plugin_translations(plugin, translation):
    -    """Adds a new language to the plugin translations. Expects the name
    -    of the plugin and the translations name like "en".
    -    """
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file,
    -                     plugin_folder])
    -    subprocess.call(["pybabel", "init", "-i", source_file,
    -                     "-d", translations_folder, "-l", translation])
    -
    -
    -@manager.command
    -def update_plugin_translations(plugin):
    -    """Updates the plugin translations. Expects the name of the plugin."""
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file,
    -                     plugin_folder])
    -    subprocess.call(["pybabel", "update", "-i", source_file,
    -                     "-d", translations_folder])
    -
    -
    -@manager.command
    -def compile_plugin_translations(plugin):
    -    """Compile the plugin translations. Expects the name of the plugin."""
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -
    -    subprocess.call(["pybabel", "compile", "-d", translations_folder])
    -
    -
    -@manager.command
    -def download_emoji():
    -    """Downloads emojis from emoji-cheat-sheet.com."""
    -    HOSTNAME = "https://api.github.com"
    -    REPO = "/repos/arvida/emoji-cheat-sheet.com/contents/public/graphics/emojis"
    -    FULL_URL = "{}{}".format(HOSTNAME, REPO)
    -    DOWNLOAD_PATH = os.path.join(app.static_folder, "emoji")
    -
    -    response = requests.get(FULL_URL)
    -
    -    cached_count = 0
    -    count = 0
    -    for image in response.json():
    -        if not os.path.exists(os.path.abspath(DOWNLOAD_PATH)):
    -            print("{} does not exist.".format(os.path.abspath(DOWNLOAD_PATH)))
    -            sys.exit(1)
    -
    -        full_path = os.path.join(DOWNLOAD_PATH, image["name"])
    -        if not os.path.exists(full_path):
    -            count += 1
    -            f = open(full_path, 'wb')
    -            f.write(requests.get(image["download_url"]).content)
    -            f.close()
    -            if count == cached_count + 50:
    -                cached_count = count
    -                print("{} out of {} Emojis downloaded...".format(
    -                      cached_count, len(response.json())))
    -
    -    print("Finished downloading {} Emojis.".format(count))
    -
    -if __name__ == "__main__":
    -    manager.run()
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/README b/profiling/test_projects/flaskbb_lite_1/migrations/README
    deleted file mode 100644
    index 98e4f9c4..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/README
    +++ /dev/null
    @@ -1 +0,0 @@
    -Generic single-database configuration.
    \ No newline at end of file
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/alembic.ini b/profiling/test_projects/flaskbb_lite_1/migrations/alembic.ini
    deleted file mode 100644
    index f8ed4801..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/alembic.ini
    +++ /dev/null
    @@ -1,45 +0,0 @@
    -# A generic, single database configuration.
    -
    -[alembic]
    -# template used to generate migration files
    -# file_template = %%(rev)s_%%(slug)s
    -
    -# set to 'true' to run the environment during
    -# the 'revision' command, regardless of autogenerate
    -# revision_environment = false
    -
    -
    -# Logging configuration
    -[loggers]
    -keys = root,sqlalchemy,alembic
    -
    -[handlers]
    -keys = console
    -
    -[formatters]
    -keys = generic
    -
    -[logger_root]
    -level = WARN
    -handlers = console
    -qualname =
    -
    -[logger_sqlalchemy]
    -level = WARN
    -handlers =
    -qualname = sqlalchemy.engine
    -
    -[logger_alembic]
    -level = INFO
    -handlers =
    -qualname = alembic
    -
    -[handler_console]
    -class = StreamHandler
    -args = (sys.stderr,)
    -level = NOTSET
    -formatter = generic
    -
    -[formatter_generic]
    -format = %(levelname)-5.5s [%(name)s] %(message)s
    -datefmt = %H:%M:%S
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/env.py b/profiling/test_projects/flaskbb_lite_1/migrations/env.py
    deleted file mode 100644
    index 70961ce2..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/env.py
    +++ /dev/null
    @@ -1,73 +0,0 @@
    -from __future__ import with_statement
    -from alembic import context
    -from sqlalchemy import engine_from_config, pool
    -from logging.config import fileConfig
    -
    -# this is the Alembic Config object, which provides
    -# access to the values within the .ini file in use.
    -config = context.config
    -
    -# Interpret the config file for Python logging.
    -# This line sets up loggers basically.
    -fileConfig(config.config_file_name)
    -
    -# add your model's MetaData object here
    -# for 'autogenerate' support
    -# from myapp import mymodel
    -# target_metadata = mymodel.Base.metadata
    -from flask import current_app
    -config.set_main_option('sqlalchemy.url', current_app.config.get('SQLALCHEMY_DATABASE_URI'))
    -target_metadata = current_app.extensions['migrate'].db.metadata
    -
    -# other values from the config, defined by the needs of env.py,
    -# can be acquired:
    -# my_important_option = config.get_main_option("my_important_option")
    -# ... etc.
    -
    -def run_migrations_offline():
    -    """Run migrations in 'offline' mode.
    -
    -    This configures the context with just a URL
    -    and not an Engine, though an Engine is acceptable
    -    here as well.  By skipping the Engine creation
    -    we don't even need a DBAPI to be available.
    -
    -    Calls to context.execute() here emit the given string to the
    -    script output.
    -
    -    """
    -    url = config.get_main_option("sqlalchemy.url")
    -    context.configure(url=url)
    -
    -    with context.begin_transaction():
    -        context.run_migrations()
    -
    -def run_migrations_online():
    -    """Run migrations in 'online' mode.
    -
    -    In this scenario we need to create an Engine
    -    and associate a connection with the context.
    -
    -    """
    -    engine = engine_from_config(
    -                config.get_section(config.config_ini_section),
    -                prefix='sqlalchemy.',
    -                poolclass=pool.NullPool)
    -
    -    connection = engine.connect()
    -    context.configure(
    -                connection=connection,
    -                target_metadata=target_metadata
    -                )
    -
    -    try:
    -        with context.begin_transaction():
    -            context.run_migrations()
    -    finally:
    -        connection.close()
    -
    -if context.is_offline_mode():
    -    run_migrations_offline()
    -else:
    -    run_migrations_online()
    -
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/script.py.mako b/profiling/test_projects/flaskbb_lite_1/migrations/script.py.mako
    deleted file mode 100644
    index 95702017..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/script.py.mako
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -"""${message}
    -
    -Revision ID: ${up_revision}
    -Revises: ${down_revision}
    -Create Date: ${create_date}
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = ${repr(up_revision)}
    -down_revision = ${repr(down_revision)}
    -
    -from alembic import op
    -import sqlalchemy as sa
    -${imports if imports else ""}
    -
    -def upgrade():
    -    ${upgrades if upgrades else "pass"}
    -
    -
    -def downgrade():
    -    ${downgrades if downgrades else "pass"}
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py b/profiling/test_projects/flaskbb_lite_1/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py
    deleted file mode 100644
    index 9408a6a7..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py
    +++ /dev/null
    @@ -1,31 +0,0 @@
    -"""Added m2m forumgroups table
    -
    -Revision ID: 127be3fb000
    -Revises: 514ca0a3282c
    -Create Date: 2015-04-08 22:25:52.809557
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '127be3fb000'
    -down_revision = '514ca0a3282c'
    -
    -from alembic import op
    -import sqlalchemy as sa
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('forumgroups',
    -    sa.Column('group_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['group_id'], ['groups.id'], )
    -    )
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.drop_table('forumgroups')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/versions/514ca0a3282c_private_messages.py b/profiling/test_projects/flaskbb_lite_1/migrations/versions/514ca0a3282c_private_messages.py
    deleted file mode 100644
    index a3e865b9..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/versions/514ca0a3282c_private_messages.py
    +++ /dev/null
    @@ -1,70 +0,0 @@
    -"""Private Messages
    -
    -Revision ID: 514ca0a3282c
    -Revises: 8ad96e49dc6
    -Create Date: 2015-03-22 21:57:57.444251
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '514ca0a3282c'
    -down_revision = '8ad96e49dc6'
    -
    -from alembic import op
    -import sqlalchemy as sa
    -import sqlalchemy_utils
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('conversations',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('from_user_id', sa.Integer(), nullable=True),
    -    sa.Column('to_user_id', sa.Integer(), nullable=True),
    -    sa.Column('shared_id', sqlalchemy_utils.types.uuid.UUIDType(binary=16), nullable=False),
    -    sa.Column('subject', sa.String(length=255), nullable=True),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('trash', sa.Boolean(), nullable=False),
    -    sa.Column('draft', sa.Boolean(), nullable=False),
    -    sa.Column('unread', sa.Boolean(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('messages',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('conversation_id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('message', sa.Text(), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['conversation_id'], ['conversations.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.drop_table('privatemessages')
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('privatemessages',
    -    sa.Column('id', sa.INTEGER(), nullable=False),
    -    sa.Column('user_id', sa.INTEGER(), nullable=False),
    -    sa.Column('from_user_id', sa.INTEGER(), nullable=True),
    -    sa.Column('to_user_id', sa.INTEGER(), nullable=True),
    -    sa.Column('subject', sa.VARCHAR(length=255), nullable=True),
    -    sa.Column('message', sa.TEXT(), nullable=True),
    -    sa.Column('date_created', sa.DATETIME(), nullable=True),
    -    sa.Column('trash', sa.BOOLEAN(), nullable=False),
    -    sa.Column('draft', sa.BOOLEAN(), nullable=False),
    -    sa.Column('unread', sa.BOOLEAN(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], [u'users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], [u'users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], [u'users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.drop_table('messages')
    -    op.drop_table('conversations')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_1/migrations/versions/8ad96e49dc6_init.py b/profiling/test_projects/flaskbb_lite_1/migrations/versions/8ad96e49dc6_init.py
    deleted file mode 100644
    index d84d9cb6..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/migrations/versions/8ad96e49dc6_init.py
    +++ /dev/null
    @@ -1,225 +0,0 @@
    -"""init
    -
    -Revision ID: 8ad96e49dc6
    -Revises: None
    -Create Date: 2015-01-08 23:14:01.941746
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '8ad96e49dc6'
    -down_revision = None
    -
    -from alembic import op
    -import sqlalchemy as sa
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('groups',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('name', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('admin', sa.Boolean(), nullable=False),
    -    sa.Column('super_mod', sa.Boolean(), nullable=False),
    -    sa.Column('mod', sa.Boolean(), nullable=False),
    -    sa.Column('guest', sa.Boolean(), nullable=False),
    -    sa.Column('banned', sa.Boolean(), nullable=False),
    -    sa.Column('mod_edituser', sa.Boolean(), nullable=False),
    -    sa.Column('mod_banuser', sa.Boolean(), nullable=False),
    -    sa.Column('editpost', sa.Boolean(), nullable=False),
    -    sa.Column('deletepost', sa.Boolean(), nullable=False),
    -    sa.Column('deletetopic', sa.Boolean(), nullable=False),
    -    sa.Column('posttopic', sa.Boolean(), nullable=False),
    -    sa.Column('postreply', sa.Boolean(), nullable=False),
    -    sa.PrimaryKeyConstraint('id'),
    -    sa.UniqueConstraint('name')
    -    )
    -    op.create_table('categories',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('position', sa.Integer(), nullable=False),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('settingsgroup',
    -    sa.Column('key', sa.String(length=255), nullable=False),
    -    sa.Column('name', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=False),
    -    sa.PrimaryKeyConstraint('key')
    -    )
    -    op.create_table('settings',
    -    sa.Column('key', sa.String(length=255), nullable=False),
    -    sa.Column('value', sa.PickleType(), nullable=False),
    -    sa.Column('settingsgroup', sa.String(length=255), nullable=False),
    -    sa.Column('name', sa.String(length=200), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=False),
    -    sa.Column('value_type', sa.String(length=20), nullable=False),
    -    sa.Column('extra', sa.PickleType(), nullable=True),
    -    sa.ForeignKeyConstraint(['settingsgroup'], ['settingsgroup.key'], name='fk_settingsgroup', use_alter=True),
    -    sa.PrimaryKeyConstraint('key')
    -    )
    -    op.create_table('users',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('email', sa.String(length=200), nullable=False),
    -    sa.Column('password', sa.String(length=120), nullable=False),
    -    sa.Column('date_joined', sa.DateTime(), nullable=True),
    -    sa.Column('lastseen', sa.DateTime(), nullable=True),
    -    sa.Column('birthday', sa.DateTime(), nullable=True),
    -    sa.Column('gender', sa.String(length=10), nullable=True),
    -    sa.Column('website', sa.String(length=200), nullable=True),
    -    sa.Column('location', sa.String(length=100), nullable=True),
    -    sa.Column('signature', sa.Text(), nullable=True),
    -    sa.Column('avatar', sa.String(length=200), nullable=True),
    -    sa.Column('notes', sa.Text(), nullable=True),
    -    sa.Column('theme', sa.String(length=15), nullable=True),
    -    sa.Column('language', sa.String(length=15), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=True),
    -    sa.Column('primary_group_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['primary_group_id'], ['groups.id'], ),
    -    sa.PrimaryKeyConstraint('id'),
    -    sa.UniqueConstraint('email'),
    -    sa.UniqueConstraint('username')
    -    )
    -    op.create_table('topictracker',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tracker_topic_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('groups_users',
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('group_id', sa.Integer(), nullable=True),
    -    sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('forumsread',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('last_read', sa.DateTime(), nullable=True),
    -    sa.Column('cleared', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_fr_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('user_id', 'forum_id')
    -    )
    -    op.create_table('moderators',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('posts',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=True),
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('content', sa.Text(), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('date_modified', sa.DateTime(), nullable=True),
    -    sa.Column('modified_by', sa.String(length=200), nullable=True),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_post_topic_id', ondelete='CASCADE', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('privatemessages',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('from_user_id', sa.Integer(), nullable=True),
    -    sa.Column('to_user_id', sa.Integer(), nullable=True),
    -    sa.Column('subject', sa.String(length=255), nullable=True),
    -    sa.Column('message', sa.Text(), nullable=True),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('trash', sa.Boolean(), nullable=False),
    -    sa.Column('draft', sa.Boolean(), nullable=False),
    -    sa.Column('unread', sa.Boolean(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('topicsread',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('last_read', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_tr_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tr_topic_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('user_id', 'topic_id', 'forum_id')
    -    )
    -    op.create_table('topics',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('last_updated', sa.DateTime(), nullable=True),
    -    sa.Column('locked', sa.Boolean(), nullable=True),
    -    sa.Column('important', sa.Boolean(), nullable=True),
    -    sa.Column('views', sa.Integer(), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=True),
    -    sa.Column('first_post_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_id', sa.Integer(), nullable=True),
    -    sa.ForeignKeyConstraint(['first_post_id'], ['posts.id'], ondelete='CASCADE'),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_topic_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('reports',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('reporter_id', sa.Integer(), nullable=False),
    -    sa.Column('reported', sa.DateTime(), nullable=True),
    -    sa.Column('post_id', sa.Integer(), nullable=False),
    -    sa.Column('zapped', sa.DateTime(), nullable=True),
    -    sa.Column('zapped_by', sa.Integer(), nullable=True),
    -    sa.Column('reason', sa.Text(), nullable=True),
    -    sa.ForeignKeyConstraint(['post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['reporter_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['zapped_by'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('forums',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('category_id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('position', sa.Integer(), nullable=False),
    -    sa.Column('locked', sa.Boolean(), nullable=False),
    -    sa.Column('show_moderators', sa.Boolean(), nullable=False),
    -    sa.Column('external', sa.String(length=200), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=False),
    -    sa.Column('topic_count', sa.Integer(), nullable=False),
    -    sa.Column('last_post_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_title', sa.String(length=255), nullable=True),
    -    sa.Column('last_post_user_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_username', sa.String(length=255), nullable=True),
    -    sa.Column('last_post_created', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['category_id'], ['categories.id'], ),
    -    sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['last_post_user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.drop_table('forums')
    -    op.drop_table('reports')
    -    op.drop_table('topics')
    -    op.drop_table('topicsread')
    -    op.drop_table('privatemessages')
    -    op.drop_table('posts')
    -    op.drop_table('moderators')
    -    op.drop_table('forumsread')
    -    op.drop_table('groups_users')
    -    op.drop_table('topictracker')
    -    op.drop_table('users')
    -    op.drop_table('settings')
    -    op.drop_table('settingsgroup')
    -    op.drop_table('categories')
    -    op.drop_table('groups')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_1/mprof.py b/profiling/test_projects/flaskbb_lite_1/mprof.py
    deleted file mode 100644
    index 6c3c6a99..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/mprof.py
    +++ /dev/null
    @@ -1,512 +0,0 @@
    -#!/usr/bin/env python
    -
    -import glob
    -import os
    -import os.path as osp
    -import sys
    -import re
    -import copy
    -import time
    -import math
    -
    -from optparse import OptionParser, OptionValueError
    -
    -import memory_profiler as mp
    -
    -ALL_ACTIONS = ("run", "rm", "clean", "list", "plot")
    -help_msg = """
    -Available commands:
    -
    -    run      run a given command or python file
    -    rm       remove a given file generated by mprof
    -    clean    clean the current directory from files created by mprof
    -    list     display existing profiles, with indices
    -    plot     plot memory consumption generated by mprof run
    -
    -Type mprof  --help for usage help on a specific command.
    -For example, mprof plot --help will list all plotting options.
    -"""
    -
    -def print_usage():
    -    print("Usage: %s   "
    -                  % osp.basename(sys.argv[0]))
    -    print(help_msg)
    -
    -
    -
    -def get_action():
    -    """Pop first argument, check it is a valid action."""
    -    if len(sys.argv) <= 1:
    -        print_usage()
    -        sys.exit(1)
    -    if not sys.argv[1] in ALL_ACTIONS:
    -        print_usage()
    -        sys.exit(1)
    -
    -    return sys.argv.pop(1)
    -
    -
    -def get_profile_filenames(args):
    -    """Return list of profile filenames.
    -
    -    Parameters
    -    ==========
    -    args (list)
    -        list of filename or integer. An integer is the index of the
    -        profile in the list of existing profiles. 0 is the oldest,
    -        -1 in the more recent.
    -        Non-existing files cause a ValueError exception to be thrown.
    -
    -    Returns
    -    =======
    -    filenames (list)
    -        list of existing memory profile filenames. It is guaranteed
    -        that an given file name will not appear twice in this list.
    -    """
    -    profiles = glob.glob("mprofile_??????????????.dat")
    -    profiles.sort()
    -
    -    if args is "all":
    -        filenames = copy.copy(profiles)
    -    else:
    -        filenames = []
    -        for arg in args:
    -            if arg == "--":  # workaround
    -                continue
    -            try:
    -                index = int(arg)
    -            except ValueError:
    -                index = None
    -            if index is not None:
    -                try:
    -                    filename = profiles[index]
    -                except IndexError:
    -                    raise ValueError("Invalid index (non-existing file): %s" % arg)
    -
    -                if filename not in filenames:
    -                    filenames.append(filename)
    -            else:
    -                if osp.isfile(arg):
    -                    if arg not in filenames:
    -                        filenames.append(arg)
    -                elif osp.isdir(arg):
    -                    raise ValueError("Path %s is a directory" % arg)
    -                else:
    -                    raise ValueError("File %s not found" % arg)
    -
    -    # Add timestamp files, if any
    -    for filename in reversed(filenames):
    -        parts = osp.splitext(filename)
    -        timestamp_file = parts[0] + "_ts" + parts[1]
    -        if osp.isfile(timestamp_file) and timestamp_file not in filenames:
    -            filenames.append(timestamp_file)
    -
    -    return filenames
    -
    -
    -def list_action():
    -    """Display existing profiles, with indices."""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) > 0:
    -        print("This command takes no argument.")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames("all")
    -    for n, filename in enumerate(filenames):
    -        ts = osp.splitext(filename)[0].split('_')[-1]
    -        print("{index} {filename} {hour}:{min}:{sec} {day}/{month}/{year}"
    -              .format(index=n, filename=filename,
    -                      year=ts[:4], month=ts[4:6], day=ts[6:8],
    -                      hour=ts[8:10], min=ts[10:12], sec=ts[12:14]))
    -
    -
    -def rm_action():
    -    """TODO: merge with clean_action (@pgervais)"""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--dry-run", dest="dry_run", default=False,
    -                      action="store_true",
    -                      help="""Show what will be done, without actually doing it.""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) == 0:
    -        print("A profile to remove must be provided (number or filename)")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames(args)
    -    if options.dry_run:
    -        print("Files to be removed: ")
    -        for filename in filenames:
    -            print(filename)
    -    else:
    -        for filename in filenames:
    -            os.remove(filename)
    -
    -
    -def clean_action():
    -    """Remove every profile file in current directory."""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--dry-run", dest="dry_run", default=False,
    -                      action="store_true",
    -                      help="""Show what will be done, without actually doing it.""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) > 0:
    -        print("This command takes no argument.")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames("all")
    -    if options.dry_run:
    -        print("Files to be removed: ")
    -        for filename in filenames:
    -            print(filename)
    -    else:
    -        for filename in filenames:
    -            os.remove(filename)
    -
    -
    -def get_cmd_line(args):
    -    """Given a set or arguments, compute command-line."""
    -    blanks = set(' \t')
    -    args = [s if blanks.isdisjoint(s) else "'" + s + "'" for s in args]
    -    return ' '.join(args)
    -
    -
    -def run_action():
    -    import time, subprocess
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--python", dest="python", default=False,
    -                      action="store_true",
    -                      help="""Activates extra features when the profiled executable is
    -                      a Python program (currently: function timestamping.)""")
    -    parser.add_option("--nopython", dest="nopython", default=False,
    -                      action="store_true",
    -                      help="""Disables extra features when the profiled executable is
    -                      a Python program (currently: function timestamping.)""")
    -    parser.add_option("--interval", "-T", dest="interval", default="0.1",
    -                      type="float", action="store",
    -                      help="Sampling period (in seconds), defaults to 0.1")
    -    parser.add_option("--include-children", "-C", dest="include_children",
    -                      default=False, action="store_true",
    -                      help="""Monitors forked processes as well (sum up all process memory)""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) == 0:
    -        print("A program to run must be provided. Use -h for help")
    -        sys.exit(1)
    -
    -    print("{1}: Sampling memory every {0.interval}s".format(
    -        options, osp.basename(sys.argv[0])))
    -
    -    ## Output results in a file called "mprofile_.dat" (where
    -    ##  is the date-time of the program start) in the current
    -    ## directory. This file contains the process memory consumption, in Mb (one
    -    ## value per line). Memory is sampled twice each second."""
    -
    -    suffix = time.strftime("%Y%m%d%H%M%S", time.localtime())
    -    mprofile_output = "mprofile_%s.dat" % suffix
    -
    -    # .. TODO: more than one script as argument ? ..
    -    if args[0].endswith('.py') and not options.nopython:
    -        options.python = True
    -    if options.python:
    -        print("running as a Python program...")
    -        if not args[0].startswith("python"):
    -            args.insert(0, "python")
    -        cmd_line = get_cmd_line(args)
    -        args[1:1] = ("-m", "memory_profiler", "--timestamp",
    -                     "-o", mprofile_output)
    -        p = subprocess.Popen(args)
    -    else:
    -        cmd_line = get_cmd_line(args)
    -        p = subprocess.Popen(args)
    -
    -    with open(mprofile_output, "a") as f:
    -        f.write("CMDLINE {0}\n".format(cmd_line))
    -        mp.memory_usage(proc=p, interval=options.interval, timestamps=True,
    -                         include_children=options.include_children, stream=f)
    -
    -
    -def add_brackets(xloc, yloc, xshift=0, color="r", label=None, options=None):
    -    """Add two brackets on the memory line plot.
    -
    -    This function uses the current figure.
    -
    -    Parameters
    -    ==========
    -    xloc: tuple with 2 values
    -        brackets location (on horizontal axis).
    -    yloc: tuple with 2 values
    -        brackets location (on vertical axis)
    -    xshift: float
    -        value to subtract to xloc.
    -    """
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -    height_ratio = 20.
    -    vsize = (pl.ylim()[1] - pl.ylim()[0]) / height_ratio
    -    hsize = (pl.xlim()[1] - pl.xlim()[0]) / (3.*height_ratio)
    -
    -    bracket_x = pl.asarray([hsize, 0, 0, hsize])
    -    bracket_y = pl.asarray([vsize, vsize, -vsize, -vsize])
    -
    -    # Matplotlib workaround: labels starting with _ aren't displayed
    -    if label[0] == '_':
    -        label = ' ' + label
    -    if options.xlim is None or options.xlim[0] <= (xloc[0] - xshift) <= options.xlim[1]:
    -        pl.plot(bracket_x + xloc[0] - xshift, bracket_y + yloc[0],
    -                "-" + color, linewidth=2, label=label)
    -    if options.xlim is None or options.xlim[0] <= (xloc[1] - xshift) <= options.xlim[1]:
    -        pl.plot(-bracket_x + xloc[1] - xshift, bracket_y + yloc[1],
    -                "-" + color, linewidth=2 )
    -
    -    # TODO: use matplotlib.patches.Polygon to draw a colored background for
    -    # each function.
    -
    -    # with maplotlib 1.2, use matplotlib.path.Path to create proper markers
    -    # see http://matplotlib.org/examples/pylab_examples/marker_path.html
    -    # This works with matplotlib 0.99.1
    -    ## pl.plot(xloc[0], yloc[0], "<"+color, markersize=7, label=label)
    -    ## pl.plot(xloc[1], yloc[1], ">"+color, markersize=7)
    -
    -
    -def read_mprofile_file(filename):
    -    """Read an mprofile file and return its content.
    -
    -    Returns
    -    =======
    -    content: dict
    -        Keys:
    -
    -        - "mem_usage": (list) memory usage values, in MiB
    -        - "timestamp": (list) time instant for each memory usage value, in
    -            second
    -        - "func_timestamp": (dict) for each function, timestamps and memory
    -            usage upon entering and exiting.
    -        - 'cmd_line': (str) command-line ran for this profile.
    -    """
    -    func_ts = {}
    -    mem_usage = []
    -    timestamp = []
    -    cmd_line = None
    -    f = open(filename, "r")
    -    for l in f:
    -        if l == '\n':
    -            raise ValueError('Sampling time was too short')
    -        field, value = l.split(' ', 1)
    -        if field == "MEM":
    -            # mem, timestamp
    -            values = value.split(' ')
    -            mem_usage.append(float(values[0]))
    -            timestamp.append(float(values[1]))
    -
    -        elif field == "FUNC":
    -            values = value.split(' ')
    -            f_name, mem_start, start, mem_end, end = values[:5]
    -            ts = func_ts.get(f_name, [])
    -            ts.append([float(start), float(end),
    -                       float(mem_start), float(mem_end)])
    -            func_ts[f_name] = ts
    -
    -        elif field == "CMDLINE":
    -            cmd_line = value
    -        else:
    -            pass
    -    f.close()
    -
    -    return {"mem_usage": mem_usage, "timestamp": timestamp,
    -            "func_timestamp": func_ts, 'filename': filename,
    -            'cmd_line': cmd_line}
    -
    -
    -
    -def plot_file(filename, index=0, timestamps=True, options=None):
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -    import numpy as np  # pylab requires numpy anyway
    -    mprofile = read_mprofile_file(filename)
    -
    -    if len(mprofile['timestamp']) == 0:
    -        print('** No memory usage values have been found in the profile '
    -              'file.**\nFile path: {0}\n'
    -              'File may be empty or invalid.\n'
    -              'It can be deleted with "mprof rm {0}"'.format(
    -              mprofile['filename']))
    -        sys.exit(0)
    -
    -    # Merge function timestamps and memory usage together
    -    ts = mprofile['func_timestamp']
    -    t = mprofile['timestamp']
    -    mem = mprofile['mem_usage']
    -
    -    if len(ts) > 0:
    -        for values in ts.values():
    -            for v in values:
    -                t.extend(v[:2])
    -                mem.extend(v[2:4])
    -
    -    mem = np.asarray(mem)
    -    t = np.asarray(t)
    -    ind = t.argsort()
    -    mem = mem[ind]
    -    t = t[ind]
    -
    -    # Plot curves
    -    global_start = float(t[0])
    -    t = t - global_start
    -
    -    max_mem = mem.max()
    -    max_mem_ind = mem.argmax()
    -
    -    all_colors=("c", "y", "g", "r", "b")
    -    mem_line_colors=("k", "b", "r", "g", "c", "y", "m")
    -    mem_line_label = time.strftime("%d / %m / %Y - start at %H:%M:%S",
    -                                   time.localtime(global_start)) \
    -                                   + ".{0:03d}".format(int(round(math.modf(global_start)[0]*1000)))
    -
    -    pl.plot(t, mem, "+-" + mem_line_colors[index % len(mem_line_colors)],
    -            label=mem_line_label)
    -
    -    bottom, top = pl.ylim()
    -    bottom += 0.001
    -    top -= 0.001
    -
    -    # plot timestamps, if any
    -    if len(ts) > 0 and timestamps:
    -        func_num = 0
    -        for f, exec_ts in ts.items():
    -            for execution in exec_ts:
    -                add_brackets(execution[:2], execution[2:], xshift=global_start,
    -                             color= all_colors[func_num % len(all_colors)],
    -                             label=f.split(".")[-1]
    -                             + " %.3fs" % (execution[1] - execution[0]), options=options)
    -            func_num += 1
    -
    -    if timestamps:
    -        pl.hlines(max_mem,
    -                  pl.xlim()[0] + 0.001, pl.xlim()[1] - 0.001,
    -                  colors="r", linestyles="--")
    -        pl.vlines(t[max_mem_ind], bottom, top,
    -                  colors="r", linestyles="--")
    -    return mprofile
    -
    -
    -def plot_action():
    -    def get_comma_separated_args(option, opt, value, parser):
    -        try:
    -            newvalue = [float(x) for x in value.split(',')]
    -        except:
    -            raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value)
    -        if len(newvalue) != 2:
    -            raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value)
    -        setattr(parser.values, option.dest, newvalue)
    -
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--title", "-t", dest="title", default=None,
    -                      type="str", action="store",
    -                      help="String shown as plot title")
    -    parser.add_option("--no-function-ts", "-n", dest="no_timestamps",
    -                      default=False, action="store_true",
    -                      help="Do not display function timestamps on plot.")
    -    parser.add_option("--output", "-o",
    -                      help="Save plot to file instead of displaying it.")
    -    parser.add_option("--window", "-w", dest="xlim",
    -                      type="str", action="callback",
    -                      callback=get_comma_separated_args,
    -                      help="Plot a time-subset of the data. E.g. to plot between 0 and 20.5 seconds: --window 0,20.5")
    -    (options, args) = parser.parse_args()
    -
    -    profiles = glob.glob("mprofile_??????????????.dat")
    -    profiles.sort()
    -
    -    if len(args) == 0:
    -        if len(profiles) == 0:
    -            print("No input file found. \nThis program looks for "
    -                  "mprofile_*.dat files, generated by the "
    -                  "'mprof run' command.")
    -            sys.exit(-1)
    -        print("Using last profile data.")
    -        filenames = [profiles[-1]]
    -    else:
    -        filenames = []
    -        for arg in args:
    -            if osp.exists(arg):
    -                if not arg in filenames:
    -                    filenames.append(arg)
    -            else:
    -                try:
    -                    n = int(arg)
    -                    if not profiles[n] in filenames:
    -                        filenames.append(profiles[n])
    -                except ValueError:
    -                    print("Input file not found: " + arg)
    -    if not len(filenames):
    -        print("No files found from given input.")
    -        sys.exit(-1)
    -
    -    fig = pl.figure(figsize=(14, 6), dpi=90)
    -    ax = fig.add_axes([0.1, 0.1, 0.6, 0.75])
    -    if options.xlim is not None:
    -        pl.xlim(options.xlim[0], options.xlim[1])
    -
    -    if len(filenames) > 1 or options.no_timestamps:
    -        timestamps = False
    -    else:
    -        timestamps = True
    -    for n, filename in enumerate(filenames):
    -        mprofile = plot_file(filename, index=n, timestamps=timestamps, options=options)
    -    pl.xlabel("time (in seconds)")
    -    pl.ylabel("memory used (in MiB)")
    -
    -    if options.title is None and len(filenames) == 1:
    -        pl.title(mprofile['cmd_line'])
    -    else:
    -        if options.title is not None:
    -            pl.title(options.title)
    -
    -    # place legend within the plot, make partially transparent in
    -    # case it obscures part of the lineplot
    -    leg = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
    -    leg.get_frame().set_alpha(0.5)
    -    pl.grid()
    -    if options.output:
    -        pl.savefig(options.output)
    -    else:
    -        pl.show()
    -
    -if __name__ == "__main__":
    -    # Workaround for optparse limitation: insert -- before first negative
    -    # number found.
    -    negint = re.compile("-[0-9]+")
    -    for n, arg in enumerate(sys.argv):
    -        if negint.match(arg):
    -            sys.argv.insert(n, "--")
    -            break
    -    actions = {"rm": rm_action,
    -               "clean": clean_action,
    -               "list": list_action,
    -               "run": run_action,
    -               "plot": plot_action}
    -    actions[get_action()]()
    diff --git a/profiling/test_projects/flaskbb_lite_1/pytest.ini b/profiling/test_projects/flaskbb_lite_1/pytest.ini
    deleted file mode 100644
    index 295bc34d..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/pytest.ini
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -[pytest]
    -norecursedirs = docs flaskbb logs migrations whoosh_index
    -addopts = --strict --random -vvl
    diff --git a/profiling/test_projects/flaskbb_lite_1/requirements.txt b/profiling/test_projects/flaskbb_lite_1/requirements.txt
    deleted file mode 100644
    index 1a4d91f7..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/requirements.txt
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -alembic==0.8.4
    -Babel==2.2.0
    -blinker==1.3
    -cov-core==1.15.0
    -coverage==4.0.3
    -Flask==0.10.1
    -flask-allows==0.1.0
    -Flask-BabelPlus==1.0.1
    -Flask-Cache==0.13.1
    -Flask-DebugToolbar==0.10.0
    -Flask-Login==0.3.2
    -Flask-Mail==0.9.1
    -Flask-Migrate==1.7.0
    -Flask-Plugins==1.6.1
    -Flask-Redis==0.1.0
    -Flask-Script==2.0.5
    -Flask-SQLAlchemy==2.1
    -Flask-Themes2==0.1.4
    -Flask-WTF==0.12
    -itsdangerous==0.24
    -Jinja2==2.8
    -Mako==1.0.3
    -MarkupSafe==0.23
    -mistune==0.7.1
    -Pygments==2.1
    -pytz==2015.7
    -redis==2.10.5
    -requests==2.9.1
    -simplejson==3.8.1
    -six==1.10.0
    -speaklater==1.3
    -SQLAlchemy==1.0.11
    -SQLAlchemy-Utils==0.31.6
    -Unidecode==0.04.19
    -Werkzeug==0.11.3
    -Whoosh==2.7.0
    -WTForms==2.1
    -https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-Whooshalchemy
    diff --git a/profiling/test_projects/flaskbb_lite_1/setup.py b/profiling/test_projects/flaskbb_lite_1/setup.py
    deleted file mode 100644
    index 265d0688..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/setup.py
    +++ /dev/null
    @@ -1,123 +0,0 @@
    -"""
    -FlaskBB
    -=======
    -
    -FlaskBB is a forum software written in Python using the microframework Flask.
    -
    -
    -And Easy to Setup
    ------------------
    -
    -.. code:: bash
    -    $ python manage.py createall
    -
    -    $ python manage.py runserver
    -     * Running on http://localhost:8080/
    -
    -
    -Resources
    ----------
    -
    -* `website `_
    -* `source `_
    -* `issues `_
    -
    -"""
    -from setuptools import setup
    -from setuptools.command.test import test as TestCommand
    -import sys
    -
    -
    -class PyTestCommand(TestCommand):
    -    user_options = [('pytest-args=', 'a', 'Arguments to pass to py.test')]
    -
    -    def initialize_options(self):
    -        TestCommand.initialize_options(self)
    -        self.pytest_args = []
    -
    -    def finalize_options(self):
    -        TestCommand.finalize_options(self)
    -        self.test_args = []
    -        self.test_suite = True
    -
    -    def run_tests(self):
    -        import pytest
    -        errno = pytest.main(self.pytest_args)
    -        sys.exit(errno)
    -
    -
    -setup(
    -    name='FlaskBB',
    -    version='1.0.dev0',
    -    url='http://github.com/sh4nks/flaskbb/',
    -    license='BSD',
    -    author='sh4nks',
    -    author_email='sh4nks7@gmail.com',
    -    description='A forum software written with flask',
    -    long_description=__doc__,
    -    packages=['flaskbb'],
    -    include_package_data=True,
    -    zip_safe=False,
    -    platforms='any',
    -    install_requires=[
    -        'Babel',
    -        'Flask',
    -        'Flask-Cache',
    -        'Flask-DebugToolbar',
    -        'Flask-Login',
    -        'Flask-Mail',
    -        'Flask-Migrate',
    -        'Flask-Plugins',
    -        'Flask-Redis',
    -        'Flask-SQLAlchemy',
    -        'Flask-Script',
    -        'Flask-Themes2',
    -        'Flask-WTF',
    -        'Flask-WhooshAlchemy',
    -        'Flask-BabelEx',
    -        'Jinja2',
    -        'Mako',
    -        'MarkupSafe',
    -        'Pygments',
    -        'SQLAlchemy',
    -        'Unidecode',
    -        'WTForms',
    -        'Werkzeug',
    -        'Whoosh',
    -        'alembic',
    -        'blinker',
    -        'cov-core',
    -        'coverage',
    -        'itsdangerous',
    -        'mistune',
    -        'pytz',
    -        'redis',
    -        'requests',
    -        'simplejson',
    -        'speaklater',
    -        'sqlalchemy-utils'
    -    ],
    -    test_suite='tests',
    -    tests_require=[
    -        'py',
    -        'pytest',
    -        'pytest-cov',
    -        'pytest-random'
    -    ],
    -    dependency_links=[
    -        'https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-WhooshAlchemy',
    -        'https://github.com/sh4nks/flask-babelex/tarball/master#egg=Flask-BabelEx'
    -    ],
    -    classifiers=[
    -        'Development Status :: 4 - Beta',
    -        'Environment :: Web Environment',
    -        'Intended Audience :: Developers, Users',
    -        'License :: OSI Approved :: BSD License',
    -        'Operating System :: OS Independent',
    -        'Programming Language :: Python',
    -        'Programming Language :: Python :: 3',
    -        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
    -        'Topic :: Software Development :: Libraries :: Python Modules'
    -    ],
    -    cmdclass={'test': PyTestCommand}
    -)
    diff --git a/profiling/test_projects/flaskbb_lite_1/test_requirements.txt b/profiling/test_projects/flaskbb_lite_1/test_requirements.txt
    deleted file mode 100644
    index 2390419f..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/test_requirements.txt
    +++ /dev/null
    @@ -1,5 +0,0 @@
    --r requirements.txt
    -py==1.4.31
    -pytest==2.8.7
    -pytest-cov==2.2.0
    -pytest-random==0.2
    diff --git a/profiling/test_projects/flaskbb_lite_1/tests/__init__.py b/profiling/test_projects/flaskbb_lite_1/tests/__init__.py
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_1/tests/conftest.py b/profiling/test_projects/flaskbb_lite_1/tests/conftest.py
    deleted file mode 100644
    index f5158fa1..00000000
    --- a/profiling/test_projects/flaskbb_lite_1/tests/conftest.py
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -from tests.fixtures.app import *
    -from tests.fixtures.forum import *
    -from tests.fixtures.user import *
    diff --git a/profiling/test_projects/flaskbb_lite_1/tests/endtoend/.test_auth_views.py.swp b/profiling/test_projects/flaskbb_lite_1/tests/endtoend/.test_auth_views.py.swp
    deleted file mode 100644
    index eb61b9d46f8973e6fe46bd4ee295734c3e6b603b..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 12288
    zcmeI2&2AGh5XT+F0SUtQ0d7M$bR)v16eK>R2yv;z0U;sL>*DM>i6Oh*+TOI~0D?XM
    z;^P%~0R$3)Gj9OgxbX}e5#x=Qv{k4|6$urMrGG51?eWZS$A?v>JHK@E7F-T5F>FT}
    zJ9%LL()Idc?J6*Kzc7|(+Rbd+;w0X7zM6dG4Yp&ISuMNm-jJII-EP|oV@+FRiBM0ps>C3SL*EI!i9Oa|7_z7oH%}WSEgta5g-CYfCvx)
    zB0vO)01+Spdy|08YwR()zR$Z4zOQZR{g65$Km>>Y5g-CYfCvx)B0vO)01+SpL|_jR
    z;0a@=4l?!@<^KN%AH%mJjJ-##qY9Ko8Po#m^I^t5qCTKF>K-aW9YcMuGxiDf8nupk
    zih6=Nhx&Plu`j51sF$c0sOP9f)M?ZY^x>=b#t3a;?)FG%SMfRrG6OA4&Z-q|038^~>OtB6#XeU?tGxN3`P=SL^<@?nczlqm
    zL}+f6E{EeKE7A^t=lM{^+)9;&u2479V!3d=tKt=_HfUaBiReK&SDg{Ltr6PXVz;%?
    zTnlg?FNQWU!djX24VuDF5Z`7Ro+)ynokKGZvb5|Xop!`Oi9^UcZHG!MTk!iV}DO;ASS9~TH<_{Sz
    z(_G<&A0N$nTBYDi;X{m9l<^txtERfNc~iBold

    \n" - - -def test_is_online(default_settings, user): - assert is_online(user) - - -def test_format_date(): - date = datetime.date(2015, 2, 15) - time = datetime.datetime.combine(date, datetime.datetime.min.time()) - assert format_date(time) == "2015-02-15" - - -def test_format_quote(topic): - expected_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n" - actual = format_quote(topic.first_post.username, topic.first_post.content) - assert actual == expected_markdown - - -def test_get_image_info(): - # some random jpg/gif/png images from my imgur account - jpg = "http://i.imgur.com/NgVIeRG.jpg" - gif = "http://i.imgur.com/l3Vmp4m.gif" - png = "http://i.imgur.com/JXzKxNs.png" - - jpg_img = get_image_info(jpg) - assert jpg_img["content-type"] == "image/jpeg" - assert jpg_img["height"] == 1024 - assert jpg_img["width"] == 1280 - assert jpg_img["size"] == 209.06 - - gif_img = get_image_info(gif) - assert gif_img["content-type"] == "image/gif" - assert gif_img["height"] == 168 - assert gif_img["width"] == 400 - assert gif_img["size"] == 576.138 - - png_img = get_image_info(png) - assert png_img["content-type"] == "image/png" - assert png_img["height"] == 1080 - assert png_img["width"] == 1920 - assert png_img["size"] == 269.409 - - -def test_check_image(default_settings): - # test200x100.png - img_width = "http://i.imgur.com/4dAWAZI.png" - # test100x200.png - img_height = "http://i.imgur.com/I7GwF3D.png" - # test100x100.png - img_ok = "http://i.imgur.com/CYV6NzT.png" - # random too big image - img_size = "http://i.imgur.com/l3Vmp4m.gif" - # random image wrong type - img_type = "https://d11xdyzr0div58.cloudfront.net/static/logos/archlinux-logo-black-scalable.f931920e6cdb.svg" - - data = check_image(img_width) - assert "wide" in data[0] - assert not data[1] - - data = check_image(img_height) - assert "high" in data[0] - assert not data[1] - - data = check_image(img_type) - assert "type" in data[0] - assert not data[1] - - data = check_image(img_ok) - assert data[0] is None - assert data[1] - - flaskbb_config["AVATAR_WIDTH"] = 1000 - flaskbb_config["AVATAR_HEIGHT"] = 1000 - data = check_image(img_size) - assert "big" in data[0] - assert not data[1] diff --git a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_markup.py b/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_markup.py deleted file mode 100644 index 19d8caf7..00000000 --- a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_markup.py +++ /dev/null @@ -1,28 +0,0 @@ -from flaskbb.utils.markup import collect_emojis, EMOJIS, markdown - - -def test_collect_emojis(): - assert collect_emojis() == EMOJIS - - -def test_custom_renderer(): - # custom paragraph - p_expected = "

    @sh4nks is :developing: flaskbb.

    \n" - p_plain = "@sh4nks is :developing: :flaskbb:." - assert markdown.render(p_plain) == p_expected - - # custom block code with pygments highlighting - b_expected = """\n
    print("Hello World")
    \n""" - b_expected_lang = """
    print("Hello World")\n
    \n""" - b_plain = """ -``` -print("Hello World") -``` -""" - b_plain_lang = """ -```python -print("Hello World") -``` -""" - assert markdown.render(b_plain) == b_expected - assert markdown.render(b_plain_lang) == b_expected_lang diff --git a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_populate.py b/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_populate.py deleted file mode 100644 index 71030664..00000000 --- a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_populate.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest -from flaskbb.utils.populate import * -from flaskbb.fixtures.groups import fixture as group_fixture -from flaskbb.fixtures.settings import fixture as settings_fixture -from flaskbb.user.models import Group -from flaskbb.forum.models import Category, Topic, Post - -# 184-199, 218-268, 278-307 -def test_delete_settings_from_fixture(default_settings): - groups_count = SettingsGroup.query.count() - assert len(settings_fixture) == groups_count - - deleted = delete_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(deleted) - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - -def test_create_settings_from_fixture(database): - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - created = create_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(created) - assert SettingsGroup.query.count() == len(created) - - -def test_update_settings_from_fixture(database): - # No force-overwrite - the fixtures will be created because - # do not exist. - assert not SettingsGroup.query.count() - assert not Setting.query.count() - updated = update_settings_from_fixture(settings_fixture) - assert len(updated) == SettingsGroup.query.count() - - # force-overwrite - the fixtures exist, but they will be overwritten now. - force_updated = update_settings_from_fixture(settings_fixture, - overwrite_group=True, - overwrite_setting=True) - assert len(force_updated) == SettingsGroup.query.count() - - -def test_create_admin_user(default_groups): - user = User.query.filter_by(username="admin").first() - assert not user - - user = create_admin_user(username="admin", password="test", - email="test@example.org") - assert user.username == "admin" - assert user.permissions["admin"] - - -def test_create_welcome_forum(default_groups): - assert not create_welcome_forum() - - create_admin_user(username="admin", password="test", - email="test@example.org") - assert create_welcome_forum() - - -def test_create_test_data(database): - assert Category.query.count() == 0 - data_created = create_test_data() - assert Category.query.count() == data_created['categories'] - - -def test_insert_mass_data(database): - assert not insert_mass_data(topics=1, posts=1) - - create_test_data(categories=1, forums=1, topics=0) - assert Topic.query.count() == 0 - - topics, posts = insert_mass_data(topics=1, posts=1) - assert Topic.query.count() == topics - # -1 bc the topic post also counts as post - assert Post.query.count() - 1 == posts - - -def test_create_default_groups(database): - """Test that the default groups are created correctly.""" - - assert Group.query.count() == 0 - - create_default_groups() - - assert Group.query.count() == len(group_fixture) - - for key, attributes in group_fixture.items(): - group = Group.query.filter_by(name=key).first() - - for attribute, value in attributes.items(): - assert getattr(group, attribute) == value diff --git a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_settings.py b/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_settings.py deleted file mode 100644 index 729a855b..00000000 --- a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_settings.py +++ /dev/null @@ -1,15 +0,0 @@ -from flaskbb.utils.settings import FlaskBBConfig - - -def test_flaskbb_config(default_settings): - flaskbb_config = FlaskBBConfig() - - assert len(flaskbb_config) > 0 - # test __getitem__ - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBB' - # test __setitem__ - flaskbb_config['PROJECT_TITLE'] = 'FlaskBBTest' - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBBTest' - # test __iter__ - test_dict = {} - assert type(flaskbb_config.__iter__()) == type(test_dict.__iter__()) diff --git a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_translations.py b/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_translations.py deleted file mode 100644 index 5877efc9..00000000 --- a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_translations.py +++ /dev/null @@ -1,48 +0,0 @@ -import subprocess -import os -from flask import current_app -from babel.support import Translations, NullTranslations -from flaskbb.utils.translations import FlaskBBDomain -from flaskbb.extensions import plugin_manager - - -def _remove_compiled_translations(): - translations_folder = os.path.join(current_app.root_path, "translations") - - # walks through the translations folder and deletes all files - # ending with .mo - for root, dirs, files in os.walk(translations_folder): - for name in files: - if name.endswith(".mo"): - os.unlink(os.path.join(root, name)) - - -def _compile_translations(): - PLUGINS_FOLDER = os.path.join(current_app.root_path, "plugins") - translations_folder = os.path.join(current_app.root_path, "translations") - - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - for plugin in plugin_manager.all_plugins: - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - -def test_flaskbbdomain_translations(default_settings): - domain = FlaskBBDomain(current_app) - - with current_app.test_request_context(): - assert domain.get_translations_cache() == {} - - # just to be on the safe side that there are really no compiled - # translations available - _remove_compiled_translations() - # no compiled translations are available - assert isinstance(domain.get_translations(), NullTranslations) - - # lets compile them and test again - _compile_translations() - - # now there should be translations :) - assert isinstance(domain.get_translations(), Translations) diff --git a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_widgets.py b/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_widgets.py deleted file mode 100644 index 93c6032d..00000000 --- a/profiling/test_projects/flaskbb_lite_1/tests/unit/utils/test_widgets.py +++ /dev/null @@ -1,37 +0,0 @@ -"""Tests for the utils/widgets.py file.""" -from flaskbb.utils.widgets import SelectBirthdayWidget - - -def test_select_birthday_widget(): - """Test the SelectDateWidget.""" - - assert SelectBirthdayWidget.FORMAT_CHOICES['%d'] == [ - (x, str(x)) for x in range(1, 32) - ] - assert SelectBirthdayWidget.FORMAT_CHOICES['%m'] == [ - (x, str(x)) for x in range(1, 13) - ] - - assert SelectBirthdayWidget.FORMAT_CLASSES == { - '%d': 'select_date_day', - '%m': 'select_date_month', - '%Y': 'select_date_year' - } - - select_birthday_widget = SelectBirthdayWidget(years=[0, 1]) - - assert select_birthday_widget.FORMAT_CHOICES['%Y'] == [(0, '0'), (1, '1')] - - class Field(object): - id = 'world' - name = 'helloWorld' - format = '%d %m %Y' - data = None - - html = select_birthday_widget(field=Field(), surrounded_div="test-div") - assert 'world' in html - assert 'helloWorld' in html - assert 'class="select_date_day"' in html - assert 'class="select_date_month"' in html - assert 'class="select_date_year"' in html - assert '
    ' in html diff --git a/profiling/test_projects/flaskbb_lite_1/wsgi.py b/profiling/test_projects/flaskbb_lite_1/wsgi.py deleted file mode 100644 index e7089893..00000000 --- a/profiling/test_projects/flaskbb_lite_1/wsgi.py +++ /dev/null @@ -1,4 +0,0 @@ -from flaskbb import create_app -from flaskbb.configs.production import ProductionConfig - -flaskbb = create_app(config=ProductionConfig()) diff --git a/profiling/test_projects/flaskbb_lite_2/.landscape.yml b/profiling/test_projects/flaskbb_lite_2/.landscape.yml deleted file mode 100644 index a96b2f63..00000000 --- a/profiling/test_projects/flaskbb_lite_2/.landscape.yml +++ /dev/null @@ -1,27 +0,0 @@ -doc-warnings: false -test-warnings: false -strictness: veryhigh -max-line-length: 80 -autodetect: yes -requirements: - - requirements.txt -ignore-paths: - - docs - - migrations - - wsgi.py - - setup.py - - flaskbb/configs - - flaskbb/_compat.py -pep8: - full: true - disable: - - E711 - - E712 - -pylint: - disable: - - too-few-public-methods - - too-many-public-methods - - too-many-locals - - invalid-name - - unused-argument diff --git a/profiling/test_projects/flaskbb_lite_2/.travis.yml b/profiling/test_projects/flaskbb_lite_2/.travis.yml deleted file mode 100644 index 15e65f9a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python -sudo: false -python: - - "2.7" - - "3.3" -# command to install dependencies -install: - - "pip install -r test_requirements.txt" - - "pip install coveralls" -# command to run tests -script: - - python manage.py compile_translations - - py.test --cov=flaskbb --cov-report=term-missing tests -after_success: - - coveralls diff --git a/profiling/test_projects/flaskbb_lite_2/.tx/config b/profiling/test_projects/flaskbb_lite_2/.tx/config deleted file mode 100644 index bd1d913f..00000000 --- a/profiling/test_projects/flaskbb_lite_2/.tx/config +++ /dev/null @@ -1,8 +0,0 @@ -[main] -host = https://www.transifex.com - -[flaskbb.messagespot] -file_filter = flaskbb/translations//LC_MESSAGES/messages.po -source_file = flaskbb/translations/messages.pot -source_lang = en -type = PO diff --git a/profiling/test_projects/flaskbb_lite_2/AUTHORS b/profiling/test_projects/flaskbb_lite_2/AUTHORS deleted file mode 100644 index 3333b4d9..00000000 --- a/profiling/test_projects/flaskbb_lite_2/AUTHORS +++ /dev/null @@ -1,14 +0,0 @@ -FlaskBB is written and maintained by the FlaskBB Team and various -contributors: - -# FlaskBB Team - -* sh4nks -* Looking for more people! - - -# Contributors - -* CasperVg -* Alec Reiter -* Feel free to join! :) diff --git a/profiling/test_projects/flaskbb_lite_2/CHANGES b/profiling/test_projects/flaskbb_lite_2/CHANGES deleted file mode 100644 index 30a3b111..00000000 --- a/profiling/test_projects/flaskbb_lite_2/CHANGES +++ /dev/null @@ -1,7 +0,0 @@ -# FlaskBB Changelog - -Here you can see the full list of changes between each release. - -## Version 0.1 - -* Not finished yet diff --git a/profiling/test_projects/flaskbb_lite_2/LICENSE b/profiling/test_projects/flaskbb_lite_2/LICENSE deleted file mode 100644 index 67d600cf..00000000 --- a/profiling/test_projects/flaskbb_lite_2/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2014 by the FlaskBB Team and contributors. See AUTHORS -for more details. - -Some rights reserved. - -Redistribution and use in source and binary forms of the software as well -as documentation, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. diff --git a/profiling/test_projects/flaskbb_lite_2/Makefile b/profiling/test_projects/flaskbb_lite_2/Makefile deleted file mode 100644 index 64389b4e..00000000 --- a/profiling/test_projects/flaskbb_lite_2/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -.PHONY: clean install help test run dependencies - -help: - @echo " clean remove unwanted stuff" - @echo " install install flaskbb and setup" - @echo " test run the testsuite" - @echo " run run the development server" - -dependencies:requirements.txt - pip install -r requirements.txt - -clean: - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -rf {} + - -test: - py.test --cov=flaskbb --cov-report=term-missing tests - -run: - python manage.py runserver -dr - -install:dependencies - clear - python manage.py install diff --git a/profiling/test_projects/flaskbb_lite_2/README.md b/profiling/test_projects/flaskbb_lite_2/README.md deleted file mode 100644 index 7bb09c59..00000000 --- a/profiling/test_projects/flaskbb_lite_2/README.md +++ /dev/null @@ -1,58 +0,0 @@ -[![Build Status](https://travis-ci.org/sh4nks/flaskbb.svg?branch=master)](https://travis-ci.org/sh4nks/flaskbb) -[![Coverage Status](https://coveralls.io/repos/sh4nks/flaskbb/badge.png)](https://coveralls.io/r/sh4nks/flaskbb) -[![Code Health](https://landscape.io/github/sh4nks/flaskbb/master/landscape.svg?style=flat)](https://landscape.io/github/sh4nks/flaskbb/master) -[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://flaskbb.org) - -# INTRODUCTION - -[FlaskBB](http://flaskbb.org) is a forum software written in python -using the micro framework Flask. - - -## FEATURES - -* A Bulletin Board like FluxBB or DjangoBB in Flask -* Private Messages -* Admin Interface -* Group based permissions -* BBCode Support -* Topic Tracker -* Unread Topics/Forums -* i18n Support -* Completely Themeable -* Plugin System - - -## TODO - -* See the github [issues](https://github.com/sh4nks/flaskbb/issues?state=open) - - -## INSTALLATION - -For a complete installation guide please visit the installation documentation -[here](https://flaskbb.readthedocs.org/en/latest/installation.html). - -* Create a virtualenv -* Configuration (_adjust them accordingly to your needs_) - * For development copy `flaskbb/configs/development.py.example` to `flaskbb/configs/development.py` -* Install dependencies and FlaskBB - * `make install` -* Run the development server - * `make runserver` -* Visit [localhost:8080](http://localhost:8080) - - -## DOCUMENTATION - -The documentation is located [here](http://flaskbb.readthedocs.org/en/latest/). - - -## LICENSE - -[BSD LICENSE](http://flask.pocoo.org/docs/license/#flask-license) - - -## ACKNOWLEDGEMENTS - -[/r/flask](http://reddit.com/r/flask), [Flask](http://flask.pocoo.org), it's [extensions](http://flask.pocoo.org/extensions/) and everyone who has helped me! diff --git a/profiling/test_projects/flaskbb_lite_2/babel.cfg b/profiling/test_projects/flaskbb_lite_2/babel.cfg deleted file mode 100644 index b1ba4bf5..00000000 --- a/profiling/test_projects/flaskbb_lite_2/babel.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[ignore: **/plugins/**] -[python: **.py] -[jinja2: **/templates/**.html] -extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/profiling/test_projects/flaskbb_lite_2/docs/.gitignore b/profiling/test_projects/flaskbb_lite_2/docs/.gitignore deleted file mode 100644 index e35d8850..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_build diff --git a/profiling/test_projects/flaskbb_lite_2/docs/Makefile b/profiling/test_projects/flaskbb_lite_2/docs/Makefile deleted file mode 100644 index bbae2f6a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/Makefile +++ /dev/null @@ -1,177 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FlaskBB.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FlaskBB.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/FlaskBB" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FlaskBB" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/profiling/test_projects/flaskbb_lite_2/docs/_static/logo-full.png b/profiling/test_projects/flaskbb_lite_2/docs/_static/logo-full.png deleted file mode 100644 index 5118e7235a27872a6df9c7acb813a51b72f112df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10951 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 diff --git a/profiling/test_projects/flaskbb_lite_2/docs/_templates/sidebarintro.html b/profiling/test_projects/flaskbb_lite_2/docs/_templates/sidebarintro.html deleted file mode 100644 index 73e7379a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/_templates/sidebarintro.html +++ /dev/null @@ -1,12 +0,0 @@ -

    About

    -

    - FlaskBB is forum software built with Flask. You can very easy create - new topics, posts and send other users private messages. It also includes - basic administration and moderation tools. -

    -

    Useful Links

    - diff --git a/profiling/test_projects/flaskbb_lite_2/docs/conf.py b/profiling/test_projects/flaskbb_lite_2/docs/conf.py deleted file mode 100644 index 47d45ea5..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/conf.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- coding: utf-8 -*- -# -# FlaskBB documentation build configuration file, created by -# sphinx-quickstart on Fri Feb 14 19:56:59 2014. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('..')) -sys.path.append(os.path.abspath('_themes')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc' -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'FlaskBB' -copyright = u'2014, sh4nks' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1-dev' -# The full version, including alpha/beta/rc tags. -release = '0.1-dev' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'flask' -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] -html_theme_options = { - 'index_logo': "../_static/logo-full.png", -} -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = { - 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], - '**': ['localtoc.html', 'relations.html', - 'sourcelink.html', 'searchbox.html'] -} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = False - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'FlaskBBdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'FlaskBB.tex', u'FlaskBB Documentation', - u'sh4nks', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'flaskbb', u'FlaskBB Documentation', - [u'sh4nks'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'FlaskBB', u'FlaskBB Documentation', - u'sh4nks', 'FlaskBB', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'http://docs.python.org/': None} - -autodoc_member_order = 'bysource' diff --git a/profiling/test_projects/flaskbb_lite_2/docs/contents.rst.inc b/profiling/test_projects/flaskbb_lite_2/docs/contents.rst.inc deleted file mode 100644 index 5c44c99e..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/contents.rst.inc +++ /dev/null @@ -1,14 +0,0 @@ -Contents --------- - -.. toctree:: - :maxdepth: 2 - - installation - plugins - plugin_tutorial/index - events - theming - settings - permissions - models diff --git a/profiling/test_projects/flaskbb_lite_2/docs/events.rst b/profiling/test_projects/flaskbb_lite_2/docs/events.rst deleted file mode 100644 index 4a44fd6b..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/events.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. _events: - -Events -====== - -In order to extend FlaskBB you will need to connect your callbacks with -events. - -.. admonition:: Additional events - - If you miss an event, feel free to open a new issue or create a pull - request. The pull request should always contain a entry in this document - with a small example. - - A event can be created by placing a :func:`~flask.ext.plugins.emit_event` - function at specific places in the code which then can modify the behavior - of FlaskBB. The same thing applies for template events. - - Python Event: - - .. sourcecode:: python - - def foobar(data) - somedata = "foobar" - emit_event("your-newly-contributed-event", somedata) - - - Template Event: - - .. sourcecode:: html+jinja - - {{ emit_event("your-newly-contributed-template-event") }} - - -Available Events ----------------- - - -Python Events -~~~~~~~~~~~~~ - -None at the moment. :( - - -Template Events -~~~~~~~~~~~~~~~ - -.. data:: before-first-navigation-element - - This event inserts a navigation link **before** the **first** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("before-first-navigation-element", inject_navigation_element) - - -.. data:: after-last-navigation-element - - This event inserts a navigation link **after** the **last** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("after-last-navigation-element", inject_navigation_element) - - diff --git a/profiling/test_projects/flaskbb_lite_2/docs/index.rst b/profiling/test_projects/flaskbb_lite_2/docs/index.rst deleted file mode 100644 index cd82f675..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:orphan: - -Welcome to FlaskBB -================== - -FlaskBB is a lightweight forum software in Flask. - - -Links ------ - -`documentation `_ -| `source `_ - - -.. include:: contents.rst.inc diff --git a/profiling/test_projects/flaskbb_lite_2/docs/installation.rst b/profiling/test_projects/flaskbb_lite_2/docs/installation.rst deleted file mode 100644 index b499c9c0..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/installation.rst +++ /dev/null @@ -1,329 +0,0 @@ -Installation -============ - -- `Basic Setup <#basic-setup>`_ -- `Configuration <#configuration>`_ -- `Deplyoing <#deploying>`_ - - - -Basic Setup ------------ - -Virtualenv Setup -~~~~~~~~~~~~~~~~ - -Before you can start, you need to create a `virtualenv`. -You can install the virtualenvwrapper with your package manager or via pip. -Be sure that pip is installed. If you don't know how to install pip, have a -look at their `documentation `_. - -For example, on archlinux you can install it with -:: - - $ sudo pacman -S python2-virtualenvwrapper - -or, if you own a Mac, you can simply install it with -:: - - $ sudo pip install virtualenvwrapper - -For more information checkout the `virtualenvwrapper `_ installation. - -After that you can create your virtualenv with -:: - - $ mkvirtualenv -a /path/to/flaskbb -p $(which python2) flaskbb - -and you should be switched automatically to your newly created virtualenv. -To deactivate it you just have to type ``deactivate`` and if you want to work -on it again, you need to type ``workon flaskbb``. - - -Required Dependencies -~~~~~~~~~~~~~~~~~~~~~ - -Now you can install the required dependencies. -:: - - $ pip install -r requirements.txt - -Alternatively, you can use the `make` command to install the dependencies. -:: - - $ make dependencies - - -Optional Dependencies -~~~~~~~~~~~~~~~~~~~~~~ - -We have one optional dependency, redis (the python package is installed automatically). -If you want to use it, be sure that a redis-server is running. If you decide -to use redis, the `online guests` and `online users` are being tracked by redis, -else it will only track the `online users` via a simple SQL query. - -**On Archlinux** -:: - - # Install redis - $ sudo pacman -S redis - - # Check if redis is already running. - $ systemctl status redis - - # If not, start it. - $ sudo systemctl start redis - - # Optional: Start redis everytime you boot your machine - $ sudo systemctl enable redis - -**On Debian 7.0 (Wheezy)** -:: - - # Install redis - $ sudo apt-get install redis-server - - # Check if redis is already running. - $ service redis-server status - - # If not, start it - $ sudo service redis-server start - - # Optional: Start redis everytime you boot your machine - # I can't remember if this is done automatically.. - $ sudo update-rc.d redis-server defaults - - -Configuration -------------- - -Before you can start, you need to configure `FlaskBB`. - - -Development -~~~~~~~~~~~ - -For development, you need to copy ``flaskbb/configs/development.py.example`` to -``flaskbb/configs/development.py``. -:: - - cp flaskbb/configs/development.py.example flaskbb/configs/development.py - -The reCAPTCHA keys should work fine on localhost. - - -Production -~~~~~~~~~~ - -If you plan, to use `FlaskBB` in a production environment (not recommended at -the moment, because it's still in development), you need to copy -``flaskbb/configs/production.py.example`` to ``flaskbb/configs/production.py``. -:: - - cp flaskbb/configs/production.py.example flaskbb/configs/production.py - -Now open ``flaskbb/configs/production.py`` with your favourite editor and adjust -the config variables to your needs. - - -Mail Examples -~~~~~~~~~~~~~ - -Both methods are included in the example configs. - -**Google Mail** -:: - - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - -**Local SMTP Server** -:: - - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USERNAME = "" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = "noreply@example.org" - - -Installation ------------- - -For a guided install, run -:: - - $ make install - -or: - - python manage.py install - -During the installation process you are asked about your username, -your email address and the password for your administrator user. Using the -`make install` command is recommended as it checks that the dependencies are also -installed. - - -Upgrading ---------- - -If the database models changed after a release, you have to run the ``upgrade`` -command -:: - - python manage.py db upgrade - - -Deploying ---------- - -I prefer to use supervisor, uWSGI and nginx to deploy my apps, but if you have -figured out how to deploy it in another way, please let me know, so I -(or you if you create a pull request) can add it to the documentation. - -**NOTE:** I have only used Debian to deploy it, if someone is using a other -distribution, could you let me know if that works too? `Also, if you have better -configurations for uWSGI, supervisor or nginx let me know that too.` - - -Supervisor -~~~~~~~~~~ - -`Supervisor is a client/server system that allows its users to monitor and -control a number of processes on UNIX-like operating systems.` - -To install `supervisor` on Debian, you need to fire up this command: -:: - - $ sudo apt-get install supervisor - -There are two ways to configure supervisor. The first one is, you just put -the configuration to the end in the ``/etc/supervisor/supervisord.conf`` file. - -The second way would be to create a new file in the ``/etc/supervisor/conf.d/`` -directory. For example, such a file could be named ``uwsgi.conf``. - -After you have choosen the you way you like, simply put the snippet below in the -configuration file. - -:: - - [program:uwsgi] - command=/usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled - user=apps - stopsignal=QUIT - autostart=true - autorestart=true - redirect_stderr=true - - -uWSGI -~~~~~ - -`uWSGI is a web application solution with batteries included.` - -To get started with uWSGI, you need to install it first. -You'll also need the python plugin to serve python apps. -This can be done with: - -:: - - $ sudo apt-get install uwsgi uwsgi-plugin-python - -For the configuration, you need to create a file in the -``/etc/uwsgi/apps-available`` directory. In this example, I will call the -file ``flaskbb.ini``. After that, you can start with configuring it. -My config looks like this for `flaskbb.org` (see below). As you might have noticed, I'm -using a own user for my apps whose home directory is located at `/var/apps/`. -In this directory there are living all my Flask apps. - -:: - - [uwsgi] - base = /var/apps/flaskbb - home = /var/apps/.virtualenvs/flaskbb/ - pythonpath = %(base) - socket = 127.0.0.1:30002 - module = wsgi - callable = flaskbb - uid = apps - gid = apps - logto = /var/apps/flaskbb/logs/uwsgi.log - plugins = python - - -=============== ========================== =============== -**base** /path/to/flaskbb The folder where your flaskbb application lives -**home** /path/to/virtualenv/folder The virtualenv folder for your flaskbb application -**pythonpath** /path/to/flaskbb The same as base -**socket** socket This can be either a ip or the path to a socket (don't forget to change that in your nginx config) -**module** wsgi.py This is the file located in the root directory from flaskbb (where manage.py lives). -**callable** flaskbb The callable is application you have created in the ``wsgi.py`` file -**uid** your_user The user who should be used. **NEVER** use root! -**gid** your_group The group who should be used. -**logto** /path/to/log/file The path to your uwsgi logfile -**plugins** python We need the python plugin -=============== ========================== =============== - -Don't forget to create a symlink to ``/etc/uwsgi/apps-enabled``. - -:: - - ln -s /etc/uwsgi/apps-available/flaskbb /etc/uwsgi/apps-enabled/flaskbb - - -nginx -~~~~~ - -`nginx [engine x] is an HTTP and reverse proxy server, -as well as a mail proxy server, written by Igor Sysoev.` - -The nginx config is pretty straightforward. Again, this is how I use it for -`FlaskBB`. Just copy the snippet below and paste it to, for example -``/etc/nginx/sites-available/flaskbb``. -The only thing left is, that you need to adjust the ``server_name`` to your -domain and the paths in ``access_log``, ``error_log``. Also, don't forget to -adjust the paths in the ``alias`` es, as well as the socket adress in ``uwsgi_pass``. - -:: - - server { - listen 80; - server_name forums.flaskbb.org; - - access_log /var/log/nginx/access.forums.flaskbb.log; - error_log /var/log/nginx/error.forums.flaskbb.log; - - location / { - try_files $uri @flaskbb; - } - - # Static files - location /static { - alias /var/apps/flaskbb/flaskbb/static/; - } - - location ~ ^/_themes/([^/]+)/(.*)$ { - alias /var/apps/flaskbb/flaskbb/themes/$1/static/$2; - } - - # robots.txt - location /robots.txt { - alias /var/apps/flaskbb/flaskbb/static/robots.txt; - } - - location @flaskbb { - uwsgi_pass 127.0.0.1:30002; - include uwsgi_params; - } - } - - -Like in the `uWSGI <#uwsgi>`_ chapter, don't forget to create a symlink to -``/etc/nginx/sites-enabled/``. diff --git a/profiling/test_projects/flaskbb_lite_2/docs/make.bat b/profiling/test_projects/flaskbb_lite_2/docs/make.bat deleted file mode 100644 index 5f1369be..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/make.bat +++ /dev/null @@ -1,242 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\FlaskBB.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\FlaskBB.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/profiling/test_projects/flaskbb_lite_2/docs/models.rst b/profiling/test_projects/flaskbb_lite_2/docs/models.rst deleted file mode 100644 index 503a981f..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/models.rst +++ /dev/null @@ -1,79 +0,0 @@ -.. _models: - -Available Models -================ - -FlaskBB uses SQLAlchemy as it's ORM. The models are split in three modules -which are covered below. - - -Forum Models ------------- - -.. module:: flaskbb.forum.models - -This module contains all related models for the forums. - -The hierarchy looks like this: Category > Forum > Topic > Post. In the Report -model are stored the reports and the TopicsRead and ForumsRead models are -used to store the status if the user has read a specific forum or not. - - -.. autoclass:: Category - :members: - - -.. autoclass:: Forum - :members: - - -.. autoclass:: Topic - :members: - - -.. autoclass:: Post - :members: - - -.. autoclass:: TopicsRead - :members: - - -.. autoclass:: ForumsRead - :members: - - -.. autoclass:: Report - :members: - - - -User Models ------------ - -.. module:: flaskbb.user.models - -The user modules contains all related models for the users. - -.. autoclass:: User - :members: - -.. autoclass:: Group - :members: - -.. autoclass:: PrivateMessage - :members: - - -Management Models ------------------ - -.. module:: flaskbb.management.models - -The management module contains all related models for the management of FlaskBB. - -.. autoclass:: SettingsGroup - :members: - -.. autoclass:: Setting - :members: diff --git a/profiling/test_projects/flaskbb_lite_2/docs/permissions.rst b/profiling/test_projects/flaskbb_lite_2/docs/permissions.rst deleted file mode 100644 index bdfeb509..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/permissions.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _permissions: - -Permission (WIP) -================ - -a moderator is allowed to do the following things: - - enter the management panel - process reports - edit user (if he has the permission) - ban users (if he has the permission) diff --git a/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/index.rst b/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/index.rst deleted file mode 100644 index cb352e84..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _tutorial: - -Plugin Tutorial (WIP) -===================== - - -This tutorial is based on the plugin which is shipped by default with FlaskBB. -If you want the full sourcecode in advance or for comparison, check out -the `portal plugin`_. - -.. _portal plugin: - https://github.com/sh4nks/flaskbb/tree/master/flaskbb/plugins/portal - -.. toctree:: - :maxdepth: 2 - - structure diff --git a/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/structure.rst b/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/structure.rst deleted file mode 100644 index a788d00d..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/plugin_tutorial/structure.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _structure: - -Step 1: Structure -================= diff --git a/profiling/test_projects/flaskbb_lite_2/docs/plugins.rst b/profiling/test_projects/flaskbb_lite_2/docs/plugins.rst deleted file mode 100644 index 1a134ad3..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/plugins.rst +++ /dev/null @@ -1,179 +0,0 @@ -.. _plugins: - -Plugins -======= - -.. module:: flaskbb.plugins - -FlaskBB provides an easy way to extend the functionality of your forum -via so called `Plugins`. Plugins do not modify the `core` of FlaskBB, so -you can easily activate and deactivate them anytime. This part of the -documentation only covers the basic things for creating plugins. If you are -looking for a tutorial you need to go to this section of the documentation: -:doc:`plugin_tutorial/index`. - - -Structure ---------- - -A plugin has it's own folder where all the plugin specific files are living. -For example, the structure of a plugin could look like this - -.. sourcecode:: text - - my_plugin - |-- info.json Contains the Plugin's metadata - |-- license.txt The full license text of your plugin - |-- __init__.py The plugin's main class is located here - |-- views.py - |-- models.py - |-- forms.py - |-- static - | |-- style.css - |-- templates - |-- myplugin.html - - -Management ----------- - -Deactivating -~~~~~~~~~~~~ - -The only way to disable a plugin without removing it is, to add a ``DISABLED`` -file in the plugin's root folder. You need to reload your application in order -to have the plugin fully disabled. A disabled plugin could look like this:: - - my_plugin - |-- DISABLED # Just add a empty file named "DISABLED" to disable a plugin - |-- info.json - |-- __init__.py - -.. important:: Restart the server. - - You must restart the wsgi/in-built server in order to make the changes - effect your forum. - - -Activating -~~~~~~~~~~ - -Simply remove the ``DISABLED`` file in the plugin directory and restart the -server. - - -Example Plugin --------------- - -A really simple Plugin could look like this: - -.. sourcecode:: python - - from flask import flash - from flask.ext.plugins import connect_event - - from flaskbb.plugins import FlaskBBPlugin - - - # This is the name of your Plugin class which implements FlaskBBPlugin. - # The exact name is needed in order to be recognized as a plugin. - __plugin__ "HelloWorldPlugin" - - - def flash_index(): - """Flashes a message when visiting the index page.""" - - flash("This is just a demonstration plugin", "success") - - - class HelloWorldPlugin(FlaskBBPlugin): - def setup(self): - connect_event(before-forum-index-rendered, flash_index) - - def install(self): - # there is nothing to install - pass - - def uninstall(self): - # and nothing to uninstall - pass - - -Your plugins also needs a ``info.json`` file, where it stores some meta data -about the plugin. For more information see the `Metadata <#metadata>`_ -section below. - - -Metadata -~~~~~~~~ - -In order to get a working plugin, following metadata should be defined -in a ``info.json`` file. - -``identifier`` : **required** - The plugin's identifier. It should be a Python identifier (starts with a - letter or underscore, the rest can be letters, underscores, or numbers) - and should match the name of the plugin's folder. - -``name`` : **required** - A human-readable name for the plugin. - -``author`` : **required** - The name of the plugin's author, that is, you. It does not have to include - an e-mail address, and should be displayed verbatim. - -``description`` - A description of the plugin in a few sentences. If you can write multiple - languages, you can include additional fields in the form - ``description_lc``, where ``lc`` is a two-letter language code like ``es`` - or ``de``. They should contain the description, but in the indicated - language. - -``website`` - The URL of the plugin's Web site. This can be a Web site specifically for - this plugin, Web site for a collection of plugins that includes this plugin, - or just the author's Web site. - -``license`` - A simple phrase indicating your plugin's license, like ``GPL``, - ``MIT/X11``, ``Public Domain``, or ``Creative Commons BY-SA 3.0``. You - can put the full license's text in the ``license.txt`` file. - -``version`` - This is simply to make it easier to distinguish between what version - of your plugin people are using. It's up to the theme/layout to decide - whether or not to show this, though. - - -Events ------- - -A full list with events can be found here :doc:`events`. - - -Plugin Class ------------- - -.. autoclass:: FlaskBBPlugin - - .. autoattribute:: settings_key - - .. autoattribute:: installable - - .. autoattribute:: uninstallable - - .. automethod:: setup - - .. automethod:: install - - .. automethod:: uninstall - - .. automethod:: register_blueprint - - .. automethod:: create_table - - .. automethod:: drop_table - - .. automethod:: create_all_tables - - .. automethod:: drop_all_tables diff --git a/profiling/test_projects/flaskbb_lite_2/docs/settings.rst b/profiling/test_projects/flaskbb_lite_2/docs/settings.rst deleted file mode 100644 index 76fd4dcb..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/settings.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _settings: - -Settings -======== - -This part covers which setting fields are available. -This is especially useful if you plan on develop a plugin a want to contribute -to FlaskBB. - - - -The available fields are shown below. - -.. note:: - For a full list of available methods, visit - `Settings Model `__. - - -.. module:: flaskbb.management.models - - -.. autoclass:: Setting - - .. attribute:: key - - **TODO** - - .. attribute:: value - - **TODO** - - .. attribute:: settingsgroup - - **TODO** - - .. attribute:: name - - **TODO** - - .. attribute:: description - - **TODO** - - .. attribute:: value_type - - **TODO** - string - integer - float - boolean - select # 1 value - selectmultiple # multiple values - - .. attribute:: extra - - **TODO** - min - max - choices with or without coerce diff --git a/profiling/test_projects/flaskbb_lite_2/docs/theming.rst b/profiling/test_projects/flaskbb_lite_2/docs/theming.rst deleted file mode 100644 index 55863d07..00000000 --- a/profiling/test_projects/flaskbb_lite_2/docs/theming.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _theming: - -Theming (WIP) -============= diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/__init__.py deleted file mode 100644 index 7d7d50d8..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb - ~~~~~~~~~~~~~~~~~~~~ - - FlaskBB is a forum software written in python using the - microframework Flask. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -__version__ = '1.0.dev0' - -from flaskbb.app import create_app diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/_compat.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/_compat.py deleted file mode 100644 index 5bc10e04..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/_compat.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Look here for more information: -https://github.com/mitsuhiko/flask/blob/master/flask/_compat.py -""" - -import sys - -PY2 = sys.version_info[0] == 2 - -if not PY2: # pragma: no cover - text_type = str - string_types = (str,) - integer_types = (int, ) - intern_method = sys.intern - range_method = range - iterkeys = lambda d: iter(d.keys()) - itervalues = lambda d: iter(d.values()) - iteritems = lambda d: iter(d.items()) - max_integer = sys.maxsize -else: # pragma: no cover - text_type = unicode - string_types = (str, unicode) - integer_types = (int, long) - intern_method = intern - range_method = xrange - iterkeys = lambda d: d.iterkeys() - itervalues = lambda d: d.itervalues() - iteritems = lambda d: d.iteritems() - max_integer = sys.maxint diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/app.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/app.py deleted file mode 100644 index faa4bfea..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/app.py +++ /dev/null @@ -1,315 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.app - ~~~~~~~~~~~~~~~~~~~~ - - manages the app creation and configuration process - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import logging -import datetime -import time -from functools import partial - -from sqlalchemy import event -from sqlalchemy.engine import Engine - -from flask import Flask, request -from flask_login import current_user -from flask_whooshalchemy import whoosh_index - -# Import the user blueprint -from flaskbb.user.views import user -from flaskbb.user.models import User, Guest -# Import the (private) message blueprint -from flaskbb.message.views import message -# Import the auth blueprint -from flaskbb.auth.views import auth -# Import the admin blueprint -from flaskbb.management.views import management -# Import the forum blueprint -from flaskbb.forum.views import forum -from flaskbb.forum.models import Post, Topic, Category, Forum -# extensions -from flaskbb.extensions import db, login_manager, mail, cache, redis_store, \ - debugtoolbar, migrate, themes, plugin_manager, babel, csrf, allows -# various helpers -from flaskbb.utils.helpers import format_date, time_since, crop_title, \ - is_online, render_markup, mark_online, forum_is_unread, topic_is_unread, \ - render_template -from flaskbb.utils.translations import FlaskBBDomain -# permission checks (here they are used for the jinja filters) -from flaskbb.utils.requirements import ( - IsAdmin, IsAtleastModerator, TplCanModerate, - CanBanUser, CanEditUser, TplCanDeletePost, TplCanDeleteTopic, - TplCanEditPost, TplCanPostTopic, TplCanPostReply -) -# app specific configurations -from flaskbb.utils.settings import flaskbb_config - - -def create_app(config=None): - """Creates the app.""" - - # Initialize the app - app = Flask("flaskbb") - - # Use the default config and override it afterwards - app.config.from_object('flaskbb.configs.default.DefaultConfig') - # Update the config - app.config.from_object(config) - # try to update the config via the environment variable - app.config.from_envvar("FLASKBB_SETTINGS", silent=True) - - configure_blueprints(app) - configure_extensions(app) - configure_template_filters(app) - configure_context_processors(app) - configure_before_handlers(app) - configure_errorhandlers(app) - configure_logging(app) - - return app - - -def configure_blueprints(app): - app.register_blueprint(forum, url_prefix=app.config["FORUM_URL_PREFIX"]) - app.register_blueprint(user, url_prefix=app.config["USER_URL_PREFIX"]) - app.register_blueprint(auth, url_prefix=app.config["AUTH_URL_PREFIX"]) - app.register_blueprint( - management, url_prefix=app.config["ADMIN_URL_PREFIX"] - ) - app.register_blueprint( - message, url_prefix=app.config["MESSAGE_URL_PREFIX"] - ) - - -def configure_extensions(app): - """Configures the extensions.""" - - # Flask-WTF CSRF - csrf.init_app(app) - - # Flask-Plugins - plugin_manager.init_app(app) - - # Flask-SQLAlchemy - db.init_app(app) - - # Flask-Migrate - migrate.init_app(app, db) - - # Flask-Mail - mail.init_app(app) - - # Flask-Cache - cache.init_app(app) - - # Flask-Debugtoolbar - debugtoolbar.init_app(app) - - # Flask-Themes - themes.init_themes(app, app_identifier="flaskbb") - - # Flask-And-Redis - redis_store.init_app(app) - - # Flask-WhooshAlchemy - with app.app_context(): - whoosh_index(app, Post) - whoosh_index(app, Topic) - whoosh_index(app, Forum) - whoosh_index(app, Category) - whoosh_index(app, User) - - # Flask-Login - login_manager.login_view = app.config["LOGIN_VIEW"] - login_manager.refresh_view = app.config["REAUTH_VIEW"] - login_manager.login_message_category = app.config["LOGIN_MESSAGE_CATEGORY"] - login_manager.needs_refresh_message_category = \ - app.config["REFRESH_MESSAGE_CATEGORY"] - login_manager.anonymous_user = Guest - - @login_manager.user_loader - def load_user(user_id): - """Loads the user. Required by the `login` extension.""" - - user_instance = User.query.filter_by(id=user_id).first() - if user_instance: - return user_instance - else: - return None - - login_manager.init_app(app) - - # Flask-BabelEx - babel.init_app(app=app, default_domain=FlaskBBDomain(app)) - - @babel.localeselector - def get_locale(): - # if a user is logged in, use the locale from the user settings - if current_user.is_authenticated and current_user.language: - return current_user.language - # otherwise we will just fallback to the default language - return flaskbb_config["DEFAULT_LANGUAGE"] - - # Flask-Allows - allows.init_app(app) - allows.identity_loader(lambda: current_user) - - -def configure_template_filters(app): - """Configures the template filters.""" - filters = {} - - filters['markup'] = render_markup - filters['format_date'] = format_date - filters['time_since'] = time_since - filters['is_online'] = is_online - filters['crop_title'] = crop_title - filters['forum_is_unread'] = forum_is_unread - filters['topic_is_unread'] = topic_is_unread - - permissions = [ - ('is_admin', IsAdmin), - ('is_moderator', IsAtleastModerator), - ('is_admin_or_moderator', IsAtleastModerator), - ('can_edit_user', CanEditUser), - ('can_ban_user', CanBanUser), - ] - - filters.update([ - (name, partial(perm, request=request)) for name, perm in permissions - ]) - - # these create closures - filters['can_moderate'] = TplCanModerate(request) - filters['post_reply'] = TplCanPostReply(request) - filters['edit_post'] = TplCanEditPost(request) - filters['delete_post'] = TplCanDeletePost(request) - filters['post_topic'] = TplCanPostTopic(request) - filters['delete_topic'] = TplCanDeleteTopic(request) - - app.jinja_env.filters.update(filters) - - -def configure_context_processors(app): - """Configures the context processors.""" - - @app.context_processor - def inject_flaskbb_config(): - """Injects the ``flaskbb_config`` config variable into the - templates. - """ - - return dict(flaskbb_config=flaskbb_config) - - -def configure_before_handlers(app): - """Configures the before request handlers.""" - - @app.before_request - def update_lastseen(): - """Updates `lastseen` before every reguest if the user is - authenticated.""" - - if current_user.is_authenticated: - current_user.lastseen = datetime.datetime.utcnow() - db.session.add(current_user) - db.session.commit() - - if app.config["REDIS_ENABLED"]: - @app.before_request - def mark_current_user_online(): - if current_user.is_authenticated: - mark_online(current_user.username) - else: - mark_online(request.remote_addr, guest=True) - - -def configure_errorhandlers(app): - """Configures the error handlers.""" - - @app.errorhandler(403) - def forbidden_page(error): - return render_template("errors/forbidden_page.html"), 403 - - @app.errorhandler(404) - def page_not_found(error): - return render_template("errors/page_not_found.html"), 404 - - @app.errorhandler(500) - def server_error_page(error): - return render_template("errors/server_error.html"), 500 - -def XSS1(): - param = request.args.get('param', 'not set') - - html = open('templates/XSS_param.html').read() - resp = make_response(html.replace('{{ param }}', param)) - return resp - -a = XSS1() -def configure_logging(app): - """Configures logging.""" - - a = XSS1() - logs_folder = os.path.join(app.root_path, os.pardir, "logs") - from logging.handlers import SMTPHandler - formatter = logging.Formatter( - '%(asctime)s %(levelname)s: %(message)s ' - '[in %(pathname)s:%(lineno)d]') - - info_log = os.path.join(logs_folder, app.config['INFO_LOG']) - - info_file_handler = logging.handlers.RotatingFileHandler( - info_log, - maxBytes=100000, - backupCount=10 - ) - - info_file_handler.setLevel(logging.INFO) - info_file_handler.setFormatter(formatter) - app.logger.addHandler(info_file_handler) - - error_log = os.path.join(logs_folder, app.config['ERROR_LOG']) - - error_file_handler = logging.handlers.RotatingFileHandler( - error_log, - maxBytes=100000, - backupCount=10 - ) - - error_file_handler.setLevel(logging.ERROR) - error_file_handler.setFormatter(formatter) - app.logger.addHandler(error_file_handler) - - if app.config["SEND_LOGS"]: - mail_handler = \ - SMTPHandler( - app.config['MAIL_SERVER'], - app.config['MAIL_DEFAULT_SENDER'], - app.config['ADMINS'], - 'application error, no admins specified', - (app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD']) - ) - - mail_handler.setLevel(logging.ERROR) - mail_handler.setFormatter(formatter) - app.logger.addHandler(mail_handler) - - if app.config["SQLALCHEMY_ECHO"]: - # Ref: http://stackoverflow.com/a/8428546 - @event.listens_for(Engine, "before_cursor_execute") - def before_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - conn.info.setdefault('query_start_time', []).append(time.time()) - - @event.listens_for(Engine, "after_cursor_execute") - def after_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - total = time.time() - conn.info['query_start_time'].pop(-1) - app.logger.debug("Total Time: %f", total) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/crazy.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/crazy.py deleted file mode 100644 index be692035..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/crazy.py +++ /dev/null @@ -1,8 +0,0 @@ -class Test(): - def __init__(self, a): - self.a = a - def foo(self): - pass - -t = Test() -t.foo() diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/forms.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/forms.py deleted file mode 100644 index ce29f010..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/forms.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.forms - ~~~~~~~~~~~~~~~~~~~~ - - It provides the forms that are needed for the auth views. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from datetime import datetime - -from flask_wtf import Form, RecaptchaField -from wtforms import (StringField, PasswordField, BooleanField, HiddenField, - SubmitField, SelectField) -from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo, - regexp, ValidationError) -from flask_babelplus import lazy_gettext as _ -from flaskbb.user.models import User - -USERNAME_RE = r'^[\w.+-]+$' -is_username = regexp(USERNAME_RE, - message=_("You can only use letters, numbers or dashes.")) - - -class LoginForm(Form): - login = StringField(_("Username or E-Mail Address"), validators=[ - DataRequired(message=_("A Username or E-Mail Address is required."))] - ) - - password = PasswordField(_("Password"), validators=[ - DataRequired(message=_("A Password is required."))]) - - remember_me = BooleanField(_("Remember Me"), default=False) - - submit = SubmitField(_("Login")) - - -class RegisterForm(Form): - username = StringField(_("Username"), validators=[ - DataRequired(message=_("A Username is required.")), - is_username]) - - email = StringField(_("E-Mail Address"), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email(message=_("Invalid E-Mail Address."))]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - - language = SelectField(_('Language')) - - accept_tos = BooleanField(_("I accept the Terms of Service"), default=True) - - submit = SubmitField(_("Register")) - - def validate_username(self, field): - user = User.query.filter_by(username=field.data).first() - if user: - raise ValidationError(_("This Username is already taken.")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if email: - raise ValidationError(_("This E-Mail Address is already taken.")) - - def save(self): - user = User(username=self.username.data, - email=self.email.data, - password=self.password.data, - date_joined=datetime.utcnow(), - primary_group_id=4, - language=self.language.data) - return user.save() - - -class RegisterRecaptchaForm(RegisterForm): - recaptcha = RecaptchaField(_("Captcha")) - - -class ReauthForm(Form): - password = PasswordField(_('Password'), validators=[ - DataRequired(message=_("A Password is required."))]) - - submit = SubmitField(_("Refresh Login")) - - -class ForgotPasswordForm(Form): - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is reguired.")), - Email()]) - - submit = SubmitField(_("Request Password")) - - -class ResetPasswordForm(Form): - token = HiddenField('Token') - - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email()]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - submit = SubmitField(_("Reset Password")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if not email: - raise ValidationError(_("Wrong E-Mail Address.")) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/hest/empty.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/hest/empty.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/views.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/views.py deleted file mode 100644 index c4d00896..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/auth/views.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.views - ~~~~~~~~~~~~~~~~~~~~ - - This view provides user authentication, registration and a view for - resetting the password of a user if he has lost his password - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import Blueprint, flash, redirect, url_for, request, current_app -from flask_login import (current_user, login_user, login_required, - logout_user, confirm_login, login_fresh) -from flask_babelplus import gettext as _ - -from flaskbb.utils.helpers import render_template -from flaskbb.email import send_reset_token -from flaskbb.auth.forms import (LoginForm, ReauthForm, ForgotPasswordForm, - ResetPasswordForm) -from flaskbb.user.models import User -from flaskbb.fixtures.settings import available_languages -from flaskbb.utils.settings import flaskbb_config - -auth = Blueprint("auth", __name__) - - -@auth.route("/login", methods=["GET", "POST"]) -def login(): - """ - Logs the user in - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile")) - - form = LoginForm(request.form) - if form.validate_on_submit(): - user, authenticated = User.authenticate(form.login.data, - form.password.data) - - if user and authenticated: - login_user(user, remember=form.remember_me.data) - return redirect(request.args.get("next") or - url_for("forum.index")) - - flash(_("Wrong Username or Password."), "danger") - return render_template("auth/login.html", form=form) - - -@auth.route("/reauth", methods=["GET", "POST"]) -@login_required -def reauth(): - """ - Reauthenticates a user - """ - - if not login_fresh(): - form = ReauthForm(request.form) - if form.validate_on_submit(): - if current_user.check_password(form.password.data): - confirm_login() - flash(_("Reauthenticated."), "success") - return redirect(request.args.get("next") or current_user.url) - - flash(_("Wrong password."), "danger") - return render_template("auth/reauth.html", form=form) - return redirect(request.args.get("next") or current_user.url) - - -@auth.route("/logout") -@login_required -def logout(): - logout_user() - flash(("Logged out"), "success") - return redirect(url_for("forum.index")) - - -@auth.route("/register", methods=["GET", "POST"]) -def register(): - """ - Register a new user - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile", - username=current_user.username)) - - if current_app.config["RECAPTCHA_ENABLED"]: - from flaskbb.auth.forms import RegisterRecaptchaForm - form = RegisterRecaptchaForm(request.form) - else: - from flaskbb.auth.forms import RegisterForm - form = RegisterForm(request.form) - - form.language.choices = available_languages() - form.language.default = flaskbb_config['DEFAULT_LANGUAGE'] - form.process(request.form) # needed because a default is overriden - - if form.validate_on_submit(): - user = form.save() - login_user(user) - - flash(_("Thanks for registering."), "success") - return redirect(url_for("user.profile", - username=current_user.username)) - - return render_template("auth/register.html", form=form) - - -@auth.route('/resetpassword', methods=["GET", "POST"]) -def forgot_password(): - """ - Sends a reset password token to the user. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ForgotPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - - if user: - token = user.make_reset_token() - send_reset_token(user, token=token) - - flash(_("E-Mail sent! Please check your inbox."), "info") - return redirect(url_for("auth.forgot_password")) - else: - flash(_("You have entered a Username or E-Mail Address that is " - "not linked with your account."), "danger") - return render_template("auth/forgot_password.html", form=form) - - -@auth.route("/resetpassword/", methods=["GET", "POST"]) -def reset_password(token): - """ - Handles the reset password process. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ResetPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - expired, invalid, data = user.verify_reset_token(form.token.data) - - if invalid: - flash(_("Your Password Token is invalid."), "danger") - return redirect(url_for("auth.forgot_password")) - - if expired: - flash(_("Your Password Token is expired."), "danger") - return redirect(url_for("auth.forgot_password")) - - if user and data: - user.password = form.password.data - user.save() - flash(_("Your Password has been updated."), "success") - return redirect(url_for("auth.login")) - - form.token.data = token - return render_template("auth/reset_password.html", form=form) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/default.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/default.py deleted file mode 100644 index dd1afb84..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/default.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.configs.default - ~~~~~~~~~~~~~~~~~~~~~~~ - - This is the default configuration for FlaskBB that every site should have. - You can override these configuration variables in another class. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import sys - -_VERSION_STR = '{0.major}{0.minor}'.format(sys.version_info) - - -class DefaultConfig(object): - - # Get the app root path - # <_basedir> - # ../../ --> flaskbb/flaskbb/configs/base.py - _basedir = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname( - os.path.dirname(__file__))))) - - DEBUG = False - TESTING = False - - # Logs - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Default Database - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + _basedir + '/' + \ - 'flaskbb.sqlite' - - # This option will be removed as soon as Flask-SQLAlchemy removes it. - # At the moment it is just used to suppress the super annoying warning - SQLALCHEMY_TRACK_MODIFICATIONS = False - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # Protection against form post fraud - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Searching - WHOOSH_BASE = os.path.join(_basedir, "whoosh_index", _VERSION_STR) - - # Auth - LOGIN_VIEW = "auth.login" - REAUTH_VIEW = "auth.reauth" - LOGIN_MESSAGE_CATEGORY = "info" - REFRESH_MESSAGE_CATEGORY = "info" - - # Caching - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - ## Captcha - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - ## Mail - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USE_TLS = False - MAIL_USERNAME = "noreply@example.org" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = ("Default Sender", "noreply@example.org") - # Where to logger should send the emails to - ADMINS = ["admin@example.org"] - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - MESSAGE_URL_PREFIX = "/message" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/development.py.example b/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/development.py.example deleted file mode 100644 index cd3b7834..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/development.py.example +++ /dev/null @@ -1,61 +0,0 @@ -""" - flaskbb.configs.development - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's development config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class DevelopmentConfig(DefaultConfig): - - # Indicates that it is a dev environment - DEBUG = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - #SQLALCHEMY_DATABASE_URI = "postgresql://flaskbb@localhost:5432/flaskbb" - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - 'flaskbb.sqlite' - - # This will print all SQL statements - SQLALCHEMY_ECHO = True - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/production.py.example b/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/production.py.example deleted file mode 100644 index 22103f20..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/production.py.example +++ /dev/null @@ -1,92 +0,0 @@ -""" - flaskbb.configs.example - ~~~~~~~~~~~~~~~~~~~~ - - This is how a production configuration can look like. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class ProductionConfig(DefaultConfig): - - ## Database - # If no SQL service is choosen, it will fallback to sqlite - # For PostgresSQL: - #SQLALCHEMY_DATABASE_URI = "postgresql://localhost/example" - # For SQLite: - #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - # 'flaskbb.sqlite' - - ## Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # You can generate the WTF_CSRF_SECRET_KEY the same way as you have - # generated the SECRET_KEY. If no WTF_CSRF_SECRET_KEY is provided, it will - # use the SECRET_KEY. - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - - ## Caching - # For all available caching types, take a look at the Flask-Cache docs - # https://pythonhosted.org/Flask-Cache/#configuring-flask-cache - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - - ## Captcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - - ## Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] - - - ## Error/Info Logging - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes. Only change it when you know what you are doing. - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/testing.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/testing.py deleted file mode 100644 index b96e9a79..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/configs/testing.py +++ /dev/null @@ -1,64 +0,0 @@ -""" - flaskbb.configs.testing - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's testing config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class TestingConfig(DefaultConfig): - - # Indicates that it is a testing environment - DEBUG = False - TESTING = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - SQLALCHEMY_DATABASE_URI = ( - 'sqlite://' - ) - - SERVER_NAME = "localhost:5000" - - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/email.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/email.py deleted file mode 100644 index 9079200a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/email.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.emails - ~~~~~~~~~~~~~~~~~~~~ - - This module adds the functionality to send emails - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import render_template -from flask_mail import Message -from flask_babelplus import lazy_gettext as _ - -from flaskbb.extensions import mail - - -def send_reset_token(user, token): - send_email( - subject=_("Password Reset"), - recipients=[user.email], - text_body=render_template( - "email/reset_password.txt", - user=user, - token=token - ), - html_body=render_template( - "email/reset_password.html", - user=user, - token=token - ) - ) - - -def send_email(subject, recipients, text_body, html_body, sender=None): - msg = Message(subject, recipients=recipients, sender=sender) - msg.body = text_body - msg.html = html_body - mail.send(msg) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/exceptions.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/exceptions.py deleted file mode 100644 index 16d00f1a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/exceptions.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - flaskbb.exceptions - ~~~~~~~~~~~~~~~~~~ - - Exceptions implemented by FlaskBB. - - :copyright: (c) 2015 by the FlaskBBB Team. - :license: BSD, see LICENSE for more details -""" -from werkzeug.exceptions import HTTPException, Forbidden - - -class FlaskBBError(HTTPException): - "Root exception for FlaskBB" - description = "An internal error has occured" - - -class AuthorizationRequired(FlaskBBError, Forbidden): - description = "Authorization is required to access this area." diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/extensions.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/extensions.py deleted file mode 100644 index d677d939..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/extensions.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.extensions - ~~~~~~~~~~~~~~~~~~~~ - - The extensions that are used by FlaskBB. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_allows import Allows -from flask_sqlalchemy import SQLAlchemy -from flask_login import LoginManager -from flask_mail import Mail -from flask_cache import Cache -from flask_debugtoolbar import DebugToolbarExtension -from flask_redis import Redis -from flask_migrate import Migrate -from flask_themes2 import Themes -from flask_plugins import PluginManager -from flask_babelplus import Babel -from flask_wtf.csrf import CsrfProtect - -from flaskbb.exceptions import AuthorizationRequired - - -# Permissions Manager -allows = Allows(throws=AuthorizationRequired) - -# Database -db = SQLAlchemy() - -# Login -login_manager = LoginManager() - -# Mail -mail = Mail() - -# Caching -cache = Cache() - -# Redis -redis_store = Redis() - -# Debugtoolbar -debugtoolbar = DebugToolbarExtension() - -# Migrations -migrate = Migrate() - -# Themes -themes = Themes() - -# PluginManager -plugin_manager = PluginManager() - -# Babel -babel = Babel() - -# CSRF -csrf = CsrfProtect() diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/groups.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/groups.py deleted file mode 100644 index a9629854..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/groups.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.groups - ~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our groups. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -from collections import OrderedDict - - -fixture = OrderedDict(( - ('Administrator', { - 'description': 'The Administrator Group', - 'admin': True, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Super Moderator', { - 'description': 'The Super Moderator Group', - 'admin': False, - 'super_mod': True, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Moderator', { - 'description': 'The Moderator Group', - 'admin': False, - 'super_mod': False, - 'mod': True, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Member', { - 'description': 'The Member Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Banned', { - 'description': 'The Banned Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': True, - 'guest': False, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Guest', { - 'description': 'The Guest Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': True, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }) -)) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/settings.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/settings.py deleted file mode 100644 index 47d7a2d7..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/fixtures/settings.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.settings - ~~~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our settings. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_themes2 import get_themes_list - -from flaskbb.extensions import babel - - -def available_themes(): - return [(theme.identifier, theme.name) for theme in get_themes_list()] - - -def available_avatar_types(): - return [("image/png", "PNG"), ("image/jpeg", "JPG"), ("image/gif", "GIF")] - - -def available_languages(): - return [(locale.language, locale.display_name) - for locale in babel.list_translations()] - - -fixture = ( - # Settings Group - ('general', { - 'name': "General Settings", - 'description': "How many items per page are displayed.", - 'settings': ( - ('project_title', { - 'value': "FlaskBB", - 'value_type': "string", - 'name': "Project title", - 'description': "The title of the project.", - }), - ('project_subtitle', { - 'value': "A lightweight forum software in Flask", - 'value_type': "string", - 'name': "Project subtitle", - 'description': "A short description of the project.", - }), - ('posts_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Posts per page", - 'description': "Number of posts displayed per page.", - }), - ('topics_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Topics per page", - 'description': "Number of topics displayed per page.", - }), - ('users_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Users per page", - 'description': "Number of users displayed per page.", - }), - ), - }), - ('misc', { - 'name': "Misc Settings", - 'description': "Miscellaneous settings.", - 'settings': ( - ('message_quota', { - 'value': 50, - 'value_type': "integer", - 'extra': {"min": 0}, - 'name': "Private Message Quota", - 'description': "The amount of messages a user can have." - }), - ('online_last_minutes', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Online last minutes", - 'description': "How long a user can be inactive before he is marked as offline. 0 to disable it.", - }), - ('title_length', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Topic title length", - 'description': "The length of the topic title shown on the index." - }), - ('tracker_length', { - 'value': 7, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Tracker length", - 'description': "The days for how long the forum should deal with unread topics. 0 to disable it." - }), - ('avatar_height', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Height", - 'description': "The allowed height of an avatar in pixels." - }), - ('avatar_width', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Width", - 'description': "The allowed width of an avatar in pixels." - }), - ('avatar_size', { - 'value': 200, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Size", - 'description': "The allowed size of the avatar in kilobytes." - }), - ('avatar_types', { - 'value': ["image/png", "image/jpeg", "image/gif"], - 'value_type': "selectmultiple", - 'extra': {"choices": available_avatar_types}, - 'name': "Avatar Types", - 'description': "The allowed types of an avatar. Such as JPEG, GIF or PNG." - }), - ('signature_enabled', { - 'value': True, - 'value_type': "boolean", - 'extra': {}, - 'name': "Enable Signatures", - 'description': "Enable signatures in posts." - }) - ), - }), - ('appearance', { - 'name': "Appearance Settings", - "description": "Change the theme and language for your forum.", - "settings": ( - ('default_theme', { - 'value': "aurora", - 'value_type': "select", - 'extra': {'choices': available_themes}, - 'name': "Default Theme", - 'description': "Change the default theme for your forum." - }), - ('default_language', { - 'value': "en", - 'value_type': "select", - 'extra': {'choices': available_languages}, - 'name': "Default Language", - 'description': "Change the default language for your forum." - }), - ), - }), -) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/__init__.py deleted file mode 100644 index c0aa49cd..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -from flask import current_app -from flask_plugins import Plugin - -from flaskbb.management.models import SettingsGroup - - -class FlaskBBPlugin(Plugin): - - #: This is the :class:`SettingsGroup` key - if your the plugin needs to - #: install additional things you must set it, else it won't install - #: anything. - settings_key = None - - @property - def installable(self): - """Is ``True`` if the Plugin can be installed.""" - if self.settings_key is not None: - return True - return False - - @property - def uninstallable(self): - """Is ``True`` if the Plugin can be uninstalled.""" - if self.installable: - group = SettingsGroup.query.filter_by(key=self.settings_key).first() - if group and len(group.settings.all()) > 0: - return True - return False - return False - - # Some helpers - def register_blueprint(self, blueprint, **kwargs): - """Registers a blueprint. - - :param blueprint: The blueprint which should be registered. - """ - current_app.register_blueprint(blueprint, **kwargs) - - def create_table(self, model, db): - """Creates the relation for the model - - :param model: The Model which should be created - :param db: The database instance. - """ - if not model.__table__.exists(bind=db.engine): - model.__table__.create(bind=db.engine) - - def drop_table(self, model, db): - """Drops the relation for the bounded model. - - :param model: The model on which the table is bound. - :param db: The database instance. - """ - model.__table__.drop(bind=db.engine) - - def create_all_tables(self, models, db): - """A interface for creating all models specified in ``models``. - - :param models: A list with models - :param db: The database instance - """ - for model in models: - self.create_table(model, db) - - def drop_all_tables(self, models, db): - """A interface for dropping all models specified in the - variable ``models``. - - :param models: A list with models - :param db: The database instance. - """ - for model in models: - self.drop_table(model, db) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/__init__.py deleted file mode 100644 index aed2fd06..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/__init__.py +++ /dev/null @@ -1,64 +0,0 @@ -from flask.ext.plugins import connect_event - -from flaskbb.plugins import FlaskBBPlugin -from flaskbb.utils.populate import (create_settings_from_fixture, - delete_settings_from_fixture) -from flaskbb.forum.models import Forum - -from .views import portal, inject_portal_link - -__version__ = "0.1" -__plugin__ = "PortalPlugin" - - -def available_forums(): - forums = Forum.query.order_by(Forum.id.asc()).all() - return [(forum.id, forum.title) for forum in forums] - -fixture = ( - ('plugin_portal', { - 'name': "Portal Settings", - "description": "Configure the portal", - "settings": ( - ('plugin_portal_forum_ids', { - 'value': [1], - 'value_type': "selectmultiple", - 'name': "Forum IDs", - 'description': "The forum ids from which forums the posts should be displayed on the portal.", - 'extra': {"choices": available_forums, "coerce": int} - }), - ('plugin_portal_recent_topics', { - 'value': 10, - 'value_type': "integer", - 'name': "Number of Recent Topics", - 'description': "The number of topics in Recent Topics portlet.", - 'extra': {"min": 1}, - }), - ), - }), -) - - -class PortalPlugin(FlaskBBPlugin): - - name = "Portal Plugin" - - description = ("This Plugin provides a simple portal for FlaskBB.") - - author = "sh4nks" - - license = "BSD" - - version = __version__ - - settings_key = 'plugin_portal' - - def setup(self): - self.register_blueprint(portal, url_prefix="/portal") - connect_event("before-first-navigation-element", inject_portal_link) - - def install(self): - create_settings_from_fixture(fixture) - - def uninstall(self): - delete_settings_from_fixture(fixture) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/info.json b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/info.json deleted file mode 100644 index bd82b571..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "identifier": "portal", - "name": "Portal", - "author": "sh4nks", - "website": "http://flaskbb.org", - "license": "BSD", - "description": "A Portal Plugin for FlaskBB", - "version": "0.1" -} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/index.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/index.html deleted file mode 100644 index dda400b4..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/index.html +++ /dev/null @@ -1,204 +0,0 @@ -{% extends theme("layout.html") %} - -{% block css %} - {{ super() }} - - -{% endblock %} - -{% block content %} -
    - - -
    -
    -
    -

    News

    -
    -
    - - {% for topic in news.items %} -

    {{ topic.title }}

    - -
    - {{ topic.first_post.content | markup | safe }}
    -
    - {% if not loop.last %}
    {% endif %} - {% endfor %} - -
    -
    - -
    - - -
    -
    -
    -

    Recent Topics

    -
    -
    - {% for topic in recent_topics %} - -
    - - -
    - {{ topic.date_created | time_since }} -
    -
    - - {% endfor %} -
    -
    - -
    -
    -

    Statistics

    -
    -
    - -
    -
    - Topics -
    -
    - {{ topic_count }} -
    -
    - -
    -
    - Posts -
    -
    - {{ post_count }} -
    -
    - -
    -
    - Registered Users -
    -
    - {{ user_count }} -
    -
    - - {% if newest_user %} -
    -
    - Newest User -
    - -
    - {% endif %} - -
    -
    - Online Users -
    - -
    - {{ online_users }} -
    -
    - - {% if config["REDIS_ENABLED"] %} -
    -
    - Guests online -
    - -
    - {{ online_guests }} -
    -
    - {% endif %} -
    -
    -
    - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/navigation_snippet.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/navigation_snippet.html deleted file mode 100644 index e24fcbae..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/templates/navigation_snippet.html +++ /dev/null @@ -1,5 +0,0 @@ -
  • - - Portal - -
  • diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po deleted file mode 100644 index 3681636e..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# German translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-01-05 21:38+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Bitte installieren sie das Plugin zuerst. Danach können sie es in der Administration konfigurieren." diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po deleted file mode 100644 index 438e2979..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po +++ /dev/null @@ -1,25 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-02-13 14:26+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Please install the plugin first in order to configure which forums are displayed." - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/views.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/views.py deleted file mode 100644 index a3643889..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/plugins/portal/views.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from flask import Blueprint, current_app, flash, request -from flask_babelplus import gettext as _ -from flask_login import current_user - -from flaskbb.utils.helpers import render_template -from flaskbb.forum.models import Topic, Post, Forum -from flaskbb.user.models import User, Group -from flaskbb.utils.helpers import time_diff, get_online_users -from flaskbb.utils.settings import flaskbb_config - -portal = Blueprint("portal", __name__, template_folder="templates") - - -def inject_portal_link(): - return render_template("navigation_snippet.html") - - -@portal.route("/") -def index(): - page = request.args.get('page', 1, type=int) - - try: - forum_ids = flaskbb_config["PLUGIN_PORTAL_FORUM_IDS"] - except KeyError: - forum_ids = [] - flash(_("Please install the plugin first to configure the forums " - "which should be displayed"), "warning") - - - group_ids = [group.id for group in current_user.groups] - forums = Forum.query.filter(Forum.groups.any(Group.id.in_(group_ids))) - - # get the news forums - check for permissions - news_ids = [f.id for f in forums.filter(Forum.id.in_(forum_ids)).all()] - news = Topic.query.filter(Topic.forum_id.in_(news_ids)).\ - order_by(Topic.id.desc()).\ - paginate(page, flaskbb_config["TOPICS_PER_PAGE"], True) - - # get the recent topics from all to the user available forums (not just the - # configured ones) - all_ids = [f.id for f in forums.all()] - recent_topics = Topic.query.filter(Topic.forum_id.in_(all_ids)).\ - order_by(Topic.last_updated.desc()).\ - limit(flaskbb_config.get("PLUGIN_PORTAL_RECENT_TOPICS", 10)) - - user_count = User.query.count() - topic_count = Topic.query.count() - post_count = Post.query.count() - newest_user = User.query.order_by(User.id.desc()).first() - - # Check if we use redis or not - if not current_app.config["REDIS_ENABLED"]: - online_users = User.query.filter(User.lastseen >= time_diff()).count() - online_guests = None - else: - online_users = len(get_online_users()) - online_guests = len(get_online_users(guest=True)) - - return render_template("index.html", news=news, recent_topics=recent_topics, - user_count=user_count, topic_count=topic_count, - post_count=post_count, newest_user=newest_user, - online_guests=online_guests, - online_users=online_users) diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/.gitkeep b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/pygments.css b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/pygments.css deleted file mode 100644 index 2e01f06a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/pygments.css +++ /dev/null @@ -1,64 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight .c { color: #408080; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ -.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #7D9029 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #A0A000 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/styles.css b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/styles.css deleted file mode 100644 index 79c3cb7c..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/css/styles.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot");src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#F6F9FC}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#F6F9FC}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#F6F9FC;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#F6F9FC}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:0}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#cad7e1}.navbar-default .navbar-brand{color:#555}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#3c3c3c;background-color:transparent}.navbar-default .navbar-text{color:#555}.navbar-default .navbar-nav>li>a{color:#555}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#cad7e1}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#555}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#555}.navbar-default .navbar-link:hover{color:#555}.navbar-default .btn-link{color:#555}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#555}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #cad7e1;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:-1;border-top-right-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:-1;border-bottom-right-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #cad7e1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #cad7e1}.panel-default{border-color:#cad7e1}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#cad7e1}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.5.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.5.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.5.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.5.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}html{position:relative;min-height:100%}body{margin-bottom:60px}.emoji{vertical-align:middle;width:20px;height:20px}.flaskbb-footer{position:absolute;bottom:0;height:60px;width:100%;padding-top:1em}.flaskbb-layout{padding-top:20px}.flaskbb-header{color:#fff;text-align:left;text-shadow:0 1px 0 rgba(0,0,0,0.1);background-color:#08c;background-image:-webkit-linear-gradient(top, #285e8e 0%, #08c 100%);background-image:linear-gradient(to bottom, #285e8e 0%, #08c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);border:1px solid #cad7e1;border-bottom:0;position:relative;height:12em;padding:2.5em 2em;margin-top:2.5em}.flaskbb-header .flaskbb-meta .flaskbb-title{color:#fff;font-size:3em;font-weight:bold}.flaskbb-header .flaskbb-meta .flaskbb-subtitle{color:#E8F1F2}.flaskbb-breadcrumb{border:1px solid #cad7e1;border-radius:0}p.flaskbb-stats{margin:0;padding:0}.controls-row{padding:0.5em 0;margin:0}.controls-row .pagination{padding:0;margin:0}.controls-col{margin:0;padding:0}.settings-col{padding:0}.inline-form{display:inline}.cheatsheet h2{text-align:center;font-size:1.6em;-webkit-border-radius:2px;-webkit-background-clip:padding-box;-moz-border-radius:2px;-moz-background-clip:padding;padding:10px 0}.cheatsheet .emojis{text-align:center}.cheatsheet .typography{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:4px;-moz-column-gap:4px;column-gap:4px;text-align:center}.cheatsheet .code-example{width:100%;position:relative;margin-bottom:1em;-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:-4px;-moz-column-gap:-4px;column-gap:-4px}.cheatsheet .code-example .markup{padding:0}.navbar .navbar-btn>a.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.navbar .navbar-btn>a.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.navbar .navbar-btn>a.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.navbar .navbar-nav .user-btn{padding-right:2em;padding-left:1em}.dropdown-menu>li .btn-link{display:block;padding:3px 20px;width:100%;text-align:left;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li .btn-link:hover,.dropdown-menu>li .btn-link:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active .btn-link,.dropdown-menu>.active .btn-link:hover,.dropdown-menu>.active .btn-link:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled .btn-link,.dropdown-menu>.disabled .btn-link:hover,.dropdown-menu>.disabled .btn-link:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.dropdown-messages{min-width:15em}.dropdown-messages .message-subject{font-style:italic}.dropdown-messages .author-name{font-weight:bold}.sidebar{padding-top:1em;padding-bottom:1em;text-shadow:none;background-color:#f8f8f8;border:1px solid #cad7e1}.sidebar .sidenav-header{display:block;padding-left:1.25em;padding-bottom:1em;font-size:12px;font-weight:bold;line-height:20px;color:#555;text-transform:uppercase}.sidebar .sidenav-btn{padding-bottom:1em;text-transform:uppercase;text-align:center}.sidebar .nav>li>a{display:block}.sidebar .nav>li>a:hover,.sidebar .nav>li>a:focus{text-decoration:none;background-color:#e7e7e7}.sidebar .nav>.active>a,.sidebar .nav>.active:hover>a,.sidebar .nav>.active:focus>a{font-weight:normal;color:#555;background-color:#e7e7e7}.nav-sidebar{width:100%;padding:0}.nav-sidebar a{color:#555}.nav-sidebar .active a{cursor:default;background-color:#f8f8f8;color:#555}.nav-sidebar li.active{border-top:1px solid #cad7e1;border-bottom:1px solid #cad7e1}.nav-sidebar li.active:first-child{border-top:none}.nav-sidebar .active a:hover{background-color:#f8f8f8}.panel.panel-tabs>.panel-heading{padding:0;font-weight:500}.panel.panel-tabs .nav-tabs{border-bottom:none}.panel.panel-tabs .nav-justified{margin-bottom:-1px}.panel-tabs .nav-tabs>li a{color:#E8F1F2;border:1px solid #337ab7}.panel-tabs .nav-tabs>li a:hover,.panel-tabs .nav-tabs>li a:focus{background-color:#08c;border:1px solid #08c}.panel-tabs .nav-tabs>li.active a,.panel-tabs .nav-tabs>li.active a:hover,.panel-tabs .nav-tabs>li.active a:focus{color:#fff;background-color:#08c;border:1px solid #08c}.editor-box .editor-submit .btn{margin:0.75em 0.25em 0 0}.editor-box>.quickreply{padding:0}.editor{min-height:0}.editor .editor-options{margin-top:0.5em}.editor .new-message{background:#fff;border:0;height:12em;outline:none;width:100%}.editor>.md-editor{border-color:#cad7e1}.editor>.md-editor.active{border-color:#cad7e1}.editor>.md-editor>.md-footer,.editor>.md-editor>.md-header{background:#f8f8f8}.editor>.md-editor>textarea{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1em;border-top:1px solid #cad7e1;border-bottom:none;background:#fff;padding:0 0.25em}.editor>.md-editor>.md-preview{border-top:1px solid #cad7e1;border-right:1px solid #cad7e1;border-bottom:none;padding:0 0.25em;background:#eee}.btn.btn-link{border:none;color:#337ab7;text-decoration:none;padding:0;margin-bottom:2px}.btn.btn-link:focus,.btn.btn-link:hover{color:#23527c;text-decoration:underline}.btn-icon{font-family:'FontAwesome';font-size:1.15em;line-height:1.50em;font-weight:normal;background:none;border-radius:0}.icon-delete:before{content:"\f014";color:#d9534f}.icon-report:before{content:"\f024";color:#f0ad4e}.icon-edit:before{content:"\f040";color:#5cb85c}.icon-reply:before{content:"\f10e";color:#337ab7}.icon-replyall:before{content:"\f122";color:#5bc0de}.category-panel{border-color:#cad7e1}.category-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.category-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.category-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.category-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.category-panel .panel-heading{font-weight:bold}.category-panel .category-body{padding:0}.category-panel .category-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.category-panel .category-meta .forum-name,.category-panel .category-meta .forum-stats,.category-panel .category-meta .forum-last-post{font-weight:bold}.category-panel .category-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.category-panel .category-row:not(:last-child){border-bottom:1px solid #cad7e1}.category-panel .category-row.hover:hover{background-color:#f8f8f8}.category-panel .forum-info{position:relative}.category-panel .forum-info .forum-status{float:left;font-size:2em;padding-right:0.5em}.category-panel .forum-info .forum-name{font-weight:bold}.category-panel .forum-info .forum-moderators{font-style:italic}.category-panel .forum-last-post .last-post-title{font-weight:bold}.forum-panel{border-color:#cad7e1;margin-bottom:0}.forum-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.forum-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.forum-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.forum-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.forum-panel .panel-heading{font-weight:bold}.forum-panel .forum-body{padding:0}.forum-panel .forum-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.forum-panel .forum-meta .topic-name,.forum-panel .forum-meta .topic-stats,.forum-panel .forum-meta .topic-last-post{font-weight:bold}.forum-panel .topic-info{position:relative}.forum-panel .topic-info .topic-status{float:left;font-size:1.5em;padding-right:0.5em}.forum-panel .topic-info .topic-status .topic-locked{font-size:1.5em}.forum-panel .topic-info .topic-name{font-weight:bold}.forum-panel .topic-info .topic-pages{font-weight:normal;font-size:small}.forum-panel .forum-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.forum-panel .forum-row:not(:last-child){border-bottom:1px solid #cad7e1}.forum-panel .forum-row.hover:hover{background-color:#f8f8f8}.topic-panel{border-color:#cad7e1;margin-bottom:0}.topic-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.topic-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.topic-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.topic-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.topic-panel .panel-heading{font-weight:bold}.topic-panel .topic-body{padding-top:0;padding-bottom:0}.post-row{background:#e8ecf1;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}.post-row:not(:last-child){border-bottom:1px solid #cad7e1}.post-box{background:#fff;border-left:1px solid #cad7e1;padding-bottom:3em;padding-left:0;padding-right:0;min-height:19em;position:relative}.post-box.post-horizontal{border-left:none;min-height:14em}.post-box .post-meta{padding-top:0.5em;padding-left:0.5em;padding-right:0.5em;margin:0;background-color:#fff;border-bottom:1px solid #eaf1f5}.post-box .post-content{padding-left:0.5em;padding-right:0.5em;padding-top:0.5em}.post-box .post-content img{max-width:100%;max-height:100%}.post-box .post-signature{margin-top:2em}.post-box .post-signature hr{height:1px;color:#eaf1f5;background-color:#eaf1f5;border:none;margin:0;width:25%}.post-box .post-footer{border-top:1px solid #cad7e1;background-color:#fff;width:100%;left:0;bottom:0;position:absolute}.post-box .post-footer .post-menu{padding-left:0}.post-box .post-footer .post-menu .btn-icon:hover{background-color:#f8f8f8}.author{text-shadow:0px 1px 0px #fff}.author.author-horizontal{min-height:9em;border-bottom:1px solid #cad7e1}.author.author-horizontal .author-box{float:left;margin-top:0.5em}.author.author-horizontal .author-box .author-avatar{margin-top:0em;margin-right:1em}.author.author-horizontal .author-box .author-online,.author.author-horizontal .author-box .author-offline{margin-top:0.5em}.author.author-horizontal .author-box .author-name{margin-top:-0.5em}.author .author-name h4{float:left;margin-bottom:0}.author .author-title h5{margin-top:0;font-weight:600;clear:both}.author .author-avatar{margin:0.5em 0}.author .author-avatar img{border-radius:0.25em;height:auto;width:8em}.author .author-online,.author .author-offline{margin-top:0.75em;margin-left:0.25em;float:left;width:0.5em;height:0.5em;border-radius:50%}.author .author-online{background:#5cb85c}.author .author-offline{background:#555}.page-panel{border-color:#cad7e1}.page-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.page-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.page-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.page-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.page-panel .panel-heading{font-weight:bold}.page-panel .page-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.page-panel .page-body{padding:0}.page-panel .page-body>:not(.page-meta){padding-top:0.5em}.page-panel .page-body img{max-width:100%;max-height:100%}.page-panel .page-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.page-panel .page-row:not(:last-child){border-bottom:1px solid #cad7e1}.page-panel .page-row.hover:hover{background-color:#f8f8f8}.page-panel .row>.page-row:not(:last-child){border-bottom:1px solid #cad7e1}.profile-sidebar{padding:7px 0}.profile-sidebar ul li:last-child{border-bottom:none}.profile-sidebar ul li a{color:#555;font-size:14px;font-weight:400;border-left:2px solid transparent}.profile-sidebar ul li a:hover,.profile-sidebar ul li a:visited{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.profile-sidebar ul li a i{margin-right:8px;font-size:14px}.profile-sidebar ul li.active a{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.page-body.profile-body{background-color:#e8ecf1}.profile-content{background-color:#fff;border-left:1px solid #cad7e1;min-height:32.25em}.profile-content .topic-head{font-weight:normal}.profile-content .topic-created{font-size:0.75em;padding-bottom:0.75em}.profile-picture{text-align:center}.profile-picture img{float:none;margin:0 auto;width:50%;height:50%;-webkit-border-radius:50% !important;-moz-border-radius:50% !important;border-radius:50% !important}.profile-sidebar-stats{text-shadow:0 1px 0 #fff}.profile-groupname,.profile-online,.profile-location,.profile-posts,.profile-date,.profile-buttons{text-align:center;margin-top:0.2em}.profile-groupname{text-align:center;margin-top:0.75em;color:#08c;font-size:1.2em;font-weight:600}.profile-buttons{text-align:center;margin-top:10px;margin-bottom:15px}.profile-buttons .btn{text-shadow:none;text-transform:uppercase;font-size:11px;font-weight:700;padding:6px 15px;margin-right:5px}.conversation-panel{border-color:#cad7e1;margin-bottom:0}.conversation-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.conversation-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.conversation-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.conversation-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.conversation-panel .panel-heading{font-weight:bold}.conversation-panel .conversation-body{padding:0}.conversation-panel .conversation-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.conversation-panel .conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-row.hover:hover{background-color:#f8f8f8}.conversation-panel .conversation-body .row>.conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-message{min-height:16em;padding:0.5em;border:1px solid #cad7e1;border-radius:5px}.conversation-panel .conversation-message .message-content{padding-top:0.5em}.conversation-panel .conversation-message .message-footer{width:100%;bottom:0;position:absolute}.conversation-panel .conversation-message .message-footer .right{margin-right:46px;float:right}.conversation-panel .conversation-message .message-footer .left{float:left}@media (min-width: 992px){.conversation-panel .arrow:after,.conversation-panel .arrow:before{content:"";position:absolute;width:0;height:0;border:solid transparent}.conversation-panel .arrow.left:after,.conversation-panel .arrow.left:before{border-left:0}.conversation-panel .arrow.left:before{left:0px;top:40px;border-right-color:inherit;border-width:16px}.conversation-panel .arrow.left:after{left:1px;top:41px;border-right-color:#FFFFFF;border-width:15px}.conversation-panel .arrow.right:before{right:-16px;top:40px;border-left-color:inherit;border-width:16px}.conversation-panel .arrow.right:after{right:-14px;top:41px;border-left-color:#FFFFFF;border-width:15px}}.conversation-reply{padding-top:2em}.management-panel{border-color:#cad7e1}.management-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.management-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.management-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.management-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.management-panel .search-form{display:none;padding:15px}.management-panel .management-head{background-color:#337ab7}.management-panel .management-body{padding:0}.panel.settings-panel{border:none;margin-bottom:0}.panel.settings-panel .settings-head{background-color:#f8f8f8;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-body{padding:0}.panel.settings-panel .settings-body .settings-form{padding-top:10px}.panel.settings-panel .settings-meta{background-color:#eaf1f5;margin:0;padding:5px 0 5px 0;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-meta .meta-item{font-weight:bold}.panel.settings-panel .settings-content>.category-panel{border-left:none;border-right:none;border-bottom:none;margin-bottom:0}.panel.settings-panel .settings-content>.category-panel:first-child{border-top:none}.panel.settings-panel .settings-content>.category-panel:last-child{border-bottom:1px solid #cad7e1;margin-bottom:1em}.panel.settings-panel .settings-row{padding:5px 0 5px 0;margin:0}.panel.settings-panel .settings-row:last-child{padding-bottom:10px;border-bottom:none !important}.panel.settings-panel .settings-row.hover:hover{background-color:#f8f8f8}.panel.settings-panel .settings-row .btn-icon{padding:0 6px}.panel.settings-panel .settings-footer{padding-top:5px;padding-left:5px;padding-bottom:0px}.panel.settings-panel .settings-footer .pagination{margin:0}.with-left-border{border-left:1px solid #cad7e1}.with-border-bottom{border-bottom:1px solid #cad7e1}.stats{margin-top:15px;margin-bottom:15px}.stats .stats-widget{text-align:center;padding-top:20px;padding-bottom:20px;border:1px solid #cad7e1}.stats .stats-widget .icon{display:block;font-size:96px;line-height:96px;margin-bottom:10px;text-align:center}.stats .stats-widget var{display:block;height:64px;font-size:64px;line-height:64px;font-style:normal}.stats .stats-widget label{font-size:17px}.stats .stats-widget .options{margin-top:10px}.stats .stats-heading{font-size:1.25em;font-weight:bold;margin:0;border-bottom:1px solid #cad7e1}.stats .stats-row{margin:0 0 15px 0;padding-bottom:15px}.stats .stats-row .stats-item{margin:0;padding-top:5px}.stats .stats-row:last-child{border:none}.alert-message{margin:0;padding:20px;border-radius:5px;border:1px solid #3C763D;border-left:3px solid #eee}.alert-message h4{margin-top:0;margin-bottom:5px}.alert-message p:last-child{margin-bottom:0}.alert-message code{background-color:#fff;border-radius:3px}.alert-message.alert-message-success{background-color:#F4FDF0;border-color:#3C763D}.alert-message.alert-message-success h4{color:#3C763D}.alert-message.alert-message-danger{background-color:#fdf7f7;border-color:#d9534f}.alert-message.alert-message-danger h4{color:#d9534f}.alert-message.alert-message-warning{background-color:#fcf8f2;border-color:#f0ad4e}.alert-message.alert-message-warning h4{color:#f0ad4e}.alert-message.alert-message-info{background-color:#f4f8fa;border-color:#5bc0de}.alert-message.alert-message-info h4{color:#5bc0de}.alert-message.alert-message-default{background-color:#EEE;border-color:#555}.alert-message.alert-message-default h4{color:#000}.alert-message.alert-message-notice{background-color:#FCFCDD;border-color:#BDBD89}.alert-message.alert-message-notice h4{color:#444} - -.md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5}.md-editor>.md-header{margin:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;overflow:auto}.md-editor>textarea{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px;outline:0;margin:0;display:block;padding:0;width:100%;border:0;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#eee}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.md-editor .md-controls{float:right;padding:3px}.md-editor .md-controls .md-control{right:5px;color:#bebebe;padding:3px 3px 3px 10px}.md-editor .md-controls .md-control:hover{color:#333}.md-editor.md-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999;padding:60px 30px 15px;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-footer{display:none}.md-editor.md-fullscreen-mode .md-input,.md-editor.md-fullscreen-mode .md-preview{margin:0 auto!important;height:100%!important;font-size:20px!important;padding:20px!important;color:#999;line-height:1.6em!important;resize:none!important;box-shadow:none!important;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-preview{color:#333;overflow:auto}.md-editor.md-fullscreen-mode .md-input:focus,.md-editor.md-fullscreen-mode .md-input:hover{color:#333;background:#fff!important}.md-editor.md-fullscreen-mode .md-header{background:0 0;text-align:center;position:fixed;width:100%;top:20px}.md-editor.md-fullscreen-mode .btn-group{float:none}.md-editor.md-fullscreen-mode .btn{border:0;background:0 0;color:#b3b3b3}.md-editor.md-fullscreen-mode .btn.active,.md-editor.md-fullscreen-mode .btn:active,.md-editor.md-fullscreen-mode .btn:focus,.md-editor.md-fullscreen-mode .btn:hover{box-shadow:none;color:#333}.md-editor.md-fullscreen-mode .md-fullscreen-controls{position:absolute;top:20px;right:20px;text-align:right;z-index:1002;display:block}.md-editor.md-fullscreen-mode .md-fullscreen-controls a{color:#b3b3b3;clear:right;margin:10px;width:30px;height:30px;text-align:center}.md-editor.md-fullscreen-mode .md-fullscreen-controls a:hover{color:#333;text-decoration:none}.md-editor.md-fullscreen-mode .md-editor{height:100%!important;position:relative}.md-editor .md-fullscreen-controls{display:none}.md-nooverflow{overflow:hidden;position:fixed;width:100%} \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/.gitkeep b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/.gitkeep deleted file mode 100644 index 8d1c8b69..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/flaskbb.png b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/emoji/flaskbb.png deleted file mode 100644 index 9846b80c1d252e334a7523bd89381dcd47911413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11014 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 Jua)cZ{0d({uNnXV diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/FontAwesome.otf b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/FontAwesome.otf deleted file mode 100644 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 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%0D}#zSrRb8FuaocFSDv)#ldj3 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 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 G`u_lkUM?>H diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 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 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.eot b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.eot deleted file mode 100644 index 9b6afaedc0fd7aaf927a07f82da9c11022251b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70807 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 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.svg b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e9..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.ttf b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 - - - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar100x100.png b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar100x100.png deleted file mode 100644 index 35fb5725fb4d4096c163df6d2451320bd0479fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^DImaSW-r^>&VDpOT?~YwiEd zhUY(52$cVyrn4|a)zh?7Ip^M^e1<@+{Uv7{ciew3_%rZ<07DZ4lK_iA!;DuocE=xo zl=%L;_Ria~|0NbOk6xB^ZNJT{V7Y`jUT=D#jok5r2^Us9ERa}!IrC25_K#J2nU>_g zRD01d-?3uZ(Ii3r>D&(Yruy{reXe&j$v>O6xiJ6S9j1vZE1!pL$+VllyG>}%y`GaP zm#lk)7VKcTG<{~(va4CF6T+2O`XBZP>fo8c7kpLp(l^bY8VxoRC+&$bm?RR!yu`I= z+s?)l@r+B3#%PA0;B~1NR?xj!ktgA~s+)0%qA2^?28~V39?n|X5sViPGYB*=uuKl^ z;Qu&fqj2iqsmtR|UVpBrb#+4fmKVZ*`}Njd&u*wFdNXg5)AXzN=A?OVHD0w>Ht6w- z==^qXg;z`a-IT4`?j5VM%iNW=S<<#tpD!*^FIe4gL4`b{R#H)*>QuWk(`(!~jrY6u zOj@-?argZ*p_u&Fr_NQXnOy}2~8>tv&yc& zUZb2c!RyH<=B`P*&P=^`U1OEq`$CCz5ei;HrQCH=^DZw`-z)U$Rkha*(L(E-wahg( zZ|szGYui`texkVF#J7L)`}rqslqTD3&An^3LXNxJa@9UBk-alFK45k06K&ac`w^$t z2bRN&T4yh)@RVyd?YXjTYtzRWK2;nOeH$Zuc9***UVEk;A;xQa&?BfNT~dsFb<6o% zE|qW9W-(-j<=LKEWgxl6XX8 zDbMzaRXg$he`u>+zx71~tAMDGcl*Q;)(KKFRes0+6)ITPE3Rw%`trltUXAq=!xWx; z{VFWOP#EUK*s=MPz5_6E0;5!cfsum*riZJ83IFMw^_yj#|0-AQ@(NoQ`&FqvYfl;@ fivouN>r4JLFK>gTe~DWM4fxzTR| diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar150x150.png b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar150x150.png deleted file mode 100644 index 2db71ddcaf23ec8912a06cb4126db99d3a89db13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 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 SdElQZ#d6PnvjVnD)IR{_U&B8D diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar80x80.png b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/avatar80x80.png deleted file mode 100644 index 57668cfba880213db8b28e44cfeb9a6fe23e50c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)-rI*bx+_^iN+6VJ-n|d=09r-LVLZ0ShIG5#GUM||L?9pm2`CuX z>op&b$GqR~^LD$h{ghUA{Es?7eFj@CE8dKvd^s>gGQ)y z?X%v2xB{ZkzuU%-H1me&NJ}7MLh?Rjay=6PB8KxPH4#l&uVEYRSQ8MKo&Q_n02>Df61JH1gtuK Y0B=(y>Hmj(H2?qr07*qoM6N<$g2?tU_W%F@ diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/megalist-icons.png b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/img/megalist-icons.png deleted file mode 100644 index f00ee657dae94929f258080f6b357a2bd6879766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 LNkvXXu0mjfltC&7 diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.js b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.js deleted file mode 100644 index 18555dd1..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.js +++ /dev/null @@ -1,53 +0,0 @@ -/* This file just holds some configuration values for the editor */ -marked.setOptions({ - gfm: true, - tables: true, - breaks: true, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false -}); - -$(".flaskbb-editor").markdown({ - iconlibrary: "fa", - additionalButtons: [ - [{ - name: "groupHelp", - data: [{ - name: "cmdHelp", - toggle: false, // this param only take effect if you load bootstrap.js - title: "Help", - icon: "fa fa-question", - btnClass: 'btn btn-success', - callback: function(e){ - $('#editor-help').modal('show') - } - }] - }] - ] -}); - -$('.flaskbb-editor').textcomplete([ - { // emoji strategy - match: /\B:([\-+\w]*)$/, - search: function (term, callback) { - callback($.map(emojies, function (emoji) { - return emoji.indexOf(term) === 0 ? emoji : null; - })); - }, - template: function (value) { - return '' + value; - }, - replace: function (value) { - return ':' + value + ': '; - }, - index: 1 - }, -], { - onKeydown: function (e, commands) { - if (e.ctrlKey && e.keyCode === 74) { // CTRL-J - return commands.KEY_ENTER; - } - } -}); diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.min.js b/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.min.js deleted file mode 100644 index 391d7ccf..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/static/js/editor.min.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||c.defaults,this.rules=h.normal,this.options.gfm&&(this.options.tables?this.rules=h.tables:this.rules=h.gfm)}function t(e,t){if(this.options=t||c.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=u.breaks:this.rules=u.gfm:this.options.pedantic&&(this.rules=u.pedantic)}function n(e){this.options=e||{}}function i(e){this.tokens=[],this.token=null,this.options=e||c.defaults,this.options.renderer=this.options.renderer||new n,this.renderer=this.options.renderer,this.renderer.options=this.options}function o(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function s(e,t){return e=e.source,t=t||"",function n(i,o){return i?(o=o.source||o,o=o.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(i,o),n):new RegExp(e,t)}}function a(){}function l(e){for(var t,n,i=1;iAn error occured:

    "+o(d.message+"",!0)+"
    ";throw d}}var h={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:a,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:a,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:a,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};h.bullet=/(?:[*+-]|\d+\.)/,h.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,h.item=s(h.item,"gm")(/bull/g,h.bullet)(),h.list=s(h.list)(/bull/g,h.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+h.def.source+")")(),h.blockquote=s(h.blockquote)("def",h.def)(),h._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",h.html=s(h.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,h._tag)(),h.paragraph=s(h.paragraph)("hr",h.hr)("heading",h.heading)("lheading",h.lheading)("blockquote",h.blockquote)("tag","<"+h._tag)("def",h.def)(),h.normal=l({},h),h.gfm=l({},h.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),h.gfm.paragraph=s(h.paragraph)("(?!","(?!"+h.gfm.fences.source.replace("\\1","\\2")+"|"+h.list.source.replace("\\1","\\3")+"|")(),h.tables=l({},h.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=h,e.lex=function(t,n){var i=new e(n);return i.lex(t)},e.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},e.prototype.token=function(e,t,n){for(var i,o,r,s,a,l,c,u,d,e=e.replace(/^ +$/gm,"");e;)if((r=this.rules.newline.exec(e))&&(e=e.substring(r[0].length),r[0].length>1&&this.tokens.push({type:"space"})),r=this.rules.code.exec(e))e=e.substring(r[0].length),r=r[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?r:r.replace(/\n+$/,"")});else if(r=this.rules.fences.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"code",lang:r[2],text:r[3]||""});else if(r=this.rules.heading.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"heading",depth:r[1].length,text:r[2]});else if(t&&(r=this.rules.nptable.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/\n$/,"").split("\n")},u=0;u ?/gm,""),this.token(r,t,!0),this.tokens.push({type:"blockquote_end"});else if(r=this.rules.list.exec(e)){for(e=e.substring(r[0].length),s=r[2],this.tokens.push({type:"list_start",ordered:s.length>1}),r=r[0].match(this.rules.item),i=!1,d=r.length,u=0;d>u;u++)l=r[u],c=l.length,l=l.replace(/^ *([*+-]|\d+\.) +/,""),~l.indexOf("\n ")&&(c-=l.length,l=this.options.pedantic?l.replace(/^ {1,4}/gm,""):l.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==d-1&&(a=h.bullet.exec(r[u+1])[0],s===a||s.length>1&&a.length>1||(e=r.slice(u+1).join("\n")+e,u=d-1)),o=i||/\n\n(?!\s*$)/.test(l),u!==d-1&&(i="\n"===l.charAt(l.length-1),o||(o=i)),this.tokens.push({type:o?"loose_item_start":"list_item_start"}),this.token(l,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(r=this.rules.html.exec(e))e=e.substring(r[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===r[1]||"script"===r[1]||"style"===r[1]),text:r[0]});else if(!n&&t&&(r=this.rules.def.exec(e)))e=e.substring(r[0].length),this.tokens.links[r[1].toLowerCase()]={href:r[2],title:r[3]};else if(t&&(r=this.rules.table.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:a,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:a,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,u.link=s(u.link)("inside",u._inside)("href",u._href)(),u.reflink=s(u.reflink)("inside",u._inside)(),u.normal=l({},u),u.pedantic=l({},u.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),u.gfm=l({},u.normal,{escape:s(u.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(u.text)("]|","~]|")("|","|https?://|")()}),u.breaks=l({},u.gfm,{br:s(u.br)("{2,}","*")(),text:s(u.gfm.text)("{2,}","*")()}),t.rules=u,t.output=function(e,n,i){var o=new t(n,i);return o.output(e)},t.prototype.output=function(e){for(var t,n,i,r,s="";e;)if(r=this.rules.escape.exec(e))e=e.substring(r[0].length),s+=r[1];else if(r=this.rules.autolink.exec(e))e=e.substring(r[0].length),"@"===r[2]?(n=":"===r[1].charAt(6)?this.mangle(r[1].substring(7)):this.mangle(r[1]),i=this.mangle("mailto:")+n):(n=o(r[1]),i=n),s+=this.renderer.link(i,null,n);else if(this.inLink||!(r=this.rules.url.exec(e))){if(r=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(r[0])&&(this.inLink=!1),e=e.substring(r[0].length),s+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):o(r[0]):r[0];else if(r=this.rules.link.exec(e))e=e.substring(r[0].length),this.inLink=!0,s+=this.outputLink(r,{href:r[2],title:r[3]}),this.inLink=!1;else if((r=this.rules.reflink.exec(e))||(r=this.rules.nolink.exec(e))){if(e=e.substring(r[0].length),t=(r[2]||r[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){s+=r[0].charAt(0),e=r[0].substring(1)+e;continue}this.inLink=!0,s+=this.outputLink(r,t),this.inLink=!1}else if(r=this.rules.strong.exec(e))e=e.substring(r[0].length),s+=this.renderer.strong(this.output(r[2]||r[1]));else if(r=this.rules.em.exec(e))e=e.substring(r[0].length),s+=this.renderer.em(this.output(r[2]||r[1]));else if(r=this.rules.code.exec(e))e=e.substring(r[0].length),s+=this.renderer.codespan(o(r[2],!0));else if(r=this.rules.br.exec(e))e=e.substring(r[0].length),s+=this.renderer.br();else if(r=this.rules.del.exec(e))e=e.substring(r[0].length),s+=this.renderer.del(this.output(r[1]));else if(r=this.rules.text.exec(e))e=e.substring(r[0].length),s+=this.renderer.text(o(this.smartypants(r[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(r[0].length),n=o(r[1]),i=n,s+=this.renderer.link(i,null,n);return s},t.prototype.outputLink=function(e,t){var n=o(t.href),i=t.title?o(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,i,this.output(e[1])):this.renderer.image(n,i,o(e[1]))},t.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},t.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",i=e.length,o=0;i>o;o++)t=e.charCodeAt(o),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},n.prototype.code=function(e,t,n){if(this.options.highlight){var i=this.options.highlight(e,t);null!=i&&i!==e&&(n=!0,e=i)}return t?'
    '+(n?e:o(e,!0))+"\n
    \n":"
    "+(n?e:o(e,!0))+"\n
    "},n.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},n.prototype.html=function(e){return e},n.prototype.heading=function(e,t,n){return"'+e+"\n"},n.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},n.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"\n"},n.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},n.prototype.paragraph=function(e){return"

    "+e+"

    \n"},n.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},n.prototype.tablerow=function(e){return"\n"+e+"\n"},n.prototype.tablecell=function(e,t){var n=t.header?"th":"td",i=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return i+e+"\n"},n.prototype.strong=function(e){return""+e+""},n.prototype.em=function(e){return""+e+""},n.prototype.codespan=function(e){return""+e+""},n.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},n.prototype.del=function(e){return""+e+""},n.prototype.link=function(e,t,n){if(this.options.sanitize){try{var i=decodeURIComponent(r(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(o){return""}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:"))return""}var s='
    "},n.prototype.image=function(e,t,n){var i=''+n+'":">"},n.prototype.text=function(e){return e},i.parse=function(e,t,n){var o=new i(t,n);return o.parse(e)},i.prototype.parse=function(e){this.inline=new t(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var n="";this.next();)n+=this.tok();return n},i.prototype.next=function(){return this.token=this.tokens.pop()},i.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},i.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},i.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,i,o,r="",s="";for(n="",e=0;e",{"class":"btn-group"});for(c=0;c"),d.text(" "+this.__localize(m)).addClass("btn-default btn-sm").addClass(b),b.match(/btn\-(primary|success|info|warning|danger|link)/)&&d.removeClass("btn-default"),d.attr({type:"button",title:this.__localize(f.title)+k,tabindex:y,"data-provider":o,"data-handler":g,"data-hotkey":v}),f.toggle===!0&&d.attr("data-toggle","button"),p=e(""),p.addClass(_),p.prependTo(d),u.append(d),r.push(g),s.push(f.callback)}n.append(u)}}return n},__setListener:function(){var t="undefined"!=typeof this.$textarea.attr("rows"),n=this.$textarea.val().split("\n").length>5?this.$textarea.val().split("\n").length:"5",i=t?this.$textarea.attr("rows"):n;this.$textarea.attr("rows",i),this.$options.resize&&this.$textarea.css("resize",this.$options.resize),this.$textarea.on({focus:e.proxy(this.focus,this),keyup:e.proxy(this.keyup,this),change:e.proxy(this.change,this),select:e.proxy(this.select,this)}),this.eventSupported("keydown")&&this.$textarea.on("keydown",e.proxy(this.keydown,this)),this.eventSupported("keypress")&&this.$textarea.on("keypress",e.proxy(this.keypress,this)),this.$textarea.data("markdown",this)},__handle:function(t){var n=e(t.currentTarget),i=this.$handler,o=this.$callback,r=n.attr("data-handler"),s=i.indexOf(r),a=o[s];e(t.currentTarget).focus(),a(this),this.change(this),r.indexOf("cmdSave")<0&&this.$textarea.focus(),t.preventDefault()},__localize:function(t){var n=e.fn.markdown.messages,i=this.$options.language;return"undefined"!=typeof n&&"undefined"!=typeof n[i]&&"undefined"!=typeof n[i][t]?n[i][t]:t},__getIcon:function(e){return"object"==typeof e?e[this.$options.iconlibrary]:e},setFullscreen:function(t){var n=this.$editor,i=this.$textarea;t===!0?(n.addClass("md-fullscreen-mode"),e("body").addClass("md-nooverflow"),this.$options.onFullscreen(this)):(n.removeClass("md-fullscreen-mode"),e("body").removeClass("md-nooverflow"),1==this.$isPreview&&this.hidePreview().showPreview()),this.$isFullscreen=t,i.focus()},showEditor:function(){var t,n=this,i=this.$ns,o=this.$element,r=(o.css("height"),o.css("width"),this.$editable),s=this.$handler,a=this.$callback,l=this.$options,c=e("
    ",{"class":"md-editor",click:function(){n.focus()}});if(null===this.$editor){var h=e("
    ",{"class":"md-header btn-toolbar"}),u=[];if(l.buttons.length>0&&(u=u.concat(l.buttons[0])),l.additionalButtons.length>0&&e.each(l.additionalButtons[0],function(t,n){var i=e.grep(u,function(e,t){return e.name===n.name});i.length>0?i[0].data=i[0].data.concat(n.data):u.push(l.additionalButtons[0][t])}),l.reorderButtonGroups.length>0&&(u=u.filter(function(e){return l.reorderButtonGroups.indexOf(e.name)>-1}).sort(function(e,t){return l.reorderButtonGroups.indexOf(e.name)l.reorderButtonGroups.indexOf(t.name)?1:0})),u.length>0&&(h=this.__buildButtons([u],h)),l.fullscreen.enable&&h.append('
    ').on("click",".md-control-fullscreen",function(e){e.preventDefault(),n.setFullscreen(!0)}),c.append(h),o.is("textarea"))o.before(c),t=o,t.addClass("md-input"),c.append(t);else{var d="function"==typeof toMarkdown?toMarkdown(o.html()):o.html(),p=e.trim(d);t=e("",it.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Pt=/^key/,Ft=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Wt=/^([^.]*)(?:\.(.+)|)/;rt.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.get(t);if(v)for(n.handler&&(r=n,n=r.handler,o=r.selector),n.guid||(n.guid=rt.guid++),(l=v.events)||(l=v.events={}),(s=v.handle)||(s=v.handle=function(e){return"undefined"!=typeof rt&&rt.event.triggered!==e.type?rt.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(wt)||[""],c=e.length;c--;)a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f&&(p=rt.event.special[f]||{},f=(o?p.delegateType:p.bindType)||f,p=rt.event.special[f]||{},u=rt.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&rt.expr.match.needsContext.test(o),namespace:h.join(".")},r),(d=l[f])||(d=l[f]=[],d.delegateCount=0,p.setup&&p.setup.call(t,i,h,s)!==!1||t.addEventListener&&t.addEventListener(f,s)),p.add&&(p.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?d.splice(d.delegateCount++,0,u):d.push(u),rt.event.global[f]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.hasData(t)&&kt.get(t);if(v&&(l=v.events)){for(e=(e||"").match(wt)||[""],c=e.length;c--;)if(a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f){for(p=rt.event.special[f]||{},f=(i?p.delegateType:p.bindType)||f,d=l[f]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=d.length;r--;)u=d[r],!o&&g!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(r,1),u.selector&&d.delegateCount--,p.remove&&p.remove.call(t,u));s&&!d.length&&(p.teardown&&p.teardown.call(t,h,v.handle)!==!1||rt.removeEvent(t,f,v.handle),delete l[f])}else for(f in l)rt.event.remove(t,f+e[c],n,i,!0);rt.isEmptyObject(l)&&kt.remove(t,"handle events")}},dispatch:function(t){t=rt.event.fix(t);var e,n,i,o,r,s=[],a=G.call(arguments),l=(kt.get(this,"events")||{})[t.type]||[],c=rt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=rt.event.handlers.call(this,t,l),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,n=0;(r=o.handlers[n++])&&!t.isImmediatePropagationStopped();)t.rnamespace&&!t.rnamespace.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((rt.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,a),void 0!==i&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,r,s=[],a=e.delegateCount,l=t.target;if(a&&l.nodeType&&("click"!==t.type||isNaN(t.button)||t.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==t.type)){for(i=[],n=0;a>n;n++)r=e[n],o=r.selector+" ",void 0===i[o]&&(i[o]=r.needsContext?rt(o,this).index(l)>-1:rt.find(o,this,null,[l]).length),i[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return a]*)\/>/gi,_t=/\s*$/g;rt.extend({htmlPrefilter:function(t){return t.replace(Mt,"<$1>")},clone:function(t,e,n){var i,o,r,s,a=t.cloneNode(!0),l=rt.contains(t.ownerDocument,t);if(!(it.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||rt.isXMLDoc(t)))for(s=u(a),r=u(t),i=0,o=r.length;o>i;i++)w(r[i],s[i]);if(e)if(n)for(r=r||u(t),s=s||u(a),i=0,o=r.length;o>i;i++)x(r[i],s[i]);else x(t,a);return s=u(a,"script"),s.length>0&&p(s,!l&&u(t,"script")),a},cleanData:function(t){for(var e,n,i,o=rt.event.special,r=0;void 0!==(n=t[r]);r++)if($t(n)){if(e=n[kt.expando]){if(e.events)for(i in e.events)o[i]?rt.event.remove(n,i):rt.removeEvent(n,i,e.handle);n[kt.expando]=void 0}n[Et.expando]&&(n[Et.expando]=void 0)}}}),rt.fn.extend({domManip:T,detach:function(t){return C(this,t,!0)},remove:function(t){return C(this,t)},text:function(t){return Ct(this,function(t){return void 0===t?rt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(rt.cleanData(u(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null==t?!1:t,e=null==e?t:e,this.map(function(){return rt.clone(this,t,e)})},html:function(t){return Ct(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!_t.test(t)&&!qt[(Lt.exec(t)||["",""])[1].toLowerCase()]){t=rt.htmlPrefilter(t);try{for(;i>n;n++)e=this[n]||{},1===e.nodeType&&(rt.cleanData(u(e,!1)),e.innerHTML=t);e=0}catch(o){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return T(this,arguments,function(e){var n=this.parentNode;rt.inArray(this,t)<0&&(rt.cleanData(u(this)),n&&n.replaceChild(e,this))},t)}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var n,i=[],o=rt(t),r=o.length-1,s=0;r>=s;s++)n=s===r?this:this.clone(!0),rt(o[s])[e](n),K.apply(i,n.get());return this.pushStack(i)}});var Xt,Vt={HTML:"block",BODY:"block"},Qt=/^margin/,Yt=new RegExp("^("+Dt+")(?!px)[a-z%]+$","i"),Gt=function(e){var n=e.ownerDocument.defaultView;return n&&n.opener||(n=t),n.getComputedStyle(e)},Jt=function(t,e,n,i){var o,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];o=n.apply(t,i||[]);for(r in e)t.style[r]=s[r];return o},Kt=Y.documentElement;!function(){function e(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",Kt.appendChild(s);var e=t.getComputedStyle(a);n="1%"!==e.top,r="2px"===e.marginLeft,i="4px"===e.width,a.style.marginRight="50%",o="4px"===e.marginRight,Kt.removeChild(s)}var n,i,o,r,s=Y.createElement("div"),a=Y.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",it.clearCloneStyle="content-box"===a.style.backgroundClip,s.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",s.appendChild(a),rt.extend(it,{pixelPosition:function(){return e(),n},boxSizingReliable:function(){return null==i&&e(),i},pixelMarginRight:function(){return null==i&&e(),o},reliableMarginLeft:function(){return null==i&&e(),r},reliableMarginRight:function(){var e,n=a.appendChild(Y.createElement("div"));return n.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",a.style.width="1px",Kt.appendChild(s),e=!parseFloat(t.getComputedStyle(n).marginRight),Kt.removeChild(s),a.removeChild(n),e}}))}();var Zt=/^(none|table(?!-c[ea]).+)/,te={position:"absolute",visibility:"hidden",display:"block"},ee={letterSpacing:"0",fontWeight:"400"},ne=["Webkit","O","Moz","ms"],ie=Y.createElement("div").style;rt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=E(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=rt.camelCase(e),l=t.style;return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],void 0===n?s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:l[e]:(r=typeof n,"string"===r&&(o=At.exec(n))&&o[1]&&(n=c(t,e,o),r="number"),void(null!=n&&n===n&&("number"===r&&(n+=o&&o[3]||(rt.cssNumber[a]?"":"px")),it.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l[e]=n))))}},css:function(t,e,n,i){var o,r,s,a=rt.camelCase(e);return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],s&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=E(t,e,i)),"normal"===o&&e in ee&&(o=ee[e]),""===n||n?(r=parseFloat(o),n===!0||isFinite(r)?r||0:o):o}}),rt.each(["height","width"],function(t,e){rt.cssHooks[e]={get:function(t,n,i){return n?Zt.test(rt.css(t,"display"))&&0===t.offsetWidth?Jt(t,te,function(){return j(t,e,i)}):j(t,e,i):void 0},set:function(t,n,i){var o,r=i&&Gt(t),s=i&&A(t,e,i,"border-box"===rt.css(t,"boxSizing",!1,r),r);return s&&(o=At.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=rt.css(t,e)),D(t,n,s)}}}),rt.cssHooks.marginLeft=S(it.reliableMarginLeft,function(t,e){return e?(parseFloat(E(t,"marginLeft"))||t.getBoundingClientRect().left-Jt(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px":void 0}),rt.cssHooks.marginRight=S(it.reliableMarginRight,function(t,e){return e?Jt(t,{display:"inline-block"},E,[t,"marginRight"]):void 0}),rt.each({margin:"",padding:"",border:"Width"},function(t,e){rt.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[t+jt[i]+e]=r[i]||r[i-2]||r[0];return o}},Qt.test(t)||(rt.cssHooks[t+e].set=D)}),rt.fn.extend({css:function(t,e){return Ct(this,function(t,e,n){var i,o,r={},s=0;if(rt.isArray(e)){for(i=Gt(t),o=e.length;o>s;s++)r[e[s]]=rt.css(t,e[s],!1,i);return r}return void 0!==n?rt.style(t,e,n):rt.css(t,e)},t,e,arguments.length>1)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ot(this)?rt(this).show():rt(this).hide()})}}),rt.Tween=I,I.prototype={constructor:I,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||rt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(rt.cssNumber[n]?"":"px")},cur:function(){var t=I.propHooks[this.prop];return t&&t.get?t.get(this):I.propHooks._default.get(this)},run:function(t){var e,n=I.propHooks[this.prop];return this.options.duration?this.pos=e=rt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=rt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){rt.fx.step[t.prop]?rt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[rt.cssProps[t.prop]]&&!rt.cssHooks[t.prop]?t.elem[t.prop]=t.now:rt.style(t.elem,t.prop,t.now+t.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},rt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},rt.fx=I.prototype.init,rt.fx.step={};var oe,re,se=/^(?:toggle|show|hide)$/,ae=/queueHooks$/;rt.Animation=rt.extend(F,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return c(n.elem,t,At.exec(e),n),n}]},tweener:function(t,e){rt.isFunction(t)?(e=t,t=["*"]):t=t.match(wt);for(var n,i=0,o=t.length;o>i;i++)n=t[i],F.tweeners[n]=F.tweeners[n]||[],F.tweeners[n].unshift(e)},prefilters:[H],prefilter:function(t,e){e?F.prefilters.unshift(t):F.prefilters.push(t)}}),rt.speed=function(t,e,n){var i=t&&"object"==typeof t?rt.extend({},t):{complete:n||!n&&e||rt.isFunction(t)&&t,duration:t,easing:n&&e||e&&!rt.isFunction(e)&&e};return i.duration=rt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in rt.fx.speeds?rt.fx.speeds[i.duration]:rt.fx.speeds._default,null!=i.queue&&i.queue!==!0||(i.queue="fx"),i.old=i.complete,i.complete=function(){rt.isFunction(i.old)&&i.old.call(this),i.queue&&rt.dequeue(this,i.queue)},i},rt.fn.extend({fadeTo:function(t,e,n,i){return this.filter(Ot).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var o=rt.isEmptyObject(t),r=rt.speed(e,n,i),s=function(){var e=F(this,rt.extend({},t),r);(o||kt.get(this,"finish"))&&e.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,o=null!=t&&t+"queueHooks",r=rt.timers,s=kt.get(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&ae.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=t&&r[o].queue!==t||(r[o].anim.stop(n),e=!1,r.splice(o,1));!e&&n||rt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,n=kt.get(this),i=n[t+"queue"],o=n[t+"queueHooks"],r=rt.timers,s=i?i.length:0;for(n.finish=!0,rt.queue(this,t,[]),o&&o.stop&&o.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),rt.each(["toggle","show","hide"],function(t,e){var n=rt.fn[e];rt.fn[e]=function(t,i,o){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(R(e,!0),t,i,o)}}),rt.each({slideDown:R("show"),slideUp:R("hide"),slideToggle:R("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){rt.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),rt.timers=[],rt.fx.tick=function(){var t,e=0,n=rt.timers; -for(oe=rt.now();e1)},removeAttr:function(t){return this.each(function(){rt.removeAttr(this,t)})}}),rt.extend({attr:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?"undefined"==typeof t.getAttribute?rt.prop(t,e,n):(1===r&&rt.isXMLDoc(t)||(e=e.toLowerCase(),o=rt.attrHooks[e]||(rt.expr.match.bool.test(e)?le:void 0)),void 0!==n?null===n?void rt.removeAttr(t,e):o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(i=o.get(t,e))?i:(i=rt.find.attr(t,e),null==i?void 0:i)):void 0},attrHooks:{type:{set:function(t,e){if(!it.radioValue&&"radio"===e&&rt.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i,o=0,r=e&&e.match(wt);if(r&&1===t.nodeType)for(;n=r[o++];)i=rt.propFix[n]||n,rt.expr.match.bool.test(n)&&(t[i]=!1),t.removeAttribute(n)}}),le={set:function(t,e,n){return e===!1?rt.removeAttr(t,n):t.setAttribute(n,n),n}},rt.each(rt.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ce[e]||rt.find.attr;ce[e]=function(t,e,i){var o,r;return i||(r=ce[e],ce[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,ce[e]=r),o}});var ue=/^(?:input|select|textarea|button)$/i,pe=/^(?:a|area)$/i;rt.fn.extend({prop:function(t,e){return Ct(this,rt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[rt.propFix[t]||t]})}}),rt.extend({prop:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?(1===r&&rt.isXMLDoc(t)||(e=rt.propFix[e]||e,o=rt.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]):void 0},propHooks:{tabIndex:{get:function(t){var e=rt.find.attr(t,"tabindex");return e?parseInt(e,10):ue.test(t.nodeName)||pe.test(t.nodeName)&&t.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),it.optSelected||(rt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),rt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){rt.propFix[this.toLowerCase()]=this});var de=/[\t\r\n\f]/g;rt.fn.extend({addClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).addClass(t.call(this,e,W(this)))});if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).removeClass(t.call(this,e,W(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)for(;i.indexOf(" "+r+" ")>-1;)i=i.replace(" "+r+" "," ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):rt.isFunction(t)?this.each(function(n){rt(this).toggleClass(t.call(this,n,W(this),e),e)}):this.each(function(){var e,i,o,r;if("string"===n)for(i=0,o=rt(this),r=t.match(wt)||[];e=r[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||(e=W(this),e&&kt.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||t===!1?"":kt.get(this,"__className__")||""))})},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+W(n)+" ").replace(de," ").indexOf(e)>-1)return!0;return!1}});var fe=/\r/g,he=/[\x20\t\r\n\f]+/g;rt.fn.extend({val:function(t){var e,n,i,o=this[0];return arguments.length?(i=rt.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,rt(this).val()):t,null==o?o="":"number"==typeof o?o+="":rt.isArray(o)&&(o=rt.map(o,function(t){return null==t?"":t+""})),e=rt.valHooks[this.type]||rt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))})):o?(e=rt.valHooks[o.type]||rt.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(fe,""):null==n?"":n)):void 0}}),rt.extend({valHooks:{option:{get:function(t){var e=rt.find.attr(t,"value");return null!=e?e:rt.trim(rt.text(t)).replace(he," ")}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,r="select-one"===t.type||0>o,s=r?null:[],a=r?o+1:i.length,l=0>o?a:r?o:0;a>l;l++)if(n=i[l],(n.selected||l===o)&&(it.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!rt.nodeName(n.parentNode,"optgroup"))){if(e=rt(n).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var n,i,o=t.options,r=rt.makeArray(e),s=o.length;s--;)i=o[s],(i.selected=rt.inArray(rt.valHooks.option.get(i),r)>-1)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),rt.each(["radio","checkbox"],function(){rt.valHooks[this]={set:function(t,e){return rt.isArray(e)?t.checked=rt.inArray(rt(t).val(),e)>-1:void 0}},it.checkOn||(rt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var ge=/^(?:focusinfocus|focusoutblur)$/;rt.extend(rt.event,{trigger:function(e,n,i,o){var r,s,a,l,c,u,p,d=[i||Y],f=nt.call(e,"type")?e.type:e,h=nt.call(e,"namespace")?e.namespace.split("."):[];if(s=a=i=i||Y,3!==i.nodeType&&8!==i.nodeType&&!ge.test(f+rt.event.triggered)&&(f.indexOf(".")>-1&&(h=f.split("."),f=h.shift(),h.sort()),c=f.indexOf(":")<0&&"on"+f,e=e[rt.expando]?e:new rt.Event(f,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:rt.makeArray(n,[e]),p=rt.event.special[f]||{},o||!p.trigger||p.trigger.apply(i,n)!==!1)){if(!o&&!p.noBubble&&!rt.isWindow(i)){for(l=p.delegateType||f,ge.test(l+f)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(i.ownerDocument||Y)&&d.push(a.defaultView||a.parentWindow||t)}for(r=0;(s=d[r++])&&!e.isPropagationStopped();)e.type=r>1?l:p.bindType||f,u=(kt.get(s,"events")||{})[e.type]&&kt.get(s,"handle"),u&&u.apply(s,n),u=c&&s[c],u&&u.apply&&$t(s)&&(e.result=u.apply(s,n),e.result===!1&&e.preventDefault());return e.type=f,o||e.isDefaultPrevented()||p._default&&p._default.apply(d.pop(),n)!==!1||!$t(i)||c&&rt.isFunction(i[f])&&!rt.isWindow(i)&&(a=i[c],a&&(i[c]=null),rt.event.triggered=f,i[f](),rt.event.triggered=void 0,a&&(i[c]=a)),e.result}},simulate:function(t,e,n){var i=rt.extend(new rt.Event,n,{type:t,isSimulated:!0});rt.event.trigger(i,null,e),i.isDefaultPrevented()&&n.preventDefault()}}),rt.fn.extend({trigger:function(t,e){return this.each(function(){rt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];return n?rt.event.trigger(t,e,n,!0):void 0}}),rt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){rt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),rt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),it.focusin="onfocusin"in t,it.focusin||rt.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){rt.event.simulate(e,t.target,rt.event.fix(t))};rt.event.special[e]={setup:function(){var i=this.ownerDocument||this,o=kt.access(i,e);o||i.addEventListener(t,n,!0),kt.access(i,e,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=kt.access(i,e)-1;o?kt.access(i,e,o):(i.removeEventListener(t,n,!0),kt.remove(i,e))}}});var ve=t.location,me=rt.now(),ye=/\?/;rt.parseJSON=function(t){return JSON.parse(t+"")},rt.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(i){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||rt.error("Invalid XML: "+e),n};var be=/#.*$/,xe=/([?&])_=[^&]*/,we=/^(.*?):[ \t]*([^\r\n]*)$/gm,Te=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ce=/^(?:GET|HEAD)$/,$e=/^\/\//,ke={},Ee={},Se="*/".concat("*"),Ne=Y.createElement("a");Ne.href=ve.href,rt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ve.href,type:"GET",isLocal:Te.test(ve.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Se,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":rt.parseJSON,"text xml":rt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?B(B(t,rt.ajaxSettings),e):B(rt.ajaxSettings,t)},ajaxPrefilter:M(ke),ajaxTransport:M(Ee),ajax:function(e,n){function i(e,n,i,a){var c,p,y,b,w,C=n;2!==x&&(x=2,l&&t.clearTimeout(l),o=void 0,s=a||"",T.readyState=e>0?4:0,c=e>=200&&300>e||304===e,i&&(b=U(d,T,i)),b=z(d,b,T,c),c?(d.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(rt.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(rt.etag[r]=w)),204===e||"HEAD"===d.type?C="nocontent":304===e?C="notmodified":(C=b.state,p=b.data,y=b.error,c=!y)):(y=C,!e&&C||(C="error",0>e&&(e=0))),T.status=e,T.statusText=(n||C)+"",c?g.resolveWith(f,[p,C,T]):g.rejectWith(f,[T,C,y]),T.statusCode(m),m=void 0,u&&h.trigger(c?"ajaxSuccess":"ajaxError",[T,d,c?p:y]),v.fireWith(f,[T,C]),u&&(h.trigger("ajaxComplete",[T,d]),--rt.active||rt.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=void 0),n=n||{};var o,r,s,a,l,c,u,p,d=rt.ajaxSetup({},n),f=d.context||d,h=d.context&&(f.nodeType||f.jquery)?rt(f):rt.event,g=rt.Deferred(),v=rt.Callbacks("once memory"),m=d.statusCode||{},y={},b={},x=0,w="canceled",T={readyState:0,getResponseHeader:function(t){var e;if(2===x){if(!a)for(a={};e=we.exec(s);)a[e[1].toLowerCase()]=e[2];e=a[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===x?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return x||(t=b[n]=b[n]||t,y[t]=e),this},overrideMimeType:function(t){return x||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>x)for(e in t)m[e]=[m[e],t[e]];else T.always(t[T.status]);return this},abort:function(t){var e=t||w;return o&&o.abort(e),i(0,e),this}};if(g.promise(T).complete=v.add,T.success=T.done,T.error=T.fail,d.url=((e||d.url||ve.href)+"").replace(be,"").replace($e,ve.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=rt.trim(d.dataType||"*").toLowerCase().match(wt)||[""],null==d.crossDomain){c=Y.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=Ne.protocol+"//"+Ne.host!=c.protocol+"//"+c.host}catch(C){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=rt.param(d.data,d.traditional)),_(ke,d,n,T),2===x)return T;u=rt.event&&d.global,u&&0===rt.active++&&rt.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ce.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(ye.test(r)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=xe.test(r)?r.replace(xe,"$1_="+me++):r+(ye.test(r)?"&":"?")+"_="+me++)),d.ifModified&&(rt.lastModified[r]&&T.setRequestHeader("If-Modified-Since",rt.lastModified[r]),rt.etag[r]&&T.setRequestHeader("If-None-Match",rt.etag[r])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",d.contentType),T.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Se+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)T.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(f,T,d)===!1||2===x))return T.abort();w="abort";for(p in{success:1,error:1,complete:1})T[p](d[p]);if(o=_(Ee,d,n,T)){if(T.readyState=1,u&&h.trigger("ajaxSend",[T,d]),2===x)return T;d.async&&d.timeout>0&&(l=t.setTimeout(function(){T.abort("timeout")},d.timeout));try{x=1,o.send(y,i)}catch(C){if(!(2>x))throw C;i(-1,C)}}else i(-1,"No Transport");return T},getJSON:function(t,e,n){return rt.get(t,e,n,"json")},getScript:function(t,e){return rt.get(t,void 0,e,"script")}}),rt.each(["get","post"],function(t,e){rt[e]=function(t,n,i,o){return rt.isFunction(n)&&(o=o||i,i=n,n=void 0),rt.ajax(rt.extend({url:t,type:e,dataType:o,data:n,success:i},rt.isPlainObject(t)&&t))}}),rt._evalUrl=function(t){return rt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},rt.fn.extend({wrapAll:function(t){var e;return rt.isFunction(t)?this.each(function(e){rt(this).wrapAll(t.call(this,e))}):(this[0]&&(e=rt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return rt.isFunction(t)?this.each(function(e){rt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=rt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=rt.isFunction(t);return this.each(function(n){rt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){rt.nodeName(this,"body")||rt(this).replaceWith(this.childNodes)}).end()}}),rt.expr.filters.hidden=function(t){return!rt.expr.filters.visible(t)},rt.expr.filters.visible=function(t){return t.offsetWidth>0||t.offsetHeight>0||t.getClientRects().length>0};var De=/%20/g,Ae=/\[\]$/,je=/\r?\n/g,Oe=/^(?:submit|button|image|reset|file)$/i,Ie=/^(?:input|select|textarea|keygen)/i;rt.param=function(t,e){var n,i=[],o=function(t,e){e=rt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=rt.ajaxSettings&&rt.ajaxSettings.traditional),rt.isArray(t)||t.jquery&&!rt.isPlainObject(t))rt.each(t,function(){o(this.name,this.value)});else for(n in t)X(n,t[n],e,o);return i.join("&").replace(De,"+")},rt.fn.extend({serialize:function(){return rt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=rt.prop(this,"elements");return t?rt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!rt(this).is(":disabled")&&Ie.test(this.nodeName)&&!Oe.test(t)&&(this.checked||!It.test(t))}).map(function(t,e){var n=rt(this).val();return null==n?null:rt.isArray(n)?rt.map(n,function(t){return{name:e.name,value:t.replace(je,"\r\n")}}):{name:e.name,value:n.replace(je,"\r\n")}}).get()}}),rt.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(e){}};var Le={0:200,1223:204},Re=rt.ajaxSettings.xhr();it.cors=!!Re&&"withCredentials"in Re,it.ajax=Re=!!Re,rt.ajaxTransport(function(e){var n,i;return it.cors||Re&&!e.crossDomain?{send:function(o,r){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(t){return function(){n&&(n=i=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?r(0,"error"):r(a.status,a.statusText):r(Le[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),i=a.onerror=n("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&t.setTimeout(function(){n&&i()})},n=n("abort");try{a.send(e.hasContent&&e.data||null)}catch(l){if(n)throw l}},abort:function(){n&&n()}}:void 0}),rt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return rt.globalEval(t),t}}}),rt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),rt.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,o){e=rt(" -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/new_topic.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/new_topic.html deleted file mode 100644 index 08bb670a..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/new_topic.html +++ /dev/null @@ -1,52 +0,0 @@ -{% set page_title = _("New Topic") %} -{% set active_forum_nav=True %} - -{% extends theme("layout.html") %} - -{% block content %} -{% from theme("macros.html") import render_field, render_submit_field, render_quickreply %} - -
    - - - -
    - {{ form.hidden_tag() }} -
    -
    - {% trans %}New Topic{% endtrans %} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.title, div_class="col-md-12 col-sm-12 col-xs-12") }} - -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/online_users.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/online_users.html deleted file mode 100644 index 63d2451b..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/online_users.html +++ /dev/null @@ -1,24 +0,0 @@ -{% set page_title = _("Online Users") %} - -{% extends theme("layout.html") %} - - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - - -{% block content %} - -{% trans %}Online Users{% endtrans %} -{% for user in online_users %} - {% if config["REDIS_ENABLED"] %} - {{ user }}{% if not loop.last %}, {% endif %} - {% else %} - {{ user.username }}{% if not loop.last %}, {% endif %} - {% endif %} -{% endfor %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/report_post.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/report_post.html deleted file mode 100644 index b3c83b58..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/report_post.html +++ /dev/null @@ -1,23 +0,0 @@ -{% set page_title = _("Report Post") %} - -{% extends theme("layout.html") %} - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - -{% block content %} -{% from theme("macros.html") import render_field %} - -
    - {{ form.hidden_tag() }} -

    {% trans %}Report Post{% endtrans %}

    - - {{ render_field(form.reason) }} - - -
    {% trans %}Close{% endtrans %} -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_form.html deleted file mode 100644 index ce27cfa6..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_form.html +++ /dev/null @@ -1,27 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme("macros.html") import horizontal_field %} - -
    - - -
    -
    - {% trans %}Search{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.search_types)}} - {{ horizontal_field(form.search_query)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_result.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_result.html deleted file mode 100644 index 64e2fa83..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/search_result.html +++ /dev/null @@ -1,345 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, group_field, topic_pages %} - -
    - - - {% if result['post'] %} -
    -
    - {% trans %}Posts{% endtrans %} -
    -
    - {% for post in result['post'] %} -
    - -
    - - {% if post.user_id %} - - - - {% if post.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ post.user.primary_group.name }}
    - - {% if post.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ post.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ post.user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if post.user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} -
    -
    -
    - {% else %} - -
    -
    {% trans %}No posts found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['user'] %} -
    -
    - {% trans %}Users{% endtrans %} -
    -
    -
    -
    #
    -
    {% trans %}Username{% endtrans %}
    - - -
    {% trans %}Group{% endtrans %}
    -
    - {% for user in result['user'].all() %} -
    -
    {{ user.id }}
    - - - -
    {{ user.primary_group.name }}
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['topic'] %} -
    -
    - {% trans %}Topics{% endtrans %} -
    - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - - {% for topic in result['topic'].all() %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - - {% else %} - - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - {% else %} -
    -
    - {% trans %}No topics found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['forum'] %} -
    -
    - Forums -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - {% for forum in result['forum'].all() %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - - - - -
    - --- -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - - - - -
    - {% if forum.last_post_id %} -
    - - {{ forum.last_post_title|crop_title }} - -
    - -
    - {{ forum.last_post_created|time_since }} -
    - - - - {% else %} - {% trans %}No posts.{% endtrans %} - {% endif %} {# endif forum.last_post_id #} -
    - - {% endif %} {# endif forum.external #} -
    - {% else %} -
    -
    - {% trans %}No forums found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic.html deleted file mode 100644 index fe4a6e20..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic.html +++ /dev/null @@ -1,178 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    - - {% if post.user_id %} - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    - - {% if user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_controls.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_controls.html deleted file mode 100644 index 1078cf38..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_controls.html +++ /dev/null @@ -1,102 +0,0 @@ -
    -
    -
    - {{ render_pagination(posts, topic.url) }} -
    -
    - -{% if current_user.is_authenticated %} -
    -
    - {% if current_user|can_moderate(topic.forum) or current_user|delete_topic(topic)%} - -
    - - -
    - - {% endif %} - - {% if current_user.is_tracking_topic(topic) %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if current_user|post_reply(topic) %} - - {% trans %}Reply{% endtrans %} - - {% else %} -
    {% trans %}Locked{% endtrans %}
    - {% endif %} -
    -
    -{% endif %} {# end current_user.is_authenticated #} -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_horizontal.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_horizontal.html deleted file mode 100644 index acc1f166..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topic_horizontal.html +++ /dev/null @@ -1,187 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block css %} - -{% endblock %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    -
    - {% if user.avatar %} -
    - -
    - {% endif %} - -
    - - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    -
    -
    - -
    -
    -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} -
    -
    -
    - -
    - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'id': 'quickreply-editor'}) }} -
    -
    -
    - Markdown - help - emojis -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topictracker.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topictracker.html deleted file mode 100644 index 5788fe35..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/forum/topictracker.html +++ /dev/null @@ -1,124 +0,0 @@ -{% set page_title = _("Topic Tracker") %} -{% set active_forum_nav=False %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -
    -
    - -
    - - - -
    -
    - {{ render_pagination(topics, url_for('forum.topictracker')) }} -
    -
    - -
    - - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    -
    - - {% for topic, topicread in topics.items %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% else %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - -
    -
    - {% else %} -
    -
    - {% trans %}No Topics.{% endtrans %} -
    -
    - {% endfor %} -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/layout.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/layout.html deleted file mode 100644 index 49e9d59d..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/layout.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - {% block title %} - {%- if not page_title -%} - {{ flaskbb_config["PROJECT_TITLE"] }} - {{ flaskbb_config["PROJECT_SUBTITLE"] }} - {%- else -%} - {{ page_title }} - {{ flaskbb_config["PROJECT_TITLE"] }} - {%- endif -%} - {% endblock %} - - - {% block stylesheets %} - - - - - {% endblock %} - - {# for extra stylesheets. e.q. a template has to add something #} - {% block css %} - {% endblock %} - - {# for various extra things #} - {% block head_extra %} - {% endblock %} - - - - - -
    -
    - - - {% block header %} -
    -
    -
    {{ flaskbb_config["PROJECT_TITLE"] }}
    -
    {{ flaskbb_config["PROJECT_SUBTITLE"] }}
    -
    -
    - {% endblock %} - - - {% block navigation %} - - {% endblock %} - - - {% block messages %} -
    - {% include theme('flashed_messages.html') %} -
    - {% endblock %} - - - {% block content %} - {% endblock %} -
    - - - {% block footer %} - - {% endblock %} - -
    - - {% block javascript %} - - - {% endblock %} - - {# for extra scripts in other templates. #} - {% block scripts %} - {% endblock %} - - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/macros.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/macros.html deleted file mode 100644 index 501dbbdc..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/macros.html +++ /dev/null @@ -1,415 +0,0 @@ -{%- macro field_label(field) -%} - -{% endmacro %} - - -{%- macro field_description(field) -%} - {% if field.description %} - {{ field.description|safe }} - {% endif %} -{%- endmacro -%} - - -{%- macro field_errors(field) -%} - {% if field.errors %} - {%- for error in field.errors -%} - {{error}} - {%- endfor -%} - {% endif %} -{%- endmacro -%} - - -{%- macro render_quickreply(field, rows, cols, div_class='') -%} -{%- if kwargs['required'] or field.flags.required -%} - {% if div_class %} - {{ field(class=div_class, required="required", cols=cols, rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", required="required", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- else -%} - {% if div_class %} - {{ field(class=div_class, cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{# Renders a non bootstrap input field #} -{%- macro render_input_field(field, div_class='', placeholder='') -%} -{%- if div_class -%} -
    -{%- endif -%} - -{%- if placeholder -%} - {% set field_placeholder = placeholder %} -{%- else -%} - {% set field_placeholder = field.label.text %} -{%- endif -%} - -{%- if kwargs['required'] or field.flags.required -%} - {{ field(required="required", placeholder=field_placeholder) }} -{%- else -%} - {{ field(placeholder=field_placeholder) }} -{% endif %} - -{%- if div_class -%} -
    -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{%- macro render_boolean_field(field, inline=False) -%} -
    - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro render_select_field(field, div_class='', select_class="form-control") -%} -
    - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class) }} - {% else %} - {{ field(class=select_class) }} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro render_submit_field(field, div_class='', input_class='') -%} -{% if div_class %} -
    -{% endif %} - - {{ field(class=input_class or 'btn btn-success') }} - -{% if div_class %} -
    -{% endif %} -{%- endmacro -%} - - -{%- macro render_field(field, with_label=True, div_class='', rows='') -%} -
    - -
    - {% if with_label %} - - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if rows %} - {{ field(class="form-control", required="required", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", required="required", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- else -%} - {% if rows %} - {{ field(class="form-control", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro inline_field(field, label_text='', label_class='') -%} -
    - {{field.label(class="sr-only")}} - -
    - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro group_field(field, label_text='', label_class='', css_class='form-control form-grouped') -%} -
    - {{field.label(class="sr-only")}} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro input_group_field(field, label_text='', css_class='form-control') -%} - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} -{%- endmacro -%} - - -{%- macro horizontal_select_field(field, div_class='', label_class='', select_class="form-control", surrounded_div="col-sm-4") -%} -
    - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - -
    - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class, surrounded_div=surrounded_div) }} - {% else %} - {{ field(class=select_class, surrounded_div=surrounded_div) }} - {%- endif -%} -
    - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro horizontal_boolean_field(field, div_class='') -%} -
    - {{ render_boolean_field(field, **kwargs) }} -
    -{%- endmacro -%} - - -{%- macro horizontal_submit_field(field, div_class='', input_class='') -%} -
    - {{ field(class=input_class or 'btn btn-success') }} -
    -{%- endmacro -%} - - -{%- macro horizontal_field(field, label_text='', label_class='', div_class='', input_class='') -%} -
    - - {% if field.type == "BooleanField" or field.type == "SubmitField" %} - {% if field.type == "BooleanField" %} - {{ horizontal_boolean_field(field, div_class) }} - {% else %} - {{ horizontal_submit_field(field, div_class) }} - {% endif %} - {% else %} - - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, required="required", **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, required="required", **kwargs) }} - {% endif %} - {%- else -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} -
    - {% endif %} - - {{ field_description(field) }} - {{ field_errors(field) }} - -
    -{%- endmacro -%} - - -{% macro topnav(endpoint, name, icon='', id='', active=False) %} -
  • - - {% if icon %} {% endif %}{{ name }} - -
  • -{% endmacro %} - -{% macro is_active(endpoint, active=False) %} - {%- if endpoint == request.endpoint or active == True -%} - active - {%- endif -%} -{% endmacro %} - -{% macro navlink(endpoint, name, icon='', active=False) %} -
  • - {% if icon %} {% endif %} {{ name }} -
  • -{% endmacro %} - -{% macro tablink_href(endpoint, name, active=False) %} -
  • - {{ name }} -
  • -{% endmacro %} - -{% macro render_pagination(page_obj, url, ul_class='') %} -
      -
    • {% trans %}Pages{% endtrans %}:
    • - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{% macro render_topic_pagination(page_obj, url) %} - -{% endmacro %} - - -{% macro message_pagination(page_obj, url) %} -
      - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{# Generates a some kind of pagination for the posts in topic in the forum view. #} -{%- macro topic_pages(topic_obj, per_page=10) -%} -{% set topic_pages = (topic_obj.post_count / per_page)|round|int %} -{%- if topic_pages > 1 -%} -[ - {%- for page in range(0, topic_pages) -%} - {{ page+1 }}{% if not loop.last %} {% endif %} - {%- endfor -%} -] -{%- endif -%} -{%- endmacro -%} - - -{# Generates a topic url with an anchor to the post #} -{%- macro generate_post_url(topic, post, page) -%} - {%- if page > 1 -%} - {{ topic.url }}?page={{ page }}#pid{{ post.id }} - {%- else -%} - {{ topic.url }}#pid{{ post.id }} - {%- endif -%} -{%- endmacro -%} - - -{# Generates the post id for the topic. Each topic starts with the post id 1 #} -{%- macro generate_post_id(posts, page, per_page) -%} - {%- if posts.page == 1 -%} - {{ page }} - {%- else -%} - {{ page + (posts.page - 1) * per_page }} - {%- endif -%} -{%- endmacro -%} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/banned_users.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/banned_users.html deleted file mode 100644 index afc33799..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/banned_users.html +++ /dev/null @@ -1,125 +0,0 @@ -{% set page_title = _("Banned Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field,navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Banned Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    -
    - {% if current_user|can_ban_user %} -
    - - -
    - {% endif %} -
    -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/category_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/category_form.html deleted file mode 100644 index 48688240..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/category_form.html +++ /dev/null @@ -1,55 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ render_field(form.position) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    - -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forum_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forum_form.html deleted file mode 100644 index 7e7f9049..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forum_form.html +++ /dev/null @@ -1,59 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, render_boolean_field, render_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_field(form.category) }} - {{ render_field(form.position) }} - {{ render_field(form.external) }} - {{ render_field(form.moderators) }} - {{ render_boolean_field(form.show_moderators) }} - {{ render_boolean_field(form.locked) }} - {{ render_select_field(form.groups) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forums.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forums.html deleted file mode 100644 index 0dab63da..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/forums.html +++ /dev/null @@ -1,175 +0,0 @@ -{% set page_title = _("Forums") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - - -
    -
    -
    - {% trans %}Manage Forums{% endtrans %} -
    -
    -
    - {% for category in categories %} -
    -
    -
    - -
    -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - -
    -
    - {% for forum in category.forums %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Link{% endtrans %} - - -
    - - -
    -
    -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Forum{% endtrans %} - - -
    - - -
    -
    -
    - - {% endif %} {# endif forum.external #} -
    - - {% endfor %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/group_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/group_form.html deleted file mode 100644 index 69b0b236..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/group_form.html +++ /dev/null @@ -1,68 +0,0 @@ -{% set page_title = title %} -{% set active_management_group_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_boolean_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.name) }} - - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_boolean_field(form.admin) }} - {{ render_boolean_field(form.super_mod) }} - - {{ render_boolean_field(form.mod) }} - {{ render_boolean_field(form.banned) }} - {{ render_boolean_field(form.guest) }} - - {{ render_boolean_field(form.mod_edituser) }} - {{ render_boolean_field(form.mod_banuser) }} - - {{ render_boolean_field(form.editpost) }} - {{ render_boolean_field(form.deletepost) }} - {{ render_boolean_field(form.deletetopic) }} - {{ render_boolean_field(form.posttopic) }} - {{ render_boolean_field(form.postreply) }} - - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/groups.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/groups.html deleted file mode 100644 index f9c464eb..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/groups.html +++ /dev/null @@ -1,91 +0,0 @@ -{% set page_title = _("Groups") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - -
    -
    -
    - {% trans %}Groups{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Group Name{% endtrans %}
    - -
    -
    - - -
    -
    -
    - - {% for group in groups.items %} -
    -
    -
    {{ group.name }}
    - -
    - - - -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No groups found.{% endtrans %}
    -
    - {% endfor %} -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/management_layout.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/management_layout.html deleted file mode 100644 index d8e88cf2..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/management_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} - -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - -{% block breadcrumb %} -{% endblock %} - -
    -
    - -
    -
    - {% block management_content %}{% endblock %} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/overview.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/overview.html deleted file mode 100644 index 34493224..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/overview.html +++ /dev/null @@ -1,130 +0,0 @@ -{% set page_title = _("Overview") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -
    -
    -
    - {% trans %}Overview{% endtrans %} -
    -
    -
    -
    -
    -
    - -
    -

    {% trans %}Everything seems alright.{% endtrans %}

    -

    {% trans %}No new notifications.{% endtrans %}

    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - {{ all_users }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ post_count }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ topic_count }} - -
    -
    -
    -
    -
    - -
    -
    {% trans %}Statistics{% endtrans %}
    - -
    -
    {% trans %}Registered Users{% endtrans %}
    {{ all_users }}
    -
    -
    -
    {% trans %}Online Users{% endtrans %}
    {{ online_users }}
    -
    -
    -
    {% trans %}Banned Users{% endtrans %}
    {{ banned_users }}
    -
    -
    -
    {% trans %}Groups{% endtrans %}
    {{ all_groups }}
    -
    -
    -
    {% trans %}Topics{% endtrans %}
    {{ topic_count }}
    -
    -
    -
    {% trans %}Posts{% endtrans %}
    {{ post_count }}
    -
    -
    -
    {% trans %}Reports{% endtrans %}
    {{ report_count }}
    -
    -
    - -
    -
    {% trans %}Components{% endtrans %}
    - -
    -
    FlaskBB
    {{ flaskbb_version }}
    -
    - -
    -
    Flask
    {{ flask_version }}
    -
    -
    -
    Python
    {{ python_version }}
    -
    -
    - -
    -
    {% trans %}Plugins{% endtrans %}
    - - {% for plugin in plugins %} - -
    -
    {{ plugin.name }}
    {{ plugin.version }}
    -
    - {% endfor %} -
    -
    -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/plugins.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/plugins.html deleted file mode 100644 index 943d85cf..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/plugins.html +++ /dev/null @@ -1,76 +0,0 @@ -{% set page_title = _("Plugins") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination %} - -
    -
    -
    - {% trans %}Manage Plugins{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Plugin{% endtrans %}
    -
    {% trans %}Information{% endtrans %}
    -
    {% trans %}Manage{% endtrans %}
    -
    -
    - {% for plugin in plugins %} -
    -
    - {% if plugin.website %} - {{ plugin.name }} - {% else %} - {{ plugin.name }} - {% endif %} -
    -
    -
    {% trans %}Version{% endtrans %}: {{ plugin.version }}
    -
    {{ plugin.description }}
    -
    {% trans %}by{% endtrans %} {{ plugin.author }}
    -
    -
    - {% if not plugin.enabled %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if plugin.installable and not plugin.uninstallable %} -
    - - -
    - {% endif %} - {% if plugin.uninstallable %} -
    - - -
    - {% endif %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/reports.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/reports.html deleted file mode 100644 index 39c11ec4..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/reports.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = _("Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}All Reports{% endtrans %} -
    -
    -
    -
    -
    #
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    -
    {% trans %}Reporter{% endtrans %}
    - -
    - {% for report in reports.items %} -
    -
    {{ report.id }}
    - - -
    {{ report.reason }}
    -
    {{ report.reporter.username }}
    - -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/settings.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/settings.html deleted file mode 100644 index c5dd43a0..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/settings.html +++ /dev/null @@ -1,71 +0,0 @@ -{% set page_title = active_group.name %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_boolean_field, render_select_field, render_field, navlink with context %} - - -
    - -
    - -
    -
    -
    - {{ active_group.name }} -
    -
    -
    -
    -
    - - {{ form.hidden_tag() }} - {% for field in form %} - {% if field.type not in ["TextField", "IntegerField"] %} - {% if field.type == "BooleanField" %} - {{ render_boolean_field(field) }} - {% endif %} - - {% if field.type in ["SelectField", "SelectMultipleField"] %} - {{ render_select_field(field) }} - {% endif %} - {% else %} - {{ render_field(field) }} - {% endif %} - {% endfor %} - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/unread_reports.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/unread_reports.html deleted file mode 100644 index 430782c8..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/unread_reports.html +++ /dev/null @@ -1,96 +0,0 @@ -{% set page_title = _("Unread Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}Unread Reports{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    - - -
    -
    - - -
    -
    -
    - {% for report in reports.items %} -
    -
    - - -
    {{ report.reason }}
    - - -
    -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/user_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/user_form.html deleted file mode 100644 index ac574c29..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/user_form.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = title %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.username) }} - {{ horizontal_field(form.email) }} - {{ horizontal_field(form.password) }} - {{ horizontal_select_field(form.birthday, surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.primary_group) }} - {{ horizontal_field(form.secondary_groups) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/users.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/users.html deleted file mode 100644 index 31516cb9..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/management/users.html +++ /dev/null @@ -1,162 +0,0 @@ -{% set page_title = _("Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field, navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    - -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_edit_user and not user|is_admin or current_user|is_admin %} - - - - {% endif %} - - {% if current_user|can_ban_user and not user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|is_admin %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation.html deleted file mode 100644 index 44ae4914..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation.html +++ /dev/null @@ -1,146 +0,0 @@ -{% extends theme("message/message_layout.html") %} - -{% block css %} - -{% endblock %} - -{% block message_content %} -{# quick check if the conversation is a draft #} -{% if conversation.draft %} - {% set messages = [conversation.first_message] %} -{% else %} - {% set messages = conversation.messages %} -{% endif %} - -
    -
    - Subject: {{ conversation.subject }} -
    - -
    -
    - {% for message in messages %} - -
    - {% if current_user.id == message.user_id %} -
    -
    - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - {% if message.user.website %} - - {% endif %} -
    -
    - {% endif %} -
    -
    -
    - -
    - -
    - -
    - {{ message.message|markup }} -
    - - - -
    -
    -
    - {% if current_user.id != message.user_id %} -
    -
    - {% if message.user_id and message.user %} - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - - {% if message.user.website %} - - {% endif %} - - {% else %} -

    {% trans %}Deleted{% endtrans %}

    -
    {% trans %}Guest{% endtrans %}
    - {% endif %} -
    -
    - {% endif %} -
    - {% endfor %} -
    -
    -
    - -{% if not conversation.draft %} -{% from "macros.html" import render_quickreply, render_submit_field %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endif %} - -{% endblock %} - -{% block scripts %} - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation_list.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation_list.html deleted file mode 100644 index df3a1abc..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/conversation_list.html +++ /dev/null @@ -1,93 +0,0 @@ -
    -
    -
    -
    -
    - {% trans %}Conversations{% endtrans %} -
    - -
    - {{ message_count }}/{{ flaskbb_config["MESSAGE_QUOTA"] }} -
    -
    -
    -
    -
    - {% for conversation in conversations.items %} -
    - -
    - {% if conversation.from_user.avatar %} - avatar - {% else %} - avatar - {% endif %} -
    - -
    - - - -
    - From {{ conversation.from_user.username }} - to {{ conversation.to_user.username }} - on {{ conversation.date_created|format_date("%d %B %Y - %H:%M") }} -
    - -
    - {{ conversation.first_message.message|crop_title(150)|markup }} -
    - -
    - {% if include_move %} -
    - - -
    - {% endif %} - - {% if include_delete %} -
    - - -
    - {% endif %} - - {% if include_restore %} -
    - - -
    - {% endif %} - - {% if include_edit %} - - - - {% endif %} -
    -
    -
    - {% else %} -
    -
    - {% trans %}No conversations found.{% endtrans %} -
    -
    - {% endfor %} -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/drafts.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/drafts.html deleted file mode 100644 index 011efa52..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/drafts.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Drafts") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% set include_edit = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.drafts")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/inbox.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/inbox.html deleted file mode 100644 index 3a093288..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/inbox.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Inbox") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.inbox")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_form.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_form.html deleted file mode 100644 index 6354ac36..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_form.html +++ /dev/null @@ -1,45 +0,0 @@ -{% set page_title = title %} - -{% extends theme("message/message_layout.html") %} - -{% block message_content %} -{% from theme("macros.html") import render_submit_field, render_quickreply, render_field %} -
    - {{ form.hidden_tag() }} -
    -
    - {{ title }} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.to_user, div_class="col-md-6 col-sm-6 col-xs-6") }} - {{ render_field(form.subject, div_class="col-md-6 col-sm-6 col-xs-6") }} - -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    -
    - {{ render_submit_field(form.send_message, input_class="btn btn-success") }} - {{ render_submit_field(form.save_message, input_class="btn btn-info") }} -
    -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_layout.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_layout.html deleted file mode 100644 index 687e21aa..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/message_layout.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block message_content %}{% endblock %} -
    -
    -{% endblock %} - - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/sent.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/sent.html deleted file mode 100644 index 90f2290f..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/sent.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Sent Messages") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.sent")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/trash.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/trash.html deleted file mode 100644 index 943cdede..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/message/trash.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Trash") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_restore = True %} -{% set include_delete = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.trash")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/navigation.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/navigation.html deleted file mode 100644 index 8f109734..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/navigation.html +++ /dev/null @@ -1,73 +0,0 @@ -{%- from theme("macros.html") import topnav with context -%} - - diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_posts.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_posts.html deleted file mode 100644 index feb055be..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_posts.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - - -{% block profile_content %} - -
    - - {% for post in posts.items %} -
    - -
    -
    -
    - {{ post.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ post.content|markup }} -
    -
    -
    -
    - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if posts.items|length > 1 %} -
    -
    - {{ render_pagination(posts, url_for('user.view_all_posts', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_topics.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_topics.html deleted file mode 100644 index 3cad0c81..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/all_topics.html +++ /dev/null @@ -1,82 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - -{% block profile_content %} - -
    - - {% for topic in topics.items %} - -
    - - -
    -
    -
    - {{ topic.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ topic.first_post.content|markup }} -
    -
    -
    -
    - - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if topics.items|length > 1 %} -
    -
    - {{ render_pagination(topics, url_for('user.view_all_topics', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_email.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_email.html deleted file mode 100644 index d1b33059..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_email.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change E-Mail Address{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_email)}} - {{ horizontal_field(form.new_email)}} - {{ horizontal_field(form.confirm_new_email)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_password.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_password.html deleted file mode 100644 index 3e6656f3..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_password.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change Password{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_password)}} - {{ horizontal_field(form.new_password)}} - {{ horizontal_field(form.confirm_new_password)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_user_details.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_user_details.html deleted file mode 100644 index 3ed68cdb..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/change_user_details.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends theme("user/settings_layout.html") %} - -{% block settings_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field %} - -
    -
    - {% trans %}Change User Details{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_select_field(form.birthday, select_class="form-control", surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/general_settings.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/general_settings.html deleted file mode 100644 index 46d38db0..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/general_settings.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}General Settings{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.theme) }} - {{ horizontal_field(form.language) }} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile.html deleted file mode 100644 index 61faf5dc..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile.html +++ /dev/null @@ -1,90 +0,0 @@ -{% extends theme("user/profile_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_content %} - -
    - - -
    -
    - -
    -
    {% trans %}Info{% endtrans %}
    -
    -
    - {% if user.notes %} - {{ user.notes|markup }} - {% else %} -

    {% trans %}User has not added any notes about him.{% endtrans %}

    - {% endif %} -
    -
    -
    - - - {% if user.signature %} -
    -
    {% trans %}Signature{% endtrans %}
    -
    -
    - {{ user.signature|markup }} -
    -
    -
    - {% endif %} - -
    - {# Other information available for use: - # TODO: eventually use the information (i don't how i should represent it.. any ideas?) -
    -
    - {% trans %}Group{% endtrans %}: - {{ user.primary_group.name }} -
    -
    - {% trans %}Joined{% endtrans %}: - {{ user.date_joined|format_date('%b %d %Y') }} -
    -
    - {% trans %}Posts{% endtrans %}: - {{ user.post_count }} ({{ user.posts_per_day }} per day) -
    -
    - {% trans %}Last seen{% endtrans %}: - {%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Last post{% endtrans %}: - {%- if user.last_post -%} - {{ user.last_post.date_created|time_since }} - {%- else -%} - {% trans %}Never{% endtrans %} - {%- endif -%} -
    -
    - {% trans %}Location{% endtrans %}: - {%- if user.location -%} {{ user.location }} {%- else -%} {% trans %}No Info{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Birthday{% endtrans %}: - {% if user.birthday %} - {{ user.birthday|format_date('%b %d %Y') }} - {% else %} - {% trans %}No Info{% endtrans %} - {% endif %} - {% if user.gender %} - ({{ user.gender }}) - {% endif %} -
    -
    - #} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile_layout.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile_layout.html deleted file mode 100644 index 43938bea..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/profile_layout.html +++ /dev/null @@ -1,103 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} - -{% block breadcrumb %} -{% endblock %} - -
    -
    -
    -
    - -
    - {% block profile_sidebar %} -
    -
    - {% if user.avatar %} - {{ user.username }}'s Avatar - {% endif %} -
    - -
    - {{ user.primary_group.name }} -
    - -
    - {%- if user|is_online %} - online - {%- else %} - offline - {%- endif %} -
    - -
    -
    - {{ user.post_count }} posts -
    - -
    - {{ user.date_joined|format_date('%b %d %Y') }} -
    - -
    - {% if current_user.is_authenticated %} - - {% trans %}Message{% endtrans %} - - {% endif %} -
    -
    - - {% block profile_navigation %} - - {% endblock %} -
    - {% endblock %} - - {% block profile_content %} - {% endblock %} - -
    -
    -
    -
    -
    - -{% endblock %} {# content #} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/settings_layout.html b/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/settings_layout.html deleted file mode 100644 index 458e667f..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/templates/user/settings_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block settings_content %}{% endblock %} -
    -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/Gulpfile.js b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/Gulpfile.js deleted file mode 100644 index d2efef26..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/Gulpfile.js +++ /dev/null @@ -1,147 +0,0 @@ -var gulp = require('gulp-help')(require('gulp')), - bower = require('gulp-bower') - sass = require('gulp-sass'), - uglify = require('gulp-uglify'), - rename = require('gulp-rename'), - concat = require('gulp-concat'), - notify = require('gulp-notify'), - autoprefixer = require('gulp-autoprefixer'), - imagemin = require('gulp-imagemin'); - -var basicConfig = { - srcDir: './src', - destDir: './static', - bowerDir: './bower_components' -}; - -var config = { - scss: { - src: basicConfig.srcDir + '/scss', - dest: basicConfig.destDir + '/css' - }, - - imgs: { - src: basicConfig.srcDir + '/imgs', - dest: basicConfig.destDir + '/imgs' - }, - - js: { - flaskbb: basicConfig.destDir + '/js/flaskbb.js', - emoji: basicConfig.destDir + '/js/emoji.js', - editorConfig: basicConfig.destDir + '/js/editor.js', - dest: basicConfig.destDir + '/js' - }, - - editor: { - lib: basicConfig.bowerDir + '/bootstrap-markdown/js/bootstrap-markdown.js', - parser: basicConfig.bowerDir + '/marked/lib/marked.js', - textcomplete: basicConfig.bowerDir + '/jquery-textcomplete/dist/jquery.textcomplete.min.js' - }, - - jquery: basicConfig.bowerDir + '/jquery/dist/jquery.min.js', - - bootstrap: { - js: basicConfig.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.min.js', - scss: basicConfig.bowerDir + '/bootstrap-sass/assets/stylesheets' - }, - - font: { - icons: basicConfig.bowerDir + '/font-awesome/fonts/*.**', - scss: basicConfig.bowerDir + '/font-awesome/scss', - dest: basicConfig.destDir + '/fonts' - } -}; - - -gulp.task('bower', 'runs bower', function() { - return bower() - .pipe(gulp.dest(basicConfig.bowerDir)) -}); - - -gulp.task('update', 'updates the bower dependencies', function() { - return bower({ cmd: 'update' }); -}); - - -gulp.task('icons', 'copies the icons to destDir', function() { - return gulp.src(config.font.icons) - .pipe(gulp.dest(config.font.dest)); -}); - - -gulp.task('image', 'optimizes the images', function() { - return gulp.src(config.imgs.src + '/*') - .pipe(imagemin({ - progressive: true, - svgoPlugins: [ - { removeViewBox: false }, - { cleanupIDs: false } - ] - })) - .pipe(gulp.dest(config.imgs.dest)); -}); - - -gulp.task('sass', 'compiles all scss files to one css file', function () { - return gulp.src(config.scss.src + '/**/*.scss') - .pipe(sass({ - outputStyle: 'compressed', - precision: 8, - includePaths: [ - basicConfig.srcDir + '/scss', - config.bootstrap.scss, - config.font.scss - ]}) - .on('error', notify.onError(function(error) { - return "Error: " + error.message; - }))) - .pipe(autoprefixer('last 2 version')) - .pipe(rename({basename: 'styles', extname: '.min.css'})) - .pipe(gulp.dest(config.scss.dest)); -}); - - -gulp.task('main-scripts', 'concates all main js files to one js file', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.js.flaskbb]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('editor-scripts', 'concates all editor related scripts to one file', function() { - return gulp.src([config.editor.parser, - config.editor.lib, - config.editor.textcomplete, - config.js.emoji, - config.js.editorConfig]) - .pipe(concat('editor.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('vendor-scripts', 'concates all vendor js files to one js file (useful for debugging)', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.editor.parser, - config.editor.lib, - config.editor.textcomplete]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('scripts', ['main-scripts', 'editor-scripts'], function() {}); - - -gulp.task('watch', 'watches for .scss and .js changes', function() { - gulp.watch(config.sassPath + '/*.scss', ['sass']); - gulp.watch(config.jsPath + '/*.js', ['scripts']) -}); - -gulp.task('default', 'default command', ['bower', 'icons', 'sass', 'scripts', 'image']); diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/README.md b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/README.md deleted file mode 100644 index b03e5b64..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# INSTALLATION - -Make sure that you have npm (nodejs) installed. You can get it from [ -here](https://nodejs.org). - -This theme uses SASS (http://sass-lang.com/), a CSS preprocessor, for better development. - -Before you can compile the source, you need to get a few dependencies first. -Run (in the directory where **this** README is located): - - -- ``npm install`` - -and afterwards - -- ``node_modules/gulp/bin/gulp.js`` - - -# TASKS - -To get a list of all available tasks you can either read the ``Gulpfile.js`` -or see the list below: - - Usage - gulp [TASK] [OPTIONS...] - - Available tasks - bower runs bower - default default command [bower, icons, sass, scripts, image] - editor-scripts concates all editor related scripts to one file - help Display this help text. - icons copies the icons to destDir - image optimizes the images - main-scripts concates all main js files to one js file - sass compiles all scss files to one css file - scripts [main-scripts, editor-scripts] - update updates the bower dependencies - vendor-scripts concates all vendor js files to one js file (useful for debugging) - watch watches for .scss and .js changes - -You can run a task with gulp like this: - -``node_modules/gulp/bin/gulp.js watch`` - - -# CREATING YOUR OWN THEME - -If you want to create your own theme based on this theme you have to take care -of a few things first. - -1. Create a new folder within the ``themes/`` folder and give it the name -of your theme. -2. Copy the content of the ``aurora/`` folder into your folder theme's folder. -3. Create a new folder called ``static/`` in your themes folder. -4. (Optional) If you plan on modifying templates you also need to create a -``templates/`` folder where your templates are located. To edit a template, -you have to copy them over from flaskbb's template folder into your template -folder -5. Add some information about your theme using the ``info.json``. Have look at -aurora's ``info.json`` for an example. -6. Edit the ``bower.json`` and ``package.json`` to your needs. -7. Happy theming! - -In the end your folder structure should look like this: - - ── example_theme/ - ├── bower_components - │   └── ... - ├── node_modules - │   └── ... - ├── src - │   ├── styles.scss - │   ├── _aurora.scss - │   ├── _bootstrap-variables.scss - │   ├── _button.scss - │   ├── _category.scss - │   ├── _editor.scss - │   ├── _fixes.scss - │   ├── _forum.scss - │   ├── _management.scss - │   ├── _misc.scss - │   ├── _mixins.scss - │   ├── _navigation.scss - │   ├── _panel.scss - │   ├── _profile.scss - │   ├── _topic.scss - │   └── _variables.scss - ├── static - │   ├── css - │   ├── fonts - │   └── js - ├── templates - │   └── layout.html - ├── bower.json - ├── Gulpfile.js - ├── info.json - ├── LICENSE - ├── package.json - └── README.md - - -## info.json - -This file should contain following information about a theme: - -* ``"application": "flaskbb"`` - The name of the application, in our case this should always be flaskbb -* ``"identifier": "aurora"`` - The unique name of the theme. This identifier should match the themes folder name! -* ``"name": "Aurora"`` - Human readable name of the theme -* ``"author": "sh4nks"`` - The name of the author. -* ``"license": "BSD 3-Clause"`` - Every theme should include define a license under which terms the theme can be used. -* ``"description": "The default theme for FlaskBB."`` - A short description about the theme. For example: "A minimalistic blue theme". -* ``"version": "1.0.0"`` - The version of the theme. diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/bower.json b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/bower.json deleted file mode 100644 index fd652f95..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/bower.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "aurora", - "homepage": "https://github.com/sh4nks/flaskbb", - "authors": [ - "Peter Justin " - ], - "description": "The default theme for FlaskBB.", - "main": "static/styles.css", - "moduleType": [], - "keywords": [ - "flaskbb", - "theme" - ], - "license": "BSD", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "jquery": "~2.2.3", - "bootstrap-sass": "~3.3.6", - "font-awesome": "fontawesome#~4.5.0", - "bootstrap-markdown": "~2.10.0", - "marked": "~0.3.5", - "jquery-textcomplete": "~1.3.4" - } -} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/info.json b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/info.json deleted file mode 100644 index 603fb998..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "application": "flaskbb", - "identifier": "aurora", - "name": "Aurora", - "author": "sh4nks", - "license": "BSD 3-Clause", - "description": "The default theme for FlaskBB.", - "version": "1.0.0" -} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/package.json b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/package.json deleted file mode 100644 index 29c0c66c..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "flaskbb-theme-aurora", - "description": "The default theme for FlaskBB.", - "version": "1.0.0", - "license": "BSD-3-Clause", - "author": "Peter Justin", - "url": "https://flaskbb.org", - "private": true, - "devDependencies": { - "bower": "^1.6.9", - "gulp": "^3.8.11", - "gulp-autoprefixer": "^3.1.0", - "gulp-bower": "0.0.13", - "gulp-concat": "~2.6.0", - "gulp-help": "^1.6.1", - "gulp-imagemin": "^2.4.0", - "gulp-notify": "^2.0.1", - "gulp-rename": "^1.2.2", - "gulp-sass": "^2.2.0", - "gulp-uglify": "~1.5.3" - } -} diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_aurora.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_aurora.scss deleted file mode 100644 index 658aa2f6..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_aurora.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "variables"; -@import "mixins"; - -@import "misc"; -@import "fixes"; -@import "navigation"; -@import "editor"; -@import "button"; - -@import "category"; -@import "forum"; -@import "topic"; -@import "panel"; -@import "profile"; - -@import "management"; diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_bootstrap-variables.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_bootstrap-variables.scss deleted file mode 100644 index 7657e775..00000000 --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_bootstrap-variables.scss +++ /dev/null @@ -1,842 +0,0 @@ -// Override Bootstrap variables here (defaults from bootstrap-sass v3.3.5): - -// -// Variables -// -------------------------------------------------- - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -$gray-base: #000; -// $gray-darker: lighten($gray-base, 13.5%) // #222 -$gray-dark: lighten($gray-base, 20%); // #333 -// $gray: lighten($gray-base, 33.5%) // #555 -// $gray-light: lighten($gray-base, 46.7%) // #777 -// $gray-lighter: lighten($gray-base, 93.5%) // #eee - -// $brand-primary: darken(#428bca, 6.5%) // #337ab7 -// $brand-success: #5cb85c -// $brand-info: #5bc0de -// $brand-warning: #f0ad4e -// $brand-danger: #d9534f - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -//$body-bg: #f5f8fa; -// --- or --- -//$body-bg: #e8f1f2; -// --- or --- -$body-bg: #F6F9FC; -//** Global text color on ``. -$text-color: $gray-dark; - -//** Global textual link color. -// $link-color: $brand-primary -//** Link hover color set via `darken()` function. -// $link-hover-color: darken($link-color, 15%) -//** Link hover decoration. -// $link-hover-decoration: underline - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -// $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif -// $font-family-serif: Georgia, "Times New Roman", Times, serif -//** Default monospace fonts for ``, ``, and `
    `.
    -// $font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace
    -// $font-family-base:        $font-family-sans-serif
    -
    -// $font-size-base:          14px
    -// $font-size-large:         ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-small:         ceil(($font-size-base * 0.85)) // ~12px
    -
    -// $font-size-h1:            floor(($font-size-base * 2.6)) // ~36px
    -// $font-size-h2:            floor(($font-size-base * 2.15)) // ~30px
    -// $font-size-h3:            ceil(($font-size-base * 1.7)) // ~24px
    -// $font-size-h4:            ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-h5:            $font-size-base
    -// $font-size-h6:            ceil(($font-size-base * 0.85)) // ~12px
    -
    -//** Unit-less `line-height` for use in components like buttons.
    -// $line-height-base:        1.428571429 // 20/14
    -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    -// $line-height-computed:    floor(($font-size-base * $line-height-base)) // ~20px
    -
    -//** By default, this inherits from the ``.
    -// $headings-font-family:    inherit
    -// $headings-font-weight:    500
    -// $headings-line-height:    1.1
    -// $headings-color:          inherit
    -
    -//== Iconography
    -//
    -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    -
    -//** Load fonts from this directory.
    -
    -// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
    -// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
    -// $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/")
    -
    -//** File name for all font files.
    -// $icon-font-name:          "glyphicons-halflings-regular"
    -//** Element ID within SVG icon file.
    -// $icon-font-svg-id:        "glyphicons_halflingsregular"
    -
    -//== Components
    -//
    -//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    -
    -// $padding-base-vertical:     6px
    -// $padding-base-horizontal:   12px
    -
    -// $padding-large-vertical:    10px
    -// $padding-large-horizontal:  16px
    -
    -// $padding-small-vertical:    5px
    -// $padding-small-horizontal:  10px
    -
    -// $padding-xs-vertical:       1px
    -// $padding-xs-horizontal:     5px
    -
    -// $line-height-large:         1.3333333 // extra decimals for Win 8.1 Chrome
    -// $line-height-small:         1.5
    -
    -// $border-radius-base:        4px
    -// $border-radius-large:       6px
    -// $border-radius-small:       3px
    -
    -//** Global color for active items (e.g., navs or dropdowns).
    -// $component-active-color:    #fff
    -//** Global background color for active items (e.g., navs or dropdowns).
    -// $component-active-bg:       $brand-primary
    -
    -//** Width of the `border` for generating carets that indicator dropdowns.
    -// $caret-width-base:          4px
    -//** Carets increase slightly in size for larger components.
    -// $caret-width-large:         5px
    -
    -//== Tables
    -//
    -//## Customizes the `.table` component with basic values, each used across all table variations.
    -
    -//** Padding for ``s and ``s.
    -// $table-cell-padding:            8px
    -//** Padding for cells in `.table-condensed`.
    -// $table-condensed-cell-padding:  5px
    -
    -//** Default background color used for all tables.
    -// $table-bg:                      transparent
    -//** Background color used for `.table-striped`.
    -// $table-bg-accent:               #f9f9f9
    -//** Background color used for `.table-hover`.
    -// $table-bg-hover:                #f5f5f5
    -// $table-bg-active:               $table-bg-hover
    -
    -//** Border color for table and cell borders.
    -// $table-border-color:            #ddd
    -
    -//== Buttons
    -//
    -//## For each of Bootstrap's buttons, define text, background and border color.
    -
    -// $btn-font-weight:                normal
    -
    -// $btn-default-color:              #333
    -// $btn-default-bg:                 #fff
    -// $btn-default-border:             #ccc
    -
    -// $btn-primary-color:              #fff
    -// $btn-primary-bg:                 $brand-primary
    -// $btn-primary-border:             darken($btn-primary-bg, 5%)
    -
    -// $btn-success-color:              #fff
    -// $btn-success-bg:                 $brand-success
    -// $btn-success-border:             darken($btn-success-bg, 5%)
    -
    -// $btn-info-color:                 #fff
    -// $btn-info-bg:                    $brand-info
    -// $btn-info-border:                darken($btn-info-bg, 5%)
    -
    -// $btn-warning-color:              #fff
    -// $btn-warning-bg:                 $brand-warning
    -// $btn-warning-border:             darken($btn-warning-bg, 5%)
    -
    -// $btn-danger-color:               #fff
    -// $btn-danger-bg:                  $brand-danger
    -// $btn-danger-border:              darken($btn-danger-bg, 5%)
    -
    -// $btn-link-disabled-color:        $gray-light
    -
    -// Allows for customizing button radius independently from global border radius
    -// $btn-border-radius-base:         $border-radius-base
    -// $btn-border-radius-large:        $border-radius-large
    -// $btn-border-radius-small:        $border-radius-small
    -
    -//== Forms
    -//
    -//##
    -
    -//** `` background color
    -// $input-bg:                       #fff
    -//** `` background color
    -// $input-bg-disabled:              $gray-lighter
    -
    -//** Text color for ``s
    -// $input-color:                    $gray
    -//** `` border color
    -// $input-border:                   #ccc
    -
    -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
    -//** Default `.form-control` border radius
    -// This has no effect on ``s in CSS.
    -// $input-border-radius:            $border-radius-base
    -//** Large `.form-control` border radius
    -// $input-border-radius-large:      $border-radius-large
    -//** Small `.form-control` border radius
    -// $input-border-radius-small:      $border-radius-small
    -
    -//** Border color for inputs on focus
    -// $input-border-focus:             #66afe9
    -
    -//** Placeholder text color
    -// $input-color-placeholder:        #999
    -
    -//** Default `.form-control` height
    -// $input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2)
    -//** Large `.form-control` height
    -// $input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2)
    -//** Small `.form-control` height
    -// $input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2)
    -
    -//** `.form-group` margin
    -// $form-group-margin-bottom:       15px
    -
    -// $legend-color:                   $gray-dark
    -// $legend-border-color:            #e5e5e5
    -
    -//** Background color for textual input addons
    -// $input-group-addon-bg:           $gray-lighter
    -//** Border color for textual input addons
    -// $input-group-addon-border-color: $input-border
    -
    -//** Disabled cursor for form controls and buttons.
    -// $cursor-disabled:                not-allowed
    -
    -//== Dropdowns
    -//
    -//## Dropdown menu container and contents.
    -
    -//** Background for the dropdown menu.
    -// $dropdown-bg:                    #fff
    -//** Dropdown menu `border-color`.
    -// $dropdown-border:                rgba(0,0,0,.15)
    -//** Dropdown menu `border-color` **for IE8**.
    -// $dropdown-fallback-border:       #ccc
    -//** Divider color for between dropdown items.
    -// $dropdown-divider-bg:            #e5e5e5
    -
    -//** Dropdown link text color.
    -// $dropdown-link-color:            $gray-dark
    -//** Hover color for dropdown links.
    -// $dropdown-link-hover-color:      darken($gray-dark, 5%)
    -//** Hover background for dropdown links.
    -// $dropdown-link-hover-bg:         #f5f5f5
    -
    -//** Active dropdown menu item text color.
    -// $dropdown-link-active-color:     $component-active-color
    -//** Active dropdown menu item background color.
    -// $dropdown-link-active-bg:        $component-active-bg
    -
    -//** Disabled dropdown menu item background color.
    -// $dropdown-link-disabled-color:   $gray-light
    -
    -//** Text color for headers within dropdown menus.
    -// $dropdown-header-color:          $gray-light
    -
    -//** Deprecated `$dropdown-caret-color` as of v3.1.0
    -// $dropdown-caret-color:           #000
    -
    -//-- Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -//
    -// Note: These variables are not generated into the Customizer.
    -
    -// $zindex-navbar:            1000
    -// $zindex-dropdown:          1000
    -// $zindex-popover:           1060
    -// $zindex-tooltip:           1070
    -// $zindex-navbar-fixed:      1030
    -// $zindex-modal-background:  1040
    -// $zindex-modal:             1050
    -
    -//== Media queries breakpoints
    -//
    -//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    -
    -// Extra small screen / phone
    -//** Deprecated `$screen-xs` as of v3.0.1
    -// $screen-xs:                  480px
    -//** Deprecated `$screen-xs-min` as of v3.2.0
    -// $screen-xs-min:              $screen-xs
    -//** Deprecated `$screen-phone` as of v3.0.1
    -// $screen-phone:               $screen-xs-min
    -
    -// Small screen / tablet
    -//** Deprecated `$screen-sm` as of v3.0.1
    -// $screen-sm:                  768px
    -// $screen-sm-min:              $screen-sm
    -//** Deprecated `$screen-tablet` as of v3.0.1
    -// $screen-tablet:              $screen-sm-min
    -
    -// Medium screen / desktop
    -//** Deprecated `$screen-md` as of v3.0.1
    -// $screen-md:                  992px
    -// $screen-md-min:              $screen-md
    -//** Deprecated `$screen-desktop` as of v3.0.1
    -// $screen-desktop:             $screen-md-min
    -
    -// Large screen / wide desktop
    -//** Deprecated `$screen-lg` as of v3.0.1
    -// $screen-lg:                  1200px
    -// $screen-lg-min:              $screen-lg
    -//** Deprecated `$screen-lg-desktop` as of v3.0.1
    -// $screen-lg-desktop:          $screen-lg-min
    -
    -// So media queries don't overlap when required, provide a maximum
    -// $screen-xs-max:              ($screen-sm-min - 1)
    -// $screen-sm-max:              ($screen-md-min - 1)
    -// $screen-md-max:              ($screen-lg-min - 1)
    -
    -//== Grid system
    -//
    -//## Define your custom responsive grid.
    -
    -//** Number of columns in the grid.
    -// $grid-columns:              12
    -//** Padding between columns. Gets divided in half for the left and right.
    -// $grid-gutter-width:         30px
    -// Navbar collapse
    -//** Point at which the navbar becomes uncollapsed.
    -// $grid-float-breakpoint:     $screen-sm-min
    -//** Point at which the navbar begins collapsing.
    -// $grid-float-breakpoint-max: ($grid-float-breakpoint - 1)
    -
    -//== Container sizes
    -//
    -//## Define the maximum width of `.container` for different screen sizes.
    -
    -// Small screen / tablet
    -// $container-tablet:             (720px + $grid-gutter-width)
    -//** For `$screen-sm-min` and up.
    -// $container-sm:                 $container-tablet
    -
    -// Medium screen / desktop
    -// $container-desktop:            (940px + $grid-gutter-width)
    -//** For `$screen-md-min` and up.
    -// $container-md:                 $container-desktop
    -
    -// Large screen / wide desktop
    -// $container-large-desktop:      (1140px + $grid-gutter-width)
    -//** For `$screen-lg-min` and up.
    -// $container-lg:                 $container-large-desktop
    -
    -//== Navbar
    -//
    -//##
    -
    -// Basics of a navbar
    -// $navbar-height:                    50px
    -// $navbar-margin-bottom:             $line-height-computed
    -$navbar-border-radius:             0; //$border-radius-base
    -// $navbar-padding-horizontal:        floor(($grid-gutter-width / 2))
    -// $navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2)
    -// $navbar-collapse-max-height:       340px
    -
    -$navbar-default-color:             #555; //#777
    -$navbar-default-bg:                #f8f8f8;
    -$navbar-default-border:            #cad7e1; //darken($navbar-default-bg, 6.5%)
    -
    -// Navbar links
    -$navbar-default-link-color:                #555;
    -$navbar-default-link-hover-color:          #555;
    -$navbar-default-link-hover-bg:             #e7e7e7;
    -$navbar-default-link-active-color:         #555;
    -$navbar-default-link-active-bg:            #e7e7e7 ;// darken($navbar-default-bg, 6.5%)
    -$navbar-default-link-disabled-color:       #ccc;
    -$navbar-default-link-disabled-bg:          transparent;
    -
    -// Navbar brand label
    -// $navbar-default-brand-color:               $navbar-default-link-color
    -// $navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%)
    -// $navbar-default-brand-hover-bg:            transparent
    -
    -// Navbar toggle
    -// $navbar-default-toggle-hover-bg:           #ddd
    -// $navbar-default-toggle-icon-bar-bg:        #888
    -// $navbar-default-toggle-border-color:       #ddd
    -
    -//=== Inverted navbar
    -// Reset inverted navbar basics
    -// $navbar-inverse-color:                      lighten($gray-light, 15%)
    -// $navbar-inverse-bg:                         #222
    -// $navbar-inverse-border:                     darken($navbar-inverse-bg, 10%)
    -
    -// Inverted navbar links
    -// $navbar-inverse-link-color:                 lighten($gray-light, 15%)
    -// $navbar-inverse-link-hover-color:           #fff
    -// $navbar-inverse-link-hover-bg:              transparent
    -// $navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color
    -// $navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%)
    -// $navbar-inverse-link-disabled-color:        #444
    -// $navbar-inverse-link-disabled-bg:           transparent
    -
    -// Inverted navbar brand label
    -// $navbar-inverse-brand-color:                $navbar-inverse-link-color
    -// $navbar-inverse-brand-hover-color:          #fff
    -// $navbar-inverse-brand-hover-bg:             transparent
    -
    -// Inverted navbar toggle
    -// $navbar-inverse-toggle-hover-bg:            #333
    -// $navbar-inverse-toggle-icon-bar-bg:         #fff
    -// $navbar-inverse-toggle-border-color:        #333
    -
    -//== Navs
    -//
    -//##
    -
    -//=== Shared nav styles
    -// $nav-link-padding:                          10px 15px
    -// $nav-link-hover-bg:                         $gray-lighter
    -
    -// $nav-disabled-link-color:                   $gray-light
    -// $nav-disabled-link-hover-color:             $gray-light
    -
    -//== Tabs
    -// $nav-tabs-border-color:                     #ddd
    -
    -// $nav-tabs-link-hover-border-color:          $gray-lighter
    -
    -// $nav-tabs-active-link-hover-bg:             $body-bg
    -// $nav-tabs-active-link-hover-color:          $gray
    -// $nav-tabs-active-link-hover-border-color:   #ddd
    -
    -// $nav-tabs-justified-link-border-color:            #ddd
    -// $nav-tabs-justified-active-link-border-color:     $body-bg
    -
    -//== Pills
    -$nav-pills-border-radius:                    0;//$border-radius-base
    -// $nav-pills-active-link-hover-bg:            $component-active-bg
    -// $nav-pills-active-link-hover-color:         $component-active-color
    -
    -//== Pagination
    -//
    -//##
    -
    -// $pagination-color:                     $link-color
    -// $pagination-bg:                        #fff
    -// $pagination-border:                    #ddd
    -
    -// $pagination-hover-color:               $link-hover-color
    -// $pagination-hover-bg:                  $gray-lighter
    -// $pagination-hover-border:              #ddd
    -
    -// $pagination-active-color:              #fff
    -// $pagination-active-bg:                 $brand-primary
    -// $pagination-active-border:             $brand-primary
    -
    -// $pagination-disabled-color:            $gray-light
    -// $pagination-disabled-bg:               #fff
    -// $pagination-disabled-border:           #ddd
    -
    -//== Pager
    -//
    -//##
    -
    -// $pager-bg:                             $pagination-bg
    -// $pager-border:                         $pagination-border
    -// $pager-border-radius:                  15px
    -
    -// $pager-hover-bg:                       $pagination-hover-bg
    -
    -// $pager-active-bg:                      $pagination-active-bg
    -// $pager-active-color:                   $pagination-active-color
    -
    -// $pager-disabled-color:                 $pagination-disabled-color
    -
    -//== Jumbotron
    -//
    -//##
    -
    -// $jumbotron-padding:              30px
    -// $jumbotron-color:                inherit
    -// $jumbotron-bg:                   $gray-lighter
    -// $jumbotron-heading-color:        inherit
    -// $jumbotron-font-size:            ceil(($font-size-base * 1.5))
    -// $jumbotron-heading-font-size:    ceil(($font-size-base * 4.5))
    -
    -//== Form states and alerts
    -//
    -//## Define colors for form feedback states and, by default, alerts.
    -
    -// $state-success-text:             #3c763d
    -// $state-success-bg:               #dff0d8
    -// $state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%)
    -
    -// $state-info-text:                #31708f
    -// $state-info-bg:                  #d9edf7
    -// $state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%)
    -
    -// $state-warning-text:             #8a6d3b
    -// $state-warning-bg:               #fcf8e3
    -// $state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%)
    -
    -// $state-danger-text:              #a94442
    -// $state-danger-bg:                #f2dede
    -// $state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%)
    -
    -//== Tooltips
    -//
    -//##
    -
    -//** Tooltip max width
    -// $tooltip-max-width:           200px
    -//** Tooltip text color
    -// $tooltip-color:               #fff
    -//** Tooltip background color
    -// $tooltip-bg:                  #000
    -// $tooltip-opacity:             .9
    -
    -//** Tooltip arrow width
    -// $tooltip-arrow-width:         5px
    -//** Tooltip arrow color
    -// $tooltip-arrow-color:         $tooltip-bg
    -
    -//== Popovers
    -//
    -//##
    -
    -//** Popover body background color
    -// $popover-bg:                          #fff
    -//** Popover maximum width
    -// $popover-max-width:                   276px
    -//** Popover border color
    -// $popover-border-color:                rgba(0,0,0,.2)
    -//** Popover fallback border color
    -// $popover-fallback-border-color:       #ccc
    -
    -//** Popover title background color
    -// $popover-title-bg:                    darken($popover-bg, 3%)
    -
    -//** Popover arrow width
    -// $popover-arrow-width:                 10px
    -//** Popover arrow color
    -// $popover-arrow-color:                 $popover-bg
    -
    -//** Popover outer arrow width
    -// $popover-arrow-outer-width:           ($popover-arrow-width + 1)
    -//** Popover outer arrow color
    -// $popover-arrow-outer-color:           fade_in($popover-border-color, 0.05)
    -//** Popover outer arrow fallback color
    -// $popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%)
    -
    -//== Labels
    -//
    -//##
    -
    -//** Default label background color
    -// $label-default-bg:            $gray-light
    -//** Primary label background color
    -// $label-primary-bg:            $brand-primary
    -//** Success label background color
    -// $label-success-bg:            $brand-success
    -//** Info label background color
    -// $label-info-bg:               $brand-info
    -//** Warning label background color
    -// $label-warning-bg:            $brand-warning
    -//** Danger label background color
    -// $label-danger-bg:             $brand-danger
    -
    -//** Default label text color
    -// $label-color:                 #fff
    -//** Default text color of a linked label
    -// $label-link-hover-color:      #fff
    -
    -//== Modals
    -//
    -//##
    -
    -//** Padding applied to the modal body
    -// $modal-inner-padding:         15px
    -
    -//** Padding applied to the modal title
    -// $modal-title-padding:         15px
    -//** Modal title line-height
    -// $modal-title-line-height:     $line-height-base
    -
    -//** Background color of modal content area
    -// $modal-content-bg:                             #fff
    -//** Modal content border color
    -// $modal-content-border-color:                   rgba(0,0,0,.2)
    -//** Modal content border color **for IE8**
    -// $modal-content-fallback-border-color:          #999
    -
    -//** Modal backdrop background color
    -// $modal-backdrop-bg:           #000
    -//** Modal backdrop opacity
    -// $modal-backdrop-opacity:      .5
    -//** Modal header border color
    -// $modal-header-border-color:   #e5e5e5
    -//** Modal footer border color
    -// $modal-footer-border-color:   $modal-header-border-color
    -
    -// $modal-lg:                    900px
    -// $modal-md:                    600px
    -// $modal-sm:                    300px
    -
    -//== Alerts
    -//
    -//## Define alert colors, border radius, and padding.
    -
    -// $alert-padding:               15px
    -// $alert-border-radius:         $border-radius-base
    -// $alert-link-font-weight:      bold
    -
    -// $alert-success-bg:            $state-success-bg
    -// $alert-success-text:          $state-success-text
    -// $alert-success-border:        $state-success-border
    -
    -// $alert-info-bg:               $state-info-bg
    -// $alert-info-text:             $state-info-text
    -// $alert-info-border:           $state-info-border
    -
    -// $alert-warning-bg:            $state-warning-bg
    -// $alert-warning-text:          $state-warning-text
    -// $alert-warning-border:        $state-warning-border
    -
    -// $alert-danger-bg:             $state-danger-bg
    -// $alert-danger-text:           $state-danger-text
    -// $alert-danger-border:         $state-danger-border
    -
    -//== Progress bars
    -//
    -//##
    -
    -//** Background color of the whole progress component
    -// $progress-bg:                 #f5f5f5
    -//** Progress bar text color
    -// $progress-bar-color:          #fff
    -//** Variable for setting rounded corners on progress bar.
    -// $progress-border-radius:      $border-radius-base
    -
    -//** Default progress bar color
    -// $progress-bar-bg:             $brand-primary
    -//** Success progress bar color
    -// $progress-bar-success-bg:     $brand-success
    -//** Warning progress bar color
    -// $progress-bar-warning-bg:     $brand-warning
    -//** Danger progress bar color
    -// $progress-bar-danger-bg:      $brand-danger
    -//** Info progress bar color
    -// $progress-bar-info-bg:        $brand-info
    -
    -//== List group
    -//
    -//##
    -
    -//** Background color on `.list-group-item`
    -// $list-group-bg:                 #fff
    -//** `.list-group-item` border color
    -// $list-group-border:             #ddd
    -//** List group border radius
    -// $list-group-border-radius:      $border-radius-base
    -
    -//** Background color of single list items on hover
    -// $list-group-hover-bg:           #f5f5f5
    -//** Text color of active list items
    -// $list-group-active-color:       $component-active-color
    -//** Background color of active list items
    -// $list-group-active-bg:          $component-active-bg
    -//** Border color of active list elements
    -// $list-group-active-border:      $list-group-active-bg
    -//** Text color for content within active list items
    -// $list-group-active-text-color:  lighten($list-group-active-bg, 40%)
    -
    -//** Text color of disabled list items
    -// $list-group-disabled-color:      $gray-light
    -//** Background color of disabled list items
    -// $list-group-disabled-bg:         $gray-lighter
    -//** Text color for content within disabled list items
    -// $list-group-disabled-text-color: $list-group-disabled-color
    -
    -// $list-group-link-color:         #555
    -// $list-group-link-hover-color:   $list-group-link-color
    -// $list-group-link-heading-color: #333
    -
    -//== Panels
    -//
    -//##
    -
    -// $panel-bg:                    #fff
    -
    -// $panel-body-padding:          15px
    -// $panel-heading-padding:       10px 15px
    -// $panel-footer-padding:        $panel-heading-padding
    -$panel-border-radius:         0; //$border-radius-base
    -
    -//** Border color for elements within panels
    -$panel-inner-border:          #cad7e1; // #ddd
    -// $panel-footer-bg:             #f5f5f5;
    -
    -// $panel-default-text:          $gray-dark
    -$panel-default-border:        #cad7e1; //#ddd
    -// $panel-default-heading-bg:    #f5f5f5;
    -
    -// $panel-primary-text:          #fff
    -// $panel-primary-border:        $brand-primary
    -// $panel-primary-heading-bg:    $brand-primary
    -
    -// $panel-success-text:          $state-success-text
    -// $panel-success-border:        $state-success-border
    -// $panel-success-heading-bg:    $state-success-bg
    -
    -// $panel-info-text:             $state-info-text
    -// $panel-info-border:           $state-info-border
    -// $panel-info-heading-bg:       $state-info-bg
    -
    -// $panel-warning-text:          $state-warning-text
    -// $panel-warning-border:        $state-warning-border
    -// $panel-warning-heading-bg:    $state-warning-bg
    -
    -// $panel-danger-text:           $state-danger-text
    -// $panel-danger-border:         $state-danger-border
    -// $panel-danger-heading-bg:     $state-danger-bg
    -
    -//== Thumbnails
    -//
    -//##
    -
    -//** Padding around the thumbnail image
    -// $thumbnail-padding:           4px
    -//** Thumbnail background color
    -// $thumbnail-bg:                $body-bg
    -//** Thumbnail border color
    -// $thumbnail-border:            #ddd
    -//** Thumbnail border radius
    -// $thumbnail-border-radius:     $border-radius-base
    -
    -//** Custom text color for thumbnail captions
    -// $thumbnail-caption-color:     $text-color
    -//** Padding around the thumbnail caption
    -// $thumbnail-caption-padding:   9px
    -
    -//== Wells
    -//
    -//##
    -
    -// $well-bg:                     #f5f5f5
    -// $well-border:                 darken($well-bg, 7%)
    -
    -//== Badges
    -//
    -//##
    -
    -// $badge-color:                 #fff
    -//** Linked badge text color on hover
    -// $badge-link-hover-color:      #fff
    -// $badge-bg:                    $gray-light
    -
    -//** Badge text color in active nav link
    -// $badge-active-color:          $link-color
    -//** Badge background color in active nav link
    -// $badge-active-bg:             #fff
    -
    -// $badge-font-weight:           bold
    -// $badge-line-height:           1
    -// $badge-border-radius:         10px
    -
    -//== Breadcrumbs
    -//
    -//##
    -
    -// $breadcrumb-padding-vertical:   8px
    -// $breadcrumb-padding-horizontal: 15px
    -//** Breadcrumb background color
    -// $breadcrumb-bg:                 #f5f5f5
    -//** Breadcrumb text color
    -// $breadcrumb-color:              #ccc
    -//** Text color of current page in the breadcrumb
    -// $breadcrumb-active-color:       $gray-light
    -//** Textual separator for between breadcrumb elements
    -// $breadcrumb-separator:          "/"
    -
    -//== Carousel
    -//
    -//##
    -
    -// $carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6)
    -
    -// $carousel-control-color:                      #fff
    -// $carousel-control-width:                      15%
    -// $carousel-control-opacity:                    .5
    -// $carousel-control-font-size:                  20px
    -
    -// $carousel-indicator-active-bg:                #fff
    -// $carousel-indicator-border-color:             #fff
    -
    -// $carousel-caption-color:                      #fff
    -
    -//== Close
    -//
    -//##
    -
    -// $close-font-weight:           bold
    -// $close-color:                 #000
    -// $close-text-shadow:           0 1px 0 #fff
    -
    -//== Code
    -//
    -//##
    -
    -// $code-color:                  #c7254e
    -// $code-bg:                     #f9f2f4
    -
    -// $kbd-color:                   #fff
    -// $kbd-bg:                      #333
    -
    -// $pre-bg:                      #f5f5f5
    -// $pre-color:                   $gray-dark
    -// $pre-border-color:            #ccc
    -// $pre-scrollable-max-height:   340px
    -
    -//== Type
    -//
    -//##
    -
    -//** Horizontal offset for forms and lists.
    -// $component-offset-horizontal: 180px
    -//** Text muted color
    -// $text-muted:                  $gray-light
    -//** Abbreviations and acronyms border color
    -// $abbr-border-color:           $gray-light
    -//** Headings small color
    -// $headings-small-color:        $gray-light
    -//** Blockquote small color
    -// $blockquote-small-color:      $gray-light
    -//** Blockquote font size
    -// $blockquote-font-size:        ($font-size-base * 1.25)
    -//** Blockquote border color
    -// $blockquote-border-color:     $gray-lighter
    -//** Page header border color
    -// $page-header-border-color:    $gray-lighter
    -//** Width of horizontal description list titles
    -// $dl-horizontal-offset:        $component-offset-horizontal
    -//** Horizontal line color.
    -// $hr-border:                   $gray-lighter
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_button.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_button.scss
    deleted file mode 100644
    index 3417e117..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_button.scss
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -// a "link" that is actually a button
    -.btn.btn-link {
    -    border: none;
    -    color: #337ab7;
    -    text-decoration: none;
    -    padding: 0;
    -    // for some (yet for me unkown) reasons this required to be on the same
    -    // height as for normal links (happens when using the inline-forms)
    -    margin-bottom: 2px;
    -
    -    &:focus, &:hover {
    -    color: #23527c;
    -    text-decoration: underline;
    -}
    -}
    -
    -.btn-icon {
    -    font-family: 'FontAwesome';
    -    font-size: 1.15em;
    -    line-height: 1.50em;
    -    font-weight: normal;
    -    background: none;
    -    border-radius: 0;
    -}
    -
    -.icon-delete:before {
    -    content: "\f014";
    -    color: $red;
    -}
    -
    -.icon-report:before {
    -    content: "\f024";
    -    color: $orange;
    -}
    -
    -.icon-edit:before {
    -    content: "\f040";
    -    color: $green;
    -}
    -
    -.icon-reply:before {
    -    content: "\f10e";
    -    color: $blue;
    -}
    -
    -.icon-replyall:before {
    -    content: "\f122";
    -    color: $light-blue;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_category.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_category.scss
    deleted file mode 100644
    index b9fc7fca..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_category.scss
    +++ /dev/null
    @@ -1,62 +0,0 @@
    -// category specific values
    -.category-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .category-body {
    -        padding: 0;
    -    }
    -
    -    .category-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .forum-name, .forum-stats, .forum-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .category-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .forum-info {
    -        position: relative;
    -
    -        .forum-status {
    -            float: left;
    -            font-size: 2em;
    -            padding-right: 0.5em;
    -        }
    -
    -        .forum-name {
    -            font-weight: bold;
    -        }
    -
    -        .forum-moderators {
    -            font-style: italic;
    -        }
    -    }
    -
    -    .forum-last-post {
    -        .last-post-title {
    -            font-weight: bold;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_editor.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_editor.scss
    deleted file mode 100644
    index 2e317bc3..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_editor.scss
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -/* Markdown Editor */
    -.editor-box .editor-submit .btn {
    -    margin: 0.75em 0.25em 0 0;
    -}
    -
    -.editor-box > .quickreply {
    -    padding: 0;
    -}
    -
    -.editor {
    -    min-height: 0;
    -
    -    .editor-options {
    -        margin-top: 0.5em;
    -    }
    -
    -    .new-message {
    -        background: #fff;
    -        border: 0;
    -        height: 12em;
    -        outline: none;
    -        width: 100%
    -    }
    -}
    -
    -.editor > .md-editor {
    -    border-color: $border-color;
    -
    -    &.active {
    -        border-color: $border-color;
    -    }
    -
    -    & > .md-footer, & >.md-header {
    -        background: $navigation-bg;
    -    }
    -
    -    & >textarea {
    -        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    -        font-size: 1em;
    -        border-top: 1px solid $border-color;
    -        border-bottom: none;
    -        background: #fff;
    -        padding: 0 0.25em;
    -    }
    -
    -    & >.md-preview {
    -        border-top: 1px solid $border-color;
    -        border-right: 1px solid $border-color;
    -        border-bottom: none;
    -        padding: 0 0.25em;
    -        background: #eee;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_fixes.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_fixes.scss
    deleted file mode 100644
    index 03d7321e..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_fixes.scss
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -// fix for button in 
    -.navbar {
    -    .navbar-btn {
    -        &>a.btn-primary {
    -          color: #fff;
    -          background-color: #337ab7;
    -          border-color: #2e6da4;
    -        }
    -        &>a.btn-primary:focus {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #122b40;
    -        }
    -        &>a.btn-primary:hover {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #204d74;
    -        }
    -    }
    -
    -    .navbar-nav .user-btn {
    -        padding-right: 2em;
    -        padding-left: 1em;
    -    }
    -}
    -
    -
    -// apply the same changes as for "a" for the btn-link
    -.dropdown-menu {
    -    & > li .btn-link {
    -        display: block;
    -        padding: 3px 20px;
    -        width: 100%;
    -        text-align: left;
    -        clear: both;
    -        font-weight: normal;
    -        line-height: 1.42857143;
    -        color: #333;
    -        white-space: nowrap;
    -
    -        &:hover, &:focus {
    -            color: #262626;
    -            text-decoration: none;
    -            background-color: #f5f5f5;
    -        }
    -    }
    -
    -    & > .active {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #fff;
    -            text-decoration: none;
    -            background-color: #337ab7;
    -            outline: 0;
    -        }
    -    }
    -
    -    & > .disabled {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #777;
    -            text-decoration: none;
    -            cursor: not-allowed;
    -            background-color: transparent;
    -            background-image: none;
    -            filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_forum.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_forum.scss
    deleted file mode 100644
    index b21ba8c3..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_forum.scss
    +++ /dev/null
    @@ -1,64 +0,0 @@
    -// forum specific values
    -.forum-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .forum-body {
    -        padding: 0;
    -    }
    -
    -    .forum-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .topic-name, .topic-stats, .topic-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .topic-info {
    -        position: relative;
    -
    -        .topic-status {
    -            float: left;
    -            font-size: 1.5em;
    -            padding-right: 0.5em;
    -
    -            // why is this?
    -            .topic-locked {
    -                font-size: 1.5em;
    -            }
    -
    -        }
    -
    -        .topic-name {
    -            font-weight: bold;
    -        }
    -
    -        .topic-pages {
    -            font-weight: normal;
    -            font-size: small;
    -        }
    -    }
    -
    -    .forum-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_management.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_management.scss
    deleted file mode 100644
    index 7cbed54c..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_management.scss
    +++ /dev/null
    @@ -1,206 +0,0 @@
    -// Management Panel
    -.management-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .search-form {
    -        display: none;
    -        padding: 15px;
    -    }
    -
    -    .management-head {
    -        background-color: $blue;
    -    }
    -    .management-body {
    -        padding: 0;
    -    }
    -}
    -
    -.panel.settings-panel {
    -    border: none;
    -    margin-bottom: 0;
    -
    -    .settings-head {
    -        background-color: $panel-hover;
    -        border-bottom: 1px solid $border-color;
    -    }
    -    .settings-body {
    -        padding: 0;
    -        .settings-form {
    -            padding-top: 10px;
    -        }
    -    }
    -
    -    .settings-meta {
    -        background-color: $panel-meta-bg;
    -        margin: 0;
    -        padding: 5px 0 5px 0;
    -        border-bottom: 1px solid $border-color;
    -        .meta-item {
    -            font-weight: bold;
    -        }
    -    }
    -    .settings-content > .category-panel {
    -        border-left: none;
    -        border-right: none;
    -        border-bottom: none;
    -        margin-bottom: 0;
    -        &:first-child {
    -            border-top: none;
    -        }
    -        &:last-child {
    -            border-bottom: 1px solid $panel-border;
    -            margin-bottom: 1em;
    -        }
    -    }
    -    .settings-row {
    -        padding: 5px 0 5px 0;
    -        margin: 0;
    -
    -        &:last-child {
    -            padding-bottom: 10px;
    -            border-bottom: none !important;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -
    -        .btn-icon {
    -            padding: 0 6px;
    -        }
    -    }
    -
    -    .settings-footer {
    -        padding-top: 5px;
    -        padding-left: 5px;
    -        padding-bottom: 0px;
    -        .pagination {
    -            margin: 0;
    -        }
    -    }
    -}
    -
    -.with-left-border {
    -    border-left: 1px solid $border-color;
    -}
    -
    -.with-border-bottom {
    -    border-bottom: 1px solid $border-color;
    -}
    -
    -.stats {
    -    margin-top: 15px;
    -    margin-bottom: 15px;
    -    .stats-widget {
    -        text-align: center;
    -        padding-top: 20px;
    -        padding-bottom: 20px;
    -        //background-color: $panel-hover;
    -        border: 1px solid $border-color;
    -
    -        .icon {
    -            display: block;
    -            font-size: 96px;
    -            line-height: 96px;
    -            margin-bottom: 10px;
    -            text-align: center;
    -        }
    -        var {
    -            display: block;
    -            height: 64px;
    -            font-size: 64px;
    -            line-height: 64px;
    -            font-style: normal;
    -        }
    -        label {
    -            font-size: 17px;
    -        }
    -        .options {
    -            margin-top: 10px;
    -        }
    -    }
    -
    -    .stats-heading {
    -        font-size: 1.25em;
    -        font-weight: bold;
    -        margin: 0;
    -        border-bottom: 1px solid $border-color;
    -    }
    -
    -    .stats-row {
    -        margin: 0 0 15px 0;
    -        padding-bottom: 15px;
    -        //border-bottom: 1px solid $border-color;
    -
    -        .stats-item {
    -            margin: 0;
    -            padding-top: 5px;
    -        }
    -
    -        &:last-child {
    -            border: none;
    -        }
    -    }
    -}
    -
    -.alert-message {
    -    margin: 0;
    -    padding: 20px;
    -    border-radius: 5px;
    -    border: 1px solid $dark-green;
    -    border-left: 3px solid #eee;
    -    h4 {
    -        margin-top: 0;
    -        margin-bottom: 5px;
    -    }
    -    p:last-child {
    -        margin-bottom: 0;
    -    }
    -    code {
    -        background-color: #fff;
    -        border-radius: 3px;
    -    }
    -
    -    &.alert-message-success {
    -        background-color: #F4FDF0;
    -        border-color: $dark-green;
    -    }
    -    &.alert-message-success h4 {
    -        color: $dark-green;
    -    }
    -    &.alert-message-danger {
    -        background-color: #fdf7f7;
    -        border-color: $red;
    -    }
    -    &.alert-message-danger h4 {
    -        color: $red;
    -    }
    -    &.alert-message-warning {
    -        background-color: #fcf8f2;
    -        border-color: $orange;
    -    }
    -    &.alert-message-warning h4 {
    -        color: $orange;
    -    }
    -    &.alert-message-info {
    -        background-color: #f4f8fa;
    -        border-color: $light-blue;
    -    }
    -    &.alert-message-info h4 {
    -        color: $light-blue;
    -    }
    -    &.alert-message-default {
    -        background-color: #EEE;
    -        border-color: $gray;
    -    }
    -    &.alert-message-default h4 {
    -        color: #000;
    -    }
    -    &.alert-message-notice {
    -        background-color: #FCFCDD;
    -        border-color: #BDBD89;
    -    }
    -    &.alert-message-notice h4 {
    -        color: #444;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_misc.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_misc.scss
    deleted file mode 100644
    index fb117e04..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_misc.scss
    +++ /dev/null
    @@ -1,132 +0,0 @@
    -html {
    -    // push footer to bottom
    -    position: relative;
    -    min-height: 100%;
    -}
    -
    -body {
    -    // Margin bottom by footer height
    -    margin-bottom: 60px;
    -}
    -
    -.emoji {
    -    vertical-align: middle;
    -    width: 20px;
    -    height: 20px;
    -}
    -
    -.flaskbb-footer {
    -    position: absolute;
    -    bottom: 0;
    -    // Set the fixed height of the footer here
    -    height: 60px;
    -    width: 100%;
    -    // use the same width as container
    -    padding-top: 1em;
    -}
    -
    -.flaskbb-layout {
    -    padding-top: 20px;
    -}
    -
    -.flaskbb-header {
    -    color: #fff;
    -    text-align: left;
    -    text-shadow: 0 1px 0 rgba(0,0,0,.1);
    -    background-color: $header-background-primary;
    -    background-image: -webkit-linear-gradient(top, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-image: linear-gradient(to bottom, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-repeat: repeat-x;
    -    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);
    -    border: 1px solid $border-color;
    -    border-bottom: 0;
    -
    -    position: relative;
    -    height: 12em;
    -    padding: 2.5em 2em;
    -    margin-top: 2.5em;
    -
    -    .flaskbb-meta {
    -        .flaskbb-title {
    -            color: $header-title-color;
    -            font-size: 3em;
    -            font-weight: bold;
    -        }
    -        .flaskbb-subtitle {
    -            color: $header-subtitle-color;
    -        }
    -    }
    -}
    -
    -.flaskbb-breadcrumb {
    -    border: 1px solid $border-color;
    -    border-radius: 0;
    -}
    -
    -p.flaskbb-stats {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -
    -.controls-row {
    -    padding: 0.5em 0;
    -    margin: 0;
    -
    -    .pagination {
    -        padding: 0;
    -        margin: 0;
    -    }
    -}
    -
    -.controls-col {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -.settings-col {
    -    padding: 0;
    -}
    -
    -.inline-form {
    -    display: inline;
    -}
    -
    -.cheatsheet {
    -    h2 {
    -        text-align: center;
    -        font-size: 1.6em;
    -        -webkit-border-radius: 2px;
    -        -webkit-background-clip: padding-box;
    -        -moz-border-radius: 2px;
    -        -moz-background-clip: padding;
    -        padding: 10px 0;
    -    }
    -    .emojis {
    -        text-align: center;
    -    }
    -
    -    .typography {
    -        -webkit-column-count: 3;
    -           -moz-column-count: 3;
    -                column-count: 3;
    -        -webkit-column-gap: 4px;
    -           -moz-column-gap: 4px;
    -                column-gap: 4px;
    -        text-align: center;
    -    }
    -    .code-example {
    -        width: 100%;
    -        position: relative;
    -        margin-bottom: 1em;
    -        -webkit-column-count: 2;
    -           -moz-column-count: 2;
    -                column-count: 2;
    -        -webkit-column-gap: -4px;
    -           -moz-column-gap: -4px;
    -                column-gap: -4px;
    -        .markup {
    -            padding: 0;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_mixins.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_mixins.scss
    deleted file mode 100644
    index 058304a2..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_mixins.scss
    +++ /dev/null
    @@ -1 +0,0 @@
    -@import "bootstrap/mixins/_panels.scss";
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_navigation.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_navigation.scss
    deleted file mode 100644
    index 483ec7c6..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_navigation.scss
    +++ /dev/null
    @@ -1,125 +0,0 @@
    -/* The private messages in the main navbar */
    -.dropdown-messages {
    -    min-width: 15em;
    -    .message-subject {
    -        font-style: italic;
    -    }
    -    .author-name {
    -        font-weight: bold;
    -    }
    -}
    -
    -/* Sidebar Nav */
    -.sidebar {
    -    padding-top: 1em;
    -    padding-bottom: 1em;
    -    text-shadow: none;
    -    background-color: $navigation-bg;
    -    border: 1px solid $border-color;
    -
    -    .sidenav-header {
    -        display: block;
    -        padding-left: 1.25em;
    -        padding-bottom: 1em;
    -        font-size: 12px;
    -        font-weight: bold;
    -        line-height: 20px;
    -        color: $navigation-color;
    -        text-transform: uppercase;
    -    }
    -
    -    .sidenav-btn {
    -        padding-bottom: 1em;
    -        text-transform: uppercase;
    -        text-align: center;
    -    }
    -
    -    .nav > li > a {
    -        display: block;
    -    }
    -
    -    .nav > li > a:hover,
    -    .nav > li > a:focus {
    -        text-decoration: none;
    -        background-color: $navigation-hover-color;
    -    }
    -
    -    .nav > .active > a,
    -    .nav > .active:hover > a,
    -    .nav > .active:focus > a {
    -        font-weight: normal;
    -        color: $navigation-color;
    -        background-color: $navigation-hover-color;
    -    }
    -}
    -
    -.nav-sidebar {
    -    width: 100%;
    -    padding: 0;
    -    a {
    -        color: $navigation-color;
    -    }
    -    .active a {
    -        cursor: default;
    -        background-color: $navigation-bg;
    -        color: $navigation-color;
    -    }
    -
    -    li.active {
    -        border-top: 1px solid $border-color;
    -        border-bottom: 1px solid $border-color;
    -        &:first-child {
    -            border-top: none;
    -        }
    -    }
    -    .active a:hover {
    -        background-color: $navigation-bg;
    -    }
    -}
    -
    -
    -/* Panel tabs */
    -.panel {
    -    &.panel-tabs {
    -        > .panel-heading {
    -            padding: 0;
    -            font-weight: 500;
    -        }
    -        .nav-tabs {
    -            border-bottom: none;
    -        }
    -        .nav-justified {
    -            //padding-bottom: 1px;
    -            margin-bottom: -1px;
    -        }
    -    }
    -}
    -
    -.panel-tabs {
    -    .nav-tabs {
    -        &.nav-justified > li > a {
    -        }
    -        // non-active and hover
    -        > li {
    -            a {
    -                color: $header-subtitle-color;
    -                border: 1px solid $blue;
    -
    -                // different background color when hovering
    -                &:hover, &:focus {
    -                    background-color: $fresh-blue;
    -                    border: 1px solid $fresh-blue;
    -                }
    -            }
    -        }
    -        // active and hover
    -        > li.active {
    -            a, a:hover, a:focus {
    -                color: $header-title-color;
    -                background-color: $fresh-blue;
    -                border: 1px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_panel.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_panel.scss
    deleted file mode 100644
    index 255fd97d..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_panel.scss
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -// default values for the panels
    -.page-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .page-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -    }
    -
    -    .page-body {
    -        padding: 0;
    -
    -        // if no meta information is to show, reset padding-top
    -        & > :not(.page-meta) {
    -            padding-top: 0.5em;
    -        }
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .page-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .row > .page-row {
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_profile.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_profile.scss
    deleted file mode 100644
    index d4e4514b..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_profile.scss
    +++ /dev/null
    @@ -1,214 +0,0 @@
    -.profile-sidebar {
    -    padding: 7px 0;
    -
    -    ul li {
    -        &:last-child {
    -            border-bottom: none;
    -        }
    -
    -        a {
    -            color: $navigation-color;
    -            font-size: 14px;
    -            font-weight: 400;
    -            border-left: 2px solid transparent;
    -
    -            &:hover, &:visited {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -
    -            i {
    -                margin-right: 8px;
    -                font-size: 14px;
    -            }
    -        }
    -
    -        &.active {
    -            a {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    -.page-body.profile-body {
    -    background-color: $author-box-bg;
    -}
    -
    -.profile-content {
    -    background-color: #fff;
    -    border-left: 1px solid $border-color;
    -    min-height: 32.25em;
    -
    -    .topic-head {
    -        font-weight: normal;
    -    }
    -
    -    .topic-created {
    -        font-size: 0.75em;
    -        padding-bottom: 0.75em;
    -    }
    -}
    -
    -.profile-picture {
    -    text-align: center;
    -
    -    img {
    -        float: none;
    -        margin: 0 auto;
    -        width: 50%;
    -        height: 50%;
    -        -webkit-border-radius: 50% !important;
    -        -moz-border-radius: 50% !important;
    -        border-radius: 50% !important;
    -    }
    -}
    -
    -.profile-sidebar-stats {
    -    text-shadow: 0 1px 0 #fff;
    -}
    -
    -.profile-groupname,
    -.profile-online,
    -.profile-location,
    -.profile-posts,
    -.profile-date,
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 0.2em;
    -}
    -
    -
    -.profile-groupname {
    -    text-align: center;
    -    margin-top: 0.75em;
    -    color: $fresh-blue;
    -    font-size: 1.2em;
    -    font-weight: 600;
    -}
    -
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 10px;
    -    margin-bottom: 15px;
    -
    -    .btn {
    -        text-shadow: none;
    -        text-transform: uppercase;
    -        font-size: 11px;
    -        font-weight: 700;
    -        padding: 6px 15px;
    -        margin-right: 5px;
    -    }
    -}
    -
    -// conversation specific values
    -.conversation-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .conversation-body {
    -        padding: 0;
    -    }
    -
    -    .conversation-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    -
    -.conversation-panel {
    -    .conversation-body {
    -        .row > .conversation-row {
    -            &:not(:last-child) {
    -                border-bottom: 1px solid $panel-border;
    -            }
    -        }
    -    }
    -
    -    .conversation-message {
    -        min-height: 16em;
    -        padding: 0.5em;
    -        border: 1px solid $border-color;
    -        border-radius: 5px;
    -
    -        .message-content {
    -            padding-top: 0.5em;
    -        }
    -
    -        .message-footer {
    -            width: 100%;
    -            bottom: 0;
    -            position: absolute;
    -            .right {
    -                margin-right: 46px;
    -                float: right;
    -            }
    -            .left {
    -                float: left;
    -            }
    -        }
    -
    -    }
    -
    -    @media (min-width: 992px) {
    -        .arrow:after, .arrow:before {
    -            content: "";
    -            position: absolute;
    -            width: 0;
    -            height: 0;
    -            border: solid transparent;
    -        }
    -
    -        .arrow.left:after, .arrow.left:before {
    -            border-left: 0;
    -        }
    -
    -        // Left Arrow
    -        .arrow.left:before {
    -            left: 0px;
    -            top: 40px;
    -            border-right-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.left:after {
    -            left: 1px;
    -            top: 41px;
    -            border-right-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -
    -        // Right Arrow
    -        .arrow.right:before {
    -            right: -16px;
    -            top: 40px;
    -            border-left-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.right:after {
    -            right: -14px;
    -            top: 41px;
    -            border-left-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -    }
    -}
    -
    -.conversation-reply {
    -    padding-top: 2em;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_topic.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_topic.scss
    deleted file mode 100644
    index e672583d..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_topic.scss
    +++ /dev/null
    @@ -1,159 +0,0 @@
    -.topic-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .topic-body {
    -        padding-top: 0;
    -        padding-bottom: 0;
    -    }
    -}
    -
    -.post-row {
    -    background: $author-box-bg;
    -    margin-top: 0;
    -    margin-bottom: 0;
    -    padding-top: 0;
    -    padding-bottom: 0;
    -
    -    &:not(:last-child) {
    -        border-bottom: 1px solid $panel-border;
    -    }
    -}
    -
    -.post-box {
    -    background: $post-box-bg;
    -    border-left: 1px solid $post-box-border;
    -    padding-bottom: 3em;
    -    padding-left: 0;
    -    padding-right: 0;
    -    min-height: 19em;
    -    position: relative;
    -
    -    &.post-horizontal {
    -        border-left: none;
    -        min-height: 14em;
    -    }
    -
    -    // post meta information
    -    .post-meta {
    -        padding-top: 0.5em;
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        margin: 0;
    -        background-color: $post-meta-bg;
    -        border-bottom: 1px solid $post-meta-border;
    -    }
    -
    -    // post content
    -    .post-content {
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        padding-top: 0.5em;
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .post-signature {
    -        margin-top: 2em;
    -        hr {
    -            height: 1px;
    -            color: $post-signature-border;
    -            background-color: $post-signature-border;
    -            border: none;
    -            margin: 0;
    -            width: 25%;
    -        }
    -    }
    -
    -    // post footer
    -    .post-footer {
    -        border-top: 1px solid $post-footer-border;
    -        background-color: $post-footer-bg;
    -        width: 100%;
    -        left: 0;
    -        // push to bottom
    -        bottom: 0;
    -        position: absolute;
    -
    -        .post-menu {
    -            padding-left: 0;
    -
    -            .btn-icon:hover {
    -                background-color: $panel-hover;
    -            }
    -        }
    -    }
    -}
    -
    -// author
    -.author {
    -    text-shadow: 0px 1px 0px #fff;
    -
    -    // probably not the best name but i couldn't come up with a better one
    -    &.author-horizontal {
    -        min-height: 9em;
    -        border-bottom: 1px solid $post-box-border;
    -        .author-box {
    -            float: left;
    -            margin-top: 0.5em;
    -            .author-avatar {
    -                margin-top: 0em;
    -                margin-right: 1em;
    -            }
    -
    -            .author-online, .author-offline {
    -                margin-top: 0.5em;
    -            }
    -
    -            .author-name {
    -                margin-top: -0.5em;
    -            }
    -        }
    -    }
    -
    -    .author-name h4 {
    -        float: left;
    -        margin-bottom: 0;
    -    }
    -
    -    .author-title h5 {
    -        margin-top: 0;
    -        font-weight: 600;
    -        clear: both;
    -    }
    -
    -    .author-avatar {
    -        margin: 0.5em 0;
    -
    -        img {
    -            border-radius: 0.25em;
    -            height: auto;
    -            width: 8em;
    -        }
    -    }
    -
    -    .author-online, .author-offline {
    -        margin-top: 0.75em;
    -        margin-left: 0.25em;
    -        float: left;
    -        width: 0.5em;
    -        height: 0.5em;
    -        border-radius: 50%;
    -    }
    -
    -    .author-online {
    -        background: $author-online;
    -    }
    -
    -    .author-offline {
    -        background: $author-offline;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_variables.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_variables.scss
    deleted file mode 100644
    index 9dba323d..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/_variables.scss
    +++ /dev/null
    @@ -1,51 +0,0 @@
    -// bootstrap colros
    -$blue: #337ab7;
    -$fresh-blue: #0088cc;
    -$light-blue: #5bc0de;
    -$green: #5cb85c;
    -$dark-green: #3C763D;
    -$orange: #f0ad4e;
    -$red: #d9534f;
    -$gray: #555;
    -
    -
    -// main colors
    -$background-color: #f6f9fc; // old: #e8f1f2
    -$font-color: #333;
    -$border-color: #cad7e1;
    -$head-background: #f5f5f5;
    -$meta-background: #eaf1f5;
    -$hover: #f8f8f8;
    -
    -$navigation-color: #555;
    -$navigation-bg: #f8f8f8;
    -$navigation-hover-color: #e7e7e7;
    -
    -// header colors
    -$header-title-color: #fff;
    -$header-subtitle-color: #E8F1F2;
    -$header-background-primary: #0088cc;  // old: #3276b1
    -$header-background-secondary: #285e8e;
    -
    -// panel colors
    -$panel-bg: #fff;            // panel body background
    -$panel-head-bg: $head-background;    // panel head background
    -$panel-meta-bg: $meta-background;    // panel meta background
    -$panel-meta-border: $border-color;   // panel meta (bottom) border
    -$panel-border: $border-color;        // panel border (all over)
    -$panel-hover: $hover;
    -
    -
    -// post colors
    -$post-box-bg: $panel-bg;
    -$post-box-border: $border-color;
    -$post-meta-border: $panel-meta-bg;
    -$post-meta-bg: $panel-bg;
    -$post-signature-border: $panel-meta-bg;
    -$post-footer-border: $border-color;
    -$post-footer-bg: $panel-bg;
    -
    -
    -$author-box-bg: #e8ecf1;
    -$author-online: $green;
    -$author-offline: $gray;
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/styles.scss b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/styles.scss
    deleted file mode 100644
    index d0f075b3..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/src/styles.scss
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -// Import custom Bootstrap variables
    -@import "bootstrap-variables";
    -
    -// Import Bootstrap for Sass
    -@import "bootstrap";
    -
    -// Import fontawesome icons
    -@import "font-awesome";
    -
    -// Import FlaskBB theme
    -@import "aurora";
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/static b/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/static
    deleted file mode 120000
    index 382349a7..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/themes/aurora/static
    +++ /dev/null
    @@ -1 +0,0 @@
    -../../static/
    \ No newline at end of file
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/de/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b66ed9d7..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/de/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Peter Justin , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-11 10:27+0000\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: German (http://www.transifex.com/projects/p/flaskbb/language/de/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: de\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Es sind nur Buchstaben, Zahlen und Unterstriche erlaubt."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Benutzername oder E-Mail"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Ein Benutzername oder E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Passwort"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Ein Passwort ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Erinnere mich"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Einloggen"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Benutzername"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Ein Benutzername ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "E-Mail Adresse"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Passwörter müssen übereinstimmen."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Passwort bestätigen"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Ich aktzeptiere die Nutzungsbediengungen."
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrieren"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Dieser Benutzername ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Diese E-Mail Adresse ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Login erneuern"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Passwort anfordern"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Falscher Benutzername oder Passwort."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Neuangemeldet"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Vielen Dank für's registrieren!"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-Mail gesendet! Bitte checken sie ihre Mailbox."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Du hast einen Benutzername oder eine E-Mail Adresse eingegeben die nicht mit diesem Account verbunden ist."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Dein Passwort Token ist ungültig."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Dein Passwort Token ist abgelaufen."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Dein Passwort wurde aktualisiert."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Schnellantwort"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Du kannst keine Nachricht ohne Inhalt senden."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Antwort"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Inhalt"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Folge diesem Thema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vorschau"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Thema Titel"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Bitte wähle einen Titel für dein Thema"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Thema abschicken"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Grund"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Warum willst du diesen Beitrag melden?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Beitrag melden"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Suche"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Kriterien"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Beitrag"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Thema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Forum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Benutzer"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Du hast nicht die Berechtigung um ein neues Thema zu erstellen."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu löschen."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu sperren."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu entsperren."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu fixieren."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu lösen."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu verschieben"
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Konnte Thema nicht in Forum %(title)s verschieben."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Thema wurde in Forum %(title)s verschoben."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu vereinen."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Konnte Themen nicht vereinen."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Themen wurden vereint."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Du hast nicht die Berechtigung um in diesem Thema zu Beiträge zu schreiben."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu bearbeiten."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu löschen."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Danke für's melden."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Forum %(forum)s wurde als gelesen markiert."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Alle Foren wurden als gelesen markiert."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Geburtstag"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Geschlecht"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Männlich"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Weiblich"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ort"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Profilbild"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Forum Signatur"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notizen"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Hauptgruppe"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Andere Gruppen"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Speichern"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Gruppenname"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Ein Gruppenname ist erforderlich."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Beschreibung"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Ist diese Gruppe eine Administrator Gruppe?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Mit dieser Option haben alle Benutzer dieser Gruppe zugriff auf das Administrator Panel"
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Ist diese Gruppe eine Super Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe jedes Forum moderieren."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Ist diese Gruppe eine Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe spezifizierte Foren moderieren."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Ist diese Gruppe für Benutzer die verbannt sind?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Nur eine Gruppe für verbannte Benutzer ist erlaubt."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Ist dies eine Gruppe für Gäste?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Nur eine Gruppe für Gäste ist erlaubt."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Kann Beiträge bearbeiten"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge bearbeiten."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Kann Beiträge löschen"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge löschen."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Kann Themen löschen"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Mit dieser Option können Benutzer Themen löschen."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Kann Themen erstellen"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Mit dieser Option können Benutzer Themen erstellen."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Kann Themen beantworten"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Mit dieser Option können Benutzer in Themen Beiträge schreiben."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderatoren können Benutzer bearbeiten"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Erlaube Moderatoren das Bearbeiten eines anderen Benutzers - auch das ändern von Passwort und E-Mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderatoren können Benutzer verbannen"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Erlaube Moderatoren das verbannen von Benutzern."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Dieser Gruppenname ist bereits vergeben."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Es existiert bereits eine Gruppe für verbannte Benutzer."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Es existiert bereits eine Gruppe für Gäste."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Forum Titel"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Ein Forum Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Du kannst deine Beschreibung mit BBCode formatieren."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Position"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Die Forum Position ist erforderlich."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Kategorie"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Die Kategorie die das Forum beinhaltet."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Externe Link"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ein Link zu einer Website wie z.B. 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderatoren"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Komma getrennte Benutzernamen. Freilassen falls du keine Moderatoren setzen willst."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Moderatoren anzeigen"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Willst du die Moderatoren auf der Index Seite anzeigen?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Geschlossen?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Deaktivieren neue Beiträge und Themen in diesem Forum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Du kannst das Forum nicht in einen Externen Link konvertieren da es noch immer Beiträge beinhaltet."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Du musst auch einige Moderatoren spezifizieren."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s ist nicht in einer Moderatoren Gruppe."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Benutzer %(moderator)s wurde nicht gefunden."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Kategorie Titel"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Ein Kategorie Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Die Kategorie Position ist erforderlich."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Einstellungen gespeichert."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Dir ist es nicht erlaubt diesen Benutzer zu bearbeiten."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Benutzer aktualisiert."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Benutzer bearbeiten"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Benutzer gelöscht."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Benutzer hinzugefügt."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Benutzer hinzufügen"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu verbannen."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Ein Moderator kann nicht einen Administrator verbannen."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Benutzer wurde gebannt."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Konnte den Benutzer nicht bannen, sorry."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu entbannen."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Benutzer wurde entbannt."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Konnte den Benutzer nicht entbannen, sorry."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Meldung %(id)s wurde bereits als gelesen markiert."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Meldung %(id)s wurde als gelesen markiert."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Alle Meldungen wurden als gelesen markiert."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Gruppe aktualisiert."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Gruppe bearbeiten"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Gruppe gelöscht."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Gruppe hinzugefügt."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Gruppe hinzufügen"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Forum aktualisiert."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Forum bearbeiten"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Forum gelöscht."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Forum hinzugefügt."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Forum hinzufügen"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Kategorie hinzugefügt."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Kategorie hinzufügen"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Kategorie aktualisiert."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Kategorie bearbeiten"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Kategorie wurde mit allen zugehörigen Foren gelöscht."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin ist aktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber löschen."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Konnte das Plugin nicht aktivieren."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s wurde nicht gefunden."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin ist deaktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber erstellen."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin deinstalliert."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Konnte das Plugin nicht deinstallieren."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin installiert."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Konnte das Plugin nicht installieren."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Benutzerliste"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Thema Tracker"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Verwaltung"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Ausloggen"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Private Nachrichten"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Seiten"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Noch kein Benutzer?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Passwort vergessen?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Lieber %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Um dein Passwort zurückzusetzen, klicke bitte auf den folgenden Link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Mit freundlichen Grüßen,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Die Administration"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Kein Zugriff - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Verbotene Seite"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Du hast nicht die Berechtigung um diese Seite zu sehen."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Zurück zum Forum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh nein! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Ups, Seite wurde nicht gefunden!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "Die Seite existiert nicht."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server Fehler - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server Fehler"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Es ist etwas schief gelaufen."
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Themen"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Beiträge"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Letzer Beitrag"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "von"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Keine Beiträge."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Geschlossen"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Neues Thema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Ansichten"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Keine Themen."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Foren Statistiken"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Wer ist aktiv?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Anzahl an registrierten Benutzern"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Anzahl an Themen"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Anzahl an Beiträgen"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Neuester registrierter Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Keine Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Registrierte Benutzer aktiv"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Gäste aktiv"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Gruppe"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Neuer Beitrag"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Aktive Benutzer"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Meldung"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Schließen"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Thema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Zuletzt geändert"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Gast"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PN"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Bearbeiten"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Löschen"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Zitieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Thema löschen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Thema schließen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Thema öffnen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Thema fixieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Thema lösen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Thema entfolgen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Thema folgen"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Gefolgte Themen"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Verbannte Benutzer"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Benutzer verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Entbannen"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Es wurde kein Benutzer gefunden."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Foren verwalten"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foren"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gruppen verwalten"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Gruppen"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Übersicht"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Meldungen"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Globale Statistiken"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB Version"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python Version"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask Version"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Plugins verwalten"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Information"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Version"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Aktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Deaktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Installieren"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Deinstallieren"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Zeige ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Zeige alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Poster"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Melder"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Gemeldet"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Keine Meldungen."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Keine ungelesene Meldungen."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Bannen"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Entwurf"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Zu"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Datum"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Kein Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Dieser Nachrichtenordner ist leer."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Eingang"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "Von"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "gelöscht"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Private Nachricht"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Neue PN"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Gesendet"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papierkorb"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Gesendete Nachrichten"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Kein Benutzer"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Wiederherstellen"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Keine Nachricht"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Alle Beiträge"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "All Beiträge erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Alle Themen"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Alle Themen erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "E-Mail Adresse ändern"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Passwort ändern"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Benuzer Details ändern"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Allgemeine Einstellungen"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Benutzer Statistiken"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Benutzer hat keine Notizen über ihn hinzugefügt."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Beigetreten"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Zuletzt gesehen"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Noch nie gesehe"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Letzter Beitrag"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nie"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Keine Info"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Konto Einstellunge"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "Es sind nur jpg, jpeg, png und gifs erlaubt."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Sprache"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Thema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Alte E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Neue E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-Mail Adressen müssen übereinstimmen."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "E-Mail Adresse bestätigen"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Altes Passwort"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Passwort erforderlich"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Neues Passwort bestätigen"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Dein Geburtstag"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Zu Benutzer"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Ein Betreff ist erforderlich."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Nachricht"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Eine Nachricht ist erforderlich"
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Nachricht senden"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Nachricht speichern"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "Den Benutzername den du eingeben hast existiert nicht."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Du kannst keine Nachricht an dich selber schreiben."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Einstellungen aktualisiert."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Passwort aktualisiert."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "E-Mail Adresse aktualisiert."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Details aktualisiert."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Nachricht gespeichert."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Nachricht gesendet"
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Du kannst keine Nachricht bearbeiten die bereits gesendet wurde."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Nachricht bearbeiten"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Nachricht in den Papierkorb verschoben."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Nachricht aus dem Papierkorb wieder wiederhergestellt."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Nachricht gelöscht."
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/en/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 89c6ca3e..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/en/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1875 +0,0 @@
    -# German translations for FlaskBB.
    -# Copyright (C) 2015 FlaskBB
    -# This file is distributed under the same license as the FlaskBB project.
    -# Peter Justin , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version:  0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-03 13:45+0100\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: FlaskBB Team\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:150
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:65 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:70 flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr ""
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr ""
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8 flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9 flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr ""
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr ""
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr ""
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr ""
    -
    -#~ msgid ""
    -#~ msgstr ""
    -
    -#~ msgid "All Topics created by"
    -#~ msgstr ""
    -
    -#~ msgid "You can only use letters, numbers or dashes"
    -#~ msgstr ""
    -
    -#~ msgid "Username or E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "This Username is taken."
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is taken."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong E-Mail."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong username or password"
    -#~ msgstr ""
    -
    -#~ msgid "Reauthenticated"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for registering"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "You have entered an username or "
    -#~ "email that is not linked with your"
    -#~ " account"
    -#~ msgstr ""
    -
    -#~ msgid "Your password token is invalid."
    -#~ msgstr ""
    -
    -#~ msgid "Your password is expired."
    -#~ msgstr ""
    -
    -#~ msgid "Your password has been updated."
    -#~ msgstr ""
    -
    -#~ msgid "Quickreply"
    -#~ msgstr ""
    -
    -#~ msgid "Please choose a Topic title."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to delete the topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to lock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to unlock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to highlight this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to trivialize this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to move this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not move the topic to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "Topic was moved to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to merge this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not merge the topic."
    -#~ msgstr ""
    -
    -#~ msgid "Topic succesfully merged."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post here"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post in this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to edit this post"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for reporting!"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate every"
    -#~ " forum"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate "
    -#~ "specified forums"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Banned group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Guest group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Check this if the users in this group can edit posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can create topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can post replies"
    -#~ msgstr ""
    -
    -#~ msgid "Allow moderators to ban other users"
    -#~ msgstr ""
    -
    -#~ msgid "This Group name is taken."
    -#~ msgstr ""
    -
    -#~ msgid "A link to a website i.e. 'http://flaskbb.org'"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot convert a forum that contain topics in a external link"
    -#~ msgstr ""
    -
    -#~ msgid "%(user)s is not in a moderators group"
    -#~ msgstr ""
    -
    -#~ msgid "User %(moderator)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully edited"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully deleted"
    -#~ msgstr ""
    -
    -#~ msgid "User was banned successfully."
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s is already marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "All reports were marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Group successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Forum successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Category successfully created."
    -#~ msgstr ""
    -
    -#~ msgid "Plugin is not enabled"
    -#~ msgstr ""
    -
    -#~ msgid "Plugin %(plugin)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot uninstall Plugin"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot install Plugin"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Please install the plugin first to "
    -#~ "configure the forums which should be "
    -#~ "displayed"
    -#~ msgstr ""
    -
    -#~ msgid "No posts"
    -#~ msgstr ""
    -
    -#~ msgid "No Topics so far."
    -#~ msgstr ""
    -
    -#~ msgid "No users found matching your search query"
    -#~ msgstr ""
    -
    -#~ msgid "No Posts so far."
    -#~ msgstr ""
    -
    -#~ msgid "Change E-Mail Adress"
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is invalid"
    -#~ msgstr ""
    -
    -#~ msgid "A username is required."
    -#~ msgstr ""
    -
    -#~ msgid "A subject is required."
    -#~ msgstr ""
    -
    -#~ msgid "A message is required."
    -#~ msgstr ""
    -
    -#~ msgid "The username you entered doesn't exist"
    -#~ msgstr ""
    -
    -#~ msgid "Your settings have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your password have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your email have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your details have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Message saved!"
    -#~ msgstr ""
    -
    -#~ msgid "Message sent!"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot edit a sent message"
    -#~ msgstr ""
    -
    -#~ msgid "Message moved to Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message restored from Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message deleted!"
    -#~ msgstr ""
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/es/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/es/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bf123bf2..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/es/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Ernesto Avilés Vázquez , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-02-19 16:42+0000\n"
    -"Last-Translator: Ernesto Avilés Vázquez \n"
    -"Language-Team: Spanish (http://www.transifex.com/flaskbb/flaskbb/language/es/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: es\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Restablecer contraseña"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Solo puedes usar letras, números o guiones."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Nombre de usuario o dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Se requiere nombre de usuario o dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Contraseña"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Se requiere una contraseña."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Recordar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Iniciar sesión"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Se requiere un nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Dirección electrónica inválida."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Las contraseñas deben coincidir."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar contraseña"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Acepto los términos del servicio"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este nombre de usuario ya existe."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Esta dirección electrónica ya existe."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Actualizar inicio de sesión"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar contraseña"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Restablecer  contraseña"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Dirección electrónica incorrecta."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuario o contraseña incorrectos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Volver a autenticarse."
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Gracias por registrarse."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "¡Correo enviado! Por favor, revisa tu bandeja de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Has insertado un nombre de usuario o dirección electrónica que no está vinculado con tu cuenta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Tu token de contraseña es inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Tu token de contraseña ha expirado."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Tu contraseña ha sido actualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Respuesta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "No puedes publicar una respuesta sin contenido"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Respuesta"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Contenido"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir este tema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vista previa"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título del tema"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor elije un título para el tema."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Publicar tema"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Razón"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "¿Cuál es la razón por la que reportas este artículo?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Publicar reporte"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Buscar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Criterio"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Publicar"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Foro"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuarios"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Usted no permisos para crear un nuevo tema."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "No tienes los permisos para borrar este tema."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "No tienes permisos para bloquear este tema."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "No tienes permisos para desbloquear este tema."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "No tienes permisos para resaltar este tema."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "No tienes permisos para trivializar este tema."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "No tienes permisos para mover este tema."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "No puedes mover este tema al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tema movido al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "No tienes permisos para mezclar este tema."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "No se pueden mezclar los temas."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Los temas han sido mezclados satisfactoriamente"
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "No tienes permisos para publicar en este tema."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "No tienes permisos para editar este artículo."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "No tienes permisos para borrar este artículo."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Gracias por hacer el reporte."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Foro %(forum)s marcado como leído."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos los foros marcados como leídos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Cumpleaños"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Femenino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ubicación"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Sitio web"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Firma del foro"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primario"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundarios"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Guardar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nombre del grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Se requiere un nombre de grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descripción"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "¿Es del grupo Administración?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Con esta opción el grupo tiene acceso al panel de administración."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "¿Es del grupo Supermoderador?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Comprueba si los usuarios en este grupo tienen permiso para moderar todos los foros."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "¿Es del grupo Moderador?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Comprueba si los usuarios de este grupo tienen permiso para moderar foros específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "¿Es del grupo Baneado?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Solo se permite un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "¿Es del grupo Invitado?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Solo se permite un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Puede editar artículos"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden editar artículos."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Puede borrar artículos"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar artículos."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Puede borrar temas"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar temas."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Puede crear temas"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden crear temas."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Puede publicar respuestas"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Comprueba si los usuarios en este grupo pueden publicar respuestas."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Los moderadores pueden editar perfiles de usuario"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite a los moderadores editar los perfiles de otros usuarios incluyendo contraseñas y cambios de direcciones electrónicas."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Los moderadores pueden banear usuarios"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite a los moderadores banear a otros usuarios."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este nombre de grupo ya existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Ya existe un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Ya existe un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título del foro"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Se requiere un título de foro."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Puedes formatear tu descripción con BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posición"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Se requiere una posición del foro"
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoría"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "La categoría que contiene este foro"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Enlace externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Un enlace a un sitio e.j.: \"http://flaskbb.org\""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nombres de usuarios separados por coma. Déjalo en blanco si no deseas establecer algún moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "¿Deseas mostrar los moderadores en la página de inicio?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "¿Bloqueado?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Inhabilitar nuevos artículos y temas en este foro."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "No puedes convertir un foro que contiene temas en un enlace externo."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "También necesitas especificar algunos moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s no está en el grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "El usuario %(moderator)s  no existe."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título de la categoría"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Se requiere un título de categoría."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Se requiere una posición para la categoría."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Ajustes guardados."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "No tienes permisos para editar este usuario"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuario actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuario"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuario borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuario añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Añadir usuario"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "No tienes permisos para banear a este usuario"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Un moderador no puede banear a un administrador."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "El usuario ha sido baneado."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "No se puede banear al usuario."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "No tienes permisos para desbanear a este usuario"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "El usuario ha sido desbaneado."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "No se puede desbanear al usuario."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "El reporte %(id)s ya está marcado como leído."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Reporte %(id)s marcado como leído."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos los reportes fueron marcados como leídos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Añadir grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Foro actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar foro"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Foro borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Foro añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Añadir foro"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoría añadida satisfactoriamente."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Añadir categoría"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoría actualizada satisfactoriamente."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoría"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoría borrada junto con todos los foros asociados"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "El complemento está habilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que borrar el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "No se puede habilitar el complemento"
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "El complemento %(plugin)s no existe."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "El complemento está inhabilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que crear el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "El complemento ha sido desinstalado."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "No se puede desinstalar el complemento."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "El plugin ha sido instalado."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "No se puede instalar el complemento."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de miembros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Seguidor de tema"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Ajustes"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administración"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Cerrar sesión"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensajes privados"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nuevo mensaje"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "¿Todavía sin ser miembro?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "¿Olvidaste tu contraseña?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Estimado %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restablecer tu contraseña haz clic en el siguiente enlace:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Saludos,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "La administración"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sin acceso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Página prohibida"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "No tienes permisos para ver esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "De regreso a los foros"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "¡Oh no! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oh, ¡La página no existe!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "La página que buscas no existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Erro del servidor - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Error del servidor"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "¡Ha ocurrido algo malo!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Temas"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Artículos"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "No hay artículos."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como leído"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Bloqueado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Nuevo tema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Vistas"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "No hay temas."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estadísticas del foro"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "¿Quién está conectado?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Total de usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Total de temas"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Total de artículos"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Nuevos usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "No hay usuarios"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuarios registrados conectados"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Invitados conectados"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Fecha de registro"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Nuevo artículo"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuarios conectados"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Cerrar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Última modificación"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Invitado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "MP"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Borrar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citar"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Borrar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Bloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Desbloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Resaltar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Trivializar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Dejar de seguir tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tema"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Temas seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuarios baneados"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Administrar usuarios"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Administrar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanear"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "No se encontraron usuarios que coincidan con el criterio de búsqueda."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Administrar foros"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foros"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Administrar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Reseña"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reportes"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Complementos"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estadísticas globales"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "Versión de FlaskBB"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Versión de Python"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Versión de Flask"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Administrar complementos"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Complemento"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Información"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versión"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Inhabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reportes sin leer"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Publicador"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportero"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Sin reportes."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reportes sin leer"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todos como leídos"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "No hay reportes sin leer."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banear"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Borradores"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "A"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Asunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Fecha"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opciones"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sin asunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta carpeta de mensajes está vacía."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Bandeja de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "borrado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensaje privado"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nuevo MP"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviados"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papelera"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensajes enviados"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "No hay usuario"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restablecer"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "No hay mensaje"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos los artículos"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos los artículos creados por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos los temas"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos los temas creados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Cambiar dirección electrónica"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Cambiar contraseña"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Cambiar detalles del usuario"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Ajustes generales"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Información"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Estadísticas de usuario"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "El usuario no ha añadido ninguna nota suya."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Unido"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Visto por última vez"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Sin información"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Ajustes de la cuenta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "¡Solo se permiten jpg, jpeg, png y gifs!"
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Idioma"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Apariencia"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Dirección electrónica anterior"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Dirección electrónica nueva"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "Las direcciones deben coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar dirección electrónica"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Contraseña vieja"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Contraseña requerida"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar la nueva contraseña"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Tu cumpleaños"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Al usuario"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Se requiere un asunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensaje"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Se requiere un mensaje."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensaje"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Guardar mensaje"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "El nombre de usuario que has entrado no existe"
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "No te puedes enviar un MP a ti mismo"
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Ajustes actualizados."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Contraseña actualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Dirección electrónica actualizada."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalles actualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensaje guardado."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensaje enviado."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Componer mensaje."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "No puedes editar un mensaje enviado."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensaje"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensaje movido a la Papelera."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensaje restaurado desde la Papelera."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensaje borrado."
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 822f68f7..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Vinícius Ferreira , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-03-01 21:46+0000\n"
    -"Last-Translator: Vinícius Ferreira \n"
    -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/flaskbb/flaskbb/language/pt_BR/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: pt_BR\n"
    -"Plural-Forms: nplurals=2; plural=(n > 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Recuperar senha"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "São permitidos apenas letras, números e traços."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Usuário ou endereço de e-mail "
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "É necessário um usuário ou endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Senha"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Lembrar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Conectar-se"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Usuário"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "É necessário um usuário."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Endereço de e-mail"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "É necessário um endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "E-mail inválido."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "As senhas devem se coincidir. "
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar senha"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Eu aceito os Termos de Serviço"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este usuário já esta em uso."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Este e-mail já esta em uso."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Atualizar sessão"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar senha"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Endereço de e-mail incorreto."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuário ou senha incorretos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Obrigado por se registrar."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-mail enviado! Por favor, cheque sua caixa de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Você digitou um usuário ou endereço de e-mail que não coincide com a sua conta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "O token da senha é inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "O token da senha expirou."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Sua senha foi atualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Resposta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Você não pode postar uma resposta sem conteúdo. "
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Responder"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Conteúdo"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Prever"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título do tópico"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor, digite um título para o tópico."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Postar tópico"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Motivo"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Qual o motivo para reportar este post?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Reportar post"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Pesquisar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Critérios"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Post"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tópico"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Fórum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuários"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Você não tem permissão para criar um novo tópico."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Você não tem permissão para trancar este tópico."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Você não tem permissão para destrancar este tópico."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Você não tem permissão para ressaltar este tópico."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Você não tem permissão para mover este tópico."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Não foi possível mover este tópico para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tópico movido para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Você não tem permissão para mesclar este tópico."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Não foi possível mesclar os tópicos."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Tópicos mesclados com sucesso."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Você não tem permissão para postar neste tópico."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Você não tem permissão para editar este tópico."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Agradecemos por reportar."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Fórum %(forum)s marcado como lido."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos os fóruns foram marcados como lidos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Aniversário"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Feminino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Localização"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Assinatura"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primário"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundários "
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Salvar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nome do grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "É necessário um nome para o grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descrição "
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Pertence ao grupo de administradores ?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Esta opção permite que os usuários deste grupo tenham acesso ao painel de administrador."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Pertence ao grupo de super-moderadores ?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Esta opção permite que os usuários deste grupo modere todos os fóruns."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Pertence ao grupo de moderadores ?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Esta opção permite que os usuários deste grupo moderem fóruns específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Pertence ao grupo de banidos ?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "É permitido apenas um grupo de banido."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Pertence ao grupo de visitantes ?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "É permitido apenas um grupo de visitante."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Pode editar posts"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Permite que, usuários deste grupo, editem posts."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Pode deletar posts"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Permite que, usuários deste grupo, deletem posts."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Pode deletar tópicos"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Permite que, usuários deste grupo, deletem tópicos."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Pode criar tópicos"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Permite que, usuários deste grupo, criem tópicos."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Pode responder à tópicos"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Permite que, usuários deste grupo, criem respostas nos tópicos."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderadores podem editar o perfil de usuários"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite que moderadores alterem perfis de outros usuários, incluindo senha e e-mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderadores podem banir usuários"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite que moderadores possam banir outros usuários."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este grupo já existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Já existe um grupo para banidos."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Já existe um grupo para visitantes."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título do fórum"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "É necessário um título para o fórum."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Você pode formatar sua descrição com BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posição"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "É necessário uma posição no fórum."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoria"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Categorias que este fórum possui."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Link externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Uma url para um site, ex: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nome de usuários separados por virgula. Deixe em branco caso não deseje nenhum moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Mostrar moderadores na página principal ?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Trancado ?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Desabilitar novos posts e tópicos neste fórum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Também é necessário especificar alguns moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s não pertence ao grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Usuário %(moderator)s não foi encontrado."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título da categoria."
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "É necessário um titulo para a categoria. "
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "É necessário uma posição para a categoria."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Configurações salvas."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Você não tem permissão para editar este usuário."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuário atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuário"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuário deletado com sucesso."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuário cadastrado com sucesso."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Adicionar usuário"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Você não tem permissão para banir este usuário."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Moderadores não podem banir administradores."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Usuário banido."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Não foi possível banir usuário."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Você não tem permissão para desbanir este usuário."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Usuário desbanido."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Não foi possível desbanir usuário."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Report %(id)s já esta marcado como lido."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Report %(id)s marcado como lido."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos os reports marcados como lidos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo deletado com sucesso."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Cadastrar grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Fórum atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar fórum"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Fórum deletado com sucesso."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Fórum adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Adicionar fórum"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoria adicionada com sucesso."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Adicionar categoria"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoria atualizada com sucesso."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoria"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoria com todos os fóruns associados deletada."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin habilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria. "
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Não foi possível habilitar o plugin."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s não encontrado."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin desabilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin desinstalado com sucesso."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Não foi possível desinstalar o plugin."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin instalado com sucesso."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Não foi possível instalar plugin."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de membros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Rastreador de tópicos"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Configurações"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administração"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Sair"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensagens privadas"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nova mensagem"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Ainda não é um membro ?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Esqueci a senha."
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Caro %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restaurar sua senha clique no seguinte link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Atenciosamente,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "A administração "
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sem acesso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Acesso negado"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Você não tem permissão para acessar esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Voltar para o fórum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh não! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oops, página não encontrada!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "A página que você esta procurando não existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server error - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server error"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Alguma coisa deu errado!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Tópicos"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Posts"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Nenhum post disponível."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como lido"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Trancado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Novo tópico"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Visualizações"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Nenhum tópico disponível."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estatísticas do fórum"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Quem esta online ?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Número total de usuários registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Número total de tópicos"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Número total de posts"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Usuário cadastrado mais recente"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Sem usuários."
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuários registrados online"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Convidados online"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Data registrada"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Novo post"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuários online"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Fechar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tópico"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Ultima modificação"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Convidado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PM"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Deletar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citação"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Deletar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Trancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Destrancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Ressaltar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Deixar de seguir este tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Tópicos seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuários banidos"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Gerenciar usuários"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Gerenciar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanir"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Nenhum usuário encontrado com estes critérios de pesquisa."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Gerenciar fórum"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Fóruns"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gerenciar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Visão geral"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reports"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estatísticas globais "
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB versão"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python versão"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask versão"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Gerenciar plugins"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Informação"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versão"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Desabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reports não lidos"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos reports"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos reports"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Postado por"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportado por"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Nenhuma reclamação."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reclamações não lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todas como lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Nenhuma reclamação não lida."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banir"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Rascunhos"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Para"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Assunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Data"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opções"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sem assunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta pasta de mensagens esta vazia."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Caixa de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "deletado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensagem privada"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nova PM"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviado"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Lixo"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensagens enviadas"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Sem usuário"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restaurar"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Sem mensagem"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos os posts"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos os posts feitos por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos os tópicos"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos os tópicos criados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Mudar endereço de e-mail"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Alterar detalhes de usuári"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Configurações gerais"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Status do usuário"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Usuário não adicionou notas sobre ele."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Registrado"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Última visita"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Nenhuma informação"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Configurações de conta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "São permitidos apenas jpg, jpeg, png e gifs."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Lingua "
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Tema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Endereço de e-mail antigo"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Novo endereço de e-mail"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-mails devem se coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar endereço de e-mai"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Senha antiga"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar nova senha"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Nascimento"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Para o usuário"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "É necessário um assunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensagem"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "É necessário uma mensagem."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensagem"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Salvar mensagem"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "O usuário que você inseriu não existe."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Você não pode enviar uma mensagem privada para você mesmo."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Configurações atualizadas."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Senha atualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Endereço de e-mail atualizado."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalhes atualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensagem salva."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensagem enviada."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Escrever mensagem."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Você não pode editar uma mensagem já enviada."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensagem"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensagem movido para a lixeira."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensagem restaurada."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensagem deletada."
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/ru/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/ru/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bb1f10f3..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/ru/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1751 +0,0 @@
    -# Russian translations for FlaskBB.
    -# Copyright (C) 2016 DENIS ROMANOV
    -# This file is distributed under the same license as the FlaskBB project.
    -# DENIS ROMANOV , 2016.
    -
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: PROJECT VERSION\n"
    -"Report-Msgid-Bugs-To: denis.romanow@gmail.com\n"
    -"POT-Creation-Date: 2016-02-29 12:44+0300\n"
    -"PO-Revision-Date: 2016-02-29 12:44+0300\n"
    -"Last-Translator: DENIS ROMANOV \n"
    -"Language: ru\n"
    -"Language-Team: ru \n"
    -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
    -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 2.2.0\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:23 flaskbb/management/forms.py:36
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Используйте только буквы, цифры или символ подчеркивания"
    -
    -#: flaskbb/auth/forms.py:27
    -msgid "Username or E-Mail Address"
    -msgstr "Имя или эл. почта"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Требуется имя пользователя или адрес электронной почты."
    -
    -#: flaskbb/auth/forms.py:31 flaskbb/auth/forms.py:48 flaskbb/auth/forms.py:86
    -#: flaskbb/auth/forms.py:107 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "Пароль"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:87
    -msgid "A Password is required."
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/auth/forms.py:34
    -msgid "Remember Me"
    -msgstr "Запомнить меня"
    -
    -#: flaskbb/auth/forms.py:36 flaskbb/templates/layout.html:134
    -#: flaskbb/templates/navigation.html:60 flaskbb/templates/auth/login.html:1
    -#: flaskbb/templates/auth/login.html:9
    -msgid "Login"
    -msgstr "Вход"
    -
    -#: flaskbb/auth/forms.py:40 flaskbb/management/forms.py:56
    -#: flaskbb/templates/forum/memberlist.html:43
    -#: flaskbb/templates/forum/search_result.html:104
    -#: flaskbb/templates/management/banned_users.html:62
    -#: flaskbb/templates/management/users.html:62
    -msgid "Username"
    -msgstr "Имя"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:57
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "Требуется имя"
    -
    -#: flaskbb/auth/forms.py:44 flaskbb/auth/forms.py:93 flaskbb/auth/forms.py:103
    -#: flaskbb/management/forms.py:60
    -msgid "E-Mail Address"
    -msgstr "Адрес эл. почты"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:104
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/management/forms.py:62
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:50 flaskbb/auth/forms.py:109 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "Пароли должны совпадать."
    -
    -#: flaskbb/auth/forms.py:52 flaskbb/auth/forms.py:111
    -msgid "Confirm Password"
    -msgstr "Подтвердите пароль"
    -
    -#: flaskbb/auth/forms.py:55 flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "Язык"
    -
    -#: flaskbb/auth/forms.py:57
    -msgid "I accept the Terms of Service"
    -msgstr "Я принимаю условия сервиса"
    -
    -#: flaskbb/auth/forms.py:59 flaskbb/templates/layout.html:138
    -#: flaskbb/templates/navigation.html:66 flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:9
    -msgid "Register"
    -msgstr "Регистрация"
    -
    -#: flaskbb/auth/forms.py:64 flaskbb/management/forms.py:117
    -msgid "This Username is already taken."
    -msgstr "Это имя пользователя уже занято."
    -
    -#: flaskbb/auth/forms.py:69 flaskbb/management/forms.py:131
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "Этот адрес эл. почты уже занят"
    -
    -#: flaskbb/auth/forms.py:82
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:89 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:10
    -msgid "Refresh Login"
    -msgstr "Обновить вход"
    -
    -#: flaskbb/auth/forms.py:94
    -msgid "A E-Mail Address is reguired."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:97 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Запрос пароля"
    -
    -#: flaskbb/auth/forms.py:113 flaskbb/templates/layout.html:139
    -#: flaskbb/templates/navigation.html:67
    -#: flaskbb/templates/auth/forgot_password.html:9
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -msgid "Reset Password"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:118
    -msgid "Wrong E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/views.py:47
    -msgid "Wrong Username or Password."
    -msgstr "Неверное имя пользователя или пароль."
    -
    -#: flaskbb/auth/views.py:62
    -msgid "Reauthenticated."
    -msgstr "Повторный вход выполнен."
    -
    -#: flaskbb/auth/views.py:103
    -msgid "Thanks for registering."
    -msgstr "Спасибо за регистрацию."
    -
    -#: flaskbb/auth/views.py:127
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "Вам отправлено сообщение эл. почты. Проверьте входящие письма."
    -
    -#: flaskbb/auth/views.py:130
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "Вы ввели имя пользователя или адрес эл. почты. которые не связаны с Вашей учетной записью."
    -
    -#: flaskbb/auth/views.py:150
    -msgid "Your Password Token is invalid."
    -msgstr "Неверный идентификатор пароля."
    -
    -#: flaskbb/auth/views.py:154
    -msgid "Your Password Token is expired."
    -msgstr "Идентификатор пароля истек."
    -
    -#: flaskbb/auth/views.py:160
    -msgid "Your Password has been updated."
    -msgstr "Ваш пароль был обновлен."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Быстрый ответ"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Вы не можете отправить пустой комментарий."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic_controls.html:94
    -msgid "Reply"
    -msgstr "Ответ"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Содержание"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Отслеживать"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -msgid "Preview"
    -msgstr "Предварительный просмотр"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Заголовок темы"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Пожалуйста выберете заголовок темы."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Опубликовать тему"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:39
    -#: flaskbb/templates/management/unread_reports.html:39
    -msgid "Reason"
    -msgstr "Причина"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Какая причина жалобы на эту тему?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:16
    -msgid "Report Post"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:75
    -#: flaskbb/templates/navigation.html:21
    -#: flaskbb/templates/forum/memberlist.html:26
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:10
    -#: flaskbb/templates/forum/search_form.html:15
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:10
    -#: flaskbb/templates/management/banned_users.html:39
    -#: flaskbb/templates/management/users.html:39
    -msgid "Search"
    -msgstr "Поиск"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Критерий"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Комментарий"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/edit_forum.html:31
    -#: flaskbb/templates/forum/forum.html:49
    -#: flaskbb/templates/forum/search_result.html:134
    -#: flaskbb/templates/forum/topictracker.html:31
    -#: flaskbb/templates/management/reports.html:38
    -#: flaskbb/templates/management/unread_reports.html:38
    -msgid "Topic"
    -msgstr "Тема"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:73
    -#: flaskbb/templates/navigation.html:19 flaskbb/templates/forum/category.html:9
    -#: flaskbb/templates/forum/category_layout.html:8
    -#: flaskbb/templates/forum/edit_forum.html:13
    -#: flaskbb/templates/forum/forum.html:10
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/templates/forum/new_post.html:11
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/forum/search_result.html:213
    -#: flaskbb/templates/forum/topic.html:10
    -#: flaskbb/templates/forum/topic_horizontal.html:14
    -#: flaskbb/templates/forum/topictracker.html:14
    -#: flaskbb/templates/management/banned_users.html:8
    -#: flaskbb/templates/management/category_form.html:8
    -#: flaskbb/templates/management/forum_form.html:8
    -#: flaskbb/templates/management/forums.html:7
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/group_form.html:8
    -#: flaskbb/templates/management/groups.html:7
    -#: flaskbb/templates/management/overview.html:7
    -#: flaskbb/templates/management/plugins.html:7
    -#: flaskbb/templates/management/reports.html:8
    -#: flaskbb/templates/management/settings.html:7
    -#: flaskbb/templates/management/unread_reports.html:8
    -#: flaskbb/templates/management/user_form.html:8
    -#: flaskbb/templates/management/users.html:8
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:5
    -#: flaskbb/templates/user/settings_layout.html:6
    -msgid "Forum"
    -msgstr "Форум"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:99
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/users.html:1
    -#: flaskbb/templates/management/users.html:34
    -msgid "Users"
    -msgstr "Пользователи"
    -
    -#: flaskbb/forum/views.py:180
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "У Вас нет прав создать новую тему."
    -
    -#: flaskbb/forum/views.py:208 flaskbb/utils/helpers.py:96
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "У Вас нет прав удалить эту тему."
    -
    -#: flaskbb/forum/views.py:225
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "У Вас нет прав закрыть эту тему."
    -
    -#: flaskbb/forum/views.py:241
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "У Вас нет прав открыть эту тему."
    -
    -#: flaskbb/forum/views.py:257
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "У Вас нет прав закрепить эту тему."
    -
    -#: flaskbb/forum/views.py:274
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "У Вас нет прав открепить эту тему."
    -
    -#: flaskbb/forum/views.py:297
    -msgid "You do not have the permissions to moderate this forum."
    -msgstr "У Вас нет прав модерировать этот форум."
    -
    -#: flaskbb/forum/views.py:323
    -#, python-format
    -msgid "%(count)s Topics locked."
    -msgstr "%(count)s Тем закрыто."
    -
    -#: flaskbb/forum/views.py:329
    -#, python-format
    -msgid "%(count)s Topics unlocked."
    -msgstr "%(count)s Тем открыто."
    -
    -#: flaskbb/forum/views.py:336
    -#, python-format
    -msgid "%(count)s Topics highlighted."
    -msgstr "%(count)s Тем закреплено."
    -
    -#: flaskbb/forum/views.py:342
    -#, python-format
    -msgid "%(count)s Topics trivialized."
    -msgstr "%(count)s Тем откреплено."
    -
    -#: flaskbb/forum/views.py:349
    -#, python-format
    -msgid "%(count)s Topics deleted."
    -msgstr "%(count)s Тем удалено."
    -
    -#: flaskbb/forum/views.py:357
    -msgid "Please choose a new forum for the topics."
    -msgstr "Пожалуйста, выберите новый форум для создания темы."
    -
    -#: flaskbb/forum/views.py:369
    -msgid "You do not have the permissions to move this topic."
    -msgstr "У Вас нет прав перемещать эту тему."
    -
    -#: flaskbb/forum/views.py:389 flaskbb/forum/views.py:416
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "У Вас нет прав комментировать эту тему."
    -
    -#: flaskbb/forum/views.py:442
    -msgid "You do not have the permissions to edit this post."
    -msgstr "У Вас нет прав редактировать этот комментарий."
    -
    -#: flaskbb/forum/views.py:473
    -msgid "You do not have the permissions to delete this post."
    -msgstr "У Вас нет прав удалять этот комментарий."
    -
    -#: flaskbb/forum/views.py:497
    -msgid "Thanks for reporting."
    -msgstr "Спасибо за сообщение."
    -
    -#: flaskbb/forum/views.py:533
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Форум %(forum)s отмечен как прочитанный."
    -
    -#: flaskbb/forum/views.py:555
    -msgid "All forums marked as read."
    -msgstr "Все форумы отмечены как прочитанные."
    -
    -#: flaskbb/management/forms.py:67 flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "День рождения"
    -
    -#: flaskbb/management/forms.py:71 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Пол"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Мужской"
    -
    -#: flaskbb/management/forms.py:74 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Женский"
    -
    -#: flaskbb/management/forms.py:76 flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Местоположение"
    -
    -#: flaskbb/management/forms.py:79 flaskbb/templates/forum/search_result.html:48
    -#: flaskbb/templates/forum/topic.html:52
    -#: flaskbb/templates/forum/topic_horizontal.html:63
    -#: flaskbb/templates/message/conversation.html:47
    -#: flaskbb/templates/message/conversation.html:101 flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Сайт"
    -
    -#: flaskbb/management/forms.py:82 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Аватар "
    -
    -#: flaskbb/management/forms.py:85 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/management/forms.py:88 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Комментарий"
    -
    -#: flaskbb/management/forms.py:92
    -msgid "Primary Group"
    -msgstr "Первичная группа"
    -
    -#: flaskbb/management/forms.py:97
    -msgid "Secondary Groups"
    -msgstr "Вторичная группа"
    -
    -#: flaskbb/management/forms.py:103 flaskbb/management/forms.py:215
    -#: flaskbb/management/forms.py:332 flaskbb/management/forms.py:411
    -#: flaskbb/templates/management/settings.html:59 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Сохранить"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/templates/management/groups.html:34
    -msgid "Group Name"
    -msgstr "Имя группы"
    -
    -#: flaskbb/management/forms.py:153
    -msgid "A Group name is required."
    -msgstr "Требуется имя группы"
    -
    -#: flaskbb/management/forms.py:155 flaskbb/management/forms.py:284
    -#: flaskbb/management/forms.py:399 flaskbb/templates/management/groups.html:35
    -msgid "Description"
    -msgstr "Описание"
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Admin Group?"
    -msgstr "Группа администраторов?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Отметьте что бы пользователям был предоставлен доступ к панели администрирования."
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Is Super Moderator Group?"
    -msgstr "Группа супермодераторов?"
    -
    -#: flaskbb/management/forms.py:165
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Отметьте что бы пользователи могли модерировать все форумы."
    -
    -#: flaskbb/management/forms.py:169
    -msgid "Is Moderator Group?"
    -msgstr "Группа модераторов?"
    -
    -#: flaskbb/management/forms.py:170
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Отметьте что бы пользователи могли редактировать отдельные форумы."
    -
    -#: flaskbb/management/forms.py:174
    -msgid "Is Banned Group?"
    -msgstr "Группа заблокированных?"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Only one Banned group is allowed."
    -msgstr "Допустима только одна группа заблокированных."
    -
    -#: flaskbb/management/forms.py:178
    -msgid "Is Guest Group?"
    -msgstr "Группа гостей?"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Only one Guest group is allowed."
    -msgstr "Допустима только одна группа гостей."
    -
    -#: flaskbb/management/forms.py:182
    -msgid "Can edit posts"
    -msgstr "Редактировать комментарии"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Отметьте что бы пользователи могли редактировать комментарии."
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Can delete posts"
    -msgstr "Удалять комментарии"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Отметьте что бы пользователи могли удалять комментарии."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Can delete topics"
    -msgstr "Удалять темы"
    -
    -#: flaskbb/management/forms.py:191
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Отметьте что бы пользователи могли удалять темы."
    -
    -#: flaskbb/management/forms.py:195
    -msgid "Can create topics"
    -msgstr "Создавать темы"
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Отметьте что бы пользователи могли создавать темы."
    -
    -#: flaskbb/management/forms.py:200
    -msgid "Can post replies"
    -msgstr "Комментировать темы"
    -
    -#: flaskbb/management/forms.py:201
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Отметьте что бы пользователи могли комментировать темы."
    -
    -#: flaskbb/management/forms.py:205
    -msgid "Moderators can edit user profiles"
    -msgstr "Модераторы могут редактировать профили пользователей"
    -
    -#: flaskbb/management/forms.py:206
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Позволить модераторам редактировать профили других пользователей включая пароли и адреса эл. почты."
    -
    -#: flaskbb/management/forms.py:211
    -msgid "Moderators can ban users"
    -msgstr "Модераторы могут блокировать пользователей"
    -
    -#: flaskbb/management/forms.py:212
    -msgid "Allow moderators to ban other users."
    -msgstr "Позволить модераторам блокировать других пользователей."
    -
    -#: flaskbb/management/forms.py:229
    -msgid "This Group name is already taken."
    -msgstr "Эта группа уже существует"
    -
    -#: flaskbb/management/forms.py:243
    -msgid "There is already a Banned group."
    -msgstr "Уже существует группа заблокированных пользователей."
    -
    -#: flaskbb/management/forms.py:257
    -msgid "There is already a Guest group."
    -msgstr "Уже существует группа гостевых пользователей."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Forum Title"
    -msgstr "Заголовок форума"
    -
    -#: flaskbb/management/forms.py:280
    -msgid "A Forum Title is required."
    -msgstr "Требуется заголовок форума."
    -
    -#: flaskbb/management/forms.py:286 flaskbb/management/forms.py:401
    -msgid "You can format your description with BBCode."
    -msgstr "Вы можете форматировать описание с помощью BBCode"
    -
    -#: flaskbb/management/forms.py:290 flaskbb/management/forms.py:405
    -msgid "Position"
    -msgstr "Позиция"
    -
    -#: flaskbb/management/forms.py:292
    -msgid "The Forum Position is required."
    -msgstr "Требуеться позиция форума."
    -
    -#: flaskbb/management/forms.py:296
    -msgid "Category"
    -msgstr "Категория"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "The category that contains this forum."
    -msgstr "Категория которая содержит данный форум."
    -
    -#: flaskbb/management/forms.py:304
    -msgid "External Link"
    -msgstr "Внешняя ссылка"
    -
    -#: flaskbb/management/forms.py:306
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ссылка на внешний сайт например: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:310
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/search_result.html:283
    -#: flaskbb/templates/management/forums.html:135
    -msgid "Moderators"
    -msgstr "Модераторы"
    -
    -#: flaskbb/management/forms.py:311
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Имена пользователей разделенные запятой. Оставьте пустым если Вы не хотите назначать модераторов."
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Show Moderators"
    -msgstr "Показывать модераторов"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Вы хотите показывать модераторов на главной странице?"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Locked?"
    -msgstr "Заблокирован?"
    -
    -#: flaskbb/management/forms.py:322
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Отключить новые комментарии и темы на этом форуме."
    -
    -#: flaskbb/management/forms.py:326
    -msgid "Group Access to Forum"
    -msgstr "Доступ групп к форуму"
    -
    -#: flaskbb/management/forms.py:329
    -msgid "Select user groups that can access this forum."
    -msgstr "Выбрать группы пользователей у которых есть доступ к форуму."
    -
    -#: flaskbb/management/forms.py:337
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Вы не можете преобразовать форум которые содержит темы во внешнюю ссылку."
    -
    -#: flaskbb/management/forms.py:342
    -msgid "You also need to specify some moderators."
    -msgstr "Вы должны назначить модераторов."
    -
    -#: flaskbb/management/forms.py:354
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s не входит в группу модераторов."
    -
    -#: flaskbb/management/forms.py:395
    -msgid "Category Title"
    -msgstr "Называние категории"
    -
    -#: flaskbb/management/forms.py:396
    -msgid "A Category Title is required."
    -msgstr "Требуется названии категории."
    -
    -#: flaskbb/management/forms.py:407
    -msgid "The Category Position is required."
    -msgstr "Требуется позиция категории."
    -
    -#: flaskbb/management/views.py:104
    -msgid "Settings saved."
    -msgstr "Настройки сохранены."
    -
    -#: flaskbb/management/views.py:143
    -msgid "You are not allowed to edit this user."
    -msgstr "Вам запрещено редактировать этого пользователя."
    -
    -#: flaskbb/management/views.py:177
    -msgid "User successfully updated."
    -msgstr "Пользователь обновлен."
    -
    -#: flaskbb/management/views.py:181
    -msgid "Edit User"
    -msgstr "Редактировать пользователя."
    -
    -#: flaskbb/management/views.py:216
    -msgid "You cannot delete yourself."
    -msgstr "Вы не можете удалить себя."
    -
    -#: flaskbb/management/views.py:220
    -msgid "User successfully deleted."
    -msgstr "Пользователь успешно удален."
    -
    -#: flaskbb/management/views.py:230
    -msgid "User successfully added."
    -msgstr "Пользователь успешно добавлен."
    -
    -#: flaskbb/management/views.py:234
    -#: flaskbb/templates/management/banned_users.html:24
    -#: flaskbb/templates/management/user_form.html:24
    -#: flaskbb/templates/management/users.html:24
    -msgid "Add User"
    -msgstr "Добавить пользователя"
    -
    -#: flaskbb/management/views.py:264
    -msgid "You do not have the permissions to ban this user."
    -msgstr "У Вас нет прав заблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:288
    -#: flaskbb/templates/management/banned_users.html:96
    -#: flaskbb/templates/management/users.html:122
    -msgid "Unban"
    -msgstr "Разблокировать"
    -
    -#: flaskbb/management/views.py:306
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Модератор не может заблокировать администратора сайта."
    -
    -#: flaskbb/management/views.py:310
    -msgid "User is now banned."
    -msgstr "Пользователь заблокирован."
    -
    -#: flaskbb/management/views.py:312
    -msgid "Could not ban user."
    -msgstr "Невозможно заблокировать пользователя."
    -
    -#: flaskbb/management/views.py:322
    -msgid "You do not have the permissions to unban this user."
    -msgstr "У Вас нет прав разблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:337 flaskbb/templates/management/users.html:112
    -msgid "Ban"
    -msgstr "Заблокировать."
    -
    -#: flaskbb/management/views.py:352
    -msgid "User is now unbanned."
    -msgstr "Пользователь разблокирован."
    -
    -#: flaskbb/management/views.py:354
    -msgid "Could not unban user."
    -msgstr "Невозможно разблокировать пользователя."
    -
    -#: flaskbb/management/views.py:415
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Жалоба %(id)s уже отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:422
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Жалоба %(id)s отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:436
    -msgid "All reports were marked as read."
    -msgstr "Все жалобы уже отмечены как прочитанные."
    -
    -#: flaskbb/management/views.py:467
    -msgid "Group successfully updated."
    -msgstr "Группа успешно обновлена."
    -
    -#: flaskbb/management/views.py:471
    -msgid "Edit Group"
    -msgstr "Редактировать группу"
    -
    -#: flaskbb/management/views.py:499
    -msgid "You cannot delete one of the standard groups."
    -msgstr "Вы не можете удалить одну из стандартных групп."
    -
    -#: flaskbb/management/views.py:507
    -msgid "You cannot delete the standard groups. Try renaming them instead."
    -msgstr "Вы не можете удалить стандартную группу. Попробуйте вместо этого переименовать ее."
    -
    -#: flaskbb/management/views.py:513
    -msgid "Group successfully deleted."
    -msgstr "Группа успешно удалена."
    -
    -#: flaskbb/management/views.py:516
    -msgid "No group choosen.."
    -msgstr "Группа не выбрана."
    -
    -#: flaskbb/management/views.py:526
    -msgid "Group successfully added."
    -msgstr "Группа успешно добавлена."
    -
    -#: flaskbb/management/views.py:530
    -#: flaskbb/templates/management/group_form.html:21
    -#: flaskbb/templates/management/groups.html:20
    -msgid "Add Group"
    -msgstr "Добавит группу"
    -
    -#: flaskbb/management/views.py:549
    -msgid "Forum successfully updated."
    -msgstr "Форум успешно обновлен."
    -
    -#: flaskbb/management/views.py:560 flaskbb/templates/management/forums.html:154
    -msgid "Edit Forum"
    -msgstr "Редактирвать форум"
    -
    -#: flaskbb/management/views.py:573
    -msgid "Forum successfully deleted."
    -msgstr "Форум успешно удален."
    -
    -#: flaskbb/management/views.py:585
    -msgid "Forum successfully added."
    -msgstr "Форум успешно добавлен."
    -
    -#: flaskbb/management/views.py:594
    -#: flaskbb/templates/management/category_form.html:21
    -#: flaskbb/templates/management/forum_form.html:21
    -#: flaskbb/templates/management/forums.html:20
    -#: flaskbb/templates/management/forums.html:44
    -msgid "Add Forum"
    -msgstr "Добавить форум"
    -
    -#: flaskbb/management/views.py:604
    -msgid "Category successfully added."
    -msgstr "Категория успешно добавлена."
    -
    -#: flaskbb/management/views.py:608
    -#: flaskbb/templates/management/category_form.html:22
    -#: flaskbb/templates/management/forum_form.html:22
    -#: flaskbb/templates/management/forums.html:21
    -msgid "Add Category"
    -msgstr "Добавит категорию."
    -
    -#: flaskbb/management/views.py:620
    -msgid "Category successfully updated."
    -msgstr "Категория успешно обновлена."
    -
    -#: flaskbb/management/views.py:624 flaskbb/templates/management/forums.html:47
    -msgid "Edit Category"
    -msgstr "Редактировать категорию."
    -
    -#: flaskbb/management/views.py:637
    -msgid "Category with all associated forums deleted."
    -msgstr "Категория со всеми связаными форумами удалена."
    -
    -#: flaskbb/management/views.py:655
    -msgid "Plugin is already enabled."
    -msgstr "Расширение уже включено"
    -
    -#: flaskbb/management/views.py:660
    -#, python-format
    -msgid "Plugin %(plugin)s enabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s включено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:663
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"removing the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте удалить 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:676
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Расширение %(plugin)s не найдено."
    -
    -#: flaskbb/management/views.py:681
    -#, python-format
    -msgid "Plugin %(plugin)s disabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s отключено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:684
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"creating the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте создать 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:699
    -msgid "Plugin has been uninstalled."
    -msgstr "Расширение удалено."
    -
    -#: flaskbb/management/views.py:701
    -msgid "Cannot uninstall Plugin."
    -msgstr "Не могу удалить расширение."
    -
    -#: flaskbb/management/views.py:714
    -msgid "Plugin has been installed."
    -msgstr "Расширение установлено."
    -
    -#: flaskbb/management/views.py:716
    -msgid "Cannot install Plugin."
    -msgstr "Не могу установить расширение."
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "Получатель"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "Тема"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "Тема обязательна."
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:58
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/topic.html:47
    -#: flaskbb/templates/forum/topic_horizontal.html:58
    -#: flaskbb/templates/message/conversation.html:97
    -#: flaskbb/templates/user/profile_layout.html:47
    -msgid "Message"
    -msgstr "Сообщение"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:59
    -msgid "A Message is required."
    -msgstr "Текст сообщения обязательный"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "Начать переписку"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "Сохранить переписку"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "Такого пользователя не существует"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "Вы не можете отправить сообщение сообщение самому себе"
    -
    -#: flaskbb/message/forms.py:60
    -msgid "Send Message"
    -msgstr "Отправить сообщение"
    -
    -#: flaskbb/message/views.py:71 flaskbb/message/views.py:127
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "Вы не можете отправить больше сообщений, потому что Вы достигли своего лимита сообщений."
    -
    -#: flaskbb/message/views.py:144 flaskbb/message/views.py:216
    -msgid "Message saved."
    -msgstr "Сообщение сохранено"
    -
    -#: flaskbb/message/views.py:169 flaskbb/message/views.py:234
    -msgid "Message sent."
    -msgstr "Сообщение отправлено"
    -
    -#: flaskbb/message/views.py:175
    -msgid "Compose Message"
    -msgstr "Написать сообщение"
    -
    -#: flaskbb/message/views.py:202
    -msgid "You cannot edit a sent message."
    -msgstr "Вы не можете редактировать отправленное сообщение."
    -
    -#: flaskbb/message/views.py:242
    -msgid "Edit Message"
    -msgstr "Редактировать сообщение"
    -
    -#: flaskbb/templates/layout.html:74 flaskbb/templates/navigation.html:20
    -#: flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:10
    -#: flaskbb/templates/forum/memberlist.html:36
    -msgid "Memberlist"
    -msgstr "Участники"
    -
    -#: flaskbb/templates/layout.html:103 flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Inbox"
    -msgstr "Входящие"
    -
    -#: flaskbb/templates/layout.html:104 flaskbb/templates/navigation.html:54
    -#: flaskbb/templates/message/message_layout.html:16
    -msgid "New Message"
    -msgstr "Написать"
    -
    -#: flaskbb/templates/layout.html:116 flaskbb/templates/navigation.html:35
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:15
    -#: flaskbb/templates/forum/topictracker.html:26
    -msgid "Topic Tracker"
    -msgstr "Отслеживание тем"
    -
    -#: flaskbb/templates/layout.html:119 flaskbb/templates/navigation.html:38
    -#: flaskbb/templates/management/management_layout.html:17
    -#: flaskbb/templates/user/settings_layout.html:8
    -msgid "Settings"
    -msgstr "Настройки"
    -
    -#: flaskbb/templates/layout.html:121 flaskbb/templates/navigation.html:40
    -#: flaskbb/templates/management/banned_users.html:9
    -#: flaskbb/templates/management/category_form.html:9
    -#: flaskbb/templates/management/forum_form.html:9
    -#: flaskbb/templates/management/forums.html:8
    -#: flaskbb/templates/management/group_form.html:9
    -#: flaskbb/templates/management/groups.html:8
    -#: flaskbb/templates/management/overview.html:8
    -#: flaskbb/templates/management/plugins.html:8
    -#: flaskbb/templates/management/reports.html:9
    -#: flaskbb/templates/management/settings.html:8
    -#: flaskbb/templates/management/unread_reports.html:9
    -#: flaskbb/templates/management/user_form.html:9
    -#: flaskbb/templates/management/users.html:9
    -msgid "Management"
    -msgstr "Управление"
    -
    -#: flaskbb/templates/layout.html:125 flaskbb/templates/navigation.html:44
    -msgid "Logout"
    -msgstr "Выход"
    -
    -#: flaskbb/templates/macros.html:325
    -msgid "Pages"
    -msgstr "Страницы"
    -
    -#: flaskbb/templates/navigation.html:53
    -msgid "Private Messages"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/auth/login.html:22
    -msgid "Not a member yet?"
    -msgstr "Еще не зарегистрированы?"
    -
    -#: flaskbb/templates/auth/login.html:23
    -msgid "Forgot Password?"
    -msgstr "Забыли пароль?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Уважаемый %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Что бы обновить свой пароль пройдите по следующей ссылке:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "С уважением"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Администрация"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Нет доступа - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -msgid "Forbidden Page"
    -msgstr "Заблокированная страница"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:10
    -msgid "You do not have the permission to view this page."
    -msgstr "У Вас нет доступа к этой странице"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:11
    -#: flaskbb/templates/errors/page_not_found.html:11
    -msgid "Back to the Forums"
    -msgstr "Назад на форум"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "О нет! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Oops, Page not found!"
    -msgstr "Страница не найдена!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:10
    -msgid "The page you were looking for does not exist."
    -msgstr "Страницы которую вы ищете не существует"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Ошибка сервера - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:9
    -msgid "Server Error"
    -msgstr "Ошибка сервера"
    -
    -#: flaskbb/templates/errors/server_error.html:10
    -msgid "Something went wrong!"
    -msgstr "Что-то пошло не так но мы работаем над этим!"
    -
    -#: flaskbb/templates/forum/category_layout.html:9
    -#: flaskbb/templates/forum/search_result.html:129
    -#: flaskbb/templates/forum/search_result.html:214
    -#: flaskbb/templates/management/overview.html:85
    -#: flaskbb/templates/user/all_posts.html:28
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile_layout.html:69
    -msgid "Topics"
    -msgstr "Темы"
    -
    -#: flaskbb/templates/forum/category_layout.html:10
    -#: flaskbb/templates/forum/edit_forum.html:32
    -#: flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/memberlist.html:50
    -#: flaskbb/templates/forum/search_result.html:16
    -#: flaskbb/templates/forum/search_result.html:40
    -#: flaskbb/templates/forum/search_result.html:105
    -#: flaskbb/templates/forum/search_result.html:135
    -#: flaskbb/templates/forum/search_result.html:215
    -#: flaskbb/templates/forum/topic.html:44
    -#: flaskbb/templates/forum/topic_horizontal.html:55
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/management/banned_users.html:63
    -#: flaskbb/templates/management/overview.html:88
    -#: flaskbb/templates/management/users.html:63
    -#: flaskbb/templates/message/conversation.html:44
    -#: flaskbb/templates/message/conversation.html:95
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/all_posts.html:34
    -#: flaskbb/templates/user/all_topics.html:34
    -#: flaskbb/templates/user/profile_layout.html:75
    -msgid "Posts"
    -msgstr "Комментарии"
    -
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/edit_forum.html:34
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/search_result.html:137
    -#: flaskbb/templates/forum/search_result.html:216
    -#: flaskbb/templates/forum/topictracker.html:34
    -msgid "Last Post"
    -msgstr "Последний комментарий "
    -
    -#: flaskbb/templates/forum/category_layout.html:27
    -#: flaskbb/templates/forum/search_result.html:232
    -#: flaskbb/templates/management/forums.html:80
    -msgid "Link to"
    -msgstr "Ссылка на"
    -
    -#: flaskbb/templates/forum/category_layout.html:114
    -#: flaskbb/templates/forum/edit_forum.html:68
    -#: flaskbb/templates/forum/edit_forum.html:91
    -#: flaskbb/templates/forum/forum.html:85 flaskbb/templates/forum/forum.html:107
    -#: flaskbb/templates/forum/search_result.html:162
    -#: flaskbb/templates/forum/search_result.html:184
    -#: flaskbb/templates/forum/search_result.html:317
    -#: flaskbb/templates/forum/topictracker.html:68
    -#: flaskbb/templates/forum/topictracker.html:91
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "by"
    -msgstr "от"
    -
    -#: flaskbb/templates/forum/category_layout.html:123
    -#: flaskbb/templates/forum/search_result.html:326
    -msgid "No posts."
    -msgstr "Нет комментариев."
    -
    -#: flaskbb/templates/forum/edit_forum.html:33
    -#: flaskbb/templates/forum/forum.html:51
    -#: flaskbb/templates/forum/search_result.html:136
    -#: flaskbb/templates/forum/topictracker.html:33
    -msgid "Views"
    -msgstr "Просмотры"
    -
    -#: flaskbb/templates/forum/edit_forum.html:107
    -#: flaskbb/templates/forum/forum.html:120
    -#: flaskbb/templates/forum/topictracker.html:107
    -msgid "No Topics."
    -msgstr "Нет тем."
    -
    -#: flaskbb/templates/forum/edit_forum.html:117
    -msgid "Back"
    -msgstr "Назад"
    -
    -#: flaskbb/templates/forum/edit_forum.html:128
    -msgid "Lock"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:131
    -msgid "Unlock"
    -msgstr "Открыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:137
    -msgid "Highlight"
    -msgstr "Закрепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:140
    -msgid "Trivialize"
    -msgstr "Открепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:145
    -#: flaskbb/templates/management/groups.html:64
    -#: flaskbb/templates/management/users.html:132
    -msgid "Delete"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:158
    -msgid "Move to..."
    -msgstr "Переместить в ... "
    -
    -#: flaskbb/templates/forum/edit_forum.html:165
    -msgid "Move"
    -msgstr "Переместить"
    -
    -#: flaskbb/templates/forum/forum.html:25
    -#: flaskbb/templates/management/unread_reports.html:50
    -#: flaskbb/templates/management/unread_reports.html:69
    -msgid "Mark as Read"
    -msgstr "Отметить как прочитанные"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/topic_controls.html:97
    -msgid "Locked"
    -msgstr "Закрыт"
    -
    -#: flaskbb/templates/forum/forum.html:35
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:13
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "New Topic"
    -msgstr "Новая тема"
    -
    -#: flaskbb/templates/forum/forum.html:130
    -msgid "Moderation Mode"
    -msgstr "Режим модерации"
    -
    -#: flaskbb/templates/forum/index.html:11
    -msgid "Board Statistics"
    -msgstr "Статистика форума"
    -
    -#: flaskbb/templates/forum/index.html:12
    -msgid "Who is online?"
    -msgstr "Кто на форуме?"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Total number of registered users"
    -msgstr "Количество зарегистрированных пользователей"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Total number of topics"
    -msgstr "Количество тем"
    -
    -#: flaskbb/templates/forum/index.html:19
    -msgid "Total number of posts"
    -msgstr "Количество комментариев"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "Newest registered user"
    -msgstr "Последний зарегистрированный пользователь"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "No users"
    -msgstr "Нет пользователей"
    -
    -#: flaskbb/templates/forum/index.html:23
    -msgid "Registered users online"
    -msgstr "Зарегистрированных пользователей на сайте"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Guests online"
    -msgstr "Гостей на сайте"
    -
    -#: flaskbb/templates/forum/memberlist.html:46
    -#: flaskbb/templates/forum/search_result.html:106
    -#: flaskbb/templates/management/banned_users.html:64
    -#: flaskbb/templates/management/users.html:64
    -msgid "Date registered"
    -msgstr "Дата регистрация"
    -
    -#: flaskbb/templates/forum/memberlist.html:48
    -#: flaskbb/templates/forum/search_result.html:107
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:65
    -msgid "Group"
    -msgstr "Группа"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:14
    -#: flaskbb/templates/forum/new_post.html:21
    -msgid "New Post"
    -msgstr "Новый комментарий"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:15
    -#: flaskbb/templates/management/overview.html:76
    -msgid "Online Users"
    -msgstr "Пользователи на форуме"
    -
    -#: flaskbb/templates/forum/report_post.html:20
    -msgid "Report"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/templates/forum/report_post.html:21
    -msgid "Close"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/search_result.html:39
    -#: flaskbb/templates/forum/topic.html:43
    -#: flaskbb/templates/forum/topic_horizontal.html:54
    -#: flaskbb/templates/message/conversation.html:43
    -#: flaskbb/templates/message/conversation.html:94
    -msgid "Joined"
    -msgstr "Присоединившиеся"
    -
    -#: flaskbb/templates/forum/search_result.html:54
    -#: flaskbb/templates/forum/topic.html:58
    -#: flaskbb/templates/message/conversation.html:106
    -msgid "Guest"
    -msgstr "Гость"
    -
    -#: flaskbb/templates/forum/search_result.html:89
    -msgid "No posts found matching your search criteria."
    -msgstr "Не найдено комментариев в соответсвии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/management/banned_users.html:104
    -#: flaskbb/templates/management/users.html:140
    -msgid "No users found matching your search criteria."
    -msgstr "Не найдено пользователей в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:197
    -msgid "No topics found matching your search criteria."
    -msgstr "Не найдено тем в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:335
    -msgid "No forums found matching your search criteria."
    -msgstr "Не найдено форумов в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#: flaskbb/templates/forum/topic_horizontal.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Тема"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Moderate"
    -msgstr "Модерировать"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Delete Topic"
    -msgstr "Удалить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Lock Topic"
    -msgstr "Закрыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Unlock Topic"
    -msgstr "Открыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:56
    -msgid "Highlight Topic"
    -msgstr "Закрепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:65
    -msgid "Trivialize Topic"
    -msgstr "Открепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:80
    -msgid "Untrack Topic"
    -msgstr "Не отслеживать тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:87
    -msgid "Track Topic"
    -msgstr "Отслеживать тему"
    -
    -#: flaskbb/templates/forum/topictracker.html:117
    -msgid "Untrack Topics"
    -msgstr "Не отслеживать темы"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:21
    -#: flaskbb/templates/management/banned_users.html:34
    -#: flaskbb/templates/management/overview.html:79
    -#: flaskbb/templates/management/user_form.html:21
    -#: flaskbb/templates/management/users.html:21
    -msgid "Banned Users"
    -msgstr "Заблокированные пользователи"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/user_form.html:20
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Управлять пользователями"
    -
    -#: flaskbb/templates/management/banned_users.html:70
    -#: flaskbb/templates/management/groups.html:39
    -#: flaskbb/templates/management/unread_reports.html:45
    -#: flaskbb/templates/management/users.html:69
    -msgid "Actions"
    -msgstr "Действия"
    -
    -#: flaskbb/templates/management/banned_users.html:74
    -#: flaskbb/templates/management/users.html:79
    -msgid "Are you sure you want to unban these Users?"
    -msgstr "Вы уверены что вы хотите разблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/banned_users.html:75
    -#: flaskbb/templates/management/users.html:80
    -msgid "Unban selected Users"
    -msgstr "Разблокировать пользователей"
    -
    -#: flaskbb/templates/management/category_form.html:20
    -#: flaskbb/templates/management/forum_form.html:20
    -#: flaskbb/templates/management/forums.html:19
    -#: flaskbb/templates/management/forums.html:30
    -msgid "Manage Forums"
    -msgstr "Управлять форумами"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/management_layout.html:19
    -msgid "Forums"
    -msgstr "Форумы"
    -
    -#: flaskbb/templates/management/forums.html:52
    -msgid "Delete Category"
    -msgstr "Удалить категорию"
    -
    -#: flaskbb/templates/management/forums.html:63
    -msgid "Topics / Posts"
    -msgstr "Темы / Комментарии"
    -
    -#: flaskbb/templates/management/forums.html:100
    -msgid "Edit Link"
    -msgstr "Редактировать ссылку"
    -
    -#: flaskbb/templates/management/forums.html:105
    -msgid "Delete Link"
    -msgstr "Удалить ссылку"
    -
    -#: flaskbb/templates/management/forums.html:159
    -msgid "Delete Forum"
    -msgstr "Удалить форум"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/group_form.html:20
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:19
    -msgid "Manage Groups"
    -msgstr "Редактировать группы"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/groups.html:28
    -#: flaskbb/templates/management/management_layout.html:18
    -#: flaskbb/templates/management/overview.html:82
    -msgid "Groups"
    -msgstr "Группы"
    -
    -#: flaskbb/templates/management/groups.html:43
    -msgid "Are you sure you want to delete these Groups?"
    -msgstr "Вы уверены что хотите удалить эти группы?"
    -
    -#: flaskbb/templates/management/groups.html:44
    -msgid "Delete selected Groups"
    -msgstr "Удалить группы"
    -
    -#: flaskbb/templates/management/groups.html:59
    -#: flaskbb/templates/management/users.html:103
    -msgid "Edit"
    -msgstr "Редактировать"
    -
    -#: flaskbb/templates/management/groups.html:71
    -msgid "No groups found."
    -msgstr "Группы не найдены."
    -
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:1
    -#: flaskbb/templates/management/overview.html:16
    -#: flaskbb/templates/user/all_posts.html:16
    -#: flaskbb/templates/user/all_topics.html:16
    -#: flaskbb/templates/user/profile_layout.html:57
    -msgid "Overview"
    -msgstr "Обзор"
    -
    -#: flaskbb/templates/management/management_layout.html:14
    -#: flaskbb/templates/management/overview.html:91
    -#: flaskbb/templates/management/reports.html:1
    -#: flaskbb/templates/management/reports.html:10
    -msgid "Reports"
    -msgstr "Жалобы"
    -
    -#: flaskbb/templates/management/management_layout.html:20
    -#: flaskbb/templates/management/overview.html:115
    -#: flaskbb/templates/management/plugins.html:1
    -#: flaskbb/templates/management/plugins.html:9
    -msgid "Plugins"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/overview.html:25
    -msgid "Everything seems alright."
    -msgstr "Похоже все нормально."
    -
    -#: flaskbb/templates/management/overview.html:26
    -msgid "No new notifications."
    -msgstr "Новых оповещений нет."
    -
    -#: flaskbb/templates/management/overview.html:38
    -msgid "users"
    -msgstr "пользователи"
    -
    -#: flaskbb/templates/management/overview.html:50
    -msgid "posts"
    -msgstr "комментарии"
    -
    -#: flaskbb/templates/management/overview.html:62
    -msgid "topics"
    -msgstr "темы"
    -
    -#: flaskbb/templates/management/overview.html:70
    -msgid "Statistics"
    -msgstr "Статистика"
    -
    -#: flaskbb/templates/management/overview.html:73
    -msgid "Registered Users"
    -msgstr "Зарегистрированные пользователи"
    -
    -#: flaskbb/templates/management/overview.html:96
    -msgid "Components"
    -msgstr "Компоненты"
    -
    -#: flaskbb/templates/management/plugins.html:19
    -msgid "Manage Plugins"
    -msgstr "Управление расширениями"
    -
    -#: flaskbb/templates/management/plugins.html:25
    -msgid "Plugin"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/plugins.html:26
    -msgid "Information"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/management/plugins.html:27
    -msgid "Manage"
    -msgstr "Управлять"
    -
    -#: flaskbb/templates/management/plugins.html:40
    -msgid "Version"
    -msgstr "Версия"
    -
    -#: flaskbb/templates/management/plugins.html:48
    -msgid "Enable"
    -msgstr "Включить"
    -
    -#: flaskbb/templates/management/plugins.html:53
    -msgid "Disable"
    -msgstr "Выключить"
    -
    -#: flaskbb/templates/management/plugins.html:60
    -msgid "Install"
    -msgstr "Установить"
    -
    -#: flaskbb/templates/management/plugins.html:66
    -msgid "Uninstall"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/management/reports.html:21
    -#: flaskbb/templates/management/unread_reports.html:21
    -msgid "Show unread reports"
    -msgstr "Показать непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/reports.html:22
    -#: flaskbb/templates/management/unread_reports.html:22
    -msgid "Show all reports"
    -msgstr "Показать все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:31
    -msgid "All Reports"
    -msgstr "Все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:37
    -#: flaskbb/templates/management/unread_reports.html:37
    -msgid "Poster"
    -msgstr "Комментатор"
    -
    -#: flaskbb/templates/management/reports.html:40
    -#: flaskbb/templates/management/unread_reports.html:40
    -msgid "Reporter"
    -msgstr "Сообщивший"
    -
    -#: flaskbb/templates/management/reports.html:41
    -#: flaskbb/templates/management/unread_reports.html:41
    -msgid "Reported"
    -msgstr "Сообщено"
    -
    -#: flaskbb/templates/management/reports.html:54
    -#: flaskbb/templates/management/unread_reports.html:76
    -msgid "No unread reports."
    -msgstr "Непрочитанных жалоб нет."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Unread Reports"
    -msgstr "Непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "Are you sure you want to mark these Reports as read?"
    -msgstr "Вы уверены что Вы хотите отметить все жалобы как непрочитанные?"
    -
    -#: flaskbb/templates/management/users.html:73
    -msgid "Are you sure you want to ban these Users?"
    -msgstr "Вы уверены что Вы хотите заблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:74
    -msgid "Ban selected Users"
    -msgstr "Заблокировать пользователей"
    -
    -#: flaskbb/templates/management/users.html:85
    -msgid "Are you sure you want to delete these Users?"
    -msgstr "Вы уверены что Вы хотите удалить этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:86
    -msgid "Delete selected Users"
    -msgstr "Удалить пользователей"
    -
    -#: flaskbb/templates/message/conversation.html:105
    -msgid "Deleted"
    -msgstr "Удаленные"
    -
    -#: flaskbb/templates/message/conversation_list.html:6
    -msgid "Conversations"
    -msgstr "Переписки"
    -
    -#: flaskbb/templates/message/conversation_list.html:88
    -msgid "No conversations found."
    -msgstr "Переписок не найдено"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:20
    -msgid "Drafts"
    -msgstr "Черновики"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -msgid "Sent"
    -msgstr "Исходящие"
    -
    -#: flaskbb/templates/message/message_layout.html:21
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Корзина"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Отправленные сообщения"
    -
    -#: flaskbb/templates/user/all_posts.html:65
    -msgid "The user has not written any posts yet."
    -msgstr "Пользователь не написал ни одного комментария."
    -
    -#: flaskbb/templates/user/all_topics.html:67
    -msgid "The user has not opened any topics yet."
    -msgstr "Пользователь не начал ни одной темы."
    -
    -#: flaskbb/templates/user/change_email.html:7
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Изменить адрес эл. почты"
    -
    -#: flaskbb/templates/user/change_password.html:7
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Изменить пароль"
    -
    -#: flaskbb/templates/user/change_user_details.html:8
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Изменить настройки пользователя"
    -
    -#: flaskbb/templates/user/general_settings.html:7
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Общие настройки"
    -
    -#: flaskbb/templates/user/profile.html:19
    -msgid "Info"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/user/profile.html:25
    -msgid "User has not added any notes about him."
    -msgstr "Пользователь не добавил комментарий о себе"
    -
    -#: flaskbb/templates/user/profile.html:34
    -msgid "Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/templates/user/profile_layout.html:27
    -msgid "Never seen"
    -msgstr "Никогда не видели"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Настройки учетной записи"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "Тема"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "Старый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "Новый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "Адреса эл. почты должны совпадать"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "Подтвердите адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "Текущий пароль"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "Подтвердите новый пароль"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "Неверный текущий пароль"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "Настройки обновлены"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "Пароль обновлен."
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "Адрес эл. почты обновлен"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "Детальная информация обновлена."
    -
    -#: flaskbb/utils/helpers.py:79
    -msgid "You do not have the permissions to execute this action."
    -msgstr "У Вас нет прав для этого действия."
    -
    -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 378697ee..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1608 +0,0 @@
    -# Chinese (Simplified, China) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: https://github.com/flaskbb\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-15 10:53+0800\n"
    -"Language-Team: FlaskBB in zh_Hans_CN\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Last-Translator: ZHOU JIAHUI \n"
    -"Language: zh\n"
    -"X-Generator: Poedit 1.8.1\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "密码重置"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "您只能使用字母、数字与短划线"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "用户名或邮箱地址"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "请输入用户名或邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密码"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "请输入密码。"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "记住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登录"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "用户名"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "请输入用户名。"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "邮箱地址"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "请输入邮箱地址"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "不正确的邮箱地址"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "两次输入的密码不一致。"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "校验密码"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我同意并遵守服务条例"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1 flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "注册"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "该用户名已被使用。"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "该邮箱已被使用。"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "验证码"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登录"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "请输入邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "请求重置密码"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密码"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "错误的邮箱地址"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "错误的用户名或密码。"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "重新认证身份。"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感谢您的注册。"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "邮件已发送至您的邮箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "您输入的邮箱没有关联至您的账户。"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的令牌已不合法。"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "你的令牌已过期。"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密码已被更新。"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回复"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34 flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能发表一个空的回复。"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54 flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "内容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "关注该主题"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "预览"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "标题"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "请输入一个标题"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "发表主题"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "您为何报告这个主题?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "报告主题"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89 flaskbb/forum/forms.py:104
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜索"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "条件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主题"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6 flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "论坛"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "用户"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您没有权限创建一个新主题。"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "你没有权限删除该主题。"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您没有权限锁上该主题。"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您没有权限解锁该主题。"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您没有权限高亮该主题。"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您没有权限去高亮该主题。"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您没有权限移动该主题。"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "无法将本主题移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "本主题已被移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您没有权限合并该主题。"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "无法合并主题。"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "主题已被成功合并。"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您没有权限回复该主题。"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您没有权限编辑本条回复。"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您没有权限删除本条回复。"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "感谢您的报告。"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "论坛 %(forum)s 已被标记为已读。"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "所有论坛已被标记为已读。"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性别"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "网站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "头像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "签名"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "个人说明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主用户组"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要用户组"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "保存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "用户组名"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "请输入用户组名。"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "描述"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "管理员组?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "勾上本选项后本群用户能够访问管理员面板。"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "超级版主组?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "勾上本选项后本群用户能够管理所有论坛。"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "版主组?"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified forums."
    -msgstr "勾上本选项后本群用户能够管理特定的论坛。"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "禁止用户组?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只允许存在一个禁止用户组。"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "来宾组?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只允许存在一个来宾用户组。"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "能编辑回复"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "勾上本选项后本群用户可以编辑回复。"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "能删除回复"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "勾上本选项后本群用户可以删除回复。"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "能删除主题"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "勾上本选项后本群用户可以删除主题。"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "能创建主题"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "能创建回复"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "版主能够修改用户资料"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and email "
    -"changes."
    -msgstr "允许版主能够编辑其他用户的资料(包括密码和邮箱地址)"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "版主能够禁止用户"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允许版主能够禁止其他用户。"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "该用户组名已被使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已存在禁止用户组了。"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已存在来宾用户组。"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "论坛标题"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "请输入论坛标题。"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以使用 BBCode 来格式化您的描述。"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "先后位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "请输入一个先后位置。"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "分类"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "该论坛将位与此分类之下。"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部链接"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "链接到外部的网站(例:’http://flaskbb.org')。"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "版主"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "使用逗号来分割用户。如果您不想设置版主的话留空即可。"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "展示版主"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在主页上显示版主?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "加锁?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "在该论坛禁止发表新主题与回复。"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "请选择可以访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您不能改变一个主题包含外部链接的论坛。"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定版主。"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "用户 %(user)s 不在版主组里。"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "分类标题"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "请输入分类标题。"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "请输入分类的先后位置。"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "设置已被保存。"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您没有权限编辑该用户。"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "用户信息已被成功更新。"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "编辑用户。"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "删除用户成功。"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "添加用户成功。"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "添加用户"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您没有权限禁止该用户。"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "一个版主无法禁止一个管理员。"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "该用户已被禁止。"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "无法禁止该用户。"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您没有权限恢复该用户。"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "该用户已被恢复。"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "无法恢复该用户。"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "报告 %(id)s 已被标记为已读。"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "报告 %(id)s 被标记为已读。"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "所有报告被标记为已读。"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "成功更新用户组信息。"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "编辑用户组"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "删除用户组成功。"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "添加用户组成功。"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "添加用户组"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "成功更新论坛信息。"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "编辑论坛"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "删除论坛成功。"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "添加论坛成功。"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "添加论坛"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "添加分类成功。"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "添加分类"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "成功更新分类信息。"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "编辑分类"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "该分类与所有相关联的论坛已被删除。"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "插件启用成功。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "插件已被启用。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己删除 "
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "无法启用插件。"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "没有找到此插件:%(plugin)s。"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "插件已被禁用。请重新载入您的引用。"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己创建"
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "插件已被卸载。"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "无法卸载插件。"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "插件已被安装。"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "无法安装插件。"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "给用户"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主题"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "请输入主题"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "消息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "请输入消息。"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "新建会话"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "保存会话"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您输入的用户不存在。"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您无法给自己发送私人消息。"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "发送消息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message limit."
    -msgstr "由于您超出了限额,因此您将无法继续发送任何消息。"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "消息已被保存。"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "消息已被发送。"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "撰写消息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您无法编辑一条已被发送的消息。"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "编辑消息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "用户列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "设置"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "注销"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新消息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "页面"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "还未注册?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘记密码?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "亲爱的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "点击该链接来重置您的密码:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真诚的"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理人员"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "无法访问 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的页面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "您没有权限访问该页面。"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "返回论坛。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "没有该页面 - 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您查找的页面不存在。"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "服务器报告了一个错误。"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主题"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "回复量"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最后的回复"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "来自"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "暂无回复。"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "标记为已读。"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "锁定"
    -
    -#: flaskbb/templates/forum/forum.html:33 flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新建主题"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "浏览"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "没有主题"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "论坛统计"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "谁在线上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "所有注册用户数量"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "所有主题数量"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "所有回复数量"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新注册用户"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "暂无用户"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "在线注册用户"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "在线来宾用户"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "注册日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新建回复"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "在线用户"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "报告"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "关闭"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "注册于"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "来宾用户"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "没有找到符合条件的回复。"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "没有找到符合条件的用户。"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "没有找到符合条件的主题。"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "论坛"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "没有找到符合条件的论坛。"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主题"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最后修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "编辑"
    -
    -#: flaskbb/templates/forum/topic.html:131 flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "删除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "不再关注"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "关注主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "删除主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "锁上主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解锁主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "高亮主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "普通化主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "暂无主题。"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "被禁止的用户"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理员"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "恢复"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理论坛"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理用户组"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概况"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "报告"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "全局统计"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理插件"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "信息"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "启用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "禁用"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安装"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "卸载"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "显示未读报告"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "显示所有报告"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有报告"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回复者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "报告者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已被报告"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "还没有报告。"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未读报告"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "将所有标记为已读。"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "没有未读的报告。"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "所有会话"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "未找到任何会话。"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿箱"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "发件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "废纸篓"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "发送消息"
    -
    -#: flaskbb/templates/user/all_posts.html:8 flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有回复"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "所有回复由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主题"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "所有主题由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "修改邮箱"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "修改密码"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "修改用户信息"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "通用设置"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "信息"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "用户状态"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "该用户没有添加关于他的备注。"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入于"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最后上线于"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "从未上线"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最后发表回复"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "从未"
    -
    -#: flaskbb/templates/user/profile.html:74 flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "没有信息"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "账户设置"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "语言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主题"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原邮箱地址"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新邮箱地址"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "两次输入的邮箱不一致。"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "校对邮箱地址"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密码"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "请输入密码"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "校对密码"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密码错误。"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "设置更新成功。"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "密码修改成功。"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "邮箱更新成功。"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "更新用户信息成功。"
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b8e31d78..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1615 +0,0 @@
    -# Chinese (Traditional, Taiwan) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -#, fuzzy
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-16 15:04+0800\n"
    -"Last-Translator: Sean Chen \n"
    -"Language-Team: zh_Hant_TW \n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "重設密碼"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "你只可以使用英文字母、數字或短橫線"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "請輸入使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密碼"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "記住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登入"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "使用者名稱"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "請輸入使用者名稱"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "無效的電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "輸入的密碼不一致"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我接受服務條款"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "註冊"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "使用者名稱已使用"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "電子郵件帳號已使用"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "驗證碼"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登入"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "取得密碼"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密碼"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "電子郵件帳號錯誤"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "使用者名稱或密碼錯誤"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "已重新驗證"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感謝註冊"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "已寄出電子郵件!請確認您的信箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "您輸入了未連結到您的帳號的使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的重置密碼記號已失效"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "您的重置密碼記號已過期"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密碼已更新"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回文"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能發表空白的回文"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回文"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "內容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "追蹤這個主題"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "預覽"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "標題"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "請選擇一個標題"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "發表文章"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "為什麼要舉報這篇文章"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "舉報文章"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:50
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜尋"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "搜尋條件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "文章"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主題"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "論壇"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "使用者"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您沒有權限發表一個新的主題"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "您沒有權限刪除這個主題"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您沒有權限鎖定這個主題"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您沒有權限解鎖這個主題"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您沒有權限強調這個主題"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您沒有權限取消強調這個主題"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您沒有權限移動這個主題"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "無法移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "已移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您沒有權限合併這個主題"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "無法合併主題"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "已成功合併主題"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您沒有權限回覆這個主題"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您沒有權限編輯這篇文章"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您沒有權限刪除這篇文章"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "謝謝您的舉報"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "%(forum)s 論壇已經標記為已讀"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "全部論壇已標記為已讀"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性別"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "網站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "頭像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "簽名檔"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主要群組"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要群組"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "儲存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "群組名稱"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "請輸入群組名稱"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "是否為管理者群組?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "選擇這個選項讓這個群組可使用管理者功能"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "是否為超級協調者群組?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "選擇這個選項讓此群組中的使用者可管理每個論壇"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "是否為協調者群組"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "選擇這個選項讓此群組中的使用者可管理特定的論壇"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "是否為禁止群組?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只可選擇一個禁止群組"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "是否為遊客群組?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只可選擇一個遊客群組"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "可編輯文章"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "選擇這個選項讓此群組中的使用者可編輯文章"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "可刪除文章"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除文章"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "可刪除主題"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除主題"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "可新增主題"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "選擇這個選項讓此群組中的使用者可新增主題"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "可發表回覆"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "選擇這個選項讓此群組中的使用者可發表回覆"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "協調者可編輯使用者檔案"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "允許協調者可編輯其他使用者檔案,包含密碼與電子郵件"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "協調者可禁止使用者"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允許協調者可禁止其他使用者"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "群組名稱已使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已有一個禁止群組"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已有一個遊客群組"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "論壇標題"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "請輸入論壇標題"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以用 BBCode 編輯您的說明"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "請選擇論壇所在ㄙ位置"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "類別"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "論壇的類別"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部連結"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "網站連結 如:'http://flaskbb.org'"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "協調者"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "用逗號分開使用者名稱。如果您不想設定任何協調者請留空白"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "顯示協調者"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在首頁顯示協調者?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "鎖定?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "此論壇禁止所有新文章與主題"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "選擇可使用此論壇的使用者群組"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您無法將包含主題的論壇轉換成外部連結"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定幾位協調者"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s 不屬於協調者群組"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "使用者 %(moderator)s 不存在"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "類別標題"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "請輸入類別標題"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "請選擇類別所在位置"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "設定已儲存"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您沒有權限編輯這個使用者"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "已成功更新使用者"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "編輯使用者"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "已成功刪除使用者"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "已成功新增使用者"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "新增使用者"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您沒有權限禁止此使用者"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "協調者不能禁止管理者"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "已禁止此使用者"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "不能禁止此使用者"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您沒有權限取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "已取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "不能取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "舉報 %(id)s 已標記為已讀"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "舉報 %(id)s 標記為已讀"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "全部舉報已標記為已讀"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "已成功更新群組"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "編輯群組"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "已成功刪除群組"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "已成功新增群組"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "新增群組"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "已成功更新論壇"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "編輯論壇"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "已成功刪除論壇"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "已成功新增論壇"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "新增論壇"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "已成功新增類別"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "新增類別"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "已成功更新類別"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "編輯類別"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "已刪除類別與所有相關論壇"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "無法啟用外掛"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "外掛 %(plugin)s 不存在"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "外掛已停用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "外掛已移除"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "無法移除外掛"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "外掛已安裝"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "無法安裝外掛"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "收件者"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主題"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "請輸入主題"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "訊息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "請輸入訊息"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "開始對話"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "儲存對話"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您輸入的使用者不存在"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您無法發送訊息給自己"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "發送訊息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "您無法發送任何訊息,因為您的訊息已達到上限"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "訊息已儲存"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "訊息已送出"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "編寫訊息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您無法編輯一個已送出的訊息"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "編輯訊息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "使用者列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "設定"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "登出"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新訊息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "頁"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "還不是使用者?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘記密碼?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "親愛的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "點擊下面的連結來重設您的密碼:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真誠地,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理團隊"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "無法使用 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的頁面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "回到論壇"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "找不到頁面! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "糟糕,找不到頁面!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您找尋的頁面不存在"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "伺服器錯誤 - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "伺服器錯誤"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "發生錯誤!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主題數"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "文章數"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "由"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "無文章"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "標示為已讀"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "鎖定"
    -
    -#: flaskbb/templates/forum/forum.html:33
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新主題"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "閱覽數"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "誰在線上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "註冊使用者總數"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "主題總數"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "文章總數"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "無使用者"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "線上註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "線上遊客"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "註冊日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "群組"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新增文章"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "線上使用者"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "關閉"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "註冊於"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "遊客"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合文章"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合使用者"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合主題"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "論壇"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合論壇"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主題"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最後修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "發送訊息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "編輯"
    -
    -#: flaskbb/templates/forum/topic.html:131
    -#: flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "刪除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "取消追蹤"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "追蹤主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "刪除主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "鎖定主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解鎖主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "強調主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "取消強調"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "禁止的使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "取消禁止"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理論壇"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理群組"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "群組"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概況"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB 版本"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python 版本"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask 版本"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理外掛"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "啟用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "取消"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安裝"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "移除"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "顯示未讀舉報"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "顯示所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回覆者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "舉報者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已舉報"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "無舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未讀舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "全部標記為已讀"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "沒有未讀舉報"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "對話"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "沒有對話"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "已送出"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "垃圾"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "已送出訊息"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有文章"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "%(user)s 的所有文章"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主題"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "%(user)s 的所有主題"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "變更電子郵件"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "變更密碼"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "變更使用者內容"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "一般設定"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "使用者統計"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "使用者未新增說明"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入於"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最後一次登入"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "從未登入"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "從未"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "沒有資訊"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "帳號設定"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "語言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主題"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "電子郵件帳號需一致"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "確認電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密碼"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密碼錯誤"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "已更新設定"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "已更新密碼"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "已更新電子郵件帳號"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "已更新內容"
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/__init__.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/user/__init__.py
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/forms.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/user/forms.py
    deleted file mode 100644
    index b42f996f..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/forms.py
    +++ /dev/null
    @@ -1,116 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.user.forms
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    It provides the forms that are needed for the user views.
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from flask_login import current_user
    -from flask_wtf import Form
    -from wtforms import (StringField, PasswordField, TextAreaField, SelectField,
    -                     ValidationError, SubmitField)
    -from wtforms.validators import (Length, DataRequired, InputRequired, Email,
    -                                EqualTo, Optional, URL)
    -from flask_babelplus import lazy_gettext as _
    -
    -from flaskbb.user.models import User
    -from flaskbb.extensions import db
    -from flaskbb.utils.widgets import SelectBirthdayWidget
    -from flaskbb.utils.fields import BirthdayField
    -from flaskbb.utils.helpers import check_image
    -
    -
    -class GeneralSettingsForm(Form):
    -    # The choices for those fields will be generated in the user view
    -    # because we cannot access the current_app outside of the context
    -    language = SelectField(_("Language"))
    -    theme = SelectField(_("Theme"))
    -
    -    submit = SubmitField(_("Save"))
    -
    -
    -class ChangeEmailForm(Form):
    -    old_email = StringField(_("Old E-Mail Address"), validators=[
    -        DataRequired(message=_("A E-Mail Address is required.")),
    -        Email(message=_("Invalid E-Mail Address."))])
    -
    -    new_email = StringField(_("New E-Mail Address"), validators=[
    -        InputRequired(),
    -        EqualTo('confirm_new_email', message=_("E-Mails must match.")),
    -        Email(message=_("Invalid E-Mail Address."))])
    -
    -    confirm_new_email = StringField(_("Confirm E-Mail Address"), validators=[
    -        Email(message=_("Invalid E-Mail Address."))])
    -
    -    submit = SubmitField(_("Save"))
    -
    -    def __init__(self, user, *args, **kwargs):
    -        self.user = user
    -        kwargs['obj'] = self.user
    -        super(ChangeEmailForm, self).__init__(*args, **kwargs)
    -
    -    def validate_email(self, field):
    -        user = User.query.filter(db.and_(
    -                                 User.email.like(field.data),
    -                                 db.not_(User.id == self.user.id))).first()
    -        if user:
    -            raise ValidationError(_("This E-Mail Address is already taken."))
    -
    -
    -class ChangePasswordForm(Form):
    -    old_password = PasswordField(_("Old Password"), validators=[
    -        DataRequired(message=_("Password required"))])
    -
    -    new_password = PasswordField(_('Password'), validators=[
    -        InputRequired(),
    -        EqualTo('confirm_new_password', message=_('Passwords must match.'))])
    -
    -    confirm_new_password = PasswordField(_('Confirm New Password'))
    -
    -    submit = SubmitField(_("Save"))
    -
    -    def validate_old_password(self, field):
    -        if not current_user.check_password(field.data):
    -            raise ValidationError(_("Old Password is wrong."))
    -
    -
    -class ChangeUserDetailsForm(Form):
    -    birthday = BirthdayField(_("Birthday"), format="%d %m %Y",
    -                             validators=[Optional()],
    -                             widget=SelectBirthdayWidget())
    -
    -    gender = SelectField(_("Gender"), default="None", choices=[
    -        ("None", ""),
    -        ("Male", _("Male")),
    -        ("Female", _("Female"))])
    -
    -    location = StringField(_("Location"), validators=[
    -        Optional()])
    -
    -    website = StringField(_("Website"), validators=[
    -        Optional(), URL()])
    -
    -    avatar = StringField(_("Avatar"), validators=[
    -        Optional(), URL()])
    -
    -    signature = TextAreaField(_("Forum Signature"), validators=[
    -        Optional()])
    -
    -    notes = TextAreaField(_("Notes"), validators=[
    -        Optional(), Length(min=0, max=5000)])
    -
    -    submit = SubmitField(_("Save"))
    -
    -    def validate_birthday(self, field):
    -        if field.data is None:
    -            return True
    -
    -    def validate_avatar(self, field):
    -        if field.data is not None:
    -            error, status = check_image(field.data)
    -            if error is not None:
    -                raise ValidationError(error)
    -            return status
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/models.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/user/models.py
    deleted file mode 100644
    index eb894463..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/models.py
    +++ /dev/null
    @@ -1,509 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.user.models
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    This module provides the models for the user.
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from datetime import datetime
    -
    -from itsdangerous import TimedJSONWebSignatureSerializer as Serializer
    -from itsdangerous import SignatureExpired
    -from werkzeug.security import generate_password_hash, check_password_hash
    -from flask import current_app, url_for
    -from flask_login import UserMixin, AnonymousUserMixin
    -
    -from flaskbb._compat import max_integer
    -from flaskbb.extensions import db, cache
    -from flaskbb.utils.settings import flaskbb_config
    -from flaskbb.utils.database import CRUDMixin
    -from flaskbb.forum.models import (Post, Topic, topictracker, TopicsRead,
    -                                  ForumsRead)
    -from flaskbb.message.models import Conversation
    -
    -
    -groups_users = db.Table(
    -    'groups_users',
    -    db.Column('user_id', db.Integer(), db.ForeignKey('users.id')),
    -    db.Column('group_id', db.Integer(), db.ForeignKey('groups.id')))
    -
    -
    -class Group(db.Model, CRUDMixin):
    -    __tablename__ = "groups"
    -
    -    id = db.Column(db.Integer, primary_key=True)
    -    name = db.Column(db.String(255), unique=True, nullable=False)
    -    description = db.Column(db.Text)
    -
    -    # Group types
    -    admin = db.Column(db.Boolean, default=False, nullable=False)
    -    super_mod = db.Column(db.Boolean, default=False, nullable=False)
    -    mod = db.Column(db.Boolean, default=False, nullable=False)
    -    guest = db.Column(db.Boolean, default=False, nullable=False)
    -    banned = db.Column(db.Boolean, default=False, nullable=False)
    -
    -    # Moderator permissions (only available when the user a moderator)
    -    mod_edituser = db.Column(db.Boolean, default=False, nullable=False)
    -    mod_banuser = db.Column(db.Boolean, default=False, nullable=False)
    -
    -    # User permissions
    -    editpost = db.Column(db.Boolean, default=True, nullable=False)
    -    deletepost = db.Column(db.Boolean, default=False, nullable=False)
    -    deletetopic = db.Column(db.Boolean, default=False, nullable=False)
    -    posttopic = db.Column(db.Boolean, default=True, nullable=False)
    -    postreply = db.Column(db.Boolean, default=True, nullable=False)
    -
    -    # Methods
    -    def __repr__(self):
    -        """Set to a unique key specific to the object in the database.
    -        Required for cache.memoize() to work across requests.
    -        """
    -        return "<{} {} {}>".format(self.__class__.__name__, self.id, self.name)
    -
    -    @classmethod
    -    def selectable_groups_choices(cls):
    -        return Group.query.order_by(Group.name.asc()).with_entities(
    -            Group.id, Group.name
    -        ).all()
    -
    -    @classmethod
    -    def get_guest_group(cls):
    -        return cls.query.filter(cls.guest==True).first()
    -
    -
    -
    -class User(db.Model, UserMixin, CRUDMixin):
    -    __tablename__ = "users"
    -    __searchable__ = ['username', 'email']
    -
    -    id = db.Column(db.Integer, primary_key=True)
    -    username = db.Column(db.String(200), unique=True, nullable=False)
    -    email = db.Column(db.String(200), unique=True, nullable=False)
    -    _password = db.Column('password', db.String(120), nullable=False)
    -    date_joined = db.Column(db.DateTime, default=datetime.utcnow())
    -    lastseen = db.Column(db.DateTime, default=datetime.utcnow())
    -    birthday = db.Column(db.DateTime)
    -    gender = db.Column(db.String(10))
    -    website = db.Column(db.String(200))
    -    location = db.Column(db.String(100))
    -    signature = db.Column(db.Text)
    -    avatar = db.Column(db.String(200))
    -    notes = db.Column(db.Text)
    -
    -    theme = db.Column(db.String(15))
    -    language = db.Column(db.String(15), default="en")
    -
    -    posts = db.relationship("Post", backref="user", lazy="dynamic")
    -    topics = db.relationship("Topic", backref="user", lazy="dynamic")
    -
    -    post_count = db.Column(db.Integer, default=0)
    -
    -    primary_group_id = db.Column(db.Integer, db.ForeignKey('groups.id'),
    -                                 nullable=False)
    -
    -    primary_group = db.relationship('Group', lazy="joined",
    -                                    backref="user_group", uselist=False,
    -                                    foreign_keys=[primary_group_id])
    -
    -    secondary_groups = \
    -        db.relationship('Group',
    -                        secondary=groups_users,
    -                        primaryjoin=(groups_users.c.user_id == id),
    -                        backref=db.backref('users', lazy='dynamic'),
    -                        lazy='dynamic')
    -
    -    tracked_topics = \
    -        db.relationship("Topic", secondary=topictracker,
    -                        primaryjoin=(topictracker.c.user_id == id),
    -                        backref=db.backref("topicstracked", lazy="dynamic"),
    -                        lazy="dynamic")
    -
    -    # Properties
    -    @property
    -    def last_post(self):
    -        """Returns the latest post from the user."""
    -
    -        return Post.query.filter(Post.user_id == self.id).\
    -            order_by(Post.date_created.desc()).first()
    -
    -    @property
    -    def url(self):
    -        """Returns the url for the user."""
    -        return url_for("user.profile", username=self.username)
    -
    -    @property
    -    def permissions(self):
    -        """Returns the permissions for the user."""
    -        return self.get_permissions()
    -
    -    @property
    -    def groups(self):
    -        """Returns the user groups."""
    -        return self.get_groups()
    -
    -    @property
    -    def unread_messages(self):
    -        """Returns the unread messages for the user."""
    -        return self.get_unread_messages()
    -
    -    @property
    -    def unread_count(self):
    -        """Returns the unread message count for the user."""
    -        return len(self.unread_messages)
    -
    -    @property
    -    def days_registered(self):
    -        """Returns the amount of days the user is registered."""
    -        days_registered = (datetime.utcnow() - self.date_joined).days
    -        if not days_registered:
    -            return 1
    -        return days_registered
    -
    -    @property
    -    def topic_count(self):
    -        """Returns the thread count."""
    -        return Topic.query.filter(Topic.user_id == self.id).count()
    -
    -    @property
    -    def posts_per_day(self):
    -        """Returns the posts per day count."""
    -        return round((float(self.post_count) / float(self.days_registered)), 1)
    -
    -    @property
    -    def topics_per_day(self):
    -        """Returns the topics per day count."""
    -        return round((float(self.topic_count) / float(self.days_registered)), 1)
    -
    -    # Methods
    -    def __repr__(self):
    -        """Set to a unique key specific to the object in the database.
    -        Required for cache.memoize() to work across requests.
    -        """
    -        return "<{} {}>".format(self.__class__.__name__, self.username)
    -
    -    def _get_password(self):
    -        """Returns the hashed password."""
    -        return self._password
    -
    -    def _set_password(self, password):
    -        """Generates a password hash for the provided password."""
    -        if not password:
    -            return
    -        self._password = generate_password_hash(password)
    -
    -    # Hide password encryption by exposing password field only.
    -    password = db.synonym('_password',
    -                          descriptor=property(_get_password,
    -                                              _set_password))
    -
    -    def check_password(self, password):
    -        """Check passwords. If passwords match it returns true, else false."""
    -
    -        if self.password is None:
    -            return False
    -        return check_password_hash(self.password, password)
    -
    -    @classmethod
    -    def authenticate(cls, login, password):
    -        """A classmethod for authenticating users.
    -        It returns true if the user exists and has entered a correct password
    -
    -        :param login: This can be either a username or a email address.
    -
    -        :param password: The password that is connected to username and email.
    -        """
    -
    -        user = cls.query.filter(db.or_(User.username == login,
    -                                       User.email == login)).first()
    -
    -        if user:
    -            authenticated = user.check_password(password)
    -        else:
    -            authenticated = False
    -        return user, authenticated
    -
    -    def _make_token(self, data, timeout):
    -        s = Serializer(current_app.config['SECRET_KEY'], timeout)
    -        return s.dumps(data)
    -
    -    def _verify_token(self, token):
    -        s = Serializer(current_app.config['SECRET_KEY'])
    -        data = None
    -        expired, invalid = False, False
    -        try:
    -            data = s.loads(token)
    -        except SignatureExpired:
    -            expired = True
    -        except Exception:
    -            invalid = True
    -        return expired, invalid, data
    -
    -    def make_reset_token(self, expiration=3600):
    -        """Creates a reset token. The duration can be configured through the
    -        expiration parameter.
    -
    -        :param expiration: The time in seconds how long the token is valid.
    -        """
    -        return self._make_token({'id': self.id, 'op': 'reset'}, expiration)
    -
    -    def verify_reset_token(self, token):
    -        """Verifies a reset token. It returns three boolean values based on
    -        the state of the token (expired, invalid, data).
    -
    -        :param token: The reset token that should be checked.
    -        """
    -
    -        expired, invalid, data = self._verify_token(token)
    -        if data and data.get('id') == self.id and data.get('op') == 'reset':
    -            data = True
    -        else:
    -            data = False
    -        return expired, invalid, data
    -
    -    def recalculate(self):
    -        """Recalculates the post count from the user."""
    -        post_count = Post.query.filter_by(user_id=self.id).count()
    -        self.post_count = post_count
    -        self.save()
    -        return self
    -
    -    def all_topics(self, page):
    -        """Returns a paginated result with all topics the user has created."""
    -
    -        return Topic.query.filter(Topic.user_id == self.id).\
    -            filter(Post.topic_id == Topic.id).\
    -            order_by(Post.id.desc()).\
    -            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
    -
    -    def all_posts(self, page):
    -        """Returns a paginated result with all posts the user has created."""
    -
    -        return Post.query.filter(Post.user_id == self.id).\
    -            paginate(page, flaskbb_config['TOPICS_PER_PAGE'], False)
    -
    -    def track_topic(self, topic):
    -        """Tracks the specified topic.
    -
    -        :param topic: The topic which should be added to the topic tracker.
    -        """
    -
    -        if not self.is_tracking_topic(topic):
    -            self.tracked_topics.append(topic)
    -            return self
    -
    -    def untrack_topic(self, topic):
    -        """Untracks the specified topic.
    -
    -        :param topic: The topic which should be removed from the
    -                      topic tracker.
    -        """
    -
    -        if self.is_tracking_topic(topic):
    -            self.tracked_topics.remove(topic)
    -            return self
    -
    -    def is_tracking_topic(self, topic):
    -        """Checks if the user is already tracking this topic.
    -
    -        :param topic: The topic which should be checked.
    -        """
    -
    -        return self.tracked_topics.filter(
    -            topictracker.c.topic_id == topic.id).count() > 0
    -
    -    def add_to_group(self, group):
    -        """Adds the user to the `group` if he isn't in it.
    -
    -        :param group: The group which should be added to the user.
    -        """
    -
    -        if not self.in_group(group):
    -            self.secondary_groups.append(group)
    -            return self
    -
    -    def remove_from_group(self, group):
    -        """Removes the user from the `group` if he is in it.
    -
    -        :param group: The group which should be removed from the user.
    -        """
    -
    -        if self.in_group(group):
    -            self.secondary_groups.remove(group)
    -            return self
    -
    -    def in_group(self, group):
    -        """Returns True if the user is in the specified group.
    -
    -        :param group: The group which should be checked.
    -        """
    -
    -        return self.secondary_groups.filter(
    -            groups_users.c.group_id == group.id).count() > 0
    -
    -    @cache.memoize(timeout=max_integer)
    -    def get_groups(self):
    -        """Returns all the groups the user is in."""
    -        return [self.primary_group] + list(self.secondary_groups)
    -
    -    @cache.memoize(timeout=max_integer)
    -    def get_permissions(self, exclude=None):
    -        """Returns a dictionary with all permissions the user has"""
    -        if exclude:
    -            exclude = set(exclude)
    -        else:
    -            exclude = set()
    -        exclude.update(['id', 'name', 'description'])
    -
    -        perms = {}
    -        # Get the Guest group
    -        for group in self.groups:
    -            columns = set(group.__table__.columns.keys()) - set(exclude)
    -            for c in columns:
    -                perms[c] = getattr(group, c) or perms.get(c, False)
    -        return perms
    -
    -    @cache.memoize(timeout=max_integer)
    -    def get_unread_messages(self):
    -        """Returns all unread messages for the user."""
    -        unread_messages = Conversation.query.\
    -            filter(Conversation.unread, Conversation.user_id == self.id).all()
    -        return unread_messages
    -
    -    def invalidate_cache(self, permissions=True, messages=True):
    -        """Invalidates this objects cached metadata.
    -
    -        :param permissions_only: If set to ``True`` it will only invalidate
    -                                 the permissions cache. Otherwise it will
    -                                 also invalidate the user's unread message
    -                                 cache.
    -        """
    -        if messages:
    -            cache.delete_memoized(self.get_unread_messages, self)
    -
    -        if permissions:
    -            cache.delete_memoized(self.get_permissions, self)
    -            cache.delete_memoized(self.get_groups, self)
    -
    -    def ban(self):
    -        """Bans the user. Returns True upon success."""
    -
    -        if not self.get_permissions()['banned']:
    -            banned_group = Group.query.filter(
    -                Group.banned == True
    -            ).first()
    -
    -            self.primary_group_id = banned_group.id
    -            self.save()
    -            self.invalidate_cache()
    -            return True
    -        return False
    -
    -    def unban(self):
    -        """Unbans the user. Returns True upon success."""
    -
    -        if self.get_permissions()['banned']:
    -            member_group = Group.query.filter(
    -                Group.admin == False,
    -                Group.super_mod == False,
    -                Group.mod == False,
    -                Group.guest == False,
    -                Group.banned == False
    -            ).first()
    -
    -            self.primary_group_id = member_group.id
    -            self.save()
    -            self.invalidate_cache()
    -            return True
    -        return False
    -
    -    def save(self, groups=None):
    -        """Saves a user. If a list with groups is provided, it will add those
    -        to the secondary groups from the user.
    -
    -        :param groups: A list with groups that should be added to the
    -                       secondary groups from user.
    -        """
    -
    -        if groups is not None:
    -            # TODO: Only remove/add groups that are selected
    -            secondary_groups = self.secondary_groups.all()
    -            for group in secondary_groups:
    -                self.remove_from_group(group)
    -            db.session.commit()
    -
    -            for group in groups:
    -                # Do not add the primary group to the secondary groups
    -                if group.id == self.primary_group_id:
    -                    continue
    -                self.add_to_group(group)
    -
    -            self.invalidate_cache()
    -
    -        db.session.add(self)
    -        db.session.commit()
    -        return self
    -
    -    def delete(self):
    -        """Deletes the User."""
    -
    -        # This isn't done automatically...
    -        Conversation.query.filter_by(user_id=self.id).delete()
    -        ForumsRead.query.filter_by(user_id=self.id).delete()
    -        TopicsRead.query.filter_by(user_id=self.id).delete()
    -
    -        # This should actually be handeld by the dbms.. but dunno why it doesnt
    -        # work here
    -        from flaskbb.forum.models import Forum
    -
    -        last_post_forums = Forum.query.\
    -            filter_by(last_post_user_id=self.id).all()
    -
    -        for forum in last_post_forums:
    -            forum.last_post_user_id = None
    -            forum.save()
    -
    -        db.session.delete(self)
    -        db.session.commit()
    -
    -        return self
    -
    -
    -class Guest(AnonymousUserMixin):
    -    @property
    -    def permissions(self):
    -        return self.get_permissions()
    -
    -    @property
    -    def groups(self):
    -        return self.get_groups()
    -
    -    @cache.memoize(timeout=max_integer)
    -    def get_groups(self):
    -        return Group.query.filter(Group.guest == True).all()
    -
    -    @cache.memoize(timeout=max_integer)
    -    def get_permissions(self, exclude=None):
    -
    -        """Returns a dictionary with all permissions the user has"""
    -        if exclude:
    -            exclude = set(exclude)
    -        else:
    -            exclude = set()
    -        exclude.update(['id', 'name', 'description'])
    -
    -        perms = {}
    -        # Get the Guest group
    -        for group in self.groups:
    -            columns = set(group.__table__.columns.keys()) - set(exclude)
    -            for c in columns:
    -                perms[c] = getattr(group, c) or perms.get(c, False)
    -        return perms
    -
    -    @classmethod
    -    def invalidate_cache(cls):
    -        """Invalidates this objects cached metadata."""
    -
    -        cache.delete_memoized(cls.get_permissions, cls)
    diff --git a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/views.py b/profiling/test_projects/flaskbb_lite_2/flaskbb/user/views.py
    deleted file mode 100644
    index f10deb8a..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/flaskbb/user/views.py
    +++ /dev/null
    @@ -1,109 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.user.views
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    The user view handles the user profile
    -    and the user settings from a signed in user.
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from flask import Blueprint, flash, request
    -from flask_login import login_required, current_user
    -from flask_themes2 import get_themes_list
    -from flask_babelplus import gettext as _
    -
    -from flaskbb.extensions import babel
    -from flaskbb.utils.helpers import render_template
    -from flaskbb.user.models import User
    -from flaskbb.user.forms import (ChangePasswordForm, ChangeEmailForm,
    -                                ChangeUserDetailsForm, GeneralSettingsForm)
    -
    -
    -user = Blueprint("user", __name__)
    -
    -
    -@user.route("/")
    -def profile(username):
    -    user = User.query.filter_by(username=username).first_or_404()
    -
    -    return render_template("user/profile.html", user=user)
    -
    -
    -@user.route("//topics")
    -def view_all_topics(username):
    -    page = request.args.get("page", 1, type=int)
    -    user = User.query.filter_by(username=username).first_or_404()
    -    topics = user.all_topics(page)
    -    return render_template("user/all_topics.html", user=user, topics=topics)
    -
    -
    -@user.route("//posts")
    -def view_all_posts(username):
    -    page = request.args.get("page", 1, type=int)
    -    user = User.query.filter_by(username=username).first_or_404()
    -    posts = user.all_posts(page)
    -    return render_template("user/all_posts.html", user=user, posts=posts)
    -
    -
    -@user.route("/settings/general", methods=["POST", "GET"])
    -@login_required
    -def settings():
    -    form = GeneralSettingsForm()
    -
    -    form.theme.choices = [(theme.identifier, theme.name)
    -                          for theme in get_themes_list()]
    -
    -    form.language.choices = [(locale.language, locale.display_name)
    -                             for locale in babel.list_translations()]
    -
    -    if form.validate_on_submit():
    -        current_user.theme = form.theme.data
    -        current_user.language = form.language.data
    -        current_user.save()
    -
    -        flash(_("Settings updated."), "success")
    -    else:
    -        form.theme.data = current_user.theme
    -        form.language.data = current_user.language
    -
    -    return render_template("user/general_settings.html", form=form)
    -
    -
    -@user.route("/settings/password", methods=["POST", "GET"])
    -@login_required
    -def change_password():
    -    form = ChangePasswordForm()
    -    if form.validate_on_submit():
    -        current_user.password = form.new_password.data
    -        current_user.save()
    -
    -        flash(_("Password updated."), "success")
    -    return render_template("user/change_password.html", form=form)
    -
    -
    -@user.route("/settings/email", methods=["POST", "GET"])
    -@login_required
    -def change_email():
    -    form = ChangeEmailForm(current_user)
    -    if form.validate_on_submit():
    -        current_user.email = form.new_email.data
    -        current_user.save()
    -
    -        flash(_("E-Mail Address updated."), "success")
    -    return render_template("user/change_email.html", form=form)
    -
    -
    -@user.route("/settings/user-details", methods=["POST", "GET"])
    -@login_required
    -def change_user_details():
    -    form = ChangeUserDetailsForm(obj=current_user)
    -
    -    if form.validate_on_submit():
    -        form.populate_obj(current_user)
    -        current_user.save()
    -
    -        flash(_("Details updated."), "success")
    -
    -    return render_template("user/change_user_details.html", form=form)
    diff --git a/profiling/test_projects/flaskbb_lite_2/logs/.gitkeep b/profiling/test_projects/flaskbb_lite_2/logs/.gitkeep
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_2/manage.py b/profiling/test_projects/flaskbb_lite_2/manage.py
    deleted file mode 100755
    index 19e09941..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/manage.py
    +++ /dev/null
    @@ -1,317 +0,0 @@
    -#!/usr/bin/env python
    -
    -"""
    -    flaskbb.manage
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    This script provides some easy to use commands for
    -    creating the database with or without some sample content.
    -    You can also run the development server with it.
    -    Just type `python manage.py` to see the full list of commands.
    -
    -    TODO: When Flask 1.0 is released, get rid of Flask-Script and use click.
    -          Then it's also possible to split the commands in "command groups"
    -          which would make the commands better seperated from each other
    -          and less confusing.
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from __future__ import print_function
    -import sys
    -import os
    -import subprocess
    -import requests
    -
    -from flask import current_app
    -from werkzeug.utils import import_string
    -from sqlalchemy.exc import IntegrityError, OperationalError
    -from flask_script import (Manager, Shell, Server, prompt, prompt_pass,
    -                          prompt_bool)
    -from flask_migrate import MigrateCommand, upgrade
    -
    -from flaskbb import create_app
    -from flaskbb.extensions import db, plugin_manager
    -from flaskbb.utils.populate import (create_test_data, create_welcome_forum,
    -                                    create_admin_user, create_default_groups,
    -                                    create_default_settings, insert_mass_data,
    -                                    update_settings_from_fixture)
    -
    -# Use the development configuration if available
    -try:
    -    from flaskbb.configs.development import DevelopmentConfig as Config
    -except ImportError:
    -    from flaskbb.configs.default import DefaultConfig as Config
    -
    -app = create_app(Config)
    -manager = Manager(app)
    -
    -# Used to get the plugin translations
    -PLUGINS_FOLDER = os.path.join(app.root_path, "plugins")
    -
    -# Run local server
    -manager.add_command("runserver", Server("localhost", port=8080))
    -
    -# Migration commands
    -manager.add_command('db', MigrateCommand)
    -
    -
    -# Add interactive project shell
    -def make_shell_context():
    -    return dict(app=current_app, db=db)
    -manager.add_command("shell", Shell(make_context=make_shell_context))
    -
    -
    -@manager.command
    -def initdb():
    -    """Creates the database."""
    -
    -    upgrade()
    -
    -
    -@manager.command
    -def dropdb():
    -    """Deletes the database."""
    -
    -    db.drop_all()
    -
    -
    -@manager.command
    -def populate(dropdb=False, createdb=False):
    -    """Creates the database with some default data.
    -    To drop or create the databse use the '-d' or '-c' options.
    -    """
    -
    -    if dropdb:
    -        print("Dropping database...")
    -        db.drop_all()
    -
    -    if createdb:
    -        print("Creating database...")
    -        upgrade()
    -
    -    app.logger.info("Creating test data...")
    -    create_test_data()
    -
    -
    -@manager.option('-u', '--username', dest='username')
    -@manager.option('-p', '--password', dest='password')
    -@manager.option('-e', '--email', dest='email')
    -def create_admin(username=None, password=None, email=None):
    -    """Creates the admin user."""
    -
    -    if not (username and password and email):
    -        username = prompt("Username")
    -        email = prompt("A valid email address")
    -        password = prompt_pass("Password")
    -
    -    create_admin_user(username=username, password=password, email=email)
    -
    -
    -@manager.option('-u', '--username', dest='username')
    -@manager.option('-p', '--password', dest='password')
    -@manager.option('-e', '--email', dest='email')
    -def install(username=None, password=None, email=None):
    -    """Installs FlaskBB with all necessary data."""
    -
    -    print("Creating default data...")
    -    try:
    -        create_default_groups()
    -        create_default_settings()
    -    except IntegrityError:
    -        print("Couldn't create the default data because it already exist!")
    -        if prompt_bool("Found an existing database."
    -                       "Do you want to recreate the database? (y/n)"):
    -            db.session.rollback()
    -            db.drop_all()
    -            upgrade()
    -            create_default_groups()
    -            create_default_settings()
    -        else:
    -            sys.exit(0)
    -    except OperationalError:
    -        print("No database found.")
    -        if prompt_bool("Do you want to create the database now? (y/n)"):
    -            db.session.rollback()
    -            upgrade()
    -            create_default_groups()
    -            create_default_settings()
    -        else:
    -            sys.exit(0)
    -
    -    print("Creating admin user...")
    -    if username and password and email:
    -        create_admin_user(username=username, password=password, email=email)
    -    else:
    -        create_admin()
    -
    -    print("Creating welcome forum...")
    -    create_welcome_forum()
    -
    -    print("Compiling translations...")
    -    compile_translations()
    -
    -    if prompt_bool("Do you want to use Emojis? (y/n)"):
    -        print("Downloading emojis. This can take a few minutes.")
    -        download_emoji()
    -
    -    print("Congratulations! FlaskBB has been successfully installed")
    -
    -
    -@manager.command
    -def insertmassdata():
    -    """Warning: This can take a long time!.
    -    Creates 100 topics and each topic contains 100 posts.
    -    """
    -    insert_mass_data()
    -
    -
    -@manager.option('-s', '--settings', dest="settings")
    -@manager.option('-f', '--force', dest="force", default=False)
    -def update(settings=None, force=False):
    -    """Updates the settings via a fixture. All fixtures have to be placed
    -    in the `fixture`.
    -    Usage: python manage.py update -s your_fixture
    -    """
    -
    -    try:
    -        fixture = import_string(
    -            "flaskbb.fixtures.{}".format(settings)
    -        )
    -        fixture = fixture.fixture
    -    except ImportError:
    -        raise "{} fixture is not available".format(settings)
    -
    -    overwrite_group = overwrite_setting = False
    -    if force:
    -        overwrite_group = overwrite_setting = True
    -
    -    count = update_settings_from_fixture(
    -        fixture=fixture,
    -        overwrite_group=overwrite_group,
    -        overwrite_setting=overwrite_setting
    -    )
    -    print("{} groups and {} settings updated.".format(
    -        len(count.keys()), len(count.values()))
    -    )
    -
    -
    -@manager.command
    -def update_translations():
    -    """Updates all translations."""
    -
    -    # update flaskbb translations
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file, "."])
    -    subprocess.call(["pybabel", "update", "-i", source_file,
    -                     "-d", translations_folder])
    -
    -    # updates all plugin translations too
    -    for plugin in plugin_manager.all_plugins:
    -        update_plugin_translations(plugin)
    -
    -
    -@manager.command
    -def add_translations(translation):
    -    """Adds a new language to the translations."""
    -
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file, "."])
    -    subprocess.call(["pybabel", "init", "-i", source_file,
    -                     "-d", translations_folder, "-l", translation])
    -
    -
    -@manager.command
    -def compile_translations():
    -    """Compiles all translations."""
    -
    -    # compile flaskbb translations
    -    translations_folder = os.path.join(app.root_path, "translations")
    -    subprocess.call(["pybabel", "compile", "-d", translations_folder])
    -
    -    # compile all plugin translations
    -    for plugin in plugin_manager.all_plugins:
    -        compile_plugin_translations(plugin)
    -
    -
    -# Plugin translation commands
    -@manager.command
    -def add_plugin_translations(plugin, translation):
    -    """Adds a new language to the plugin translations. Expects the name
    -    of the plugin and the translations name like "en".
    -    """
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file,
    -                     plugin_folder])
    -    subprocess.call(["pybabel", "init", "-i", source_file,
    -                     "-d", translations_folder, "-l", translation])
    -
    -
    -@manager.command
    -def update_plugin_translations(plugin):
    -    """Updates the plugin translations. Expects the name of the plugin."""
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -    source_file = os.path.join(translations_folder, "messages.pot")
    -
    -    subprocess.call(["pybabel", "extract", "-F", "babel.cfg",
    -                     "-k", "lazy_gettext", "-o", source_file,
    -                     plugin_folder])
    -    subprocess.call(["pybabel", "update", "-i", source_file,
    -                     "-d", translations_folder])
    -
    -
    -@manager.command
    -def compile_plugin_translations(plugin):
    -    """Compile the plugin translations. Expects the name of the plugin."""
    -
    -    plugin_folder = os.path.join(PLUGINS_FOLDER, plugin)
    -    translations_folder = os.path.join(plugin_folder, "translations")
    -
    -    subprocess.call(["pybabel", "compile", "-d", translations_folder])
    -
    -
    -@manager.command
    -def download_emoji():
    -    """Downloads emojis from emoji-cheat-sheet.com."""
    -    HOSTNAME = "https://api.github.com"
    -    REPO = "/repos/arvida/emoji-cheat-sheet.com/contents/public/graphics/emojis"
    -    FULL_URL = "{}{}".format(HOSTNAME, REPO)
    -    DOWNLOAD_PATH = os.path.join(app.static_folder, "emoji")
    -
    -    response = requests.get(FULL_URL)
    -
    -    cached_count = 0
    -    count = 0
    -    for image in response.json():
    -        if not os.path.exists(os.path.abspath(DOWNLOAD_PATH)):
    -            print("{} does not exist.".format(os.path.abspath(DOWNLOAD_PATH)))
    -            sys.exit(1)
    -
    -        full_path = os.path.join(DOWNLOAD_PATH, image["name"])
    -        if not os.path.exists(full_path):
    -            count += 1
    -            f = open(full_path, 'wb')
    -            f.write(requests.get(image["download_url"]).content)
    -            f.close()
    -            if count == cached_count + 50:
    -                cached_count = count
    -                print("{} out of {} Emojis downloaded...".format(
    -                      cached_count, len(response.json())))
    -
    -    print("Finished downloading {} Emojis.".format(count))
    -
    -if __name__ == "__main__":
    -    manager.run()
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/README b/profiling/test_projects/flaskbb_lite_2/migrations/README
    deleted file mode 100644
    index 98e4f9c4..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/README
    +++ /dev/null
    @@ -1 +0,0 @@
    -Generic single-database configuration.
    \ No newline at end of file
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/alembic.ini b/profiling/test_projects/flaskbb_lite_2/migrations/alembic.ini
    deleted file mode 100644
    index f8ed4801..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/alembic.ini
    +++ /dev/null
    @@ -1,45 +0,0 @@
    -# A generic, single database configuration.
    -
    -[alembic]
    -# template used to generate migration files
    -# file_template = %%(rev)s_%%(slug)s
    -
    -# set to 'true' to run the environment during
    -# the 'revision' command, regardless of autogenerate
    -# revision_environment = false
    -
    -
    -# Logging configuration
    -[loggers]
    -keys = root,sqlalchemy,alembic
    -
    -[handlers]
    -keys = console
    -
    -[formatters]
    -keys = generic
    -
    -[logger_root]
    -level = WARN
    -handlers = console
    -qualname =
    -
    -[logger_sqlalchemy]
    -level = WARN
    -handlers =
    -qualname = sqlalchemy.engine
    -
    -[logger_alembic]
    -level = INFO
    -handlers =
    -qualname = alembic
    -
    -[handler_console]
    -class = StreamHandler
    -args = (sys.stderr,)
    -level = NOTSET
    -formatter = generic
    -
    -[formatter_generic]
    -format = %(levelname)-5.5s [%(name)s] %(message)s
    -datefmt = %H:%M:%S
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/env.py b/profiling/test_projects/flaskbb_lite_2/migrations/env.py
    deleted file mode 100644
    index 70961ce2..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/env.py
    +++ /dev/null
    @@ -1,73 +0,0 @@
    -from __future__ import with_statement
    -from alembic import context
    -from sqlalchemy import engine_from_config, pool
    -from logging.config import fileConfig
    -
    -# this is the Alembic Config object, which provides
    -# access to the values within the .ini file in use.
    -config = context.config
    -
    -# Interpret the config file for Python logging.
    -# This line sets up loggers basically.
    -fileConfig(config.config_file_name)
    -
    -# add your model's MetaData object here
    -# for 'autogenerate' support
    -# from myapp import mymodel
    -# target_metadata = mymodel.Base.metadata
    -from flask import current_app
    -config.set_main_option('sqlalchemy.url', current_app.config.get('SQLALCHEMY_DATABASE_URI'))
    -target_metadata = current_app.extensions['migrate'].db.metadata
    -
    -# other values from the config, defined by the needs of env.py,
    -# can be acquired:
    -# my_important_option = config.get_main_option("my_important_option")
    -# ... etc.
    -
    -def run_migrations_offline():
    -    """Run migrations in 'offline' mode.
    -
    -    This configures the context with just a URL
    -    and not an Engine, though an Engine is acceptable
    -    here as well.  By skipping the Engine creation
    -    we don't even need a DBAPI to be available.
    -
    -    Calls to context.execute() here emit the given string to the
    -    script output.
    -
    -    """
    -    url = config.get_main_option("sqlalchemy.url")
    -    context.configure(url=url)
    -
    -    with context.begin_transaction():
    -        context.run_migrations()
    -
    -def run_migrations_online():
    -    """Run migrations in 'online' mode.
    -
    -    In this scenario we need to create an Engine
    -    and associate a connection with the context.
    -
    -    """
    -    engine = engine_from_config(
    -                config.get_section(config.config_ini_section),
    -                prefix='sqlalchemy.',
    -                poolclass=pool.NullPool)
    -
    -    connection = engine.connect()
    -    context.configure(
    -                connection=connection,
    -                target_metadata=target_metadata
    -                )
    -
    -    try:
    -        with context.begin_transaction():
    -            context.run_migrations()
    -    finally:
    -        connection.close()
    -
    -if context.is_offline_mode():
    -    run_migrations_offline()
    -else:
    -    run_migrations_online()
    -
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/script.py.mako b/profiling/test_projects/flaskbb_lite_2/migrations/script.py.mako
    deleted file mode 100644
    index 95702017..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/script.py.mako
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -"""${message}
    -
    -Revision ID: ${up_revision}
    -Revises: ${down_revision}
    -Create Date: ${create_date}
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = ${repr(up_revision)}
    -down_revision = ${repr(down_revision)}
    -
    -from alembic import op
    -import sqlalchemy as sa
    -${imports if imports else ""}
    -
    -def upgrade():
    -    ${upgrades if upgrades else "pass"}
    -
    -
    -def downgrade():
    -    ${downgrades if downgrades else "pass"}
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py b/profiling/test_projects/flaskbb_lite_2/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py
    deleted file mode 100644
    index 9408a6a7..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py
    +++ /dev/null
    @@ -1,31 +0,0 @@
    -"""Added m2m forumgroups table
    -
    -Revision ID: 127be3fb000
    -Revises: 514ca0a3282c
    -Create Date: 2015-04-08 22:25:52.809557
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '127be3fb000'
    -down_revision = '514ca0a3282c'
    -
    -from alembic import op
    -import sqlalchemy as sa
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('forumgroups',
    -    sa.Column('group_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['group_id'], ['groups.id'], )
    -    )
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.drop_table('forumgroups')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/versions/514ca0a3282c_private_messages.py b/profiling/test_projects/flaskbb_lite_2/migrations/versions/514ca0a3282c_private_messages.py
    deleted file mode 100644
    index a3e865b9..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/versions/514ca0a3282c_private_messages.py
    +++ /dev/null
    @@ -1,70 +0,0 @@
    -"""Private Messages
    -
    -Revision ID: 514ca0a3282c
    -Revises: 8ad96e49dc6
    -Create Date: 2015-03-22 21:57:57.444251
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '514ca0a3282c'
    -down_revision = '8ad96e49dc6'
    -
    -from alembic import op
    -import sqlalchemy as sa
    -import sqlalchemy_utils
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('conversations',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('from_user_id', sa.Integer(), nullable=True),
    -    sa.Column('to_user_id', sa.Integer(), nullable=True),
    -    sa.Column('shared_id', sqlalchemy_utils.types.uuid.UUIDType(binary=16), nullable=False),
    -    sa.Column('subject', sa.String(length=255), nullable=True),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('trash', sa.Boolean(), nullable=False),
    -    sa.Column('draft', sa.Boolean(), nullable=False),
    -    sa.Column('unread', sa.Boolean(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('messages',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('conversation_id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('message', sa.Text(), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['conversation_id'], ['conversations.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.drop_table('privatemessages')
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('privatemessages',
    -    sa.Column('id', sa.INTEGER(), nullable=False),
    -    sa.Column('user_id', sa.INTEGER(), nullable=False),
    -    sa.Column('from_user_id', sa.INTEGER(), nullable=True),
    -    sa.Column('to_user_id', sa.INTEGER(), nullable=True),
    -    sa.Column('subject', sa.VARCHAR(length=255), nullable=True),
    -    sa.Column('message', sa.TEXT(), nullable=True),
    -    sa.Column('date_created', sa.DATETIME(), nullable=True),
    -    sa.Column('trash', sa.BOOLEAN(), nullable=False),
    -    sa.Column('draft', sa.BOOLEAN(), nullable=False),
    -    sa.Column('unread', sa.BOOLEAN(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], [u'users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], [u'users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], [u'users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.drop_table('messages')
    -    op.drop_table('conversations')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_2/migrations/versions/8ad96e49dc6_init.py b/profiling/test_projects/flaskbb_lite_2/migrations/versions/8ad96e49dc6_init.py
    deleted file mode 100644
    index d84d9cb6..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/migrations/versions/8ad96e49dc6_init.py
    +++ /dev/null
    @@ -1,225 +0,0 @@
    -"""init
    -
    -Revision ID: 8ad96e49dc6
    -Revises: None
    -Create Date: 2015-01-08 23:14:01.941746
    -
    -"""
    -
    -# revision identifiers, used by Alembic.
    -revision = '8ad96e49dc6'
    -down_revision = None
    -
    -from alembic import op
    -import sqlalchemy as sa
    -
    -
    -def upgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.create_table('groups',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('name', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('admin', sa.Boolean(), nullable=False),
    -    sa.Column('super_mod', sa.Boolean(), nullable=False),
    -    sa.Column('mod', sa.Boolean(), nullable=False),
    -    sa.Column('guest', sa.Boolean(), nullable=False),
    -    sa.Column('banned', sa.Boolean(), nullable=False),
    -    sa.Column('mod_edituser', sa.Boolean(), nullable=False),
    -    sa.Column('mod_banuser', sa.Boolean(), nullable=False),
    -    sa.Column('editpost', sa.Boolean(), nullable=False),
    -    sa.Column('deletepost', sa.Boolean(), nullable=False),
    -    sa.Column('deletetopic', sa.Boolean(), nullable=False),
    -    sa.Column('posttopic', sa.Boolean(), nullable=False),
    -    sa.Column('postreply', sa.Boolean(), nullable=False),
    -    sa.PrimaryKeyConstraint('id'),
    -    sa.UniqueConstraint('name')
    -    )
    -    op.create_table('categories',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('position', sa.Integer(), nullable=False),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('settingsgroup',
    -    sa.Column('key', sa.String(length=255), nullable=False),
    -    sa.Column('name', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=False),
    -    sa.PrimaryKeyConstraint('key')
    -    )
    -    op.create_table('settings',
    -    sa.Column('key', sa.String(length=255), nullable=False),
    -    sa.Column('value', sa.PickleType(), nullable=False),
    -    sa.Column('settingsgroup', sa.String(length=255), nullable=False),
    -    sa.Column('name', sa.String(length=200), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=False),
    -    sa.Column('value_type', sa.String(length=20), nullable=False),
    -    sa.Column('extra', sa.PickleType(), nullable=True),
    -    sa.ForeignKeyConstraint(['settingsgroup'], ['settingsgroup.key'], name='fk_settingsgroup', use_alter=True),
    -    sa.PrimaryKeyConstraint('key')
    -    )
    -    op.create_table('users',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('email', sa.String(length=200), nullable=False),
    -    sa.Column('password', sa.String(length=120), nullable=False),
    -    sa.Column('date_joined', sa.DateTime(), nullable=True),
    -    sa.Column('lastseen', sa.DateTime(), nullable=True),
    -    sa.Column('birthday', sa.DateTime(), nullable=True),
    -    sa.Column('gender', sa.String(length=10), nullable=True),
    -    sa.Column('website', sa.String(length=200), nullable=True),
    -    sa.Column('location', sa.String(length=100), nullable=True),
    -    sa.Column('signature', sa.Text(), nullable=True),
    -    sa.Column('avatar', sa.String(length=200), nullable=True),
    -    sa.Column('notes', sa.Text(), nullable=True),
    -    sa.Column('theme', sa.String(length=15), nullable=True),
    -    sa.Column('language', sa.String(length=15), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=True),
    -    sa.Column('primary_group_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['primary_group_id'], ['groups.id'], ),
    -    sa.PrimaryKeyConstraint('id'),
    -    sa.UniqueConstraint('email'),
    -    sa.UniqueConstraint('username')
    -    )
    -    op.create_table('topictracker',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tracker_topic_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('groups_users',
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('group_id', sa.Integer(), nullable=True),
    -    sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('forumsread',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('last_read', sa.DateTime(), nullable=True),
    -    sa.Column('cleared', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_fr_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('user_id', 'forum_id')
    -    )
    -    op.create_table('moderators',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], )
    -    )
    -    op.create_table('posts',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=True),
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('content', sa.Text(), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('date_modified', sa.DateTime(), nullable=True),
    -    sa.Column('modified_by', sa.String(length=200), nullable=True),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_post_topic_id', ondelete='CASCADE', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('privatemessages',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('from_user_id', sa.Integer(), nullable=True),
    -    sa.Column('to_user_id', sa.Integer(), nullable=True),
    -    sa.Column('subject', sa.String(length=255), nullable=True),
    -    sa.Column('message', sa.Text(), nullable=True),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('trash', sa.Boolean(), nullable=False),
    -    sa.Column('draft', sa.Boolean(), nullable=False),
    -    sa.Column('unread', sa.Boolean(), nullable=False),
    -    sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('topicsread',
    -    sa.Column('user_id', sa.Integer(), nullable=False),
    -    sa.Column('topic_id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('last_read', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_tr_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tr_topic_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('user_id', 'topic_id', 'forum_id')
    -    )
    -    op.create_table('topics',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('forum_id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('user_id', sa.Integer(), nullable=True),
    -    sa.Column('username', sa.String(length=200), nullable=False),
    -    sa.Column('date_created', sa.DateTime(), nullable=True),
    -    sa.Column('last_updated', sa.DateTime(), nullable=True),
    -    sa.Column('locked', sa.Boolean(), nullable=True),
    -    sa.Column('important', sa.Boolean(), nullable=True),
    -    sa.Column('views', sa.Integer(), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=True),
    -    sa.Column('first_post_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_id', sa.Integer(), nullable=True),
    -    sa.ForeignKeyConstraint(['first_post_id'], ['posts.id'], ondelete='CASCADE'),
    -    sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_topic_forum_id', use_alter=True),
    -    sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('reports',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('reporter_id', sa.Integer(), nullable=False),
    -    sa.Column('reported', sa.DateTime(), nullable=True),
    -    sa.Column('post_id', sa.Integer(), nullable=False),
    -    sa.Column('zapped', sa.DateTime(), nullable=True),
    -    sa.Column('zapped_by', sa.Integer(), nullable=True),
    -    sa.Column('reason', sa.Text(), nullable=True),
    -    sa.ForeignKeyConstraint(['post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['reporter_id'], ['users.id'], ),
    -    sa.ForeignKeyConstraint(['zapped_by'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    op.create_table('forums',
    -    sa.Column('id', sa.Integer(), nullable=False),
    -    sa.Column('category_id', sa.Integer(), nullable=False),
    -    sa.Column('title', sa.String(length=255), nullable=False),
    -    sa.Column('description', sa.Text(), nullable=True),
    -    sa.Column('position', sa.Integer(), nullable=False),
    -    sa.Column('locked', sa.Boolean(), nullable=False),
    -    sa.Column('show_moderators', sa.Boolean(), nullable=False),
    -    sa.Column('external', sa.String(length=200), nullable=True),
    -    sa.Column('post_count', sa.Integer(), nullable=False),
    -    sa.Column('topic_count', sa.Integer(), nullable=False),
    -    sa.Column('last_post_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_title', sa.String(length=255), nullable=True),
    -    sa.Column('last_post_user_id', sa.Integer(), nullable=True),
    -    sa.Column('last_post_username', sa.String(length=255), nullable=True),
    -    sa.Column('last_post_created', sa.DateTime(), nullable=True),
    -    sa.ForeignKeyConstraint(['category_id'], ['categories.id'], ),
    -    sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ),
    -    sa.ForeignKeyConstraint(['last_post_user_id'], ['users.id'], ),
    -    sa.PrimaryKeyConstraint('id')
    -    )
    -    ### end Alembic commands ###
    -
    -
    -def downgrade():
    -    ### commands auto generated by Alembic - please adjust! ###
    -    op.drop_table('forums')
    -    op.drop_table('reports')
    -    op.drop_table('topics')
    -    op.drop_table('topicsread')
    -    op.drop_table('privatemessages')
    -    op.drop_table('posts')
    -    op.drop_table('moderators')
    -    op.drop_table('forumsread')
    -    op.drop_table('groups_users')
    -    op.drop_table('topictracker')
    -    op.drop_table('users')
    -    op.drop_table('settings')
    -    op.drop_table('settingsgroup')
    -    op.drop_table('categories')
    -    op.drop_table('groups')
    -    ### end Alembic commands ###
    diff --git a/profiling/test_projects/flaskbb_lite_2/mprof.py b/profiling/test_projects/flaskbb_lite_2/mprof.py
    deleted file mode 100644
    index 6c3c6a99..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/mprof.py
    +++ /dev/null
    @@ -1,512 +0,0 @@
    -#!/usr/bin/env python
    -
    -import glob
    -import os
    -import os.path as osp
    -import sys
    -import re
    -import copy
    -import time
    -import math
    -
    -from optparse import OptionParser, OptionValueError
    -
    -import memory_profiler as mp
    -
    -ALL_ACTIONS = ("run", "rm", "clean", "list", "plot")
    -help_msg = """
    -Available commands:
    -
    -    run      run a given command or python file
    -    rm       remove a given file generated by mprof
    -    clean    clean the current directory from files created by mprof
    -    list     display existing profiles, with indices
    -    plot     plot memory consumption generated by mprof run
    -
    -Type mprof  --help for usage help on a specific command.
    -For example, mprof plot --help will list all plotting options.
    -"""
    -
    -def print_usage():
    -    print("Usage: %s   "
    -                  % osp.basename(sys.argv[0]))
    -    print(help_msg)
    -
    -
    -
    -def get_action():
    -    """Pop first argument, check it is a valid action."""
    -    if len(sys.argv) <= 1:
    -        print_usage()
    -        sys.exit(1)
    -    if not sys.argv[1] in ALL_ACTIONS:
    -        print_usage()
    -        sys.exit(1)
    -
    -    return sys.argv.pop(1)
    -
    -
    -def get_profile_filenames(args):
    -    """Return list of profile filenames.
    -
    -    Parameters
    -    ==========
    -    args (list)
    -        list of filename or integer. An integer is the index of the
    -        profile in the list of existing profiles. 0 is the oldest,
    -        -1 in the more recent.
    -        Non-existing files cause a ValueError exception to be thrown.
    -
    -    Returns
    -    =======
    -    filenames (list)
    -        list of existing memory profile filenames. It is guaranteed
    -        that an given file name will not appear twice in this list.
    -    """
    -    profiles = glob.glob("mprofile_??????????????.dat")
    -    profiles.sort()
    -
    -    if args is "all":
    -        filenames = copy.copy(profiles)
    -    else:
    -        filenames = []
    -        for arg in args:
    -            if arg == "--":  # workaround
    -                continue
    -            try:
    -                index = int(arg)
    -            except ValueError:
    -                index = None
    -            if index is not None:
    -                try:
    -                    filename = profiles[index]
    -                except IndexError:
    -                    raise ValueError("Invalid index (non-existing file): %s" % arg)
    -
    -                if filename not in filenames:
    -                    filenames.append(filename)
    -            else:
    -                if osp.isfile(arg):
    -                    if arg not in filenames:
    -                        filenames.append(arg)
    -                elif osp.isdir(arg):
    -                    raise ValueError("Path %s is a directory" % arg)
    -                else:
    -                    raise ValueError("File %s not found" % arg)
    -
    -    # Add timestamp files, if any
    -    for filename in reversed(filenames):
    -        parts = osp.splitext(filename)
    -        timestamp_file = parts[0] + "_ts" + parts[1]
    -        if osp.isfile(timestamp_file) and timestamp_file not in filenames:
    -            filenames.append(timestamp_file)
    -
    -    return filenames
    -
    -
    -def list_action():
    -    """Display existing profiles, with indices."""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) > 0:
    -        print("This command takes no argument.")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames("all")
    -    for n, filename in enumerate(filenames):
    -        ts = osp.splitext(filename)[0].split('_')[-1]
    -        print("{index} {filename} {hour}:{min}:{sec} {day}/{month}/{year}"
    -              .format(index=n, filename=filename,
    -                      year=ts[:4], month=ts[4:6], day=ts[6:8],
    -                      hour=ts[8:10], min=ts[10:12], sec=ts[12:14]))
    -
    -
    -def rm_action():
    -    """TODO: merge with clean_action (@pgervais)"""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--dry-run", dest="dry_run", default=False,
    -                      action="store_true",
    -                      help="""Show what will be done, without actually doing it.""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) == 0:
    -        print("A profile to remove must be provided (number or filename)")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames(args)
    -    if options.dry_run:
    -        print("Files to be removed: ")
    -        for filename in filenames:
    -            print(filename)
    -    else:
    -        for filename in filenames:
    -            os.remove(filename)
    -
    -
    -def clean_action():
    -    """Remove every profile file in current directory."""
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--dry-run", dest="dry_run", default=False,
    -                      action="store_true",
    -                      help="""Show what will be done, without actually doing it.""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) > 0:
    -        print("This command takes no argument.")
    -        sys.exit(1)
    -
    -    filenames = get_profile_filenames("all")
    -    if options.dry_run:
    -        print("Files to be removed: ")
    -        for filename in filenames:
    -            print(filename)
    -    else:
    -        for filename in filenames:
    -            os.remove(filename)
    -
    -
    -def get_cmd_line(args):
    -    """Given a set or arguments, compute command-line."""
    -    blanks = set(' \t')
    -    args = [s if blanks.isdisjoint(s) else "'" + s + "'" for s in args]
    -    return ' '.join(args)
    -
    -
    -def run_action():
    -    import time, subprocess
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--python", dest="python", default=False,
    -                      action="store_true",
    -                      help="""Activates extra features when the profiled executable is
    -                      a Python program (currently: function timestamping.)""")
    -    parser.add_option("--nopython", dest="nopython", default=False,
    -                      action="store_true",
    -                      help="""Disables extra features when the profiled executable is
    -                      a Python program (currently: function timestamping.)""")
    -    parser.add_option("--interval", "-T", dest="interval", default="0.1",
    -                      type="float", action="store",
    -                      help="Sampling period (in seconds), defaults to 0.1")
    -    parser.add_option("--include-children", "-C", dest="include_children",
    -                      default=False, action="store_true",
    -                      help="""Monitors forked processes as well (sum up all process memory)""")
    -
    -    (options, args) = parser.parse_args()
    -
    -    if len(args) == 0:
    -        print("A program to run must be provided. Use -h for help")
    -        sys.exit(1)
    -
    -    print("{1}: Sampling memory every {0.interval}s".format(
    -        options, osp.basename(sys.argv[0])))
    -
    -    ## Output results in a file called "mprofile_.dat" (where
    -    ##  is the date-time of the program start) in the current
    -    ## directory. This file contains the process memory consumption, in Mb (one
    -    ## value per line). Memory is sampled twice each second."""
    -
    -    suffix = time.strftime("%Y%m%d%H%M%S", time.localtime())
    -    mprofile_output = "mprofile_%s.dat" % suffix
    -
    -    # .. TODO: more than one script as argument ? ..
    -    if args[0].endswith('.py') and not options.nopython:
    -        options.python = True
    -    if options.python:
    -        print("running as a Python program...")
    -        if not args[0].startswith("python"):
    -            args.insert(0, "python")
    -        cmd_line = get_cmd_line(args)
    -        args[1:1] = ("-m", "memory_profiler", "--timestamp",
    -                     "-o", mprofile_output)
    -        p = subprocess.Popen(args)
    -    else:
    -        cmd_line = get_cmd_line(args)
    -        p = subprocess.Popen(args)
    -
    -    with open(mprofile_output, "a") as f:
    -        f.write("CMDLINE {0}\n".format(cmd_line))
    -        mp.memory_usage(proc=p, interval=options.interval, timestamps=True,
    -                         include_children=options.include_children, stream=f)
    -
    -
    -def add_brackets(xloc, yloc, xshift=0, color="r", label=None, options=None):
    -    """Add two brackets on the memory line plot.
    -
    -    This function uses the current figure.
    -
    -    Parameters
    -    ==========
    -    xloc: tuple with 2 values
    -        brackets location (on horizontal axis).
    -    yloc: tuple with 2 values
    -        brackets location (on vertical axis)
    -    xshift: float
    -        value to subtract to xloc.
    -    """
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -    height_ratio = 20.
    -    vsize = (pl.ylim()[1] - pl.ylim()[0]) / height_ratio
    -    hsize = (pl.xlim()[1] - pl.xlim()[0]) / (3.*height_ratio)
    -
    -    bracket_x = pl.asarray([hsize, 0, 0, hsize])
    -    bracket_y = pl.asarray([vsize, vsize, -vsize, -vsize])
    -
    -    # Matplotlib workaround: labels starting with _ aren't displayed
    -    if label[0] == '_':
    -        label = ' ' + label
    -    if options.xlim is None or options.xlim[0] <= (xloc[0] - xshift) <= options.xlim[1]:
    -        pl.plot(bracket_x + xloc[0] - xshift, bracket_y + yloc[0],
    -                "-" + color, linewidth=2, label=label)
    -    if options.xlim is None or options.xlim[0] <= (xloc[1] - xshift) <= options.xlim[1]:
    -        pl.plot(-bracket_x + xloc[1] - xshift, bracket_y + yloc[1],
    -                "-" + color, linewidth=2 )
    -
    -    # TODO: use matplotlib.patches.Polygon to draw a colored background for
    -    # each function.
    -
    -    # with maplotlib 1.2, use matplotlib.path.Path to create proper markers
    -    # see http://matplotlib.org/examples/pylab_examples/marker_path.html
    -    # This works with matplotlib 0.99.1
    -    ## pl.plot(xloc[0], yloc[0], "<"+color, markersize=7, label=label)
    -    ## pl.plot(xloc[1], yloc[1], ">"+color, markersize=7)
    -
    -
    -def read_mprofile_file(filename):
    -    """Read an mprofile file and return its content.
    -
    -    Returns
    -    =======
    -    content: dict
    -        Keys:
    -
    -        - "mem_usage": (list) memory usage values, in MiB
    -        - "timestamp": (list) time instant for each memory usage value, in
    -            second
    -        - "func_timestamp": (dict) for each function, timestamps and memory
    -            usage upon entering and exiting.
    -        - 'cmd_line': (str) command-line ran for this profile.
    -    """
    -    func_ts = {}
    -    mem_usage = []
    -    timestamp = []
    -    cmd_line = None
    -    f = open(filename, "r")
    -    for l in f:
    -        if l == '\n':
    -            raise ValueError('Sampling time was too short')
    -        field, value = l.split(' ', 1)
    -        if field == "MEM":
    -            # mem, timestamp
    -            values = value.split(' ')
    -            mem_usage.append(float(values[0]))
    -            timestamp.append(float(values[1]))
    -
    -        elif field == "FUNC":
    -            values = value.split(' ')
    -            f_name, mem_start, start, mem_end, end = values[:5]
    -            ts = func_ts.get(f_name, [])
    -            ts.append([float(start), float(end),
    -                       float(mem_start), float(mem_end)])
    -            func_ts[f_name] = ts
    -
    -        elif field == "CMDLINE":
    -            cmd_line = value
    -        else:
    -            pass
    -    f.close()
    -
    -    return {"mem_usage": mem_usage, "timestamp": timestamp,
    -            "func_timestamp": func_ts, 'filename': filename,
    -            'cmd_line': cmd_line}
    -
    -
    -
    -def plot_file(filename, index=0, timestamps=True, options=None):
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -    import numpy as np  # pylab requires numpy anyway
    -    mprofile = read_mprofile_file(filename)
    -
    -    if len(mprofile['timestamp']) == 0:
    -        print('** No memory usage values have been found in the profile '
    -              'file.**\nFile path: {0}\n'
    -              'File may be empty or invalid.\n'
    -              'It can be deleted with "mprof rm {0}"'.format(
    -              mprofile['filename']))
    -        sys.exit(0)
    -
    -    # Merge function timestamps and memory usage together
    -    ts = mprofile['func_timestamp']
    -    t = mprofile['timestamp']
    -    mem = mprofile['mem_usage']
    -
    -    if len(ts) > 0:
    -        for values in ts.values():
    -            for v in values:
    -                t.extend(v[:2])
    -                mem.extend(v[2:4])
    -
    -    mem = np.asarray(mem)
    -    t = np.asarray(t)
    -    ind = t.argsort()
    -    mem = mem[ind]
    -    t = t[ind]
    -
    -    # Plot curves
    -    global_start = float(t[0])
    -    t = t - global_start
    -
    -    max_mem = mem.max()
    -    max_mem_ind = mem.argmax()
    -
    -    all_colors=("c", "y", "g", "r", "b")
    -    mem_line_colors=("k", "b", "r", "g", "c", "y", "m")
    -    mem_line_label = time.strftime("%d / %m / %Y - start at %H:%M:%S",
    -                                   time.localtime(global_start)) \
    -                                   + ".{0:03d}".format(int(round(math.modf(global_start)[0]*1000)))
    -
    -    pl.plot(t, mem, "+-" + mem_line_colors[index % len(mem_line_colors)],
    -            label=mem_line_label)
    -
    -    bottom, top = pl.ylim()
    -    bottom += 0.001
    -    top -= 0.001
    -
    -    # plot timestamps, if any
    -    if len(ts) > 0 and timestamps:
    -        func_num = 0
    -        for f, exec_ts in ts.items():
    -            for execution in exec_ts:
    -                add_brackets(execution[:2], execution[2:], xshift=global_start,
    -                             color= all_colors[func_num % len(all_colors)],
    -                             label=f.split(".")[-1]
    -                             + " %.3fs" % (execution[1] - execution[0]), options=options)
    -            func_num += 1
    -
    -    if timestamps:
    -        pl.hlines(max_mem,
    -                  pl.xlim()[0] + 0.001, pl.xlim()[1] - 0.001,
    -                  colors="r", linestyles="--")
    -        pl.vlines(t[max_mem_ind], bottom, top,
    -                  colors="r", linestyles="--")
    -    return mprofile
    -
    -
    -def plot_action():
    -    def get_comma_separated_args(option, opt, value, parser):
    -        try:
    -            newvalue = [float(x) for x in value.split(',')]
    -        except:
    -            raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value)
    -        if len(newvalue) != 2:
    -            raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value)
    -        setattr(parser.values, option.dest, newvalue)
    -
    -    try:
    -        import pylab as pl
    -    except ImportError:
    -        print("matplotlib is needed for plotting.")
    -        sys.exit(1)
    -
    -    parser = OptionParser(version=mp.__version__)
    -    parser.disable_interspersed_args()
    -    parser.add_option("--title", "-t", dest="title", default=None,
    -                      type="str", action="store",
    -                      help="String shown as plot title")
    -    parser.add_option("--no-function-ts", "-n", dest="no_timestamps",
    -                      default=False, action="store_true",
    -                      help="Do not display function timestamps on plot.")
    -    parser.add_option("--output", "-o",
    -                      help="Save plot to file instead of displaying it.")
    -    parser.add_option("--window", "-w", dest="xlim",
    -                      type="str", action="callback",
    -                      callback=get_comma_separated_args,
    -                      help="Plot a time-subset of the data. E.g. to plot between 0 and 20.5 seconds: --window 0,20.5")
    -    (options, args) = parser.parse_args()
    -
    -    profiles = glob.glob("mprofile_??????????????.dat")
    -    profiles.sort()
    -
    -    if len(args) == 0:
    -        if len(profiles) == 0:
    -            print("No input file found. \nThis program looks for "
    -                  "mprofile_*.dat files, generated by the "
    -                  "'mprof run' command.")
    -            sys.exit(-1)
    -        print("Using last profile data.")
    -        filenames = [profiles[-1]]
    -    else:
    -        filenames = []
    -        for arg in args:
    -            if osp.exists(arg):
    -                if not arg in filenames:
    -                    filenames.append(arg)
    -            else:
    -                try:
    -                    n = int(arg)
    -                    if not profiles[n] in filenames:
    -                        filenames.append(profiles[n])
    -                except ValueError:
    -                    print("Input file not found: " + arg)
    -    if not len(filenames):
    -        print("No files found from given input.")
    -        sys.exit(-1)
    -
    -    fig = pl.figure(figsize=(14, 6), dpi=90)
    -    ax = fig.add_axes([0.1, 0.1, 0.6, 0.75])
    -    if options.xlim is not None:
    -        pl.xlim(options.xlim[0], options.xlim[1])
    -
    -    if len(filenames) > 1 or options.no_timestamps:
    -        timestamps = False
    -    else:
    -        timestamps = True
    -    for n, filename in enumerate(filenames):
    -        mprofile = plot_file(filename, index=n, timestamps=timestamps, options=options)
    -    pl.xlabel("time (in seconds)")
    -    pl.ylabel("memory used (in MiB)")
    -
    -    if options.title is None and len(filenames) == 1:
    -        pl.title(mprofile['cmd_line'])
    -    else:
    -        if options.title is not None:
    -            pl.title(options.title)
    -
    -    # place legend within the plot, make partially transparent in
    -    # case it obscures part of the lineplot
    -    leg = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))
    -    leg.get_frame().set_alpha(0.5)
    -    pl.grid()
    -    if options.output:
    -        pl.savefig(options.output)
    -    else:
    -        pl.show()
    -
    -if __name__ == "__main__":
    -    # Workaround for optparse limitation: insert -- before first negative
    -    # number found.
    -    negint = re.compile("-[0-9]+")
    -    for n, arg in enumerate(sys.argv):
    -        if negint.match(arg):
    -            sys.argv.insert(n, "--")
    -            break
    -    actions = {"rm": rm_action,
    -               "clean": clean_action,
    -               "list": list_action,
    -               "run": run_action,
    -               "plot": plot_action}
    -    actions[get_action()]()
    diff --git a/profiling/test_projects/flaskbb_lite_2/pytest.ini b/profiling/test_projects/flaskbb_lite_2/pytest.ini
    deleted file mode 100644
    index 295bc34d..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/pytest.ini
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -[pytest]
    -norecursedirs = docs flaskbb logs migrations whoosh_index
    -addopts = --strict --random -vvl
    diff --git a/profiling/test_projects/flaskbb_lite_2/requirements.txt b/profiling/test_projects/flaskbb_lite_2/requirements.txt
    deleted file mode 100644
    index 1a4d91f7..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/requirements.txt
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -alembic==0.8.4
    -Babel==2.2.0
    -blinker==1.3
    -cov-core==1.15.0
    -coverage==4.0.3
    -Flask==0.10.1
    -flask-allows==0.1.0
    -Flask-BabelPlus==1.0.1
    -Flask-Cache==0.13.1
    -Flask-DebugToolbar==0.10.0
    -Flask-Login==0.3.2
    -Flask-Mail==0.9.1
    -Flask-Migrate==1.7.0
    -Flask-Plugins==1.6.1
    -Flask-Redis==0.1.0
    -Flask-Script==2.0.5
    -Flask-SQLAlchemy==2.1
    -Flask-Themes2==0.1.4
    -Flask-WTF==0.12
    -itsdangerous==0.24
    -Jinja2==2.8
    -Mako==1.0.3
    -MarkupSafe==0.23
    -mistune==0.7.1
    -Pygments==2.1
    -pytz==2015.7
    -redis==2.10.5
    -requests==2.9.1
    -simplejson==3.8.1
    -six==1.10.0
    -speaklater==1.3
    -SQLAlchemy==1.0.11
    -SQLAlchemy-Utils==0.31.6
    -Unidecode==0.04.19
    -Werkzeug==0.11.3
    -Whoosh==2.7.0
    -WTForms==2.1
    -https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-Whooshalchemy
    diff --git a/profiling/test_projects/flaskbb_lite_2/setup.py b/profiling/test_projects/flaskbb_lite_2/setup.py
    deleted file mode 100644
    index 265d0688..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/setup.py
    +++ /dev/null
    @@ -1,123 +0,0 @@
    -"""
    -FlaskBB
    -=======
    -
    -FlaskBB is a forum software written in Python using the microframework Flask.
    -
    -
    -And Easy to Setup
    ------------------
    -
    -.. code:: bash
    -    $ python manage.py createall
    -
    -    $ python manage.py runserver
    -     * Running on http://localhost:8080/
    -
    -
    -Resources
    ----------
    -
    -* `website `_
    -* `source `_
    -* `issues `_
    -
    -"""
    -from setuptools import setup
    -from setuptools.command.test import test as TestCommand
    -import sys
    -
    -
    -class PyTestCommand(TestCommand):
    -    user_options = [('pytest-args=', 'a', 'Arguments to pass to py.test')]
    -
    -    def initialize_options(self):
    -        TestCommand.initialize_options(self)
    -        self.pytest_args = []
    -
    -    def finalize_options(self):
    -        TestCommand.finalize_options(self)
    -        self.test_args = []
    -        self.test_suite = True
    -
    -    def run_tests(self):
    -        import pytest
    -        errno = pytest.main(self.pytest_args)
    -        sys.exit(errno)
    -
    -
    -setup(
    -    name='FlaskBB',
    -    version='1.0.dev0',
    -    url='http://github.com/sh4nks/flaskbb/',
    -    license='BSD',
    -    author='sh4nks',
    -    author_email='sh4nks7@gmail.com',
    -    description='A forum software written with flask',
    -    long_description=__doc__,
    -    packages=['flaskbb'],
    -    include_package_data=True,
    -    zip_safe=False,
    -    platforms='any',
    -    install_requires=[
    -        'Babel',
    -        'Flask',
    -        'Flask-Cache',
    -        'Flask-DebugToolbar',
    -        'Flask-Login',
    -        'Flask-Mail',
    -        'Flask-Migrate',
    -        'Flask-Plugins',
    -        'Flask-Redis',
    -        'Flask-SQLAlchemy',
    -        'Flask-Script',
    -        'Flask-Themes2',
    -        'Flask-WTF',
    -        'Flask-WhooshAlchemy',
    -        'Flask-BabelEx',
    -        'Jinja2',
    -        'Mako',
    -        'MarkupSafe',
    -        'Pygments',
    -        'SQLAlchemy',
    -        'Unidecode',
    -        'WTForms',
    -        'Werkzeug',
    -        'Whoosh',
    -        'alembic',
    -        'blinker',
    -        'cov-core',
    -        'coverage',
    -        'itsdangerous',
    -        'mistune',
    -        'pytz',
    -        'redis',
    -        'requests',
    -        'simplejson',
    -        'speaklater',
    -        'sqlalchemy-utils'
    -    ],
    -    test_suite='tests',
    -    tests_require=[
    -        'py',
    -        'pytest',
    -        'pytest-cov',
    -        'pytest-random'
    -    ],
    -    dependency_links=[
    -        'https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-WhooshAlchemy',
    -        'https://github.com/sh4nks/flask-babelex/tarball/master#egg=Flask-BabelEx'
    -    ],
    -    classifiers=[
    -        'Development Status :: 4 - Beta',
    -        'Environment :: Web Environment',
    -        'Intended Audience :: Developers, Users',
    -        'License :: OSI Approved :: BSD License',
    -        'Operating System :: OS Independent',
    -        'Programming Language :: Python',
    -        'Programming Language :: Python :: 3',
    -        'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
    -        'Topic :: Software Development :: Libraries :: Python Modules'
    -    ],
    -    cmdclass={'test': PyTestCommand}
    -)
    diff --git a/profiling/test_projects/flaskbb_lite_2/test_requirements.txt b/profiling/test_projects/flaskbb_lite_2/test_requirements.txt
    deleted file mode 100644
    index 2390419f..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/test_requirements.txt
    +++ /dev/null
    @@ -1,5 +0,0 @@
    --r requirements.txt
    -py==1.4.31
    -pytest==2.8.7
    -pytest-cov==2.2.0
    -pytest-random==0.2
    diff --git a/profiling/test_projects/flaskbb_lite_2/tests/__init__.py b/profiling/test_projects/flaskbb_lite_2/tests/__init__.py
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_2/tests/conftest.py b/profiling/test_projects/flaskbb_lite_2/tests/conftest.py
    deleted file mode 100644
    index f5158fa1..00000000
    --- a/profiling/test_projects/flaskbb_lite_2/tests/conftest.py
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -from tests.fixtures.app import *
    -from tests.fixtures.forum import *
    -from tests.fixtures.user import *
    diff --git a/profiling/test_projects/flaskbb_lite_2/tests/endtoend/.test_auth_views.py.swp b/profiling/test_projects/flaskbb_lite_2/tests/endtoend/.test_auth_views.py.swp
    deleted file mode 100644
    index eb61b9d46f8973e6fe46bd4ee295734c3e6b603b..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 12288
    zcmeI2&2AGh5XT+F0SUtQ0d7M$bR)v16eK>R2yv;z0U;sL>*DM>i6Oh*+TOI~0D?XM
    z;^P%~0R$3)Gj9OgxbX}e5#x=Qv{k4|6$urMrGG51?eWZS$A?v>JHK@E7F-T5F>FT}
    zJ9%LL()Idc?J6*Kzc7|(+Rbd+;w0X7zM6dG4Yp&ISuMNm-jJII-EP|oV@+FRiBM0ps>C3SL*EI!i9Oa|7_z7oH%}WSEgta5g-CYfCvx)
    zB0vO)01+Spdy|08YwR()zR$Z4zOQZR{g65$Km>>Y5g-CYfCvx)B0vO)01+SpL|_jR
    z;0a@=4l?!@<^KN%AH%mJjJ-##qY9Ko8Po#m^I^t5qCTKF>K-aW9YcMuGxiDf8nupk
    zih6=Nhx&Plu`j51sF$c0sOP9f)M?ZY^x>=b#t3a;?)FG%SMfRrG6OA4&Z-q|038^~>OtB6#XeU?tGxN3`P=SL^<@?nczlqm
    zL}+f6E{EeKE7A^t=lM{^+)9;&u2479V!3d=tKt=_HfUaBiReK&SDg{Ltr6PXVz;%?
    zTnlg?FNQWU!djX24VuDF5Z`7Ro+)ynokKGZvb5|Xop!`Oi9^UcZHG!MTk!iV}DO;ASS9~TH<_{Sz
    z(_G<&A0N$nTBYDi;X{m9l<^txtERfNc~iBold

    \n" - - -def test_is_online(default_settings, user): - assert is_online(user) - - -def test_format_date(): - date = datetime.date(2015, 2, 15) - time = datetime.datetime.combine(date, datetime.datetime.min.time()) - assert format_date(time) == "2015-02-15" - - -def test_format_quote(topic): - expected_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n" - actual = format_quote(topic.first_post.username, topic.first_post.content) - assert actual == expected_markdown - - -def test_get_image_info(): - # some random jpg/gif/png images from my imgur account - jpg = "http://i.imgur.com/NgVIeRG.jpg" - gif = "http://i.imgur.com/l3Vmp4m.gif" - png = "http://i.imgur.com/JXzKxNs.png" - - jpg_img = get_image_info(jpg) - assert jpg_img["content-type"] == "image/jpeg" - assert jpg_img["height"] == 1024 - assert jpg_img["width"] == 1280 - assert jpg_img["size"] == 209.06 - - gif_img = get_image_info(gif) - assert gif_img["content-type"] == "image/gif" - assert gif_img["height"] == 168 - assert gif_img["width"] == 400 - assert gif_img["size"] == 576.138 - - png_img = get_image_info(png) - assert png_img["content-type"] == "image/png" - assert png_img["height"] == 1080 - assert png_img["width"] == 1920 - assert png_img["size"] == 269.409 - - -def test_check_image(default_settings): - # test200x100.png - img_width = "http://i.imgur.com/4dAWAZI.png" - # test100x200.png - img_height = "http://i.imgur.com/I7GwF3D.png" - # test100x100.png - img_ok = "http://i.imgur.com/CYV6NzT.png" - # random too big image - img_size = "http://i.imgur.com/l3Vmp4m.gif" - # random image wrong type - img_type = "https://d11xdyzr0div58.cloudfront.net/static/logos/archlinux-logo-black-scalable.f931920e6cdb.svg" - - data = check_image(img_width) - assert "wide" in data[0] - assert not data[1] - - data = check_image(img_height) - assert "high" in data[0] - assert not data[1] - - data = check_image(img_type) - assert "type" in data[0] - assert not data[1] - - data = check_image(img_ok) - assert data[0] is None - assert data[1] - - flaskbb_config["AVATAR_WIDTH"] = 1000 - flaskbb_config["AVATAR_HEIGHT"] = 1000 - data = check_image(img_size) - assert "big" in data[0] - assert not data[1] diff --git a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_markup.py b/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_markup.py deleted file mode 100644 index 19d8caf7..00000000 --- a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_markup.py +++ /dev/null @@ -1,28 +0,0 @@ -from flaskbb.utils.markup import collect_emojis, EMOJIS, markdown - - -def test_collect_emojis(): - assert collect_emojis() == EMOJIS - - -def test_custom_renderer(): - # custom paragraph - p_expected = "

    @sh4nks is :developing: flaskbb.

    \n" - p_plain = "@sh4nks is :developing: :flaskbb:." - assert markdown.render(p_plain) == p_expected - - # custom block code with pygments highlighting - b_expected = """\n
    print("Hello World")
    \n""" - b_expected_lang = """
    print("Hello World")\n
    \n""" - b_plain = """ -``` -print("Hello World") -``` -""" - b_plain_lang = """ -```python -print("Hello World") -``` -""" - assert markdown.render(b_plain) == b_expected - assert markdown.render(b_plain_lang) == b_expected_lang diff --git a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_populate.py b/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_populate.py deleted file mode 100644 index 71030664..00000000 --- a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_populate.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest -from flaskbb.utils.populate import * -from flaskbb.fixtures.groups import fixture as group_fixture -from flaskbb.fixtures.settings import fixture as settings_fixture -from flaskbb.user.models import Group -from flaskbb.forum.models import Category, Topic, Post - -# 184-199, 218-268, 278-307 -def test_delete_settings_from_fixture(default_settings): - groups_count = SettingsGroup.query.count() - assert len(settings_fixture) == groups_count - - deleted = delete_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(deleted) - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - -def test_create_settings_from_fixture(database): - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - created = create_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(created) - assert SettingsGroup.query.count() == len(created) - - -def test_update_settings_from_fixture(database): - # No force-overwrite - the fixtures will be created because - # do not exist. - assert not SettingsGroup.query.count() - assert not Setting.query.count() - updated = update_settings_from_fixture(settings_fixture) - assert len(updated) == SettingsGroup.query.count() - - # force-overwrite - the fixtures exist, but they will be overwritten now. - force_updated = update_settings_from_fixture(settings_fixture, - overwrite_group=True, - overwrite_setting=True) - assert len(force_updated) == SettingsGroup.query.count() - - -def test_create_admin_user(default_groups): - user = User.query.filter_by(username="admin").first() - assert not user - - user = create_admin_user(username="admin", password="test", - email="test@example.org") - assert user.username == "admin" - assert user.permissions["admin"] - - -def test_create_welcome_forum(default_groups): - assert not create_welcome_forum() - - create_admin_user(username="admin", password="test", - email="test@example.org") - assert create_welcome_forum() - - -def test_create_test_data(database): - assert Category.query.count() == 0 - data_created = create_test_data() - assert Category.query.count() == data_created['categories'] - - -def test_insert_mass_data(database): - assert not insert_mass_data(topics=1, posts=1) - - create_test_data(categories=1, forums=1, topics=0) - assert Topic.query.count() == 0 - - topics, posts = insert_mass_data(topics=1, posts=1) - assert Topic.query.count() == topics - # -1 bc the topic post also counts as post - assert Post.query.count() - 1 == posts - - -def test_create_default_groups(database): - """Test that the default groups are created correctly.""" - - assert Group.query.count() == 0 - - create_default_groups() - - assert Group.query.count() == len(group_fixture) - - for key, attributes in group_fixture.items(): - group = Group.query.filter_by(name=key).first() - - for attribute, value in attributes.items(): - assert getattr(group, attribute) == value diff --git a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_settings.py b/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_settings.py deleted file mode 100644 index 729a855b..00000000 --- a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_settings.py +++ /dev/null @@ -1,15 +0,0 @@ -from flaskbb.utils.settings import FlaskBBConfig - - -def test_flaskbb_config(default_settings): - flaskbb_config = FlaskBBConfig() - - assert len(flaskbb_config) > 0 - # test __getitem__ - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBB' - # test __setitem__ - flaskbb_config['PROJECT_TITLE'] = 'FlaskBBTest' - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBBTest' - # test __iter__ - test_dict = {} - assert type(flaskbb_config.__iter__()) == type(test_dict.__iter__()) diff --git a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_translations.py b/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_translations.py deleted file mode 100644 index 5877efc9..00000000 --- a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_translations.py +++ /dev/null @@ -1,48 +0,0 @@ -import subprocess -import os -from flask import current_app -from babel.support import Translations, NullTranslations -from flaskbb.utils.translations import FlaskBBDomain -from flaskbb.extensions import plugin_manager - - -def _remove_compiled_translations(): - translations_folder = os.path.join(current_app.root_path, "translations") - - # walks through the translations folder and deletes all files - # ending with .mo - for root, dirs, files in os.walk(translations_folder): - for name in files: - if name.endswith(".mo"): - os.unlink(os.path.join(root, name)) - - -def _compile_translations(): - PLUGINS_FOLDER = os.path.join(current_app.root_path, "plugins") - translations_folder = os.path.join(current_app.root_path, "translations") - - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - for plugin in plugin_manager.all_plugins: - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - -def test_flaskbbdomain_translations(default_settings): - domain = FlaskBBDomain(current_app) - - with current_app.test_request_context(): - assert domain.get_translations_cache() == {} - - # just to be on the safe side that there are really no compiled - # translations available - _remove_compiled_translations() - # no compiled translations are available - assert isinstance(domain.get_translations(), NullTranslations) - - # lets compile them and test again - _compile_translations() - - # now there should be translations :) - assert isinstance(domain.get_translations(), Translations) diff --git a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_widgets.py b/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_widgets.py deleted file mode 100644 index 93c6032d..00000000 --- a/profiling/test_projects/flaskbb_lite_2/tests/unit/utils/test_widgets.py +++ /dev/null @@ -1,37 +0,0 @@ -"""Tests for the utils/widgets.py file.""" -from flaskbb.utils.widgets import SelectBirthdayWidget - - -def test_select_birthday_widget(): - """Test the SelectDateWidget.""" - - assert SelectBirthdayWidget.FORMAT_CHOICES['%d'] == [ - (x, str(x)) for x in range(1, 32) - ] - assert SelectBirthdayWidget.FORMAT_CHOICES['%m'] == [ - (x, str(x)) for x in range(1, 13) - ] - - assert SelectBirthdayWidget.FORMAT_CLASSES == { - '%d': 'select_date_day', - '%m': 'select_date_month', - '%Y': 'select_date_year' - } - - select_birthday_widget = SelectBirthdayWidget(years=[0, 1]) - - assert select_birthday_widget.FORMAT_CHOICES['%Y'] == [(0, '0'), (1, '1')] - - class Field(object): - id = 'world' - name = 'helloWorld' - format = '%d %m %Y' - data = None - - html = select_birthday_widget(field=Field(), surrounded_div="test-div") - assert 'world' in html - assert 'helloWorld' in html - assert 'class="select_date_day"' in html - assert 'class="select_date_month"' in html - assert 'class="select_date_year"' in html - assert '
    ' in html diff --git a/profiling/test_projects/flaskbb_lite_2/wsgi.py b/profiling/test_projects/flaskbb_lite_2/wsgi.py deleted file mode 100644 index e7089893..00000000 --- a/profiling/test_projects/flaskbb_lite_2/wsgi.py +++ /dev/null @@ -1,4 +0,0 @@ -from flaskbb import create_app -from flaskbb.configs.production import ProductionConfig - -flaskbb = create_app(config=ProductionConfig()) diff --git a/profiling/test_projects/flaskbb_lite_3/.landscape.yml b/profiling/test_projects/flaskbb_lite_3/.landscape.yml deleted file mode 100644 index a96b2f63..00000000 --- a/profiling/test_projects/flaskbb_lite_3/.landscape.yml +++ /dev/null @@ -1,27 +0,0 @@ -doc-warnings: false -test-warnings: false -strictness: veryhigh -max-line-length: 80 -autodetect: yes -requirements: - - requirements.txt -ignore-paths: - - docs - - migrations - - wsgi.py - - setup.py - - flaskbb/configs - - flaskbb/_compat.py -pep8: - full: true - disable: - - E711 - - E712 - -pylint: - disable: - - too-few-public-methods - - too-many-public-methods - - too-many-locals - - invalid-name - - unused-argument diff --git a/profiling/test_projects/flaskbb_lite_3/.travis.yml b/profiling/test_projects/flaskbb_lite_3/.travis.yml deleted file mode 100644 index 15e65f9a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/.travis.yml +++ /dev/null @@ -1,15 +0,0 @@ -language: python -sudo: false -python: - - "2.7" - - "3.3" -# command to install dependencies -install: - - "pip install -r test_requirements.txt" - - "pip install coveralls" -# command to run tests -script: - - python manage.py compile_translations - - py.test --cov=flaskbb --cov-report=term-missing tests -after_success: - - coveralls diff --git a/profiling/test_projects/flaskbb_lite_3/.tx/config b/profiling/test_projects/flaskbb_lite_3/.tx/config deleted file mode 100644 index bd1d913f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/.tx/config +++ /dev/null @@ -1,8 +0,0 @@ -[main] -host = https://www.transifex.com - -[flaskbb.messagespot] -file_filter = flaskbb/translations//LC_MESSAGES/messages.po -source_file = flaskbb/translations/messages.pot -source_lang = en -type = PO diff --git a/profiling/test_projects/flaskbb_lite_3/AUTHORS b/profiling/test_projects/flaskbb_lite_3/AUTHORS deleted file mode 100644 index 3333b4d9..00000000 --- a/profiling/test_projects/flaskbb_lite_3/AUTHORS +++ /dev/null @@ -1,14 +0,0 @@ -FlaskBB is written and maintained by the FlaskBB Team and various -contributors: - -# FlaskBB Team - -* sh4nks -* Looking for more people! - - -# Contributors - -* CasperVg -* Alec Reiter -* Feel free to join! :) diff --git a/profiling/test_projects/flaskbb_lite_3/CHANGES b/profiling/test_projects/flaskbb_lite_3/CHANGES deleted file mode 100644 index 30a3b111..00000000 --- a/profiling/test_projects/flaskbb_lite_3/CHANGES +++ /dev/null @@ -1,7 +0,0 @@ -# FlaskBB Changelog - -Here you can see the full list of changes between each release. - -## Version 0.1 - -* Not finished yet diff --git a/profiling/test_projects/flaskbb_lite_3/LICENSE b/profiling/test_projects/flaskbb_lite_3/LICENSE deleted file mode 100644 index 67d600cf..00000000 --- a/profiling/test_projects/flaskbb_lite_3/LICENSE +++ /dev/null @@ -1,33 +0,0 @@ -Copyright (c) 2014 by the FlaskBB Team and contributors. See AUTHORS -for more details. - -Some rights reserved. - -Redistribution and use in source and binary forms of the software as well -as documentation, with or without modification, are permitted provided -that the following conditions are met: - -* Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - -* The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND -CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT -NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER -OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. diff --git a/profiling/test_projects/flaskbb_lite_3/Makefile b/profiling/test_projects/flaskbb_lite_3/Makefile deleted file mode 100644 index 64389b4e..00000000 --- a/profiling/test_projects/flaskbb_lite_3/Makefile +++ /dev/null @@ -1,26 +0,0 @@ -.PHONY: clean install help test run dependencies - -help: - @echo " clean remove unwanted stuff" - @echo " install install flaskbb and setup" - @echo " test run the testsuite" - @echo " run run the development server" - -dependencies:requirements.txt - pip install -r requirements.txt - -clean: - find . -name '*.pyc' -exec rm -f {} + - find . -name '*.pyo' -exec rm -f {} + - find . -name '*~' -exec rm -f {} + - find . -name '__pycache__' -exec rm -rf {} + - -test: - py.test --cov=flaskbb --cov-report=term-missing tests - -run: - python manage.py runserver -dr - -install:dependencies - clear - python manage.py install diff --git a/profiling/test_projects/flaskbb_lite_3/README.md b/profiling/test_projects/flaskbb_lite_3/README.md deleted file mode 100644 index 7bb09c59..00000000 --- a/profiling/test_projects/flaskbb_lite_3/README.md +++ /dev/null @@ -1,58 +0,0 @@ -[![Build Status](https://travis-ci.org/sh4nks/flaskbb.svg?branch=master)](https://travis-ci.org/sh4nks/flaskbb) -[![Coverage Status](https://coveralls.io/repos/sh4nks/flaskbb/badge.png)](https://coveralls.io/r/sh4nks/flaskbb) -[![Code Health](https://landscape.io/github/sh4nks/flaskbb/master/landscape.svg?style=flat)](https://landscape.io/github/sh4nks/flaskbb/master) -[![License](https://img.shields.io/badge/license-BSD-blue.svg)](https://flaskbb.org) - -# INTRODUCTION - -[FlaskBB](http://flaskbb.org) is a forum software written in python -using the micro framework Flask. - - -## FEATURES - -* A Bulletin Board like FluxBB or DjangoBB in Flask -* Private Messages -* Admin Interface -* Group based permissions -* BBCode Support -* Topic Tracker -* Unread Topics/Forums -* i18n Support -* Completely Themeable -* Plugin System - - -## TODO - -* See the github [issues](https://github.com/sh4nks/flaskbb/issues?state=open) - - -## INSTALLATION - -For a complete installation guide please visit the installation documentation -[here](https://flaskbb.readthedocs.org/en/latest/installation.html). - -* Create a virtualenv -* Configuration (_adjust them accordingly to your needs_) - * For development copy `flaskbb/configs/development.py.example` to `flaskbb/configs/development.py` -* Install dependencies and FlaskBB - * `make install` -* Run the development server - * `make runserver` -* Visit [localhost:8080](http://localhost:8080) - - -## DOCUMENTATION - -The documentation is located [here](http://flaskbb.readthedocs.org/en/latest/). - - -## LICENSE - -[BSD LICENSE](http://flask.pocoo.org/docs/license/#flask-license) - - -## ACKNOWLEDGEMENTS - -[/r/flask](http://reddit.com/r/flask), [Flask](http://flask.pocoo.org), it's [extensions](http://flask.pocoo.org/extensions/) and everyone who has helped me! diff --git a/profiling/test_projects/flaskbb_lite_3/babel.cfg b/profiling/test_projects/flaskbb_lite_3/babel.cfg deleted file mode 100644 index b1ba4bf5..00000000 --- a/profiling/test_projects/flaskbb_lite_3/babel.cfg +++ /dev/null @@ -1,4 +0,0 @@ -[ignore: **/plugins/**] -[python: **.py] -[jinja2: **/templates/**.html] -extensions=jinja2.ext.autoescape,jinja2.ext.with_ diff --git a/profiling/test_projects/flaskbb_lite_3/docs/.gitignore b/profiling/test_projects/flaskbb_lite_3/docs/.gitignore deleted file mode 100644 index e35d8850..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/.gitignore +++ /dev/null @@ -1 +0,0 @@ -_build diff --git a/profiling/test_projects/flaskbb_lite_3/docs/Makefile b/profiling/test_projects/flaskbb_lite_3/docs/Makefile deleted file mode 100644 index bbae2f6a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/Makefile +++ /dev/null @@ -1,177 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = _build - -# User-friendly check for sphinx-build -ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) -$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) -endif - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . -# the i18n builder cannot share the environment and doctrees with the others -I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " texinfo to make Texinfo files" - @echo " info to make Texinfo files and run them through makeinfo" - @echo " gettext to make PO message catalogs" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " xml to make Docutils-native XML files" - @echo " pseudoxml to make pseudoxml-XML files for display purposes" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/FlaskBB.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/FlaskBB.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/FlaskBB" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/FlaskBB" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -latexpdfja: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through platex and dvipdfmx..." - $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -texinfo: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo - @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." - @echo "Run \`make' in that directory to run these through makeinfo" \ - "(use \`make info' here to do that automatically)." - -info: - $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo - @echo "Running Texinfo files through makeinfo..." - make -C $(BUILDDIR)/texinfo info - @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." - -gettext: - $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale - @echo - @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." - -xml: - $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml - @echo - @echo "Build finished. The XML files are in $(BUILDDIR)/xml." - -pseudoxml: - $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml - @echo - @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." diff --git a/profiling/test_projects/flaskbb_lite_3/docs/_static/logo-full.png b/profiling/test_projects/flaskbb_lite_3/docs/_static/logo-full.png deleted file mode 100644 index 5118e7235a27872a6df9c7acb813a51b72f112df..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10951 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 diff --git a/profiling/test_projects/flaskbb_lite_3/docs/_templates/sidebarintro.html b/profiling/test_projects/flaskbb_lite_3/docs/_templates/sidebarintro.html deleted file mode 100644 index 73e7379a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/_templates/sidebarintro.html +++ /dev/null @@ -1,12 +0,0 @@ -

    About

    -

    - FlaskBB is forum software built with Flask. You can very easy create - new topics, posts and send other users private messages. It also includes - basic administration and moderation tools. -

    -

    Useful Links

    - diff --git a/profiling/test_projects/flaskbb_lite_3/docs/conf.py b/profiling/test_projects/flaskbb_lite_3/docs/conf.py deleted file mode 100644 index 47d45ea5..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/conf.py +++ /dev/null @@ -1,272 +0,0 @@ -# -*- coding: utf-8 -*- -# -# FlaskBB documentation build configuration file, created by -# sphinx-quickstart on Fri Feb 14 19:56:59 2014. -# -# This file is execfile()d with the current directory set to its -# containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys -import os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -sys.path.insert(0, os.path.abspath('..')) -sys.path.append(os.path.abspath('_themes')) - -# -- General configuration ------------------------------------------------ - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be -# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom -# ones. -extensions = [ - 'sphinx.ext.autodoc' -] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'FlaskBB' -copyright = u'2014, sh4nks' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1-dev' -# The full version, including alpha/beta/rc tags. -release = '0.1-dev' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = ['_build'] - -# The reST default role (used for this markup: `text`) to use for all -# documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_module_names = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - -# If true, keep warnings as "system message" paragraphs in the built documents. -#keep_warnings = False - - -# -- Options for HTML output ---------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'flask' -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -html_theme_path = ['_themes'] -html_theme_options = { - 'index_logo': "../_static/logo-full.png", -} -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# Add any extra paths that contain custom files (such as robots.txt or -# .htaccess) here, relative to this directory. These files are copied -# directly to the root of the documentation. -#html_extra_path = [] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -html_sidebars = { - 'index': ['sidebarintro.html', 'sourcelink.html', 'searchbox.html'], - '**': ['localtoc.html', 'relations.html', - 'sourcelink.html', 'searchbox.html'] -} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = False - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = False - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'FlaskBBdoc' - - -# -- Options for LaTeX output --------------------------------------------- - -latex_elements = { -# The paper size ('letterpaper' or 'a4paper'). -#'papersize': 'letterpaper', - -# The font size ('10pt', '11pt' or '12pt'). -#'pointsize': '10pt', - -# Additional stuff for the LaTeX preamble. -#'preamble': '', -} - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, -# author, documentclass [howto, manual, or own class]). -latex_documents = [ - ('index', 'FlaskBB.tex', u'FlaskBB Documentation', - u'sh4nks', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output --------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'flaskbb', u'FlaskBB Documentation', - [u'sh4nks'], 1) -] - -# If true, show URL addresses after external links. -#man_show_urls = False - - -# -- Options for Texinfo output ------------------------------------------- - -# Grouping the document tree into Texinfo files. List of tuples -# (source start file, target name, title, author, -# dir menu entry, description, category) -texinfo_documents = [ - ('index', 'FlaskBB', u'FlaskBB Documentation', - u'sh4nks', 'FlaskBB', 'One line description of project.', - 'Miscellaneous'), -] - -# Documents to append as an appendix to all manuals. -#texinfo_appendices = [] - -# If false, no module index is generated. -#texinfo_domain_indices = True - -# How to display URL addresses: 'footnote', 'no', or 'inline'. -#texinfo_show_urls = 'footnote' - -# If true, do not generate a @detailmenu in the "Top" node's menu. -#texinfo_no_detailmenu = False - - -# Example configuration for intersphinx: refer to the Python standard library. -intersphinx_mapping = {'http://docs.python.org/': None} - -autodoc_member_order = 'bysource' diff --git a/profiling/test_projects/flaskbb_lite_3/docs/contents.rst.inc b/profiling/test_projects/flaskbb_lite_3/docs/contents.rst.inc deleted file mode 100644 index 5c44c99e..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/contents.rst.inc +++ /dev/null @@ -1,14 +0,0 @@ -Contents --------- - -.. toctree:: - :maxdepth: 2 - - installation - plugins - plugin_tutorial/index - events - theming - settings - permissions - models diff --git a/profiling/test_projects/flaskbb_lite_3/docs/events.rst b/profiling/test_projects/flaskbb_lite_3/docs/events.rst deleted file mode 100644 index 4a44fd6b..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/events.rst +++ /dev/null @@ -1,77 +0,0 @@ -.. _events: - -Events -====== - -In order to extend FlaskBB you will need to connect your callbacks with -events. - -.. admonition:: Additional events - - If you miss an event, feel free to open a new issue or create a pull - request. The pull request should always contain a entry in this document - with a small example. - - A event can be created by placing a :func:`~flask.ext.plugins.emit_event` - function at specific places in the code which then can modify the behavior - of FlaskBB. The same thing applies for template events. - - Python Event: - - .. sourcecode:: python - - def foobar(data) - somedata = "foobar" - emit_event("your-newly-contributed-event", somedata) - - - Template Event: - - .. sourcecode:: html+jinja - - {{ emit_event("your-newly-contributed-template-event") }} - - -Available Events ----------------- - - -Python Events -~~~~~~~~~~~~~ - -None at the moment. :( - - -Template Events -~~~~~~~~~~~~~~~ - -.. data:: before-first-navigation-element - - This event inserts a navigation link **before** the **first** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("before-first-navigation-element", inject_navigation_element) - - -.. data:: after-last-navigation-element - - This event inserts a navigation link **after** the **last** navigation - element is rendered. - - Example: - - .. sourcecode:: python - - def inject_navigation_element(): - return render_template("navigation_element_snippet.html") - - connect_event("after-last-navigation-element", inject_navigation_element) - - diff --git a/profiling/test_projects/flaskbb_lite_3/docs/index.rst b/profiling/test_projects/flaskbb_lite_3/docs/index.rst deleted file mode 100644 index cd82f675..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/index.rst +++ /dev/null @@ -1,16 +0,0 @@ -:orphan: - -Welcome to FlaskBB -================== - -FlaskBB is a lightweight forum software in Flask. - - -Links ------ - -`documentation `_ -| `source `_ - - -.. include:: contents.rst.inc diff --git a/profiling/test_projects/flaskbb_lite_3/docs/installation.rst b/profiling/test_projects/flaskbb_lite_3/docs/installation.rst deleted file mode 100644 index b499c9c0..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/installation.rst +++ /dev/null @@ -1,329 +0,0 @@ -Installation -============ - -- `Basic Setup <#basic-setup>`_ -- `Configuration <#configuration>`_ -- `Deplyoing <#deploying>`_ - - - -Basic Setup ------------ - -Virtualenv Setup -~~~~~~~~~~~~~~~~ - -Before you can start, you need to create a `virtualenv`. -You can install the virtualenvwrapper with your package manager or via pip. -Be sure that pip is installed. If you don't know how to install pip, have a -look at their `documentation `_. - -For example, on archlinux you can install it with -:: - - $ sudo pacman -S python2-virtualenvwrapper - -or, if you own a Mac, you can simply install it with -:: - - $ sudo pip install virtualenvwrapper - -For more information checkout the `virtualenvwrapper `_ installation. - -After that you can create your virtualenv with -:: - - $ mkvirtualenv -a /path/to/flaskbb -p $(which python2) flaskbb - -and you should be switched automatically to your newly created virtualenv. -To deactivate it you just have to type ``deactivate`` and if you want to work -on it again, you need to type ``workon flaskbb``. - - -Required Dependencies -~~~~~~~~~~~~~~~~~~~~~ - -Now you can install the required dependencies. -:: - - $ pip install -r requirements.txt - -Alternatively, you can use the `make` command to install the dependencies. -:: - - $ make dependencies - - -Optional Dependencies -~~~~~~~~~~~~~~~~~~~~~~ - -We have one optional dependency, redis (the python package is installed automatically). -If you want to use it, be sure that a redis-server is running. If you decide -to use redis, the `online guests` and `online users` are being tracked by redis, -else it will only track the `online users` via a simple SQL query. - -**On Archlinux** -:: - - # Install redis - $ sudo pacman -S redis - - # Check if redis is already running. - $ systemctl status redis - - # If not, start it. - $ sudo systemctl start redis - - # Optional: Start redis everytime you boot your machine - $ sudo systemctl enable redis - -**On Debian 7.0 (Wheezy)** -:: - - # Install redis - $ sudo apt-get install redis-server - - # Check if redis is already running. - $ service redis-server status - - # If not, start it - $ sudo service redis-server start - - # Optional: Start redis everytime you boot your machine - # I can't remember if this is done automatically.. - $ sudo update-rc.d redis-server defaults - - -Configuration -------------- - -Before you can start, you need to configure `FlaskBB`. - - -Development -~~~~~~~~~~~ - -For development, you need to copy ``flaskbb/configs/development.py.example`` to -``flaskbb/configs/development.py``. -:: - - cp flaskbb/configs/development.py.example flaskbb/configs/development.py - -The reCAPTCHA keys should work fine on localhost. - - -Production -~~~~~~~~~~ - -If you plan, to use `FlaskBB` in a production environment (not recommended at -the moment, because it's still in development), you need to copy -``flaskbb/configs/production.py.example`` to ``flaskbb/configs/production.py``. -:: - - cp flaskbb/configs/production.py.example flaskbb/configs/production.py - -Now open ``flaskbb/configs/production.py`` with your favourite editor and adjust -the config variables to your needs. - - -Mail Examples -~~~~~~~~~~~~~ - -Both methods are included in the example configs. - -**Google Mail** -:: - - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - -**Local SMTP Server** -:: - - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USERNAME = "" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = "noreply@example.org" - - -Installation ------------- - -For a guided install, run -:: - - $ make install - -or: - - python manage.py install - -During the installation process you are asked about your username, -your email address and the password for your administrator user. Using the -`make install` command is recommended as it checks that the dependencies are also -installed. - - -Upgrading ---------- - -If the database models changed after a release, you have to run the ``upgrade`` -command -:: - - python manage.py db upgrade - - -Deploying ---------- - -I prefer to use supervisor, uWSGI and nginx to deploy my apps, but if you have -figured out how to deploy it in another way, please let me know, so I -(or you if you create a pull request) can add it to the documentation. - -**NOTE:** I have only used Debian to deploy it, if someone is using a other -distribution, could you let me know if that works too? `Also, if you have better -configurations for uWSGI, supervisor or nginx let me know that too.` - - -Supervisor -~~~~~~~~~~ - -`Supervisor is a client/server system that allows its users to monitor and -control a number of processes on UNIX-like operating systems.` - -To install `supervisor` on Debian, you need to fire up this command: -:: - - $ sudo apt-get install supervisor - -There are two ways to configure supervisor. The first one is, you just put -the configuration to the end in the ``/etc/supervisor/supervisord.conf`` file. - -The second way would be to create a new file in the ``/etc/supervisor/conf.d/`` -directory. For example, such a file could be named ``uwsgi.conf``. - -After you have choosen the you way you like, simply put the snippet below in the -configuration file. - -:: - - [program:uwsgi] - command=/usr/bin/uwsgi --emperor /etc/uwsgi/apps-enabled - user=apps - stopsignal=QUIT - autostart=true - autorestart=true - redirect_stderr=true - - -uWSGI -~~~~~ - -`uWSGI is a web application solution with batteries included.` - -To get started with uWSGI, you need to install it first. -You'll also need the python plugin to serve python apps. -This can be done with: - -:: - - $ sudo apt-get install uwsgi uwsgi-plugin-python - -For the configuration, you need to create a file in the -``/etc/uwsgi/apps-available`` directory. In this example, I will call the -file ``flaskbb.ini``. After that, you can start with configuring it. -My config looks like this for `flaskbb.org` (see below). As you might have noticed, I'm -using a own user for my apps whose home directory is located at `/var/apps/`. -In this directory there are living all my Flask apps. - -:: - - [uwsgi] - base = /var/apps/flaskbb - home = /var/apps/.virtualenvs/flaskbb/ - pythonpath = %(base) - socket = 127.0.0.1:30002 - module = wsgi - callable = flaskbb - uid = apps - gid = apps - logto = /var/apps/flaskbb/logs/uwsgi.log - plugins = python - - -=============== ========================== =============== -**base** /path/to/flaskbb The folder where your flaskbb application lives -**home** /path/to/virtualenv/folder The virtualenv folder for your flaskbb application -**pythonpath** /path/to/flaskbb The same as base -**socket** socket This can be either a ip or the path to a socket (don't forget to change that in your nginx config) -**module** wsgi.py This is the file located in the root directory from flaskbb (where manage.py lives). -**callable** flaskbb The callable is application you have created in the ``wsgi.py`` file -**uid** your_user The user who should be used. **NEVER** use root! -**gid** your_group The group who should be used. -**logto** /path/to/log/file The path to your uwsgi logfile -**plugins** python We need the python plugin -=============== ========================== =============== - -Don't forget to create a symlink to ``/etc/uwsgi/apps-enabled``. - -:: - - ln -s /etc/uwsgi/apps-available/flaskbb /etc/uwsgi/apps-enabled/flaskbb - - -nginx -~~~~~ - -`nginx [engine x] is an HTTP and reverse proxy server, -as well as a mail proxy server, written by Igor Sysoev.` - -The nginx config is pretty straightforward. Again, this is how I use it for -`FlaskBB`. Just copy the snippet below and paste it to, for example -``/etc/nginx/sites-available/flaskbb``. -The only thing left is, that you need to adjust the ``server_name`` to your -domain and the paths in ``access_log``, ``error_log``. Also, don't forget to -adjust the paths in the ``alias`` es, as well as the socket adress in ``uwsgi_pass``. - -:: - - server { - listen 80; - server_name forums.flaskbb.org; - - access_log /var/log/nginx/access.forums.flaskbb.log; - error_log /var/log/nginx/error.forums.flaskbb.log; - - location / { - try_files $uri @flaskbb; - } - - # Static files - location /static { - alias /var/apps/flaskbb/flaskbb/static/; - } - - location ~ ^/_themes/([^/]+)/(.*)$ { - alias /var/apps/flaskbb/flaskbb/themes/$1/static/$2; - } - - # robots.txt - location /robots.txt { - alias /var/apps/flaskbb/flaskbb/static/robots.txt; - } - - location @flaskbb { - uwsgi_pass 127.0.0.1:30002; - include uwsgi_params; - } - } - - -Like in the `uWSGI <#uwsgi>`_ chapter, don't forget to create a symlink to -``/etc/nginx/sites-enabled/``. diff --git a/profiling/test_projects/flaskbb_lite_3/docs/make.bat b/profiling/test_projects/flaskbb_lite_3/docs/make.bat deleted file mode 100644 index 5f1369be..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/make.bat +++ /dev/null @@ -1,242 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=_build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . -set I18NSPHINXOPTS=%SPHINXOPTS% . -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% - set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. texinfo to make Texinfo files - echo. gettext to make PO message catalogs - echo. changes to make an overview over all changed/added/deprecated items - echo. xml to make Docutils-native XML files - echo. pseudoxml to make pseudoxml-XML files for display purposes - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - - -%SPHINXBUILD% 2> nul -if errorlevel 9009 ( - echo. - echo.The 'sphinx-build' command was not found. Make sure you have Sphinx - echo.installed, then set the SPHINXBUILD environment variable to point - echo.to the full path of the 'sphinx-build' executable. Alternatively you - echo.may add the Sphinx directory to PATH. - echo. - echo.If you don't have Sphinx installed, grab it from - echo.http://sphinx-doc.org/ - exit /b 1 -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\FlaskBB.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\FlaskBB.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - if errorlevel 1 exit /b 1 - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdf" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "latexpdfja" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - cd %BUILDDIR%/latex - make all-pdf-ja - cd %BUILDDIR%/.. - echo. - echo.Build finished; the PDF files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "texinfo" ( - %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. - goto end -) - -if "%1" == "gettext" ( - %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The message catalogs are in %BUILDDIR%/locale. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - if errorlevel 1 exit /b 1 - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - if errorlevel 1 exit /b 1 - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - if errorlevel 1 exit /b 1 - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -if "%1" == "xml" ( - %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The XML files are in %BUILDDIR%/xml. - goto end -) - -if "%1" == "pseudoxml" ( - %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml - if errorlevel 1 exit /b 1 - echo. - echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. - goto end -) - -:end diff --git a/profiling/test_projects/flaskbb_lite_3/docs/models.rst b/profiling/test_projects/flaskbb_lite_3/docs/models.rst deleted file mode 100644 index 503a981f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/models.rst +++ /dev/null @@ -1,79 +0,0 @@ -.. _models: - -Available Models -================ - -FlaskBB uses SQLAlchemy as it's ORM. The models are split in three modules -which are covered below. - - -Forum Models ------------- - -.. module:: flaskbb.forum.models - -This module contains all related models for the forums. - -The hierarchy looks like this: Category > Forum > Topic > Post. In the Report -model are stored the reports and the TopicsRead and ForumsRead models are -used to store the status if the user has read a specific forum or not. - - -.. autoclass:: Category - :members: - - -.. autoclass:: Forum - :members: - - -.. autoclass:: Topic - :members: - - -.. autoclass:: Post - :members: - - -.. autoclass:: TopicsRead - :members: - - -.. autoclass:: ForumsRead - :members: - - -.. autoclass:: Report - :members: - - - -User Models ------------ - -.. module:: flaskbb.user.models - -The user modules contains all related models for the users. - -.. autoclass:: User - :members: - -.. autoclass:: Group - :members: - -.. autoclass:: PrivateMessage - :members: - - -Management Models ------------------ - -.. module:: flaskbb.management.models - -The management module contains all related models for the management of FlaskBB. - -.. autoclass:: SettingsGroup - :members: - -.. autoclass:: Setting - :members: diff --git a/profiling/test_projects/flaskbb_lite_3/docs/permissions.rst b/profiling/test_projects/flaskbb_lite_3/docs/permissions.rst deleted file mode 100644 index bdfeb509..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/permissions.rst +++ /dev/null @@ -1,11 +0,0 @@ -.. _permissions: - -Permission (WIP) -================ - -a moderator is allowed to do the following things: - - enter the management panel - process reports - edit user (if he has the permission) - ban users (if he has the permission) diff --git a/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/index.rst b/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/index.rst deleted file mode 100644 index cb352e84..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/index.rst +++ /dev/null @@ -1,17 +0,0 @@ -.. _tutorial: - -Plugin Tutorial (WIP) -===================== - - -This tutorial is based on the plugin which is shipped by default with FlaskBB. -If you want the full sourcecode in advance or for comparison, check out -the `portal plugin`_. - -.. _portal plugin: - https://github.com/sh4nks/flaskbb/tree/master/flaskbb/plugins/portal - -.. toctree:: - :maxdepth: 2 - - structure diff --git a/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/structure.rst b/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/structure.rst deleted file mode 100644 index a788d00d..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/plugin_tutorial/structure.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _structure: - -Step 1: Structure -================= diff --git a/profiling/test_projects/flaskbb_lite_3/docs/plugins.rst b/profiling/test_projects/flaskbb_lite_3/docs/plugins.rst deleted file mode 100644 index 1a134ad3..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/plugins.rst +++ /dev/null @@ -1,179 +0,0 @@ -.. _plugins: - -Plugins -======= - -.. module:: flaskbb.plugins - -FlaskBB provides an easy way to extend the functionality of your forum -via so called `Plugins`. Plugins do not modify the `core` of FlaskBB, so -you can easily activate and deactivate them anytime. This part of the -documentation only covers the basic things for creating plugins. If you are -looking for a tutorial you need to go to this section of the documentation: -:doc:`plugin_tutorial/index`. - - -Structure ---------- - -A plugin has it's own folder where all the plugin specific files are living. -For example, the structure of a plugin could look like this - -.. sourcecode:: text - - my_plugin - |-- info.json Contains the Plugin's metadata - |-- license.txt The full license text of your plugin - |-- __init__.py The plugin's main class is located here - |-- views.py - |-- models.py - |-- forms.py - |-- static - | |-- style.css - |-- templates - |-- myplugin.html - - -Management ----------- - -Deactivating -~~~~~~~~~~~~ - -The only way to disable a plugin without removing it is, to add a ``DISABLED`` -file in the plugin's root folder. You need to reload your application in order -to have the plugin fully disabled. A disabled plugin could look like this:: - - my_plugin - |-- DISABLED # Just add a empty file named "DISABLED" to disable a plugin - |-- info.json - |-- __init__.py - -.. important:: Restart the server. - - You must restart the wsgi/in-built server in order to make the changes - effect your forum. - - -Activating -~~~~~~~~~~ - -Simply remove the ``DISABLED`` file in the plugin directory and restart the -server. - - -Example Plugin --------------- - -A really simple Plugin could look like this: - -.. sourcecode:: python - - from flask import flash - from flask.ext.plugins import connect_event - - from flaskbb.plugins import FlaskBBPlugin - - - # This is the name of your Plugin class which implements FlaskBBPlugin. - # The exact name is needed in order to be recognized as a plugin. - __plugin__ "HelloWorldPlugin" - - - def flash_index(): - """Flashes a message when visiting the index page.""" - - flash("This is just a demonstration plugin", "success") - - - class HelloWorldPlugin(FlaskBBPlugin): - def setup(self): - connect_event(before-forum-index-rendered, flash_index) - - def install(self): - # there is nothing to install - pass - - def uninstall(self): - # and nothing to uninstall - pass - - -Your plugins also needs a ``info.json`` file, where it stores some meta data -about the plugin. For more information see the `Metadata <#metadata>`_ -section below. - - -Metadata -~~~~~~~~ - -In order to get a working plugin, following metadata should be defined -in a ``info.json`` file. - -``identifier`` : **required** - The plugin's identifier. It should be a Python identifier (starts with a - letter or underscore, the rest can be letters, underscores, or numbers) - and should match the name of the plugin's folder. - -``name`` : **required** - A human-readable name for the plugin. - -``author`` : **required** - The name of the plugin's author, that is, you. It does not have to include - an e-mail address, and should be displayed verbatim. - -``description`` - A description of the plugin in a few sentences. If you can write multiple - languages, you can include additional fields in the form - ``description_lc``, where ``lc`` is a two-letter language code like ``es`` - or ``de``. They should contain the description, but in the indicated - language. - -``website`` - The URL of the plugin's Web site. This can be a Web site specifically for - this plugin, Web site for a collection of plugins that includes this plugin, - or just the author's Web site. - -``license`` - A simple phrase indicating your plugin's license, like ``GPL``, - ``MIT/X11``, ``Public Domain``, or ``Creative Commons BY-SA 3.0``. You - can put the full license's text in the ``license.txt`` file. - -``version`` - This is simply to make it easier to distinguish between what version - of your plugin people are using. It's up to the theme/layout to decide - whether or not to show this, though. - - -Events ------- - -A full list with events can be found here :doc:`events`. - - -Plugin Class ------------- - -.. autoclass:: FlaskBBPlugin - - .. autoattribute:: settings_key - - .. autoattribute:: installable - - .. autoattribute:: uninstallable - - .. automethod:: setup - - .. automethod:: install - - .. automethod:: uninstall - - .. automethod:: register_blueprint - - .. automethod:: create_table - - .. automethod:: drop_table - - .. automethod:: create_all_tables - - .. automethod:: drop_all_tables diff --git a/profiling/test_projects/flaskbb_lite_3/docs/settings.rst b/profiling/test_projects/flaskbb_lite_3/docs/settings.rst deleted file mode 100644 index 76fd4dcb..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/settings.rst +++ /dev/null @@ -1,59 +0,0 @@ -.. _settings: - -Settings -======== - -This part covers which setting fields are available. -This is especially useful if you plan on develop a plugin a want to contribute -to FlaskBB. - - - -The available fields are shown below. - -.. note:: - For a full list of available methods, visit - `Settings Model `__. - - -.. module:: flaskbb.management.models - - -.. autoclass:: Setting - - .. attribute:: key - - **TODO** - - .. attribute:: value - - **TODO** - - .. attribute:: settingsgroup - - **TODO** - - .. attribute:: name - - **TODO** - - .. attribute:: description - - **TODO** - - .. attribute:: value_type - - **TODO** - string - integer - float - boolean - select # 1 value - selectmultiple # multiple values - - .. attribute:: extra - - **TODO** - min - max - choices with or without coerce diff --git a/profiling/test_projects/flaskbb_lite_3/docs/theming.rst b/profiling/test_projects/flaskbb_lite_3/docs/theming.rst deleted file mode 100644 index 55863d07..00000000 --- a/profiling/test_projects/flaskbb_lite_3/docs/theming.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. _theming: - -Theming (WIP) -============= diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/__init__.py deleted file mode 100644 index 7d7d50d8..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb - ~~~~~~~~~~~~~~~~~~~~ - - FlaskBB is a forum software written in python using the - microframework Flask. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -__version__ = '1.0.dev0' - -from flaskbb.app import create_app diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/_compat.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/_compat.py deleted file mode 100644 index 5bc10e04..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/_compat.py +++ /dev/null @@ -1,29 +0,0 @@ -""" -Look here for more information: -https://github.com/mitsuhiko/flask/blob/master/flask/_compat.py -""" - -import sys - -PY2 = sys.version_info[0] == 2 - -if not PY2: # pragma: no cover - text_type = str - string_types = (str,) - integer_types = (int, ) - intern_method = sys.intern - range_method = range - iterkeys = lambda d: iter(d.keys()) - itervalues = lambda d: iter(d.values()) - iteritems = lambda d: iter(d.items()) - max_integer = sys.maxsize -else: # pragma: no cover - text_type = unicode - string_types = (str, unicode) - integer_types = (int, long) - intern_method = intern - range_method = xrange - iterkeys = lambda d: d.iterkeys() - itervalues = lambda d: d.itervalues() - iteritems = lambda d: d.iteritems() - max_integer = sys.maxint diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/app.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/app.py deleted file mode 100644 index faa4bfea..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/app.py +++ /dev/null @@ -1,315 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.app - ~~~~~~~~~~~~~~~~~~~~ - - manages the app creation and configuration process - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import logging -import datetime -import time -from functools import partial - -from sqlalchemy import event -from sqlalchemy.engine import Engine - -from flask import Flask, request -from flask_login import current_user -from flask_whooshalchemy import whoosh_index - -# Import the user blueprint -from flaskbb.user.views import user -from flaskbb.user.models import User, Guest -# Import the (private) message blueprint -from flaskbb.message.views import message -# Import the auth blueprint -from flaskbb.auth.views import auth -# Import the admin blueprint -from flaskbb.management.views import management -# Import the forum blueprint -from flaskbb.forum.views import forum -from flaskbb.forum.models import Post, Topic, Category, Forum -# extensions -from flaskbb.extensions import db, login_manager, mail, cache, redis_store, \ - debugtoolbar, migrate, themes, plugin_manager, babel, csrf, allows -# various helpers -from flaskbb.utils.helpers import format_date, time_since, crop_title, \ - is_online, render_markup, mark_online, forum_is_unread, topic_is_unread, \ - render_template -from flaskbb.utils.translations import FlaskBBDomain -# permission checks (here they are used for the jinja filters) -from flaskbb.utils.requirements import ( - IsAdmin, IsAtleastModerator, TplCanModerate, - CanBanUser, CanEditUser, TplCanDeletePost, TplCanDeleteTopic, - TplCanEditPost, TplCanPostTopic, TplCanPostReply -) -# app specific configurations -from flaskbb.utils.settings import flaskbb_config - - -def create_app(config=None): - """Creates the app.""" - - # Initialize the app - app = Flask("flaskbb") - - # Use the default config and override it afterwards - app.config.from_object('flaskbb.configs.default.DefaultConfig') - # Update the config - app.config.from_object(config) - # try to update the config via the environment variable - app.config.from_envvar("FLASKBB_SETTINGS", silent=True) - - configure_blueprints(app) - configure_extensions(app) - configure_template_filters(app) - configure_context_processors(app) - configure_before_handlers(app) - configure_errorhandlers(app) - configure_logging(app) - - return app - - -def configure_blueprints(app): - app.register_blueprint(forum, url_prefix=app.config["FORUM_URL_PREFIX"]) - app.register_blueprint(user, url_prefix=app.config["USER_URL_PREFIX"]) - app.register_blueprint(auth, url_prefix=app.config["AUTH_URL_PREFIX"]) - app.register_blueprint( - management, url_prefix=app.config["ADMIN_URL_PREFIX"] - ) - app.register_blueprint( - message, url_prefix=app.config["MESSAGE_URL_PREFIX"] - ) - - -def configure_extensions(app): - """Configures the extensions.""" - - # Flask-WTF CSRF - csrf.init_app(app) - - # Flask-Plugins - plugin_manager.init_app(app) - - # Flask-SQLAlchemy - db.init_app(app) - - # Flask-Migrate - migrate.init_app(app, db) - - # Flask-Mail - mail.init_app(app) - - # Flask-Cache - cache.init_app(app) - - # Flask-Debugtoolbar - debugtoolbar.init_app(app) - - # Flask-Themes - themes.init_themes(app, app_identifier="flaskbb") - - # Flask-And-Redis - redis_store.init_app(app) - - # Flask-WhooshAlchemy - with app.app_context(): - whoosh_index(app, Post) - whoosh_index(app, Topic) - whoosh_index(app, Forum) - whoosh_index(app, Category) - whoosh_index(app, User) - - # Flask-Login - login_manager.login_view = app.config["LOGIN_VIEW"] - login_manager.refresh_view = app.config["REAUTH_VIEW"] - login_manager.login_message_category = app.config["LOGIN_MESSAGE_CATEGORY"] - login_manager.needs_refresh_message_category = \ - app.config["REFRESH_MESSAGE_CATEGORY"] - login_manager.anonymous_user = Guest - - @login_manager.user_loader - def load_user(user_id): - """Loads the user. Required by the `login` extension.""" - - user_instance = User.query.filter_by(id=user_id).first() - if user_instance: - return user_instance - else: - return None - - login_manager.init_app(app) - - # Flask-BabelEx - babel.init_app(app=app, default_domain=FlaskBBDomain(app)) - - @babel.localeselector - def get_locale(): - # if a user is logged in, use the locale from the user settings - if current_user.is_authenticated and current_user.language: - return current_user.language - # otherwise we will just fallback to the default language - return flaskbb_config["DEFAULT_LANGUAGE"] - - # Flask-Allows - allows.init_app(app) - allows.identity_loader(lambda: current_user) - - -def configure_template_filters(app): - """Configures the template filters.""" - filters = {} - - filters['markup'] = render_markup - filters['format_date'] = format_date - filters['time_since'] = time_since - filters['is_online'] = is_online - filters['crop_title'] = crop_title - filters['forum_is_unread'] = forum_is_unread - filters['topic_is_unread'] = topic_is_unread - - permissions = [ - ('is_admin', IsAdmin), - ('is_moderator', IsAtleastModerator), - ('is_admin_or_moderator', IsAtleastModerator), - ('can_edit_user', CanEditUser), - ('can_ban_user', CanBanUser), - ] - - filters.update([ - (name, partial(perm, request=request)) for name, perm in permissions - ]) - - # these create closures - filters['can_moderate'] = TplCanModerate(request) - filters['post_reply'] = TplCanPostReply(request) - filters['edit_post'] = TplCanEditPost(request) - filters['delete_post'] = TplCanDeletePost(request) - filters['post_topic'] = TplCanPostTopic(request) - filters['delete_topic'] = TplCanDeleteTopic(request) - - app.jinja_env.filters.update(filters) - - -def configure_context_processors(app): - """Configures the context processors.""" - - @app.context_processor - def inject_flaskbb_config(): - """Injects the ``flaskbb_config`` config variable into the - templates. - """ - - return dict(flaskbb_config=flaskbb_config) - - -def configure_before_handlers(app): - """Configures the before request handlers.""" - - @app.before_request - def update_lastseen(): - """Updates `lastseen` before every reguest if the user is - authenticated.""" - - if current_user.is_authenticated: - current_user.lastseen = datetime.datetime.utcnow() - db.session.add(current_user) - db.session.commit() - - if app.config["REDIS_ENABLED"]: - @app.before_request - def mark_current_user_online(): - if current_user.is_authenticated: - mark_online(current_user.username) - else: - mark_online(request.remote_addr, guest=True) - - -def configure_errorhandlers(app): - """Configures the error handlers.""" - - @app.errorhandler(403) - def forbidden_page(error): - return render_template("errors/forbidden_page.html"), 403 - - @app.errorhandler(404) - def page_not_found(error): - return render_template("errors/page_not_found.html"), 404 - - @app.errorhandler(500) - def server_error_page(error): - return render_template("errors/server_error.html"), 500 - -def XSS1(): - param = request.args.get('param', 'not set') - - html = open('templates/XSS_param.html').read() - resp = make_response(html.replace('{{ param }}', param)) - return resp - -a = XSS1() -def configure_logging(app): - """Configures logging.""" - - a = XSS1() - logs_folder = os.path.join(app.root_path, os.pardir, "logs") - from logging.handlers import SMTPHandler - formatter = logging.Formatter( - '%(asctime)s %(levelname)s: %(message)s ' - '[in %(pathname)s:%(lineno)d]') - - info_log = os.path.join(logs_folder, app.config['INFO_LOG']) - - info_file_handler = logging.handlers.RotatingFileHandler( - info_log, - maxBytes=100000, - backupCount=10 - ) - - info_file_handler.setLevel(logging.INFO) - info_file_handler.setFormatter(formatter) - app.logger.addHandler(info_file_handler) - - error_log = os.path.join(logs_folder, app.config['ERROR_LOG']) - - error_file_handler = logging.handlers.RotatingFileHandler( - error_log, - maxBytes=100000, - backupCount=10 - ) - - error_file_handler.setLevel(logging.ERROR) - error_file_handler.setFormatter(formatter) - app.logger.addHandler(error_file_handler) - - if app.config["SEND_LOGS"]: - mail_handler = \ - SMTPHandler( - app.config['MAIL_SERVER'], - app.config['MAIL_DEFAULT_SENDER'], - app.config['ADMINS'], - 'application error, no admins specified', - (app.config['MAIL_USERNAME'], app.config['MAIL_PASSWORD']) - ) - - mail_handler.setLevel(logging.ERROR) - mail_handler.setFormatter(formatter) - app.logger.addHandler(mail_handler) - - if app.config["SQLALCHEMY_ECHO"]: - # Ref: http://stackoverflow.com/a/8428546 - @event.listens_for(Engine, "before_cursor_execute") - def before_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - conn.info.setdefault('query_start_time', []).append(time.time()) - - @event.listens_for(Engine, "after_cursor_execute") - def after_cursor_execute(conn, cursor, statement, - parameters, context, executemany): - total = time.time() - conn.info['query_start_time'].pop(-1) - app.logger.debug("Total Time: %f", total) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/__init__.py deleted file mode 100644 index 8b137891..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/__init__.py +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/crazy.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/crazy.py deleted file mode 100644 index be692035..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/crazy.py +++ /dev/null @@ -1,8 +0,0 @@ -class Test(): - def __init__(self, a): - self.a = a - def foo(self): - pass - -t = Test() -t.foo() diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/forms.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/forms.py deleted file mode 100644 index ce29f010..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/forms.py +++ /dev/null @@ -1,118 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.forms - ~~~~~~~~~~~~~~~~~~~~ - - It provides the forms that are needed for the auth views. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from datetime import datetime - -from flask_wtf import Form, RecaptchaField -from wtforms import (StringField, PasswordField, BooleanField, HiddenField, - SubmitField, SelectField) -from wtforms.validators import (DataRequired, InputRequired, Email, EqualTo, - regexp, ValidationError) -from flask_babelplus import lazy_gettext as _ -from flaskbb.user.models import User - -USERNAME_RE = r'^[\w.+-]+$' -is_username = regexp(USERNAME_RE, - message=_("You can only use letters, numbers or dashes.")) - - -class LoginForm(Form): - login = StringField(_("Username or E-Mail Address"), validators=[ - DataRequired(message=_("A Username or E-Mail Address is required."))] - ) - - password = PasswordField(_("Password"), validators=[ - DataRequired(message=_("A Password is required."))]) - - remember_me = BooleanField(_("Remember Me"), default=False) - - submit = SubmitField(_("Login")) - - -class RegisterForm(Form): - username = StringField(_("Username"), validators=[ - DataRequired(message=_("A Username is required.")), - is_username]) - - email = StringField(_("E-Mail Address"), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email(message=_("Invalid E-Mail Address."))]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - - language = SelectField(_('Language')) - - accept_tos = BooleanField(_("I accept the Terms of Service"), default=True) - - submit = SubmitField(_("Register")) - - def validate_username(self, field): - user = User.query.filter_by(username=field.data).first() - if user: - raise ValidationError(_("This Username is already taken.")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if email: - raise ValidationError(_("This E-Mail Address is already taken.")) - - def save(self): - user = User(username=self.username.data, - email=self.email.data, - password=self.password.data, - date_joined=datetime.utcnow(), - primary_group_id=4, - language=self.language.data) - return user.save() - - -class RegisterRecaptchaForm(RegisterForm): - recaptcha = RecaptchaField(_("Captcha")) - - -class ReauthForm(Form): - password = PasswordField(_('Password'), validators=[ - DataRequired(message=_("A Password is required."))]) - - submit = SubmitField(_("Refresh Login")) - - -class ForgotPasswordForm(Form): - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is reguired.")), - Email()]) - - submit = SubmitField(_("Request Password")) - - -class ResetPasswordForm(Form): - token = HiddenField('Token') - - email = StringField(_('E-Mail Address'), validators=[ - DataRequired(message=_("A E-Mail Address is required.")), - Email()]) - - password = PasswordField(_('Password'), validators=[ - InputRequired(), - EqualTo('confirm_password', message=_('Passwords must match.'))]) - - confirm_password = PasswordField(_('Confirm Password')) - - submit = SubmitField(_("Reset Password")) - - def validate_email(self, field): - email = User.query.filter_by(email=field.data).first() - if not email: - raise ValidationError(_("Wrong E-Mail Address.")) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/hest/empty.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/hest/empty.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/views.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/views.py deleted file mode 100644 index c4d00896..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/auth/views.py +++ /dev/null @@ -1,165 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.auth.views - ~~~~~~~~~~~~~~~~~~~~ - - This view provides user authentication, registration and a view for - resetting the password of a user if he has lost his password - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import Blueprint, flash, redirect, url_for, request, current_app -from flask_login import (current_user, login_user, login_required, - logout_user, confirm_login, login_fresh) -from flask_babelplus import gettext as _ - -from flaskbb.utils.helpers import render_template -from flaskbb.email import send_reset_token -from flaskbb.auth.forms import (LoginForm, ReauthForm, ForgotPasswordForm, - ResetPasswordForm) -from flaskbb.user.models import User -from flaskbb.fixtures.settings import available_languages -from flaskbb.utils.settings import flaskbb_config - -auth = Blueprint("auth", __name__) - - -@auth.route("/login", methods=["GET", "POST"]) -def login(): - """ - Logs the user in - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile")) - - form = LoginForm(request.form) - if form.validate_on_submit(): - user, authenticated = User.authenticate(form.login.data, - form.password.data) - - if user and authenticated: - login_user(user, remember=form.remember_me.data) - return redirect(request.args.get("next") or - url_for("forum.index")) - - flash(_("Wrong Username or Password."), "danger") - return render_template("auth/login.html", form=form) - - -@auth.route("/reauth", methods=["GET", "POST"]) -@login_required -def reauth(): - """ - Reauthenticates a user - """ - - if not login_fresh(): - form = ReauthForm(request.form) - if form.validate_on_submit(): - if current_user.check_password(form.password.data): - confirm_login() - flash(_("Reauthenticated."), "success") - return redirect(request.args.get("next") or current_user.url) - - flash(_("Wrong password."), "danger") - return render_template("auth/reauth.html", form=form) - return redirect(request.args.get("next") or current_user.url) - - -@auth.route("/logout") -@login_required -def logout(): - logout_user() - flash(("Logged out"), "success") - return redirect(url_for("forum.index")) - - -@auth.route("/register", methods=["GET", "POST"]) -def register(): - """ - Register a new user - """ - - if current_user is not None and current_user.is_authenticated: - return redirect(url_for("user.profile", - username=current_user.username)) - - if current_app.config["RECAPTCHA_ENABLED"]: - from flaskbb.auth.forms import RegisterRecaptchaForm - form = RegisterRecaptchaForm(request.form) - else: - from flaskbb.auth.forms import RegisterForm - form = RegisterForm(request.form) - - form.language.choices = available_languages() - form.language.default = flaskbb_config['DEFAULT_LANGUAGE'] - form.process(request.form) # needed because a default is overriden - - if form.validate_on_submit(): - user = form.save() - login_user(user) - - flash(_("Thanks for registering."), "success") - return redirect(url_for("user.profile", - username=current_user.username)) - - return render_template("auth/register.html", form=form) - - -@auth.route('/resetpassword', methods=["GET", "POST"]) -def forgot_password(): - """ - Sends a reset password token to the user. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ForgotPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - - if user: - token = user.make_reset_token() - send_reset_token(user, token=token) - - flash(_("E-Mail sent! Please check your inbox."), "info") - return redirect(url_for("auth.forgot_password")) - else: - flash(_("You have entered a Username or E-Mail Address that is " - "not linked with your account."), "danger") - return render_template("auth/forgot_password.html", form=form) - - -@auth.route("/resetpassword/", methods=["GET", "POST"]) -def reset_password(token): - """ - Handles the reset password process. - """ - - if not current_user.is_anonymous: - return redirect(url_for("forum.index")) - - form = ResetPasswordForm() - if form.validate_on_submit(): - user = User.query.filter_by(email=form.email.data).first() - expired, invalid, data = user.verify_reset_token(form.token.data) - - if invalid: - flash(_("Your Password Token is invalid."), "danger") - return redirect(url_for("auth.forgot_password")) - - if expired: - flash(_("Your Password Token is expired."), "danger") - return redirect(url_for("auth.forgot_password")) - - if user and data: - user.password = form.password.data - user.save() - flash(_("Your Password has been updated."), "success") - return redirect(url_for("auth.login")) - - form.token.data = token - return render_template("auth/reset_password.html", form=form) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/default.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/default.py deleted file mode 100644 index dd1afb84..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/default.py +++ /dev/null @@ -1,99 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.configs.default - ~~~~~~~~~~~~~~~~~~~~~~~ - - This is the default configuration for FlaskBB that every site should have. - You can override these configuration variables in another class. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import os -import sys - -_VERSION_STR = '{0.major}{0.minor}'.format(sys.version_info) - - -class DefaultConfig(object): - - # Get the app root path - # <_basedir> - # ../../ --> flaskbb/flaskbb/configs/base.py - _basedir = os.path.join(os.path.abspath(os.path.dirname(os.path.dirname( - os.path.dirname(__file__))))) - - DEBUG = False - TESTING = False - - # Logs - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Default Database - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + _basedir + '/' + \ - 'flaskbb.sqlite' - - # This option will be removed as soon as Flask-SQLAlchemy removes it. - # At the moment it is just used to suppress the super annoying warning - SQLALCHEMY_TRACK_MODIFICATIONS = False - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # Protection against form post fraud - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Searching - WHOOSH_BASE = os.path.join(_basedir, "whoosh_index", _VERSION_STR) - - # Auth - LOGIN_VIEW = "auth.login" - REAUTH_VIEW = "auth.reauth" - LOGIN_MESSAGE_CATEGORY = "info" - REFRESH_MESSAGE_CATEGORY = "info" - - # Caching - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - ## Captcha - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - ## Mail - MAIL_SERVER = "localhost" - MAIL_PORT = 25 - MAIL_USE_SSL = False - MAIL_USE_TLS = False - MAIL_USERNAME = "noreply@example.org" - MAIL_PASSWORD = "" - MAIL_DEFAULT_SENDER = ("Default Sender", "noreply@example.org") - # Where to logger should send the emails to - ADMINS = ["admin@example.org"] - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - MESSAGE_URL_PREFIX = "/message" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/development.py.example b/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/development.py.example deleted file mode 100644 index cd3b7834..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/development.py.example +++ /dev/null @@ -1,61 +0,0 @@ -""" - flaskbb.configs.development - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's development config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class DevelopmentConfig(DefaultConfig): - - # Indicates that it is a dev environment - DEBUG = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - #SQLALCHEMY_DATABASE_URI = "postgresql://flaskbb@localhost:5432/flaskbb" - SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - 'flaskbb.sqlite' - - # This will print all SQL statements - SQLALCHEMY_ECHO = True - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/production.py.example b/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/production.py.example deleted file mode 100644 index 22103f20..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/production.py.example +++ /dev/null @@ -1,92 +0,0 @@ -""" - flaskbb.configs.example - ~~~~~~~~~~~~~~~~~~~~ - - This is how a production configuration can look like. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class ProductionConfig(DefaultConfig): - - ## Database - # If no SQL service is choosen, it will fallback to sqlite - # For PostgresSQL: - #SQLALCHEMY_DATABASE_URI = "postgresql://localhost/example" - # For SQLite: - #SQLALCHEMY_DATABASE_URI = 'sqlite:///' + DefaultConfig._basedir + '/' + \ - # 'flaskbb.sqlite' - - ## Security - # This is the secret key that is used for session signing. - # You can generate a secure key with os.urandom(24) - SECRET_KEY = 'secret key' - - # You can generate the WTF_CSRF_SECRET_KEY the same way as you have - # generated the SECRET_KEY. If no WTF_CSRF_SECRET_KEY is provided, it will - # use the SECRET_KEY. - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - - ## Caching - # For all available caching types, take a look at the Flask-Cache docs - # https://pythonhosted.org/Flask-Cache/#configuring-flask-cache - CACHE_TYPE = "simple" - CACHE_DEFAULT_TIMEOUT = 60 - - - ## Captcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - RECAPTCHA_ENABLED = False - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "your_public_recaptcha_key" - RECAPTCHA_PRIVATE_KEY = "your_private_recaptcha_key" - RECAPTCHA_OPTIONS = {"theme": "white"} - - - ## Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] - - - ## Error/Info Logging - # If SEND_LOGS is set to True, the admins (see the mail configuration) will - # recieve the error logs per email. - SEND_LOGS = False - - # The filename for the info and error logs. The logfiles are stored at - # flaskbb/logs - INFO_LOG = "info.log" - ERROR_LOG = "error.log" - - # Flask-Redis - REDIS_ENABLED = False - REDIS_URL = "redis://:password@localhost:6379" - REDIS_DATABASE = 0 - - # URL Prefixes. Only change it when you know what you are doing. - FORUM_URL_PREFIX = "" - USER_URL_PREFIX = "/user" - AUTH_URL_PREFIX = "/auth" - ADMIN_URL_PREFIX = "/admin" diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/testing.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/testing.py deleted file mode 100644 index b96e9a79..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/configs/testing.py +++ /dev/null @@ -1,64 +0,0 @@ -""" - flaskbb.configs.testing - ~~~~~~~~~~~~~~~~~~~~ - - This is the FlaskBB's testing config. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.configs.default import DefaultConfig - - -class TestingConfig(DefaultConfig): - - # Indicates that it is a testing environment - DEBUG = False - TESTING = True - - # SQLAlchemy connection options - # This will create in the applications folder (where manage.py is) - # a database named flaskbb.sqlite. - SQLALCHEMY_DATABASE_URI = ( - 'sqlite://' - ) - - SERVER_NAME = "localhost:5000" - - # This will print all SQL statements - SQLALCHEMY_ECHO = False - - # Security - SECRET_KEY = "SecretKeyForSessionSigning" - WTF_CSRF_ENABLED = True - WTF_CSRF_SECRET_KEY = "reallyhardtoguess" - - # Recaptcha - # To get recaptcha, visit the link below: - # https://www.google.com/recaptcha/admin/create - # Those keys are only going to work on localhost! - RECAPTCHA_ENABLED = True - RECAPTCHA_USE_SSL = False - RECAPTCHA_PUBLIC_KEY = "6LcZB-0SAAAAAGIddBuSFU9aBpHKDa16p5gSqnxK" - RECAPTCHA_PRIVATE_KEY = "6LcZB-0SAAAAAPuPHhazscMJYa2mBe7MJSoWXrUu" - RECAPTCHA_OPTIONS = {"theme": "white"} - - # Mail - # Local SMTP Server - #MAIL_SERVER = "localhost" - #MAIL_PORT = 25 - #MAIL_USE_SSL = False - #MAIL_USERNAME = "" - #MAIL_PASSWORD = "" - #MAIL_DEFAULT_SENDER = "noreply@example.org" - - # Google Mail Example - MAIL_SERVER = "smtp.gmail.com" - MAIL_PORT = 465 - MAIL_USE_SSL = True - MAIL_USERNAME = "your_username@gmail.com" - MAIL_PASSWORD = "your_password" - MAIL_DEFAULT_SENDER = ("Your Name", "your_username@gmail.com") - - # The user who should recieve the error logs - ADMINS = ["your_admin_user@gmail.com"] diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/email.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/email.py deleted file mode 100644 index 9079200a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/email.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.emails - ~~~~~~~~~~~~~~~~~~~~ - - This module adds the functionality to send emails - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask import render_template -from flask_mail import Message -from flask_babelplus import lazy_gettext as _ - -from flaskbb.extensions import mail - - -def send_reset_token(user, token): - send_email( - subject=_("Password Reset"), - recipients=[user.email], - text_body=render_template( - "email/reset_password.txt", - user=user, - token=token - ), - html_body=render_template( - "email/reset_password.html", - user=user, - token=token - ) - ) - - -def send_email(subject, recipients, text_body, html_body, sender=None): - msg = Message(subject, recipients=recipients, sender=sender) - msg.body = text_body - msg.html = html_body - mail.send(msg) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/exceptions.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/exceptions.py deleted file mode 100644 index 16d00f1a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/exceptions.py +++ /dev/null @@ -1,19 +0,0 @@ -""" - flaskbb.exceptions - ~~~~~~~~~~~~~~~~~~ - - Exceptions implemented by FlaskBB. - - :copyright: (c) 2015 by the FlaskBBB Team. - :license: BSD, see LICENSE for more details -""" -from werkzeug.exceptions import HTTPException, Forbidden - - -class FlaskBBError(HTTPException): - "Root exception for FlaskBB" - description = "An internal error has occured" - - -class AuthorizationRequired(FlaskBBError, Forbidden): - description = "Authorization is required to access this area." diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/extensions.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/extensions.py deleted file mode 100644 index d677d939..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/extensions.py +++ /dev/null @@ -1,61 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.extensions - ~~~~~~~~~~~~~~~~~~~~ - - The extensions that are used by FlaskBB. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_allows import Allows -from flask_sqlalchemy import SQLAlchemy -from flask_login import LoginManager -from flask_mail import Mail -from flask_cache import Cache -from flask_debugtoolbar import DebugToolbarExtension -from flask_redis import Redis -from flask_migrate import Migrate -from flask_themes2 import Themes -from flask_plugins import PluginManager -from flask_babelplus import Babel -from flask_wtf.csrf import CsrfProtect - -from flaskbb.exceptions import AuthorizationRequired - - -# Permissions Manager -allows = Allows(throws=AuthorizationRequired) - -# Database -db = SQLAlchemy() - -# Login -login_manager = LoginManager() - -# Mail -mail = Mail() - -# Caching -cache = Cache() - -# Redis -redis_store = Redis() - -# Debugtoolbar -debugtoolbar = DebugToolbarExtension() - -# Migrations -migrate = Migrate() - -# Themes -themes = Themes() - -# PluginManager -plugin_manager = PluginManager() - -# Babel -babel = Babel() - -# CSRF -csrf = CsrfProtect() diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/groups.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/groups.py deleted file mode 100644 index a9629854..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/groups.py +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.groups - ~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our groups. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" - -from collections import OrderedDict - - -fixture = OrderedDict(( - ('Administrator', { - 'description': 'The Administrator Group', - 'admin': True, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Super Moderator', { - 'description': 'The Super Moderator Group', - 'admin': False, - 'super_mod': True, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Moderator', { - 'description': 'The Moderator Group', - 'admin': False, - 'super_mod': False, - 'mod': True, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': True, - 'deletetopic': True, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': True, - 'mod_banuser': True, - }), - ('Member', { - 'description': 'The Member Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': False, - 'editpost': True, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': True, - 'postreply': True, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Banned', { - 'description': 'The Banned Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': True, - 'guest': False, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }), - ('Guest', { - 'description': 'The Guest Group', - 'admin': False, - 'super_mod': False, - 'mod': False, - 'banned': False, - 'guest': True, - 'editpost': False, - 'deletepost': False, - 'deletetopic': False, - 'posttopic': False, - 'postreply': False, - 'mod_edituser': False, - 'mod_banuser': False, - }) -)) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/settings.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/settings.py deleted file mode 100644 index 47d7a2d7..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/fixtures/settings.py +++ /dev/null @@ -1,159 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.fixtures.settings - ~~~~~~~~~~~~~~~~~~~~~~~~~ - - The fixtures module for our settings. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flask_themes2 import get_themes_list - -from flaskbb.extensions import babel - - -def available_themes(): - return [(theme.identifier, theme.name) for theme in get_themes_list()] - - -def available_avatar_types(): - return [("image/png", "PNG"), ("image/jpeg", "JPG"), ("image/gif", "GIF")] - - -def available_languages(): - return [(locale.language, locale.display_name) - for locale in babel.list_translations()] - - -fixture = ( - # Settings Group - ('general', { - 'name': "General Settings", - 'description': "How many items per page are displayed.", - 'settings': ( - ('project_title', { - 'value': "FlaskBB", - 'value_type': "string", - 'name': "Project title", - 'description': "The title of the project.", - }), - ('project_subtitle', { - 'value': "A lightweight forum software in Flask", - 'value_type': "string", - 'name': "Project subtitle", - 'description': "A short description of the project.", - }), - ('posts_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Posts per page", - 'description': "Number of posts displayed per page.", - }), - ('topics_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Topics per page", - 'description': "Number of topics displayed per page.", - }), - ('users_per_page', { - 'value': 10, - 'value_type': "integer", - 'extra': {'min': 5}, - 'name': "Users per page", - 'description': "Number of users displayed per page.", - }), - ), - }), - ('misc', { - 'name': "Misc Settings", - 'description': "Miscellaneous settings.", - 'settings': ( - ('message_quota', { - 'value': 50, - 'value_type': "integer", - 'extra': {"min": 0}, - 'name': "Private Message Quota", - 'description': "The amount of messages a user can have." - }), - ('online_last_minutes', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Online last minutes", - 'description': "How long a user can be inactive before he is marked as offline. 0 to disable it.", - }), - ('title_length', { - 'value': 15, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Topic title length", - 'description': "The length of the topic title shown on the index." - }), - ('tracker_length', { - 'value': 7, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Tracker length", - 'description': "The days for how long the forum should deal with unread topics. 0 to disable it." - }), - ('avatar_height', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Height", - 'description': "The allowed height of an avatar in pixels." - }), - ('avatar_width', { - 'value': 150, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Width", - 'description': "The allowed width of an avatar in pixels." - }), - ('avatar_size', { - 'value': 200, - 'value_type': "integer", - 'extra': {'min': 0}, - 'name': "Avatar Size", - 'description': "The allowed size of the avatar in kilobytes." - }), - ('avatar_types', { - 'value': ["image/png", "image/jpeg", "image/gif"], - 'value_type': "selectmultiple", - 'extra': {"choices": available_avatar_types}, - 'name': "Avatar Types", - 'description': "The allowed types of an avatar. Such as JPEG, GIF or PNG." - }), - ('signature_enabled', { - 'value': True, - 'value_type': "boolean", - 'extra': {}, - 'name': "Enable Signatures", - 'description': "Enable signatures in posts." - }) - ), - }), - ('appearance', { - 'name': "Appearance Settings", - "description": "Change the theme and language for your forum.", - "settings": ( - ('default_theme', { - 'value': "aurora", - 'value_type': "select", - 'extra': {'choices': available_themes}, - 'name': "Default Theme", - 'description': "Change the default theme for your forum." - }), - ('default_language', { - 'value': "en", - 'value_type': "select", - 'extra': {'choices': available_languages}, - 'name': "Default Language", - 'description': "Change the default language for your forum." - }), - ), - }), -) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/__init__.py deleted file mode 100644 index c0aa49cd..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/__init__.py +++ /dev/null @@ -1,73 +0,0 @@ -from flask import current_app -from flask_plugins import Plugin - -from flaskbb.management.models import SettingsGroup - - -class FlaskBBPlugin(Plugin): - - #: This is the :class:`SettingsGroup` key - if your the plugin needs to - #: install additional things you must set it, else it won't install - #: anything. - settings_key = None - - @property - def installable(self): - """Is ``True`` if the Plugin can be installed.""" - if self.settings_key is not None: - return True - return False - - @property - def uninstallable(self): - """Is ``True`` if the Plugin can be uninstalled.""" - if self.installable: - group = SettingsGroup.query.filter_by(key=self.settings_key).first() - if group and len(group.settings.all()) > 0: - return True - return False - return False - - # Some helpers - def register_blueprint(self, blueprint, **kwargs): - """Registers a blueprint. - - :param blueprint: The blueprint which should be registered. - """ - current_app.register_blueprint(blueprint, **kwargs) - - def create_table(self, model, db): - """Creates the relation for the model - - :param model: The Model which should be created - :param db: The database instance. - """ - if not model.__table__.exists(bind=db.engine): - model.__table__.create(bind=db.engine) - - def drop_table(self, model, db): - """Drops the relation for the bounded model. - - :param model: The model on which the table is bound. - :param db: The database instance. - """ - model.__table__.drop(bind=db.engine) - - def create_all_tables(self, models, db): - """A interface for creating all models specified in ``models``. - - :param models: A list with models - :param db: The database instance - """ - for model in models: - self.create_table(model, db) - - def drop_all_tables(self, models, db): - """A interface for dropping all models specified in the - variable ``models``. - - :param models: A list with models - :param db: The database instance. - """ - for model in models: - self.drop_table(model, db) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/__init__.py deleted file mode 100644 index aed2fd06..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/__init__.py +++ /dev/null @@ -1,64 +0,0 @@ -from flask.ext.plugins import connect_event - -from flaskbb.plugins import FlaskBBPlugin -from flaskbb.utils.populate import (create_settings_from_fixture, - delete_settings_from_fixture) -from flaskbb.forum.models import Forum - -from .views import portal, inject_portal_link - -__version__ = "0.1" -__plugin__ = "PortalPlugin" - - -def available_forums(): - forums = Forum.query.order_by(Forum.id.asc()).all() - return [(forum.id, forum.title) for forum in forums] - -fixture = ( - ('plugin_portal', { - 'name': "Portal Settings", - "description": "Configure the portal", - "settings": ( - ('plugin_portal_forum_ids', { - 'value': [1], - 'value_type': "selectmultiple", - 'name': "Forum IDs", - 'description': "The forum ids from which forums the posts should be displayed on the portal.", - 'extra': {"choices": available_forums, "coerce": int} - }), - ('plugin_portal_recent_topics', { - 'value': 10, - 'value_type': "integer", - 'name': "Number of Recent Topics", - 'description': "The number of topics in Recent Topics portlet.", - 'extra': {"min": 1}, - }), - ), - }), -) - - -class PortalPlugin(FlaskBBPlugin): - - name = "Portal Plugin" - - description = ("This Plugin provides a simple portal for FlaskBB.") - - author = "sh4nks" - - license = "BSD" - - version = __version__ - - settings_key = 'plugin_portal' - - def setup(self): - self.register_blueprint(portal, url_prefix="/portal") - connect_event("before-first-navigation-element", inject_portal_link) - - def install(self): - create_settings_from_fixture(fixture) - - def uninstall(self): - delete_settings_from_fixture(fixture) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/info.json b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/info.json deleted file mode 100644 index bd82b571..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "identifier": "portal", - "name": "Portal", - "author": "sh4nks", - "website": "http://flaskbb.org", - "license": "BSD", - "description": "A Portal Plugin for FlaskBB", - "version": "0.1" -} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/index.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/index.html deleted file mode 100644 index dda400b4..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/index.html +++ /dev/null @@ -1,204 +0,0 @@ -{% extends theme("layout.html") %} - -{% block css %} - {{ super() }} - - -{% endblock %} - -{% block content %} -
    - - -
    -
    -
    -

    News

    -
    -
    - - {% for topic in news.items %} -

    {{ topic.title }}

    - -
    - {{ topic.first_post.content | markup | safe }}
    -
    - {% if not loop.last %}
    {% endif %} - {% endfor %} - -
    -
    - -
    - - -
    -
    -
    -

    Recent Topics

    -
    -
    - {% for topic in recent_topics %} - -
    - - -
    - {{ topic.date_created | time_since }} -
    -
    - - {% endfor %} -
    -
    - -
    -
    -

    Statistics

    -
    -
    - -
    -
    - Topics -
    -
    - {{ topic_count }} -
    -
    - -
    -
    - Posts -
    -
    - {{ post_count }} -
    -
    - -
    -
    - Registered Users -
    -
    - {{ user_count }} -
    -
    - - {% if newest_user %} -
    -
    - Newest User -
    - -
    - {% endif %} - -
    -
    - Online Users -
    - -
    - {{ online_users }} -
    -
    - - {% if config["REDIS_ENABLED"] %} -
    -
    - Guests online -
    - -
    - {{ online_guests }} -
    -
    - {% endif %} -
    -
    -
    - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/navigation_snippet.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/navigation_snippet.html deleted file mode 100644 index e24fcbae..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/templates/navigation_snippet.html +++ /dev/null @@ -1,5 +0,0 @@ -
  • - - Portal - -
  • diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po deleted file mode 100644 index 3681636e..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/de/LC_MESSAGES/messages.po +++ /dev/null @@ -1,24 +0,0 @@ -# German translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-01-05 21:38+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: de \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Bitte installieren sie das Plugin zuerst. Danach können sie es in der Administration konfigurieren." diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po deleted file mode 100644 index 438e2979..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/translations/en/LC_MESSAGES/messages.po +++ /dev/null @@ -1,25 +0,0 @@ -# English translations for PROJECT. -# Copyright (C) 2015 ORGANIZATION -# This file is distributed under the same license as the PROJECT project. -# FIRST AUTHOR , 2015. -# -msgid "" -msgstr "" -"Project-Id-Version: PROJECT VERSION\n" -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n" -"POT-Creation-Date: 2015-02-13 14:26+0100\n" -"PO-Revision-Date: 2015-01-05 21:38+0100\n" -"Last-Translator: FULL NAME \n" -"Language-Team: en \n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Generated-By: Babel 1.3\n" - -#: /home/peter/Development/flaskbb/flaskbb/plugins/portal/views.py:26 -msgid "" -"Please install the plugin first to configure the forums which should be " -"displayed" -msgstr "Please install the plugin first in order to configure which forums are displayed." - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/views.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/views.py deleted file mode 100644 index a3643889..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/plugins/portal/views.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -from flask import Blueprint, current_app, flash, request -from flask_babelplus import gettext as _ -from flask_login import current_user - -from flaskbb.utils.helpers import render_template -from flaskbb.forum.models import Topic, Post, Forum -from flaskbb.user.models import User, Group -from flaskbb.utils.helpers import time_diff, get_online_users -from flaskbb.utils.settings import flaskbb_config - -portal = Blueprint("portal", __name__, template_folder="templates") - - -def inject_portal_link(): - return render_template("navigation_snippet.html") - - -@portal.route("/") -def index(): - page = request.args.get('page', 1, type=int) - - try: - forum_ids = flaskbb_config["PLUGIN_PORTAL_FORUM_IDS"] - except KeyError: - forum_ids = [] - flash(_("Please install the plugin first to configure the forums " - "which should be displayed"), "warning") - - - group_ids = [group.id for group in current_user.groups] - forums = Forum.query.filter(Forum.groups.any(Group.id.in_(group_ids))) - - # get the news forums - check for permissions - news_ids = [f.id for f in forums.filter(Forum.id.in_(forum_ids)).all()] - news = Topic.query.filter(Topic.forum_id.in_(news_ids)).\ - order_by(Topic.id.desc()).\ - paginate(page, flaskbb_config["TOPICS_PER_PAGE"], True) - - # get the recent topics from all to the user available forums (not just the - # configured ones) - all_ids = [f.id for f in forums.all()] - recent_topics = Topic.query.filter(Topic.forum_id.in_(all_ids)).\ - order_by(Topic.last_updated.desc()).\ - limit(flaskbb_config.get("PLUGIN_PORTAL_RECENT_TOPICS", 10)) - - user_count = User.query.count() - topic_count = Topic.query.count() - post_count = Post.query.count() - newest_user = User.query.order_by(User.id.desc()).first() - - # Check if we use redis or not - if not current_app.config["REDIS_ENABLED"]: - online_users = User.query.filter(User.lastseen >= time_diff()).count() - online_guests = None - else: - online_users = len(get_online_users()) - online_guests = len(get_online_users(guest=True)) - - return render_template("index.html", news=news, recent_topics=recent_topics, - user_count=user_count, topic_count=topic_count, - post_count=post_count, newest_user=newest_user, - online_guests=online_guests, - online_users=online_users) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/.gitkeep b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/pygments.css b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/pygments.css deleted file mode 100644 index 2e01f06a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/pygments.css +++ /dev/null @@ -1,64 +0,0 @@ -.highlight .hll { background-color: #ffffcc } -.highlight .c { color: #408080; font-style: italic } /* Comment */ -.highlight .err { border: 1px solid #FF0000 } /* Error */ -.highlight .k { color: #008000; font-weight: bold } /* Keyword */ -.highlight .o { color: #666666 } /* Operator */ -.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ -.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ -.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ -.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ -.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ -.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ -.highlight .gd { color: #A00000 } /* Generic.Deleted */ -.highlight .ge { font-style: italic } /* Generic.Emph */ -.highlight .gr { color: #FF0000 } /* Generic.Error */ -.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.highlight .gi { color: #00A000 } /* Generic.Inserted */ -.highlight .go { color: #888888 } /* Generic.Output */ -.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ -.highlight .gs { font-weight: bold } /* Generic.Strong */ -.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.highlight .gt { color: #0044DD } /* Generic.Traceback */ -.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ -.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ -.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ -.highlight .kp { color: #008000 } /* Keyword.Pseudo */ -.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ -.highlight .kt { color: #B00040 } /* Keyword.Type */ -.highlight .m { color: #666666 } /* Literal.Number */ -.highlight .s { color: #BA2121 } /* Literal.String */ -.highlight .na { color: #7D9029 } /* Name.Attribute */ -.highlight .nb { color: #008000 } /* Name.Builtin */ -.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ -.highlight .no { color: #880000 } /* Name.Constant */ -.highlight .nd { color: #AA22FF } /* Name.Decorator */ -.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ -.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ -.highlight .nf { color: #0000FF } /* Name.Function */ -.highlight .nl { color: #A0A000 } /* Name.Label */ -.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ -.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ -.highlight .nv { color: #19177C } /* Name.Variable */ -.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ -.highlight .w { color: #bbbbbb } /* Text.Whitespace */ -.highlight .mb { color: #666666 } /* Literal.Number.Bin */ -.highlight .mf { color: #666666 } /* Literal.Number.Float */ -.highlight .mh { color: #666666 } /* Literal.Number.Hex */ -.highlight .mi { color: #666666 } /* Literal.Number.Integer */ -.highlight .mo { color: #666666 } /* Literal.Number.Oct */ -.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ -.highlight .sc { color: #BA2121 } /* Literal.String.Char */ -.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ -.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ -.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ -.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ -.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ -.highlight .sx { color: #008000 } /* Literal.String.Other */ -.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ -.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ -.highlight .ss { color: #19177C } /* Literal.String.Symbol */ -.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ -.highlight .vc { color: #19177C } /* Name.Variable.Class */ -.highlight .vg { color: #19177C } /* Name.Variable.Global */ -.highlight .vi { color: #19177C } /* Name.Variable.Instance */ -.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/styles.css b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/styles.css deleted file mode 100644 index 79c3cb7c..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/css/styles.css +++ /dev/null @@ -1,10 +0,0 @@ -/*! - * Bootstrap v3.3.6 (http://getbootstrap.com) - * Copyright 2011-2015 Twitter, Inc. - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) - *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}dfn{font-style:italic}h1{font-size:2em;margin:0.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace, monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0}input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto}input[type="search"]{-webkit-appearance:textfield;box-sizing:content-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:bold}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,*:before,*:after{background:transparent !important;color:#000 !important;box-shadow:none !important;text-shadow:none !important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000 !important}.label{border:1px solid #000}.table{border-collapse:collapse !important}.table td,.table th{background-color:#fff !important}.table-bordered th,.table-bordered td{border:1px solid #ddd !important}}@font-face{font-family:'Glyphicons Halflings';src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot");src:url("../fonts/bootstrap/glyphicons-halflings-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff2") format("woff2"),url("../fonts/bootstrap/glyphicons-halflings-regular.woff") format("woff"),url("../fonts/bootstrap/glyphicons-halflings-regular.ttf") format("truetype"),url("../fonts/bootstrap/glyphicons-halflings-regular.svg#glyphicons_halflingsregular") format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:normal;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-euro:before,.glyphicon-eur:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}*:before,*:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857;color:#333;background-color:#F6F9FC}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:hover,a:focus{color:#23527c;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:all 0.2s ease-in-out;-o-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role="button"]{cursor:pointer}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h1 .small,h2 small,h2 .small,h3 small,h3 .small,h4 small,h4 .small,h5 small,h5 .small,h6 small,h6 .small,.h1 small,.h1 .small,.h2 small,.h2 .small,.h3 small,.h3 .small,.h4 small,.h4 .small,.h5 small,.h5 .small,.h6 small,.h6 .small{font-weight:normal;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,h1 .small,.h1 small,.h1 .small,h2 small,h2 .small,.h2 small,.h2 .small,h3 small,h3 .small,.h3 small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,h4 .small,.h4 small,.h4 .small,h5 small,h5 .small,.h5 small,.h5 .small,h6 small,h6 .small,.h6 small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width: 768px){.lead{font-size:21px}}small,.small{font-size:85%}mark,.mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase,.initialism{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover,a.text-primary:focus{color:#286090}.text-success{color:#3c763d}a.text-success:hover,a.text-success:focus{color:#2b542c}.text-info{color:#31708f}a.text-info:hover,a.text-info:focus{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover,a.text-warning:focus{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover,a.text-danger:focus{color:#843534}.bg-primary{color:#fff}.bg-primary{background-color:#337ab7}a.bg-primary:hover,a.bg-primary:focus{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover,a.bg-success:focus{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover,a.bg-info:focus{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover,a.bg-warning:focus{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover,a.bg-danger:focus{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ul ol,ol ul,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857}dt{font-weight:bold}dd{margin-left:0}.dl-horizontal dd:before,.dl-horizontal dd:after{content:" ";display:table}.dl-horizontal dd:after{clear:both}@media (min-width: 768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse footer:before,.blockquote-reverse small:before,.blockquote-reverse .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,.blockquote-reverse small:after,.blockquote-reverse .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,0.25)}kbd kbd{padding:0;font-size:100%;font-weight:bold;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container:before,.container:after{content:" ";display:table}.container:after{clear:both}@media (min-width: 768px){.container{width:750px}}@media (min-width: 992px){.container{width:970px}}@media (min-width: 1200px){.container{width:1170px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}.container-fluid:before,.container-fluid:after{content:" ";display:table}.container-fluid:after{clear:both}.row{margin-left:-15px;margin-right:-15px}.row:before,.row:after{content:" ";display:table}.row:after{clear:both}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-1{width:8.33333%}.col-xs-2{width:16.66667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333%}.col-xs-5{width:41.66667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333%}.col-xs-8{width:66.66667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333%}.col-xs-11{width:91.66667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333%}.col-xs-pull-2{right:16.66667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333%}.col-xs-pull-5{right:41.66667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333%}.col-xs-pull-8{right:66.66667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333%}.col-xs-pull-11{right:91.66667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333%}.col-xs-push-2{left:16.66667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333%}.col-xs-push-5{left:41.66667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333%}.col-xs-push-8{left:66.66667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333%}.col-xs-push-11{left:91.66667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0%}.col-xs-offset-1{margin-left:8.33333%}.col-xs-offset-2{margin-left:16.66667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333%}.col-xs-offset-5{margin-left:41.66667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333%}.col-xs-offset-8{margin-left:66.66667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333%}.col-xs-offset-11{margin-left:91.66667%}.col-xs-offset-12{margin-left:100%}@media (min-width: 768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-1{width:8.33333%}.col-sm-2{width:16.66667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333%}.col-sm-5{width:41.66667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333%}.col-sm-8{width:66.66667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333%}.col-sm-11{width:91.66667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333%}.col-sm-pull-2{right:16.66667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333%}.col-sm-pull-5{right:41.66667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333%}.col-sm-pull-8{right:66.66667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333%}.col-sm-pull-11{right:91.66667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333%}.col-sm-push-2{left:16.66667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333%}.col-sm-push-5{left:41.66667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333%}.col-sm-push-8{left:66.66667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333%}.col-sm-push-11{left:91.66667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0%}.col-sm-offset-1{margin-left:8.33333%}.col-sm-offset-2{margin-left:16.66667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333%}.col-sm-offset-5{margin-left:41.66667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333%}.col-sm-offset-8{margin-left:66.66667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333%}.col-sm-offset-11{margin-left:91.66667%}.col-sm-offset-12{margin-left:100%}}@media (min-width: 992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-1{width:8.33333%}.col-md-2{width:16.66667%}.col-md-3{width:25%}.col-md-4{width:33.33333%}.col-md-5{width:41.66667%}.col-md-6{width:50%}.col-md-7{width:58.33333%}.col-md-8{width:66.66667%}.col-md-9{width:75%}.col-md-10{width:83.33333%}.col-md-11{width:91.66667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333%}.col-md-pull-2{right:16.66667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333%}.col-md-pull-5{right:41.66667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333%}.col-md-pull-8{right:66.66667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333%}.col-md-pull-11{right:91.66667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333%}.col-md-push-2{left:16.66667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333%}.col-md-push-5{left:41.66667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333%}.col-md-push-8{left:66.66667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333%}.col-md-push-11{left:91.66667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0%}.col-md-offset-1{margin-left:8.33333%}.col-md-offset-2{margin-left:16.66667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333%}.col-md-offset-5{margin-left:41.66667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333%}.col-md-offset-8{margin-left:66.66667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333%}.col-md-offset-11{margin-left:91.66667%}.col-md-offset-12{margin-left:100%}}@media (min-width: 1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-1{width:8.33333%}.col-lg-2{width:16.66667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333%}.col-lg-5{width:41.66667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333%}.col-lg-8{width:66.66667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333%}.col-lg-11{width:91.66667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333%}.col-lg-pull-2{right:16.66667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333%}.col-lg-pull-5{right:41.66667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333%}.col-lg-pull-8{right:66.66667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333%}.col-lg-pull-11{right:91.66667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333%}.col-lg-push-2{left:16.66667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333%}.col-lg-push-5{left:41.66667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333%}.col-lg-push-8{left:66.66667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333%}.col-lg-push-11{left:91.66667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0%}.col-lg-offset-1{margin-left:8.33333%}.col-lg-offset-2{margin-left:16.66667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333%}.col-lg-offset-5{margin-left:41.66667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333%}.col-lg-offset-8{margin-left:66.66667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333%}.col-lg-offset-11{margin-left:91.66667%}.col-lg-offset-12{margin-left:100%}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>thead>tr>td,.table>tbody>tr>th,.table>tbody>tr>td,.table>tfoot>tr>th,.table>tfoot>tr>td{padding:8px;line-height:1.42857;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>th,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#F6F9FC}.table-condensed>thead>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*="col-"]{position:static;float:none;display:table-column}table td[class*="col-"],table th[class*="col-"]{position:static;float:none;display:table-cell}.table>thead>tr>td.active,.table>thead>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>thead>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>thead>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>thead>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>thead>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:0.01%}@media screen and (max-width: 767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:bold}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="radio"],input[type="checkbox"]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type="file"]{display:block}input[type="range"]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;-o-transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s;transition:border-color ease-in-out 0.15s,box-shadow ease-in-out 0.15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(102,175,233,0.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type="search"]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio: 0){input[type="date"].form-control,input[type="time"].form-control,input[type="datetime-local"].form-control,input[type="month"].form-control{line-height:34px}input[type="date"].input-sm,.input-group-sm>input[type="date"].form-control,.input-group-sm>input[type="date"].input-group-addon,.input-group-sm>.input-group-btn>input[type="date"].btn,.input-group-sm input[type="date"],input[type="time"].input-sm,.input-group-sm>input[type="time"].form-control,.input-group-sm>input[type="time"].input-group-addon,.input-group-sm>.input-group-btn>input[type="time"].btn,.input-group-sm input[type="time"],input[type="datetime-local"].input-sm,.input-group-sm>input[type="datetime-local"].form-control,.input-group-sm>input[type="datetime-local"].input-group-addon,.input-group-sm>.input-group-btn>input[type="datetime-local"].btn,.input-group-sm input[type="datetime-local"],input[type="month"].input-sm,.input-group-sm>input[type="month"].form-control,.input-group-sm>input[type="month"].input-group-addon,.input-group-sm>.input-group-btn>input[type="month"].btn,.input-group-sm input[type="month"]{line-height:30px}input[type="date"].input-lg,.input-group-lg>input[type="date"].form-control,.input-group-lg>input[type="date"].input-group-addon,.input-group-lg>.input-group-btn>input[type="date"].btn,.input-group-lg input[type="date"],input[type="time"].input-lg,.input-group-lg>input[type="time"].form-control,.input-group-lg>input[type="time"].input-group-addon,.input-group-lg>.input-group-btn>input[type="time"].btn,.input-group-lg input[type="time"],input[type="datetime-local"].input-lg,.input-group-lg>input[type="datetime-local"].form-control,.input-group-lg>input[type="datetime-local"].input-group-addon,.input-group-lg>.input-group-btn>input[type="datetime-local"].btn,.input-group-lg input[type="datetime-local"],input[type="month"].input-lg,.input-group-lg>input[type="month"].form-control,.input-group-lg>input[type="month"].input-group-addon,.input-group-lg>.input-group-btn>input[type="month"].btn,.input-group-lg input[type="month"]{line-height:46px}}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:normal;cursor:pointer}.radio input[type="radio"],.radio-inline input[type="radio"],.checkbox input[type="checkbox"],.checkbox-inline input[type="checkbox"]{position:absolute;margin-left:-20px;margin-top:4px \9}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:normal;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type="radio"][disabled],input[type="radio"].disabled,fieldset[disabled] input[type="radio"],input[type="checkbox"][disabled],input[type="checkbox"].disabled,fieldset[disabled] input[type="checkbox"]{cursor:not-allowed}.radio-inline.disabled,fieldset[disabled] .radio-inline,.checkbox-inline.disabled,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,fieldset[disabled] .radio label,.checkbox.disabled label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.form-control-static.input-sm,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-sm,.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,.input-group-sm>.input-group-btn>select.btn{height:30px;line-height:30px}textarea.input-sm,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,.input-group-sm>.input-group-btn>textarea.btn,select[multiple].input-sm,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>.input-group-btn>select[multiple].btn{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm textarea.form-control,.form-group-sm select[multiple].form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg,.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}select.input-lg,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,.input-group-lg>.input-group-btn>select.btn{height:46px;line-height:46px}textarea.input-lg,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,.input-group-lg>.input-group-btn>textarea.btn,select[multiple].input-lg,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>.input-group-btn>select[multiple].btn{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg textarea.form-control,.form-group-lg select[multiple].form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.33333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-group-lg+.form-control-feedback,.form-group-lg .form-control+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-group-sm+.form-control-feedback,.form-group-sm .form-control+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline,.has-success.radio label,.has-success.checkbox label,.has-success.radio-inline label,.has-success.checkbox-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline,.has-warning.radio label,.has-warning.checkbox label,.has-warning.radio-inline label,.has-warning.checkbox-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline,.has-error.radio label,.has-error.checkbox label,.has-error.radio-inline label,.has-error.checkbox-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label ~ .form-control-feedback{top:25px}.has-feedback label.sr-only ~ .form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width: 768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:before,.form-horizontal .form-group:after{content:" ";display:table}.form-horizontal .form-group:after{clear:both}@media (min-width: 768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width: 768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width: 768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:normal;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn:focus,.btn.focus,.btn:active:focus,.btn:active.focus,.btn.active:focus,.btn.active.focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus,.btn.focus{color:#333;text-decoration:none}.btn:active,.btn.active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:focus,.btn-default.focus{color:#333;background-color:#e6e6e6;border-color:#8c8c8c}.btn-default:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active:hover,.btn-default:active:focus,.btn-default:active.focus,.btn-default.active:hover,.btn-default.active:focus,.btn-default.active.focus,.open>.btn-default.dropdown-toggle:hover,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle.focus{color:#333;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default:active,.btn-default.active,.open>.btn-default.dropdown-toggle{background-image:none}.btn-default.disabled:hover,.btn-default.disabled:focus,.btn-default.disabled.focus,.btn-default[disabled]:hover,.btn-default[disabled]:focus,.btn-default[disabled].focus,fieldset[disabled] .btn-default:hover,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default.focus{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary:focus,.btn-primary.focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary:active:hover,.btn-primary:active:focus,.btn-primary:active.focus,.btn-primary.active:hover,.btn-primary.active:focus,.btn-primary.active.focus,.open>.btn-primary.dropdown-toggle:hover,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle.focus{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary:active,.btn-primary.active,.open>.btn-primary.dropdown-toggle{background-image:none}.btn-primary.disabled:hover,.btn-primary.disabled:focus,.btn-primary.disabled.focus,.btn-primary[disabled]:hover,.btn-primary[disabled]:focus,.btn-primary[disabled].focus,fieldset[disabled] .btn-primary:hover,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary.focus{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:focus,.btn-success.focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success:hover{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active:hover,.btn-success:active:focus,.btn-success:active.focus,.btn-success.active:hover,.btn-success.active:focus,.btn-success.active.focus,.open>.btn-success.dropdown-toggle:hover,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle.focus{color:#fff;background-color:#398439;border-color:#255625}.btn-success:active,.btn-success.active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled:hover,.btn-success.disabled:focus,.btn-success.disabled.focus,.btn-success[disabled]:hover,.btn-success[disabled]:focus,.btn-success[disabled].focus,fieldset[disabled] .btn-success:hover,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success.focus{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:focus,.btn-info.focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info:hover{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active:hover,.btn-info:active:focus,.btn-info:active.focus,.btn-info.active:hover,.btn-info.active:focus,.btn-info.active.focus,.open>.btn-info.dropdown-toggle:hover,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle.focus{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info:active,.btn-info.active,.open>.btn-info.dropdown-toggle{background-image:none}.btn-info.disabled:hover,.btn-info.disabled:focus,.btn-info.disabled.focus,.btn-info[disabled]:hover,.btn-info[disabled]:focus,.btn-info[disabled].focus,fieldset[disabled] .btn-info:hover,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info.focus{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:focus,.btn-warning.focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning:hover{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active:hover,.btn-warning:active:focus,.btn-warning:active.focus,.btn-warning.active:hover,.btn-warning.active:focus,.btn-warning.active.focus,.open>.btn-warning.dropdown-toggle:hover,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle.focus{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning:active,.btn-warning.active,.open>.btn-warning.dropdown-toggle{background-image:none}.btn-warning.disabled:hover,.btn-warning.disabled:focus,.btn-warning.disabled.focus,.btn-warning[disabled]:hover,.btn-warning[disabled]:focus,.btn-warning[disabled].focus,fieldset[disabled] .btn-warning:hover,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning.focus{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:focus,.btn-danger.focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger:hover{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active:hover,.btn-danger:active:focus,.btn-danger:active.focus,.btn-danger.active:hover,.btn-danger.active:focus,.btn-danger.active.focus,.open>.btn-danger.dropdown-toggle:hover,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle.focus{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger:active,.btn-danger.active,.open>.btn-danger.dropdown-toggle{background-image:none}.btn-danger.disabled:hover,.btn-danger.disabled:focus,.btn-danger.disabled.focus,.btn-danger[disabled]:hover,.btn-danger[disabled]:focus,.btn-danger[disabled].focus,fieldset[disabled] .btn-danger:hover,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger.focus{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:normal;border-radius:0}.btn-link,.btn-link:active,.btn-link.active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:hover,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33333;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:0.35s;transition-duration:0.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropup,.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,0.175);box-shadow:0 6px 12px rgba(0,0,0,0.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:normal;line-height:1.42857;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width: 768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:before,.btn-toolbar:after{content:" ";display:table}.btn-toolbar:after{clear:both}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle,.btn-group-lg.btn-group>.btn+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,0.125);box-shadow:inset 0 3px 5px rgba(0,0,0,0.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret,.btn-group-lg>.btn .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret,.dropup .btn-group-lg>.btn .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after{content:" ";display:table}.btn-group-vertical>.btn-group:after{clear:both}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle="buttons"]>.btn input[type="radio"],[data-toggle="buttons"]>.btn input[type="checkbox"],[data-toggle="buttons"]>.btn-group>.btn input[type="radio"],[data-toggle="buttons"]>.btn-group>.btn input[type="checkbox"]{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*="col-"]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:normal;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type="radio"],.input-group-addon input[type="checkbox"]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:before,.nav:after{content:" ";display:table}.nav:after{clear:both}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;background-color:#F6F9FC;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:0}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li,.nav-tabs.nav-justified>li{float:none}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width: 768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width: 768px){.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs.nav-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#F6F9FC}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}.navbar:before,.navbar:after{content:" ";display:table}.navbar:after{clear:both}@media (min-width: 768px){.navbar{border-radius:0}}.navbar-header:before,.navbar-header:after{content:" ";display:table}.navbar-header:after{clear:both}@media (min-width: 768px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,0.1);-webkit-overflow-scrolling:touch}.navbar-collapse:before,.navbar-collapse:after{content:" ";display:table}.navbar-collapse:after{clear:both}.navbar-collapse.in{overflow-y:auto}@media (min-width: 768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block !important;height:auto !important;padding-bottom:0;overflow:visible !important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-device-width: 480px) and (orientation: landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width: 768px){.container>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-header,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width: 768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030}@media (min-width: 768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px 15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}.navbar-brand>img{display:block}@media (min-width: 768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width: 768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width: 767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width: 768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin-left:-15px;margin-right:-15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);box-shadow:inset 0 1px 0 rgba(255,255,255,0.1),0 1px 0 rgba(255,255,255,0.1);margin-top:8px;margin-bottom:8px}@media (min-width: 768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type="radio"],.navbar-form .checkbox input[type="checkbox"]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width: 767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width: 768px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-right-radius:0;border-top-left-radius:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm,.btn-group-sm>.navbar-btn.btn{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs,.btn-group-xs>.navbar-btn.btn{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width: 768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width: 768px){.navbar-left{float:left !important}.navbar-right{float:right !important;margin-right:-15px}.navbar-right ~ .navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#cad7e1}.navbar-default .navbar-brand{color:#555}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#3c3c3c;background-color:transparent}.navbar-default .navbar-text{color:#555}.navbar-default .navbar-nav>li>a{color:#555}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#cad7e1}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{background-color:#e7e7e7;color:#555}@media (max-width: 767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#555}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#555}.navbar-default .navbar-link:hover{color:#555}.navbar-default .btn-link{color:#555}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#555}.navbar-default .btn-link[disabled]:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:hover,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{background-color:#090909;color:#fff}@media (max-width: 767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:hover,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/ ";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:hover,.pagination>li>a:focus,.pagination>li>span:hover,.pagination>li>span:focus{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:hover,.pagination>.active>a:focus,.pagination>.active>span,.pagination>.active>span:hover,.pagination>.active>span:focus{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.33333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:20px 0;list-style:none;text-align:center}.pager:before,.pager:after{content:" ";display:table}.pager:after{clear:both}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:bold;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}.label:empty{display:none}.btn .label{position:relative;top:-1px}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:bold;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge,.btn-group-xs>.btn .badge,.btn-group-xs>.btn .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width: 768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857;background-color:#F6F9FC;border:1px solid #ddd;border-radius:4px;-webkit-transition:border 0.2s ease-in-out;-o-transition:border 0.2s ease-in-out;transition:border 0.2s ease-in-out}.thumbnail>img,.thumbnail a>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#333}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#337ab7}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:bold}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:20px;margin-bottom:20px;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.progress-bar{float:left;width:0%;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,0.15);-webkit-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-left,.media-right,.media-body{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus,button.list-group-item:hover,button.list-group-item:focus{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus,button.list-group-item-success:hover,button.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus,button.list-group-item-success.active,button.list-group-item-success.active:hover,button.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus,button.list-group-item-info:hover,button.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus,button.list-group-item-info.active,button.list-group-item-info.active:hover,button.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus,button.list-group-item-warning:hover,button.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus,button.list-group-item-warning.active,button.list-group-item-warning.active:hover,button.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus,button.list-group-item-danger:hover,button.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus,button.list-group-item-danger.active,button.list-group-item-danger.active:hover,button.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:0;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.05);box-shadow:0 1px 1px rgba(0,0,0,0.05)}.panel-body{padding:15px}.panel-body:before,.panel-body:after{content:" ";display:table}.panel-body:after{clear:both}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:-1;border-top-left-radius:-1}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a,.panel-title>small,.panel-title>.small,.panel-title>small>a,.panel-title>.small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #cad7e1;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:-1;border-top-left-radius:-1}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table caption,.panel>.table-responsive>.table caption,.panel>.panel-collapse>.table caption{padding-left:15px;padding-right:15px}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-right-radius:-1;border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child{border-top-left-radius:-1;border-top-right-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:-1}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:-1}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:-1;border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:-1;border-bottom-right-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:-1}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:-1}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:0}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body,.panel-group .panel-heading+.panel-collapse>.list-group{border-top:1px solid #cad7e1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #cad7e1}.panel-default{border-color:#cad7e1}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#cad7e1}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,0.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0, -25%);-ms-transform:translate(0, -25%);-o-transform:translate(0, -25%);transform:translate(0, -25%);-webkit-transition:-webkit-transform 0.3s ease-out;-moz-transition:-moz-transform 0.3s ease-out;-o-transition:-o-transform 0.3s ease-out;transition:transform 0.3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0, 0);-ms-transform:translate(0, 0);-o-transform:translate(0, 0);transform:translate(0, 0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,0.5);box-shadow:0 3px 9px rgba(0,0,0,0.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header:before,.modal-header:after{content:" ";display:table}.modal-header:after{clear:both}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer:before,.modal-footer:after{content:" ";display:table}.modal-footer:after{clear:both}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width: 768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,0.5);box-shadow:0 5px 15px rgba(0,0,0,0.5)}.modal-sm{width:300px}}@media (min-width: 992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:normal;letter-spacing:normal;line-break:auto;line-height:1.42857;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,0.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,0.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,0.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,0.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d), (-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform 0.6s ease-in-out;-moz-transition:-moz-transform 0.6s ease-in-out;-o-transition:-o-transform 0.6s ease-in-out;transition:transform 0.6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.next,.carousel-inner>.item.active.right{-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0);left:0}.carousel-inner>.item.prev,.carousel-inner>.item.active.left{-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0);left:0}.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right,.carousel-inner>.item.active{-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6);background-color:transparent}.carousel-control.left{background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:-o-linear-gradient(left, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-image:linear-gradient(to right, rgba(0,0,0,0.0001) 0%, rgba(0,0,0,0.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:hover,.carousel-control:focus{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,0.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width: 768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.hide{display:none !important}.show{display:block !important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-xs{display:none !important}.visible-sm{display:none !important}.visible-md{display:none !important}.visible-lg{display:none !important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none !important}@media (max-width: 767px){.visible-xs{display:block !important}table.visible-xs{display:table !important}tr.visible-xs{display:table-row !important}th.visible-xs,td.visible-xs{display:table-cell !important}}@media (max-width: 767px){.visible-xs-block{display:block !important}}@media (max-width: 767px){.visible-xs-inline{display:inline !important}}@media (max-width: 767px){.visible-xs-inline-block{display:inline-block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm{display:block !important}table.visible-sm{display:table !important}tr.visible-sm{display:table-row !important}th.visible-sm,td.visible-sm{display:table-cell !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-block{display:block !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline{display:inline !important}}@media (min-width: 768px) and (max-width: 991px){.visible-sm-inline-block{display:inline-block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md{display:block !important}table.visible-md{display:table !important}tr.visible-md{display:table-row !important}th.visible-md,td.visible-md{display:table-cell !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-block{display:block !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline{display:inline !important}}@media (min-width: 992px) and (max-width: 1199px){.visible-md-inline-block{display:inline-block !important}}@media (min-width: 1200px){.visible-lg{display:block !important}table.visible-lg{display:table !important}tr.visible-lg{display:table-row !important}th.visible-lg,td.visible-lg{display:table-cell !important}}@media (min-width: 1200px){.visible-lg-block{display:block !important}}@media (min-width: 1200px){.visible-lg-inline{display:inline !important}}@media (min-width: 1200px){.visible-lg-inline-block{display:inline-block !important}}@media (max-width: 767px){.hidden-xs{display:none !important}}@media (min-width: 768px) and (max-width: 991px){.hidden-sm{display:none !important}}@media (min-width: 992px) and (max-width: 1199px){.hidden-md{display:none !important}}@media (min-width: 1200px){.hidden-lg{display:none !important}}.visible-print{display:none !important}@media print{.visible-print{display:block !important}table.visible-print{display:table !important}tr.visible-print{display:table-row !important}th.visible-print,td.visible-print{display:table-cell !important}}.visible-print-block{display:none !important}@media print{.visible-print-block{display:block !important}}.visible-print-inline{display:none !important}@media print{.visible-print-inline{display:inline !important}}.visible-print-inline-block{display:none !important}@media print{.visible-print-inline-block{display:inline-block !important}}@media print{.hidden-print{display:none !important}}/*! - * Font Awesome 4.5.0 by @davegandy - http://fontawesome.io - @fontawesome - * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) - */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.5.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.5.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.5.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.5.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.5.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.5.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0);-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before{content:""}.fa-check-circle:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before{content:""}.fa-arrow-circle-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}html{position:relative;min-height:100%}body{margin-bottom:60px}.emoji{vertical-align:middle;width:20px;height:20px}.flaskbb-footer{position:absolute;bottom:0;height:60px;width:100%;padding-top:1em}.flaskbb-layout{padding-top:20px}.flaskbb-header{color:#fff;text-align:left;text-shadow:0 1px 0 rgba(0,0,0,0.1);background-color:#08c;background-image:-webkit-linear-gradient(top, #285e8e 0%, #08c 100%);background-image:linear-gradient(to bottom, #285e8e 0%, #08c 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);border:1px solid #cad7e1;border-bottom:0;position:relative;height:12em;padding:2.5em 2em;margin-top:2.5em}.flaskbb-header .flaskbb-meta .flaskbb-title{color:#fff;font-size:3em;font-weight:bold}.flaskbb-header .flaskbb-meta .flaskbb-subtitle{color:#E8F1F2}.flaskbb-breadcrumb{border:1px solid #cad7e1;border-radius:0}p.flaskbb-stats{margin:0;padding:0}.controls-row{padding:0.5em 0;margin:0}.controls-row .pagination{padding:0;margin:0}.controls-col{margin:0;padding:0}.settings-col{padding:0}.inline-form{display:inline}.cheatsheet h2{text-align:center;font-size:1.6em;-webkit-border-radius:2px;-webkit-background-clip:padding-box;-moz-border-radius:2px;-moz-background-clip:padding;padding:10px 0}.cheatsheet .emojis{text-align:center}.cheatsheet .typography{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:4px;-moz-column-gap:4px;column-gap:4px;text-align:center}.cheatsheet .code-example{width:100%;position:relative;margin-bottom:1em;-webkit-column-count:2;-moz-column-count:2;column-count:2;-webkit-column-gap:-4px;-moz-column-gap:-4px;column-gap:-4px}.cheatsheet .code-example .markup{padding:0}.navbar .navbar-btn>a.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.navbar .navbar-btn>a.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.navbar .navbar-btn>a.btn-primary:hover{color:#fff;background-color:#286090;border-color:#204d74}.navbar .navbar-nav .user-btn{padding-right:2em;padding-left:1em}.dropdown-menu>li .btn-link{display:block;padding:3px 20px;width:100%;text-align:left;clear:both;font-weight:normal;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li .btn-link:hover,.dropdown-menu>li .btn-link:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active .btn-link,.dropdown-menu>.active .btn-link:hover,.dropdown-menu>.active .btn-link:focus{color:#fff;text-decoration:none;background-color:#337ab7;outline:0}.dropdown-menu>.disabled .btn-link,.dropdown-menu>.disabled .btn-link:hover,.dropdown-menu>.disabled .btn-link:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.dropdown-messages{min-width:15em}.dropdown-messages .message-subject{font-style:italic}.dropdown-messages .author-name{font-weight:bold}.sidebar{padding-top:1em;padding-bottom:1em;text-shadow:none;background-color:#f8f8f8;border:1px solid #cad7e1}.sidebar .sidenav-header{display:block;padding-left:1.25em;padding-bottom:1em;font-size:12px;font-weight:bold;line-height:20px;color:#555;text-transform:uppercase}.sidebar .sidenav-btn{padding-bottom:1em;text-transform:uppercase;text-align:center}.sidebar .nav>li>a{display:block}.sidebar .nav>li>a:hover,.sidebar .nav>li>a:focus{text-decoration:none;background-color:#e7e7e7}.sidebar .nav>.active>a,.sidebar .nav>.active:hover>a,.sidebar .nav>.active:focus>a{font-weight:normal;color:#555;background-color:#e7e7e7}.nav-sidebar{width:100%;padding:0}.nav-sidebar a{color:#555}.nav-sidebar .active a{cursor:default;background-color:#f8f8f8;color:#555}.nav-sidebar li.active{border-top:1px solid #cad7e1;border-bottom:1px solid #cad7e1}.nav-sidebar li.active:first-child{border-top:none}.nav-sidebar .active a:hover{background-color:#f8f8f8}.panel.panel-tabs>.panel-heading{padding:0;font-weight:500}.panel.panel-tabs .nav-tabs{border-bottom:none}.panel.panel-tabs .nav-justified{margin-bottom:-1px}.panel-tabs .nav-tabs>li a{color:#E8F1F2;border:1px solid #337ab7}.panel-tabs .nav-tabs>li a:hover,.panel-tabs .nav-tabs>li a:focus{background-color:#08c;border:1px solid #08c}.panel-tabs .nav-tabs>li.active a,.panel-tabs .nav-tabs>li.active a:hover,.panel-tabs .nav-tabs>li.active a:focus{color:#fff;background-color:#08c;border:1px solid #08c}.editor-box .editor-submit .btn{margin:0.75em 0.25em 0 0}.editor-box>.quickreply{padding:0}.editor{min-height:0}.editor .editor-options{margin-top:0.5em}.editor .new-message{background:#fff;border:0;height:12em;outline:none;width:100%}.editor>.md-editor{border-color:#cad7e1}.editor>.md-editor.active{border-color:#cad7e1}.editor>.md-editor>.md-footer,.editor>.md-editor>.md-header{background:#f8f8f8}.editor>.md-editor>textarea{font-family:"Helvetica Neue", Helvetica, Arial, sans-serif;font-size:1em;border-top:1px solid #cad7e1;border-bottom:none;background:#fff;padding:0 0.25em}.editor>.md-editor>.md-preview{border-top:1px solid #cad7e1;border-right:1px solid #cad7e1;border-bottom:none;padding:0 0.25em;background:#eee}.btn.btn-link{border:none;color:#337ab7;text-decoration:none;padding:0;margin-bottom:2px}.btn.btn-link:focus,.btn.btn-link:hover{color:#23527c;text-decoration:underline}.btn-icon{font-family:'FontAwesome';font-size:1.15em;line-height:1.50em;font-weight:normal;background:none;border-radius:0}.icon-delete:before{content:"\f014";color:#d9534f}.icon-report:before{content:"\f024";color:#f0ad4e}.icon-edit:before{content:"\f040";color:#5cb85c}.icon-reply:before{content:"\f10e";color:#337ab7}.icon-replyall:before{content:"\f122";color:#5bc0de}.category-panel{border-color:#cad7e1}.category-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.category-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.category-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.category-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.category-panel .panel-heading{font-weight:bold}.category-panel .category-body{padding:0}.category-panel .category-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.category-panel .category-meta .forum-name,.category-panel .category-meta .forum-stats,.category-panel .category-meta .forum-last-post{font-weight:bold}.category-panel .category-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.category-panel .category-row:not(:last-child){border-bottom:1px solid #cad7e1}.category-panel .category-row.hover:hover{background-color:#f8f8f8}.category-panel .forum-info{position:relative}.category-panel .forum-info .forum-status{float:left;font-size:2em;padding-right:0.5em}.category-panel .forum-info .forum-name{font-weight:bold}.category-panel .forum-info .forum-moderators{font-style:italic}.category-panel .forum-last-post .last-post-title{font-weight:bold}.forum-panel{border-color:#cad7e1;margin-bottom:0}.forum-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.forum-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.forum-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.forum-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.forum-panel .panel-heading{font-weight:bold}.forum-panel .forum-body{padding:0}.forum-panel .forum-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.forum-panel .forum-meta .topic-name,.forum-panel .forum-meta .topic-stats,.forum-panel .forum-meta .topic-last-post{font-weight:bold}.forum-panel .topic-info{position:relative}.forum-panel .topic-info .topic-status{float:left;font-size:1.5em;padding-right:0.5em}.forum-panel .topic-info .topic-status .topic-locked{font-size:1.5em}.forum-panel .topic-info .topic-name{font-weight:bold}.forum-panel .topic-info .topic-pages{font-weight:normal;font-size:small}.forum-panel .forum-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.forum-panel .forum-row:not(:last-child){border-bottom:1px solid #cad7e1}.forum-panel .forum-row.hover:hover{background-color:#f8f8f8}.topic-panel{border-color:#cad7e1;margin-bottom:0}.topic-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.topic-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.topic-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.topic-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.topic-panel .panel-heading{font-weight:bold}.topic-panel .topic-body{padding-top:0;padding-bottom:0}.post-row{background:#e8ecf1;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0}.post-row:not(:last-child){border-bottom:1px solid #cad7e1}.post-box{background:#fff;border-left:1px solid #cad7e1;padding-bottom:3em;padding-left:0;padding-right:0;min-height:19em;position:relative}.post-box.post-horizontal{border-left:none;min-height:14em}.post-box .post-meta{padding-top:0.5em;padding-left:0.5em;padding-right:0.5em;margin:0;background-color:#fff;border-bottom:1px solid #eaf1f5}.post-box .post-content{padding-left:0.5em;padding-right:0.5em;padding-top:0.5em}.post-box .post-content img{max-width:100%;max-height:100%}.post-box .post-signature{margin-top:2em}.post-box .post-signature hr{height:1px;color:#eaf1f5;background-color:#eaf1f5;border:none;margin:0;width:25%}.post-box .post-footer{border-top:1px solid #cad7e1;background-color:#fff;width:100%;left:0;bottom:0;position:absolute}.post-box .post-footer .post-menu{padding-left:0}.post-box .post-footer .post-menu .btn-icon:hover{background-color:#f8f8f8}.author{text-shadow:0px 1px 0px #fff}.author.author-horizontal{min-height:9em;border-bottom:1px solid #cad7e1}.author.author-horizontal .author-box{float:left;margin-top:0.5em}.author.author-horizontal .author-box .author-avatar{margin-top:0em;margin-right:1em}.author.author-horizontal .author-box .author-online,.author.author-horizontal .author-box .author-offline{margin-top:0.5em}.author.author-horizontal .author-box .author-name{margin-top:-0.5em}.author .author-name h4{float:left;margin-bottom:0}.author .author-title h5{margin-top:0;font-weight:600;clear:both}.author .author-avatar{margin:0.5em 0}.author .author-avatar img{border-radius:0.25em;height:auto;width:8em}.author .author-online,.author .author-offline{margin-top:0.75em;margin-left:0.25em;float:left;width:0.5em;height:0.5em;border-radius:50%}.author .author-online{background:#5cb85c}.author .author-offline{background:#555}.page-panel{border-color:#cad7e1}.page-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.page-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.page-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.page-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.page-panel .panel-heading{font-weight:bold}.page-panel .page-meta{font-weight:bold;padding-top:0.5em;height:2.5em;background-color:#eaf1f5;border-bottom:1px solid #cad7e1}.page-panel .page-body{padding:0}.page-panel .page-body>:not(.page-meta){padding-top:0.5em}.page-panel .page-body img{max-width:100%;max-height:100%}.page-panel .page-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.page-panel .page-row:not(:last-child){border-bottom:1px solid #cad7e1}.page-panel .page-row.hover:hover{background-color:#f8f8f8}.page-panel .row>.page-row:not(:last-child){border-bottom:1px solid #cad7e1}.profile-sidebar{padding:7px 0}.profile-sidebar ul li:last-child{border-bottom:none}.profile-sidebar ul li a{color:#555;font-size:14px;font-weight:400;border-left:2px solid transparent}.profile-sidebar ul li a:hover,.profile-sidebar ul li a:visited{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.profile-sidebar ul li a i{margin-right:8px;font-size:14px}.profile-sidebar ul li.active a{background-color:#e8ecf1;border-right:2px solid #08c;border-left:2px solid #08c}.page-body.profile-body{background-color:#e8ecf1}.profile-content{background-color:#fff;border-left:1px solid #cad7e1;min-height:32.25em}.profile-content .topic-head{font-weight:normal}.profile-content .topic-created{font-size:0.75em;padding-bottom:0.75em}.profile-picture{text-align:center}.profile-picture img{float:none;margin:0 auto;width:50%;height:50%;-webkit-border-radius:50% !important;-moz-border-radius:50% !important;border-radius:50% !important}.profile-sidebar-stats{text-shadow:0 1px 0 #fff}.profile-groupname,.profile-online,.profile-location,.profile-posts,.profile-date,.profile-buttons{text-align:center;margin-top:0.2em}.profile-groupname{text-align:center;margin-top:0.75em;color:#08c;font-size:1.2em;font-weight:600}.profile-buttons{text-align:center;margin-top:10px;margin-bottom:15px}.profile-buttons .btn{text-shadow:none;text-transform:uppercase;font-size:11px;font-weight:700;padding:6px 15px;margin-right:5px}.conversation-panel{border-color:#cad7e1;margin-bottom:0}.conversation-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.conversation-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.conversation-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.conversation-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.conversation-panel .panel-heading{font-weight:bold}.conversation-panel .conversation-body{padding:0}.conversation-panel .conversation-row{margin:0;padding-top:0.5em;padding-bottom:0.5em}.conversation-panel .conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-row.hover:hover{background-color:#f8f8f8}.conversation-panel .conversation-body .row>.conversation-row:not(:last-child){border-bottom:1px solid #cad7e1}.conversation-panel .conversation-message{min-height:16em;padding:0.5em;border:1px solid #cad7e1;border-radius:5px}.conversation-panel .conversation-message .message-content{padding-top:0.5em}.conversation-panel .conversation-message .message-footer{width:100%;bottom:0;position:absolute}.conversation-panel .conversation-message .message-footer .right{margin-right:46px;float:right}.conversation-panel .conversation-message .message-footer .left{float:left}@media (min-width: 992px){.conversation-panel .arrow:after,.conversation-panel .arrow:before{content:"";position:absolute;width:0;height:0;border:solid transparent}.conversation-panel .arrow.left:after,.conversation-panel .arrow.left:before{border-left:0}.conversation-panel .arrow.left:before{left:0px;top:40px;border-right-color:inherit;border-width:16px}.conversation-panel .arrow.left:after{left:1px;top:41px;border-right-color:#FFFFFF;border-width:15px}.conversation-panel .arrow.right:before{right:-16px;top:40px;border-left-color:inherit;border-width:16px}.conversation-panel .arrow.right:after{right:-14px;top:41px;border-left-color:#FFFFFF;border-width:15px}}.conversation-reply{padding-top:2em}.management-panel{border-color:#cad7e1}.management-panel>.panel-heading{color:#555;background-color:#f5f5f5;border-color:#cad7e1}.management-panel>.panel-heading+.panel-collapse>.panel-body{border-top-color:#cad7e1}.management-panel>.panel-heading .badge{color:#f5f5f5;background-color:#555}.management-panel>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#cad7e1}.management-panel .search-form{display:none;padding:15px}.management-panel .management-head{background-color:#337ab7}.management-panel .management-body{padding:0}.panel.settings-panel{border:none;margin-bottom:0}.panel.settings-panel .settings-head{background-color:#f8f8f8;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-body{padding:0}.panel.settings-panel .settings-body .settings-form{padding-top:10px}.panel.settings-panel .settings-meta{background-color:#eaf1f5;margin:0;padding:5px 0 5px 0;border-bottom:1px solid #cad7e1}.panel.settings-panel .settings-meta .meta-item{font-weight:bold}.panel.settings-panel .settings-content>.category-panel{border-left:none;border-right:none;border-bottom:none;margin-bottom:0}.panel.settings-panel .settings-content>.category-panel:first-child{border-top:none}.panel.settings-panel .settings-content>.category-panel:last-child{border-bottom:1px solid #cad7e1;margin-bottom:1em}.panel.settings-panel .settings-row{padding:5px 0 5px 0;margin:0}.panel.settings-panel .settings-row:last-child{padding-bottom:10px;border-bottom:none !important}.panel.settings-panel .settings-row.hover:hover{background-color:#f8f8f8}.panel.settings-panel .settings-row .btn-icon{padding:0 6px}.panel.settings-panel .settings-footer{padding-top:5px;padding-left:5px;padding-bottom:0px}.panel.settings-panel .settings-footer .pagination{margin:0}.with-left-border{border-left:1px solid #cad7e1}.with-border-bottom{border-bottom:1px solid #cad7e1}.stats{margin-top:15px;margin-bottom:15px}.stats .stats-widget{text-align:center;padding-top:20px;padding-bottom:20px;border:1px solid #cad7e1}.stats .stats-widget .icon{display:block;font-size:96px;line-height:96px;margin-bottom:10px;text-align:center}.stats .stats-widget var{display:block;height:64px;font-size:64px;line-height:64px;font-style:normal}.stats .stats-widget label{font-size:17px}.stats .stats-widget .options{margin-top:10px}.stats .stats-heading{font-size:1.25em;font-weight:bold;margin:0;border-bottom:1px solid #cad7e1}.stats .stats-row{margin:0 0 15px 0;padding-bottom:15px}.stats .stats-row .stats-item{margin:0;padding-top:5px}.stats .stats-row:last-child{border:none}.alert-message{margin:0;padding:20px;border-radius:5px;border:1px solid #3C763D;border-left:3px solid #eee}.alert-message h4{margin-top:0;margin-bottom:5px}.alert-message p:last-child{margin-bottom:0}.alert-message code{background-color:#fff;border-radius:3px}.alert-message.alert-message-success{background-color:#F4FDF0;border-color:#3C763D}.alert-message.alert-message-success h4{color:#3C763D}.alert-message.alert-message-danger{background-color:#fdf7f7;border-color:#d9534f}.alert-message.alert-message-danger h4{color:#d9534f}.alert-message.alert-message-warning{background-color:#fcf8f2;border-color:#f0ad4e}.alert-message.alert-message-warning h4{color:#f0ad4e}.alert-message.alert-message-info{background-color:#f4f8fa;border-color:#5bc0de}.alert-message.alert-message-info h4{color:#5bc0de}.alert-message.alert-message-default{background-color:#EEE;border-color:#555}.alert-message.alert-message-default h4{color:#000}.alert-message.alert-message-notice{background-color:#FCFCDD;border-color:#BDBD89}.alert-message.alert-message-notice h4{color:#444} - -.md-editor{display:block;border:1px solid #ddd}.md-editor .md-footer,.md-editor>.md-header{display:block;padding:6px 4px;background:#f5f5f5}.md-editor>.md-header{margin:0}.md-editor>.md-preview{background:#fff;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;min-height:10px;overflow:auto}.md-editor>textarea{font-family:Menlo,Monaco,Consolas,"Courier New",monospace;font-size:14px;outline:0;margin:0;display:block;padding:0;width:100%;border:0;border-top:1px dashed #ddd;border-bottom:1px dashed #ddd;border-radius:0;box-shadow:none;background:#eee}.md-editor>textarea:focus{box-shadow:none;background:#fff}.md-editor.active{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.md-editor .md-controls{float:right;padding:3px}.md-editor .md-controls .md-control{right:5px;color:#bebebe;padding:3px 3px 3px 10px}.md-editor .md-controls .md-control:hover{color:#333}.md-editor.md-fullscreen-mode{width:100%;height:100%;position:fixed;top:0;left:0;z-index:99999;padding:60px 30px 15px;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-footer{display:none}.md-editor.md-fullscreen-mode .md-input,.md-editor.md-fullscreen-mode .md-preview{margin:0 auto!important;height:100%!important;font-size:20px!important;padding:20px!important;color:#999;line-height:1.6em!important;resize:none!important;box-shadow:none!important;background:#fff!important;border:0!important}.md-editor.md-fullscreen-mode .md-preview{color:#333;overflow:auto}.md-editor.md-fullscreen-mode .md-input:focus,.md-editor.md-fullscreen-mode .md-input:hover{color:#333;background:#fff!important}.md-editor.md-fullscreen-mode .md-header{background:0 0;text-align:center;position:fixed;width:100%;top:20px}.md-editor.md-fullscreen-mode .btn-group{float:none}.md-editor.md-fullscreen-mode .btn{border:0;background:0 0;color:#b3b3b3}.md-editor.md-fullscreen-mode .btn.active,.md-editor.md-fullscreen-mode .btn:active,.md-editor.md-fullscreen-mode .btn:focus,.md-editor.md-fullscreen-mode .btn:hover{box-shadow:none;color:#333}.md-editor.md-fullscreen-mode .md-fullscreen-controls{position:absolute;top:20px;right:20px;text-align:right;z-index:1002;display:block}.md-editor.md-fullscreen-mode .md-fullscreen-controls a{color:#b3b3b3;clear:right;margin:10px;width:30px;height:30px;text-align:center}.md-editor.md-fullscreen-mode .md-fullscreen-controls a:hover{color:#333;text-decoration:none}.md-editor.md-fullscreen-mode .md-editor{height:100%!important;position:relative}.md-editor .md-fullscreen-controls{display:none}.md-nooverflow{overflow:hidden;position:fixed;width:100%} \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/.gitkeep b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/.gitkeep deleted file mode 100644 index 8d1c8b69..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/flaskbb.png b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/emoji/flaskbb.png deleted file mode 100644 index 9846b80c1d252e334a7523bd89381dcd47911413..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11014 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 Jua)cZ{0d({uNnXV diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/FontAwesome.otf b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/FontAwesome.otf deleted file mode 100644 index 3ed7f8b48ad9bfab52eb03822fefcd6b77d2e680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 109688 zcmbTd2UrtX7chK>kV%+HLQ519Cc)kdB`Egp?qXe8yCNkJq?&}@t3UuLLAsz|SFEdR zdzbC5ZeQH~y6xTKuG`g{aD)4wNp#EiJAef7F&ffa$-&%ph2aK9ruDKd4%)apJ& zwfi9Ca!;>|j1hkR#?Oe_CxPc7dZ=(0Fv)Pg1nx)clT4WzM~CIYy&fUA>q(KBsV?bj z5TcGuhv#&1WRh-N=6xFOXCmaPNlh`DU|#V2#76k_r;w`vQ4}RvmXd5*n4vSKB7XgOMm!qHX~fpkcZlF%-ch4N4lszFVt z9d)DQ=nQ%e^`n>3b@U$k41I@wMGw#rg(z1_OnFcWN=0d?QPcz~n3_jDL4{KhR3ep1 z^%eC4^)vMcg{g-wjLR?=mCHDnV3)Zr%Uzy! z+2j)IlH!u(QtqG5F`i{ zEEcR5tQSNJQUuw8N?8K=_sL zci|B2LQ7~lt)?f?)9GM(F1>_aLvN(F(vkE|I*l%(%jjy_LbuXA^l|zU{R;gC{UQB1 z{T=-i{TuyIM2lpi;UZ2nUNl)0C<+lR7i|*hMOmT}QLSjNs9SVcbW(Iq^t|Y%=$7aU z(RZSsM8AvdVu@HK9wQDAhlpp3=ZTk!SBjqzM~f50DdJ4=ZgG>iReV5vM0`SgQT(F# zruc2~r{ZtKe~4{vA~zp5wcBVnt=n?9^=@%)iEgQG>28H?6>jZrC)`fEU2=Qg?M=6j z+`e%8!R?;g5JNF67*+v8sC5@HtlqO3J(sXIIG+$aQEtghFYo$%nR%xenzx1H=sPv@t zjPzOQCFwQk3({AluS?&QzAL>Y{aE^6>6g-Pq<5r0Nq>{xm)fL5GD;?txyht5PnkmI zE8}D%WMgC#WK(1TGOa9BHdnS#wp8|%Y?bV3*?QS#*>+i!ELOHtmMk;K(q-AQd|9!q zTvjEkl{Lur%GzZ6WCvu2WXEKEva_-avdgmn$X=AaD!Uf7bn~ zd%ye3?$_PlcK^Wr6ZhNhU%7wl{)79^?!UV~a36Gk=;7i)doUg{4=;~l9!d|j$4HN{ z9uqyLdIWkzdL+grMjDMtX~y_yqb|}At=A=|>k?B^b)cLLCZj3Rz@HJiq*PN@no(zn zjZaK6=_3*&4RJb?o-f54O(_WmT~bQAE;}V9DIz}EaY;!trNqV>I?zQ#CYns~NjgJHWK2v-Msgxt`MSsDv{b$(J~=8SGc_?XD{y2a_`DBMmyBS9Ai8dZS5~8W9y4osbb} zh>48^u>4p^N>pd=*Um|5ow`~lg3ezfJ6ti zBMpX>3@2(GB_}!^#k5rCL!Ph>Ebxo~Oc9^0i-=82Ong){CPgMD>N2AfBa{EoxML6F6W)&siWDWH+%e2&JNQ+9YiMpp8${Z_=_A9DEEce4(&>RR5f0vPlz35e6w*>17yg}{{1ovwL;b75(e__8 zKv4$=K5D^t5to<}rOPmYJc39Y6O5q504Y(1cwKCCq*2E+os+YZQ%t&DX(08MJTy2iyqS!jKl70JMThfzLXxQ@XI6W zUlk5~{i`M|^iqT=WjY%+g zEa>LsB%MAE3}tF$3@9H5iFrfp=!m~MfH_J4eE>Wa5jZ3CAG+KKTxS50i%&Hf)1sV(h`^aascG5SJZ|E3 zK*M;xAKoYUyTrQ%Mt!_4G3K#qcaG1Sg9y-czzb>dM!gQ~Of(1_EJ34VK@-* zvG`|&Q#$@x^S4QGwBX68Hzg%%qm9NOU@p*NP94XiidSn!FhIbkAph~kh`$ZMUsaDy zL`2Z^AcsH1cMC>?pWt5>nD5M~avgPvI*>`w|IVvJx_MW@!NCsA>X=$kK%mor@^>JW zAbB7@PGUd4MgZeQ1O?2{r5WO)z$Spa73>i_TXkMWH5-NvAh~g;>`Zo&n zN>E_vUv(zXVo_-(P>H+(;i3Mj;b;H2)}i(Ob;Cc62nq^@Q=0{5DlJOqc#%itOrRQn z{<9ABU1U}a&>wtA;5ES2BP|l247YKH$fQ_s>Jq@GN{$Vf5fBv*l;9ES=)(k>DAC~j zbyOs#K<|G$9sjuH70_SLc;5KOty82^fd(1i>!oBEL7WUJ@iD;9X_+yA3(z6PgsfE1 zOKAopm<`^N1JzSvK^yX#9TX^-e&CC=t z$14H@J2fTL1UqN@*pdPM_{qV8keC!OtB(vEkJcG8)4}ls_slVYh@hF%oup|*5ka8<8X5#;01XAuPyh`D&`=!>U2 zdRYw6fdCx{(18FQ2+)B59SG2Y038Uu20^bu02c&sK>!!zoWK%i4@&|Z9WCJ>LW3Y@ z_e-?S+7RajdJBe@!7xHFj1UYX1oL&!AlTVpDGZ{8LA2117C^NCss&IjfNB9$3!qw< zObEb*09**bg#cWLb27{LY5)zH5gQQ8R|Dt_sG9+xGXQi3)Xjh{XF!)TLI5TjuF&NS zfSU<$GXV~077R2C2ATx}&4Phu!9cTMpjq%tfC~kxwOz&3*^!QxwJqoEs#qK}(C@m053xv`Fp|l|U+8}@n0=OW6 z1Nvx#04^Bdf&nfV;D9VzAd42rq6M;Ofh<}ei#8bGv;YS*(E?4hKoc#{L<=<00!_3) z6D`n03pCLJO|(E0Ezm>@G|`3tTnNAcL9`(N7Xol0p|OD>)8PcT8G&#GI3S1?2%?<< za5Df72%-goXn`PFAcz(Sq6LCzfgoBSh!zN<1%haSAX*@Z76_sRf@pytS|Erv6yQLD zv>-uRkRWa7%-BFs!60mbGabwt2)%{?Swes;Ax=38oax}yK z2OWk8sF?DmhEt2Fa%vCNNHtUK)PCw9b(%U)Jx5)o`l%18PpQu#*7=Kz0OFi77cZCL zF8(fKTqd}z6u1c71p$H(!CXOvAXbnh*d<646bs4)HG+CUpWp?-tAckSc6mqev*3Y% z2>x^xxaLBfvI3%%9T2BH>Uz@kyz6tW{X%cyEa5!iBH=RO(-4zP6kZp;C;UkGnecmh z97G#u(DUfU5M{hb_tUS_@6sR9UqUo-vuHa+4=tikMPG;~h_&Kb5FuPFUM>z3uMvlf zH;K22d&JL)Ul8AMle_u3jdh#i7T`9^ZK>N@w`bh8x<$F^-ICmnx}9_zfH>f7x3AoO zgh-&x5exKWhCwV)!%Sc%Gqafm%yNkRWib^@J9C0L%e={a0CB$utQ+ge`miI|@$7VV z3#(&yv90WW_Aq;#J;Q#;{>c6zagorHVG@mGkz|?VX~`Bzyd+s-lw?TqC8d&H$py)E z$$;dxm zA)1xxo(EAZK8Dri-sOG)qE>IXf9Z}rq!5*w;t}dG&ts{_lOC%))_LeX@;n+m4tt#N zxaRS$$A=!DdHm1gj>qqwLQfx0jpumJ>7JpU^E?-OuJByvxxq8WGr=>@bB||}=RVIK z&-0$Icz)pdo#!u}_dIQ$LtauZ&TEXN zd!u)Rx6V7++vuI;UF==qZSmgkec1cF_jBIQd%x=ahW9((x4b{`{@nXVZ!D+eBDuHR zSMDz#BcCDhom2Z_t$`j-Ud7ivfUMaW8TjZVc1M9IF_#Br*>zqK6hg z*M3DhXR{1T=dALZZ*fHaBb~y8UE=KWAF+floa8nziOhLUG>&1h9PeYWT#(3M8S^7O zjq@8^aFnC%G+s)&@kTOCP2h*Xjh$9bqOvqBjKYtb}95mYdN+r`G}s?GdKhEfSS$9Yv))|9#D?Q zDc>|JueB4JiaJ|cJJncDceVnqvD|e#$F>ngYetQ_q_e2Apj~X~diIx2WldFWMUA?l z!2d?Ms;n|TJ}D+8#%j-sNfBFX5sq6I(atIGYu$_g|Ul~om$%Is&yS~AoHIYn6| zS>lXJqR7it5`R%HR^)Y6sv9$#vYT_n#Tk)fvz3+A6}6S>(&h(Yb*h#RerapcG*!XT z)KuLh8J*ko!MGMx-GiGA&6?Vp>Y7?*XXG!%UFzocrjEva;;tI3Xl+xnQyD*7VJPEA z7fyk zMfEWH1cnV~un+wbgZ;K(&$&OTaRY7?8X0@IAMu~eD0m{ONw|~2N%#QA7BYJ{o#5a{@vUA&Z z%&E=#|7|*;HZQ&ML6zG4VcD~b)Nc_6yPmw*)o`ur#QrWZnZJ)Le-mF;etz_wtNrSd zu3aCWzb}5H3y&LbR(4!})AEMujW>(4uWQVB+|M^N)X$FCHMb-~e0BZNWiyoI3VGrw zGCxy&*x0je@n|zU6C~PoCc`SGGHlS|#hB&Z|5{@k5S75BvVj{nFn(fmo*U1F0ek9? zB(qaF3{u0=ksSLy2oRnQD7%W?YWFnO*H`=Ecj>w+OIhviE5yymYD!qkk=N;^c((9r z#_DtHRb+r(zdCwzhGr?5EhMiWz|jW)QEr9D9R-9kHii7C&-CghhD79ftjaQ`^I>;Vs-RjK&^r56@!; zDL# z1Py^l!0bR|fwKpJvlAJfvGFqEj;E1D=hcVKw_dr5b&Y)4GCB@mIRVTN?gsT2M6faIE`!ugU^d_48sO9#4?#c_K0b-vv~paP^!T!!1;k7oQ<7sMzJ0A>Mb%f?hG+$gJP7V|`w2eqDi@bjE<{ zjV0kqdj?rROk_OqR2v)8nlsd7718DwR%PtX^Zk6%-n{Ormc71yqBVZ>dbWruDl`}E z;@GU#yiWDac^oUOuis;7RI-NNXtTkd?90YB@lx)MJh*{0j`#Cm(vxhGLlf`N9Xfm37LB3eR zV4BdYIQ#`1P3-~g(1BCah@3F@p>gkH?+Kdn zhT=WN)#Bpfin3A-;fT7huqv}D-pVWG@TnnyQ22`XCHT#(a{tzz%P zez<)=@hxZ^o<b9-rrip|ai zv%$W*_LZfekSlOMt6mXHxGLQ$aj_`7CaXGI{p+utzpC&k?4Py=kJOy37S@2}vM4($ zIx5@MbNd47=bsg)-D>{qBPFZY4?|*>vBz3teXt+1X_L=A#>&|_AN(A1kMX^>2{W7( z9tv5}42Q!c;MgGUN7hkqovBTMZTfsGw$8QElm- zvidUH=Aq3#y@oDJpOWpsX+Wa^JOH9y%ZqlpIUOWk0X~fh=>0K+;UZe-unEwKiDuit zPvV_b_V(@DGp{r3+Z?gLj0y@$bF!5ng=$>PUEr{soy7fH9a!gphY7B03&YN0us2xb z(+)(hW!ONVaXjENjlsMb#fwObFtfR`7-lIF4^0LY_>0!dGvdp|}mHi%_ zRn*#9uVE+7`Q$Dh!C4wgi|4%Y)F=FvfWp_5jQ`0ZxHj6B($9 z0qlU&xx1`PvuV>3;5h3qNeuzk*=R20IXp+d)(S|G_MNicwpG zMSZNWGt1CqP#FwGSy>vkfb*TnlJnpUDN+EP?qh!??rcYCdqFcRtY~bkY*g*tTU%$* zbTl=$*Y3lXXvSwxZ&6Qro0xZEEmOhZtOiod|?_V!HS9}G|AZ@$5^Ip~_j;dm93 z2oJ$ku!4%`wYx^P2$0xM2f@;20kAeK5M+~ySE6R5eTFcFCLZI)5f9J>qd`jiT)zM# z0fy6z>quQRL+Wsy_X0nmE33jv4qs-lncczDQZWg*qZ7;~IKJ!&tb%u005ysMoZQe= z-B#P|TiYevLzh*TRhOunx4uu3g+me+2Yohecdf=!Se;W+uzs#jc}a0OxW84!drBL` zX7&m!H~R5XPIfTofT>AsY)UE5%49|0jf)PgezN&V6`@GnMlu4dYurW*$yhkFads!PB{A0Pe+CDK62~}R28rTu+ZWcQczsNT-&q?$kqW& z%?=fq2Q7j@3+rbsOavzI8${rD@zMmybBNOrNM%{s?y`zfU$!N`%iPl9%Ld_7T+m{+ zx7U2m&r>O>WbL)+i85;aLc|%cH zSzJ=6T1FS|Zm`s|fugRg=3S}E$7b|U^TDo8_5Vbyrm3K?AxA|nttY>bbTZ??Bpj@< zJ)~Li8)cxl!BT~DV6x_MvR;EZ8k`0LTzU;Gn2>%JpJaf*d+I@$EDa472Oce0?lglf z3|zfG0_q$%a7g_tedvHGRl}N@eITIt5?7Bqxw3+04PS16aw%UHW@Qx_3`!7*&MY+x z(q>}G5^xGelO-%~IlxM>p93ce4;*McaZ*@>oe3t_~u;0uc;F>HgmzN$f^wN~Ii@dIH?OG`(mQZ}H&Y(RjHu!|O*A?!Eb zoWbmXn%$L_wrf|~{)2cn=HQrpaDUn^=oZvy3+PbZ9uSjV&WbiWG;kXi=HP>Zf}Aqk z$JI9%z^hG!xt`2BVd_z{N?5hx9bjZZgUH#ld4b>T5j zP2P6>{aY7be)rS2fNTcQK!^JUfDNhvg58&x6pP2kt!%H`Y14K4zN^lpoIQ zWJP?7?6RDK0`M}j@?e$CiX47ZqouaKo+W^7wt-WySWe_@BI63mC>q=_5!+b5w?VVF z!_wK@A^zY62;G397cG5d?YpotgUN~F52c<|V?>`kbm$~-=Pu4>$p>xTq{0D34BO4? zy_;ALQ70@P&R*aZ0I{&J;Lx+ti~=xW0$Yb32qN)u5?GxBZdiy* zjp7#+@K)eT*h~uW5f#MUD#Y$I>nAGYX}XPk> zJOB&jbquHzRz-XWg2P9{s(~C}mqnEzX%jYF?2FPIjW_LMaV;YgHaEAk{F(>`q5D|K zU`7aj{So9lqY{Lw5F|aLR)h{x=oq4Q|LL;(Pr+`zOFE=!1L$PP5=W2Nw8^&;vJqP|Bie#m7Sa=D3I?jnI23DS|^5)up{R~2%NL9VBfD?!3k zBs_Rjd2B@<5y;~(@~lLj&B%*FUV7vmgyddG-hvc6(6AY3STq_|j)t8@ z!(K+ien!JJX!trbyc!Mv4*A3(p99F}BJvGJzW0&xKS;G5sh&lu8%Xs9;uFn-kl!=N zZ#(kajr_Wh-#O&>72^C6w;pj-h&zeYPa<_a(#VizCDQzi{GUYrxyb)E8ZjS@IEqHf z(8we-@_jV&D>U*R8l^|0hojN|L1TuYF{jbkXVJJ>XxwjT{6#cjBbsm)O{CDog=k_P znlu$nI*2B{h$fFklVj23A~g9WG-V5#l7Ob%MpMhswC~Y$cQl=#zzHaDE(+{LfnTDa zO(^JP6wIRF(TPp(DEVlL@;`y0zD~5PYy#* z`k*J3=*hQHm=J}nKw;fz z#ib#=3(`xFJ{!d^Me${5=SZ}3G}<{9?c9ZSUPU_xP{JydI2|Qcqoma+X(vj0A0;n9 z$*-dnIZDYusdBVy7}^zvc2%KWw~=8wGUOrSCS=@?Oo7N$j7(K1Efl5oqjWEnz6_;j zp!BmS{SL~Qk21 z^F?JdP?;5#UqTi4k$E06-$vCHsAejvIfH6dsP;=#`zP8n9o5Z7^>a~u1FHWPH3XoB zT-5LyYV<;lpCHR{)Z~F$7oxT()IJKe|A;y!qK>nu<38$~hW1TD`_7|%zo4#8)V&8C z@I?pqqMk*lrvdexLOuUOy~9!O7}Wa$I=CJk+=mX{L5Ds?hp(U`v(eF==;$Zt*wg6v z2z0y=9sdKJ_y(Q4i24?xzT4=OJ33`Sr^lhQ^U*myI)4jYIEgNfMi;N6=Q#A-Ep$nV zF4d#Uv(Oa}bmeVy^*p*(i~duF{_{3^ejIwf9Q8+{{)6bHHRz>E^s)`TvIo8Djb6=0 zubxJ)wW8}0==$^M^5p^wz)qy6aPH_#`$(5KVUrw7qza`c%E{Wl8TzKTAN zMqeyPU)(}pUO`_SLtkG--_1nd+t5$j(9h4IUmMV`pP=8iqu-j)@AJ?fv(O(epnG%B zy{{2`S95B;S&h|fUK_}n-L8@f$Sd0{sS7?f*!6y5Bn(UFh%`Ixtyc~ zCn(oQik4Dz2PMj;M9)%UFG_rxa%-TNBNTg-l1!!~Hz=uwl5VG@Z&K1BN@k+m=TROb zDUS~* DW6XoSgc`c{Bc2QnN$}5fXI!bvjq~rmVyp~e9QHnuo*g|SpJ2mWO*ej-n zo2lV#l-i9_CsUe*lx8obIYDV&pfn#)nlCB;Aj-d&8c|7&{0}wq4{FpZYV;OrG@-^U zqsIJ3jpeAZPg7&}P-CB^#!=LGh8q7qHE}jINli_Tqo%}CQ*Tn!%BktYsOh_@>EBQR zE2$tc74#MrTtsPIDD7Qp#v*FQ5H<5TDm0s#RZ7izjhelYn)@v^Z-AP=nwlR=&A&p; ze?TozQVSBO1z%7L&D6p-sYQX*qEu?p%hcj6)Zzka$zp2hBx>ntYUu-N+3VEuVbt>7 z)Ds)2C%UO8zoVYoM?H0cdg@*3sb8ru2^CgDtth8fK1Hp(POTb6t*W6`?V(oHQ>z-O zRZY~YW@=R{wW^(3)k&@D8u}B02d>s|>?(jYgR8<%=x+^&P^vv#1a69}!WJCO3xCa$v!egh+h*OfX%=G zhP);M$SJG(=A`Ra`Gye}{i^Oc*Y&=5ADIe}Q&;KJ=k%@ey-8g9R(+Cwy$>GXDMIoZ z&gGyFfSPh$|4Db>b>ExVrSE$BC#(8=Wf#G{ww;G~lRX$*y>{4~Y2)m{_F!j#2DbVj zcw~k9)3BDF&sYISw1Sfj6*wFiTR1+U*q_yzrY5CyT2@w?hLnoZI0t#Hda_vdzgnm}5V!3= z-};>Dvw=IsMM7C)GdnW5ob|S}E)P z$MM&D`H=-v81Sm*GyGEsd;`+y9zWqS#nqLTST%%{=-8FTo0AVDcV%ec`xuFE$O4Xg z4L2yKpMw>p%|hGYyBT3u*MTEPlrpOYpWtH$(Lg?b1;4daR9sb242~Xz)uQuLVk4Cg zx7_D!n?x{Fk>m8c^l`@z@_V)=;FgQJjR(?tGhpT7 z0+BLTtRZ6YiVwb@_lK$)KCb%X`;TsXpurj}hIN-KEOT6XyAJH{?hy}JM1!YXLqdt* zsf}u)97&WTi0=sTj`fqKEmc*~RrJzH-(6U*A-?yC68`Ur1KxZ3XG|-XGHM*bohgej zz%J$K+x#qO*lh~ZJRHC}Mz$5UXNVkva!e}&gi9sc8cQ`cSNqSfWNR;LSHb)Aae_W> zP^vhZ&}`hJwpR_1H0u`OzT)itCRH3`eTEbYOPgEETUAGzdk*3N&e6ipb(i&s;(dFl zU5dBZWn{~MHI%%HuUTikj@Mef@LIcR%dm|Z+HHm-4IYKa+2s_#k=z!gAbQgzc$iSedVgvUYrAl_aktz%WY5xD^+~e6An%{)uL+K!D>o4r+hwv_}U?6VK19or@zz$fc zLeqbD)WG3-K2ZIrF$7W}#{hbLn)$ze-1z{^9R2C_W+IxsDiQnHIAbPsQ>4{j|b&t>NpStTjXCr48NWu ze7yTnY6Tw+7dcZb_=q^&#;76Hf{%#f4j|w0xv-J1`CBX}%qon0ddIrvSuaJ3@vsRWkO?G22|H7Lgx@s5As^rgc-T+s zm!56@Y{yHHFVEil^bRrEK*oYOFp=F#yoP(cGo>B^_EPZMB1_kke;{BByAhK%%2 zZcA!TZ1PRPD})`DIW1W#Vt^P$LC$VX&g!zKN>?QoCFUpR67>V0`VzijJW-LcJB=DX zYG14@-cwRvsy@B_)b^8Ga+30siW11G6rbFRf-J~iFo+;)p`${L!%~~#TX%LO_{MLI zjfmeSE-$Tswk0(sb*1WO*S@>5e~TDmT)QnQ3j{qxF(v zZ%bu&{$7%TpYpLzPUOf25vjmCBKww`BlW&R(e@wn3oFz2=KH?Bu&%6ecVm^WrK+*E zq0aV%^_GwA3HvQ!d3{4=V|BH;TGd$HxTmiE^;v`DEfnbhc zP(EmS3oQAMict)naLrHTCm8(EdRmcFom-HrA{BIQZgYFJW{;=`cAAcGcoja#^pFAJ zZjsGwk5im0JePY)ZPyMS5%w0P?oU;b?*O2UgbTB(^Yef~X3<&st)11HHrRkT!jbRj z)YLRXk;bllctn^RR~Q|wOm2)gqqc?9*$@w^)^q`f!!W(jOBdMCtm-`2w}Gc;8ZRCJ zA#LD}aG=q`FLU-7npa7}xY#Wj8&w;(be)RT5Eb?l+I7$KtUsS2AA?OgP-JS~r6Lw< zIE}|Znh3Fou!XUP+rxeSfQvPJUuWInq8?uvF5?F8S?|5c;d_Aed!T^--_x4#OorUE z4uo)g!{2S=6?M%OEyYbBjRQWg4_jNJDk*VnLcdSm7nYUs0jqHk6%Qx(24DyrE^29R zY_8Lg->uyt9EfKl@YH0$8(4tJ7%uP7HFeeXHFa2TE%mW&q_N&!T2o$KR#WbaHzg@f z753+yRFh)sRpE)e=!1F{#Fq5YyLRSjNU{B@FfYDveVo#sjyG_xg1^&klPeAsbZ6{U z+t1^H%w~f*qtG{_pdj6(1odKSPVXvEmpARL*voG+)i-H?JqCnbdz-rtD6xFlD44fp zcr>Iuaer{INu=<>z7Tz1_X*jgvd<CK!jVx0^8k*;|ucv7E(EMR$Do`~TPLX%v%N(DsCImJZiPz4< z8&nWMd=8uOgD*6&iC;?ISO;30QAy$%+WZlPPqslIX%$q8LwVFyZpI+6P3)@#) z=(Z+HYn`U!T=SWpvtm5?dmQ>5UZ#QpJU0jZpy4N-=a@4e`34OETqzfTWw_J4_y~a8yA^GvNjY=3D?{0=e|ew%(|-Cbb`tIr0nrTz?mx zJI~F))dVf;4Zm854V7sDeJ~paLe}$Jx{h z>omJ3{>8ol4o~uneHx*MI#LWIls^g+k=C}y6KYxa)BO1K& zMAuc}xu3i4V@fG|SYWnU1mMfs{{-VMhmute`uLYsKTSEU-cwRsU82$_r^IRIV{tc; z!XfUSuZ%mA(${FI-qWbQbLRTpU*MhiwvP|_7yrLHfh~O;L1cI>S@Q`#z@@Zj9w^Wp z%IhuY$rAs(_!T08tv(`KOGM)rtBqNPg48^*sURmaMH$1LYP8hUHmWf+g!VW>$@ldd z3B$)oAC^LA$!$43d79Re_VTup!?}mE4`zyCNhQ5Y){z}bvST7#;a0sXGbKAEH@76G zJg-D-%*)M5R?cE9&c6AMphNr`Z}=*C*Y>YtI9MqKZs+JhxhsFM0Wuu-4=oS96;^L> zhP_4L7dI*Z5O!j$@?p-xkepZ)L%{YnNG&OH_Q88G3IfXt+FJtQYnvQ4+xZ(Gh|=2u zl=k-H(+y~EJI(|*haR%v66R4KHVf#oM`dt`ZX7#);~4fj_QUHx96Jujof~&<@PEf{ z{BQ?uZw$XN%$nd#bxMc)2uB*&PDlgm?lSLJ-KbU+a)m|a!d+am#k^N_CzspX#yigCz&>*~?4{%~2Oc$Gpe59JJG*>$ zwx+t4c%LdET;xjM9Fs9)cV08b6$7vbOx zJOsW}*x-i*^T7=q%x6GZ!roDVu-5E8Rj3*1v=oTGauNn%5sL1&+ z(a7N7ks5pOR#;0A2#E|rNCeh`{Hj8RCo+TKwtJ8-?aZ1ckVs7+k@|5$HHLbqfn{j8 zHCO?p+X$Y^n})eBELGVp^wPP{JZaEu1n&l(z`il$+2QewI+3B*a2kjmT;PTv-?ebE zW2rgZ7C)#{co)7$##|@Uo+p#VRhgMpnX2*QYpcg=?9UI4QrvjGcJB>MO>0+uD})W) zGO$=xZK<|clwIb1Rr}OWHByNs-+iNzjuYTuV_5J(Gro$J^M^%tmr7R&6zt@~t-}ux@C8S`DpH4EjY-!mSq0Y1AE4;g_ z4w(6)zq-F)GRC|A*OFgP=8ScTlov0fE8B`8Ml^1#l=?F$7$?m9!eDrco}}O z9WVd->$0y^_!52-cKYt(STYxI@bm>(Vcf)iZ{g)i+(K$FBI#=H?(N&Ex2s4IDbC(a ziZy#?3cdSJ?8f6t+mgjSTPq)~NmD*iH%h-oy>i!6Rbe@mQ+yys21z8tiI;2L*I%{$ zPvu?s_B&No?`W!Cel_#u{oS?uRgEX=Pt=@P*|f4@RclqJ&+cch;w?>A`f<}u+i!qrJ~XiRou0-c4M+DJ6_QxssN2=8sj2M2bC|Pz_-RI{OEp=dA%H_KUQ)dnH!-k+ zVXd9GUhtWpumFaAt*#nxyL?RC-h&JFKl^ytw(L?;5S3e(o2LwFuqPST!GIx^IHU^C zP;U@b;mOWXeOtlmjV#6Ps-`Q|6^)v`{Ccpsy0RCBKXVF(&(BKFORM&^kWSKFMmk}9 zKi6hI;;Y!!?w_T3XrVjXA8gYTU&5xRs&fkpvon+#d$ZdL)ai%7PiFg6mvSC-Y6dNI zR*wIrKJ1Ix?nCOf=Di(V%C5qW+-7xmDuGJ9N|ptd6OZFVH=z)>nZjpJ!rdU;MMIAA zqi2w@Tn#x8k6<6lLzzL?UxziRMPYKn3_+bu&VyJju8`#XxI5?FQ*+U&{Uc z;|MkgUiB7eZ~}s4F-0r*X|CTofA~n0e9)xW$l+t0nw%%+g=J+G#U;v; z+T!{$HJ|FhC-he|s^&rfjf8JxwleshEnMMDT!mZ+VSQOKESMlhV;@Lh9BGY?T1Q%= zpRn6*+Q{_s%NT_-|BK(8FM%EPvit&#eVl!)5Qjp3&rtX{(2HXsvNo2(vqaW$_Hn|i zys?CkULWtB+vE@&Sq_m92*=rjA&zaaTSzbtCIhgbCEdK;c8DT5c=R~Z2OSIWpTqpYOL;(l`zB(e?I286f^4=BL6 zlLDMC>@n_ajaS9*%rlxaWEKhK!|!+&9ALjesql1%0D}#zSrRb8FuaocFSDv)#ldj3 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 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.ttf deleted file mode 100644 index 1413fc609ab6f21774de0cb7e01360095584f65b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45404 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 G`u_lkUM?>H diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/bootstrap/glyphicons-halflings-regular.woff2 deleted file mode 100644 index 64539b54c3751a6d9adb44c8e3a45ba5a73b77f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18028 zcmV(~K+nH-Pew8T0RR9107h&84*&oF0I^&E07eM_0Rl|`00000000000000000000 z0000#Mn+Uk92y`7U;vDA2m}!b3WBL5f#qcZHUcCAhI9*rFaQJ~1&1OBl~F%;WnyLq z8)b|&?3j;$^FW}&KmNW53flIFARDZ7_Wz%hpoWaWlgHTHEHf()GI0&dMi#DFPaEt6 zCO)z0v0~C~q&0zBj^;=tv8q{$8JxX)>_`b}WQGgXi46R*CHJ}6r+;}OrvwA{_SY+o zK)H-vy{l!P`+NG*`*x6^PGgHH4!dsolgU4RKj@I8Xz~F6o?quCX&=VQ$Q{w01;M0? zKe|5r<_7CD z=eO3*x!r$aX2iFh3;}xNfx0v;SwBfGG+@Z;->HhvqfF4r__4$mU>Dl_1w;-9`~5rF~@!3;r~xP-hZvOfOx)A z#>8O3N{L{naf215f>m=bzbp7_(ssu&cx)Qo-{)!)Yz3A@Z0uZaM2yJ8#OGlzm?JO5gbrj~@)NB4@?>KE(K-$w}{};@dKY#K3+Vi64S<@!Z{(I{7l=!p9 z&kjG^P~0f46i13(w!hEDJga;*Eb z`!n|++@H8VaKG<9>VDh(y89J#=;Z$ei=GnD5TesW#|Wf)^D+9NKN4J3H5PF_t=V+Z zdeo8*h9+8&Zfc?>>1|E4B7MAx)^uy$L>szyXre7W|81fjy+RZ1>Gd}@@${~PCOXo) z$#HZd3)V3@lNGG%(3PyIbvyJTOJAWcN@Uh!FqUkx^&BuAvc)G}0~SKI`8ZZXw$*xP zum-ZdtPciTAUn$XWb6vrS=JX~f5?M%9S(=QsdYP?K%Odn0S0-Ad<-tBtS3W06I^FK z8}d2eR_n!(uK~APZ-#tl@SycxkRJ@5wmypdWV{MFtYBUY#g-Vv?5AEBj1 z`$T^tRKca*sn7gt%s@XUD-t>bij-4q-ilku9^;QJ3Mpc`HJ_EX4TGGQ-Og)`c~qm51<|gp7D@ zp#>Grssv^#A)&M8>ulnDM_5t#Al`#jaFpZ<#YJ@>!a$w@kEZ1<@PGs#L~kxOSz7jj zEhb?;W)eS}0IQQuk4~JT30>4rFJ3!b+77}>$_>v#2FFEnN^%(ls*o80pv0Q>#t#%H z@`Yy-FXQ9ULKh{Up&oA_A4B!(x^9&>i`+T|eD!&QOLVd(_avv-bFX~4^>o{%mzzrg_i~SBnr%DeE|i+^}|8?kaV(Z32{`vA^l!sp15>Z72z52FgXf z^8ZITvJ9eXBT1~iQjW|Q`Fac^ak$^N-vI^*geh5|*CdMz;n16gV_zk|Z7q8tFfCvU zJK^Pptnn0Rc~egGIAK}uv99VZm2WLPezQQ5K<`f zg{8Ll|GioPYfNheMj-7-S87=w4N0WxHP`1V6Y)0M&SkYzVrwp>yfsEF7wj&T0!}dB z)R~gGfP9pOR;GY_e0~K^^oJ-3AT+m~?Al!{>>5gNe17?OWz)$)sMH*xuQiB>FT2{i zQ>6U_8}Ay~r4li;jzG+$&?S12{)+<*k9 z<^SX#xY|jvlvTxt(m~C7{y{3g>7TX#o2q$xQO|fc<%8rE@A3=UW(o?gVg?gDV!0q6O!{MlX$6-Bu_m&0ms66 znWS&zr{O_4O&{2uCLQvA?xC5vGZ}KV1v6)#oTewgIMSnBur0PtM0&{R5t#UEy3I9) z`LVP?3f;o}sz*7g5qdTxJl^gk3>;8%SOPH@B)rmFOJ)m6?PlYa$y=RX%;}KId{m9R#2=LNwosF@OTivgMqxpRGe}5=LtAn?VVl6VWCFLD z7l#^^H8jY~42hR)OoVF#YDW(md!g(&pJ;yMj|UBAQa}UH?ED@%ci=*(q~Opn>kE2Q z_4Kgf|0kEA6ary41A;)^Ku(*nirvP!Y>{FZYBLXLP6QL~vRL+uMlZ?jWukMV*(dsn zL~~KA@jU)(UeoOz^4Gkw{fJsYQ%|UA7i79qO5=DOPBcWlv%pK!A+)*F`3WJ}t9FU3 zXhC4xMV7Z%5RjDs0=&vC4WdvD?Zi5tg4@xg8-GLUI>N$N&3aS4bHrp%3_1u9wqL)i z)XQLsI&{Hd&bQE!3m&D0vd!4D`l1$rt_{3NS?~lj#|$GN5RmvP(j3hzJOk=+0B*2v z)Bw133RMUM%wu_+$vbzOy?yk#kvR?xGsg-ipX4wKyXqd zROKp5))>tNy$HByaEHK%$mqd>-{Yoj`oSBK;w>+eZ&TVcj^DyXjo{DDbZ>vS2cCWB z(6&~GZ}kUdN(*2-nI!hvbnVy@z2E#F394OZD&Jb04}`Tgaj?MoY?1`{ejE2iud51% zQ~J0sijw(hqr_Ckbj@pm$FAVASKY(D4BS0GYPkSMqSDONRaFH+O2+jL{hIltJSJT~e)TNDr(}=Xt7|UhcU9eoXl&QZRR<9WomW%&m)FT~j zTgGd3-j}Uk%CRD;$@X)NNV9+RJbifYu>yr{FkO;p>_&njI> zyBHh_72bW;8}oGeY0gpHOxiV597j7mY<#?WMmkf5x~Kfk*re(&tG_mX<3&2cON*2u%V29tsXUv{#-ijs2>EuNH-x3) zPBpi+V6gI=wn}u164_j8xi-y(B?Au2o;UO=r6&)i5S3Mx*)*{_;u}~i4dh$`VgUS- zMG6t*?DXDYX0D2Oj31MI!HF>|aG8rjrOPnxHu4wZl;!=NGjjDoBpXf?ntrwt^dqxm zs(lE@*QB3NH)!`rH)5kks-D89g@UX&@DU9jvrsY)aI=9b4nPy3bfdX_U;#?zsan{G>DKob2LnhCJv8o}duQK)qP{7iaaf2=K`a-VNcfC582d4a z>sBJA*%S|NEazDxXcGPW_uZ&d7xG`~JB!U>U(}acUSn=FqOA~(pn^!aMXRnqiL0;? zebEZYouRv}-0r;Dq&z9>s#Rt1HL`0p4bB)A&sMyn|rE_9nh z?NO*RrjET8D4s(-`nS{MrdYtv*kyCnJKbsftG2D#ia@;42!8xd?a3P(&Y?vCf9na< zQ&Ni*1Qel&Xq{Z?=%f0SRqQt5m|Myg+8T=GDc)@^};=tM>9IDr7hdvE9-M@@<0pqv45xZTeNecbL- zWFQt4t`9>j8~X%lz}%We>Kzh_=`XO}!;4!OWH?=p*DOs#Nt({k^IvtBEL~Qafn)I^ zm*k{y7_bIs9YE}0B6%r`EIUH8US+MGY!KQA1fi-jCx9*}oz2k1nBsXp;4K<_&SN}}w<)!EylI_)v7}3&c)V;Cfuj*eJ2yc8LK=vugqTL><#65r6%#2e| zdYzZ)9Uq7)A$ol&ynM!|RDHc_7?FlWqjW>8TIHc`jExt)f5W|;D%GC#$u!%B*S%Z0 zsj&;bIU2jrt_7%$=!h4Q29n*A^^AI8R|stsW%O@?i+pN0YOU`z;TVuPy!N#~F8Z29 zzZh1`FU(q31wa>kmw{$q=MY>XBprL<1)Py~5TW4mgY%rg$S=4C^0qr+*A^T)Q)Q-U zGgRb9%MdE-&i#X3xW=I`%xDzAG95!RG9)s?v_5+qx`7NdkQ)If5}BoEp~h}XoeK>kweAMxJ8tehagx~;Nr_WP?jXa zJ&j7%Ef3w*XWf?V*nR)|IOMrX;$*$e23m?QN` zk>sC^GE=h6?*Cr~596s_QE@>Nnr?{EU+_^G=LZr#V&0fEXQ3IWtrM{=t^qJ62Sp=e zrrc>bzX^6yFV!^v7;>J9>j;`qHDQ4uc92eVe6nO@c>H=ouLQot``E~KLNqMqJ7(G+?GWO9Ol+q$w z!^kMv!n{vF?RqLnxVk{a_Ar;^sw0@=+~6!4&;SCh^utT=I zo&$CwvhNOjQpenw2`5*a6Gos6cs~*TD`8H9P4=#jOU_`%L!W;$57NjN%4 z39(61ZC#s7^tv`_4j}wMRT9rgDo*XtZwN-L;Qc$6v8kKkhmRrxSDkUAzGPgJ?}~_t zkwoGS4=6lsD`=RL|8L3O9L()N)lmEn-M15fRC{dhZ}7eYV%O-R^gsAp{q4 z!C1}_T8gy^v@SZ5R&Li5JMJy+K8iZw3LOGA0pN1~y@w7RRl#F()ii6Y5mr~Mdy@Kz z@FT4cm^I&#Fu_9IX(HAFP{XLbRALqm&)>m_we>a`hfv?eE|t z?YdDp2yAhj-~vuw^wzVDuj%w?exOcOT(ls(F*ceCe(C5HlN{lcQ;}|mRPqFDqLEzw zR7ldY+M6xe$$qLwekmk{Z&5cME$gpC?-8)f0m$rqaS|mj9ATNJvvyCgs(f2{r;2E!oy$k5{jik#(;S>do<#m0wVcU<}>)VtYmF9O0%(C>GDzPgh6X z9OkQLMR~y7=|MtaU!LDPPY7O)L{X#SC+M|v^X2CZ?$GS>U_|aC(VA(mIvCNk+biD| zSpj>gd(v>_Cbq>~-x^Y3o|?eHmuC?E&z>;Ij`%{$Pm$hI}bl0Kd`9KD~AchY+goL1?igDxf$qxL9< z4sW@sD)nwWr`T>e2B8MQN|p*DVTT8)3(%AZ&D|@Zh6`cJFT4G^y6`(UdPLY-&bJYJ z*L06f2~BX9qX}u)nrpmHPG#La#tiZ23<>`R@u8k;ueM6 znuSTY7>XEc+I-(VvL?Y>)adHo(cZ;1I7QP^q%hu#M{BEd8&mG_!EWR7ZV_&EGO;d(hGGJzX|tqyYEg2-m0zLT}a{COi$9!?9yK zGN7&yP$a|0gL`dPUt=4d^}?zrLN?HfKP0_gdRvb}1D73Hx!tXq>7{DWPV;^X{-)cm zFa^H5oBDL3uLkaFDWgFF@HL6Bt+_^g~*o*t`Hgy3M?nHhWvTp^|AQDc9_H< zg>IaSMzd7c(Sey;1SespO=8YUUArZaCc~}}tZZX80w%)fNpMExki-qB+;8xVX@dr; z#L52S6*aM-_$P9xFuIui;dN#qZ_MYy^C^hrY;YAMg;K`!ZpKKFc z9feHsool)`tFSS}Su|cL0%F;h!lpR+ym|P>kE-O`3QnHbJ%gJ$dQ_HPTT~>6WNX41 zoDEUpX-g&Hh&GP3koF4##?q*MX1K`@=W6(Gxm1=2Tb{hn8{sJyhQBoq}S>bZT zisRz-xDBYoYxt6--g2M1yh{#QWFCISux}4==r|7+fYdS$%DZ zXVQu{yPO<)Hn=TK`E@;l!09aY{!TMbT)H-l!(l{0j=SEj@JwW0a_h-2F0MZNpyucb zPPb+4&j?a!6ZnPTB>$t`(XSf-}`&+#rI#`GB> zl=$3HORwccTnA2%>$Nmz)u7j%_ywoGri1UXVNRxSf(<@vDLKKxFo;5pTI$R~a|-sQ zd5Rfwj+$k1t0{J`qOL^q>vZUHc7a^`cKKVa{66z?wMuQAfdZBaVVv@-wamPmes$d! z>gv^xx<0jXOz;7HIQS z4RBIFD?7{o^IQ=sNQ-k!ao*+V*|-^I2=UF?{d>bE9avsWbAs{sRE-y`7r zxVAKA9amvo4T}ZAHSF-{y1GqUHlDp4DO9I3mz5h8n|}P-9nKD|$r9AS3gbF1AX=2B zyaK3TbKYqv%~JHKQH8v+%zQ8UVEGDZY|mb>Oe3JD_Z{+Pq%HB+J1s*y6JOlk`6~H) zKt)YMZ*RkbU!GPHzJltmW-=6zqO=5;S)jz{ zFSx?ryqSMxgx|Nhv3z#kFBTuTBHsViaOHs5e&vXZ@l@mVI37<+^KvTE51!pB4Tggq zz!NlRY2ZLno0&6bA|KHPYOMY;;LZG&_lzuLy{@i$&B(}_*~Zk2 z>bkQ7u&Ww%CFh{aqkT{HCbPbRX&EvPRp=}WKmyHc>S_-qbwAr0<20vEoJ(!?-ucjE zKQ+nSlRL^VnOX0h+WcjGb6WI(8;7bsMaHXDb6ynPoOXMlf9nLKre;w*#E_whR#5!! z!^%_+X3eJVKc$fMZP;+xP$~e(CIP1R&{2m+iTQhDoC8Yl@kLM=Wily_cu>7C1wjVU z-^~I0P06ZSNVaN~A`#cSBH2L&tk6R%dU1(u1XdAx;g+5S^Hn9-L$v@p7CCF&PqV{Z?R$}4EJi36+u2JP7l(@fYfP!=e#76LGy^f>~vs0%s*x@X8`|5 zGd6JOHsQ=feES4Vo8%1P_7F5qjiIm#oRT0kO1(?Z_Dk6oX&j=Xd8Klk(;gk3S(ZFnc^8Gc=d;8O-R9tlGyp=2I@1teAZpGWUi;}`n zbJOS_Z2L16nVtDnPpMn{+wR9&yU9~C<-ncppPee`>@1k7hTl5Fn_3_KzQ)u{iJPp3 z)df?Xo%9ta%(dp@DhKuQj4D8=_!*ra#Ib&OXKrsYvAG%H7Kq|43WbayvsbeeimSa= z8~{7ya9ZUAIgLLPeuNmSB&#-`Je0Lja)M$}I41KHb7dQq$wgwX+EElNxBgyyLbA2* z=c1VJR%EPJEw(7!UE?4w@94{pI3E%(acEYd8*Wmr^R7|IM2RZ-RVXSkXy-8$!(iB* zQA`qh2Ze!EY6}Zs7vRz&nr|L60NlIgnO3L*Yz2k2Ivfen?drnVzzu3)1V&-t5S~S? zw#=Sdh>K@2vA25su*@>npw&7A%|Uh9T1jR$mV*H@)pU0&2#Se`7iJlOr$mp79`DKM z5vr*XLrg7w6lc4&S{So1KGKBqcuJ!E|HVFB?vTOjQHi)g+FwJqX@Y3q(qa#6T@3{q zhc@2T-W}XD9x4u+LCdce$*}x!Sc#+rH-sCz6j}0EE`Tk*irUq)y^za`}^1gFnF)C!yf_l_}I<6qfbT$Gc&Eyr?!QwJR~RE4!gKVmqjbI+I^*^ z&hz^7r-dgm@Mbfc#{JTH&^6sJCZt-NTpChB^fzQ}?etydyf~+)!d%V$0faN(f`rJb zm_YaJZ@>Fg>Ay2&bzTx3w^u-lsulc{mX4-nH*A(32O&b^EWmSuk{#HJk}_ULC}SB(L7`YAs>opp9o5UcnB^kVB*rmW6{s0&~_>J!_#+cEWib@v-Ms`?!&=3fDot`oH9v&$f<52>{n2l* z1FRzJ#yQbTHO}}wt0!y8Eh-0*|Um3vjX-nWH>`JN5tWB_gnW%; zUJ0V?_a#+!=>ahhrbGvmvObe8=v1uI8#gNHJ#>RwxL>E^pT05Br8+$@a9aDC1~$@* zicSQCbQcr=DCHM*?G7Hsovk|{$3oIwvymi#YoXeVfWj{Gd#XmnDgzQPRUKNAAI44y z{1WG&rhIR4ipmvBmq$BZ*5tmPIZmhhWgq|TcuR{6lA)+vhj(cH`0;+B^72{&a7ff* zkrIo|pd-Yxm+VVptC@QNCDk0=Re%Sz%ta7y{5Dn9(EapBS0r zLbDKeZepar5%cAcb<^;m>1{QhMzRmRem=+0I3ERot-)gb`i|sII^A#^Gz+x>TW5A& z3PQcpM$lDy`zb%1yf!e8&_>D02RN950KzW>GN6n@2so&Wu09x@PB=&IkIf|zZ1W}P zAKf*&Mo5@@G=w&290aG1@3=IMCB^|G4L7*xn;r3v&HBrD4D)Zg+)f~Ls$7*P-^i#B z4X7ac=0&58j^@2EBZCs}YPe3rqgLAA1L3Y}o?}$%u~)7Rk=LLFbAdSy@-Uw6lv?0K z&P@@M`o2Rll3GoYjotf@WNNjHbe|R?IKVn*?Rzf9v9QoFMq)ODF~>L}26@z`KA82t z43e!^z&WGqAk$Ww8j6bc3$I|;5^BHwt`?e)zf|&+l#!8uJV_Cwy-n1yS0^Q{W*a8B zTzTYL>tt&I&9vzGQUrO?YIm6C1r>eyh|qw~-&;7s7u1achP$K3VnXd8sV8J7ZTxTh z5+^*J5%_#X)XL2@>h(Gmv$@)fZ@ikR$v(2Rax89xscFEi!3_;ORI0dBxw)S{r50qf zg&_a*>2Xe{s@)7OX9O!C?^6fD8tc3bQTq9}fxhbx2@QeaO9Ej+2m!u~+u%Q6?Tgz{ zjYS}bleKcVhW~1$?t*AO^p!=Xkkgwx6OTik*R3~yg^L`wUU9Dq#$Z*iW%?s6pO_f8 zJ8w#u#Eaw7=8n{zJ}C>w{enA6XYHfUf7h)!Qaev)?V=yW{b@-z`hAz;I7^|DoFChP z1aYQnkGauh*ps6x*_S77@z1wwGmF8ky9fMbM$dr*`vsot4uvqWn)0vTRwJqH#&D%g zL3(0dP>%Oj&vm5Re%>*4x|h1J2X*mK5BH1?Nx_#7( zepgF`+n)rHXj!RiipusEq!X81;QQBXlTvLDj=Qub(ha&D=BDx3@-V*d!D9PeXUY?l zwZ0<4=iY!sUj4G>zTS+eYX7knN-8Oynl=NdwHS*nSz_5}*5LQ@=?Yr?uj$`C1m2OR zK`f5SD2|;=BhU#AmaTKe9QaSHQ_DUj1*cUPa*JICFt1<&S3P3zsrs^yUE;tx=x^cmW!Jq!+hohv_B> zPDMT0D&08dC4x@cTD$o1$x%So1Ir(G3_AVQMvQ13un~sP(cEWi$2%5q93E7t{3VJf%K? zuwSyDke~7KuB2?*#DV8YzJw z&}SCDexnUPD!%4|y~7}VzvJ4ch)WT4%sw@ItwoNt(C*RP)h?&~^g##vnhR0!HvIYx z0td2yz9=>t3JNySl*TszmfH6`Ir;ft@RdWs3}!J88UE|gj_GMQ6$ZYphUL2~4OY7} zB*33_bjkRf_@l;Y!7MIdb~bVe;-m78Pz|pdy=O*3kjak63UnLt!{^!!Ljg0rJD3a~ z1Q;y5Z^MF<=Hr}rdoz>yRczx+p3RxxgJE2GX&Si)14B@2t21j4hnnP#U?T3g#+{W+Zb z5s^@>->~-}4|_*!5pIzMCEp|3+i1XKcfUxW`8|ezAh>y{WiRcjSG*asw6;Ef(k#>V ztguN?EGkV_mGFdq!n#W)<7E}1#EZN8O$O|}qdoE|7K?F4zo1jL-v}E8v?9qz(d$&2 zMwyK&xlC9rXo_2xw7Qe0caC?o?Pc*-QAOE!+UvRuKjG+;dk|jQhDDBe?`XT7Y5lte zqSu0t5`;>Wv%|nhj|ZiE^IqA_lZu7OWh!2Y(627zb=r7Ends}wVk7Q5o09a@ojhH7 zU0m&h*8+j4e|OqWyJ&B`V`y=>MVO;K9=hk^6EsmVAGkLT{oUtR{JqSRY{Qi{kKw1k z6s;0SMPJOLp!som|A`*q3t0wIj-=bG8a#MC)MHcMSQU98Juv$?$CvYX)(n`P^!`5| zv3q@@|G@6wMqh;d;m4qvdibx2Yjml}vG9mDv&!0ne02M#D`Bo}xIB0VWh8>>WtNZQ z$&ISlJX;*ORQIO;k62qA{^6P%3!Z=Y1EbmY02{w^yB$`;%!{kur&XTGDiO2cjA)lr zsY^XZWy^DSAaz;kZ_VG?uWnJR7qdN18$~)>(kOoybY0~QYu9||K#|$Mby{3GduV~N zk9H7$7=RSo+?CUYF502`b76ytBy}sFak&|HIwRvB=0D|S`c#QCJPq zP)uOWI)#(n&{6|C4A^G~%B~BY21aOMoz9RuuM`Ip%oBz+NoAlb7?#`E^}7xXo!4S? zFg8I~G%!@nXi8&aJSGFcZAxQf;0m}942=i#p-&teLvE{AKm7Sl2f}Io?!IqbC|J;h z`=5LFOnU5?^w~SV@YwNZx$k_(kLNxZDE z3cf08^-rIT_>A$}B%IJBPcN^)4;90BQtiEi!gT#+EqyAUZ|}*b_}R>SGloq&6?opL zuT_+lwQMgg6!Cso$BwUA;k-1NcrzyE>(_X$B0HocjY~=Pk~Q08+N}(|%HjO_i+*=o z%G6C6A30Ch<0UlG;Zdj@ed!rfUY_i9mYwK8(aYuzcUzlTJ1yPz|Bb-9b33A9zRhGl>Ny-Q#JAq-+qtI@B@&w z$;PJbyiW=!py@g2hAi0)U1v=;avka`gd@8LC4=BEbNqL&K^UAQ5%r95#x%^qRB%KLaqMnG|6xKAm}sx!Qwo}J=2C;NROi$mfADui4)y(3wVA3k~{j^_5%H)C6K zlYAm1eY**HZOj($)xfKIQFtIVw$4&yvz9>(Crs>Gh{ zya6-FG7Dgi92#K)64=9Csj5?Zqe~_9TwSI!2quAwa1w-*uC5!}xY`?tltb0Hq740< zsq2QelPveZ4chr$=~U3!+c&>xyfvA1`)owOqj=i4wjY=A1577Gwg&Ko7;?il9r|_* z8P&IDV_g2D{in5OLFxsO!kx3AhO$5aKeoM|!q|VokqMlYM@HtsRuMtBY%I35#5$+G zpp|JOeoj^U=95HLemB04Yqv{a8X<^K9G2`&ShM_6&Bi1n?o?@MXsDj9Z*A3>#XK%J zRc*&SlFl>l)9DyRQ{*%Z+^e1XpH?0@vhpXrnPPU*d%vOhKkimm-u3c%Q^v3RKp9kx@A2dS?QfS=iigGr7m><)YkV=%LA5h@Uj@9=~ABPMJ z1UE;F&;Ttg5Kc^Qy!1SuvbNEqdgu3*l`=>s5_}dUv$B%BJbMiWrrMm7OXOdi=GOmh zZBvXXK7VqO&zojI2Om9};zCB5i|<210I{iwiGznGCx=FT89=Ef)5!lB1cZ6lbzgDn07*he}G&w7m!;|E(L-?+cz@0<9ZI~LqYQE7>HnPA436}oeN2Y(VfG6 zxNZuMK3Crm^Z_AFeHc~CVRrSl0W^?+Gbteu1g8NGYa3(8f*P{(ZT>%!jtSl6WbYVv zmE(37t0C8vJ6O-5+o*lL9XRcFbd~GSBGbGh3~R!67g&l)7n!kJlWd)~TUyXus#!&G6sR%(l(h1$xyrR5j_jM1zj#giA&@(Xl26@n<9>folx!92bQ z24h570+<)4!$!IQ(5yOU|4_E6aN@4v0+{Kx~Z z;q7fp%0cHziuI%!kB~w}g9@V+1wDz0wFlzX2UOvOy|&;e;t!lAR8tV2KQHgtfk8Uf zw;rs!(4JPODERk4ckd5I2Vq|0rd@@Mwd8MID%0^fITjYIQom^q;qhP8@|eJx{?5xX zc1@Fj*kDknlk{c-rnCloQ3hGh7OU+@efO3>fkRMcM>J?AeVP& zlfzX%cdp=N+4S#E*%^=BQ+N`A7C}|k%$|QUn0yI6S3$MS-NjO!4hm55uyju)Q6e!} z*OVO@A#-mfC9Pha6ng((Xl^V7{d+&u+yx)_B1{~t7d5e8L^i4J>;x<7@5;+l7-Gge zf#9diXJ$&v^rbN5V(ee%q0xBMEgS6%qZm7hNUP%G;^J44I!BmI@M*+FWz0!+s;+iQ zU4CuI+27bvNK8v>?7PZnVxB=heJ&_ymE0nN^W#-rqB%+JXkYGDuRw>JM_LdtLkiq* z6%%3&^BX$jnM@2bjiGc-DymKly)wVkA-pq;jSWL#7_*moZZ4I|-N}o8SK?sIv)p|c zu~9-B%tMc=!)YMFp*SiC0>kfnH8+X5>;+FFVN{~a9YVdIg1uGkZ~kegFy{^PU(4{( z`CbY`XmVA3esai686Yw8djCEyF7`bfB^F1)nwv+AqYLZ&Zy=eFhYT2uMd@{sP_qS4 zbJ&>PxajjZt?&c<1^!T|pLHfX=E^FJ>-l_XCZzvRV%x}@u(FtF(mS+Umw$e+IA74e>gCdTqi;6&=euAIpxd=Y3I5xWR zBhGoT+T`V1@91OlQ}2YO*~P4ukd*TBBdt?Plt)_ou6Y@Db`ss+Q~A-48s>?eaJYA2 zRGOa8^~Em}EFTmKIVVbMb|ob)hJJ7ITg>yHAn2i|{2ZJU!cwt9YNDT0=*WO7Bq#Xj zg@FjEaKoolrF8%c;49|`IT&25?O$dq8kp3#la9&6aH z6G|{>^C(>yP7#Dr$aeFyS0Ai_$ILhL43#*mgEl(c*4?Ae;tRL&S7Vc}Szl>B`mBuI zB9Y%xp%CZwlH!3V(`6W4-ZuETssvI&B~_O;CbULfl)X1V%(H7VSPf`_Ka9ak@8A=z z1l|B1QKT}NLI`WVTRd;2En5u{0CRqy9PTi$ja^inu){LJ&E&6W%JJPw#&PaTxpt?k zpC~gjN*22Q8tpGHR|tg~ye#9a8N<%odhZJnk7Oh=(PKfhYfzLAxdE36r<6a?A;rO&ELp_Y?8Pdw(PT^Fxn!eG_|LEbSYoBrsBA|6Fgr zt5LntyusI{Q2fdy=>ditS;}^B;I2MD4=(>7fWt0Jp~y=?VvfvzHvQhj6dyIef46J$ zl4Xu7U9v_NJV?uBBC0!kcTS0UcrV7+@~is?Fi+jrr@l3XwD|uG zr26jUWiv>Ju48Y^#qn7r9mwIH-Pv6Y|V|V-GZ&+&gQ?S?-`&ts{@5GXPqbmyZjUACC&oVXfNwUX0}ba(v978 zp8z!v9~8Zx8qB@7>oFPDm^iR@+yw`79YF)w^OHB_N;&&x7c3l^3!)IY#)}x)@D(iNaOm9 zC=^*!{`7={3*S=%iU=KsPXh=DDZcc``Ss>057i{pdW8M@4q+Ba@Tt%OytH!4>rbIbQw^-pR zGGYNPzw@n=PV@)b7yVbFr;glF*Qq3>F9oBN5PUXt!?2mdGcpv^o1?Thp`jP10G2Yi z(c93td3F3SW!Le5DUwdub!aDKoVLU6g!O?Ret21l$qOC;kdd@L#M&baVu&JZGt&<6 z!VCkvgRaav6QDW2x}tUy4~Y5(B+#Ej-8vM?DM-1?J_*&PntI3E96M!`WL#<&Z5n2u zo`P!~vBT$YOT~gU9#PB)%JZ zcd_u=m^LYzC!pH#W`yA1!(fA;D~b zG#73@l)NNd;n#XrKXZEfab;@kQRnOFU2Th-1m<4mJzlj9b3pv-GF$elX7ib9!uILM_$ke zHIGB*&=5=;ynQA{y7H93%i^d)T}y@(p>8vVhJ4L)M{0Q*@D^+SPp`EW+G6E%+`Z;u zS3goV@Dic7vc5`?!pCN44Ts@*{)zwy)9?B||AM{zKlN4T}qQRL2 zgv+{K8bv7w)#xge16;kI1fU87!W4pX)N&|cq8&i^1r`W|Hg4366r(?-ecEJ9u&Eaw zrhyikXQB>C9d>cpPGiu=VU3Z-u4|0V_iap!_J3o+K_R5EXk@sfu~zHwwYkpncVh!R zqNe7Cmf_|Wmeq4#(mIO&(wCK@b4(x0?W1Qtk(`$?+$uCJCGZm_%k?l32vuShgDFMa ztc`{$8DhB9)&?~(m&EUc=LzI1=qo#zjy#2{hLT_*aj<618qQ7mD#k2ZFGou&69;=2 z1j7=Su8k}{L*h&mfs7jg^PN&9C1Z@U!p6gXk&-7xM~{X`nqH#aGO`;Xy_zbz^rYacIq0AH%4!Oh93TzJ820%ur)8OyeS@K?sF1V(iFO z37Nnqj1z#1{|v7=_CX`lQA|$<1gtuNMHGNJYp1D_k;WQk-b+T6VmUK(x=bWviOZ~T z|4e%SpuaWLWD?qN2%`S*`P;BQBw(B__wTD6epvGdJ+>DBq2oVlf&F*lz+#avb4)3P1c^Mf#olQheVvZ|Z5 z>xXfgmv!5Z^SYn+_x}K5B%G^sRwiez&z9|f!E!#oJlT2kCOV0000$L_|bHBqAarB4TD{W@grX1CUr72@caw0faEd7-K|4L_|cawbojjHdpd6 zI6~Iv5J?-Q4*&oF000000FV;^004t70Z6Qk1Xl{X9oJ{sRC2(cs?- diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.eot b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.eot deleted file mode 100644 index 9b6afaedc0fd7aaf927a07f82da9c11022251b8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70807 zcmZ^}Wl$VUur9nTuq^HxTo;17ySux)ySqCCcXti$65L&a6FgY3Kydip@6`Qqs&3t$ zn(CgXdb+0i$IMheorwhnXu^a70RI~>fd4H}fFvluf0(@T|3?3R`#<=9#I_>Z@c)?q zOW^<{0Zsr%fIC10;03S%xc#?s_)h}>C;-*}v=zVuU=J_>xc-Mw0yO_aT>ta2`JX+c z0CoW5|4bGDDS#Eg3}69p{O3pg|ADqn49DF!An`ilxr>=A|?`Ne7|ECWR@o3Shq z4=fR~zT?A7B1K1mtmFVZ}vWI<_%EUx1N z-VuB1=Y)C8rIeJnB*soB7}lI+^=v+DtI)8suN#oL*oLO=#L=H?p3`HZ8#M=!rA(1x z+mo^&?u+k{qG{vIR3S%;NeiW#Lo;Fr!w1xX|2=AphPlC{NvF{mb)sydz;TeKh@TK` zOtM`}_qO0GPkgg=@Lr3-Ck>4h9)e9nfJG}w2Soq&B#!i}mydp=R~tvqpY;d)J{qHOLYB| zCUqLmmh{alZOvG+8#VHrNMNPz?TX(yib%TD9pB1X50crH;lp8-9wdvT06MC2s62Pq z3hJm=U6X|eF5byj=vrp*yRERvaTU&|52`XTnF!alAf~&GwNad~(y;K9ko-=o@=5Mz z`s(tbjzMpUv7}VcW7M>e6MVFW?9#lDc??ea6_mSX{gflBouo?3|8ZZ1NbPV4hU)qS zDPgQvv|KueLqh6a6vfwz^WJ59A3gD&-Q$WCZQa9kl$3qL{jgZf{etTB7*DeNyK9_02&)phNsFCRbML)Q;i$p^G38_|f8;C|fggVX49xtK+dTUF=Uu$V+)yKe}QszkyF{ zF$gq{^HC$ChqmuA^(pe9%6XQ0kvl|B7pB>7reH~Ng*!s zk4WlGz+keFJ{6_*B}aOZDd-al?UpGCv@C?=rNYOBqBrdG^=-JVPZXLI-1p#x%h`EK#4x0YNw| z@Nd1N$eroPsd0l}))bqw3f9#%BRTa=0|XN_NFgko(WZZ|uVu@R>?l(HlC6SYLw zY)G##!XmBYgU;2r&L$U(S((fle-pkQuv#P>OnLrOo3zZKe;!OSiD;yOomI-VH;qTE z!agoYCvK|ar(yY)5Ts;Pr5Xz{`6a@uR>)D-ut`a*fXE1IJ=SBT z6~3m1E@y|^FwaapzajS5Jj}MWDak&^MZKk9490}MA2t!DT7HGS{0)vXd#(4Rk4)zi z?7qwgX1q>zNI94-ZbswGoco2Nr_b)uxw49P6F2z#jl(7V2Gbtz0+^ z?tt?R5|P-WM~dLnZcrd9VtL0f1&o}{i`V$ox6|(2G+S8TSaa|ym0-?~&2f|ZkxpLP z)#-0Ut3|in_b6*+YFWm@#=|t1#!s`vHAhSXg6XIo!}S!7&Nik(+Qt}0>l(+GQ(=&Q zf4KV7v`*$D(>brO( zXuDmsKrVVmkXJ>+KbRwDxkOt?AF6N74>f6)a}wip+%u381sw6P}c!E`x+S1Ot(~r@l(*LpDrTvvX{?%3)@6 zCM;q4)B5KqIbkx&>ij?|vboS~?7B!jkwgH6;OpI+UGJGVV(qR41U_i(i@0gH46p3G zE$vuquK@VvtC@*oQ_bEAp8OZ4*HuhT(+f@FHfhBG_YfxZAIn8Ko-k-I%D3raJ^k3M zWKxl>LAwb0o8;uf_)nxA@&`X6Eb4OlA&y!yU-|a*6`hCRvOScM{#1- zMY~SwG*>svuPk{&`DsB8c1<1x<&JyCx5=Oa%}bd<28}Fl9$=uf`(=qh6&1}UZnWbu zXvgYc2OXY&@d%NQO%lB@izfKY=jp$DH8hk$kEv!DSJrL7?8gn_3l=Dc5+D5u2&Yt% zU?H6i(IRDTErb)KV-e>HS(uH_EX0#FEywwF%P^BGB6mz-794>6o(GSZ^jZ~FX zHlymrW^dqgtj?WJh&zzv9&+ik-vpGE#B;aNiO)e(d-_mxAkrA3?u$|DsjX+NC~bCJ z98<-BL49p~zI{L#VA`BAyXAQTU?+!=81^Vh3CWe}P7+Tg_uy3{)Cp*hpng z7JM)DY5KSZGpqzxhWgxhC=P-oJ37{8ve8IJ^|Ht8`IV$w> ze3UO;yC$HBb0qvP9+V0>dZ^D!H@S%Mn}Dv&0cWf_%~1m3x&0pC?*xnzncdJLiGIp= zv`p+TS`!q0zOym!Z3EXBume=33pA?zH~^BLF{E4326vh9k!=r1VpYK(i`5^q3dg)p zf<^>bjJFVWBe>^+KVxAr{uCnvbZNw2+wA5^lEHceC9IL)GI<!$FzXbB8i5t?7^w5~*(I0K}B>Ns?Y)yhrYhUE029rwn% zvq6tyX}<6(Mv!6QSokj=@0A&}gh`W~?6g2|v?S|%1PxIhtauIR5N(+dA*_qgJt=BH z3U1FsVHUhwdl4iW?hApR`XY98e3D~Q2FbZk1CmpPVrRaT_MD|5xS_YQ5;R^`UJdQb zUA<9W_jDUN%`3rc`jwpO?6+m`9=xw&AvA|Iu*)od5?jc}gbWMBW}4`6Z?(;;F_Hmb+o4k zt$BsV+x@eoNf*4y7wiDZz@H$b$P9+#!dRBGl^b&08rc@0ecYrR{uVv`C(OaPDa`Ss z`%TK_hcp?IYK#Eamn(vL$01?8!2IEli}`ZoNyafy~}xL zT^qg;Lk{MGBu+{N-GozN0Jg@jvs94}df~T1=#^>jEx!a%b~7D%B|?>Q$soN1+;3gl z&qQhs3bjsbp z;hUYly`U8{TQK=5j2Mvu;eLC`#AM-n!>6y0a-nnm!rqh4>P5@MX>s`>0~Y5~8NlnS zzXfN1<@S}Bd)tOx?5dbLB*fun)_FuYd-9fpW*eo@my_pIt@er7eZPPe9qc-m9b;xL z9XiN3H2I_bR8;m~`szdC1OWoN=i^;A?85sES(?Vb)ai)LVS!vt5vkEOX?=`WQY9~! z76wX5y}JCS*yG~997z}`fi~ZY_t2^`)>Eg?oxZ6a?dLr)V$hKKOseL{x0@zjD($a8 zJoRq$h{LIKjW;0=BFw77c>D{DDH<{2#LLUH7@v!5gi(xF#n2=!W`syt6Qi9o4ntWZ z$LTXZ(b)FwzuncNH=$5+1hCMh#!i;(FJp*L@iMB6+UZg*@ZWv!_R9xSlut?0_XzTS zW4R@mceF$;Igko^hWM#BI&4XrQBOH*xa@7h?inG3b3=U3Dr;=Tc^b4;t`^I<(Bglh z(?4dzi^(l3oD(?Z0(qjJQN>;trBM$7tX8}PljaeV29Y2Y(6ZWiJR1w1tz-M7wD;-Q ziw;?HmVFgH;_mTa9$uM_vC`W*|GKc0HFFX&t(-{fRF+8} z@ebGaElDMQBSx3_CFek0K2OHaCD=wOmaHa%;8C3AnI`+GUV)#+@F?(X2I|Vq2b8za zVVe(xfV8=MmfE=13p)=#Cfj6Bpik*YIKgX@NmZV>Rss*dQ*vk(tAJ04e?jj4yfjVE z@@Ohk`p}%%t1&+t+DNF6?MEX)@p*8N=uMF0912L017sAHQJ}^ICZPwY>97d*!=}*Hzja^qr4+d7GR^6tFhuvRFlX2{ffuaqblOkV zG)j|x8o8Ao9YDnx-%o0obsQUG9mJZ5mxc(&YC$bjcp8U#(GOmCE~8|LATTcCrzbAh zmaZi%(}@x%jwj_UiO6X?#M`H&6B8Dc`hmm52GND(QMx37Ng;#>F~{kxi5z){{IUF~ zgUM8$pd31nO=qZ>^SQ@Gx$fCl8S1#Eod7!fhaOcwBhtXB!Vu<`gz(`8qR@RL_-X4e z5nUpS|2~<@1v8;y-6Lr{3;+t7_0`sN&5Pchs9|FWBqL;0F$!Zan(ML#_n{WZe~#>t z7>z4d*!3@%b|B(N#B_>~ng z52C8p=2PPGufp`EV^V+-85DkQaSM~rxeq6%s@i%;*%>h`8>i8`SINNCbY^X?bgL9v zVRg(-v3Hs^Kw{18XNrcbLwe-7C2(eF<4|pOsx5DOe*(u~;hs($q8;Yh;0dOB%D>cU9#klLpv8bV!S|xoF%fD2++NC%APUprGMe8H{IR~%D8xYX~k z-~4*a(Jmhu>UM++L++!rG~T&IHhX`=scLHzPMQ{tIaH$q`o|?%$+X>jITaf4b23Vw zinfviMLWvTdJwRh$7HWKi}Ve!u#u*31Al~V8H3Ify@SRK-A_!|;h*%k6~ln^C|u>m z$L9nz>BR68`do39i6ZlSOCgO1(%|0_FbJ5jMC4)7mZhcHIF{mNQVm{t>jsZDiyu6 z_Jw+ulcCFzX?5p%}fQo|SS{ZuAbsWmuM9=4honv?P?0%i7Z+ zx5^2x-cV%F28tQz5h`P9UVl(7*~?-{s!}59WyaP(u77Kcpy15);{43sI-OKSsCdIbtw&Ue30(YX@yCRv;f7WJ^5<50bwO+B~i+C z;&Lmw~QLzA$$?W*hz9vT(al7&?9e}yIvMUg=1<%Yj#mUXe~NeX6@l7T+wa#e7Ws@Py6rc4MZ+4thjO@ttq zgC-l@ihsyZE`Lf`b+~CcIGqVfZj!;uE~c>8_@SypvA=;t;30(5hTm(x!r-y9GNH#? zPtP7ebC5ekGSL#{^h%s0=3oS$p=H9GA;xNakfDwmKdCWXK%IxTgda7M3M(cordrS( zNnLykJ&OA6I21(7j{i=msiAo26FdzOCP|jokQI;mEh?<2>?xrY(i#pd@PEo@H!Z_X zC&NoF=YF)-m=1t^NxF95Ji1~QTbE~I;JTYjaK$@b@=~dW+Jha%s{3PNk&N3tR72sg zU*6I_{I?sY6E50{k~hSyO6;r3lF@`u7phc^<8_k!!r9@fR9n9}2*d|ft#;Vl5 ztBb(4TGy_*yr}iOffw%y2CK4@FbLRJz4qX;V(YQRM$<@VB0}qfTi}(G5)6orC^E$8 zN$G?|A(0m?p|IP<0j&aq(6EB*J}NB6MD3tyBdgl&2h2Are`Ix&DwS5qkclZbtEejzr0WH;eig2#=fR8;0yhN}=mMe+j2HJ#60 z+D)(WAPho%;I@`J9AwhLL~n9mBhR7NK_J30&SDowjt4QMY6d!Qt>ysDma#=xf8~!C zkFpDygoMcF0+HtUhH_Nl^3sxOGVFBjd^t!`n*?r-?ydQMNNGB!oK0r=u~%}i%FN=J z$u7Mh$StZVr|Q|pCrJaxPl@@(2yA|O&8gBQtu4s+vL5TA*kBdD0jPO{mnYm~l}x^# zNOvN2aZ6opt`LZ!4KJqC=DC_u{?i2#K!nL@s@uhypE?n7$bbpS3zzHG2_ZfVc`3v2 z^x4{))KUZKF5K+~*DP}x!9G4ULwvo?S?Cdlqvl`85eg5esEuOCritJdMj-`AP&;K5 zS=ILEVDv~pEOsNMRn!^aSZFj)nnwYk`D2MPpMlLU392&T;gfgbYVli5atT7Bl!}~d z72{rJSYSQbA~_RFdb_al-qF{E>^8mtAIjH|CRC_X!WiRe% z7q+P{R*+6#)G}*{pU~Ub?=q=Xs#ex(J^#U)C&EoNq4gQ_f@YZ0HuvEjfk_>4c?(c^+^1(SO zl5OSLJc_WqYU!J*5KPh1DB2g+`?XEEp;jvO_&vmWqQYIt%a8a;UJQal*mj}BsooEv zi>UUDIvE)QIF|GTWO(H<7D)wZ#ec6L+$kJ^=U?n90BtjxI9(D6MvLHx=L`#XYze}| zSk5(8c%L8hCyAgJ<6!b(F|ecxg&io{Wy_n#^+d4MTp(B&AYZJXBMqRp_$w;0c$Nkq z-S1>;1eef(qk&Z;oN6)ot&x`Tp=V$(%EiK;wtK#f0cZ3YM{6Svb;&vWcKDXzNV&U* zQD2;*qV_bl#cOEd>B~XyV*`(#ok3}L9{3pf` zh)4RvIzmq0^9-Huy)P9^Zl|6wM3hrLW+qbi{I z?KA!AXh~Y9PNJ+mPPrCa<&E&q3+0pK>(D9f=X%+Sni#(-@kMARd*bpHbCs}B+8705 z-ru+EP+9uc2z$Xci!CuR2j$tr@K`N(N|8Ur`f*tqSL0fTY^swG{wG$qvzfSVHT9x0 zifBn5M>CmRV!I&!i)czSX0Ex7RvcT~Tji>JfFgzZbcU(Lr5TFln>`-9 z>l8C`V}}3ojE}dNWMPoi^aKQJ-FOo10>S;xcPxH=rtwaZ;@`01Z4mYL~8d|cpYYem6(FAw$o~OV1GQ7LVsm1N%>RI}Q$__Sl zl!Qm*Oc8`gP(`Vad^b1u*x`-o0R=>M3A9TNzVT7#M1`pHgY|{K4-C@mo#IE*md}fv zn%#)~t7krP6&~57-hL6^-W0&2&`?!EscLX@E4Hx-*B#ZsUDFQBlzW<5R9Y1lFzNhE zr;i6K->br~pwT6nrghMvfn*-bk!FF0!Pe z5E8s|f*YEYf)(BF06$P1LTjTi3Be>!uEkK4kKSK{Yv#oC(Yy|A>m|@fh0UUjmb0f? z7PN-hl>Yv`yspwQ2<&CWE~x(|qOPjbEP-DUESpUk)9qkPo;5;2Eye1OVM@ub;>t0i z<0+CJGImy!hDq7WH2k5Z3P#Hgy(^Jb`qdu{(L{II6u2>CBut5)*xDM~==<7L9O|94 zO(Cu5H|j+b(H{xw9fR{ednAoNB@yBed(DW;m>bC0>F2;+J*Ev;j=FKp3Ta1xc{}Z8;nf#d~H?sAxxkm{np0{!@XK0y_tG+x@dG!r_NX;cAb{!SDykswTwM zOu|ZKt0`csLaqj(5!ay(nD)-7Hjhg%jmJ^%_7shEO{>aIcR?K6%9odbQC3$dTWEsHw$CM2@?pds7}zFtqUdI<@5xmtOfDX6uti;+HngFcphCE-8(_w?&aKQ zfzK`3&=II9mdn!3ZAu5FO>}eRU7J?}Eg@iDOq!)A^mnh|6lZp)6iYCk@eZ?2ER9}D z&cxwD_*1;L0Zb=*wdN|5=2$cF1o-UBh^kX6TaE1KM5-?fir3%DNhQnO=-lz5sIqXJ zU{i4!1h%tUQZ)M8g=x3J=V&o9@JSkNfH{miR#}QKFlT~x6b{b##+?yoN`P!;Cs+yn zgnp_Z>XkWrH5O_`ue9hDe8Ir6KsGCa^-!)*qhF@-pCaxIL<)VQ^nouINQ-&u_@!4i8N|+G zac$xD1xQz;D??53a5|G?U~iv8CQ*odfL*lOj3RgLqUhLtcXk-v!afZ{BU6H74Sf}L z`JgxqjgQMPQbIcXoKoU@lu#-+MX5q!xZ;NE98<3$qsYK1Zr`N3vS39fyauxFUKK{; zL#Nt3xPYmYvV=*4{{diz?1O7F`$x`PU|{5%XxN4hblbc5fTey0nO0&`LlsZ=LNWlZ zDG8f9k|1?Pd45SQLu>*aMch*-Je^yJ80(PZAiVuH=092}dO56;0CcBQTe{28Y(`&F zf9^nh)*{r9+Ndjm%8WbSo;{7{3Nl-nfa$YY+vbIzVGH}>NH!sHakwG0O6}2nTgy0S z)`Dm4?VU69c+Dj?@oe(wF!M zRtQbPzAQ+2oE^17q6m=L&?P4@27M4`1m;cWLN(@6AO@S1O=p&UWnFa2vx?X>l>l&g zy0DN8#t&CD?x+A++~gbO>H#v{nXOc7&qLzsbHO1wmAiW#=iyh^Z%Z+ZU z+@=Y<2Fso$>X;31>cs#^ucfOHDpA7DqOn|wM^5WF;?QI%n(t$a1r1AB#*HRhIpy;7+LcrDC-`p znzsaxHE=Crby`Xfb$bZ|-$npgzQ)>dKfElMQBqUh%U8B2ZdI&R4?Ayo?ooskR#9>* zCp(HPu%WZpmz_daj%=h^J~H6SO6wX)=;URDnCh=Ycy>}2kNa&(oRm_g`MN%UiqYF$ z>qyCN6*iPLeULwc(;by8o8_%}^sCqbwUu6c@o zHNDFGBkuV~f4^CFlgaFYWn~Jj!UwpaoD5trVZeaiO8uqujA1Hx@6o) z&$MnUqRCy~t?sHYEmrzJV|1lZnX(W((M0B$*YNaAot`U|1tMccGZW-m;oHm7+!&b> zP~Of6*|Jy{2myptO}{9Qq}(+N!BC%+o7ASca{1&~>3OeGDKGn4N1cz^1X&%~CM@m7 z6*jM0Zhzvp<(X|~>Z6#fCvnbVb;cY~xY9HImJ*lbxCZUVItSzc=n$m_n)o`=}o zYV%oQw~mOb$85yb6T-h2n8T@nVW~E(;DXX5Q$)1(ts-x;b`S%`q$`x`Zudu!IyxU7Y~>g1sND_2CG9 zWshrRVS13TSffE*W50>}n)ug1|7!<%u;=R1VV4L(T^U^dm^F@4e6|)X?Kmg*k<)u` z!L(GfMzELsi7oXJ;;K6LLkz+SwudZw_?o^i9$wukXig{?C)+^CQvjdI*f7;ZGD0R= zoHK{gxlKqx+XOaU3mju03d~~Q zJqbvb19g_MGn(Y_a~Dc|Rld*_#|uyLBvLuE@~5wI&1{JPuNVf&S=?ibjYFCEi(MtG zXoiGirH}BTvI6wi1&ucUYC+O6H-&cR;3=Kqzow&U%i;KrK`^B3q-==Vx1X%$n2X6e zRZ+R=61R;a=_V+DkA<^9`SGS~2g(c)IYXQ`qPKq%+8QlYDwL3s)t^p2G)=cT@Y+TA zRL|_}0BkZ-&kq|i(UN@^OD^&e^_$eo539>HFEB-&6)jIu1~T47IZ(XxEzV|Ll~*}) zCdxO3%CRf@l49c8>-+Ot2zavba{wA#S<`kH3!J+%E~}ygc>96S#`XwiU%efX4fW}n zENRum1%_MCQyPutcbZKk7oFP>L7^^4KYmWjr&F>dXvDe(Uu-{fQ-34sTz$Jcn;wTs zMWHvewkQ(9)-f_9v6u5R=x;D>`qz~z2w7Fp8$@9boLGPXnV_uICMP`G_swzNAFGfgBnR=Y%&@LgG14TfP z{##Z)gG6-Q$6tD%iRuclOh<6$cIemg>g%;B3_>cXch{a-O^v3XpMO1KELOmGPcttL z`c#g^-}2uy5*QII^lDa2pCY|SykuSnLTHzi1K-I1~Lchn(t^55=! z3H#SM1y7jH-hQ~;$JIn%kQ{FcDXsF3L{rP{mu%j;Xzbjy2v1`XYjcfz8MjqE<}V;x zmULc7HjJ8Dl^rA8p=wPDK$;e}sryoj+`7?;oKyh|h(Ebc))GnoymCW0zX6g4G;?quKjDV`9PlOo~ zth76n!syqg5!Y>yVvNjx>QvU5yV%sZbQwhW#$-iL3D0~+p8yA$^l(+{@0Y8w>C7BU zqvBC+QOVD@#)v^nq+2H z!+42V;)votWB|RpbUL19#BvLF@9;WMCDMPa<&tX($63tEmmlZiO7f)zIVlSA!~AG`g%M%~74aNO1mdzc=KVOg7#_XIj zGb|fus@QkLL67~f%$l+-`8&)i#+Vrn|3nJv)^~Q^)OGu>U8P+K-3;=0*PP<|JW#vb zWpj9D%-G~x8dP{Wi~i}!Wk`U5htOT2Qus2$hWOJU{TfnR7UbQmprs-z`7dbp3Cn z70zOk88dhG^O=_kT^Au;UJCxPfKO+mxZ{kW*TzQKTnpn%vi7^}cn@|#B00-&=xXmM z=HzT21*ULxinXsX;G z7Ou;#UZWTzdcktnx>V^Vo5O=N*icE}h0Ob4O#ytC@mn|Uc! zUo;nx-FVCg2VJyl?_m%nVU<%b19oA=0?(oHj99WY2h==+=#xFFNg@5l)09u4FJ>qT zQzuG-QIv1l!6*acRR3lhp-tPQTDKIGuc+Oeo0!cjL1L|nn$O^w`vaFlhm2*K(WDSE zE>_hea2WnERCTEcWn*N-C&}h?0n3lPQNH4jyrm=icW27{vTw-{X5nQe5}|5*$uEPK zW-CeH$*yCo_Jm7MHU}k%bqg&2zRraBai`WmZ6ZzwH;i2xHE5-HswWiBs8`#qrN_*x z+FdU~Q#cZ1T56sqIB7n!GS^s$H?M0Jub*DlKT8OKIsOye0zXaY4QO@tWV`a=Uw;tN zSi0KY=vS&^4UPKFaDNDk&11&s)!cvSUREpehiVsl2NoeIcepE)lK=Q3>XDCENLJR! zHgrM~LNg=wU%N*L+y!~6DOH6HBb+`l`vp)sdc>ZgcT1vKco6Os9ibu1}| z+Tt!5g?Y$v18OT##CaA&UEatK-MPc;ifGvP{e~o$!ZGS%%0Z=?Mw7y;IHuMEk76T> zA;ge>;b51eGJA}3k7>byo(b6F^b$bGQI#U+DU*(ihMP@YQ6P6&*aSq>M?l0`=g1c` z`=yzFs8!#+Q}co&JdYL4XTKEsYe2S1RLT~VXxAsfWeM;`fQ3<8>=Q-%H3Hl=bo2oX zs6+t1vz{Utk7xpo*iZW*2YKX#5l~U=T?<4z>9RA#%2=Yh%-Ah|Pg2Qq=l7nkjJlKt zsLl80Eg};+g%cDym`lZ)&{+1mN=Wu7R}=B#gTMVrlL9NW+E@bp8ik;NhJ)rUP%NL> zy^HM$UL=bN znkhNidTaBC8RYK$qcZ%lc=(O{XWrH)`Xu9;^N~hM8uUtx$l1l%DEePBR;BIae|KMK z9ng>pjRIG7bjPt_6amuqW&WEqA$|7mz^u9Z%#U)t+rfUuHf zgMhSz0nuQme_2v+K^cffjj=eX=x_mDKHUW5txlJRZo1`b2N)Fc5aEUG-~&ssE1%c2 z*gn*>@01A`jaZlj=6oGO6c=0pSv*M8RLKRxKUzhE6C z$|}tTWC^|0e{P#i5^PiP0XwoZ#|-pu+}hAHo!z8EG}`?TbFLqcv8p8tl@*}_A?9)C zvSUQw-Wt!eXx;Tsc8hAvxSP3rOem5>H~$%;77Q58nM%FC=#^XMz>&6mH6sbfBxv4* z-T!(c#rrrmI722zSFQ_1^2)o0FAWl_Rvv&)%}>>1jFYMwySw=H7A4I-Cq^->PHMCh zDGNpzF>4n&*v2p`e6?ktu{f!Jj={uy!K4e`pADW~qCU=8#<~sg z*T@y`{a&E2eH`ApEn8@$i2q;H9&ns0^g?)jo|8h)+f9zX-jLMzT9mefyJk*h0d$o$ z5D;NmAqreWOT4N*dM&^_3`z(7a}ojmT;jyY`XyD8qal?ksVPc2Zi|PfLgo!-yV&(y z?yj~wg=Jgllc>b$Kx8vspm%SUhC#sqBz zG+A^6zl$_{oR7T7g!mB1!%qPm!uT$A*VP&)BFtf3gvSWH&qDH>G9{rXu`jHA9@j>< zTjrjl3{GrNnB_wd*Ttc6f8~jgF8Y@l!9_RoV!r47xA+WOao88=+d!1{Ts%{5$$a(U zezX*>r`}|5a(ZYfi9|x_6}!~{*2!_PZyM^aEPK#{-;E$w^ijr~zi|z#1-MMoY9B`TqMgzRKYqk=I?x?AusFOliN?qB%on@ znQb~M(NOzfgyhWI;7-)WbrJujt2DXXoeB4yHm=Goo-wcpcl1D4djtvKg%ZjBsuahR zS1k9Y8)a0abT`RR^oh~m|2MRP3Fa+z$Xq<{^NIc@mYO&U+I|ofG>Po8`1B2CNv^~| zY+WP*cQN)|`PKiB9h4L+5{T3clY~Kf2rb$*c8x}@mA-$x^wsiZNn~#Z)?vdU1CZLk z^`me#C0h|MEWKVB#Q<-3I(K(jZJ2-sy1q4rKdla{JxC(+!z3~MjkA@ia174F^Cmpq z)w`1T`>t<+s%8@GV!WK|m4+nWA}|#sfE%I{Qy5F+UFBS{f*`bCMG(S75OhK+^~Uy2 zzjwwWA|B+aToy!sqBU(mY<}MM!)?Yc4O4i;cD_749kcXbUM!{peDaqySYKtp0}6K8 zMw0Q$zQ~@LTbj9l2ABD`i8PBxAx<8};22FO2ep9uh7`jtabXeBSk`pxGOIFjEk9S( z_gTl(UoPhWcaC|@jEg3?A&5<9BMq?KqQCrCI-;WS9Nahs{}m5LX&3uq+~8ovHHp77 zp+5H1BMg*3ooAAY$X%dAoJXHvr4$}yL)$K$ApevokHDacQ#%QY4pY56e228JmS4yg zE6%|K{2f6I@4+20hap5#7Er}Ggc6+gZ!9zcD5n#r=^1NX@!6!$WN0D+k26A)D2t@7l2mQO0>(eZ% ziz0$*cG()YO~}3hs>kGdL=Kz}t%!YZWUzF7f!@J2o)hbe(>~@nkgP@u?i8|54+*Av znAxlRL{RC)I^u3a%_Zdvd7!?s@00Ls*<%S5~9r$1bGk+(oP zg6--P*-SiV>n_LD66p_)0wumON{0@-H=awc43Xg>tbd1!=;McZ0~GH)W!P13+FCsP zzC&`%`Y4lH==_b&;xY>-+c9ejY%zZriZ@O*#qvSGIEB5-) zCz9~3?{)peB=yEba4EHZRdvpdaoB)dTDQhPhY{zQNu%;b!U#QcV{xz-e117hHt-E< zy(|rhsR`WwmolsumQ(0EbSZ^tIdyWU1?ZdA6msm;Zps%F$C>hNWvxd}a1&<^2NcH5 zF9*w$k>He|UdC~$**X({7zt^xf}yglb4nExr7){$ubqJBNRV5Lb5~^}mU~PohqFH* z`ccyongz)sG*CaiOWgh6nw)ubh%!3fttRL9$$!fsj>%{vymYFXs&xJZP5kZ-z{*g3 z*y*W5YRr(}gQY)IKI0t~+}gq+B}po4FqEQz&qAjvI#mzG#(p}Tvpz&acKY9cZ)s!0 zm$SRvp0V*Y%XW@sk4#Q~o&?<;vcL^2mxJRtC#`|8`nQA%Z6h6FJirDXXMXz~%-iuSjgX-ov2 z25Wy(yPV>Aqk>gD+3jyi|sukY^LlzO4jiG}Bv%7Ik zN^2mIMmLmyY@`o~pSHq%2wk-?fBa2mAdbHN<-yD4&SI+r|JsO!Cm3hU-N*`?#Jgeh z^xc^YjracpFF?@05ZSzViz(2BCj%uf@=y8fdV{KThu=ci-WMd(g@$5UgP=X##dycS zi{*MZAho&$(iaLJXaHyH-Vz=f+O*;iR3M|MlAJlYlqrT zP{t;ds1#WCr)cqPh|k)!%YH5%l@vE*!8JFi)qj?3w8%@e{#=egpq!kPu#xq7oG1JF zQk2XXEHIe**eY&Tq5dHnN+tpMsbzPK1J$?qAjEX%bdZY01-~QHLDY^8p1>JmrgSPR zm)Xl+lX0U`SqfF;0>IfZ6EH!_a3d<0SZcay1DuI69V)H;p)mcLpnPQ~uIxz*txWtd ztuk0Mh#LvS6(bTb!%1QMISv4aFAQ7iGu^MmoiL(14h7O?3q=3`-k@aOcN)GR!-0p-?DR5_l1&XLLCD3Oe>6x*!Y2Oo7X0EsHm{Wp((-KAc&spz`t_-kSb;9hntB z-8=)q`_~=%sv4uS+(rvy@5U=B2>emye`#5M0#!Vy20-#U;GoN2F(ZwX80EWdjW9JJ zVsNMtop^@2F~&n7wsQtnrgC-^(6T8e4cLV!_UCE%;4KiCO)TdT7;^=thBbtX>_us? zQQzZQnt=Ry2n*g!7CB$ZkO3^l^ayQ@y6tZ5LHd~mvne}%gZE~pw_+*lKymVYL!ASh z23~MGAM7u>fYu)#gh7x~ChxDy782;vI1t9iW zU;`-m*kyY?`nck0TLi<%`qJr7mAb-U=Xs+M45k> zYmh;=-Jl0ZN?1@xBFZ-{Ru}S~7h^_DekLd{p(&R| zZMQI%0^fyJx&fU4`_G*af@ENmrqJ(KBpD+ZK) zd19YL`Ahh32NX1u8u3h~4c|=kLL_QOD$K`m_EI3zbnX0$B+*y26jh>G2_muLsLpc%Da06|H+BvI8sy&L18B=cDa&me;=;R0WDzEA?m63Y1 zQ@(y=lS8KV&@)<(Vm*s*QH5BxYAjhrNJmcKdA#srT&#XnfHsoEj-HunTk)aYgBYkU zDjR|)up5F~ugP26#Hw-a2NpVYx-rlch-WC8*HFcI6`o}(+f}4q`#g3 zvmt||Fv257>3gK30YI}6fMaQqaZsa~n6@c0C};q<$&m=kEl2QT;S3j=QD{GT6tFk) zyhU1+e#?>K6lJhS8hC{+)y+aSDJNlnYQ#&*fT|R`--3M?77>XNj=WL>-qS9JAVbGI zPJz%eta;D^zkw@%hi1_+%-;A0|{_QNQ@+Owi53e?*@!=n6k=+ODg~!;t6}6TUupc-$GcR|7{@S z=+HQ*H2O|*wp2+Uba8$~_+w^vESuL}7E_Z9K{Sg*(=pa`u^+4Q3MS8^AdhMd)GuhaBR3 zSocc6%v7GhIQx07#2zih7=0Rsogw0>5WG08c`$JGEMcG+@|p`n4v4faLmc1){)y*L zHyn&A{A2~_nl%(9f-v~5{DVwT1T;A%rg6$~{V2o|#802e4aRnFY*vY2i;4;iJTJ)s zT3Jbe8gxlLsk%$!P6p+ahrMXHAYDLLDcK6JS$Amz75n^N4qv_jNT23SExyfAW0H_o z{1T^Hx5%pCVjpo1B(p7rOWDCy^ryA7bdN_>B-=z(Sn8}(E0cM}F*o(r+5P~4bvuHC zHSP=uNAJ`ujL8wD5mNxWRUNB4(>W~xXt(s>L?_=a^ZlJZ_SkcHtf950pK z7GUgW#NvzFq?Yel>odelAnm*y=BQMY803O1M~ozBo|k+++E~3~yj?>HfvvWV6jS(s zu_*z@jE2`u(&Q(JBP^^_J>EKyj3>j_V1G#OQ~5s+?R7IUF+>eh4QOtK-!Nd^X5WNKvO$3767OvM)UerT<|;%an4j z1@ogI8GVjT5Qg)~QATLp3rm#dh2w}kq9K8`kOf6swnOoc0(ZV`~+ zgv3P_!h0bS0GC-z$X@`-@o~JlEdX&CJGLWdL0JIR+E~&V%Z0M&kXQx>HZy3DmJviw z`%hK-$JnP}H93g54-*K;2lT}84+ijpO0^>9ogsD4N)Uv`mpEEP!pd6!2}I5ei$blm_CgJ8 zu*R?rtlp>?LJ*xRxWvt%+g8L|cA*eV3S=Drro9TQ(-o<(tO5aT#H&Og z)&Vgpx26Vlf($cl;^>wZn)68#18c|076OD4rWjjzN}f}%v?8a<)oxX7t1lV+cSxoD z6t4bydTpRDQtB>t$vi*cAz?+?nEdXDyx)S?cY}Dslv%55IFv$ zU!WWgZLy&wFv(ZW7=c5V5y)gH);a(PYcrf5>^*l}DiiFBm2CzK?y(R7of(ENdmXf$ zl!1r?eM9Ei5{Rj2V!7`Tth@^u#+12^EhyzY-YI?)4LDABRt!EDe=a3(MC#$Ge$Mkj zl-rIhJTxtLPzORStsBP)ezL7CwpZeHLRj;QOJFD#jR6b_%N`_;lr--Z@-6omw|2GILn&XtqIJoYOP;Dp4P4t4J7&r3lKn}2Wg60{MbOs>SM4L@w zOuLD)P32u2pHa+0d>zp-i3zfh%=8n=B1Il^Y}6Y(M7S<_AdiUxu;c=%^Cm(U=jK0} zHBQwdn%9Z}=58T>*lk1^6xzT6u3pd9UJ0eRYRQ6)1RtNr)ALp$zpxO6u=>^{4^L}! zeZ`bOj9f?CR(?Z6`GnV~5Dcd-QPpnwu)%hpWmHc};d`ozM6#UbfoNzsqn|Z9U=4g| z)}XIR4Hoq7I)NCX;2*#`+7S<)?3ueg(aLV>*PGb0jrpmYn6S5rho>GH=Q@P3fiVt* z=5sKyKUyu^PVk9{P(2tdO3XAnnxl7_ekkd9@e@5T2=XRaTnb~mBM*Ut?h0D}DuL$o zA=>>xCJ|oZjS}4C4&WRbVQeI%j&oH7*{w-;VY5iaFFqf}%)HIjJ;?M76mnpc`DCp7 z2@Dc~P63`u7t{S)eej}?v?fv&A9A92q+j8w+0Pn_Jiv67pVQZJju@^-oCAR5WC@2h zl>b?08Mq0sMuM0aCmY+vpJ~zlWQmETDaq0Nkq$bP$gIn8HeHIX(*Q+o!b|p@hKHsR zvsz$CKqM8F`f7nL=$u*r?Z)h^HxNMNIf~6-%R$ttF_AfCa~s$e{oEHZh|?J!D!XBF z34SSBptAeUgSChKuDwHOl7uaQ0K3}%#F+ev{GZ_f!RT`PD9x@Qt!E(;9L$;W=#&5e z-yjeJ$1tB4@qrgm0>hwf+mS%D!5UB=FTUvYA$Mf`q?bnMkuXClNbO2MfFO)Rc% z!wJZhJ12kD$M72fz)CChJ1=7-H*-O3pep%=$$tA&F<{b`u)G=@m;Q{2JxefUNw@(X z4n6P^urqFlWTW!m=n3Q!95NdkDb{6`<17s`V{rCD^LE!;3p1I%SEuPN?PsyOh_Vf z8xZgxf4xK!-r_RoocMq`e2kwqGSUNbBmsW!96q!(zScz%r;%x=#ddiS*%HtLr4?0^J`)i=YV! zo;6C&UPe}pB&yy6&C0<3(z8X%Qh4=Vz;HWUS;PAu* zM7zsX(9F8Z`RY9i<=B}rlld!!czDT^oZHJhv`_FHzhF!|p8uB~249oL^8SEf9L!5g z^rQp6j5;qpnRdwmLBni10qoeV?WmjAft$RWylK~kA~1p$TW3r}s2j6QS` zPt-P*0|jT2K6C)7H6U~*PH9acI#!3{*Y}RYVL=T>u^Rk2L}b*FEXAXVY3*oqJ$k>7 zL^|$AhE8%B`m``S#fB|L;5D-gY9Y#Pj&mqf39f^jfL9bNFz_VXf`c$Nw{2ZHu)VzdSqC5G5OFB|C~qk@$iuBlppuwBcc zDPdy|0=jTgQ?Q8bV?Y)@tSuicD1uP$1*U6ac20Y;4oIlMpt~ zLzhFnP)U=Kn#{ier0?tgoH54{ps;F5czOMD9+YzEf?;Ap^J#?#ykSqzaf4VtJl9n{cpoCLaU3jqHZR| zg<=ooyLoP~m`XTW7as+CZY4QwlD^HR&u z&%UNB?qx$E+$2j#-~ag$q1kn-9$5)bij>`!%Bmsl7#%cd9F-4U55;GW@E4i8*lzpkb*9q=QbxtkB$!LG%xJJr@R z*1(<9U?WlKWRe#4Q-yeiHTDwRDI#~Acrrd8x9&(_7=f%7>}NiRJYeur31;`B2Bxdi z*^Y3w*oy{{;`F9`YhH(=O!5E7TIOBG2KiRP8u2B6AB1%~(2^ICC;u**T1Cg? zPGDg}1aR7Mz8VSgq^5ieipc3;*QA`78cY^(8G&+Tc6IwwPSx1VYAt~)VCMdiS~e?3 zAVi&!kzeb)IY-6J!6%U_JK*kgIE%j~B}e&-J>8key2R;CLQK7W&i9gbWGnZ`F0)6Q zf16p852jQq={wF3mLPY&D`{kZW{ZBQ2b_DZfuwzGKb$rWN-yM70LM9b7(HgJGz2L+ zv?ti%feJ42RGi*oiKdRJ5!Wx5HseW-pm4!Kl)Yg!Q8+&)`qhzvD`o{3GyB}a;gO$ML{@?Bgn81mjWxuY2GI-(hUxx|XV)&_iBkm-=pO%Svq z_Gai3flE!&0rO;wP^k6EHt>D9+0(GFu}`l7iA2{m3k7+><(bv6@9zx zfW}v0Y^ujVyVlS>jZcUQ<|QrUMNh;<+?YXxPO5YpeTxvpO$7lE-4e1%m|f5%+U4Ol zE9dq+q1J;7aQBHGw4z2MXhLL<=6w^Op-u9R{qUbRs_ZKDvVqN8jJ}`^BW8djzpOO} zt2U^ajBu4{w*vUk`_6{&k#QYr+A&s5)P*<4S_8WlZ6rKw^W`uVL`_6uv4cUo!hd$D1p1?_W%62A)&(!jYrc;k+W8ba#p z{hWZ#=Zmg}qHpu|6q74MM`0&>6dLK!1R#zLR|4~?E0K6-H5&1B%$YryIAhiRTc9J> zlgYUI5CG&JI>x8u30XY)FTm#Z5kk=?B6s(q;^#^a_27kW_RE93k{|p=_xL|DlTjH z+?bYi4TO30dk1eErcgbwaMqIP>SZ*ONu@WWbn$`$yAjjZ(JUhoBMoc--j@Jn96Cua zoHV!!p&F9?TbF9bvAk+`BC$Bs1A^xYj)&jl*MA#?CO<2S4oPein;t>kk_6=**_h4?KRhOXuc<5|v=v+KaR>wvt^QI#Wi#5v zOf`y8jeJ`g4-Oc7eC%vAG)Mv#0PID~Q7&wN486kg2k~`=qxl11VVkrRP)}@A#_rzA z;xWKN6Z^~a4_F!tR!R;GISjsLwMy68)R||UMoUUe9^`?ojP#kXCf|sQ(9ab_iKg@% z2I*hHFzQ5+J#uf0+`T-3qSp-)O@ZY{$9Ygog+>=(oEyLpIMbD=NvxO>APf_Tidr9$ z+D{Eip3sRQ>9inV7BQHZhku0H;?OCNcubF_1e=J?-l7*2KYzq5bnhDvtpoD_lT~BM? zqzj@;`)>8>wAHLMVH);6n-@=G{>wXWxex$U=EaDTjDHgpUbeVP5pi*>I7Xlx#H~e? zmAd?P=7#FE4gvS*mF0zDJrG5^U=bX_y5a~gMzrkVbGVKyw>Kmr{YV!zcJd5)yi!7F} zZZecHuOlL-MhfVsG%q9KoX89&K_Fk7{sL?@#@@5=Cb~FS&X8vE+%wKc76Wiy21d-K zlu9;0U@>u+?Zt)o{+K89CK7h|Diqk!Fb)%zB-0Q&?e*kW_s*_u`&4rprV!o=!#~T# zB>7Xpi=?@FBa1DX$w8G^zo}SVB!&30+ij7WuW30Fs*D( zo5MbOVA7SD*RTi8>4|HP89A_4;^UvaWukewmoU#Oen=1U9#B(Fs7dGDv?$@t=8oa5 z2Vli!zkNdJm8^_4-vn&v9pv-3YezUg=C2aM2xm2@%8}C{ zv*OsqUtj{D`bU`Xkb~j1NHTTz( zHzGjc61O^3q_h0RvaEl=zLz-1(7FW(wYNvC#rBh?<>V0)h)3O#tz+CPj!4;pj1hA& zX4RshRFlZO7w4wM#x<|uZINGvV5z_qx3N-Rw6cWUm&MpT&TD|3Sxj`5lq}DgnVI48 z(0?zH-j@!Nl4cBi?s8<7UT5GYK%Bmab2`??N!Q>I$qD+HMtLP~Pv)(fE5@WWFnSaj6197SRF?>Y zt!+86fg$t^?!XvQw=9Ab9>%j2)mRXI92vHf*iIV(E-K#;Pzio*>IVU93OOuu4lDtkO41}nRM|O7L3y&Br33spVbQIrA>mIXTcGw{TMBFu5(ql3Pfi!-+VccJ z@eSVBH(P&SoA_Y%6D6(Lkzp0|UPKqPp0aXc>C)q15R0o1TDty;qwSj4h>YXTne>*ty|sc@lzUeeVH2poAkm2Lxg=j zE<_Yr7^hZ@bSWKNd;I?|&7D$A$aBQo$3FB0duULX`&`<7V~sbM<>_oXO}LcNBA?R% zpICce{5^$p-|ISyfeSd~0iL$o=LpV#2TolA8-Kq(?f%o5mjNAjbQ0=z*GH^=1~;0~ zR6u$2^t6)QR{=_;^D&7~BboX9jUbZtB#A!KXSNC%;_>% zWooMAX^I9xCeWhtIzwav&@{_-{|8t0>p)^S0rv+W_74_D zi?Dp8HQC0?EsrWSVTCh>e+-Ndg48IPfQ1Sw+W>6c5wyn9D8xQi%`paoq#2zORZk39 zzSg|PLtHbguEsB+a-n&hP`%zI z;%a2nx+GU~Eu!p-pq|k6q_Dk-N}}x=bYXNYGv~P3N0=&lken6+Ve)^xyxKZDrWL*D z)>|H(NGA!j2$TWJEkzRS-rcSehKYYwwY^>>DO^i8NvZRc)C$Ktpg;h-A{8!K#f<_p^>cmqIJAygU4YHHP7+EKbA~2&7LCmr@O$i-FdHcs3SsnjT+MMZSp=hUpXnX;gr; z!c!0<1R`&w9ux*JD`-AByX0#-tsyr+#E2CwQ!$WL=uYK&Br<~Q9K7Lh z4-oy?;}Tv2FS$GoY_}LIW)z?!kDRKhb95ap7$78+eY@J0`%J88xsn9OzGpzj1O&EQDUk( z@1E&#ysPtSRZdK`6b~|%xQvT(QxE@<1|31hsO-*4$c>BxGc@jCHI1dflH9MuEXP%~ za*|ly-bzJ|>z!qEo~i)^7=IRMp=PSFXS`vTq2{+66KJK5C6d3ReY~@VBJYKzOTfY{ z77F?mR68o;$QU9*4wHGPp17=Y7u~Fdu${JoBS3imMX5@HK|$>lV{5FDi;w0&Os{+= ze<158+n*qfCf@9RI6sUtWdM;ZGTn#A*(=-&9uC^XLHs&(0Bcy&GVw;s4;LKrOY~nM z@D2gq8gWZZ+kT}IhGqbrWXT}{+olsXHI?^g5a%FOV!R+vKHDQhcp2MzP~YAto3Yui zh=7XAFuk?Ej<96Vm0>k5iXZ8-}K23g7!Q{)`dJO-B~=os8a+T8*5uy2 z9Vg2L>xS2AT5Sb#RBeEvaxZSE{|yi^gh5k{pr)k^fj*Hy5zJnOw3!%wnwVLTmMZG7 zM^eQhG5GO5C9cxcK zwgBeYKCtSI(gphnK&ArZ#+IQ6wCW#F5Qu}sYG6=bq{=Ufw_lM>QHnE(aGhwk`QrkZpt8$r zJCw*E52hG32@TE5njnHP48c?23btvUydA$~)rMeM?UY!~IU)uXV!B~-=w@U&UAO}+ z4iXceBz-8Sge=3f^F;tI0PRs?W!+|N29~^(Bq;J`lPf_EJ)5|DV@iPV)dbdLT)Wy58CY6=9b|wj=%A1i@7iBV{|b zO;r!@6MMY|j9jQ_5+7ZVcA->^9mW8VVaw29zGInup$z< zloz)_Y!~u93Y#~92LQ&xPbO%%o%z}l`^8E0&0CbjFkg zaD^IjKV{g}>JSPj04BXmcF8sn2CtU&&I-D&lx;u29@~U0DOg$ZYQELHmXE;=Z@}1b zb=-BiaOiiam;Vl@Aba&TWIa>VBRgphlKl8t3&E7le!{s$wlG{zW$?XJLcGN4$SQeS zal2G0@=t+lf_WMQ!w~uRCF0lw0siP;n!NPw>fdA&5jC==jpWM!15M{nRUi@kkVHzA-FA zP7Y{1JhKr6mw0pUxFRbxfgPksj+39is7R-=o57R!tlk$dWpu{uk^mqV2NLUXa>Rbo zE0v5CWF8PWsY9uEDD2>bG9qDaF+L=+a1Bd@0*s^d_2A4J0+uevm_$F^Q~_ffz>Biu z6bSQwBIWVnjYbzZBlP;c#4skOh~8@dO$5XmwU$E4#ltondFGU)JnQI3Z>fJ2*ho@mCm% zC*!qm6u>$#7fBj3<4KlqQ#rwo_^R`0Kos%>?q`0x(%u2 zJ57W@RNRkd>yZf1kg>0ROoq>f2P}m~Oa*E>6Xt0{DloT($IFu1_(1#+RWl%ht#XyO<9${45Q`jMZ5Y?c@1h10 z(pc@e4)tC+J?7Q`V(Sq#Wpi2qL$XsfaRAtKYcag(g=T1d4(gsCr7(6j^ z)D?FM3g`y9WH)+xmN6-l8IZ`K5|fzhc$Q9qh6HdyUK0YO)bTvvEqJGLLmbxY&`Q5@ zg7zFmJ)R5>H}W~(Od!+ZBmW9)k0CI2KlgS!WE?=JGtQ^qB{6zjM1pbYG%8Q_5&?0>4r+yULP2ZWOV*V{=Hn()JK@J4O$hM*EaEOu^+n?S3R3M7b|Rwb`{E~epdDEp8L z(xv&0w2H4fNtKRnYg@8Jz2TH`Ewz&nCF&7Impt8^Hd{6tKxvO8S#8`|9~Uyz5# z%2i4D&%hCoZlY@21=vkqa8pZ~3d(K7(gh2e3Qjp2`29# zs*n>~D;qrYF3sG65g424YVSt7v~}|9I%ii@PMn&0?ONAXu29^Si=L3XE4IyrP&Whn zR{hqj49<)XhGMsHeu;1DGt-x9q{57B`=~0hv=VwjO7)>1f5YT`bZ2cXVcL_4j zpYptYI+Hs{y_r}wq8J2b1&msB9v1P0)ZnbDd+K;UVc@AJVgaVyT0o#xMfSuKN)XsX zoUs+p1T{Qcoz~wMcTl~4V?9LfC`bpoz(g{^Azzw3L4k{r*1}%$>b&H>t5nF+UanxX zhFJBTX%aX`@V`>fuV<;6<~s=9lJIDLdPJ54$E!>PQmI&~@t8vZ3H&3LdxbH}j$Mah zFht?Gg#o43Y$Af|9}6HzVIQ(`V4ThKQfM&Ee}a;TyO8*CR75@e5CWz{vf{0JDQ-S9!k@cG*dYEIF^t?1lOqiA#{}sFb1;IS_>qht>`Aur=j_Gh73EJp zX0}dE&q#{-{-WIlY9Tfz;DqtS1cNTB?+gp=7J#pV(iTj4M}X7qF}Orve9C;w>HwRwa2NrQJ_s}OqGBs5t%-#^4EpR&vG)8yH-VU%#UENhXnG%4 zaR#r@(1KfkWOJ9de*#n{lpANl6Q*a6M+t@Op+Sl`OAY(!8y8#T!R2PMl|UYS$VA%Sv9JZFp$Y~f0|L=lcC>?iM}zk0L5T! z;ll6;z(AT`#J70jT~b>ha+klJ!UMlpb*foumz^W*{;?=4zl>IZ(p1nLGXqh4Iinx!?Xn^PjUr26PjM zCH|?1A;__TeT&6>t0ilTOm*kTAvQ-%Z_sc^!q-aQ9|Qn`#QW->>&Qt96tWTKoV z9>WHYPVbC;kw6puKf{JapumGg^%Jzk1o$bKoFN7zly&oAsmu$&)jU?02P%q)B_|p+ zwh@Xp+L4PV#D9a}b>aYZT@`8wTNnKYP;6U`tx5t=U<^(%7<_skhOjZC;X_USp`!lzL5-5Cedm_z#Y zRV|b$kSxhhUtt75GZ}BO*$yq2N5>_dj|om%_LeLcWXqSt+3v!s?%? zv0J)Gy(<)AxrnHi(6Zsd342-ihu!RRO}k4rh;@SF6Co(5IGHT4oWRSCqA)OEt(8{D zrs5s5ZA}8}O0Aw>|D}P2a*waCfU*a2yM))12d=B6D`-DC$iOvhT%1&RhwCQ-(bT`; zPm+n*<8E7c51(~E4<9l_a2SooMQFR31(STm8fW{m%vbV)PlN`JX@RyC*tM<>7jvk9 zn6X1IRgAOmq!|8sDAh_j-z1gZMBg2gWm!r5?eYDC=4xH5+pO$6KD~B6` z>X|Wxz$+LLkp>SE{K}z^uPa!iTktzv03o3MIJi*YrXgE^$`6gt5e{ z?yUpr@hTHg5cZhglA%ibfW0hswZlrH%eOWMEy_Lac^G6$2ysm_4af^+nuOO!D-ux= zC0W0Ycb2=zvWcXOB-Jk9pOwQm384hOvcXm#nTiI!NNF#9PIQfzCN;UY7u&4HlS14c z`n%GUj`I(Ua6>ENP8wTV~BlY(|jt7En4llb+>h7WCo*fH zDNeQCk0wI5_SMapwyhb|{a^>HfJ`fso*og#74MqV{Rw3?je_o`ftbUB!%^R$u|587 zd1lzW2VSJ{IJedyaOiM+A>WTU)SWPg^b|&*Hx(D+#4>><*ZT-4nw^J%JoPu2i53(p z3VIyVTv9~>#=pDHP{mLrhbrZ_8FN`t`!;0h*-2L9>mt43Ig;V)9@U=4 zY2Kzq6Ye4GtJ+OL0uu%)#DlRx9LpuHI!*JNK(=sAl7;wzxk=>%E3)zAN1jg6#l)$Z z-;_#m4@)f<2*TF+8$eJ=#>!PyQC%KHa@^)5{g1;pK0bv*^Yiq(4OlSmMn7V`Zw-En~tTviK* zwL3|12C;B0cp~Rml@`N-Jpx=mB%OT0gW(c=`(%3mocPSkraZtZf1g0GiH7*&$M-8=zJK;M6i{o}70E`WZ^7p8Ogu|7QR|OW#@NyYrUIL9T((z9=SQynIM51lL`x6!EiX|KV2oj+E``v zqb(01iqU5Ym%8eDc(OJ>2Djz9jnAjNigYyD@(L)$7%02&%#B~iM7ppr1>2Ufo_wU4 zufJ2tu(6QVnS9)WVsI5llNL)CgJ1jZe94CxNNoZfYXjgT6iegvnnx_P^5*NcTq_5@8a8`j0U%^nY}zEeYd54QYG)Z7R%kjWVI;A+X5BnJY` zq}V`2(FR*pJo`ztS6`)6HlUmW74VNC-|b6`k~MmG0>`(q+){8P@xq)9J?q*kkDI%mP1Gj z>^yv4D=!H!5VGOJ?4v&B^AJ`-LhZ80R5ZVGpd?MkbPNiXF~h)w(q%WT;P5+k(oRb)*mo7+$Brpjf5wip8Sb#z`yteEvUK=+n((?f5(%ItC#(6Q2Y4JuWi^^7B zL5%<27fn4}zq0p}*}=f9laezqkgqTfwh~{CtOL+~F9f)Yu}6=^fbrnRV5^4+1=%+| zr~p+1lqQ;O=Yi1iil_~~$D2viTi;~QbcW@@@>>S!)4zDTA0c29#_w(g>Ja*soV+O8F$wir{%7EJWMN*~5*W+w%U z5!`}irWl%9;v+Xvy?iTZ8nKe(SsQMUCFRBT9G<4A-8Kw*J%i3=?DNT37^XyG7vI>3 zOizb97v$ne%ZYk$JvV@xtxQ?Q{0>%^HDPVOA7 zWTBD`Of1z^iZc)*`-N*fv6zB7IzNq2o6?zB?7|fkENmB)FK(eoVVXGo%qE5igku)& zeIcdEb+L;A&OW=0A&J9HuL2T)un;Y@$Y!KHI~&bPo8v(0hBqN?elz}HDOTq$nEt_c zn1*8uJ=NknHjK)4$gMslJ&w))jT(K0A-_%NpY0iB|#MreO=4(S4I zipn!&{cDLQpvk3SES!iiVr;5SXlM1=yIH1pQG^sSgBHFbEd(vy!y4^+Y>Q}u#c~Pw z19`Ctc0l6`f)NbbdJZrneas+|STRX9zNEzszyLZ(ObfUV&_wC;FsWBpS>pAGQAgM# zF$v=>iK8wS|KBn4)+td_i$ydH_K_sylh!T7k4{EL`B-lRC`$#Fl14eBMlWzh>=OqEPu%d(f0QQ!Dhc0RUJRh+)v)yFP*rE1W!H^ zaI|jir`bEsbfkO0OA4ai%F%8j5~unPk`Xuseip`Nn? z#HC+Q(q9}9z8_U^Z}2?x;m#ge`F)|(WqyWoB{QLnM#~c6E<(mPno?Onz!-Y(r~AOT zMz#YY+CbiWZ`=(?Z2c?*$JsfKAhwdcsD2q)EV&!r)=z>ZN{N&aDl)jYGLAbJBQdag zX_&s;(1QeE(yo05j>v0*^e_myC_##w6qH;;{*2Fg7#V0*EhA_G%Ye;Kyk-$$U^@&I zDPVUXn3Q9SyO|yEO=yFG@{j*GuwDaUerD{Ztz8HI8i)ehwOki84O3QDIh`RRhM4ov z1R_Th6JFTcZ2Hof;?dp;#^39jraUQhInAqvt`rmG1kerrkNLk25hF{agfAFMh@a$< zu{FYjo#1SgSU`h;R_ReBB}tp$BSa1vL61g&J_*+if^Rdp#LKaCu7HtJ!BqgwL@6iud z7Q=wJTsW{pL$w@_qHNcY@f&*6P zB1U5!-_p_Kw8O#~`_GE5~bki=SW?xyQv6v-PTB|GWXvcP-_Ll&PRD z?~{mCWwyiJX|jg-moOC)3jI%WnN}Gv=t}d zq6I)K=`3}$g~dp?T$u~iTG-$VPFfx=C%F2YOmAAl4wU@hk!c9;ElNfvXwM9hLR{L& z!kTvwg#FW#khtRRe6kY;f006_ z)^`9)ap9U&2EZjkTH$`z*}R@RvCS-KYF7pW`kqLZiD`*GM9&dT*v)?J(pC=o)wDnT z(*)kJoU^SN|6x(0JR^mkIl?$+7UB({?HAhW5Bxx$E_g)y2+` zINMfk96Q#AdB|)g#EI>rG*Po2J3Rg^T4PAsCV$}=~O4K!?90F<5~ zs~P1<^L7TK%41Q}aG*b@i?CGa&{u}S+SGFbDGNKaZmit{j3-jG6VZv^xX@)#JZ2CXPYo6a67|>s#iH@>L`PczDl@9HbceiF~r}@Xl^2 z6&;e{N6UZCo&)f>%K>&C$aFw@iarz5S0(7N?%6oiiBGInN8zl%(lu+^H>GYO#E^rW zM6CLS#)3xcbh;#kJZJ^F0CcmPU*XA5{5lNF#%Rr$D~m4rH{)gp{h;QxpV4|EgRCQ? zn6j%@_7x7qvylX*RR_T26r4zZDEHihqm@#fG8yGmd=X0!ug2&;!{&wz4Nc?@8GSa% zK<|w39s;~GT=9<$4~NUR1lDav^SCojF{Z5TKB0-@oP0YGI z(G!fP2mVpy(m7Y3O_K)=I~#7y#KqewBMrrnl4~i_kQjvFIk!fSH_A!q=%zK{MvIjk zfgT5*agS^@0BTCgN+mh`LT!l@(n>fvW1t!%2|}6>7l96xHgfeGhNAp~KqryeGxZQR zL{Fl}qDgu0iE_3!+g5)vqh)|T0nj&ci^N!)|2Z7R=^Tne&ZjCidHteB{La#@gaoV< z;w(`lUk4n}PmSSWwMKV#{WkdU#$r8qO4T0aw@5mn7W0U)#YLo3dXb>qj>SlQG>0+r z8Mf5j*}-~elw7j)L>4g+>^}XG`pgvNy)_mPdsNx^6$u_<|4d#xy25tusJl2eMelKx zChOOFdOd~l2C*JV&Y6;%#t~QxbYb~mv$xNDVv-{dHsc=c^CN(b(Pb5dRgSy3SEm)? zG!cNCCo(GF7_8E|U}Cx0ds8OhKph9`#BoY`?OFNkBf6+(KvEMTQ@8^jxBTx~s{x@U zW+!H+x+n_K`-A30NsA;RKpKK3@8=fdz^|b~6dYp(TS~a$TvbA)JR4<^+3IU{i6fJJ zJwbU(^h-Ky%y`;?M)m^4LsE`~(R1Xd)px60B;$jhMpW6bo)FpW3NHluN!IJDV<;6g zTzn+7zp-A76i*QPk!+Ie{(flGqxh4CW1>vBTa7f|r3z`KI$sSCoCYMFAaLPrqL?)T z-rBf$-568-PRKw|JtH^gvT6jO7(zZy2YiOvJgQE^WP6%2hxbNnn%4KD5%*3*FcN{2 zn<4u2i!Ba)nL5^*!#qAS`Hm0rCKXxvM-)!B4^Xw(_(rmOb7rmQu@@w4w&-YoCVQ~BW%4n^J1NhrSx7UZ*K$r=U3xX zsW@pxc#k5f1dIqERY#wiI;Bt$jmotGvc#pqKuHv&1uLNyQ71oWm3hSasWgf{jz`4* z%<;_qoW%yMd;zcq48jG3UvDGW!76}iV`PgQK$=9wmhC#(+VulVTSB)(_R`-|u89xW z%A!I*2W2>c3@fhi1hrN7yds%TU~AR_^EfuIZs1E89I61EOD4Tn*lBG$maJUTk>0l= zRm2a-BAe}UbC|-DubzZ+HTwgKp(uvuwN8xTPWXi1GglD+p~Ef&$d0feKtm{;-Fn+m z`{hRvWb?Y~zW+em9L%r}$(Ay30wgep2;&faZsP@aV#2ksQgZSNm)1k}p*B9pUC(MD z6UC1y^G8Zk1;~)!)dfW4){^5EEpDsxL%Ur;i+D5l&I-Z5^7t2HObf6Y-e|I_arwZ~ zC)^#Ql>l!nq}KJ^iWonRdB_Gi0gqjITES{u9bj+t<8&l1z_JpJjw9l*ca69W31JPU z3Wrj~fn@w|;vQh;?a6}>99RRV7=OZ?DDVm>ZbHe6yG|>GZYpjIf`)BsS`x5|H-?^62B2w410>;M6GZbodT&( z`s{##G8tX>4n&*~ywX5ksV{J0%aak9V}7FN{9{N8QTdFS_KdF?hHzwQRQY%YkEDjC z22z8@7FS43H~#9Nuw5eZ&X85s4Z`lWJ2~Zkin1&KR|Y9%OmvZU*^;fx08ydifEMv2lB0>U$lnwJ?NMf-sP{11 z5(=Ib5tVHB$vtDFX)-S7+G%e~cz!Ovh&?MM1qUA5+qer7m=$L!;u*!o27?7sAoQb> zse!zW=fZkmsN{b?`43;z2W!xdU@qt3qWKNkzH0&KjzhD~8DHQ<`Od>g!Do;vad;Jh z8#JCE2d1(%L8J=_90um#JJh|%8N3q9u0AwIPg3uZ)g*XHP_w)0+FZ-f!-`g(Wo2Te z+3!2BDoLlENR)%81w`)z^R@iDy!GJ4cIdF{m0u$Wa$xj|_aXIXh$@vMB5kW_jGW>C z7=`*?2=gAu$kGUDKQYmWbCGA6HO*hjKzai^(i zpQq6bB?}lCXjDbyUfv{;vX9sv?Tz9CE*Bm{nbqci$W*hqRjfb{D4)i|rFdg^exQaH z+Nk!wvk+WCo2hW>mvE>yhDL?{)>d%5;@UOEwh2Rz6&5K%@=w5a`Fzo5g1BXbVor8s zS2#lbycy0b5_M$e1<0$g8U`#%yIHIl9Z~mg-`|T>g$rMRGIgWL;OswV5aD@{S}EPa z3tvL>0ob%pW%&%7Axa3(3voSN?;y*MS5VwEMjeJB_YhJd6k-X`3DT|QOi$~qdn*N~l{{Kau9^Hy&n9gkU=2LQs=U)hQ95M$s9y@x6nkIKH@IVmS<1TRof z4{I06YprHQWn^;aX!A`MDc788r}0?k(I~?ekS9}FYCI~*eGv?6X{k*3e1^MTY#sXu zr(w8pD++Yr(S&Sn9C3;eKpbUg5sS=TAh*N^lpdbf-oA7m@5#2F$EXlNkYuzEW)+*6 zWG)}X1XIMyIMmxFKX#*NOjY5hQ*+uGRzfpJeoaj+78htkAW?582^mIN{e%4ngb$$E z`g}y@4Y_3W$80iuEK}jcdj{}x*7Rq#-7p~zTiqzwk_sF<(VEc>9XCpjR^<%;p2g3S z&@d}0qUU=%Q`F7fgP8@AAcw72(vUl0 zEosrl^u(e-y90tp!4DGC7}420YIYx!r3>*=M1wK|vdHGyplvnUWhfQXLdh9OT@IxV zQgDSgK|VyloRX!I^d%A}U8=c^4ofeM$jDbd$;m_KMh5NFuEJ#SnKG`&sa=H801$Fl z`7;&pH5gd2G2^-l1^3Qgdz3BlwKP>THA9464zhknhvtfmj1ZReQXc_bgJ+6arNZ8Nh zXXhCMuzgSeCPP|GP@rmlXp-R%@Gb0#zgW^VV2ST}D9Jr2`AZ*=YWCd~>silw?a4*# z_Eo?8P>9==lF745$~OVs=M9m9ZL^dz$r%|7`?@o~9B0nj3fHsvo&+2) zUcrIDU+XA}sSFvx7MLA@=~&q+pOamx6|S~4Kd^j7Ete;|i&47Z;Ef8?EtsV?)n8ma z;_b=y!^3z!k&gyZJ09cgayqqoH~ZN4B@=pS{>EYNCZ|o`soPQtW#%~r!-Vx)28X)e z=5FKH>5e(R4B^j}gCnpid*g%^jacuhk=lcenepftz14;}PGDKlS$ZWiW{u|snZcKh zZ5rYvxG+XHje)~A7+^1kLX06+Do2Mv#l328V=x#P-19KLHFdFXg4|ZfkPIu`+32|qoE!BzA41h#L=O`{F-g~Fv@@C2msq4 zY*5j9F@t4>^g#2HHzjg1WmQ^R?F&4<(6-PKr=Q_*r8A`KO*T#i+{| zUzfr&)B0beeB*AAnPzAgNLX^jRJ0Xu3V*8o_rRPgG$2AE!g6u%=n2T|K3fAI`UV00 zC*%klP;w>iX=%y^!h$FMMl{*IQq4UflQ|P1zJnA~kM2*dB$&?-1M_SzEXSAiHZh9z z5sm$3`Kfp}zbtPAte4|ryiXxxB(ws3zt&5JE{Ov{;5uayJf0R$#B{z1D7WT9g2}_? zh}=^N&(xy9X@Ng5qW?bGfXC4r7eWSW2>rLS4Z4n zkZCE(<8G4%r3j6h?^lN6nLF<<(9dCy!W08f0J)$?RPzR2oKfT0zqIlQz86(okdY}u z5elq!mccG5$itZ& zJ(8NMXR5tqVZIk6I!Ay<3Q` zo&YrOx_+Vo+tB<8sTLri$bP^gSUYh1%V^;0YPh^m61_kzu_$YZM&3r{VXO-v@Dc*& z3CsKDVMotdG-<6wYBG2eM_ z4@_AUh6$44+@fzBUz%nrO=)|*YJ!6;sc?x%r@{>gm*6pNPrzoloL2O#F(v{Q7H^D8 zEcH2y%mRuKlUgAjCL-`56f;Ksjn22cDYEtE|Yh#w2<@O(w?&#f$t|LVQv(9{HhTmZgnzx!p8W zV6my1VmrW~X`+U#AqmU<+B0l6B&`Tb7+hD2{x^mYFA0KW-UI|7>*7&123g2qRr}XP zqWtLW9E9e9drKTu=3k|4JXcSHc{|b{4QUOi>SvZ>2tJV~#yv*sbwc#qzBX5|ytZ3| zB1eq|j#3dG2Ww^>9e=h^)+T1ox^#dq!ben%stU;?OPT#;ZK>8X}+r9mf z78)463Gjj;X}_AvdV!#_oDhr(2AV#epp!HiL0NHxx~O9G=2~TXNN6v$&(NS@hYI@( zMppOukdC}5VMbDJxlGFAyC?W100mvJ$Wi${*lr(rvM`6%q)UM`-C`xt(swu{;}SHqF@>?wX4v`z5^_A^k;Ut%oxS@IrNukyVrRe8-*3R{BU`r8dl6e`6l6i5XSibD`$Z3S^t zVm{|3H5=_QUZssclnlTJl*^zH*#dEfco5+w3_-p2U#uqcT1B|69TIhvvqEl-`JbL( z6{_9c9QnrC5as|%Mw(|HQhqNJY`3gWZ$VNJu0C*;+WfwDQIan3KMks^8K*|HX@}9` zjf^8dJVVig>@qOiD5ruoYDmF)G-fvEcS#yV6b^x!WD-GC8a&j0j3~v|ATi$p#}VR0 zKkZ9lIU3YR=q7M)P*BS(ohSZWtC|P*b~<}m3toJDm=p?X646je8+2!*@)BB?P>l{{ zI3-7w5_JF=&2FX(=oEf}#AJ~uJWOeM)wdQ(QNMAo_--N3ggmjQR;$ z9b~v{F}T?a=K*Bb%4%g+oyNp+{{TA?@~886R#j4q{?go>;_fP)+E-NiY!IFy$7PtH zC}c0&(#LgKfV``KYc7-{z{TQcrNp7Ppwq;g5cb*7W+Q?k+OGvjT9EBbBnjQ%O;D_F zi^kxk*|TRr2A^Irdvg~S8*%uj3DM-I!aQk+M^t@4wF&CBHOFLA=puHYc!p~{SMNGo zNdKUUdx^Yh7*FcnB&i|NMWUll2tcry6a}(Oa#b2{Pn#^YH%#(IY^`*M4GUw`9qs~5 zi{#XLfdG>NT9@Y)cfkb6%?ZaR!?ke4pVxRB8Q@juX2r1z?`5lA3EDh2Fb=m7$FJ}7`e}R?jJMc zJUJ;=EJ_&@uMO7=0P&aLRZOo{yaXds<=}4`Wi3BP^zx54smy@)2aVPHC-PFSn0!NdHNx5)n!K675GY6AGI`mr*)`XIuX2Ku3Vy zx0>Obv^}pbr^_g~xi{NpZ>H>36ouV&Y0ntKJZ%Q|QxW25RgwJi)q)F2`F)jBvXk`C z6}`$UTCZqI^J1b^Y%Hq66&8@qGR{ux^F=hr>cyTi`DohBm}xIimFEj7OwJ071541v zk%dVChkRiINt;<=q6+db)F3nn4w=o_f1(Dk-T?`al=9wL3c@=Wz~ERT2PXtM!FQ&9 zopT}Wh7pD;pW*t@fOS3pabd8n%`-)vZ?zd?;QWX@IYLBD)H5B2bq`x>ufv-caR_Sy zYCC9?db8Ids6)XBEf~R(qJ+4~@0)69sJjL!W=V(&l&c}+3`rt_)7L~tjpelTgDN?!3IY~3lRN=V*51@=+_hMyWNK>jPCq{H#( zGamfw#uThYDGH9=V6;$3_JtUc9MzYNTvbuD{uf4pv}x)3)yv&ADKDxuXvl;?z4xqS zI_0Ih@&WE{Xm^hT7B&NzmpjUz(2iP8#P|T_GCyxJJTU@H;0CM7Y?H#i+XWd?;L?M) zum_uA2K5NPRx{MQySPN@P&)sAV}lCyeJ<5NZ~5@}V?g9&@@)zKx(9kIfLhmcsHICVIRN38*D(zDs#XJek+%MEPLW z+hoz@q+l~EKp0(XyALWgzX)f$^bOD(ffK#l2l|L`b<#t#15&%N)7qU-Od3$2YP(mB zv`jVCViRc`CxxigY|!(h>*VKdCNeq4V&fPFQcY5HF*$hnY{MpRIr3W95VYz&8%mbN{$Ae_Mcxn#f*UN3gIlJA8Ar+eFno?ZQHY-dUxCz#gNH7>7pslAt zE`b*9`g9ZHMTYJ(LW86QqA_K@9p6ARQI6g!ITExzMH&{NY=|$}y-?N_v=`|z<;6SY zuV!Cq0)xyD%sitJi9rew0~YqCO7;5;Sve?;Fy4kzvx+2yeJ5=t{TfsnPccH^=+^hG z6dJ(c5A(oi*y5hcB!Zis_#Zu&5;U)ol*+dw_53)YyKj3+D5*3O&>30P>hDsm@XB-LYUnLe%sa{5ij)9fu%$RTQm515N7AV zI~FY*&h}Sm%(*T+zI9k?4lvSE-#v0(ua{|+o0KilU@;iYIU!d8{BnP915-BiB}G`9hNq&PJmcBQ z;4Hp{g3qOknI@I1Yq367nx$GfOPGf8W(?&XQPG#~hS8!~VD8FwK9mj9>Rr7Uf?e8|zlYHwI%XjoxBvb6UFq9jliX_Q{YXSd@AW>a))@ z0X0W2_hHBVdaIb=l2L<7#xiEEtHc=rLlWYyS65C8j*SYZumps>@FOP(xGSBtk z9VJR3G@}?+h+?_0-@wR!=OA?7CdZnXWy*rjy%Q+P&cyBNb_WwqLUM1|M>pzTow!`p z!b(6S1sORZ-ggHURM4e5Kp4#uNVtDozZbY$AP$`f&ARAHjw772srG za5P$TLwhmD`C{XJf%Nbw0c$8<^d0ALK;DrGmSE zgRF*;$b5NYC8(G=O~ zoXxXC+72N|gOCf;l2mlhmw)-t><2qEJNRV{n7~e)` za4sD7))#oijlaV*TYvo5#)sfhlMBQZ1Fc z=>fFpMSD~VQP;ajsu2hRzVvNI6&voMzt!MuMy;9V*(k51x?CtGZ=6zPh>a^oux??*n5%I zt%bFQ7Azi;s5rzwcfcjs0j+X2czHM97#!BCAZeBE80V-0o-*f3l!{uZ8IAECMHJvb z77*$Qq@jY$SQ5hi%SK^D;-mufFS5P&dDceWTos}9VKvN@j@yq8v4;Jj3$<_R^7YlA zn&*=1Nj8*EevQhQLPYXY>?hUnz6Jte`r>btG2!hF5P0=<9Ashgi1%NT;>pJmGUnZ0 zA{rtm361I!nuBZLN#i*IvqIo)j`-gFEPDget$9PFQs1O-Smrc0o8?NYSIk|n!wc;= z3lu`qGalk1jhS*EbQ?)Wqs&`1frn#~WvRx2p&1;#_Du0b43Stl3 z-P=^>Z>x2DiUon4DYTqo+c_~uJ>3lmxO@huvUOfToF%h1-e&i$858~c*h3CF^l^9R zVWc$lElgkCAqFFbbGn~SNofZ$lvI7L^bkVSxB3VLCfDpFmUyOVH0XdQ=cNb^%%Gq* z<#CQ;R7yu#VeXs<^fTc+C-CEr^9HUjNtIam%|qA7UtFcQu?xYEPIl212nf32fPm{C)#bzki3tOcil#sV+qI*lrbWx-WSJ5^tldkD<-O=>fTaxL!IY#+tcdqie4%a2 z$Zwk!ckev9$} zndcOOXtKSz)q6lFE;n2YvgbjS;&K zf#cyt<6@>Zv0@=I98?3AV}n_{O)JL1J5&a16a34w$@bZc;<^XKe^h%PGVzL+dqy)% zv!8Rcmsihk=;zY$)nxSp5V|pPyChDOB{L$$JOpE`sKGZI{(xyO!0n&I_#Q##O`_x@@fHd;!VBq$Ik z3mNB*iUGrcu^9&tJ2mcxH?(;;=x@|&KZ92n0V#^Cb2_kyFo+e@yqDL}UQ~L*pNawY z;DPGU&WC@p`$$;g(mretpo7K>?Z|ThQe%BT`d;`q#RiyRo+G8;q;+UdXh}4ac72!O zOuOS)R$4)k$wen%aVZ9akvRa7N8Ls5VJKf!my1#ij!5jAfRv&VQHszfEO=z^PTnzW zXX|`AXeBBA0vd*4UKW@sygT0=kqyy7K>@%m4qq0$zoZ)p;ZQlqDw#T5qXmFt+n-VS zkZ&jTh#)PUMkxsjC>ARTEEdUvLG&$3}H8nRFSkUx_gd@;ET*Yvbe9f^G zDd`k%pC(@XU;I8#Mh>R}qEMX?YP3C5o$-eYty;`K(wswCT2vd5)w}~t`DF;&#p=@> z$PrzM#fhFjx~fx;;*R=}cOac0J|s9VrSDN!D|CkT!=AZdO%>2TV_fpdv6k z))n^{W4Mu>a!^ov2il++7}i$WB5Bi7+G@P!X526E74B*^p#HF&apnV3a^2 zO>d~ooBA=F`+hMd-tD>xywl-K21ka}d{zRtdSgrpk>ZV6u0x0z;)e0{0al|E`YkG(y>gxlaqUV+Oa}6=8PTogKD5@hN(-IX+>zZDnwnIh0Q^l9qtyy7bWEsJA*iqtYcKSg=AB3 zD?2ldZ(-2|0=qRKT0`iHLiz(%qb#06sYczZX zvtsBoQ2%2z-=&0lIlm5?olG!za|t?RV=l9l5+96^$5GE&U|Hj^j7rL{qI2EqZbxf&h18*FE`oh{;F(jPvD@|XTeNgc z9#WUALhKr6jr3%u%PfV+o)U;ZPvFdTNdIYSWT>;GvDZqB2dPCuO9olj7O4c%Fs}T3j$lkAO@q4< zz2uaK?%J-kW5Z?Z3Q^foJ^a?t;_89q-@G_a=!5E|U>n744`nj5*v0>+@3iGL?R+XEW7RW4G znfXFZ22>g-!s0b!B1yf~GWnqcGve4w5Xg#P(K~qlVdZfWhYBNMt6<#&!fBKlr_&!E zJN^Se6dJgzn9nvJyCCMA2SNnZYn-9oc4xMwB+;~h@sU>d9!U!Zb?g>)6Oqw?9;q!SMD6M-9DxV& zMFBNbS-(#tv-pE8;?WyWY#@yXoQT84x}lJMzAYialBs&OYKnSg{+a=5Lf0c*rqkt4 zf*kr!3M_f*W3@1fW{ZqqWB<@oD~Tryqm>KA1!`UIUkS%S!FfJ(%jQxmvGVBcZD7m&&isIE z<*!7LXQ?*~ws2$C6~AsE zlW7*TgA7@dFw7?#l)T)MDNJ_d@lrOz>KeAiEF2#YFxD;k_$Y_t66){TO-NiSJ)mHgR=@uS9>kE zlmq9*8-9}TAW0>*7$((_x zQlfvk$RGvt2}BcHu(Yc9J0L`UV-#z$xI^#1ld^*k_C{8SRcU^xIO$PQ zbBYV|^YP5REXQGaw$rY1lj{M&p)o^Z&Z#7Mxq*-=7vv`T$!IYfgahz^w)XI}_G2l- z&(zbm4i_dAGR3b>apvp@ra15W*oC2Am${sF~n86AR0da`4A?XRC``Y;n6(G@MXBbQAb zHb@E=hYcS-H^Y_!tKca;=g4HGDZ4R{5F_wiJ=?|ii>1=WmYKM27UC&kks06;_i;E- zq7w_uEsF$pG7Awx*)55(b)A?Yph0!qUgtpIvN#oVRR`0Rv9T}+k^0vQwm$;a%1&X0 ze>ymHz@!9R2Qe~UG;6O5#Rv}#JAxFg1>${~zFe_?gV9)*O;2cOPyJS#&>)>sBanW)IZkPavu94F*pbYx;tfU;5pBML$b%x8-IR zW#4s_N#DD*EP);tN9j$2t1?uc3Tm+^vRT3|BIZyWD*#16y1xqO$VQ3IQoT$98k(=h_;lDCW8*nDBZQu|!l`nQ!Ah%hqRh?2b4{7L3_;@HfG z7D6^jIFpG6*>5O#AWWwz6@+yjv5~=>E0P>cB2?6nbXgQS9ny+cvY?lZb1=XKnBr%P zT|Z8xL16#$$eIWx*4jxp01mVlr|`mYN@4Q0M{HK$bk@EN}>lcRr6Af z+i*W@OAv^_NZ2{eXOS6VZ0&T*aM3v0=kz=#ik>$@xs9Apz!(NUT{*^TDI~(VUYh;I zkopBYr5Nc&v=>qg^`S8a6PI5-mZ1A}O6?>CNaNHlVEf}o#{OzeZ_+*&`0TuwWSEBO z5w!}3fAU*mi_P{E!4&YbSY9D>8a*8l&Peb&ADbFMAgk^m*qxNH<8Bh=@^qBNnuY;%yLfLC)er>QabrP>!^za%vmN%0E|A6ETc*YtB z+M>Vqm;eVrQqaqrAyW|w>Q6YNIIx$8rc5Z-xT{4Z5Lo!Cjkf5X@{9s`DRID5uNz*Z zCKHehk|y)|zE;IFKhI*0RAqMsrK+EyyJpi-z~^lDnZ>nrsHB2{gVF{`wls3N!UUL^ z8t@dPR79n&%D?3#!p{eXf>9uB0`2q)=m{lCmZbDD*DwKWa$x6Y85ze(NwrjLJjw{D zC2TGaIXBjhnRy~vIH0ePS;Y;9O&6= zWB{MT^N>`G1hp40-;D%dBY=U>+fn>IjaMiIoIZ=sec}6QBIXX;{sOVYd4QoH z25$KBS+jh=H4-zGy;!R;2)r<5OT87F5i(ef%-R0c zq@+BkJrWn=!omDngZcVRJHC;ZyG(-n5tqr{pZ*V0&rNyKo5-go)*TV|2njhB9dxxF zkXBvd_GhaWJcC{qXljqK&p!5N3$WPx0ADwjXOuEcU@LmYk=V8kf=G^j;3}-u?|vws zD@w!8t~!Q6?)jIR-FT754Yytq|3BGA2g+MV*knpjJm0Ffv=}`p^L(Z&)g$WAriwYa zCtu_4TjYADISS#w$l}T-B(acG^L$fZJ5kXRd6p)X9$38%x50c!sxiGKc?itttbLfXqm6S>|M>-NT^A=#e)I8D2a^*S@$u) zSB3}Gg1|Fr;bdDyy6kh289j{_WiVgFfWb_(TYIuBz3u{x3#vmJhjt3utMmcosSbb zN{W?}sfYlsR++!CvR>z8E{~H)fK~tu@JZXQG6k$#il%KrJg`P-=B=8GZ>4&PP46&R ztSM&~0o_uzJZH$YP1tK2B-5~FphU+pH-qFElL-uHxFxl4@C*sTQf6h#d48{-q7cCL}BU`n_&nc`Nq9cBP?bfL?_<^Wkv)HAP?vdiJRMN@2S(d z#-=tJiG>kRGTubFynz)CZHSe%QBduIw&*^^?Fe@Ka*0Km`Yqv(V1_071a{yASu#h7 zcImkOwiBq*1o9)e?-arcwbq_^U|4|rQA~$ZS^G_T5R#3@hS*@!_db%4`F2s-B>6n^M6EI;>SK5b9dN zW5o+z(CUq`0y~K45hlENXQa~$P!9(cE^Z{k3=>)LA}14%%n~9dsCK z;BgDE#9JU^p5BIAy&yP~BA0AOsv(@Pj-;3sg8|irOHWxU`nRD_hYz&R^JrXc(%g@Y zNvQk#iBwW1AM@7TiLi;Og9RQtj(ZnQ_glh^WEtGmJ;^>kys}ySo9(gi1;BPEUNAr+ zZeh@8H-GR4Du5yxOxaOcN8yseXWs3-A?c~8F5=eAB%9bU7!}A+9LW;MiAvR?NVQuN@XpAJ^XwP-?T-WBU4if^GC!e17>Ih_QSg_&Mj*&|5@kiz6qMMr(E5g#+U`b zh>!shDMUOhe*AW9IItK4I>AJPVZ`RJFl#lo@e-V@I|r+L0FYe~KZLNslsc=C0=w9a zX49v!l3KI0ZpR>b&KM_)>&A>#iyts)@wPhqur82Tf#H^_Z^-I;_4d^67qu8G(hybY z2;ejpIf@Ng7VH8T?7*%@ve^|5G91BJtM1H<3p*I$Nn9N_x61jK7?32F*h2QH*rIOR zh4z(erND!6NR*4e0^N}^gMrz1&R3!OV65r4<8&I4`V4qFuCrtm4YWi!olMdnWiC&6g^!FV+6uh7t37bm%1Ju2ZlD-oQn6q_>I0&ZI ze4rxw7raN>?jAK?afC+{d=IHFnH4xCDjP$6am3qW5KZe(c#2Rmol zJ<&i&PG5siRgDmpW8kt~?PM@cTt$PzBa-4xmDoa_|JL=;5dtTMDuLM(tB0o!5jnp2 zSie2l{d(OZ^#ufx+)x+;gu^{csJb7(E#v7+3`R3(>*+6{7Vpat9yESk zs6tEQt@3f)p4#A|pwC=`)1MD`b6TjBMm156_(VFZY2=8epVIo0(K;=SF;K7x;t!!E z8#tSr2IEpbv>HoP8tL(1&IJ=14TzT%{+Hm%>LNMklwmj$Q?X{SNCq}#OQdJh0E9oi zK^c*ZK}uM-kmI6T`cND!2n)FZ{OsE0m=lN`|tMI4lJ9}B$&fWLVz#RmI){ih-R^vFk+D$OV)HWvl%cp zr3x?-VZ@u>P6W!8x3Y>3kH9gWpb!n9!3NJVFdHXPYtt)@7Y~RhrM-&Fa8y;-ik^#| z0T&<=VPFN|c3wV?Cwukjpq>7KB*&1Z=Z`;bh_UGMCD)B(^F+~)Mb^+EiIK2=S{jle zuZW17>H?cdR(CJb%oBYui?u5FuZ&=t+Rz_)_14f~gX|!UImck6Sdb zBTH(F=^nXmWmQ@-;ys7425Ac{EE8pkV49{E76=!42RSS)kr7f{8X~Q@W$3D1J6Ks~ zOa&h>f`2PSZXe(~Y{_TP!I_<^?lwhxfFRJMzyW(ZfLvk0b{+vI+QX%Um*HnAK7#bOUQ5HeezHv!Wed<9caj^o27;zQoCJ-K}-INc9s79^(xbsz!UvBLp%9VNm~1wW6Ly)W;#oJA)i)}U}X#hT2T~SmlBEuzY#`fcE zLm<{!vPPJrMqDkBrhvDmO}((=U;O!Q#!KVdv|ga1dB;KzKfj0S4f{iwFQJjBo!H;sLYs&dgbC0XG3KhvFDbgn2=N?DAjYR+1U1u zSr5~z%#5|k@(Vhdtekvy2F*Wyi%ZIn0M!4ytc!ifxJpKkhF&6oET6n0?zG2`>Y4@~ zO3JW$_-Hjn+4xm^R-uWv?<1_hX<`|Qc+1U4RN}bUkm0&XZzuLvHRo%GAe9agq-<8VnQ3t*j2iRADFcs;yYGT5r4T5=>qvw5KurwIAm6 zyCW#k${>8T0G>4jE6tiKG7++e!dqHq)ft3vww2at8W|M%^wHVD+0)4spxL4SD7`{WWbq(8t570$Q>w`n{BDPE~=jN>KYqdUMR%Ah-I!Cqh(E+}`h%n%XNIz(&e2-Nt} zeEuDnz(fw8nG^HOtZ_N(PU7LH#1~kisBTZi)N0Z}NRb#ZAgTbrQ{tJPrLUs%Mz3LbdjTu6NQV?!w2Uhs zKo0}fI6b#~1K>~TuslWb@kgtu^&mhn(wKV=DB$K$cw?tqkex>5A)JA^UHm#nJ=u>5 zOcE5FXJ=w|!CnE82W;u^k{*`Db>F!~i5(z*XAB?O9gcKP?t@UMLUEn>&Ai1T43Iv0I?*O## zp*Y!+UlNHg-cesH(;OOUR^bb$w;qb3#=5I+Hloho zf)$hRiY5YWpsQlSg=ILn2@=5ZjdCQ3IJFp|=PHd;w0JOKYavPIMhtOj;sgrS^5+)M z*tu1%Gza)-{qd; z@y}><1gS53g&c&vNfOCwd?y|hX;35mrpm|@k@qWkATFJRCU2KL7D!C{XZOQO&1}v0 zatk1(O_TLr82knW=K8Nsu)Fe33#sZ?mRXS;D##jr*yWGB=JA}iiC$cXpEAM>uv|kw z$Xgk;bulq9CP#>Z_1=S-;yu_tBViqheFl*ARh z7J}2KW2}JgXH(x&B~r1PIskOgg;+BG|1!}RtlZG=yTj~IfF5LsEV2_im35r}^F!x| z7X|mc&`-|}`-&+S(jJ2Ca~DuwHywBseo!!~Ij|!_Tt>*)D;)>+XcY*Sd)|lfodnsy zRtptdyOdy`?oLSV(-oCc2FYT&dGsYx^iY^c831#>c$E6t9-3t@;>;o+elTYu0Zaz0 z)QJ;`y^9~4qg}keon6yXl-bsjN(>iEZ$qX!8VtlrXSY2QT-ca<<%d8J$YYcGZaomK{5^c z+wp%9rZ=L5Bmi=3Dg{Qg3oh4FPdCQMW{ifSj5$NQyfX{Mslf`g> zA=S?*tD(gUsR`@3_+U*m)2N>D4}^TX#7F(^cJ2@rL*RtyX%Ptjf7?&Xi<%RR^DP<5l&#v4=O^{b&?xBPwnv6En07chbVZmp@KW4XsQiUL~pu zueHFkD%Yswe7vds0<0tmUBjT{w#1BihMgrg^AaPa;r8Jevv(=8BZe4>!nyDOzhtQ$ zq47|DCL)ptV@w=5Dvb)7Et04Qc8h@r(sU)24v$xb0_g0dVdim*6(ic!3p4S;Vr zfpNaj+^l(P$%o8r6A4y7V$p)_Q^(9pH0wu!kzp0qC$8%LoT5@{Isso?JEQ_=kg>_u z_&*Dx<9))nQR<5BGDnhUS{L039&nz}7iNBtHZ*RTzvy+QMBmC;L@j^Ph_4HJ0s z{_q!0D8UWNb))}CZ4!t{E7kvEFigZgO*%;#QeA_b_Fs|Ey~t8(3h)$o_NU$DMr#9v zpV6y9va%TBLv2AO6|dVxaKFxLR!E}Y7qN^G5>NZeWCn4!%b6Lrwtl*AT4_hKJGzf5 z5|pTv%^cd=9oUt|=O~aFd52h02oDC6=#S{B2rxpis&6`Ki+e%Rp95zHFPDv4K{M#d zVrs~=f5ke&K-iB{wunnhhHD#?=kEF0a@>}rD(EI;qz7#+BT=wPwKqopl(|!Kdj&2# zf_Sw98>b(#3`A}Rbb_Oi6Sg!Hoaxatv6q{u=uUwe%iK`y{5l0#c%fjJ4Q6jyP=>cw z-R8|9D6oXv2Cwun629X|d1s0>m^F-s5rzNNpi!s!tpq}lg|etC4mnK@NVw!-8q?#I z2et+cK%NwO2y!O9YC7^56v>mLJEOvy^x+6yMwPl?LdpJt))J!Y6X~d5NeP8XbI#Mx z@NZT{m&X1VA~^%+$AV$&SA8&b8e#X8k2^14wr&s8U);;VNc4-0-Wo}XXWQHasWh(n6zvF_k`?(=}zR!PM@}F$;An zDQxu52l)_n{YCc_Gx zA&9beOzX|#I7Q@%sq8kj&xor5!L*4hn~5hYB43qnpy7uUq+ODEe`#|72m%!K*}C!( z;y0=M^0@459MU})LJ>c>eYN|hP`t$;=H+00+{$om2plb@;$!-5OYlM*9JYf^QE<>5 z$bxc3hqLLMN7hx1YYQJuVQ))5iA>K(@(UR<9VjqPTFHYz!O$5iY z`!F+hqRg!uqtTDb?W>sxFV;*SLE1G9DSa#BqA(JuYn=@WqFFCdtCOK4mjkr}8`z<* z6)4C3zfg=^DP0{0r&C5OGtL*{Xj4 zBHBn}!dy?oqHOD)rbh^^vEx(A50+al@fx5uW?q+z;}P2FYfXBhj3f|ydN;y--V8<= zT{sF7>tt9Lr9;<`A}AvOAfmwhP74JQ0aF~B!UP{0xgH<{hJSIfXg08r#A#^Q!$28| zf-SH)6zmu@qEHeDTafbKFW#I_8qVc=)vrz4+W_v>5OJ=V*03FgeR~w-+A>xy5b}H~ z>K37Qi8*F{sf>%|mpP4gi#(@+sY5EObXz+d$gOIJeo)CSQOFht6k))aa}?s}DJnq@ zuxn+5B({;N3}aack0&ayv{$IQGJSMdZZAJ%i3JGQNOYnA zhGQ-q?~ucQPs89FMIr-z9!1KL+>{%uESTfm8bd(31^{YrGk$au5bx;AtI<{ zZUrxpXMq)$1^+A7Qw8t(AeWB@ypZxCn=2^@X#2bGP&KeapC{x2OsX{@4n8YqmbVWL z4rSf^V~`v=7I&WeNof$2mCLOAk7WHE2}-^0$~234VL}u!*+L#~hV$w<5&OPolofPE zJc6ziC2kq7foI>`ol1~}V774+FDyI$==;@AhBG-P7*wAdH~?dlJL?v&3H;5>N{h z?f*?{;Vx~@9&>ma`C!Fz#pfD?EKLk>F>JipV>=|tItg#{kDoUf3x`luaTF@&cmQ6R z{*z;HkeSw~pXk>vEj%8R9!@&+PkK<2w3OpBqAb*qu-Tb71r?|o0#d|-hitYqAslG5 z59P*Q(bEw5EY!pnCZt`AXiSxs9Bi80w_ya$tb-j)=)$NaW0@)qIv}qf#Q3Z-P!LdA z?OLMFJzHVR4!DVS}%ctav^C8nJ%G-4MjoRFDVojAH3 zVRct(sKQYBQD%b^9|E$$A+8)&^5U$N!-v+Py#+M{0>q3(#T}TNi?qp<5%HQg0ms(j zSOB5Qd2zS}!D>=YNO!^Agdz8eHlZE_z??KAfsP&LaO1RwxRDZ_bSadzo+y-txQ4zg zZtQKLJ~%cc5D(Hevk*|5%jFi#=b6RQNX$6qdkmuIz%h_Ii8+fERyiwN0#b})Vz+eB z9SbMw2gnqO{jM$WAq#{;5`l+}M^4e*OdFRR4xqcARLGsZ3It1-%&MgUW?OSIOt+iA z0s1{bl%pXV>@cB7TBHm29tdsUI;0d_Q13f}+mTud6a&DZdRIMiCewL=YINzq@I|nx zi*>I;FUnG|f{TV7_I?E&)CK|Ro7)ID7`dYKY2RVtmb$JkE|$6)cfi<7BBS)j4eBCM z6`Y`Q!Go+QL|wgs4`&?@)Fu()nAGGIH0+%QBOp~il~%UGnyp3LVm7X9SADdM(% zA4*xNocib^tX0U!J1#+@w^36QH0pHU;D+*&h9tPIv$|4C$Ii9BZnW)+s|eKr3Xv4G z9qVy`i7ALVbiVZ8xjxW*M=gG4)Dj!1%1Hc5#`HG3-7S|YiWi*`CDKX(K=L0TOB}2R z2=-u^h|>E=zzdjN48s2cx}b5_uR{PB?tF0#5aS$Vwxpq3nJL+cC9Wnvkxc04;$Ram zE4>g6QBmvh z0u5+6i98Hc$GPBYvQIem&06w?sg07Cfl@ck7*f71uR?N?<|`5dX7g$%CAe{EPV#+f zO{U-z8#lFwrm4)2R3>26asr|oeA5*FiNxAhrYJHJ7X<~*&B60WsA*3LN2<^9z%f`R ze#@KU(&0q^W6mFgL@OmYv8_0OVa#R%#PF16KndJwSht~d>yeu3jN`wa;5vlcG<>+* zIWM3ME4RpfjX0+4R8LRSpHxI3_E4q(CpKg#J$|?Q-dz96bVBiS7V4W*&=o=C%%iag zYJE?vg}0VvwxArTQs`j!Hj?6C;R&R#;6GK^C6}DZ2zAw_l}P3TqMZBhkUYB66UT6i!2CCp}IW!5nik8+GL#}VIM?DeYx$Y%x zdS+RZ2SKRr^3Hn-ppV(LDQ-P(qPo|&+njIOB4>{K=$Xc@)l*^Kn9 zY?0=dP6$|J<$@Hb0sYEca1NLvogb?(68{wJm9}`8uq|*zVG!N7EF`M?*+%flwALd? z&7#b=(8QNT5=GGmFculiuWjuB0=n9hw=9yN*t(9k_DrMcMP6hs+2)9cJljmK+X(5N zG_Si#K%q>qWN=4&bj`%UjUE&~1f#ed6bNBd)DDL0@l+^3%O%1@h?H!xoY_2sFp$Uz zY1Xryulz&Q(qR4)e&k4Vaw<1mA1ame*i^O2m^6q~yq5Z;R6B4%FfUjL(GQ-iYEeW^ zykVuvqpkUNWmDlU<*O5ScJyD#1WC0m#;}EPI zR1j}Y2!d!gmvS&ZC2a#TW1!rd#FoY7sVV50?sbFUlfr_GVQHb*)Ndl0Q+SoSu3OS^ zhAx z4*~bO>DHENH-(>9P6~Ns3&rJv2aIC67B`#Ui&4Y`451K)sZlTziG1^U-oth7PXIiY zw$XG{i|z||8SDZ7)AkaG=q0(q)WicQe`b2b`!(IYZ@Mq2H}hIq&jL7wiVdg=HHD5P zFFes&c2-&m$fHgdpJ>%9V^-v&5CM{(D3}y+Q80rD$#(qmJ{3Eah!HbgIT4dUD~@ey z?Iince&iKQ+l1NZ*)*J;9{8|X%uh;c?3Dw{z> z>m_lZA@hTaDGiw^mi0D`F11T)rBv&6%PipEvFY_RVPTH{m5)J zvjo08n6@57cz|C$CuS50ArU! zcfpx8)=h-wpfQIpE*KiIcuI3{l!1o@!b&dSD78PT{y;otAR(l+aj}p4`xgoT04Pm^ zstJ+(j;s$mJ0poixYGwKp}h4{I22;Xl<4eIRG9bvy&zNw%;UqVUtKgc3egstUv_$bQMSU>paKg0+%29Roe!wZs(`zkT z``XoGE#966Qm@pbr2hgGQ}T%PYc$@TEF<>AxT@IP)O*G}rOOBVuOs%CC1&&5TNrH& zOXlWlY*l#}1%z%!kAh5-AQ)Jbj31N>fRIRhAWEkgfIYsZ@&*P4jGRr>0ZDuT@fz0w zwm7e>$KuFV;>iHTld(7=0HjsL2h-;nID4VDmzRpxuof&!6ZttJ#8>V)!8)65ok1Q) zulgKo8W*tl3gh|NuS4>`{#yALXM`w8hfwZ_cwSe7%?LPgMZ#&qFX>y zX_I*DLF*O^oKeQEkcTQKImanCW$?eCpVIOSr(9*{=qR#!DEe-fMMGW+!R3Nkac{SE zWzfskMAYqMzZ)x+VN1$a!UcqOPmT7vLZ%S@O9$4kz(4gV2GEUpmbQ1<~CW5XR@)ouHA!gAPNA%fvb{&(P%h@ z49qOcfX?wW!(%EU80f;`E(xD{JS}QdbhAg`@zIaQ&FO}SYl7^C52!Au?^g=(?jAho z=QPn4d&r_m1Q4Mq0u2TL6q zJ1iR-?%kjNrQWP;kpKTDWYDW(y0XTdsPaJcC{m{|9aB*bor;Ylf<0}~jBySkg9U2S z5`YY>q~{y58zlbYS1*vDq;d`pHY$B=!b)0d@Lij)Pjc> z&EC#N!{S)cS7MN_x27SV1mh~5_Yv?&{Fq!@I7Nh{ni#l%Mct~Ohgtw#(M>#6F8s<* zFEV9|oW+j*-8KU&GtDZPP0XS~C}t32B20Y*Q5tg(M+X5$)g!?#i-5?c5YYn3nH9=J zFo;+Ur8~n23I#CTgXD~l@}!m@0W_zK1zVrI;tV9$9PC03?z&;~i)P2753SHU2MIL8 zjiGUP+S4%gz{=U-`7O~O2noc6nT^G)3Yc8P+G^h+BM%oRtmD}1R%5eiW_UsiP2zJB z4npZ^XH^s-Sc@NEA13WV-gEM1e(Qh3POTrPAA9WafcY zJrrczgfp3g6)8dQ8bi$^f=^j@hOfQsvqtmV`s2oP<^VFEt3&PPsxZZ(lFkiOyi0dO zq~3Y*c*jC3BB!SQ-K-OW0p#MgCm}EmbrQZFAvo#e-XS`H%5qo_>S|JkF4h6aG2n?%~OCTiLmx5d>Ifmcv*R2-kZt5wR{qw zh3njr83WPT;=iV38Gj43W=&&=`CL4)0MjfWM)1*(;5c3@+!IF0wXhezQXr8(`6&S) zdX{wzUE70`s@ojf6HBG z)k)pn(0GU+o#R+D4usR=A&?Y8h1PG(Qq2-DWSf!3M0{i~RLTq}g%n^M0{{>voDMMy zu)N*Wz7*zc;OQ4lEK6}SvEiAAiC3bCl8_I_v6s`?-s?m~d$ulocr;VJJ)R;N&U#_D zvm7{k)f%3~4*)2dh@9}B0bsaf6~R6w4sgS4{aLzmTz2z{tp(rTV+SQ9RwmUHTU65j zsJO{L7-%%7DGRhRe5y=B&R%GXMT=OOkQ_zWa313v7y=Z<2_UtuP) zl?~=>)mBTk+uT$Edyv6SjPkd$K~;)OATlg4B4Ow zE?hOAmv_#Hy*eiin)ON$1#~to<5o!{F`o2w5Ay|D0J*8^1sIcGW;d)nEq2FzqN98y zQ5YSt$!VnDHQebV&oVl^AX;qU=`F&o>YvWa6@q^eN|QvkO`z&8kPEIm#e@x`nRLDz zJaexnGgPaP)R4$!7KVy{VoyhSV5rt5NQMi8Z@DP#7RIc9`yOnmE)NL}S(4+P!0hG5 z-o6Z%87)zSdVy{lVBvhkPs`~33KYkzUT%EX6e-g#`GEuHu;Boj%{Ic0WsSZW%w!?J z8NKnKLIH!MusM!5lADgMmyU(uX^mNo#J?vW~#x>!3v6vW?p^<31O7|ZbWdI(%EG-v9otAIcQ z_F_ET(ppv(&|^V9;cn<1HuK9)Kg&LH%g%#N0fFJt$1K7<`awUZ&=uhtef;{v^V0EY z+}}H4pP#e=AwM2FUQ|YfBp~zN9qR9gq0UxVj6u=RJNYq9@i%YBiHevb8in81$r|Bzqi7&dyt4z(N2lp>pNBgwl)VNw?s<_;B; zhJ=L=T%(S62Ts1&kFuy*t%{;(+Y7hNAj=jcs8w7Jqf~c2E<~pb3V@p=Bx;Jd{#}J5 z5y$ykOIJI+OfyMwiYWIBJgV=dUm#U=cPtcMa6W+isK{moPSWv0CuBEwc)=SwBjSi0 zw0c>gvG`$i)pVzLP%<)is|;!Fr05RC4&vZZjVchptO^U=FkXWjx}^MPcOLW_K<;=ZQL(+ZnkZ00&voxIs`e2G&i^x z;G0g)xunMBam}T6C)6^82#$AL8aJ!Azze{xe-}a+kEnh?kI=fz!8N?Yjx2oe+lfD{ z`C|6I^g_hiH`lQk0_dbcHIMZ|4g?K!TE>6~hzPI`{S~O1I+=!-&WX2UQ1BstUt}QY zfOr(tS>sv8af2-Xtls-VJwIE?sch)PcxpFGProO~%;Qg!+<`M08T++{@kT3Uct@>* zz!3vJp~x&gU({YIctVtzZ9Ff>X-;9rYJ#P1}6^9sr+?f~}5Pdzed3r;>fuJMLK zibGmix%w@jsI89V8+<{j^DL&Vw|fao*_=iJ+1(?HJU}r#v0^#t*p0TOVF7};dtntC z%gA72cJq(b%c@c_~WqHO>0R(8)y?Y`RvW{J2*l8+ z!9ue(>g{k9aU5FUTI<;Ai*}_`rH{0f;7`^AW9c-M8NJlifWm4yH@z`>QVPIJ3u;S- zX?urqAr_?XRS<}Symw|{wRt_&YrQsRoE}8eIfaohfc_~;zQnshV$$Ft`Io*_oSOpg zOO40@0E-ca@&R(SK)ykA$&oAx3z-uk5x@Fu5$7#;9=U>I69nH;7t!9WU#C&mwl&;@ zV7RM=yE|kWik%I^dsXFbL){BdR_M7K#DVBJK{CkLHHeE;nyoS$+yxn7E?9x1R6uYJ z25kg>rtb3cz$PCMe4Z`>6Mj7XT1jCsO(A|lO2r>jTgXr!$g}SUJAOGCdo)-(&Lm2V zIo&lhFXL0Whz-~Bgr$a1fV3*I$S_{?86wQ+ZyJmEqW+#o_FK^5RITSxcZ(vo2DQg} zpkG_i-PlO<6Pf0wi-*Y+&eIN?`m|J?Y+He^1-B%oqCTpti1)P!p@}s$<~JY{?rH%B zg@88Hz$uG)0kZ@Z7R1R!cxhmMJqbST&3z)%FSKbT_{)7{d-f;Ic}!#hq~E|%B=Y*c z-q8UWL+3G!^x*2T0`XnSbGI!;#=N`nyNiZFA zayxY|EVv57)()BDur`#YfFZUe@wUP62go_M#wCH$azp(79)2EW;=+bvAXD8{A+1?p zG8w1H7?h{ee@C~khb^|pL%@xT7yw0><`AAWWIby`Yfoc@weq>V485}ehM`6$ZCXv- zSF!Vr8p!y9KF$+ooUuE~!>zz%#zZs2m%kDHflWBkJZ+aCd*qZOTpOvF47^ihO?C{rX~= zDD39-N6Z4?bpoCaI6xPJ{QhO5y3aK!M=|*JlB8#M*!U*`$D5iagK+y;82NPCK5?|tzrhPEX~a4J^yd8In&u$awIAPZ)KU-k?^>r zenXeMqkx>05~_-JFbxx^zvjwF>zf8L8*XFTCSDsIn$8_JFAIfC4k@xuP(f?b3miRZ zY?MQ``;2tK>cZ@e#3HbSpg25od>w~${XD1iaW6?cPM(OVS_hGPu&rcDm+S+3VmI0_ ziM9rGS+%7DHGlNrwjwG2Pc&!f=(tBNU+?*3vz5_>@rD=Qqe9pY8d8GS)xaP`(4zB2 z4iB5)xqOR`cNXa%V;v%^5p|W!l}HA9GUdn=hj3Aer+RX}^RC3y8R`~u>VRe#Ei(xC zROzaUwO|jqJRA8D&a|n9=$7M?u#PD5K;*HVg^wOZjf*&CfeqJW8e_3KVM|nfgnaGO z+d}I|=Kee|X38$LbE5@*dNtJHfRTx9)J}l8F6?}O=_&2&4aQM}J|>knF9RVYpNg)! z2aor$MpQ( zBYXY3jwYAns;8#0!Qh*cHYm3uN;Fs8Fn!+q5NuhGlHBA316tctXqENdvq@drj#pY! z=+TEmrZ+TrMuZVn+rfIGamLa$?${F~P7zh3R1geWj+sQ(L5f7a+Coj@>6VREKoWB% z{Pr4Kw)J@mPYsoEgl zfUr@a3&S~|r{}j&in`aFIIwjma;7w8+2(O-cNfcw_hLl3B?$4TB*F`8$T0$!0s5ClTGGaHA2aH3Y76werZnEn88YOD45{U6iH zNS?p+?Lmm?z+is2V{)OaY4ZXaa3-p=fi{LYzuR4?zZ3QkoE#_S6N&210+{bVr2t5L zDf7PQmnw4sOcS&0s%m1|P`Xdnk(fC~2|GNg1uqnLd~*WF##@C z;$}Eo-@hrlsq|fSwAQr6iFyW@2}kAWkJR;|yIPATy*pZ~EQr+c)%4P^5NvsQA-vcV zSF1EEF63&ntTq=1zFUxFXJgO@U!HpizhRSDdmH*bICq`IW?gHWFhJOsoyYpW5Cmt- zv_M3C5F&DRqQ9dO2zPNCR8vT41fgZXU@NiQV;egkY1lWkac3y?46!2JbunBMD!U1l zK|UAumZn{S524tl;Z@p#V!q;^QjJn;ro&3ri-fja3c>}c$SrnMQ7!^LSGxC5Q0_$y zXjJE+TNAVb-f~7AGpMX3M_yPOKA-$ z%eBS3bF#L$;li+uOGG$3Z(&Zs^|Tu?3t!nlyGmDI%kr*p9#+(yYe*`C>+{{l-gtF5ZZP70!bQ@iZ-X~~B3)JOHcu9UA`}qzfOZdS@`fZO$Pu!m z*(EKXiot$+0DaJ4>njxk`c1Rx`fRr|+Mi*L8YQ8IA!73rU~xRVEtfCPF9kwqN#TH< zjqgj1CN{voY_N z4NQ=Ue3V2;fRXtvIJq7=#p{9WWXT$m`}6brQ$N|X%ESbD?Z93`s8IuNbq7V6%79>D|W z2m~ij@LMYPtaLtRyUti7vzQ98q5;DEqx<;E)DnL41QxWYlv#r72BlEUDCY!lXHGL; z%PvsPA%I};!V${`6FhhZ6O%|lj5Sxr+N)_E7r^O732MJ>kJdF*&C*5ERJqAaICM zJ_uAIh=+n7NNCBt@a&J007N2)DG)Uv4o7JK0_M4ak&3~RF9;V7NgP-{`1E-=8*m-C z_(9f#&__odaOs1F1{4gG8TK|DW+=?Tpd&#HN;4Q~NZ3)hBP>QEjK>-#4D(-0dHVkLA*D3tL4VLbu>;%0;oM6-#r6Qm}% zNJxo6Jt9FwDiEYgAj-q$hrbL>4$c}n8G;$G9%w&+=wXim<^%1A(hOS+8V!05wGTE8 zdI;GF@CX_RzzNU@-3Uzy#R*gjehUf(ZwCVezy%lu>{#{u3Z{G)lBacJRh!)t*T2EH|% zHh3oSrQ%)4^Opw|{#!gJwuo)jze{u`-!1#aAONO|J0IL8|8}3c4Y_UWZ2QpJ2Y>qo zZ4t75$D0Rl*I=!Nw`;Ms$s?FmLXF557Y@4tIoSRTMYtMg15jRN8_j!lgST65+j-k= zD@^NVI*_p&+Yyf|2(zJKE-nj`i2+B6>mgj9!e#S}i;c#Oh(LFMQ5@=a8vt32B6WaN zt5GYgWKaNhngT!%1H>U5$YY%*cVPBriLrH0C`PAhXfO(}4>^Hhs8uG=Sz;uJ%xYzQ zK?q|8;T@e7?1oIESJVS^;5#6IxEk|aoB^YfXEMi0nmpr$fEpN`Kj6S4y#L(*`G#iy zf#gw@k1G(mfJi)EGW`M4Y&tHb5sAXkLSfxwg6PwTokA?(6;X;_lt;noow8sP`(e+q z*2beb%ZdXS9JNuQV^HLF%NdN@Wrd|nKi6c9gW(uD*q1s{@>Isyu0DZC>As^zofZ0#q0 zl)%7^11A^opQ=?DC^iBuC~6&=FksD8bkn5%kZ`Pl6N<*8*2kB`URaGP4h^HfIQ4Rf zr2=AWqlVqiOd;9(v>k3UkB98c&xZ)qz_zD;M!^Q?gfj?}Fp%@lPGtxI>o5A-8h%8C zDR?zd2ed$M{4>Ka4}2K|?MKiRi}rbtZ9??=6RM5Ep(w9FYY+B*o!kYnF2G@`mIg+k zZkWBBix*Ig6zU+el^dFQS6YoC2}Sc^f=nNm0&Auy8hY_V6LGy2?4-po zz!G)=<8{L(Pwn84_eqb;o>`WBx_ zekF*5c<4)rj|hP_)y^fMMuosVnSSu19|B}ho=pZ3OGDj!i|gl?UPvC(L~5)7gQ}>c zP31o6SeCleX|8Cru}EFbivTGq-%qHOT6l1SJ4|*+j{Klwcz|oF&@NQ9gbLF> ztXdsXF}cLZ$B-%MvE&UNff}jtbWMoC*({?sdi+;3^vTdtQ}5P8!U2=`$YoULV2S@W zQ^m4uMh0ZdPU12w)o+lPVh7A81M7NR1M3I@1SZWF51%RuMCquCgH8FELuHSL0?_$< z{5=vpIdc25C{l-&hp7&L(p86^@1gP78W`i0Rys=7m;94}gAF)_eU9pW0Po&%i^o&ZCT zgGL@Gg95CWTk-TN!_+QCa7iN_S( z{3R1ObUX|Q<}Ud^4wQ{v9&qG(H2+Q*;AmtS(rkEgnUwlmZbq6t^e^3BM&}x^Xx81j zd44uFhQzN;bljad#k8yAa|Mlp<6!Uhz-)^J>PVd?{%X9}g5DjApC5o{+Zvw&>cyB* z35uIE@*|wdtB%`<64g1xVMT0;=G8}N+87cH$3oXL=qd)P4NiRAG?WQ)pKnN6+2Fr| zLQ0F@YD&ee+!C3M2uD}`kDJ>nQ3l0BRkYsW#Cg&EsU!v_lIY28?OI?hj0q70P|j%@ zIr(j}ZfD3b*2K#*8~+aSl1e#zn_BZIMdO`JtYm5g>xrLJ(+CzD|~2~UnE zXKR<*!CZ?<;_h2Ch-P6)48p`*f7Zu^(a&;nEdeqHixFKyyVafgK~&XQ zX|`TfU!-}FKTOA0TE zN!eSi!Yd}slOj@lc*45@h6-QbQ_stNcnlPUi`b%kQbgW-W-$W6y$!`Nn5cWYKT{Gw zvlj9FFhTb}RMVCJa=v(^M3lf1xrS#>Z+z70jJ$(5PPuN(+|L4lMuH9rf%WPR(&It3 zh^z`YjgS?y2ar|`W5gruw*0}Jbfx}%3&h}rP9-hP=wIgNrU@d@vuLudywfVi;&;lc}GjA>rY3$@2UN_0|t zmmAb9yuP6B-LJKLY}cU-$m~~0gS7}@Xb`uW73PIwfLWuRd*#j2a@CwxuLmO`lSyIR z!LIM>;Bi_v*OlZ|Fp;vit1v{v+Qe+;=|ZsGqOr)VgIl)7Y}u?^MPS@kDwL@eUvjp# ztb9K>JFmk`YP>+`0Y6qAg z>0mlU94Cwb>>MXt3?Vd%5w_ojC-s*Tzz}BxxqOV&?dGehSm6^C`o%yl%8QoP;9AXo zvvI82L1NR9CsgY&hVmyp*h6^}j_e`4iN|&D-bCHFe3En3GQ8P=d^H+=Rh1QOsZ976 z!%?m!36lcoYBa}zbTt|vpD3qWOqlRJ-lkeMT0000000000CGV>t diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.svg b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.svg deleted file mode 100644 index d05688e9..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.svg +++ /dev/null @@ -1,655 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.ttf b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/fonts/fontawesome-webfont.ttf deleted file mode 100644 index 26dea7951a73079223b50653c455c5adf46a4648..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 142072 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 +|+&Vdls@0SAya!8#E9iVniRwHu0GY;H*n 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�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%0D0!#Bo^>xe$Z4SmykflG_VnkLvLv4@e#4_y4Q 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�>=olG4!T4BYNCc4f{&*Kgc`m= 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 - - - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar100x100.png b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar100x100.png deleted file mode 100644 index 35fb5725fb4d4096c163df6d2451320bd0479fc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 866 zcmeAS@N?(olHy`uVBq!ia0vp^DImaSW-r^>&VDpOT?~YwiEd zhUY(52$cVyrn4|a)zh?7Ip^M^e1<@+{Uv7{ciew3_%rZ<07DZ4lK_iA!;DuocE=xo zl=%L;_Ria~|0NbOk6xB^ZNJT{V7Y`jUT=D#jok5r2^Us9ERa}!IrC25_K#J2nU>_g zRD01d-?3uZ(Ii3r>D&(Yruy{reXe&j$v>O6xiJ6S9j1vZE1!pL$+VllyG>}%y`GaP zm#lk)7VKcTG<{~(va4CF6T+2O`XBZP>fo8c7kpLp(l^bY8VxoRC+&$bm?RR!yu`I= z+s?)l@r+B3#%PA0;B~1NR?xj!ktgA~s+)0%qA2^?28~V39?n|X5sViPGYB*=uuKl^ z;Qu&fqj2iqsmtR|UVpBrb#+4fmKVZ*`}Njd&u*wFdNXg5)AXzN=A?OVHD0w>Ht6w- z==^qXg;z`a-IT4`?j5VM%iNW=S<<#tpD!*^FIe4gL4`b{R#H)*>QuWk(`(!~jrY6u zOj@-?argZ*p_u&Fr_NQXnOy}2~8>tv&yc& zUZb2c!RyH<=B`P*&P=^`U1OEq`$CCz5ei;HrQCH=^DZw`-z)U$Rkha*(L(E-wahg( zZ|szGYui`texkVF#J7L)`}rqslqTD3&An^3LXNxJa@9UBk-alFK45k06K&ac`w^$t z2bRN&T4yh)@RVyd?YXjTYtzRWK2;nOeH$Zuc9***UVEk;A;xQa&?BfNT~dsFb<6o% zE|qW9W-(-j<=LKEWgxl6XX8 zDbMzaRXg$he`u>+zx71~tAMDGcl*Q;)(KKFRes0+6)ITPE3Rw%`trltUXAq=!xWx; z{VFWOP#EUK*s=MPz5_6E0;5!cfsum*riZJ83IFMw^_yj#|0-AQ@(NoQ`&FqvYfl;@ fivouN>r4JLFK>gTe~DWM4fxzTR| diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar150x150.png b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar150x150.png deleted file mode 100644 index 2db71ddcaf23ec8912a06cb4126db99d3a89db13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1286 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 SdElQZ#d6PnvjVnD)IR{_U&B8D diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar80x80.png b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/avatar80x80.png deleted file mode 100644 index 57668cfba880213db8b28e44cfeb9a6fe23e50c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 690 zcmV;j0!{siP)-rI*bx+_^iN+6VJ-n|d=09r-LVLZ0ShIG5#GUM||L?9pm2`CuX z>op&b$GqR~^LD$h{ghUA{Es?7eFj@CE8dKvd^s>gGQ)y z?X%v2xB{ZkzuU%-H1me&NJ}7MLh?Rjay=6PB8KxPH4#l&uVEYRSQ8MKo&Q_n02>Df61JH1gtuK Y0B=(y>Hmj(H2?qr07*qoM6N<$g2?tU_W%F@ diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/megalist-icons.png b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/img/megalist-icons.png deleted file mode 100644 index f00ee657dae94929f258080f6b357a2bd6879766..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3641 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 LNkvXXu0mjfltC&7 diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.js b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.js deleted file mode 100644 index 18555dd1..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.js +++ /dev/null @@ -1,53 +0,0 @@ -/* This file just holds some configuration values for the editor */ -marked.setOptions({ - gfm: true, - tables: true, - breaks: true, - pedantic: false, - sanitize: true, - smartLists: true, - smartypants: false -}); - -$(".flaskbb-editor").markdown({ - iconlibrary: "fa", - additionalButtons: [ - [{ - name: "groupHelp", - data: [{ - name: "cmdHelp", - toggle: false, // this param only take effect if you load bootstrap.js - title: "Help", - icon: "fa fa-question", - btnClass: 'btn btn-success', - callback: function(e){ - $('#editor-help').modal('show') - } - }] - }] - ] -}); - -$('.flaskbb-editor').textcomplete([ - { // emoji strategy - match: /\B:([\-+\w]*)$/, - search: function (term, callback) { - callback($.map(emojies, function (emoji) { - return emoji.indexOf(term) === 0 ? emoji : null; - })); - }, - template: function (value) { - return '' + value; - }, - replace: function (value) { - return ':' + value + ': '; - }, - index: 1 - }, -], { - onKeydown: function (e, commands) { - if (e.ctrlKey && e.keyCode === 74) { // CTRL-J - return commands.KEY_ENTER; - } - } -}); diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.min.js b/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.min.js deleted file mode 100644 index 391d7ccf..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/static/js/editor.min.js +++ /dev/null @@ -1,3 +0,0 @@ -(function(){function e(e){this.tokens=[],this.tokens.links={},this.options=e||c.defaults,this.rules=h.normal,this.options.gfm&&(this.options.tables?this.rules=h.tables:this.rules=h.gfm)}function t(e,t){if(this.options=t||c.defaults,this.links=e,this.rules=u.normal,this.renderer=this.options.renderer||new n,this.renderer.options=this.options,!this.links)throw new Error("Tokens array requires a `links` property.");this.options.gfm?this.options.breaks?this.rules=u.breaks:this.rules=u.gfm:this.options.pedantic&&(this.rules=u.pedantic)}function n(e){this.options=e||{}}function i(e){this.tokens=[],this.token=null,this.options=e||c.defaults,this.options.renderer=this.options.renderer||new n,this.renderer=this.options.renderer,this.renderer.options=this.options}function o(e,t){return e.replace(t?/&/g:/&(?!#?\w+;)/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}function r(e){return e.replace(/&([#\w]+);/g,function(e,t){return t=t.toLowerCase(),"colon"===t?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""})}function s(e,t){return e=e.source,t=t||"",function n(i,o){return i?(o=o.source||o,o=o.replace(/(^|[^\[])\^/g,"$1"),e=e.replace(i,o),n):new RegExp(e,t)}}function a(){}function l(e){for(var t,n,i=1;iAn error occured:

    "+o(d.message+"",!0)+"
    ";throw d}}var h={newline:/^\n+/,code:/^( {4}[^\n]+\n*)+/,fences:a,hr:/^( *[-*_]){3,} *(?:\n+|$)/,heading:/^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,nptable:a,lheading:/^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,blockquote:/^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,list:/^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,html:/^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,def:/^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,table:a,paragraph:/^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,text:/^[^\n]+/};h.bullet=/(?:[*+-]|\d+\.)/,h.item=/^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/,h.item=s(h.item,"gm")(/bull/g,h.bullet)(),h.list=s(h.list)(/bull/g,h.bullet)("hr","\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))")("def","\\n+(?="+h.def.source+")")(),h.blockquote=s(h.blockquote)("def",h.def)(),h._tag="(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b",h.html=s(h.html)("comment",//)("closed",/<(tag)[\s\S]+?<\/\1>/)("closing",/])*?>/)(/tag/g,h._tag)(),h.paragraph=s(h.paragraph)("hr",h.hr)("heading",h.heading)("lheading",h.lheading)("blockquote",h.blockquote)("tag","<"+h._tag)("def",h.def)(),h.normal=l({},h),h.gfm=l({},h.normal,{fences:/^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/,paragraph:/^/,heading:/^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/}),h.gfm.paragraph=s(h.paragraph)("(?!","(?!"+h.gfm.fences.source.replace("\\1","\\2")+"|"+h.list.source.replace("\\1","\\3")+"|")(),h.tables=l({},h.gfm,{nptable:/^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,table:/^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/}),e.rules=h,e.lex=function(t,n){var i=new e(n);return i.lex(t)},e.prototype.lex=function(e){return e=e.replace(/\r\n|\r/g,"\n").replace(/\t/g," ").replace(/\u00a0/g," ").replace(/\u2424/g,"\n"),this.token(e,!0)},e.prototype.token=function(e,t,n){for(var i,o,r,s,a,l,c,u,d,e=e.replace(/^ +$/gm,"");e;)if((r=this.rules.newline.exec(e))&&(e=e.substring(r[0].length),r[0].length>1&&this.tokens.push({type:"space"})),r=this.rules.code.exec(e))e=e.substring(r[0].length),r=r[0].replace(/^ {4}/gm,""),this.tokens.push({type:"code",text:this.options.pedantic?r:r.replace(/\n+$/,"")});else if(r=this.rules.fences.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"code",lang:r[2],text:r[3]||""});else if(r=this.rules.heading.exec(e))e=e.substring(r[0].length),this.tokens.push({type:"heading",depth:r[1].length,text:r[2]});else if(t&&(r=this.rules.nptable.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/\n$/,"").split("\n")},u=0;u ?/gm,""),this.token(r,t,!0),this.tokens.push({type:"blockquote_end"});else if(r=this.rules.list.exec(e)){for(e=e.substring(r[0].length),s=r[2],this.tokens.push({type:"list_start",ordered:s.length>1}),r=r[0].match(this.rules.item),i=!1,d=r.length,u=0;d>u;u++)l=r[u],c=l.length,l=l.replace(/^ *([*+-]|\d+\.) +/,""),~l.indexOf("\n ")&&(c-=l.length,l=this.options.pedantic?l.replace(/^ {1,4}/gm,""):l.replace(new RegExp("^ {1,"+c+"}","gm"),"")),this.options.smartLists&&u!==d-1&&(a=h.bullet.exec(r[u+1])[0],s===a||s.length>1&&a.length>1||(e=r.slice(u+1).join("\n")+e,u=d-1)),o=i||/\n\n(?!\s*$)/.test(l),u!==d-1&&(i="\n"===l.charAt(l.length-1),o||(o=i)),this.tokens.push({type:o?"loose_item_start":"list_item_start"}),this.token(l,!1,n),this.tokens.push({type:"list_item_end"});this.tokens.push({type:"list_end"})}else if(r=this.rules.html.exec(e))e=e.substring(r[0].length),this.tokens.push({type:this.options.sanitize?"paragraph":"html",pre:!this.options.sanitizer&&("pre"===r[1]||"script"===r[1]||"style"===r[1]),text:r[0]});else if(!n&&t&&(r=this.rules.def.exec(e)))e=e.substring(r[0].length),this.tokens.links[r[1].toLowerCase()]={href:r[2],title:r[3]};else if(t&&(r=this.rules.table.exec(e))){for(e=e.substring(r[0].length),l={type:"table",header:r[1].replace(/^ *| *\| *$/g,"").split(/ *\| */),align:r[2].replace(/^ *|\| *$/g,"").split(/ *\| */),cells:r[3].replace(/(?: *\| *)?\n$/,"").split("\n")},u=0;u])/,autolink:/^<([^ >]+(@|:\/)[^ >]+)>/,url:a,tag:/^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,link:/^!?\[(inside)\]\(href\)/,reflink:/^!?\[(inside)\]\s*\[([^\]]*)\]/,nolink:/^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,strong:/^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,em:/^\b_((?:[^_]|__)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,code:/^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,br:/^ {2,}\n(?!\s*$)/,del:a,text:/^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/,u.link=s(u.link)("inside",u._inside)("href",u._href)(),u.reflink=s(u.reflink)("inside",u._inside)(),u.normal=l({},u),u.pedantic=l({},u.normal,{strong:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,em:/^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/}),u.gfm=l({},u.normal,{escape:s(u.escape)("])","~|])")(),url:/^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,del:/^~~(?=\S)([\s\S]*?\S)~~/,text:s(u.text)("]|","~]|")("|","|https?://|")()}),u.breaks=l({},u.gfm,{br:s(u.br)("{2,}","*")(),text:s(u.gfm.text)("{2,}","*")()}),t.rules=u,t.output=function(e,n,i){var o=new t(n,i);return o.output(e)},t.prototype.output=function(e){for(var t,n,i,r,s="";e;)if(r=this.rules.escape.exec(e))e=e.substring(r[0].length),s+=r[1];else if(r=this.rules.autolink.exec(e))e=e.substring(r[0].length),"@"===r[2]?(n=":"===r[1].charAt(6)?this.mangle(r[1].substring(7)):this.mangle(r[1]),i=this.mangle("mailto:")+n):(n=o(r[1]),i=n),s+=this.renderer.link(i,null,n);else if(this.inLink||!(r=this.rules.url.exec(e))){if(r=this.rules.tag.exec(e))!this.inLink&&/^
    /i.test(r[0])&&(this.inLink=!1),e=e.substring(r[0].length),s+=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(r[0]):o(r[0]):r[0];else if(r=this.rules.link.exec(e))e=e.substring(r[0].length),this.inLink=!0,s+=this.outputLink(r,{href:r[2],title:r[3]}),this.inLink=!1;else if((r=this.rules.reflink.exec(e))||(r=this.rules.nolink.exec(e))){if(e=e.substring(r[0].length),t=(r[2]||r[1]).replace(/\s+/g," "),t=this.links[t.toLowerCase()],!t||!t.href){s+=r[0].charAt(0),e=r[0].substring(1)+e;continue}this.inLink=!0,s+=this.outputLink(r,t),this.inLink=!1}else if(r=this.rules.strong.exec(e))e=e.substring(r[0].length),s+=this.renderer.strong(this.output(r[2]||r[1]));else if(r=this.rules.em.exec(e))e=e.substring(r[0].length),s+=this.renderer.em(this.output(r[2]||r[1]));else if(r=this.rules.code.exec(e))e=e.substring(r[0].length),s+=this.renderer.codespan(o(r[2],!0));else if(r=this.rules.br.exec(e))e=e.substring(r[0].length),s+=this.renderer.br();else if(r=this.rules.del.exec(e))e=e.substring(r[0].length),s+=this.renderer.del(this.output(r[1]));else if(r=this.rules.text.exec(e))e=e.substring(r[0].length),s+=this.renderer.text(o(this.smartypants(r[0])));else if(e)throw new Error("Infinite loop on byte: "+e.charCodeAt(0))}else e=e.substring(r[0].length),n=o(r[1]),i=n,s+=this.renderer.link(i,null,n);return s},t.prototype.outputLink=function(e,t){var n=o(t.href),i=t.title?o(t.title):null;return"!"!==e[0].charAt(0)?this.renderer.link(n,i,this.output(e[1])):this.renderer.image(n,i,o(e[1]))},t.prototype.smartypants=function(e){return this.options.smartypants?e.replace(/---/g,"—").replace(/--/g,"–").replace(/(^|[-\u2014\/(\[{"\s])'/g,"$1‘").replace(/'/g,"’").replace(/(^|[-\u2014\/(\[{\u2018\s])"/g,"$1“").replace(/"/g,"”").replace(/\.{3}/g,"…"):e},t.prototype.mangle=function(e){if(!this.options.mangle)return e;for(var t,n="",i=e.length,o=0;i>o;o++)t=e.charCodeAt(o),Math.random()>.5&&(t="x"+t.toString(16)),n+="&#"+t+";";return n},n.prototype.code=function(e,t,n){if(this.options.highlight){var i=this.options.highlight(e,t);null!=i&&i!==e&&(n=!0,e=i)}return t?'
    '+(n?e:o(e,!0))+"\n
    \n":"
    "+(n?e:o(e,!0))+"\n
    "},n.prototype.blockquote=function(e){return"
    \n"+e+"
    \n"},n.prototype.html=function(e){return e},n.prototype.heading=function(e,t,n){return"'+e+"\n"},n.prototype.hr=function(){return this.options.xhtml?"
    \n":"
    \n"},n.prototype.list=function(e,t){var n=t?"ol":"ul";return"<"+n+">\n"+e+"\n"},n.prototype.listitem=function(e){return"
  • "+e+"
  • \n"},n.prototype.paragraph=function(e){return"

    "+e+"

    \n"},n.prototype.table=function(e,t){return"\n\n"+e+"\n\n"+t+"\n
    \n"},n.prototype.tablerow=function(e){return"\n"+e+"\n"},n.prototype.tablecell=function(e,t){var n=t.header?"th":"td",i=t.align?"<"+n+' style="text-align:'+t.align+'">':"<"+n+">";return i+e+"\n"},n.prototype.strong=function(e){return""+e+""},n.prototype.em=function(e){return""+e+""},n.prototype.codespan=function(e){return""+e+""},n.prototype.br=function(){return this.options.xhtml?"
    ":"
    "},n.prototype.del=function(e){return""+e+""},n.prototype.link=function(e,t,n){if(this.options.sanitize){try{var i=decodeURIComponent(r(e)).replace(/[^\w:]/g,"").toLowerCase()}catch(o){return""}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:"))return""}var s='
    "},n.prototype.image=function(e,t,n){var i=''+n+'":">"},n.prototype.text=function(e){return e},i.parse=function(e,t,n){var o=new i(t,n);return o.parse(e)},i.prototype.parse=function(e){this.inline=new t(e.links,this.options,this.renderer),this.tokens=e.reverse();for(var n="";this.next();)n+=this.tok();return n},i.prototype.next=function(){return this.token=this.tokens.pop()},i.prototype.peek=function(){return this.tokens[this.tokens.length-1]||0},i.prototype.parseText=function(){for(var e=this.token.text;"text"===this.peek().type;)e+="\n"+this.next().text;return this.inline.output(e)},i.prototype.tok=function(){switch(this.token.type){case"space":return"";case"hr":return this.renderer.hr();case"heading":return this.renderer.heading(this.inline.output(this.token.text),this.token.depth,this.token.text);case"code":return this.renderer.code(this.token.text,this.token.lang,this.token.escaped);case"table":var e,t,n,i,o,r="",s="";for(n="",e=0;e",{"class":"btn-group"});for(c=0;c"),d.text(" "+this.__localize(m)).addClass("btn-default btn-sm").addClass(b),b.match(/btn\-(primary|success|info|warning|danger|link)/)&&d.removeClass("btn-default"),d.attr({type:"button",title:this.__localize(f.title)+k,tabindex:y,"data-provider":o,"data-handler":g,"data-hotkey":v}),f.toggle===!0&&d.attr("data-toggle","button"),p=e(""),p.addClass(_),p.prependTo(d),u.append(d),r.push(g),s.push(f.callback)}n.append(u)}}return n},__setListener:function(){var t="undefined"!=typeof this.$textarea.attr("rows"),n=this.$textarea.val().split("\n").length>5?this.$textarea.val().split("\n").length:"5",i=t?this.$textarea.attr("rows"):n;this.$textarea.attr("rows",i),this.$options.resize&&this.$textarea.css("resize",this.$options.resize),this.$textarea.on({focus:e.proxy(this.focus,this),keyup:e.proxy(this.keyup,this),change:e.proxy(this.change,this),select:e.proxy(this.select,this)}),this.eventSupported("keydown")&&this.$textarea.on("keydown",e.proxy(this.keydown,this)),this.eventSupported("keypress")&&this.$textarea.on("keypress",e.proxy(this.keypress,this)),this.$textarea.data("markdown",this)},__handle:function(t){var n=e(t.currentTarget),i=this.$handler,o=this.$callback,r=n.attr("data-handler"),s=i.indexOf(r),a=o[s];e(t.currentTarget).focus(),a(this),this.change(this),r.indexOf("cmdSave")<0&&this.$textarea.focus(),t.preventDefault()},__localize:function(t){var n=e.fn.markdown.messages,i=this.$options.language;return"undefined"!=typeof n&&"undefined"!=typeof n[i]&&"undefined"!=typeof n[i][t]?n[i][t]:t},__getIcon:function(e){return"object"==typeof e?e[this.$options.iconlibrary]:e},setFullscreen:function(t){var n=this.$editor,i=this.$textarea;t===!0?(n.addClass("md-fullscreen-mode"),e("body").addClass("md-nooverflow"),this.$options.onFullscreen(this)):(n.removeClass("md-fullscreen-mode"),e("body").removeClass("md-nooverflow"),1==this.$isPreview&&this.hidePreview().showPreview()),this.$isFullscreen=t,i.focus()},showEditor:function(){var t,n=this,i=this.$ns,o=this.$element,r=(o.css("height"),o.css("width"),this.$editable),s=this.$handler,a=this.$callback,l=this.$options,c=e("
    ",{"class":"md-editor",click:function(){n.focus()}});if(null===this.$editor){var h=e("
    ",{"class":"md-header btn-toolbar"}),u=[];if(l.buttons.length>0&&(u=u.concat(l.buttons[0])),l.additionalButtons.length>0&&e.each(l.additionalButtons[0],function(t,n){var i=e.grep(u,function(e,t){return e.name===n.name});i.length>0?i[0].data=i[0].data.concat(n.data):u.push(l.additionalButtons[0][t])}),l.reorderButtonGroups.length>0&&(u=u.filter(function(e){return l.reorderButtonGroups.indexOf(e.name)>-1}).sort(function(e,t){return l.reorderButtonGroups.indexOf(e.name)l.reorderButtonGroups.indexOf(t.name)?1:0})),u.length>0&&(h=this.__buildButtons([u],h)),l.fullscreen.enable&&h.append('
    ').on("click",".md-control-fullscreen",function(e){e.preventDefault(),n.setFullscreen(!0)}),c.append(h),o.is("textarea"))o.before(c),t=o,t.addClass("md-input"),c.append(t);else{var d="function"==typeof toMarkdown?toMarkdown(o.html()):o.html(),p=e.trim(d);t=e("",it.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Pt=/^key/,Ft=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Wt=/^([^.]*)(?:\.(.+)|)/;rt.event={global:{},add:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.get(t);if(v)for(n.handler&&(r=n,n=r.handler,o=r.selector),n.guid||(n.guid=rt.guid++),(l=v.events)||(l=v.events={}),(s=v.handle)||(s=v.handle=function(e){return"undefined"!=typeof rt&&rt.event.triggered!==e.type?rt.event.dispatch.apply(t,arguments):void 0}),e=(e||"").match(wt)||[""],c=e.length;c--;)a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f&&(p=rt.event.special[f]||{},f=(o?p.delegateType:p.bindType)||f,p=rt.event.special[f]||{},u=rt.extend({type:f,origType:g,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&rt.expr.match.needsContext.test(o),namespace:h.join(".")},r),(d=l[f])||(d=l[f]=[],d.delegateCount=0,p.setup&&p.setup.call(t,i,h,s)!==!1||t.addEventListener&&t.addEventListener(f,s)),p.add&&(p.add.call(t,u),u.handler.guid||(u.handler.guid=n.guid)),o?d.splice(d.delegateCount++,0,u):d.push(u),rt.event.global[f]=!0)},remove:function(t,e,n,i,o){var r,s,a,l,c,u,p,d,f,h,g,v=kt.hasData(t)&&kt.get(t);if(v&&(l=v.events)){for(e=(e||"").match(wt)||[""],c=e.length;c--;)if(a=Wt.exec(e[c])||[],f=g=a[1],h=(a[2]||"").split(".").sort(),f){for(p=rt.event.special[f]||{},f=(i?p.delegateType:p.bindType)||f,d=l[f]||[],a=a[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=r=d.length;r--;)u=d[r],!o&&g!==u.origType||n&&n.guid!==u.guid||a&&!a.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(r,1),u.selector&&d.delegateCount--,p.remove&&p.remove.call(t,u));s&&!d.length&&(p.teardown&&p.teardown.call(t,h,v.handle)!==!1||rt.removeEvent(t,f,v.handle),delete l[f])}else for(f in l)rt.event.remove(t,f+e[c],n,i,!0);rt.isEmptyObject(l)&&kt.remove(t,"handle events")}},dispatch:function(t){t=rt.event.fix(t);var e,n,i,o,r,s=[],a=G.call(arguments),l=(kt.get(this,"events")||{})[t.type]||[],c=rt.event.special[t.type]||{};if(a[0]=t,t.delegateTarget=this,!c.preDispatch||c.preDispatch.call(this,t)!==!1){for(s=rt.event.handlers.call(this,t,l),e=0;(o=s[e++])&&!t.isPropagationStopped();)for(t.currentTarget=o.elem,n=0;(r=o.handlers[n++])&&!t.isImmediatePropagationStopped();)t.rnamespace&&!t.rnamespace.test(r.namespace)||(t.handleObj=r,t.data=r.data,i=((rt.event.special[r.origType]||{}).handle||r.handler).apply(o.elem,a),void 0!==i&&(t.result=i)===!1&&(t.preventDefault(),t.stopPropagation()));return c.postDispatch&&c.postDispatch.call(this,t),t.result}},handlers:function(t,e){var n,i,o,r,s=[],a=e.delegateCount,l=t.target;if(a&&l.nodeType&&("click"!==t.type||isNaN(t.button)||t.button<1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(l.disabled!==!0||"click"!==t.type)){for(i=[],n=0;a>n;n++)r=e[n],o=r.selector+" ",void 0===i[o]&&(i[o]=r.needsContext?rt(o,this).index(l)>-1:rt.find(o,this,null,[l]).length),i[o]&&i.push(r);i.length&&s.push({elem:l,handlers:i})}return a]*)\/>/gi,_t=/\s*$/g;rt.extend({htmlPrefilter:function(t){return t.replace(Mt,"<$1>")},clone:function(t,e,n){var i,o,r,s,a=t.cloneNode(!0),l=rt.contains(t.ownerDocument,t);if(!(it.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||rt.isXMLDoc(t)))for(s=u(a),r=u(t),i=0,o=r.length;o>i;i++)w(r[i],s[i]);if(e)if(n)for(r=r||u(t),s=s||u(a),i=0,o=r.length;o>i;i++)x(r[i],s[i]);else x(t,a);return s=u(a,"script"),s.length>0&&p(s,!l&&u(t,"script")),a},cleanData:function(t){for(var e,n,i,o=rt.event.special,r=0;void 0!==(n=t[r]);r++)if($t(n)){if(e=n[kt.expando]){if(e.events)for(i in e.events)o[i]?rt.event.remove(n,i):rt.removeEvent(n,i,e.handle);n[kt.expando]=void 0}n[Et.expando]&&(n[Et.expando]=void 0)}}}),rt.fn.extend({domManip:T,detach:function(t){return C(this,t,!0)},remove:function(t){return C(this,t)},text:function(t){return Ct(this,function(t){return void 0===t?rt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.appendChild(t)}})},prepend:function(){return T(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=m(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return T(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(rt.cleanData(u(t,!1)),t.textContent="");return this},clone:function(t,e){return t=null==t?!1:t,e=null==e?t:e,this.map(function(){return rt.clone(this,t,e)})},html:function(t){return Ct(this,function(t){var e=this[0]||{},n=0,i=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if("string"==typeof t&&!_t.test(t)&&!qt[(Lt.exec(t)||["",""])[1].toLowerCase()]){t=rt.htmlPrefilter(t);try{for(;i>n;n++)e=this[n]||{},1===e.nodeType&&(rt.cleanData(u(e,!1)),e.innerHTML=t);e=0}catch(o){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return T(this,arguments,function(e){var n=this.parentNode;rt.inArray(this,t)<0&&(rt.cleanData(u(this)),n&&n.replaceChild(e,this))},t)}}),rt.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(t,e){rt.fn[t]=function(t){for(var n,i=[],o=rt(t),r=o.length-1,s=0;r>=s;s++)n=s===r?this:this.clone(!0),rt(o[s])[e](n),K.apply(i,n.get());return this.pushStack(i)}});var Xt,Vt={HTML:"block",BODY:"block"},Qt=/^margin/,Yt=new RegExp("^("+Dt+")(?!px)[a-z%]+$","i"),Gt=function(e){var n=e.ownerDocument.defaultView;return n&&n.opener||(n=t),n.getComputedStyle(e)},Jt=function(t,e,n,i){var o,r,s={};for(r in e)s[r]=t.style[r],t.style[r]=e[r];o=n.apply(t,i||[]);for(r in e)t.style[r]=s[r];return o},Kt=Y.documentElement;!function(){function e(){a.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",a.innerHTML="",Kt.appendChild(s);var e=t.getComputedStyle(a);n="1%"!==e.top,r="2px"===e.marginLeft,i="4px"===e.width,a.style.marginRight="50%",o="4px"===e.marginRight,Kt.removeChild(s)}var n,i,o,r,s=Y.createElement("div"),a=Y.createElement("div");a.style&&(a.style.backgroundClip="content-box",a.cloneNode(!0).style.backgroundClip="",it.clearCloneStyle="content-box"===a.style.backgroundClip,s.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",s.appendChild(a),rt.extend(it,{pixelPosition:function(){return e(),n},boxSizingReliable:function(){return null==i&&e(),i},pixelMarginRight:function(){return null==i&&e(),o},reliableMarginLeft:function(){return null==i&&e(),r},reliableMarginRight:function(){var e,n=a.appendChild(Y.createElement("div"));return n.style.cssText=a.style.cssText="-webkit-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",n.style.marginRight=n.style.width="0",a.style.width="1px",Kt.appendChild(s),e=!parseFloat(t.getComputedStyle(n).marginRight),Kt.removeChild(s),a.removeChild(n),e}}))}();var Zt=/^(none|table(?!-c[ea]).+)/,te={position:"absolute",visibility:"hidden",display:"block"},ee={letterSpacing:"0",fontWeight:"400"},ne=["Webkit","O","Moz","ms"],ie=Y.createElement("div").style;rt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=E(t,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(t,e,n,i){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var o,r,s,a=rt.camelCase(e),l=t.style;return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],void 0===n?s&&"get"in s&&void 0!==(o=s.get(t,!1,i))?o:l[e]:(r=typeof n,"string"===r&&(o=At.exec(n))&&o[1]&&(n=c(t,e,o),r="number"),void(null!=n&&n===n&&("number"===r&&(n+=o&&o[3]||(rt.cssNumber[a]?"":"px")),it.clearCloneStyle||""!==n||0!==e.indexOf("background")||(l[e]="inherit"),s&&"set"in s&&void 0===(n=s.set(t,n,i))||(l[e]=n))))}},css:function(t,e,n,i){var o,r,s,a=rt.camelCase(e);return e=rt.cssProps[a]||(rt.cssProps[a]=N(a)||a),s=rt.cssHooks[e]||rt.cssHooks[a],s&&"get"in s&&(o=s.get(t,!0,n)),void 0===o&&(o=E(t,e,i)),"normal"===o&&e in ee&&(o=ee[e]),""===n||n?(r=parseFloat(o),n===!0||isFinite(r)?r||0:o):o}}),rt.each(["height","width"],function(t,e){rt.cssHooks[e]={get:function(t,n,i){return n?Zt.test(rt.css(t,"display"))&&0===t.offsetWidth?Jt(t,te,function(){return j(t,e,i)}):j(t,e,i):void 0},set:function(t,n,i){var o,r=i&&Gt(t),s=i&&A(t,e,i,"border-box"===rt.css(t,"boxSizing",!1,r),r);return s&&(o=At.exec(n))&&"px"!==(o[3]||"px")&&(t.style[e]=n,n=rt.css(t,e)),D(t,n,s)}}}),rt.cssHooks.marginLeft=S(it.reliableMarginLeft,function(t,e){return e?(parseFloat(E(t,"marginLeft"))||t.getBoundingClientRect().left-Jt(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+"px":void 0}),rt.cssHooks.marginRight=S(it.reliableMarginRight,function(t,e){return e?Jt(t,{display:"inline-block"},E,[t,"marginRight"]):void 0}),rt.each({margin:"",padding:"",border:"Width"},function(t,e){rt.cssHooks[t+e]={expand:function(n){for(var i=0,o={},r="string"==typeof n?n.split(" "):[n];4>i;i++)o[t+jt[i]+e]=r[i]||r[i-2]||r[0];return o}},Qt.test(t)||(rt.cssHooks[t+e].set=D)}),rt.fn.extend({css:function(t,e){return Ct(this,function(t,e,n){var i,o,r={},s=0;if(rt.isArray(e)){for(i=Gt(t),o=e.length;o>s;s++)r[e[s]]=rt.css(t,e[s],!1,i);return r}return void 0!==n?rt.style(t,e,n):rt.css(t,e)},t,e,arguments.length>1)},show:function(){return O(this,!0)},hide:function(){return O(this)},toggle:function(t){return"boolean"==typeof t?t?this.show():this.hide():this.each(function(){Ot(this)?rt(this).show():rt(this).hide()})}}),rt.Tween=I,I.prototype={constructor:I,init:function(t,e,n,i,o,r){this.elem=t,this.prop=n,this.easing=o||rt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=i,this.unit=r||(rt.cssNumber[n]?"":"px")},cur:function(){var t=I.propHooks[this.prop];return t&&t.get?t.get(this):I.propHooks._default.get(this)},run:function(t){var e,n=I.propHooks[this.prop];return this.options.duration?this.pos=e=rt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):I.propHooks._default.set(this),this}},I.prototype.init.prototype=I.prototype,I.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=rt.css(t.elem,t.prop,""),e&&"auto"!==e?e:0)},set:function(t){rt.fx.step[t.prop]?rt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[rt.cssProps[t.prop]]&&!rt.cssHooks[t.prop]?t.elem[t.prop]=t.now:rt.style(t.elem,t.prop,t.now+t.unit)}}},I.propHooks.scrollTop=I.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},rt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:"swing"},rt.fx=I.prototype.init,rt.fx.step={};var oe,re,se=/^(?:toggle|show|hide)$/,ae=/queueHooks$/;rt.Animation=rt.extend(F,{tweeners:{"*":[function(t,e){var n=this.createTween(t,e);return c(n.elem,t,At.exec(e),n),n}]},tweener:function(t,e){rt.isFunction(t)?(e=t,t=["*"]):t=t.match(wt);for(var n,i=0,o=t.length;o>i;i++)n=t[i],F.tweeners[n]=F.tweeners[n]||[],F.tweeners[n].unshift(e)},prefilters:[H],prefilter:function(t,e){e?F.prefilters.unshift(t):F.prefilters.push(t)}}),rt.speed=function(t,e,n){var i=t&&"object"==typeof t?rt.extend({},t):{complete:n||!n&&e||rt.isFunction(t)&&t,duration:t,easing:n&&e||e&&!rt.isFunction(e)&&e};return i.duration=rt.fx.off?0:"number"==typeof i.duration?i.duration:i.duration in rt.fx.speeds?rt.fx.speeds[i.duration]:rt.fx.speeds._default,null!=i.queue&&i.queue!==!0||(i.queue="fx"),i.old=i.complete,i.complete=function(){rt.isFunction(i.old)&&i.old.call(this),i.queue&&rt.dequeue(this,i.queue)},i},rt.fn.extend({fadeTo:function(t,e,n,i){return this.filter(Ot).css("opacity",0).show().end().animate({opacity:e},t,n,i)},animate:function(t,e,n,i){var o=rt.isEmptyObject(t),r=rt.speed(e,n,i),s=function(){var e=F(this,rt.extend({},t),r);(o||kt.get(this,"finish"))&&e.stop(!0)};return s.finish=s,o||r.queue===!1?this.each(s):this.queue(r.queue,s)},stop:function(t,e,n){var i=function(t){var e=t.stop;delete t.stop,e(n)};return"string"!=typeof t&&(n=e,e=t,t=void 0),e&&t!==!1&&this.queue(t||"fx",[]),this.each(function(){var e=!0,o=null!=t&&t+"queueHooks",r=rt.timers,s=kt.get(this);if(o)s[o]&&s[o].stop&&i(s[o]);else for(o in s)s[o]&&s[o].stop&&ae.test(o)&&i(s[o]);for(o=r.length;o--;)r[o].elem!==this||null!=t&&r[o].queue!==t||(r[o].anim.stop(n),e=!1,r.splice(o,1));!e&&n||rt.dequeue(this,t)})},finish:function(t){return t!==!1&&(t=t||"fx"),this.each(function(){var e,n=kt.get(this),i=n[t+"queue"],o=n[t+"queueHooks"],r=rt.timers,s=i?i.length:0;for(n.finish=!0,rt.queue(this,t,[]),o&&o.stop&&o.stop.call(this,!0),e=r.length;e--;)r[e].elem===this&&r[e].queue===t&&(r[e].anim.stop(!0),r.splice(e,1));for(e=0;s>e;e++)i[e]&&i[e].finish&&i[e].finish.call(this);delete n.finish})}}),rt.each(["toggle","show","hide"],function(t,e){var n=rt.fn[e];rt.fn[e]=function(t,i,o){return null==t||"boolean"==typeof t?n.apply(this,arguments):this.animate(R(e,!0),t,i,o)}}),rt.each({slideDown:R("show"),slideUp:R("hide"),slideToggle:R("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(t,e){rt.fn[t]=function(t,n,i){return this.animate(e,t,n,i)}}),rt.timers=[],rt.fx.tick=function(){var t,e=0,n=rt.timers; -for(oe=rt.now();e1)},removeAttr:function(t){return this.each(function(){rt.removeAttr(this,t)})}}),rt.extend({attr:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?"undefined"==typeof t.getAttribute?rt.prop(t,e,n):(1===r&&rt.isXMLDoc(t)||(e=e.toLowerCase(),o=rt.attrHooks[e]||(rt.expr.match.bool.test(e)?le:void 0)),void 0!==n?null===n?void rt.removeAttr(t,e):o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:(t.setAttribute(e,n+""),n):o&&"get"in o&&null!==(i=o.get(t,e))?i:(i=rt.find.attr(t,e),null==i?void 0:i)):void 0},attrHooks:{type:{set:function(t,e){if(!it.radioValue&&"radio"===e&&rt.nodeName(t,"input")){var n=t.value;return t.setAttribute("type",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,i,o=0,r=e&&e.match(wt);if(r&&1===t.nodeType)for(;n=r[o++];)i=rt.propFix[n]||n,rt.expr.match.bool.test(n)&&(t[i]=!1),t.removeAttribute(n)}}),le={set:function(t,e,n){return e===!1?rt.removeAttr(t,n):t.setAttribute(n,n),n}},rt.each(rt.expr.match.bool.source.match(/\w+/g),function(t,e){var n=ce[e]||rt.find.attr;ce[e]=function(t,e,i){var o,r;return i||(r=ce[e],ce[e]=o,o=null!=n(t,e,i)?e.toLowerCase():null,ce[e]=r),o}});var ue=/^(?:input|select|textarea|button)$/i,pe=/^(?:a|area)$/i;rt.fn.extend({prop:function(t,e){return Ct(this,rt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[rt.propFix[t]||t]})}}),rt.extend({prop:function(t,e,n){var i,o,r=t.nodeType;return 3!==r&&8!==r&&2!==r?(1===r&&rt.isXMLDoc(t)||(e=rt.propFix[e]||e,o=rt.propHooks[e]),void 0!==n?o&&"set"in o&&void 0!==(i=o.set(t,n,e))?i:t[e]=n:o&&"get"in o&&null!==(i=o.get(t,e))?i:t[e]):void 0},propHooks:{tabIndex:{get:function(t){var e=rt.find.attr(t,"tabindex");return e?parseInt(e,10):ue.test(t.nodeName)||pe.test(t.nodeName)&&t.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),it.optSelected||(rt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),rt.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){rt.propFix[this.toLowerCase()]=this});var de=/[\t\r\n\f]/g;rt.fn.extend({addClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).addClass(t.call(this,e,W(this)))});if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)i.indexOf(" "+r+" ")<0&&(i+=r+" ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},removeClass:function(t){var e,n,i,o,r,s,a,l=0;if(rt.isFunction(t))return this.each(function(e){rt(this).removeClass(t.call(this,e,W(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof t&&t)for(e=t.match(wt)||[];n=this[l++];)if(o=W(n),i=1===n.nodeType&&(" "+o+" ").replace(de," ")){for(s=0;r=e[s++];)for(;i.indexOf(" "+r+" ")>-1;)i=i.replace(" "+r+" "," ");a=rt.trim(i),o!==a&&n.setAttribute("class",a)}return this},toggleClass:function(t,e){var n=typeof t;return"boolean"==typeof e&&"string"===n?e?this.addClass(t):this.removeClass(t):rt.isFunction(t)?this.each(function(n){rt(this).toggleClass(t.call(this,n,W(this),e),e)}):this.each(function(){var e,i,o,r;if("string"===n)for(i=0,o=rt(this),r=t.match(wt)||[];e=r[i++];)o.hasClass(e)?o.removeClass(e):o.addClass(e);else void 0!==t&&"boolean"!==n||(e=W(this),e&&kt.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||t===!1?"":kt.get(this,"__className__")||""))})},hasClass:function(t){var e,n,i=0;for(e=" "+t+" ";n=this[i++];)if(1===n.nodeType&&(" "+W(n)+" ").replace(de," ").indexOf(e)>-1)return!0;return!1}});var fe=/\r/g,he=/[\x20\t\r\n\f]+/g;rt.fn.extend({val:function(t){var e,n,i,o=this[0];return arguments.length?(i=rt.isFunction(t),this.each(function(n){var o;1===this.nodeType&&(o=i?t.call(this,n,rt(this).val()):t,null==o?o="":"number"==typeof o?o+="":rt.isArray(o)&&(o=rt.map(o,function(t){return null==t?"":t+""})),e=rt.valHooks[this.type]||rt.valHooks[this.nodeName.toLowerCase()],e&&"set"in e&&void 0!==e.set(this,o,"value")||(this.value=o))})):o?(e=rt.valHooks[o.type]||rt.valHooks[o.nodeName.toLowerCase()],e&&"get"in e&&void 0!==(n=e.get(o,"value"))?n:(n=o.value,"string"==typeof n?n.replace(fe,""):null==n?"":n)):void 0}}),rt.extend({valHooks:{option:{get:function(t){var e=rt.find.attr(t,"value");return null!=e?e:rt.trim(rt.text(t)).replace(he," ")}},select:{get:function(t){for(var e,n,i=t.options,o=t.selectedIndex,r="select-one"===t.type||0>o,s=r?null:[],a=r?o+1:i.length,l=0>o?a:r?o:0;a>l;l++)if(n=i[l],(n.selected||l===o)&&(it.optDisabled?!n.disabled:null===n.getAttribute("disabled"))&&(!n.parentNode.disabled||!rt.nodeName(n.parentNode,"optgroup"))){if(e=rt(n).val(),r)return e;s.push(e)}return s},set:function(t,e){for(var n,i,o=t.options,r=rt.makeArray(e),s=o.length;s--;)i=o[s],(i.selected=rt.inArray(rt.valHooks.option.get(i),r)>-1)&&(n=!0);return n||(t.selectedIndex=-1),r}}}}),rt.each(["radio","checkbox"],function(){rt.valHooks[this]={set:function(t,e){return rt.isArray(e)?t.checked=rt.inArray(rt(t).val(),e)>-1:void 0}},it.checkOn||(rt.valHooks[this].get=function(t){return null===t.getAttribute("value")?"on":t.value})});var ge=/^(?:focusinfocus|focusoutblur)$/;rt.extend(rt.event,{trigger:function(e,n,i,o){var r,s,a,l,c,u,p,d=[i||Y],f=nt.call(e,"type")?e.type:e,h=nt.call(e,"namespace")?e.namespace.split("."):[];if(s=a=i=i||Y,3!==i.nodeType&&8!==i.nodeType&&!ge.test(f+rt.event.triggered)&&(f.indexOf(".")>-1&&(h=f.split("."),f=h.shift(),h.sort()),c=f.indexOf(":")<0&&"on"+f,e=e[rt.expando]?e:new rt.Event(f,"object"==typeof e&&e),e.isTrigger=o?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=i),n=null==n?[e]:rt.makeArray(n,[e]),p=rt.event.special[f]||{},o||!p.trigger||p.trigger.apply(i,n)!==!1)){if(!o&&!p.noBubble&&!rt.isWindow(i)){for(l=p.delegateType||f,ge.test(l+f)||(s=s.parentNode);s;s=s.parentNode)d.push(s),a=s;a===(i.ownerDocument||Y)&&d.push(a.defaultView||a.parentWindow||t)}for(r=0;(s=d[r++])&&!e.isPropagationStopped();)e.type=r>1?l:p.bindType||f,u=(kt.get(s,"events")||{})[e.type]&&kt.get(s,"handle"),u&&u.apply(s,n),u=c&&s[c],u&&u.apply&&$t(s)&&(e.result=u.apply(s,n),e.result===!1&&e.preventDefault());return e.type=f,o||e.isDefaultPrevented()||p._default&&p._default.apply(d.pop(),n)!==!1||!$t(i)||c&&rt.isFunction(i[f])&&!rt.isWindow(i)&&(a=i[c],a&&(i[c]=null),rt.event.triggered=f,i[f](),rt.event.triggered=void 0,a&&(i[c]=a)),e.result}},simulate:function(t,e,n){var i=rt.extend(new rt.Event,n,{type:t,isSimulated:!0});rt.event.trigger(i,null,e),i.isDefaultPrevented()&&n.preventDefault()}}),rt.fn.extend({trigger:function(t,e){return this.each(function(){rt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];return n?rt.event.trigger(t,e,n,!0):void 0}}),rt.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(t,e){rt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),rt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),it.focusin="onfocusin"in t,it.focusin||rt.each({focus:"focusin",blur:"focusout"},function(t,e){var n=function(t){rt.event.simulate(e,t.target,rt.event.fix(t))};rt.event.special[e]={setup:function(){var i=this.ownerDocument||this,o=kt.access(i,e);o||i.addEventListener(t,n,!0),kt.access(i,e,(o||0)+1)},teardown:function(){var i=this.ownerDocument||this,o=kt.access(i,e)-1;o?kt.access(i,e,o):(i.removeEventListener(t,n,!0),kt.remove(i,e))}}});var ve=t.location,me=rt.now(),ye=/\?/;rt.parseJSON=function(t){return JSON.parse(t+"")},rt.parseXML=function(e){var n;if(!e||"string"!=typeof e)return null;try{n=(new t.DOMParser).parseFromString(e,"text/xml")}catch(i){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||rt.error("Invalid XML: "+e),n};var be=/#.*$/,xe=/([?&])_=[^&]*/,we=/^(.*?):[ \t]*([^\r\n]*)$/gm,Te=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Ce=/^(?:GET|HEAD)$/,$e=/^\/\//,ke={},Ee={},Se="*/".concat("*"),Ne=Y.createElement("a");Ne.href=ve.href,rt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:ve.href,type:"GET",isLocal:Te.test(ve.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Se,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":rt.parseJSON,"text xml":rt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?B(B(t,rt.ajaxSettings),e):B(rt.ajaxSettings,t)},ajaxPrefilter:M(ke),ajaxTransport:M(Ee),ajax:function(e,n){function i(e,n,i,a){var c,p,y,b,w,C=n;2!==x&&(x=2,l&&t.clearTimeout(l),o=void 0,s=a||"",T.readyState=e>0?4:0,c=e>=200&&300>e||304===e,i&&(b=U(d,T,i)),b=z(d,b,T,c),c?(d.ifModified&&(w=T.getResponseHeader("Last-Modified"),w&&(rt.lastModified[r]=w),w=T.getResponseHeader("etag"),w&&(rt.etag[r]=w)),204===e||"HEAD"===d.type?C="nocontent":304===e?C="notmodified":(C=b.state,p=b.data,y=b.error,c=!y)):(y=C,!e&&C||(C="error",0>e&&(e=0))),T.status=e,T.statusText=(n||C)+"",c?g.resolveWith(f,[p,C,T]):g.rejectWith(f,[T,C,y]),T.statusCode(m),m=void 0,u&&h.trigger(c?"ajaxSuccess":"ajaxError",[T,d,c?p:y]),v.fireWith(f,[T,C]),u&&(h.trigger("ajaxComplete",[T,d]),--rt.active||rt.event.trigger("ajaxStop")))}"object"==typeof e&&(n=e,e=void 0),n=n||{};var o,r,s,a,l,c,u,p,d=rt.ajaxSetup({},n),f=d.context||d,h=d.context&&(f.nodeType||f.jquery)?rt(f):rt.event,g=rt.Deferred(),v=rt.Callbacks("once memory"),m=d.statusCode||{},y={},b={},x=0,w="canceled",T={readyState:0,getResponseHeader:function(t){var e;if(2===x){if(!a)for(a={};e=we.exec(s);)a[e[1].toLowerCase()]=e[2];e=a[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return 2===x?s:null},setRequestHeader:function(t,e){var n=t.toLowerCase();return x||(t=b[n]=b[n]||t,y[t]=e),this},overrideMimeType:function(t){return x||(d.mimeType=t),this},statusCode:function(t){var e;if(t)if(2>x)for(e in t)m[e]=[m[e],t[e]];else T.always(t[T.status]);return this},abort:function(t){var e=t||w;return o&&o.abort(e),i(0,e),this}};if(g.promise(T).complete=v.add,T.success=T.done,T.error=T.fail,d.url=((e||d.url||ve.href)+"").replace(be,"").replace($e,ve.protocol+"//"),d.type=n.method||n.type||d.method||d.type,d.dataTypes=rt.trim(d.dataType||"*").toLowerCase().match(wt)||[""],null==d.crossDomain){c=Y.createElement("a");try{c.href=d.url,c.href=c.href,d.crossDomain=Ne.protocol+"//"+Ne.host!=c.protocol+"//"+c.host}catch(C){d.crossDomain=!0}}if(d.data&&d.processData&&"string"!=typeof d.data&&(d.data=rt.param(d.data,d.traditional)),_(ke,d,n,T),2===x)return T;u=rt.event&&d.global,u&&0===rt.active++&&rt.event.trigger("ajaxStart"),d.type=d.type.toUpperCase(),d.hasContent=!Ce.test(d.type),r=d.url,d.hasContent||(d.data&&(r=d.url+=(ye.test(r)?"&":"?")+d.data,delete d.data),d.cache===!1&&(d.url=xe.test(r)?r.replace(xe,"$1_="+me++):r+(ye.test(r)?"&":"?")+"_="+me++)),d.ifModified&&(rt.lastModified[r]&&T.setRequestHeader("If-Modified-Since",rt.lastModified[r]),rt.etag[r]&&T.setRequestHeader("If-None-Match",rt.etag[r])),(d.data&&d.hasContent&&d.contentType!==!1||n.contentType)&&T.setRequestHeader("Content-Type",d.contentType),T.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+("*"!==d.dataTypes[0]?", "+Se+"; q=0.01":""):d.accepts["*"]);for(p in d.headers)T.setRequestHeader(p,d.headers[p]);if(d.beforeSend&&(d.beforeSend.call(f,T,d)===!1||2===x))return T.abort();w="abort";for(p in{success:1,error:1,complete:1})T[p](d[p]);if(o=_(Ee,d,n,T)){if(T.readyState=1,u&&h.trigger("ajaxSend",[T,d]),2===x)return T;d.async&&d.timeout>0&&(l=t.setTimeout(function(){T.abort("timeout")},d.timeout));try{x=1,o.send(y,i)}catch(C){if(!(2>x))throw C;i(-1,C)}}else i(-1,"No Transport");return T},getJSON:function(t,e,n){return rt.get(t,e,n,"json")},getScript:function(t,e){return rt.get(t,void 0,e,"script")}}),rt.each(["get","post"],function(t,e){rt[e]=function(t,n,i,o){return rt.isFunction(n)&&(o=o||i,i=n,n=void 0),rt.ajax(rt.extend({url:t,type:e,dataType:o,data:n,success:i},rt.isPlainObject(t)&&t))}}),rt._evalUrl=function(t){return rt.ajax({url:t,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},rt.fn.extend({wrapAll:function(t){var e;return rt.isFunction(t)?this.each(function(e){rt(this).wrapAll(t.call(this,e))}):(this[0]&&(e=rt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this)},wrapInner:function(t){return rt.isFunction(t)?this.each(function(e){rt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=rt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=rt.isFunction(t);return this.each(function(n){rt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(){return this.parent().each(function(){rt.nodeName(this,"body")||rt(this).replaceWith(this.childNodes)}).end()}}),rt.expr.filters.hidden=function(t){return!rt.expr.filters.visible(t)},rt.expr.filters.visible=function(t){return t.offsetWidth>0||t.offsetHeight>0||t.getClientRects().length>0};var De=/%20/g,Ae=/\[\]$/,je=/\r?\n/g,Oe=/^(?:submit|button|image|reset|file)$/i,Ie=/^(?:input|select|textarea|keygen)/i;rt.param=function(t,e){var n,i=[],o=function(t,e){e=rt.isFunction(e)?e():null==e?"":e,i[i.length]=encodeURIComponent(t)+"="+encodeURIComponent(e)};if(void 0===e&&(e=rt.ajaxSettings&&rt.ajaxSettings.traditional),rt.isArray(t)||t.jquery&&!rt.isPlainObject(t))rt.each(t,function(){o(this.name,this.value)});else for(n in t)X(n,t[n],e,o);return i.join("&").replace(De,"+")},rt.fn.extend({serialize:function(){return rt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=rt.prop(this,"elements");return t?rt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!rt(this).is(":disabled")&&Ie.test(this.nodeName)&&!Oe.test(t)&&(this.checked||!It.test(t))}).map(function(t,e){var n=rt(this).val();return null==n?null:rt.isArray(n)?rt.map(n,function(t){return{name:e.name,value:t.replace(je,"\r\n")}}):{name:e.name,value:n.replace(je,"\r\n")}}).get()}}),rt.ajaxSettings.xhr=function(){try{return new t.XMLHttpRequest}catch(e){}};var Le={0:200,1223:204},Re=rt.ajaxSettings.xhr();it.cors=!!Re&&"withCredentials"in Re,it.ajax=Re=!!Re,rt.ajaxTransport(function(e){var n,i;return it.cors||Re&&!e.crossDomain?{send:function(o,r){var s,a=e.xhr();if(a.open(e.type,e.url,e.async,e.username,e.password),e.xhrFields)for(s in e.xhrFields)a[s]=e.xhrFields[s];e.mimeType&&a.overrideMimeType&&a.overrideMimeType(e.mimeType),e.crossDomain||o["X-Requested-With"]||(o["X-Requested-With"]="XMLHttpRequest");for(s in o)a.setRequestHeader(s,o[s]);n=function(t){return function(){n&&(n=i=a.onload=a.onerror=a.onabort=a.onreadystatechange=null,"abort"===t?a.abort():"error"===t?"number"!=typeof a.status?r(0,"error"):r(a.status,a.statusText):r(Le[a.status]||a.status,a.statusText,"text"!==(a.responseType||"text")||"string"!=typeof a.responseText?{binary:a.response}:{text:a.responseText},a.getAllResponseHeaders()))}},a.onload=n(),i=a.onerror=n("error"),void 0!==a.onabort?a.onabort=i:a.onreadystatechange=function(){4===a.readyState&&t.setTimeout(function(){n&&i()})},n=n("abort");try{a.send(e.hasContent&&e.data||null)}catch(l){if(n)throw l}},abort:function(){n&&n()}}:void 0}),rt.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(t){return rt.globalEval(t),t}}}),rt.ajaxPrefilter("script",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type="GET")}),rt.ajaxTransport("script",function(t){if(t.crossDomain){var e,n;return{send:function(i,o){e=rt(" -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/new_topic.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/new_topic.html deleted file mode 100644 index 08bb670a..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/new_topic.html +++ /dev/null @@ -1,52 +0,0 @@ -{% set page_title = _("New Topic") %} -{% set active_forum_nav=True %} - -{% extends theme("layout.html") %} - -{% block content %} -{% from theme("macros.html") import render_field, render_submit_field, render_quickreply %} - -
    - - - -
    - {{ form.hidden_tag() }} -
    -
    - {% trans %}New Topic{% endtrans %} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.title, div_class="col-md-12 col-sm-12 col-xs-12") }} - -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/online_users.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/online_users.html deleted file mode 100644 index 63d2451b..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/online_users.html +++ /dev/null @@ -1,24 +0,0 @@ -{% set page_title = _("Online Users") %} - -{% extends theme("layout.html") %} - - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - - -{% block content %} - -{% trans %}Online Users{% endtrans %} -{% for user in online_users %} - {% if config["REDIS_ENABLED"] %} - {{ user }}{% if not loop.last %}, {% endif %} - {% else %} - {{ user.username }}{% if not loop.last %}, {% endif %} - {% endif %} -{% endfor %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/report_post.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/report_post.html deleted file mode 100644 index b3c83b58..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/report_post.html +++ /dev/null @@ -1,23 +0,0 @@ -{% set page_title = _("Report Post") %} - -{% extends theme("layout.html") %} - -{% block header %} -{% endblock %} - -{% block navigation %} -{% endblock %} - -{% block content %} -{% from theme("macros.html") import render_field %} - -
    - {{ form.hidden_tag() }} -

    {% trans %}Report Post{% endtrans %}

    - - {{ render_field(form.reason) }} - - -
    {% trans %}Close{% endtrans %} -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_form.html deleted file mode 100644 index ce27cfa6..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_form.html +++ /dev/null @@ -1,27 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme("macros.html") import horizontal_field %} - -
    - - -
    -
    - {% trans %}Search{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.search_types)}} - {{ horizontal_field(form.search_query)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_result.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_result.html deleted file mode 100644 index 64e2fa83..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/search_result.html +++ /dev/null @@ -1,345 +0,0 @@ -{% set page_title = _("Search") %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, group_field, topic_pages %} - -
    - - - {% if result['post'] %} -
    -
    - {% trans %}Posts{% endtrans %} -
    -
    - {% for post in result['post'] %} -
    - -
    - - {% if post.user_id %} - - - - {% if post.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ post.user.primary_group.name }}
    - - {% if post.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ post.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ post.user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if post.user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} -
    -
    -
    - {% else %} - -
    -
    {% trans %}No posts found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['user'] %} -
    -
    - {% trans %}Users{% endtrans %} -
    -
    -
    -
    #
    -
    {% trans %}Username{% endtrans %}
    - - -
    {% trans %}Group{% endtrans %}
    -
    - {% for user in result['user'].all() %} -
    -
    {{ user.id }}
    - - - -
    {{ user.primary_group.name }}
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['topic'] %} -
    -
    - {% trans %}Topics{% endtrans %} -
    - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - - {% for topic in result['topic'].all() %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - - {% else %} - - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - {% else %} -
    -
    - {% trans %}No topics found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - - {% if result['forum'] %} -
    -
    - Forums -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    - {% for forum in result['forum'].all() %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - - - - -
    - --- -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - - - - -
    - {% if forum.last_post_id %} -
    - - {{ forum.last_post_title|crop_title }} - -
    - -
    - {{ forum.last_post_created|time_since }} -
    - - - - {% else %} - {% trans %}No posts.{% endtrans %} - {% endif %} {# endif forum.last_post_id #} -
    - - {% endif %} {# endif forum.external #} -
    - {% else %} -
    -
    - {% trans %}No forums found matching your search criteria.{% endtrans %} -
    -
    - {% endfor %} -
    -
    - {% endif %} - -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic.html deleted file mode 100644 index fe4a6e20..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic.html +++ /dev/null @@ -1,178 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    - - {% if post.user_id %} - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    - - {% if user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} - - {% else %} - - -
    {% trans %}Guest{% endtrans %}
    - {% endif %} - -
    - -
    - - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_controls.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_controls.html deleted file mode 100644 index 1078cf38..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_controls.html +++ /dev/null @@ -1,102 +0,0 @@ -
    -
    -
    - {{ render_pagination(posts, topic.url) }} -
    -
    - -{% if current_user.is_authenticated %} -
    -
    - {% if current_user|can_moderate(topic.forum) or current_user|delete_topic(topic)%} - -
    - - -
    - - {% endif %} - - {% if current_user.is_tracking_topic(topic) %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if current_user|post_reply(topic) %} - - {% trans %}Reply{% endtrans %} - - {% else %} -
    {% trans %}Locked{% endtrans %}
    - {% endif %} -
    -
    -{% endif %} {# end current_user.is_authenticated #} -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_horizontal.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_horizontal.html deleted file mode 100644 index acc1f166..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topic_horizontal.html +++ /dev/null @@ -1,187 +0,0 @@ -{% extends theme("layout.html") %} -{% set page_title = _("%(title)s - Topic", title=topic.title) %} -{% set active_forum_nav=True %} - -{% block css %} - -{% endblock %} - -{% block content %} -{% from theme('macros.html') import render_pagination, form_field, generate_post_id, generate_post_url %} - -
    - - - {% include theme('forum/topic_controls.html') %} - -
    - -
    - {% for post, user in posts.items %} -
    - -
    -
    - {% if user.avatar %} -
    - -
    - {% endif %} - -
    - - - - - {% if user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ user.primary_group.name }}
    -
    -
    - -
    -
    -
    {% trans %}Joined{% endtrans %}: {{ user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ user.post_count }}
    -
    - {% if current_user.is_authenticated and post.user_id %} - {% trans %}Message{% endtrans %} - {% endif %} -
    - - {% if user.website %} - - {% endif %} -
    -
    -
    - -
    - - -
    - {{ post.content|markup }} - - {% if flaskbb_config["SIGNATURE_ENABLED"] and post.user_id and user.signature %} - - {% endif %} - -
    - - - -
    -
    - {% endfor %} - -
    -
    - - {% include theme('forum/topic_controls.html') %} - {% from theme("macros.html") import render_field, render_quickreply, render_submit_field %} - {% if form %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.content, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'id': 'quickreply-editor'}) }} -
    -
    -
    - Markdown - help - emojis -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    -
    - {% endif %} - -
    -{% endblock %} - -{% block scripts %} - - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topictracker.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topictracker.html deleted file mode 100644 index 5788fe35..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/forum/topictracker.html +++ /dev/null @@ -1,124 +0,0 @@ -{% set page_title = _("Topic Tracker") %} -{% set active_forum_nav=False %} - -{% extends theme("layout.html") %} -{% block content %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -
    -
    - -
    - - - -
    -
    - {{ render_pagination(topics, url_for('forum.topictracker')) }} -
    -
    - -
    - - -
    -
    -
    {% trans %}Topic{% endtrans %}
    - - -
    {% trans %}Last Post{% endtrans %}
    -
    -
    - - {% for topic, topicread in topics.items %} -
    - -
    -
    -
    - {% if topic.locked %} - - {% elif topic.important %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% else %} - {% if topic|topic_is_unread(topicread, current_user, forumsread) %} - - {% else %} - - {% endif %} - {% endif %} -
    -
    -
    - {{ topic.title }} - - {{ topic_pages(topic, flaskbb_config["POSTS_PER_PAGE"]) }} -
    - -
    - {% trans %}by{% endtrans %} - {% if topic.user_id %} - {{ topic.user.username }} - {% else %} - {{ topic.username }} - {% endif %} -
    -
    -
    -
    - - - - - -
    - {{ topic.last_post.date_created|time_since }}
    - -
    - {% trans %}by{% endtrans %} - {% if topic.last_post.user_id %} - {{ topic.last_post.user.username }} - {% else %} - {{ topic.last_post.username }} - {% endif %} -
    -
    - -
    - -
    -
    - {% else %} -
    -
    - {% trans %}No Topics.{% endtrans %} -
    -
    - {% endfor %} -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/layout.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/layout.html deleted file mode 100644 index 49e9d59d..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/layout.html +++ /dev/null @@ -1,183 +0,0 @@ - - - - - - - - - - - - - {% block title %} - {%- if not page_title -%} - {{ flaskbb_config["PROJECT_TITLE"] }} - {{ flaskbb_config["PROJECT_SUBTITLE"] }} - {%- else -%} - {{ page_title }} - {{ flaskbb_config["PROJECT_TITLE"] }} - {%- endif -%} - {% endblock %} - - - {% block stylesheets %} - - - - - {% endblock %} - - {# for extra stylesheets. e.q. a template has to add something #} - {% block css %} - {% endblock %} - - {# for various extra things #} - {% block head_extra %} - {% endblock %} - - - - - -
    -
    - - - {% block header %} -
    -
    -
    {{ flaskbb_config["PROJECT_TITLE"] }}
    -
    {{ flaskbb_config["PROJECT_SUBTITLE"] }}
    -
    -
    - {% endblock %} - - - {% block navigation %} - - {% endblock %} - - - {% block messages %} -
    - {% include theme('flashed_messages.html') %} -
    - {% endblock %} - - - {% block content %} - {% endblock %} -
    - - - {% block footer %} - - {% endblock %} - -
    - - {% block javascript %} - - - {% endblock %} - - {# for extra scripts in other templates. #} - {% block scripts %} - {% endblock %} - - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/macros.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/macros.html deleted file mode 100644 index 501dbbdc..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/macros.html +++ /dev/null @@ -1,415 +0,0 @@ -{%- macro field_label(field) -%} - -{% endmacro %} - - -{%- macro field_description(field) -%} - {% if field.description %} - {{ field.description|safe }} - {% endif %} -{%- endmacro -%} - - -{%- macro field_errors(field) -%} - {% if field.errors %} - {%- for error in field.errors -%} - {{error}} - {%- endfor -%} - {% endif %} -{%- endmacro -%} - - -{%- macro render_quickreply(field, rows, cols, div_class='') -%} -{%- if kwargs['required'] or field.flags.required -%} - {% if div_class %} - {{ field(class=div_class, required="required", cols=cols, rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", required="required", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- else -%} - {% if div_class %} - {{ field(class=div_class, cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="new-message", cols=cols, rows=row, placeholder=field.label.text, **kwargs) }} - {% endif %} -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{# Renders a non bootstrap input field #} -{%- macro render_input_field(field, div_class='', placeholder='') -%} -{%- if div_class -%} -
    -{%- endif -%} - -{%- if placeholder -%} - {% set field_placeholder = placeholder %} -{%- else -%} - {% set field_placeholder = field.label.text %} -{%- endif -%} - -{%- if kwargs['required'] or field.flags.required -%} - {{ field(required="required", placeholder=field_placeholder) }} -{%- else -%} - {{ field(placeholder=field_placeholder) }} -{% endif %} - -{%- if div_class -%} -
    -{%- endif -%} - -{{ field_description(field) }} -{{ field_errors(field) }} -{%- endmacro -%} - - -{%- macro render_boolean_field(field, inline=False) -%} -
    - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro render_select_field(field, div_class='', select_class="form-control") -%} -
    - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class) }} - {% else %} - {{ field(class=select_class) }} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro render_submit_field(field, div_class='', input_class='') -%} -{% if div_class %} -
    -{% endif %} - - {{ field(class=input_class or 'btn btn-success') }} - -{% if div_class %} -
    -{% endif %} -{%- endmacro -%} - - -{%- macro render_field(field, with_label=True, div_class='', rows='') -%} -
    - -
    - {% if with_label %} - - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if rows %} - {{ field(class="form-control", required="required", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", required="required", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- else -%} - {% if rows %} - {{ field(class="form-control", rows=rows, placeholder=field.label.text, **kwargs) }} - {% else %} - {{ field(class="form-control", placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} - - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro inline_field(field, label_text='', label_class='') -%} -
    - {{field.label(class="sr-only")}} - -
    - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class='form-control', placeholder=label_text, **kwargs)}} - {% else %} - {{field(class='form-control', placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro group_field(field, label_text='', label_class='', css_class='form-control form-grouped') -%} -
    - {{field.label(class="sr-only")}} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} - {{ field_description(field) }} - {{ field_errors(field) }} -
    -{%- endmacro -%} - - -{%- macro input_group_field(field, label_text='', css_class='form-control') -%} - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, required="required", **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, required="required", **kwargs)}} - {% endif %} - {%- else -%} - {% if label_text %} - {{field(class=css_class, placeholder=label_text, **kwargs)}} - {% else %} - {{field(class=css_class, placeholder=field.label.text, **kwargs)}} - {% endif %} - {%- endif -%} -{%- endmacro -%} - - -{%- macro horizontal_select_field(field, div_class='', label_class='', select_class="form-control", surrounded_div="col-sm-4") -%} -
    - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - -
    - {% if field.type == 'QuerySelectMultipleField' or field.type == 'SelectMultipleField' %} - {{ field(multiple=True, class=select_class, surrounded_div=surrounded_div) }} - {% else %} - {{ field(class=select_class, surrounded_div=surrounded_div) }} - {%- endif -%} -
    - {{ field_description(field) }} - {{ field_errors(field) }} -
    -
    -{%- endmacro -%} - - -{%- macro horizontal_boolean_field(field, div_class='') -%} -
    - {{ render_boolean_field(field, **kwargs) }} -
    -{%- endmacro -%} - - -{%- macro horizontal_submit_field(field, div_class='', input_class='') -%} -
    - {{ field(class=input_class or 'btn btn-success') }} -
    -{%- endmacro -%} - - -{%- macro horizontal_field(field, label_text='', label_class='', div_class='', input_class='') -%} -
    - - {% if field.type == "BooleanField" or field.type == "SubmitField" %} - {% if field.type == "BooleanField" %} - {{ horizontal_boolean_field(field, div_class) }} - {% else %} - {{ horizontal_submit_field(field, div_class) }} - {% endif %} - {% else %} - - {% if label_class %} - {{ field.label(class=label_class) }} - {% else %} - {{ field.label(class="col-sm-3 control-label") }} - {% endif %} - - {% if div_class %} -
    - {% else %} -
    - {% endif %} - - {%- if kwargs['required'] or field.flags.required -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, required="required", **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, required="required", **kwargs) }} - {% endif %} - {%- else -%} - {% if label_text %} - {{ field(class='form-control', placeholder=label_text, **kwargs) }} - {% else %} - {{ field(class='form-control', placeholder=field.label.text, **kwargs) }} - {% endif %} - {%- endif -%} -
    - {% endif %} - - {{ field_description(field) }} - {{ field_errors(field) }} - -
    -{%- endmacro -%} - - -{% macro topnav(endpoint, name, icon='', id='', active=False) %} -
  • - - {% if icon %} {% endif %}{{ name }} - -
  • -{% endmacro %} - -{% macro is_active(endpoint, active=False) %} - {%- if endpoint == request.endpoint or active == True -%} - active - {%- endif -%} -{% endmacro %} - -{% macro navlink(endpoint, name, icon='', active=False) %} -
  • - {% if icon %} {% endif %} {{ name }} -
  • -{% endmacro %} - -{% macro tablink_href(endpoint, name, active=False) %} -
  • - {{ name }} -
  • -{% endmacro %} - -{% macro render_pagination(page_obj, url, ul_class='') %} -
      -
    • {% trans %}Pages{% endtrans %}:
    • - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{% macro render_topic_pagination(page_obj, url) %} - -{% endmacro %} - - -{% macro message_pagination(page_obj, url) %} -
      - {%- for page in page_obj.iter_pages() %} - {% if page %} - {% if page != page_obj.page %} -
    • {{ page }}
    • - {% else %} -
    • {{ page }}
    • - {% endif %} - {% endif %} - {%- else -%} -
    • 1
    • - {%- endfor %} - {% if page_obj.has_next %} -
    • »
    • - {% endif %} -
    -{% endmacro %} - - -{# Generates a some kind of pagination for the posts in topic in the forum view. #} -{%- macro topic_pages(topic_obj, per_page=10) -%} -{% set topic_pages = (topic_obj.post_count / per_page)|round|int %} -{%- if topic_pages > 1 -%} -[ - {%- for page in range(0, topic_pages) -%} - {{ page+1 }}{% if not loop.last %} {% endif %} - {%- endfor -%} -] -{%- endif -%} -{%- endmacro -%} - - -{# Generates a topic url with an anchor to the post #} -{%- macro generate_post_url(topic, post, page) -%} - {%- if page > 1 -%} - {{ topic.url }}?page={{ page }}#pid{{ post.id }} - {%- else -%} - {{ topic.url }}#pid{{ post.id }} - {%- endif -%} -{%- endmacro -%} - - -{# Generates the post id for the topic. Each topic starts with the post id 1 #} -{%- macro generate_post_id(posts, page, per_page) -%} - {%- if posts.page == 1 -%} - {{ page }} - {%- else -%} - {{ page + (posts.page - 1) * per_page }} - {%- endif -%} -{%- endmacro -%} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/banned_users.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/banned_users.html deleted file mode 100644 index afc33799..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/banned_users.html +++ /dev/null @@ -1,125 +0,0 @@ -{% set page_title = _("Banned Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field,navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Banned Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    -
    - {% if current_user|can_ban_user %} -
    - - -
    - {% endif %} -
    -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/category_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/category_form.html deleted file mode 100644 index 48688240..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/category_form.html +++ /dev/null @@ -1,55 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ render_field(form.position) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    - -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forum_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forum_form.html deleted file mode 100644 index 7e7f9049..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forum_form.html +++ /dev/null @@ -1,59 +0,0 @@ -{% set page_title = title %} -{% set active_management_forum_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_submit_field, render_boolean_field, render_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.title) }} - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_field(form.category) }} - {{ render_field(form.position) }} - {{ render_field(form.external) }} - {{ render_field(form.moderators) }} - {{ render_boolean_field(form.show_moderators) }} - {{ render_boolean_field(form.locked) }} - {{ render_select_field(form.groups) }} - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forums.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forums.html deleted file mode 100644 index 0dab63da..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/forums.html +++ /dev/null @@ -1,175 +0,0 @@ -{% set page_title = _("Forums") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - - -
    -
    -
    - {% trans %}Manage Forums{% endtrans %} -
    -
    -
    - {% for category in categories %} -
    -
    -
    - -
    -
    - -
    -
    -
    {% trans %}Forum{% endtrans %}
    - -
    -
    - {% for forum in category.forums %} -
    - - {% if forum.external %} -
    -
    - -
    - -
    - -
    - -
    - {% trans %}Link to{% endtrans %}: {{ forum.title }} -
    - - -
    - {{ forum.description|markup }} -
    -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Link{% endtrans %} - - -
    - - -
    -
    -
    - {% else %} -
    -
    - -
    - {% if forum.locked %} - - {% else %} - - {% endif %} -
    - -
    - - - - -
    - {{ forum.description|markup }} -
    - - - {% if forum.show_moderators %} -
    - {% trans %}Moderators{% endtrans %}: - {% for moderator in forum.moderators %} - {{ moderator.username }}{% if not loop.last %}, {% endif %} - {% endfor %} -
    - {% endif %} -
    -
    -
    - - - - - -
    -
    - - {% trans %}Edit Forum{% endtrans %} - - -
    - - -
    -
    -
    - - {% endif %} {# endif forum.external #} -
    - - {% endfor %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/group_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/group_form.html deleted file mode 100644 index 69b0b236..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/group_form.html +++ /dev/null @@ -1,68 +0,0 @@ -{% set page_title = title %} -{% set active_management_group_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import render_field, render_boolean_field, render_submit_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ render_field(form.name) }} - - {{ render_field(form.description, div_class="col-sm-10 editor", rows="4", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ render_boolean_field(form.admin) }} - {{ render_boolean_field(form.super_mod) }} - - {{ render_boolean_field(form.mod) }} - {{ render_boolean_field(form.banned) }} - {{ render_boolean_field(form.guest) }} - - {{ render_boolean_field(form.mod_edituser) }} - {{ render_boolean_field(form.mod_banuser) }} - - {{ render_boolean_field(form.editpost) }} - {{ render_boolean_field(form.deletepost) }} - {{ render_boolean_field(form.deletetopic) }} - {{ render_boolean_field(form.posttopic) }} - {{ render_boolean_field(form.postreply) }} - - {{ render_submit_field(form.submit, div_class="form-group col-sm-5") }} -
    - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/groups.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/groups.html deleted file mode 100644 index f9c464eb..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/groups.html +++ /dev/null @@ -1,91 +0,0 @@ -{% set page_title = _("Groups") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - -
    - -
    - -
    -
    -
    - {% trans %}Groups{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Group Name{% endtrans %}
    - -
    -
    - - -
    -
    -
    - - {% for group in groups.items %} -
    -
    -
    {{ group.name }}
    - -
    - - - -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No groups found.{% endtrans %}
    -
    - {% endfor %} -
    -
    - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/management_layout.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/management_layout.html deleted file mode 100644 index d8e88cf2..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/management_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} - -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - -{% block breadcrumb %} -{% endblock %} - -
    -
    - -
    -
    - {% block management_content %}{% endblock %} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/overview.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/overview.html deleted file mode 100644 index 34493224..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/overview.html +++ /dev/null @@ -1,130 +0,0 @@ -{% set page_title = _("Overview") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -
    -
    -
    - {% trans %}Overview{% endtrans %} -
    -
    -
    -
    -
    -
    - -
    -

    {% trans %}Everything seems alright.{% endtrans %}

    -

    {% trans %}No new notifications.{% endtrans %}

    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - {{ all_users }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ post_count }} - -
    -
    -
    - -
    -
    -
    - -
    -
    - {{ topic_count }} - -
    -
    -
    -
    -
    - -
    -
    {% trans %}Statistics{% endtrans %}
    - -
    -
    {% trans %}Registered Users{% endtrans %}
    {{ all_users }}
    -
    -
    -
    {% trans %}Online Users{% endtrans %}
    {{ online_users }}
    -
    -
    -
    {% trans %}Banned Users{% endtrans %}
    {{ banned_users }}
    -
    -
    -
    {% trans %}Groups{% endtrans %}
    {{ all_groups }}
    -
    -
    -
    {% trans %}Topics{% endtrans %}
    {{ topic_count }}
    -
    -
    -
    {% trans %}Posts{% endtrans %}
    {{ post_count }}
    -
    -
    -
    {% trans %}Reports{% endtrans %}
    {{ report_count }}
    -
    -
    - -
    -
    {% trans %}Components{% endtrans %}
    - -
    -
    FlaskBB
    {{ flaskbb_version }}
    -
    - -
    -
    Flask
    {{ flask_version }}
    -
    -
    -
    Python
    {{ python_version }}
    -
    -
    - -
    -
    {% trans %}Plugins{% endtrans %}
    - - {% for plugin in plugins %} - -
    -
    {{ plugin.name }}
    {{ plugin.version }}
    -
    - {% endfor %} -
    -
    -
    -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/plugins.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/plugins.html deleted file mode 100644 index 943d85cf..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/plugins.html +++ /dev/null @@ -1,76 +0,0 @@ -{% set page_title = _("Plugins") %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination %} - -
    -
    -
    - {% trans %}Manage Plugins{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Plugin{% endtrans %}
    -
    {% trans %}Information{% endtrans %}
    -
    {% trans %}Manage{% endtrans %}
    -
    -
    - {% for plugin in plugins %} -
    -
    - {% if plugin.website %} - {{ plugin.name }} - {% else %} - {{ plugin.name }} - {% endif %} -
    -
    -
    {% trans %}Version{% endtrans %}: {{ plugin.version }}
    -
    {{ plugin.description }}
    -
    {% trans %}by{% endtrans %} {{ plugin.author }}
    -
    -
    - {% if not plugin.enabled %} -
    - - -
    - {% else %} -
    - - -
    - {% endif %} - - {% if plugin.installable and not plugin.uninstallable %} -
    - - -
    - {% endif %} - {% if plugin.uninstallable %} -
    - - -
    - {% endif %} -
    -
    - {% endfor %} -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/reports.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/reports.html deleted file mode 100644 index 39c11ec4..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/reports.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = _("Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}All Reports{% endtrans %} -
    -
    -
    -
    -
    #
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    -
    {% trans %}Reporter{% endtrans %}
    - -
    - {% for report in reports.items %} -
    -
    {{ report.id }}
    - - -
    {{ report.reason }}
    -
    {{ report.reporter.username }}
    - -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/settings.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/settings.html deleted file mode 100644 index c5dd43a0..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/settings.html +++ /dev/null @@ -1,71 +0,0 @@ -{% set page_title = active_group.name %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_boolean_field, render_select_field, render_field, navlink with context %} - - -
    - -
    - -
    -
    -
    - {{ active_group.name }} -
    -
    -
    -
    -
    - - {{ form.hidden_tag() }} - {% for field in form %} - {% if field.type not in ["TextField", "IntegerField"] %} - {% if field.type == "BooleanField" %} - {{ render_boolean_field(field) }} - {% endif %} - - {% if field.type in ["SelectField", "SelectMultipleField"] %} - {{ render_select_field(field) }} - {% endif %} - {% else %} - {{ render_field(field) }} - {% endif %} - {% endfor %} - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/unread_reports.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/unread_reports.html deleted file mode 100644 index 430782c8..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/unread_reports.html +++ /dev/null @@ -1,96 +0,0 @@ -{% set page_title = _("Unread Reports") %} -{% set active_management_report_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, navlink with context %} - - -
    - -
    - - -
    -
    -
    - {% trans %}Unread Reports{% endtrans %} -
    -
    -
    -
    -
    -
    {% trans %}Poster{% endtrans %}
    -
    {% trans %}Topic{% endtrans %}
    -
    {% trans %}Reason{% endtrans %}
    - - -
    -
    - - -
    -
    -
    - {% for report in reports.items %} -
    -
    - - -
    {{ report.reason }}
    - - -
    -
    - - -
    -
    -
    - {% else %} -
    -
    {% trans %}No unread reports.{% endtrans %}
    -
    - {% endfor %} -
    - -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/user_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/user_form.html deleted file mode 100644 index ac574c29..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/user_form.html +++ /dev/null @@ -1,64 +0,0 @@ -{% set page_title = title %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field, navlink with context %} - -
    - -
    - -
    -
    -
    - {{ title }} -
    -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.username) }} - {{ horizontal_field(form.email) }} - {{ horizontal_field(form.password) }} - {{ horizontal_select_field(form.birthday, surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.primary_group) }} - {{ horizontal_field(form.secondary_groups) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/users.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/users.html deleted file mode 100644 index 31516cb9..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/management/users.html +++ /dev/null @@ -1,162 +0,0 @@ -{% set page_title = _("Users") %} -{% set active_management_user_nav=True %} - -{% extends theme("management/management_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block management_content %} -{% from theme('macros.html') import render_pagination, group_field, navlink with context %} - -
    - -
    - -
    -
    -
    - - {% trans %}Users{% endtrans %} - -
    -
    - -
    -
    - -
    -
    - - - -
    -
    -
    -
    {% trans %}Username{% endtrans %}
    -
    {% trans %}Posts{% endtrans %}
    - -
    {% trans %}Group{% endtrans %}
    - -
    - {% for user in users.items %} -
    -
    - -
    {{ user.post_count }}
    - -
    {{ user.primary_group.name }}
    -
    - {% if current_user|can_edit_user and not user|is_admin or current_user|is_admin %} - - - - {% endif %} - - {% if current_user|can_ban_user and not user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|can_ban_user and user.permissions['banned'] %} -
    - - - -
    - {% endif %} - - {% if current_user|is_admin %} -
    - - - -
    - {% endif %} -
    -
    - {% else %} -
    -
    {% trans %}No users found matching your search criteria.{% endtrans %}
    -
    - {% endfor %} - -
    -
    - - -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation.html deleted file mode 100644 index 44ae4914..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation.html +++ /dev/null @@ -1,146 +0,0 @@ -{% extends theme("message/message_layout.html") %} - -{% block css %} - -{% endblock %} - -{% block message_content %} -{# quick check if the conversation is a draft #} -{% if conversation.draft %} - {% set messages = [conversation.first_message] %} -{% else %} - {% set messages = conversation.messages %} -{% endif %} - -
    -
    - Subject: {{ conversation.subject }} -
    - -
    -
    - {% for message in messages %} - -
    - {% if current_user.id == message.user_id %} -
    -
    - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - {% if message.user.website %} - - {% endif %} -
    -
    - {% endif %} -
    -
    -
    - -
    - -
    - -
    - {{ message.message|markup }} -
    - - - -
    -
    -
    - {% if current_user.id != message.user_id %} -
    -
    - {% if message.user_id and message.user %} - - - - - {% if message.user|is_online %} -
    - {% else %} -
    - {% endif %} -
    {{ message.user.primary_group.name }}
    - - {% if message.user.avatar %} -
    avatar
    - {% endif %} - -
    {% trans %}Joined{% endtrans %}: {{ message.user.date_joined|format_date('%b %d %Y') }}
    -
    {% trans %}Posts{% endtrans %}: {{ message.user.post_count }}
    - - - {% if message.user.website %} - - {% endif %} - - {% else %} -

    {% trans %}Deleted{% endtrans %}

    -
    {% trans %}Guest{% endtrans %}
    - {% endif %} -
    -
    - {% endif %} -
    - {% endfor %} -
    -
    -
    - -{% if not conversation.draft %} -{% from "macros.html" import render_quickreply, render_submit_field %} -
    - {{ form.hidden_tag() }} -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    - {{ render_submit_field(form.submit, input_class="btn btn-success pull-right") }} -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endif %} - -{% endblock %} - -{% block scripts %} - - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation_list.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation_list.html deleted file mode 100644 index df3a1abc..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/conversation_list.html +++ /dev/null @@ -1,93 +0,0 @@ -
    -
    -
    -
    -
    - {% trans %}Conversations{% endtrans %} -
    - -
    - {{ message_count }}/{{ flaskbb_config["MESSAGE_QUOTA"] }} -
    -
    -
    -
    -
    - {% for conversation in conversations.items %} -
    - -
    - {% if conversation.from_user.avatar %} - avatar - {% else %} - avatar - {% endif %} -
    - -
    - - - -
    - From {{ conversation.from_user.username }} - to {{ conversation.to_user.username }} - on {{ conversation.date_created|format_date("%d %B %Y - %H:%M") }} -
    - -
    - {{ conversation.first_message.message|crop_title(150)|markup }} -
    - -
    - {% if include_move %} -
    - - -
    - {% endif %} - - {% if include_delete %} -
    - - -
    - {% endif %} - - {% if include_restore %} -
    - - -
    - {% endif %} - - {% if include_edit %} - - - - {% endif %} -
    -
    -
    - {% else %} -
    -
    - {% trans %}No conversations found.{% endtrans %} -
    -
    - {% endfor %} -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/drafts.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/drafts.html deleted file mode 100644 index 011efa52..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/drafts.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Drafts") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% set include_edit = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.drafts")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/inbox.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/inbox.html deleted file mode 100644 index 3a093288..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/inbox.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Inbox") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.inbox")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_form.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_form.html deleted file mode 100644 index 6354ac36..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_form.html +++ /dev/null @@ -1,45 +0,0 @@ -{% set page_title = title %} - -{% extends theme("message/message_layout.html") %} - -{% block message_content %} -{% from theme("macros.html") import render_submit_field, render_quickreply, render_field %} -
    - {{ form.hidden_tag() }} -
    -
    - {{ title }} -
    - -
    - {{ form.hidden_tag() }} -
    - - {{ render_field(form.to_user, div_class="col-md-6 col-sm-6 col-xs-6") }} - {{ render_field(form.subject, div_class="col-md-6 col-sm-6 col-xs-6") }} - -
    -
    -
    -
    - {{ render_quickreply(form.message, div_class="new-message", rows=7, cols=75, placeholder="", **{'data-provide': 'markdown', 'data-autofocus': 'false', 'class': 'flaskbb-editor'}) }} -
    -
    -
    - {{ render_submit_field(form.send_message, input_class="btn btn-success") }} - {{ render_submit_field(form.save_message, input_class="btn btn-info") }} -
    -
    -
    -
    -
    -
    -
    -
    - {% include theme('editor_help.html') %} -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_layout.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_layout.html deleted file mode 100644 index 687e21aa..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/message_layout.html +++ /dev/null @@ -1,38 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block message_content %}{% endblock %} -
    -
    -{% endblock %} - - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/sent.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/sent.html deleted file mode 100644 index 90f2290f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/sent.html +++ /dev/null @@ -1,12 +0,0 @@ -{% set page_title = _("Sent Messages") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_move = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.sent")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/trash.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/trash.html deleted file mode 100644 index 943cdede..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/message/trash.html +++ /dev/null @@ -1,13 +0,0 @@ -{% set page_title = _("Trash") %} - -{% from theme('macros.html') import render_pagination %} -{% extends theme("message/message_layout.html") %} -{% block message_content %} - -{% set include_restore = True %} -{% set include_delete = True %} -{% include theme("message/conversation_list.html") %} - -{{ render_pagination(conversations, url_for("message.trash")) }} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/navigation.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/navigation.html deleted file mode 100644 index 8f109734..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/navigation.html +++ /dev/null @@ -1,73 +0,0 @@ -{%- from theme("macros.html") import topnav with context -%} - - diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_posts.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_posts.html deleted file mode 100644 index feb055be..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_posts.html +++ /dev/null @@ -1,80 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - - -{% block profile_content %} - -
    - - {% for post in posts.items %} -
    - -
    -
    -
    - {{ post.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ post.content|markup }} -
    -
    -
    -
    - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if posts.items|length > 1 %} -
    -
    - {{ render_pagination(posts, url_for('user.view_all_posts', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_topics.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_topics.html deleted file mode 100644 index 3cad0c81..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/all_topics.html +++ /dev/null @@ -1,82 +0,0 @@ -{% extends theme("user/profile_layout.html") %} -{% from theme('macros.html') import render_pagination, topic_pages %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_navigation %} - -{% endblock %} - -{% block profile_content %} - -
    - - {% for topic in topics.items %} - -
    - - -
    -
    -
    - {{ topic.date_created|format_date('%d %B %Y - %H:%M') }} -
    -
    - {{ topic.first_post.content|markup }} -
    -
    -
    -
    - - {% else %} -
    -
    - -
    -
    - {% endfor %} - - {% if topics.items|length > 1 %} -
    -
    - {{ render_pagination(topics, url_for('user.view_all_topics', username=user.username)) }} -
    -
    - {% endif %} - -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_email.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_email.html deleted file mode 100644 index d1b33059..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_email.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change E-Mail Address{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_email)}} - {{ horizontal_field(form.new_email)}} - {{ horizontal_field(form.confirm_new_email)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_password.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_password.html deleted file mode 100644 index 3e6656f3..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_password.html +++ /dev/null @@ -1,19 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}Change Password{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.old_password)}} - {{ horizontal_field(form.new_password)}} - {{ horizontal_field(form.confirm_new_password)}} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_user_details.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_user_details.html deleted file mode 100644 index 3ed68cdb..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/change_user_details.html +++ /dev/null @@ -1,31 +0,0 @@ -{% extends theme("user/settings_layout.html") %} - -{% block settings_content %} -{% from theme("macros.html") import horizontal_field, horizontal_select_field %} - -
    -
    - {% trans %}Change User Details{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_select_field(form.birthday, select_class="form-control", surrounded_div="col-sm-4") }} - {{ horizontal_field(form.gender) }} - {{ horizontal_field(form.location) }} - {{ horizontal_field(form.website) }} - {{ horizontal_field(form.avatar) }} - {{ horizontal_field(form.signature, div_class="col-sm-8 editor", rows="5", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - {{ horizontal_field(form.notes, div_class="col-sm-8 editor", rows="12", placeholder="", **{'data-provide': 'markdown', 'class': 'flaskbb-editor'}) }} - - {{ horizontal_field(form.submit) }} - - {% include theme('editor_help.html') %} -
    -
    -
    -{% endblock %} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/general_settings.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/general_settings.html deleted file mode 100644 index 46d38db0..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/general_settings.html +++ /dev/null @@ -1,18 +0,0 @@ -{% extends theme("user/settings_layout.html") %} -{% block settings_content %} -{% from theme("macros.html") import horizontal_field %} - -
    -
    - {% trans %}General Settings{% endtrans %} -
    -
    -
    - {{ form.hidden_tag() }} - {{ horizontal_field(form.theme) }} - {{ horizontal_field(form.language) }} - {{ horizontal_field(form.submit) }} -
    -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile.html deleted file mode 100644 index 61faf5dc..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile.html +++ /dev/null @@ -1,90 +0,0 @@ -{% extends theme("user/profile_layout.html") %} - -{% block breadcrumb %} - -{% endblock %} - -{% block profile_content %} - -
    - - -
    -
    - -
    -
    {% trans %}Info{% endtrans %}
    -
    -
    - {% if user.notes %} - {{ user.notes|markup }} - {% else %} -

    {% trans %}User has not added any notes about him.{% endtrans %}

    - {% endif %} -
    -
    -
    - - - {% if user.signature %} -
    -
    {% trans %}Signature{% endtrans %}
    -
    -
    - {{ user.signature|markup }} -
    -
    -
    - {% endif %} - -
    - {# Other information available for use: - # TODO: eventually use the information (i don't how i should represent it.. any ideas?) -
    -
    - {% trans %}Group{% endtrans %}: - {{ user.primary_group.name }} -
    -
    - {% trans %}Joined{% endtrans %}: - {{ user.date_joined|format_date('%b %d %Y') }} -
    -
    - {% trans %}Posts{% endtrans %}: - {{ user.post_count }} ({{ user.posts_per_day }} per day) -
    -
    - {% trans %}Last seen{% endtrans %}: - {%- if user.lastseen -%} {{ user.lastseen|time_since }} {%- else -%} {% trans %}Never seen{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Last post{% endtrans %}: - {%- if user.last_post -%} - {{ user.last_post.date_created|time_since }} - {%- else -%} - {% trans %}Never{% endtrans %} - {%- endif -%} -
    -
    - {% trans %}Location{% endtrans %}: - {%- if user.location -%} {{ user.location }} {%- else -%} {% trans %}No Info{% endtrans %} {%- endif -%} -
    -
    - {% trans %}Birthday{% endtrans %}: - {% if user.birthday %} - {{ user.birthday|format_date('%b %d %Y') }} - {% else %} - {% trans %}No Info{% endtrans %} - {% endif %} - {% if user.gender %} - ({{ user.gender }}) - {% endif %} -
    -
    - #} -
    -
    -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile_layout.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile_layout.html deleted file mode 100644 index 43938bea..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/profile_layout.html +++ /dev/null @@ -1,103 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} - -{% block breadcrumb %} -{% endblock %} - -
    -
    -
    -
    - -
    - {% block profile_sidebar %} -
    -
    - {% if user.avatar %} - {{ user.username }}'s Avatar - {% endif %} -
    - -
    - {{ user.primary_group.name }} -
    - -
    - {%- if user|is_online %} - online - {%- else %} - offline - {%- endif %} -
    - -
    -
    - {{ user.post_count }} posts -
    - -
    - {{ user.date_joined|format_date('%b %d %Y') }} -
    - -
    - {% if current_user.is_authenticated %} - - {% trans %}Message{% endtrans %} - - {% endif %} -
    -
    - - {% block profile_navigation %} - - {% endblock %} -
    - {% endblock %} - - {% block profile_content %} - {% endblock %} - -
    -
    -
    -
    -
    - -{% endblock %} {# content #} - -{% block scripts %} - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/settings_layout.html b/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/settings_layout.html deleted file mode 100644 index 458e667f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/templates/user/settings_layout.html +++ /dev/null @@ -1,28 +0,0 @@ -{% extends theme("layout.html") %} -{% block content %} -{%- from theme('macros.html') import navlink with context -%} - - - -
    -
    - -
    -
    - {% block settings_content %}{% endblock %} -
    -
    - -{% endblock %} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/Gulpfile.js b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/Gulpfile.js deleted file mode 100644 index d2efef26..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/Gulpfile.js +++ /dev/null @@ -1,147 +0,0 @@ -var gulp = require('gulp-help')(require('gulp')), - bower = require('gulp-bower') - sass = require('gulp-sass'), - uglify = require('gulp-uglify'), - rename = require('gulp-rename'), - concat = require('gulp-concat'), - notify = require('gulp-notify'), - autoprefixer = require('gulp-autoprefixer'), - imagemin = require('gulp-imagemin'); - -var basicConfig = { - srcDir: './src', - destDir: './static', - bowerDir: './bower_components' -}; - -var config = { - scss: { - src: basicConfig.srcDir + '/scss', - dest: basicConfig.destDir + '/css' - }, - - imgs: { - src: basicConfig.srcDir + '/imgs', - dest: basicConfig.destDir + '/imgs' - }, - - js: { - flaskbb: basicConfig.destDir + '/js/flaskbb.js', - emoji: basicConfig.destDir + '/js/emoji.js', - editorConfig: basicConfig.destDir + '/js/editor.js', - dest: basicConfig.destDir + '/js' - }, - - editor: { - lib: basicConfig.bowerDir + '/bootstrap-markdown/js/bootstrap-markdown.js', - parser: basicConfig.bowerDir + '/marked/lib/marked.js', - textcomplete: basicConfig.bowerDir + '/jquery-textcomplete/dist/jquery.textcomplete.min.js' - }, - - jquery: basicConfig.bowerDir + '/jquery/dist/jquery.min.js', - - bootstrap: { - js: basicConfig.bowerDir + '/bootstrap-sass/assets/javascripts/bootstrap.min.js', - scss: basicConfig.bowerDir + '/bootstrap-sass/assets/stylesheets' - }, - - font: { - icons: basicConfig.bowerDir + '/font-awesome/fonts/*.**', - scss: basicConfig.bowerDir + '/font-awesome/scss', - dest: basicConfig.destDir + '/fonts' - } -}; - - -gulp.task('bower', 'runs bower', function() { - return bower() - .pipe(gulp.dest(basicConfig.bowerDir)) -}); - - -gulp.task('update', 'updates the bower dependencies', function() { - return bower({ cmd: 'update' }); -}); - - -gulp.task('icons', 'copies the icons to destDir', function() { - return gulp.src(config.font.icons) - .pipe(gulp.dest(config.font.dest)); -}); - - -gulp.task('image', 'optimizes the images', function() { - return gulp.src(config.imgs.src + '/*') - .pipe(imagemin({ - progressive: true, - svgoPlugins: [ - { removeViewBox: false }, - { cleanupIDs: false } - ] - })) - .pipe(gulp.dest(config.imgs.dest)); -}); - - -gulp.task('sass', 'compiles all scss files to one css file', function () { - return gulp.src(config.scss.src + '/**/*.scss') - .pipe(sass({ - outputStyle: 'compressed', - precision: 8, - includePaths: [ - basicConfig.srcDir + '/scss', - config.bootstrap.scss, - config.font.scss - ]}) - .on('error', notify.onError(function(error) { - return "Error: " + error.message; - }))) - .pipe(autoprefixer('last 2 version')) - .pipe(rename({basename: 'styles', extname: '.min.css'})) - .pipe(gulp.dest(config.scss.dest)); -}); - - -gulp.task('main-scripts', 'concates all main js files to one js file', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.js.flaskbb]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('editor-scripts', 'concates all editor related scripts to one file', function() { - return gulp.src([config.editor.parser, - config.editor.lib, - config.editor.textcomplete, - config.js.emoji, - config.js.editorConfig]) - .pipe(concat('editor.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('vendor-scripts', 'concates all vendor js files to one js file (useful for debugging)', function() { - return gulp.src([config.jquery, - config.bootstrap.js, - config.editor.parser, - config.editor.lib, - config.editor.textcomplete]) - .pipe(concat('scripts.min.js')) - .pipe(uglify()) - .pipe(gulp.dest(config.js.dest)); -}); - - -gulp.task('scripts', ['main-scripts', 'editor-scripts'], function() {}); - - -gulp.task('watch', 'watches for .scss and .js changes', function() { - gulp.watch(config.sassPath + '/*.scss', ['sass']); - gulp.watch(config.jsPath + '/*.js', ['scripts']) -}); - -gulp.task('default', 'default command', ['bower', 'icons', 'sass', 'scripts', 'image']); diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/README.md b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/README.md deleted file mode 100644 index b03e5b64..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/README.md +++ /dev/null @@ -1,112 +0,0 @@ -# INSTALLATION - -Make sure that you have npm (nodejs) installed. You can get it from [ -here](https://nodejs.org). - -This theme uses SASS (http://sass-lang.com/), a CSS preprocessor, for better development. - -Before you can compile the source, you need to get a few dependencies first. -Run (in the directory where **this** README is located): - - -- ``npm install`` - -and afterwards - -- ``node_modules/gulp/bin/gulp.js`` - - -# TASKS - -To get a list of all available tasks you can either read the ``Gulpfile.js`` -or see the list below: - - Usage - gulp [TASK] [OPTIONS...] - - Available tasks - bower runs bower - default default command [bower, icons, sass, scripts, image] - editor-scripts concates all editor related scripts to one file - help Display this help text. - icons copies the icons to destDir - image optimizes the images - main-scripts concates all main js files to one js file - sass compiles all scss files to one css file - scripts [main-scripts, editor-scripts] - update updates the bower dependencies - vendor-scripts concates all vendor js files to one js file (useful for debugging) - watch watches for .scss and .js changes - -You can run a task with gulp like this: - -``node_modules/gulp/bin/gulp.js watch`` - - -# CREATING YOUR OWN THEME - -If you want to create your own theme based on this theme you have to take care -of a few things first. - -1. Create a new folder within the ``themes/`` folder and give it the name -of your theme. -2. Copy the content of the ``aurora/`` folder into your folder theme's folder. -3. Create a new folder called ``static/`` in your themes folder. -4. (Optional) If you plan on modifying templates you also need to create a -``templates/`` folder where your templates are located. To edit a template, -you have to copy them over from flaskbb's template folder into your template -folder -5. Add some information about your theme using the ``info.json``. Have look at -aurora's ``info.json`` for an example. -6. Edit the ``bower.json`` and ``package.json`` to your needs. -7. Happy theming! - -In the end your folder structure should look like this: - - ── example_theme/ - ├── bower_components - │   └── ... - ├── node_modules - │   └── ... - ├── src - │   ├── styles.scss - │   ├── _aurora.scss - │   ├── _bootstrap-variables.scss - │   ├── _button.scss - │   ├── _category.scss - │   ├── _editor.scss - │   ├── _fixes.scss - │   ├── _forum.scss - │   ├── _management.scss - │   ├── _misc.scss - │   ├── _mixins.scss - │   ├── _navigation.scss - │   ├── _panel.scss - │   ├── _profile.scss - │   ├── _topic.scss - │   └── _variables.scss - ├── static - │   ├── css - │   ├── fonts - │   └── js - ├── templates - │   └── layout.html - ├── bower.json - ├── Gulpfile.js - ├── info.json - ├── LICENSE - ├── package.json - └── README.md - - -## info.json - -This file should contain following information about a theme: - -* ``"application": "flaskbb"`` - The name of the application, in our case this should always be flaskbb -* ``"identifier": "aurora"`` - The unique name of the theme. This identifier should match the themes folder name! -* ``"name": "Aurora"`` - Human readable name of the theme -* ``"author": "sh4nks"`` - The name of the author. -* ``"license": "BSD 3-Clause"`` - Every theme should include define a license under which terms the theme can be used. -* ``"description": "The default theme for FlaskBB."`` - A short description about the theme. For example: "A minimalistic blue theme". -* ``"version": "1.0.0"`` - The version of the theme. diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/bower.json b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/bower.json deleted file mode 100644 index fd652f95..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/bower.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "aurora", - "homepage": "https://github.com/sh4nks/flaskbb", - "authors": [ - "Peter Justin " - ], - "description": "The default theme for FlaskBB.", - "main": "static/styles.css", - "moduleType": [], - "keywords": [ - "flaskbb", - "theme" - ], - "license": "BSD", - "private": true, - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests" - ], - "dependencies": { - "jquery": "~2.2.3", - "bootstrap-sass": "~3.3.6", - "font-awesome": "fontawesome#~4.5.0", - "bootstrap-markdown": "~2.10.0", - "marked": "~0.3.5", - "jquery-textcomplete": "~1.3.4" - } -} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/info.json b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/info.json deleted file mode 100644 index 603fb998..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/info.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "application": "flaskbb", - "identifier": "aurora", - "name": "Aurora", - "author": "sh4nks", - "license": "BSD 3-Clause", - "description": "The default theme for FlaskBB.", - "version": "1.0.0" -} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/package.json b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/package.json deleted file mode 100644 index 29c0c66c..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/package.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "name": "flaskbb-theme-aurora", - "description": "The default theme for FlaskBB.", - "version": "1.0.0", - "license": "BSD-3-Clause", - "author": "Peter Justin", - "url": "https://flaskbb.org", - "private": true, - "devDependencies": { - "bower": "^1.6.9", - "gulp": "^3.8.11", - "gulp-autoprefixer": "^3.1.0", - "gulp-bower": "0.0.13", - "gulp-concat": "~2.6.0", - "gulp-help": "^1.6.1", - "gulp-imagemin": "^2.4.0", - "gulp-notify": "^2.0.1", - "gulp-rename": "^1.2.2", - "gulp-sass": "^2.2.0", - "gulp-uglify": "~1.5.3" - } -} diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_aurora.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_aurora.scss deleted file mode 100644 index 658aa2f6..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_aurora.scss +++ /dev/null @@ -1,16 +0,0 @@ -@import "variables"; -@import "mixins"; - -@import "misc"; -@import "fixes"; -@import "navigation"; -@import "editor"; -@import "button"; - -@import "category"; -@import "forum"; -@import "topic"; -@import "panel"; -@import "profile"; - -@import "management"; diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_bootstrap-variables.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_bootstrap-variables.scss deleted file mode 100644 index 7657e775..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_bootstrap-variables.scss +++ /dev/null @@ -1,842 +0,0 @@ -// Override Bootstrap variables here (defaults from bootstrap-sass v3.3.5): - -// -// Variables -// -------------------------------------------------- - -//== Colors -// -//## Gray and brand colors for use across Bootstrap. - -$gray-base: #000; -// $gray-darker: lighten($gray-base, 13.5%) // #222 -$gray-dark: lighten($gray-base, 20%); // #333 -// $gray: lighten($gray-base, 33.5%) // #555 -// $gray-light: lighten($gray-base, 46.7%) // #777 -// $gray-lighter: lighten($gray-base, 93.5%) // #eee - -// $brand-primary: darken(#428bca, 6.5%) // #337ab7 -// $brand-success: #5cb85c -// $brand-info: #5bc0de -// $brand-warning: #f0ad4e -// $brand-danger: #d9534f - -//== Scaffolding -// -//## Settings for some of the most global styles. - -//** Background color for ``. -//$body-bg: #f5f8fa; -// --- or --- -//$body-bg: #e8f1f2; -// --- or --- -$body-bg: #F6F9FC; -//** Global text color on ``. -$text-color: $gray-dark; - -//** Global textual link color. -// $link-color: $brand-primary -//** Link hover color set via `darken()` function. -// $link-hover-color: darken($link-color, 15%) -//** Link hover decoration. -// $link-hover-decoration: underline - -//== Typography -// -//## Font, line-height, and color for body text, headings, and more. - -// $font-family-sans-serif: "Helvetica Neue", Helvetica, Arial, sans-serif -// $font-family-serif: Georgia, "Times New Roman", Times, serif -//** Default monospace fonts for ``, ``, and `
    `.
    -// $font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace
    -// $font-family-base:        $font-family-sans-serif
    -
    -// $font-size-base:          14px
    -// $font-size-large:         ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-small:         ceil(($font-size-base * 0.85)) // ~12px
    -
    -// $font-size-h1:            floor(($font-size-base * 2.6)) // ~36px
    -// $font-size-h2:            floor(($font-size-base * 2.15)) // ~30px
    -// $font-size-h3:            ceil(($font-size-base * 1.7)) // ~24px
    -// $font-size-h4:            ceil(($font-size-base * 1.25)) // ~18px
    -// $font-size-h5:            $font-size-base
    -// $font-size-h6:            ceil(($font-size-base * 0.85)) // ~12px
    -
    -//** Unit-less `line-height` for use in components like buttons.
    -// $line-height-base:        1.428571429 // 20/14
    -//** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
    -// $line-height-computed:    floor(($font-size-base * $line-height-base)) // ~20px
    -
    -//** By default, this inherits from the ``.
    -// $headings-font-family:    inherit
    -// $headings-font-weight:    500
    -// $headings-line-height:    1.1
    -// $headings-color:          inherit
    -
    -//== Iconography
    -//
    -//## Specify custom location and filename of the included Glyphicons icon font. Useful for those including Bootstrap via Bower.
    -
    -//** Load fonts from this directory.
    -
    -// [converter] If $bootstrap-sass-asset-helper if used, provide path relative to the assets load path.
    -// [converter] This is because some asset helpers, such as Sprockets, do not work with file-relative paths.
    -// $icon-font-path: if($bootstrap-sass-asset-helper, "bootstrap/", "../fonts/bootstrap/")
    -
    -//** File name for all font files.
    -// $icon-font-name:          "glyphicons-halflings-regular"
    -//** Element ID within SVG icon file.
    -// $icon-font-svg-id:        "glyphicons_halflingsregular"
    -
    -//== Components
    -//
    -//## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
    -
    -// $padding-base-vertical:     6px
    -// $padding-base-horizontal:   12px
    -
    -// $padding-large-vertical:    10px
    -// $padding-large-horizontal:  16px
    -
    -// $padding-small-vertical:    5px
    -// $padding-small-horizontal:  10px
    -
    -// $padding-xs-vertical:       1px
    -// $padding-xs-horizontal:     5px
    -
    -// $line-height-large:         1.3333333 // extra decimals for Win 8.1 Chrome
    -// $line-height-small:         1.5
    -
    -// $border-radius-base:        4px
    -// $border-radius-large:       6px
    -// $border-radius-small:       3px
    -
    -//** Global color for active items (e.g., navs or dropdowns).
    -// $component-active-color:    #fff
    -//** Global background color for active items (e.g., navs or dropdowns).
    -// $component-active-bg:       $brand-primary
    -
    -//** Width of the `border` for generating carets that indicator dropdowns.
    -// $caret-width-base:          4px
    -//** Carets increase slightly in size for larger components.
    -// $caret-width-large:         5px
    -
    -//== Tables
    -//
    -//## Customizes the `.table` component with basic values, each used across all table variations.
    -
    -//** Padding for ``s and ``s.
    -// $table-cell-padding:            8px
    -//** Padding for cells in `.table-condensed`.
    -// $table-condensed-cell-padding:  5px
    -
    -//** Default background color used for all tables.
    -// $table-bg:                      transparent
    -//** Background color used for `.table-striped`.
    -// $table-bg-accent:               #f9f9f9
    -//** Background color used for `.table-hover`.
    -// $table-bg-hover:                #f5f5f5
    -// $table-bg-active:               $table-bg-hover
    -
    -//** Border color for table and cell borders.
    -// $table-border-color:            #ddd
    -
    -//== Buttons
    -//
    -//## For each of Bootstrap's buttons, define text, background and border color.
    -
    -// $btn-font-weight:                normal
    -
    -// $btn-default-color:              #333
    -// $btn-default-bg:                 #fff
    -// $btn-default-border:             #ccc
    -
    -// $btn-primary-color:              #fff
    -// $btn-primary-bg:                 $brand-primary
    -// $btn-primary-border:             darken($btn-primary-bg, 5%)
    -
    -// $btn-success-color:              #fff
    -// $btn-success-bg:                 $brand-success
    -// $btn-success-border:             darken($btn-success-bg, 5%)
    -
    -// $btn-info-color:                 #fff
    -// $btn-info-bg:                    $brand-info
    -// $btn-info-border:                darken($btn-info-bg, 5%)
    -
    -// $btn-warning-color:              #fff
    -// $btn-warning-bg:                 $brand-warning
    -// $btn-warning-border:             darken($btn-warning-bg, 5%)
    -
    -// $btn-danger-color:               #fff
    -// $btn-danger-bg:                  $brand-danger
    -// $btn-danger-border:              darken($btn-danger-bg, 5%)
    -
    -// $btn-link-disabled-color:        $gray-light
    -
    -// Allows for customizing button radius independently from global border radius
    -// $btn-border-radius-base:         $border-radius-base
    -// $btn-border-radius-large:        $border-radius-large
    -// $btn-border-radius-small:        $border-radius-small
    -
    -//== Forms
    -//
    -//##
    -
    -//** `` background color
    -// $input-bg:                       #fff
    -//** `` background color
    -// $input-bg-disabled:              $gray-lighter
    -
    -//** Text color for ``s
    -// $input-color:                    $gray
    -//** `` border color
    -// $input-border:                   #ccc
    -
    -// TODO: Rename `$input-border-radius` to `$input-border-radius-base` in v4
    -//** Default `.form-control` border radius
    -// This has no effect on ``s in CSS.
    -// $input-border-radius:            $border-radius-base
    -//** Large `.form-control` border radius
    -// $input-border-radius-large:      $border-radius-large
    -//** Small `.form-control` border radius
    -// $input-border-radius-small:      $border-radius-small
    -
    -//** Border color for inputs on focus
    -// $input-border-focus:             #66afe9
    -
    -//** Placeholder text color
    -// $input-color-placeholder:        #999
    -
    -//** Default `.form-control` height
    -// $input-height-base:              ($line-height-computed + ($padding-base-vertical * 2) + 2)
    -//** Large `.form-control` height
    -// $input-height-large:             (ceil($font-size-large * $line-height-large) + ($padding-large-vertical * 2) + 2)
    -//** Small `.form-control` height
    -// $input-height-small:             (floor($font-size-small * $line-height-small) + ($padding-small-vertical * 2) + 2)
    -
    -//** `.form-group` margin
    -// $form-group-margin-bottom:       15px
    -
    -// $legend-color:                   $gray-dark
    -// $legend-border-color:            #e5e5e5
    -
    -//** Background color for textual input addons
    -// $input-group-addon-bg:           $gray-lighter
    -//** Border color for textual input addons
    -// $input-group-addon-border-color: $input-border
    -
    -//** Disabled cursor for form controls and buttons.
    -// $cursor-disabled:                not-allowed
    -
    -//== Dropdowns
    -//
    -//## Dropdown menu container and contents.
    -
    -//** Background for the dropdown menu.
    -// $dropdown-bg:                    #fff
    -//** Dropdown menu `border-color`.
    -// $dropdown-border:                rgba(0,0,0,.15)
    -//** Dropdown menu `border-color` **for IE8**.
    -// $dropdown-fallback-border:       #ccc
    -//** Divider color for between dropdown items.
    -// $dropdown-divider-bg:            #e5e5e5
    -
    -//** Dropdown link text color.
    -// $dropdown-link-color:            $gray-dark
    -//** Hover color for dropdown links.
    -// $dropdown-link-hover-color:      darken($gray-dark, 5%)
    -//** Hover background for dropdown links.
    -// $dropdown-link-hover-bg:         #f5f5f5
    -
    -//** Active dropdown menu item text color.
    -// $dropdown-link-active-color:     $component-active-color
    -//** Active dropdown menu item background color.
    -// $dropdown-link-active-bg:        $component-active-bg
    -
    -//** Disabled dropdown menu item background color.
    -// $dropdown-link-disabled-color:   $gray-light
    -
    -//** Text color for headers within dropdown menus.
    -// $dropdown-header-color:          $gray-light
    -
    -//** Deprecated `$dropdown-caret-color` as of v3.1.0
    -// $dropdown-caret-color:           #000
    -
    -//-- Z-index master list
    -//
    -// Warning: Avoid customizing these values. They're used for a bird's eye view
    -// of components dependent on the z-axis and are designed to all work together.
    -//
    -// Note: These variables are not generated into the Customizer.
    -
    -// $zindex-navbar:            1000
    -// $zindex-dropdown:          1000
    -// $zindex-popover:           1060
    -// $zindex-tooltip:           1070
    -// $zindex-navbar-fixed:      1030
    -// $zindex-modal-background:  1040
    -// $zindex-modal:             1050
    -
    -//== Media queries breakpoints
    -//
    -//## Define the breakpoints at which your layout will change, adapting to different screen sizes.
    -
    -// Extra small screen / phone
    -//** Deprecated `$screen-xs` as of v3.0.1
    -// $screen-xs:                  480px
    -//** Deprecated `$screen-xs-min` as of v3.2.0
    -// $screen-xs-min:              $screen-xs
    -//** Deprecated `$screen-phone` as of v3.0.1
    -// $screen-phone:               $screen-xs-min
    -
    -// Small screen / tablet
    -//** Deprecated `$screen-sm` as of v3.0.1
    -// $screen-sm:                  768px
    -// $screen-sm-min:              $screen-sm
    -//** Deprecated `$screen-tablet` as of v3.0.1
    -// $screen-tablet:              $screen-sm-min
    -
    -// Medium screen / desktop
    -//** Deprecated `$screen-md` as of v3.0.1
    -// $screen-md:                  992px
    -// $screen-md-min:              $screen-md
    -//** Deprecated `$screen-desktop` as of v3.0.1
    -// $screen-desktop:             $screen-md-min
    -
    -// Large screen / wide desktop
    -//** Deprecated `$screen-lg` as of v3.0.1
    -// $screen-lg:                  1200px
    -// $screen-lg-min:              $screen-lg
    -//** Deprecated `$screen-lg-desktop` as of v3.0.1
    -// $screen-lg-desktop:          $screen-lg-min
    -
    -// So media queries don't overlap when required, provide a maximum
    -// $screen-xs-max:              ($screen-sm-min - 1)
    -// $screen-sm-max:              ($screen-md-min - 1)
    -// $screen-md-max:              ($screen-lg-min - 1)
    -
    -//== Grid system
    -//
    -//## Define your custom responsive grid.
    -
    -//** Number of columns in the grid.
    -// $grid-columns:              12
    -//** Padding between columns. Gets divided in half for the left and right.
    -// $grid-gutter-width:         30px
    -// Navbar collapse
    -//** Point at which the navbar becomes uncollapsed.
    -// $grid-float-breakpoint:     $screen-sm-min
    -//** Point at which the navbar begins collapsing.
    -// $grid-float-breakpoint-max: ($grid-float-breakpoint - 1)
    -
    -//== Container sizes
    -//
    -//## Define the maximum width of `.container` for different screen sizes.
    -
    -// Small screen / tablet
    -// $container-tablet:             (720px + $grid-gutter-width)
    -//** For `$screen-sm-min` and up.
    -// $container-sm:                 $container-tablet
    -
    -// Medium screen / desktop
    -// $container-desktop:            (940px + $grid-gutter-width)
    -//** For `$screen-md-min` and up.
    -// $container-md:                 $container-desktop
    -
    -// Large screen / wide desktop
    -// $container-large-desktop:      (1140px + $grid-gutter-width)
    -//** For `$screen-lg-min` and up.
    -// $container-lg:                 $container-large-desktop
    -
    -//== Navbar
    -//
    -//##
    -
    -// Basics of a navbar
    -// $navbar-height:                    50px
    -// $navbar-margin-bottom:             $line-height-computed
    -$navbar-border-radius:             0; //$border-radius-base
    -// $navbar-padding-horizontal:        floor(($grid-gutter-width / 2))
    -// $navbar-padding-vertical:          (($navbar-height - $line-height-computed) / 2)
    -// $navbar-collapse-max-height:       340px
    -
    -$navbar-default-color:             #555; //#777
    -$navbar-default-bg:                #f8f8f8;
    -$navbar-default-border:            #cad7e1; //darken($navbar-default-bg, 6.5%)
    -
    -// Navbar links
    -$navbar-default-link-color:                #555;
    -$navbar-default-link-hover-color:          #555;
    -$navbar-default-link-hover-bg:             #e7e7e7;
    -$navbar-default-link-active-color:         #555;
    -$navbar-default-link-active-bg:            #e7e7e7 ;// darken($navbar-default-bg, 6.5%)
    -$navbar-default-link-disabled-color:       #ccc;
    -$navbar-default-link-disabled-bg:          transparent;
    -
    -// Navbar brand label
    -// $navbar-default-brand-color:               $navbar-default-link-color
    -// $navbar-default-brand-hover-color:         darken($navbar-default-brand-color, 10%)
    -// $navbar-default-brand-hover-bg:            transparent
    -
    -// Navbar toggle
    -// $navbar-default-toggle-hover-bg:           #ddd
    -// $navbar-default-toggle-icon-bar-bg:        #888
    -// $navbar-default-toggle-border-color:       #ddd
    -
    -//=== Inverted navbar
    -// Reset inverted navbar basics
    -// $navbar-inverse-color:                      lighten($gray-light, 15%)
    -// $navbar-inverse-bg:                         #222
    -// $navbar-inverse-border:                     darken($navbar-inverse-bg, 10%)
    -
    -// Inverted navbar links
    -// $navbar-inverse-link-color:                 lighten($gray-light, 15%)
    -// $navbar-inverse-link-hover-color:           #fff
    -// $navbar-inverse-link-hover-bg:              transparent
    -// $navbar-inverse-link-active-color:          $navbar-inverse-link-hover-color
    -// $navbar-inverse-link-active-bg:             darken($navbar-inverse-bg, 10%)
    -// $navbar-inverse-link-disabled-color:        #444
    -// $navbar-inverse-link-disabled-bg:           transparent
    -
    -// Inverted navbar brand label
    -// $navbar-inverse-brand-color:                $navbar-inverse-link-color
    -// $navbar-inverse-brand-hover-color:          #fff
    -// $navbar-inverse-brand-hover-bg:             transparent
    -
    -// Inverted navbar toggle
    -// $navbar-inverse-toggle-hover-bg:            #333
    -// $navbar-inverse-toggle-icon-bar-bg:         #fff
    -// $navbar-inverse-toggle-border-color:        #333
    -
    -//== Navs
    -//
    -//##
    -
    -//=== Shared nav styles
    -// $nav-link-padding:                          10px 15px
    -// $nav-link-hover-bg:                         $gray-lighter
    -
    -// $nav-disabled-link-color:                   $gray-light
    -// $nav-disabled-link-hover-color:             $gray-light
    -
    -//== Tabs
    -// $nav-tabs-border-color:                     #ddd
    -
    -// $nav-tabs-link-hover-border-color:          $gray-lighter
    -
    -// $nav-tabs-active-link-hover-bg:             $body-bg
    -// $nav-tabs-active-link-hover-color:          $gray
    -// $nav-tabs-active-link-hover-border-color:   #ddd
    -
    -// $nav-tabs-justified-link-border-color:            #ddd
    -// $nav-tabs-justified-active-link-border-color:     $body-bg
    -
    -//== Pills
    -$nav-pills-border-radius:                    0;//$border-radius-base
    -// $nav-pills-active-link-hover-bg:            $component-active-bg
    -// $nav-pills-active-link-hover-color:         $component-active-color
    -
    -//== Pagination
    -//
    -//##
    -
    -// $pagination-color:                     $link-color
    -// $pagination-bg:                        #fff
    -// $pagination-border:                    #ddd
    -
    -// $pagination-hover-color:               $link-hover-color
    -// $pagination-hover-bg:                  $gray-lighter
    -// $pagination-hover-border:              #ddd
    -
    -// $pagination-active-color:              #fff
    -// $pagination-active-bg:                 $brand-primary
    -// $pagination-active-border:             $brand-primary
    -
    -// $pagination-disabled-color:            $gray-light
    -// $pagination-disabled-bg:               #fff
    -// $pagination-disabled-border:           #ddd
    -
    -//== Pager
    -//
    -//##
    -
    -// $pager-bg:                             $pagination-bg
    -// $pager-border:                         $pagination-border
    -// $pager-border-radius:                  15px
    -
    -// $pager-hover-bg:                       $pagination-hover-bg
    -
    -// $pager-active-bg:                      $pagination-active-bg
    -// $pager-active-color:                   $pagination-active-color
    -
    -// $pager-disabled-color:                 $pagination-disabled-color
    -
    -//== Jumbotron
    -//
    -//##
    -
    -// $jumbotron-padding:              30px
    -// $jumbotron-color:                inherit
    -// $jumbotron-bg:                   $gray-lighter
    -// $jumbotron-heading-color:        inherit
    -// $jumbotron-font-size:            ceil(($font-size-base * 1.5))
    -// $jumbotron-heading-font-size:    ceil(($font-size-base * 4.5))
    -
    -//== Form states and alerts
    -//
    -//## Define colors for form feedback states and, by default, alerts.
    -
    -// $state-success-text:             #3c763d
    -// $state-success-bg:               #dff0d8
    -// $state-success-border:           darken(adjust-hue($state-success-bg, -10), 5%)
    -
    -// $state-info-text:                #31708f
    -// $state-info-bg:                  #d9edf7
    -// $state-info-border:              darken(adjust-hue($state-info-bg, -10), 7%)
    -
    -// $state-warning-text:             #8a6d3b
    -// $state-warning-bg:               #fcf8e3
    -// $state-warning-border:           darken(adjust-hue($state-warning-bg, -10), 5%)
    -
    -// $state-danger-text:              #a94442
    -// $state-danger-bg:                #f2dede
    -// $state-danger-border:            darken(adjust-hue($state-danger-bg, -10), 5%)
    -
    -//== Tooltips
    -//
    -//##
    -
    -//** Tooltip max width
    -// $tooltip-max-width:           200px
    -//** Tooltip text color
    -// $tooltip-color:               #fff
    -//** Tooltip background color
    -// $tooltip-bg:                  #000
    -// $tooltip-opacity:             .9
    -
    -//** Tooltip arrow width
    -// $tooltip-arrow-width:         5px
    -//** Tooltip arrow color
    -// $tooltip-arrow-color:         $tooltip-bg
    -
    -//== Popovers
    -//
    -//##
    -
    -//** Popover body background color
    -// $popover-bg:                          #fff
    -//** Popover maximum width
    -// $popover-max-width:                   276px
    -//** Popover border color
    -// $popover-border-color:                rgba(0,0,0,.2)
    -//** Popover fallback border color
    -// $popover-fallback-border-color:       #ccc
    -
    -//** Popover title background color
    -// $popover-title-bg:                    darken($popover-bg, 3%)
    -
    -//** Popover arrow width
    -// $popover-arrow-width:                 10px
    -//** Popover arrow color
    -// $popover-arrow-color:                 $popover-bg
    -
    -//** Popover outer arrow width
    -// $popover-arrow-outer-width:           ($popover-arrow-width + 1)
    -//** Popover outer arrow color
    -// $popover-arrow-outer-color:           fade_in($popover-border-color, 0.05)
    -//** Popover outer arrow fallback color
    -// $popover-arrow-outer-fallback-color:  darken($popover-fallback-border-color, 20%)
    -
    -//== Labels
    -//
    -//##
    -
    -//** Default label background color
    -// $label-default-bg:            $gray-light
    -//** Primary label background color
    -// $label-primary-bg:            $brand-primary
    -//** Success label background color
    -// $label-success-bg:            $brand-success
    -//** Info label background color
    -// $label-info-bg:               $brand-info
    -//** Warning label background color
    -// $label-warning-bg:            $brand-warning
    -//** Danger label background color
    -// $label-danger-bg:             $brand-danger
    -
    -//** Default label text color
    -// $label-color:                 #fff
    -//** Default text color of a linked label
    -// $label-link-hover-color:      #fff
    -
    -//== Modals
    -//
    -//##
    -
    -//** Padding applied to the modal body
    -// $modal-inner-padding:         15px
    -
    -//** Padding applied to the modal title
    -// $modal-title-padding:         15px
    -//** Modal title line-height
    -// $modal-title-line-height:     $line-height-base
    -
    -//** Background color of modal content area
    -// $modal-content-bg:                             #fff
    -//** Modal content border color
    -// $modal-content-border-color:                   rgba(0,0,0,.2)
    -//** Modal content border color **for IE8**
    -// $modal-content-fallback-border-color:          #999
    -
    -//** Modal backdrop background color
    -// $modal-backdrop-bg:           #000
    -//** Modal backdrop opacity
    -// $modal-backdrop-opacity:      .5
    -//** Modal header border color
    -// $modal-header-border-color:   #e5e5e5
    -//** Modal footer border color
    -// $modal-footer-border-color:   $modal-header-border-color
    -
    -// $modal-lg:                    900px
    -// $modal-md:                    600px
    -// $modal-sm:                    300px
    -
    -//== Alerts
    -//
    -//## Define alert colors, border radius, and padding.
    -
    -// $alert-padding:               15px
    -// $alert-border-radius:         $border-radius-base
    -// $alert-link-font-weight:      bold
    -
    -// $alert-success-bg:            $state-success-bg
    -// $alert-success-text:          $state-success-text
    -// $alert-success-border:        $state-success-border
    -
    -// $alert-info-bg:               $state-info-bg
    -// $alert-info-text:             $state-info-text
    -// $alert-info-border:           $state-info-border
    -
    -// $alert-warning-bg:            $state-warning-bg
    -// $alert-warning-text:          $state-warning-text
    -// $alert-warning-border:        $state-warning-border
    -
    -// $alert-danger-bg:             $state-danger-bg
    -// $alert-danger-text:           $state-danger-text
    -// $alert-danger-border:         $state-danger-border
    -
    -//== Progress bars
    -//
    -//##
    -
    -//** Background color of the whole progress component
    -// $progress-bg:                 #f5f5f5
    -//** Progress bar text color
    -// $progress-bar-color:          #fff
    -//** Variable for setting rounded corners on progress bar.
    -// $progress-border-radius:      $border-radius-base
    -
    -//** Default progress bar color
    -// $progress-bar-bg:             $brand-primary
    -//** Success progress bar color
    -// $progress-bar-success-bg:     $brand-success
    -//** Warning progress bar color
    -// $progress-bar-warning-bg:     $brand-warning
    -//** Danger progress bar color
    -// $progress-bar-danger-bg:      $brand-danger
    -//** Info progress bar color
    -// $progress-bar-info-bg:        $brand-info
    -
    -//== List group
    -//
    -//##
    -
    -//** Background color on `.list-group-item`
    -// $list-group-bg:                 #fff
    -//** `.list-group-item` border color
    -// $list-group-border:             #ddd
    -//** List group border radius
    -// $list-group-border-radius:      $border-radius-base
    -
    -//** Background color of single list items on hover
    -// $list-group-hover-bg:           #f5f5f5
    -//** Text color of active list items
    -// $list-group-active-color:       $component-active-color
    -//** Background color of active list items
    -// $list-group-active-bg:          $component-active-bg
    -//** Border color of active list elements
    -// $list-group-active-border:      $list-group-active-bg
    -//** Text color for content within active list items
    -// $list-group-active-text-color:  lighten($list-group-active-bg, 40%)
    -
    -//** Text color of disabled list items
    -// $list-group-disabled-color:      $gray-light
    -//** Background color of disabled list items
    -// $list-group-disabled-bg:         $gray-lighter
    -//** Text color for content within disabled list items
    -// $list-group-disabled-text-color: $list-group-disabled-color
    -
    -// $list-group-link-color:         #555
    -// $list-group-link-hover-color:   $list-group-link-color
    -// $list-group-link-heading-color: #333
    -
    -//== Panels
    -//
    -//##
    -
    -// $panel-bg:                    #fff
    -
    -// $panel-body-padding:          15px
    -// $panel-heading-padding:       10px 15px
    -// $panel-footer-padding:        $panel-heading-padding
    -$panel-border-radius:         0; //$border-radius-base
    -
    -//** Border color for elements within panels
    -$panel-inner-border:          #cad7e1; // #ddd
    -// $panel-footer-bg:             #f5f5f5;
    -
    -// $panel-default-text:          $gray-dark
    -$panel-default-border:        #cad7e1; //#ddd
    -// $panel-default-heading-bg:    #f5f5f5;
    -
    -// $panel-primary-text:          #fff
    -// $panel-primary-border:        $brand-primary
    -// $panel-primary-heading-bg:    $brand-primary
    -
    -// $panel-success-text:          $state-success-text
    -// $panel-success-border:        $state-success-border
    -// $panel-success-heading-bg:    $state-success-bg
    -
    -// $panel-info-text:             $state-info-text
    -// $panel-info-border:           $state-info-border
    -// $panel-info-heading-bg:       $state-info-bg
    -
    -// $panel-warning-text:          $state-warning-text
    -// $panel-warning-border:        $state-warning-border
    -// $panel-warning-heading-bg:    $state-warning-bg
    -
    -// $panel-danger-text:           $state-danger-text
    -// $panel-danger-border:         $state-danger-border
    -// $panel-danger-heading-bg:     $state-danger-bg
    -
    -//== Thumbnails
    -//
    -//##
    -
    -//** Padding around the thumbnail image
    -// $thumbnail-padding:           4px
    -//** Thumbnail background color
    -// $thumbnail-bg:                $body-bg
    -//** Thumbnail border color
    -// $thumbnail-border:            #ddd
    -//** Thumbnail border radius
    -// $thumbnail-border-radius:     $border-radius-base
    -
    -//** Custom text color for thumbnail captions
    -// $thumbnail-caption-color:     $text-color
    -//** Padding around the thumbnail caption
    -// $thumbnail-caption-padding:   9px
    -
    -//== Wells
    -//
    -//##
    -
    -// $well-bg:                     #f5f5f5
    -// $well-border:                 darken($well-bg, 7%)
    -
    -//== Badges
    -//
    -//##
    -
    -// $badge-color:                 #fff
    -//** Linked badge text color on hover
    -// $badge-link-hover-color:      #fff
    -// $badge-bg:                    $gray-light
    -
    -//** Badge text color in active nav link
    -// $badge-active-color:          $link-color
    -//** Badge background color in active nav link
    -// $badge-active-bg:             #fff
    -
    -// $badge-font-weight:           bold
    -// $badge-line-height:           1
    -// $badge-border-radius:         10px
    -
    -//== Breadcrumbs
    -//
    -//##
    -
    -// $breadcrumb-padding-vertical:   8px
    -// $breadcrumb-padding-horizontal: 15px
    -//** Breadcrumb background color
    -// $breadcrumb-bg:                 #f5f5f5
    -//** Breadcrumb text color
    -// $breadcrumb-color:              #ccc
    -//** Text color of current page in the breadcrumb
    -// $breadcrumb-active-color:       $gray-light
    -//** Textual separator for between breadcrumb elements
    -// $breadcrumb-separator:          "/"
    -
    -//== Carousel
    -//
    -//##
    -
    -// $carousel-text-shadow:                        0 1px 2px rgba(0,0,0,.6)
    -
    -// $carousel-control-color:                      #fff
    -// $carousel-control-width:                      15%
    -// $carousel-control-opacity:                    .5
    -// $carousel-control-font-size:                  20px
    -
    -// $carousel-indicator-active-bg:                #fff
    -// $carousel-indicator-border-color:             #fff
    -
    -// $carousel-caption-color:                      #fff
    -
    -//== Close
    -//
    -//##
    -
    -// $close-font-weight:           bold
    -// $close-color:                 #000
    -// $close-text-shadow:           0 1px 0 #fff
    -
    -//== Code
    -//
    -//##
    -
    -// $code-color:                  #c7254e
    -// $code-bg:                     #f9f2f4
    -
    -// $kbd-color:                   #fff
    -// $kbd-bg:                      #333
    -
    -// $pre-bg:                      #f5f5f5
    -// $pre-color:                   $gray-dark
    -// $pre-border-color:            #ccc
    -// $pre-scrollable-max-height:   340px
    -
    -//== Type
    -//
    -//##
    -
    -//** Horizontal offset for forms and lists.
    -// $component-offset-horizontal: 180px
    -//** Text muted color
    -// $text-muted:                  $gray-light
    -//** Abbreviations and acronyms border color
    -// $abbr-border-color:           $gray-light
    -//** Headings small color
    -// $headings-small-color:        $gray-light
    -//** Blockquote small color
    -// $blockquote-small-color:      $gray-light
    -//** Blockquote font size
    -// $blockquote-font-size:        ($font-size-base * 1.25)
    -//** Blockquote border color
    -// $blockquote-border-color:     $gray-lighter
    -//** Page header border color
    -// $page-header-border-color:    $gray-lighter
    -//** Width of horizontal description list titles
    -// $dl-horizontal-offset:        $component-offset-horizontal
    -//** Horizontal line color.
    -// $hr-border:                   $gray-lighter
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_button.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_button.scss
    deleted file mode 100644
    index 3417e117..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_button.scss
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -// a "link" that is actually a button
    -.btn.btn-link {
    -    border: none;
    -    color: #337ab7;
    -    text-decoration: none;
    -    padding: 0;
    -    // for some (yet for me unkown) reasons this required to be on the same
    -    // height as for normal links (happens when using the inline-forms)
    -    margin-bottom: 2px;
    -
    -    &:focus, &:hover {
    -    color: #23527c;
    -    text-decoration: underline;
    -}
    -}
    -
    -.btn-icon {
    -    font-family: 'FontAwesome';
    -    font-size: 1.15em;
    -    line-height: 1.50em;
    -    font-weight: normal;
    -    background: none;
    -    border-radius: 0;
    -}
    -
    -.icon-delete:before {
    -    content: "\f014";
    -    color: $red;
    -}
    -
    -.icon-report:before {
    -    content: "\f024";
    -    color: $orange;
    -}
    -
    -.icon-edit:before {
    -    content: "\f040";
    -    color: $green;
    -}
    -
    -.icon-reply:before {
    -    content: "\f10e";
    -    color: $blue;
    -}
    -
    -.icon-replyall:before {
    -    content: "\f122";
    -    color: $light-blue;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_category.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_category.scss
    deleted file mode 100644
    index b9fc7fca..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_category.scss
    +++ /dev/null
    @@ -1,62 +0,0 @@
    -// category specific values
    -.category-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .category-body {
    -        padding: 0;
    -    }
    -
    -    .category-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .forum-name, .forum-stats, .forum-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .category-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .forum-info {
    -        position: relative;
    -
    -        .forum-status {
    -            float: left;
    -            font-size: 2em;
    -            padding-right: 0.5em;
    -        }
    -
    -        .forum-name {
    -            font-weight: bold;
    -        }
    -
    -        .forum-moderators {
    -            font-style: italic;
    -        }
    -    }
    -
    -    .forum-last-post {
    -        .last-post-title {
    -            font-weight: bold;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_editor.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_editor.scss
    deleted file mode 100644
    index 2e317bc3..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_editor.scss
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -/* Markdown Editor */
    -.editor-box .editor-submit .btn {
    -    margin: 0.75em 0.25em 0 0;
    -}
    -
    -.editor-box > .quickreply {
    -    padding: 0;
    -}
    -
    -.editor {
    -    min-height: 0;
    -
    -    .editor-options {
    -        margin-top: 0.5em;
    -    }
    -
    -    .new-message {
    -        background: #fff;
    -        border: 0;
    -        height: 12em;
    -        outline: none;
    -        width: 100%
    -    }
    -}
    -
    -.editor > .md-editor {
    -    border-color: $border-color;
    -
    -    &.active {
    -        border-color: $border-color;
    -    }
    -
    -    & > .md-footer, & >.md-header {
    -        background: $navigation-bg;
    -    }
    -
    -    & >textarea {
    -        font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    -        font-size: 1em;
    -        border-top: 1px solid $border-color;
    -        border-bottom: none;
    -        background: #fff;
    -        padding: 0 0.25em;
    -    }
    -
    -    & >.md-preview {
    -        border-top: 1px solid $border-color;
    -        border-right: 1px solid $border-color;
    -        border-bottom: none;
    -        padding: 0 0.25em;
    -        background: #eee;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_fixes.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_fixes.scss
    deleted file mode 100644
    index 03d7321e..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_fixes.scss
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -// fix for button in 
    -.navbar {
    -    .navbar-btn {
    -        &>a.btn-primary {
    -          color: #fff;
    -          background-color: #337ab7;
    -          border-color: #2e6da4;
    -        }
    -        &>a.btn-primary:focus {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #122b40;
    -        }
    -        &>a.btn-primary:hover {
    -          color: #fff;
    -          background-color: #286090;
    -          border-color: #204d74;
    -        }
    -    }
    -
    -    .navbar-nav .user-btn {
    -        padding-right: 2em;
    -        padding-left: 1em;
    -    }
    -}
    -
    -
    -// apply the same changes as for "a" for the btn-link
    -.dropdown-menu {
    -    & > li .btn-link {
    -        display: block;
    -        padding: 3px 20px;
    -        width: 100%;
    -        text-align: left;
    -        clear: both;
    -        font-weight: normal;
    -        line-height: 1.42857143;
    -        color: #333;
    -        white-space: nowrap;
    -
    -        &:hover, &:focus {
    -            color: #262626;
    -            text-decoration: none;
    -            background-color: #f5f5f5;
    -        }
    -    }
    -
    -    & > .active {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #fff;
    -            text-decoration: none;
    -            background-color: #337ab7;
    -            outline: 0;
    -        }
    -    }
    -
    -    & > .disabled {
    -        .btn-link, .btn-link:hover, .btn-link:focus {
    -            color: #777;
    -            text-decoration: none;
    -            cursor: not-allowed;
    -            background-color: transparent;
    -            background-image: none;
    -            filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_forum.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_forum.scss
    deleted file mode 100644
    index b21ba8c3..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_forum.scss
    +++ /dev/null
    @@ -1,64 +0,0 @@
    -// forum specific values
    -.forum-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .forum-body {
    -        padding: 0;
    -    }
    -
    -    .forum-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -
    -        .topic-name, .topic-stats, .topic-last-post {
    -            font-weight: bold;
    -        }
    -    }
    -
    -    .topic-info {
    -        position: relative;
    -
    -        .topic-status {
    -            float: left;
    -            font-size: 1.5em;
    -            padding-right: 0.5em;
    -
    -            // why is this?
    -            .topic-locked {
    -                font-size: 1.5em;
    -            }
    -
    -        }
    -
    -        .topic-name {
    -            font-weight: bold;
    -        }
    -
    -        .topic-pages {
    -            font-weight: normal;
    -            font-size: small;
    -        }
    -    }
    -
    -    .forum-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_management.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_management.scss
    deleted file mode 100644
    index 7cbed54c..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_management.scss
    +++ /dev/null
    @@ -1,206 +0,0 @@
    -// Management Panel
    -.management-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -
    -    .search-form {
    -        display: none;
    -        padding: 15px;
    -    }
    -
    -    .management-head {
    -        background-color: $blue;
    -    }
    -    .management-body {
    -        padding: 0;
    -    }
    -}
    -
    -.panel.settings-panel {
    -    border: none;
    -    margin-bottom: 0;
    -
    -    .settings-head {
    -        background-color: $panel-hover;
    -        border-bottom: 1px solid $border-color;
    -    }
    -    .settings-body {
    -        padding: 0;
    -        .settings-form {
    -            padding-top: 10px;
    -        }
    -    }
    -
    -    .settings-meta {
    -        background-color: $panel-meta-bg;
    -        margin: 0;
    -        padding: 5px 0 5px 0;
    -        border-bottom: 1px solid $border-color;
    -        .meta-item {
    -            font-weight: bold;
    -        }
    -    }
    -    .settings-content > .category-panel {
    -        border-left: none;
    -        border-right: none;
    -        border-bottom: none;
    -        margin-bottom: 0;
    -        &:first-child {
    -            border-top: none;
    -        }
    -        &:last-child {
    -            border-bottom: 1px solid $panel-border;
    -            margin-bottom: 1em;
    -        }
    -    }
    -    .settings-row {
    -        padding: 5px 0 5px 0;
    -        margin: 0;
    -
    -        &:last-child {
    -            padding-bottom: 10px;
    -            border-bottom: none !important;
    -        }
    -
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -
    -        .btn-icon {
    -            padding: 0 6px;
    -        }
    -    }
    -
    -    .settings-footer {
    -        padding-top: 5px;
    -        padding-left: 5px;
    -        padding-bottom: 0px;
    -        .pagination {
    -            margin: 0;
    -        }
    -    }
    -}
    -
    -.with-left-border {
    -    border-left: 1px solid $border-color;
    -}
    -
    -.with-border-bottom {
    -    border-bottom: 1px solid $border-color;
    -}
    -
    -.stats {
    -    margin-top: 15px;
    -    margin-bottom: 15px;
    -    .stats-widget {
    -        text-align: center;
    -        padding-top: 20px;
    -        padding-bottom: 20px;
    -        //background-color: $panel-hover;
    -        border: 1px solid $border-color;
    -
    -        .icon {
    -            display: block;
    -            font-size: 96px;
    -            line-height: 96px;
    -            margin-bottom: 10px;
    -            text-align: center;
    -        }
    -        var {
    -            display: block;
    -            height: 64px;
    -            font-size: 64px;
    -            line-height: 64px;
    -            font-style: normal;
    -        }
    -        label {
    -            font-size: 17px;
    -        }
    -        .options {
    -            margin-top: 10px;
    -        }
    -    }
    -
    -    .stats-heading {
    -        font-size: 1.25em;
    -        font-weight: bold;
    -        margin: 0;
    -        border-bottom: 1px solid $border-color;
    -    }
    -
    -    .stats-row {
    -        margin: 0 0 15px 0;
    -        padding-bottom: 15px;
    -        //border-bottom: 1px solid $border-color;
    -
    -        .stats-item {
    -            margin: 0;
    -            padding-top: 5px;
    -        }
    -
    -        &:last-child {
    -            border: none;
    -        }
    -    }
    -}
    -
    -.alert-message {
    -    margin: 0;
    -    padding: 20px;
    -    border-radius: 5px;
    -    border: 1px solid $dark-green;
    -    border-left: 3px solid #eee;
    -    h4 {
    -        margin-top: 0;
    -        margin-bottom: 5px;
    -    }
    -    p:last-child {
    -        margin-bottom: 0;
    -    }
    -    code {
    -        background-color: #fff;
    -        border-radius: 3px;
    -    }
    -
    -    &.alert-message-success {
    -        background-color: #F4FDF0;
    -        border-color: $dark-green;
    -    }
    -    &.alert-message-success h4 {
    -        color: $dark-green;
    -    }
    -    &.alert-message-danger {
    -        background-color: #fdf7f7;
    -        border-color: $red;
    -    }
    -    &.alert-message-danger h4 {
    -        color: $red;
    -    }
    -    &.alert-message-warning {
    -        background-color: #fcf8f2;
    -        border-color: $orange;
    -    }
    -    &.alert-message-warning h4 {
    -        color: $orange;
    -    }
    -    &.alert-message-info {
    -        background-color: #f4f8fa;
    -        border-color: $light-blue;
    -    }
    -    &.alert-message-info h4 {
    -        color: $light-blue;
    -    }
    -    &.alert-message-default {
    -        background-color: #EEE;
    -        border-color: $gray;
    -    }
    -    &.alert-message-default h4 {
    -        color: #000;
    -    }
    -    &.alert-message-notice {
    -        background-color: #FCFCDD;
    -        border-color: #BDBD89;
    -    }
    -    &.alert-message-notice h4 {
    -        color: #444;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_misc.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_misc.scss
    deleted file mode 100644
    index fb117e04..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_misc.scss
    +++ /dev/null
    @@ -1,132 +0,0 @@
    -html {
    -    // push footer to bottom
    -    position: relative;
    -    min-height: 100%;
    -}
    -
    -body {
    -    // Margin bottom by footer height
    -    margin-bottom: 60px;
    -}
    -
    -.emoji {
    -    vertical-align: middle;
    -    width: 20px;
    -    height: 20px;
    -}
    -
    -.flaskbb-footer {
    -    position: absolute;
    -    bottom: 0;
    -    // Set the fixed height of the footer here
    -    height: 60px;
    -    width: 100%;
    -    // use the same width as container
    -    padding-top: 1em;
    -}
    -
    -.flaskbb-layout {
    -    padding-top: 20px;
    -}
    -
    -.flaskbb-header {
    -    color: #fff;
    -    text-align: left;
    -    text-shadow: 0 1px 0 rgba(0,0,0,.1);
    -    background-color: $header-background-primary;
    -    background-image: -webkit-linear-gradient(top, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-image: linear-gradient(to bottom, $header-background-secondary 0%, $header-background-primary 100%);
    -    background-repeat: repeat-x;
    -    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$header-background-secondary', endColorstr='$header-background-primary', GradientType=0);
    -    border: 1px solid $border-color;
    -    border-bottom: 0;
    -
    -    position: relative;
    -    height: 12em;
    -    padding: 2.5em 2em;
    -    margin-top: 2.5em;
    -
    -    .flaskbb-meta {
    -        .flaskbb-title {
    -            color: $header-title-color;
    -            font-size: 3em;
    -            font-weight: bold;
    -        }
    -        .flaskbb-subtitle {
    -            color: $header-subtitle-color;
    -        }
    -    }
    -}
    -
    -.flaskbb-breadcrumb {
    -    border: 1px solid $border-color;
    -    border-radius: 0;
    -}
    -
    -p.flaskbb-stats {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -
    -.controls-row {
    -    padding: 0.5em 0;
    -    margin: 0;
    -
    -    .pagination {
    -        padding: 0;
    -        margin: 0;
    -    }
    -}
    -
    -.controls-col {
    -    margin: 0;
    -    padding: 0;
    -}
    -
    -.settings-col {
    -    padding: 0;
    -}
    -
    -.inline-form {
    -    display: inline;
    -}
    -
    -.cheatsheet {
    -    h2 {
    -        text-align: center;
    -        font-size: 1.6em;
    -        -webkit-border-radius: 2px;
    -        -webkit-background-clip: padding-box;
    -        -moz-border-radius: 2px;
    -        -moz-background-clip: padding;
    -        padding: 10px 0;
    -    }
    -    .emojis {
    -        text-align: center;
    -    }
    -
    -    .typography {
    -        -webkit-column-count: 3;
    -           -moz-column-count: 3;
    -                column-count: 3;
    -        -webkit-column-gap: 4px;
    -           -moz-column-gap: 4px;
    -                column-gap: 4px;
    -        text-align: center;
    -    }
    -    .code-example {
    -        width: 100%;
    -        position: relative;
    -        margin-bottom: 1em;
    -        -webkit-column-count: 2;
    -           -moz-column-count: 2;
    -                column-count: 2;
    -        -webkit-column-gap: -4px;
    -           -moz-column-gap: -4px;
    -                column-gap: -4px;
    -        .markup {
    -            padding: 0;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_mixins.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_mixins.scss
    deleted file mode 100644
    index 058304a2..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_mixins.scss
    +++ /dev/null
    @@ -1 +0,0 @@
    -@import "bootstrap/mixins/_panels.scss";
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_navigation.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_navigation.scss
    deleted file mode 100644
    index 483ec7c6..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_navigation.scss
    +++ /dev/null
    @@ -1,125 +0,0 @@
    -/* The private messages in the main navbar */
    -.dropdown-messages {
    -    min-width: 15em;
    -    .message-subject {
    -        font-style: italic;
    -    }
    -    .author-name {
    -        font-weight: bold;
    -    }
    -}
    -
    -/* Sidebar Nav */
    -.sidebar {
    -    padding-top: 1em;
    -    padding-bottom: 1em;
    -    text-shadow: none;
    -    background-color: $navigation-bg;
    -    border: 1px solid $border-color;
    -
    -    .sidenav-header {
    -        display: block;
    -        padding-left: 1.25em;
    -        padding-bottom: 1em;
    -        font-size: 12px;
    -        font-weight: bold;
    -        line-height: 20px;
    -        color: $navigation-color;
    -        text-transform: uppercase;
    -    }
    -
    -    .sidenav-btn {
    -        padding-bottom: 1em;
    -        text-transform: uppercase;
    -        text-align: center;
    -    }
    -
    -    .nav > li > a {
    -        display: block;
    -    }
    -
    -    .nav > li > a:hover,
    -    .nav > li > a:focus {
    -        text-decoration: none;
    -        background-color: $navigation-hover-color;
    -    }
    -
    -    .nav > .active > a,
    -    .nav > .active:hover > a,
    -    .nav > .active:focus > a {
    -        font-weight: normal;
    -        color: $navigation-color;
    -        background-color: $navigation-hover-color;
    -    }
    -}
    -
    -.nav-sidebar {
    -    width: 100%;
    -    padding: 0;
    -    a {
    -        color: $navigation-color;
    -    }
    -    .active a {
    -        cursor: default;
    -        background-color: $navigation-bg;
    -        color: $navigation-color;
    -    }
    -
    -    li.active {
    -        border-top: 1px solid $border-color;
    -        border-bottom: 1px solid $border-color;
    -        &:first-child {
    -            border-top: none;
    -        }
    -    }
    -    .active a:hover {
    -        background-color: $navigation-bg;
    -    }
    -}
    -
    -
    -/* Panel tabs */
    -.panel {
    -    &.panel-tabs {
    -        > .panel-heading {
    -            padding: 0;
    -            font-weight: 500;
    -        }
    -        .nav-tabs {
    -            border-bottom: none;
    -        }
    -        .nav-justified {
    -            //padding-bottom: 1px;
    -            margin-bottom: -1px;
    -        }
    -    }
    -}
    -
    -.panel-tabs {
    -    .nav-tabs {
    -        &.nav-justified > li > a {
    -        }
    -        // non-active and hover
    -        > li {
    -            a {
    -                color: $header-subtitle-color;
    -                border: 1px solid $blue;
    -
    -                // different background color when hovering
    -                &:hover, &:focus {
    -                    background-color: $fresh-blue;
    -                    border: 1px solid $fresh-blue;
    -                }
    -            }
    -        }
    -        // active and hover
    -        > li.active {
    -            a, a:hover, a:focus {
    -                color: $header-title-color;
    -                background-color: $fresh-blue;
    -                border: 1px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_panel.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_panel.scss
    deleted file mode 100644
    index 255fd97d..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_panel.scss
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -// default values for the panels
    -.page-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .page-meta {
    -        font-weight: bold;
    -        padding-top: 0.5em;
    -        height: 2.5em;
    -        background-color: $panel-meta-bg;
    -        border-bottom: 1px solid $panel-meta-border;
    -    }
    -
    -    .page-body {
    -        padding: 0;
    -
    -        // if no meta information is to show, reset padding-top
    -        & > :not(.page-meta) {
    -            padding-top: 0.5em;
    -        }
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .page-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -
    -    .row > .page-row {
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_profile.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_profile.scss
    deleted file mode 100644
    index d4e4514b..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_profile.scss
    +++ /dev/null
    @@ -1,214 +0,0 @@
    -.profile-sidebar {
    -    padding: 7px 0;
    -
    -    ul li {
    -        &:last-child {
    -            border-bottom: none;
    -        }
    -
    -        a {
    -            color: $navigation-color;
    -            font-size: 14px;
    -            font-weight: 400;
    -            border-left: 2px solid transparent;
    -
    -            &:hover, &:visited {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -
    -            i {
    -                margin-right: 8px;
    -                font-size: 14px;
    -            }
    -        }
    -
    -        &.active {
    -            a {
    -                background-color: $author-box-bg;
    -                border-right: 2px solid $fresh-blue;
    -                border-left: 2px solid $fresh-blue;
    -            }
    -        }
    -    }
    -}
    -
    -.page-body.profile-body {
    -    background-color: $author-box-bg;
    -}
    -
    -.profile-content {
    -    background-color: #fff;
    -    border-left: 1px solid $border-color;
    -    min-height: 32.25em;
    -
    -    .topic-head {
    -        font-weight: normal;
    -    }
    -
    -    .topic-created {
    -        font-size: 0.75em;
    -        padding-bottom: 0.75em;
    -    }
    -}
    -
    -.profile-picture {
    -    text-align: center;
    -
    -    img {
    -        float: none;
    -        margin: 0 auto;
    -        width: 50%;
    -        height: 50%;
    -        -webkit-border-radius: 50% !important;
    -        -moz-border-radius: 50% !important;
    -        border-radius: 50% !important;
    -    }
    -}
    -
    -.profile-sidebar-stats {
    -    text-shadow: 0 1px 0 #fff;
    -}
    -
    -.profile-groupname,
    -.profile-online,
    -.profile-location,
    -.profile-posts,
    -.profile-date,
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 0.2em;
    -}
    -
    -
    -.profile-groupname {
    -    text-align: center;
    -    margin-top: 0.75em;
    -    color: $fresh-blue;
    -    font-size: 1.2em;
    -    font-weight: 600;
    -}
    -
    -.profile-buttons {
    -    text-align: center;
    -    margin-top: 10px;
    -    margin-bottom: 15px;
    -
    -    .btn {
    -        text-shadow: none;
    -        text-transform: uppercase;
    -        font-size: 11px;
    -        font-weight: 700;
    -        padding: 6px 15px;
    -        margin-right: 5px;
    -    }
    -}
    -
    -// conversation specific values
    -.conversation-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .conversation-body {
    -        padding: 0;
    -    }
    -
    -    .conversation-row {
    -        margin: 0;
    -        padding-top: 0.5em;
    -        padding-bottom: 0.5em;
    -        &:not(:last-child) {
    -            border-bottom: 1px solid $panel-border;
    -        }
    -        &.hover:hover {
    -            background-color: $panel-hover;
    -        }
    -    }
    -}
    -
    -.conversation-panel {
    -    .conversation-body {
    -        .row > .conversation-row {
    -            &:not(:last-child) {
    -                border-bottom: 1px solid $panel-border;
    -            }
    -        }
    -    }
    -
    -    .conversation-message {
    -        min-height: 16em;
    -        padding: 0.5em;
    -        border: 1px solid $border-color;
    -        border-radius: 5px;
    -
    -        .message-content {
    -            padding-top: 0.5em;
    -        }
    -
    -        .message-footer {
    -            width: 100%;
    -            bottom: 0;
    -            position: absolute;
    -            .right {
    -                margin-right: 46px;
    -                float: right;
    -            }
    -            .left {
    -                float: left;
    -            }
    -        }
    -
    -    }
    -
    -    @media (min-width: 992px) {
    -        .arrow:after, .arrow:before {
    -            content: "";
    -            position: absolute;
    -            width: 0;
    -            height: 0;
    -            border: solid transparent;
    -        }
    -
    -        .arrow.left:after, .arrow.left:before {
    -            border-left: 0;
    -        }
    -
    -        // Left Arrow
    -        .arrow.left:before {
    -            left: 0px;
    -            top: 40px;
    -            border-right-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.left:after {
    -            left: 1px;
    -            top: 41px;
    -            border-right-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -
    -        // Right Arrow
    -        .arrow.right:before {
    -            right: -16px;
    -            top: 40px;
    -            border-left-color: inherit;
    -            border-width: 16px;
    -        }
    -
    -        .arrow.right:after {
    -            right: -14px;
    -            top: 41px;
    -            border-left-color: #FFFFFF;
    -            border-width: 15px;
    -        }
    -    }
    -}
    -
    -.conversation-reply {
    -    padding-top: 2em;
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_topic.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_topic.scss
    deleted file mode 100644
    index e672583d..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_topic.scss
    +++ /dev/null
    @@ -1,159 +0,0 @@
    -.topic-panel {
    -    @include panel-variant($panel-border, $gray, $panel-head-bg, $panel-border);
    -    margin-bottom: 0;
    -
    -    .panel-heading {
    -        font-weight: bold;
    -    }
    -
    -    .topic-body {
    -        padding-top: 0;
    -        padding-bottom: 0;
    -    }
    -}
    -
    -.post-row {
    -    background: $author-box-bg;
    -    margin-top: 0;
    -    margin-bottom: 0;
    -    padding-top: 0;
    -    padding-bottom: 0;
    -
    -    &:not(:last-child) {
    -        border-bottom: 1px solid $panel-border;
    -    }
    -}
    -
    -.post-box {
    -    background: $post-box-bg;
    -    border-left: 1px solid $post-box-border;
    -    padding-bottom: 3em;
    -    padding-left: 0;
    -    padding-right: 0;
    -    min-height: 19em;
    -    position: relative;
    -
    -    &.post-horizontal {
    -        border-left: none;
    -        min-height: 14em;
    -    }
    -
    -    // post meta information
    -    .post-meta {
    -        padding-top: 0.5em;
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        margin: 0;
    -        background-color: $post-meta-bg;
    -        border-bottom: 1px solid $post-meta-border;
    -    }
    -
    -    // post content
    -    .post-content {
    -        padding-left: 0.5em;
    -        padding-right: 0.5em;
    -        padding-top: 0.5em;
    -
    -        // scale larger (than the div) images to the size of the div
    -        img {
    -            max-width:100%;
    -            max-height:100%;
    -        }
    -    }
    -
    -    .post-signature {
    -        margin-top: 2em;
    -        hr {
    -            height: 1px;
    -            color: $post-signature-border;
    -            background-color: $post-signature-border;
    -            border: none;
    -            margin: 0;
    -            width: 25%;
    -        }
    -    }
    -
    -    // post footer
    -    .post-footer {
    -        border-top: 1px solid $post-footer-border;
    -        background-color: $post-footer-bg;
    -        width: 100%;
    -        left: 0;
    -        // push to bottom
    -        bottom: 0;
    -        position: absolute;
    -
    -        .post-menu {
    -            padding-left: 0;
    -
    -            .btn-icon:hover {
    -                background-color: $panel-hover;
    -            }
    -        }
    -    }
    -}
    -
    -// author
    -.author {
    -    text-shadow: 0px 1px 0px #fff;
    -
    -    // probably not the best name but i couldn't come up with a better one
    -    &.author-horizontal {
    -        min-height: 9em;
    -        border-bottom: 1px solid $post-box-border;
    -        .author-box {
    -            float: left;
    -            margin-top: 0.5em;
    -            .author-avatar {
    -                margin-top: 0em;
    -                margin-right: 1em;
    -            }
    -
    -            .author-online, .author-offline {
    -                margin-top: 0.5em;
    -            }
    -
    -            .author-name {
    -                margin-top: -0.5em;
    -            }
    -        }
    -    }
    -
    -    .author-name h4 {
    -        float: left;
    -        margin-bottom: 0;
    -    }
    -
    -    .author-title h5 {
    -        margin-top: 0;
    -        font-weight: 600;
    -        clear: both;
    -    }
    -
    -    .author-avatar {
    -        margin: 0.5em 0;
    -
    -        img {
    -            border-radius: 0.25em;
    -            height: auto;
    -            width: 8em;
    -        }
    -    }
    -
    -    .author-online, .author-offline {
    -        margin-top: 0.75em;
    -        margin-left: 0.25em;
    -        float: left;
    -        width: 0.5em;
    -        height: 0.5em;
    -        border-radius: 50%;
    -    }
    -
    -    .author-online {
    -        background: $author-online;
    -    }
    -
    -    .author-offline {
    -        background: $author-offline;
    -    }
    -}
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_variables.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_variables.scss
    deleted file mode 100644
    index 9dba323d..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/_variables.scss
    +++ /dev/null
    @@ -1,51 +0,0 @@
    -// bootstrap colros
    -$blue: #337ab7;
    -$fresh-blue: #0088cc;
    -$light-blue: #5bc0de;
    -$green: #5cb85c;
    -$dark-green: #3C763D;
    -$orange: #f0ad4e;
    -$red: #d9534f;
    -$gray: #555;
    -
    -
    -// main colors
    -$background-color: #f6f9fc; // old: #e8f1f2
    -$font-color: #333;
    -$border-color: #cad7e1;
    -$head-background: #f5f5f5;
    -$meta-background: #eaf1f5;
    -$hover: #f8f8f8;
    -
    -$navigation-color: #555;
    -$navigation-bg: #f8f8f8;
    -$navigation-hover-color: #e7e7e7;
    -
    -// header colors
    -$header-title-color: #fff;
    -$header-subtitle-color: #E8F1F2;
    -$header-background-primary: #0088cc;  // old: #3276b1
    -$header-background-secondary: #285e8e;
    -
    -// panel colors
    -$panel-bg: #fff;            // panel body background
    -$panel-head-bg: $head-background;    // panel head background
    -$panel-meta-bg: $meta-background;    // panel meta background
    -$panel-meta-border: $border-color;   // panel meta (bottom) border
    -$panel-border: $border-color;        // panel border (all over)
    -$panel-hover: $hover;
    -
    -
    -// post colors
    -$post-box-bg: $panel-bg;
    -$post-box-border: $border-color;
    -$post-meta-border: $panel-meta-bg;
    -$post-meta-bg: $panel-bg;
    -$post-signature-border: $panel-meta-bg;
    -$post-footer-border: $border-color;
    -$post-footer-bg: $panel-bg;
    -
    -
    -$author-box-bg: #e8ecf1;
    -$author-online: $green;
    -$author-offline: $gray;
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/styles.scss b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/styles.scss
    deleted file mode 100644
    index d0f075b3..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/src/styles.scss
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -// Import custom Bootstrap variables
    -@import "bootstrap-variables";
    -
    -// Import Bootstrap for Sass
    -@import "bootstrap";
    -
    -// Import fontawesome icons
    -@import "font-awesome";
    -
    -// Import FlaskBB theme
    -@import "aurora";
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/static b/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/static
    deleted file mode 120000
    index 382349a7..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/themes/aurora/static
    +++ /dev/null
    @@ -1 +0,0 @@
    -../../static/
    \ No newline at end of file
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/de/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/de/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b66ed9d7..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/de/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Peter Justin , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-11 10:27+0000\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: German (http://www.transifex.com/projects/p/flaskbb/language/de/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: de\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Es sind nur Buchstaben, Zahlen und Unterstriche erlaubt."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Benutzername oder E-Mail"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Ein Benutzername oder E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Passwort"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Ein Passwort ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Erinnere mich"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Einloggen"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Benutzername"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Ein Benutzername ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "E-Mail Adresse"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Passwörter müssen übereinstimmen."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Passwort bestätigen"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Ich aktzeptiere die Nutzungsbediengungen."
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrieren"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Dieser Benutzername ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Diese E-Mail Adresse ist bereits vergeben."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Login erneuern"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Eine E-Mail Adresse ist erforderlich."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Passwort anfordern"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Passwort zurücksetzen"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Ungültige E-Mail Addresse."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Falscher Benutzername oder Passwort."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Neuangemeldet"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Vielen Dank für's registrieren!"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-Mail gesendet! Bitte checken sie ihre Mailbox."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Du hast einen Benutzername oder eine E-Mail Adresse eingegeben die nicht mit diesem Account verbunden ist."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Dein Passwort Token ist ungültig."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Dein Passwort Token ist abgelaufen."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Dein Passwort wurde aktualisiert."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Schnellantwort"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Du kannst keine Nachricht ohne Inhalt senden."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Antwort"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Inhalt"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Folge diesem Thema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vorschau"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Thema Titel"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Bitte wähle einen Titel für dein Thema"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Thema abschicken"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Grund"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Warum willst du diesen Beitrag melden?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Beitrag melden"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Suche"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Kriterien"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Beitrag"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Thema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Forum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Benutzer"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Du hast nicht die Berechtigung um ein neues Thema zu erstellen."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu löschen."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu sperren."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu entsperren."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu fixieren."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu lösen."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu verschieben"
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Konnte Thema nicht in Forum %(title)s verschieben."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Thema wurde in Forum %(title)s verschoben."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Du hast nicht die Berechtigung um dieses Thema zu vereinen."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Konnte Themen nicht vereinen."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Themen wurden vereint."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Du hast nicht die Berechtigung um in diesem Thema zu Beiträge zu schreiben."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu bearbeiten."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Du hast nicht die Berechtigung um diesen Beitrag zu löschen."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Danke für's melden."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Forum %(forum)s wurde als gelesen markiert."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Alle Foren wurden als gelesen markiert."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Geburtstag"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Geschlecht"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Männlich"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Weiblich"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ort"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Profilbild"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Forum Signatur"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notizen"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Hauptgruppe"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Andere Gruppen"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Speichern"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Gruppenname"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Ein Gruppenname ist erforderlich."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Beschreibung"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Ist diese Gruppe eine Administrator Gruppe?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Mit dieser Option haben alle Benutzer dieser Gruppe zugriff auf das Administrator Panel"
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Ist diese Gruppe eine Super Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe jedes Forum moderieren."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Ist diese Gruppe eine Moderator Gruppe?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Mit dieser Option können die Benutzer dieser Gruppe spezifizierte Foren moderieren."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Ist diese Gruppe für Benutzer die verbannt sind?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Nur eine Gruppe für verbannte Benutzer ist erlaubt."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Ist dies eine Gruppe für Gäste?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Nur eine Gruppe für Gäste ist erlaubt."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Kann Beiträge bearbeiten"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge bearbeiten."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Kann Beiträge löschen"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Mit dieser Option können Benutzer Beiträge löschen."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Kann Themen löschen"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Mit dieser Option können Benutzer Themen löschen."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Kann Themen erstellen"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Mit dieser Option können Benutzer Themen erstellen."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Kann Themen beantworten"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Mit dieser Option können Benutzer in Themen Beiträge schreiben."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderatoren können Benutzer bearbeiten"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Erlaube Moderatoren das Bearbeiten eines anderen Benutzers - auch das ändern von Passwort und E-Mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderatoren können Benutzer verbannen"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Erlaube Moderatoren das verbannen von Benutzern."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Dieser Gruppenname ist bereits vergeben."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Es existiert bereits eine Gruppe für verbannte Benutzer."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Es existiert bereits eine Gruppe für Gäste."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Forum Titel"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Ein Forum Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Du kannst deine Beschreibung mit BBCode formatieren."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Position"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Die Forum Position ist erforderlich."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Kategorie"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Die Kategorie die das Forum beinhaltet."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Externe Link"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ein Link zu einer Website wie z.B. 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderatoren"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Komma getrennte Benutzernamen. Freilassen falls du keine Moderatoren setzen willst."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Moderatoren anzeigen"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Willst du die Moderatoren auf der Index Seite anzeigen?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Geschlossen?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Deaktivieren neue Beiträge und Themen in diesem Forum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Du kannst das Forum nicht in einen Externen Link konvertieren da es noch immer Beiträge beinhaltet."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Du musst auch einige Moderatoren spezifizieren."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s ist nicht in einer Moderatoren Gruppe."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Benutzer %(moderator)s wurde nicht gefunden."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Kategorie Titel"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Ein Kategorie Titel ist erforderlich."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Die Kategorie Position ist erforderlich."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Einstellungen gespeichert."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Dir ist es nicht erlaubt diesen Benutzer zu bearbeiten."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Benutzer aktualisiert."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Benutzer bearbeiten"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Benutzer gelöscht."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Benutzer hinzugefügt."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Benutzer hinzufügen"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu verbannen."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Ein Moderator kann nicht einen Administrator verbannen."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Benutzer wurde gebannt."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Konnte den Benutzer nicht bannen, sorry."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Du hast nicht die Berechtigung um diesen Benutzer zu entbannen."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Benutzer wurde entbannt."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Konnte den Benutzer nicht entbannen, sorry."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Meldung %(id)s wurde bereits als gelesen markiert."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Meldung %(id)s wurde als gelesen markiert."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Alle Meldungen wurden als gelesen markiert."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Gruppe aktualisiert."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Gruppe bearbeiten"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Gruppe gelöscht."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Gruppe hinzugefügt."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Gruppe hinzufügen"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Forum aktualisiert."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Forum bearbeiten"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Forum gelöscht."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Forum hinzugefügt."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Forum hinzufügen"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Kategorie hinzugefügt."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Kategorie hinzufügen"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Kategorie aktualisiert."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Kategorie bearbeiten"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Kategorie wurde mit allen zugehörigen Foren gelöscht."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin ist aktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber löschen."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Konnte das Plugin nicht aktivieren."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s wurde nicht gefunden."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin ist deaktiviert. Bitte starte FlaskBB neu."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Falls du einen Host benutzt der das schreiben auf die Festplatte verbietet, musst du die 'DISABLED' Datei selber erstellen."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin deinstalliert."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Konnte das Plugin nicht deinstallieren."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin installiert."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Konnte das Plugin nicht installieren."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Benutzerliste"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Thema Tracker"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Verwaltung"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Ausloggen"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Private Nachrichten"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Seiten"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Noch kein Benutzer?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Passwort vergessen?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Lieber %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Um dein Passwort zurückzusetzen, klicke bitte auf den folgenden Link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Mit freundlichen Grüßen,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Die Administration"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Kein Zugriff - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Verbotene Seite"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Du hast nicht die Berechtigung um diese Seite zu sehen."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Zurück zum Forum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh nein! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Ups, Seite wurde nicht gefunden!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "Die Seite existiert nicht."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server Fehler - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server Fehler"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Es ist etwas schief gelaufen."
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Themen"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Beiträge"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Letzer Beitrag"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "von"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Keine Beiträge."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Geschlossen"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Neues Thema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Ansichten"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Keine Themen."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Foren Statistiken"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Wer ist aktiv?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Anzahl an registrierten Benutzern"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Anzahl an Themen"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Anzahl an Beiträgen"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Neuester registrierter Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Keine Benutzer"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Registrierte Benutzer aktiv"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Gäste aktiv"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Gruppe"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Neuer Beitrag"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Aktive Benutzer"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Meldung"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Schließen"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Thema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Zuletzt geändert"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registriert seit"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Gast"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PN"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Bearbeiten"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Löschen"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Zitieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Thema löschen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Thema schließen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Thema öffnen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Thema fixieren"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Thema lösen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Thema entfolgen"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Thema folgen"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Gefolgte Themen"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Verbannte Benutzer"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Benutzer verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Verwalten"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Entbannen"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Es wurde kein Benutzer gefunden."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Foren verwalten"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foren"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gruppen verwalten"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Gruppen"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Übersicht"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Meldungen"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Globale Statistiken"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB Version"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python Version"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask Version"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Plugins verwalten"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Information"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Version"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Aktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Deaktivieren"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Installieren"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Deinstallieren"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Zeige ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Zeige alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Alle Meldungen"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Poster"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Melder"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Gemeldet"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Keine Meldungen."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Ungelesene Meldungen"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Als gelesen markieren"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Keine ungelesene Meldungen."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Bannen"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Entwurf"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Zu"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Datum"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Einstellungen"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Kein Betreff"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Dieser Nachrichtenordner ist leer."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Eingang"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "Von"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "gelöscht"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Private Nachricht"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Neue PN"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Gesendet"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papierkorb"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Gesendete Nachrichten"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Kein Benutzer"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Wiederherstellen"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Keine Nachricht"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Alle Beiträge"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "All Beiträge erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Alle Themen"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Alle Themen erstellt von %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "E-Mail Adresse ändern"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Passwort ändern"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Benuzer Details ändern"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Allgemeine Einstellungen"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Benutzer Statistiken"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Benutzer hat keine Notizen über ihn hinzugefügt."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Beigetreten"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Zuletzt gesehen"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Noch nie gesehe"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Letzter Beitrag"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nie"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Keine Info"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Konto Einstellunge"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "Es sind nur jpg, jpeg, png und gifs erlaubt."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Sprache"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Thema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Alte E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Neue E-Mail Adresse"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-Mail Adressen müssen übereinstimmen."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "E-Mail Adresse bestätigen"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Altes Passwort"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Passwort erforderlich"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Neues Passwort bestätigen"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Dein Geburtstag"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Zu Benutzer"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Ein Betreff ist erforderlich."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Nachricht"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Eine Nachricht ist erforderlich"
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Nachricht senden"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Nachricht speichern"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "Den Benutzername den du eingeben hast existiert nicht."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Du kannst keine Nachricht an dich selber schreiben."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Einstellungen aktualisiert."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Passwort aktualisiert."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "E-Mail Adresse aktualisiert."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Details aktualisiert."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Nachricht gespeichert."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Nachricht gesendet"
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Neue Nachricht"
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Du kannst keine Nachricht bearbeiten die bereits gesendet wurde."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Nachricht bearbeiten"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Nachricht in den Papierkorb verschoben."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Nachricht aus dem Papierkorb wieder wiederhergestellt."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Nachricht gelöscht."
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/en/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/en/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 89c6ca3e..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/en/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1875 +0,0 @@
    -# German translations for FlaskBB.
    -# Copyright (C) 2015 FlaskBB
    -# This file is distributed under the same license as the FlaskBB project.
    -# Peter Justin , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version:  0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-01-03 13:45+0100\n"
    -"Last-Translator: Peter Justin \n"
    -"Language-Team: FlaskBB Team\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr ""
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:150
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr ""
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr ""
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:65 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:70 flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr ""
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr ""
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr ""
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr ""
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr ""
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr ""
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr ""
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr ""
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr ""
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8 flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9 flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr ""
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr ""
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr ""
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr ""
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr ""
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr ""
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr ""
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr ""
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr ""
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr ""
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr ""
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr ""
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr ""
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr ""
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr ""
    -
    -#~ msgid ""
    -#~ msgstr ""
    -
    -#~ msgid "All Topics created by"
    -#~ msgstr ""
    -
    -#~ msgid "You can only use letters, numbers or dashes"
    -#~ msgstr ""
    -
    -#~ msgid "Username or E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "E-Mail"
    -#~ msgstr ""
    -
    -#~ msgid "This Username is taken."
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is taken."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong E-Mail."
    -#~ msgstr ""
    -
    -#~ msgid "Wrong username or password"
    -#~ msgstr ""
    -
    -#~ msgid "Reauthenticated"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for registering"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "You have entered an username or "
    -#~ "email that is not linked with your"
    -#~ " account"
    -#~ msgstr ""
    -
    -#~ msgid "Your password token is invalid."
    -#~ msgstr ""
    -
    -#~ msgid "Your password is expired."
    -#~ msgstr ""
    -
    -#~ msgid "Your password has been updated."
    -#~ msgstr ""
    -
    -#~ msgid "Quickreply"
    -#~ msgstr ""
    -
    -#~ msgid "Please choose a Topic title."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to delete the topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to lock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to unlock this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to highlight this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to trivialize this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to move this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not move the topic to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "Topic was moved to forum %(title)s"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to merge this topic"
    -#~ msgstr ""
    -
    -#~ msgid "Could not merge the topic."
    -#~ msgstr ""
    -
    -#~ msgid "Topic succesfully merged."
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post here"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to post in this topic"
    -#~ msgstr ""
    -
    -#~ msgid "You do not have the permissions to edit this post"
    -#~ msgstr ""
    -
    -#~ msgid "Thanks for reporting!"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate every"
    -#~ " forum"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Check this if the users in this"
    -#~ " group are allowed to moderate "
    -#~ "specified forums"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Banned group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Only one Guest group is allowed"
    -#~ msgstr ""
    -
    -#~ msgid "Check this if the users in this group can edit posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete posts"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can delete topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can create topics"
    -#~ msgstr ""
    -
    -#~ msgid "Check this is the users in this group can post replies"
    -#~ msgstr ""
    -
    -#~ msgid "Allow moderators to ban other users"
    -#~ msgstr ""
    -
    -#~ msgid "This Group name is taken."
    -#~ msgstr ""
    -
    -#~ msgid "A link to a website i.e. 'http://flaskbb.org'"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot convert a forum that contain topics in a external link"
    -#~ msgstr ""
    -
    -#~ msgid "%(user)s is not in a moderators group"
    -#~ msgstr ""
    -
    -#~ msgid "User %(moderator)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully edited"
    -#~ msgstr ""
    -
    -#~ msgid "User successfully deleted"
    -#~ msgstr ""
    -
    -#~ msgid "User was banned successfully."
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s is already marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Report %(id)s marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "All reports were marked as read"
    -#~ msgstr ""
    -
    -#~ msgid "Group successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Forum successfully edited."
    -#~ msgstr ""
    -
    -#~ msgid "Category successfully created."
    -#~ msgstr ""
    -
    -#~ msgid "Plugin is not enabled"
    -#~ msgstr ""
    -
    -#~ msgid "Plugin %(plugin)s not found"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot uninstall Plugin"
    -#~ msgstr ""
    -
    -#~ msgid "Cannot install Plugin"
    -#~ msgstr ""
    -
    -#~ msgid ""
    -#~ "Please install the plugin first to "
    -#~ "configure the forums which should be "
    -#~ "displayed"
    -#~ msgstr ""
    -
    -#~ msgid "No posts"
    -#~ msgstr ""
    -
    -#~ msgid "No Topics so far."
    -#~ msgstr ""
    -
    -#~ msgid "No users found matching your search query"
    -#~ msgstr ""
    -
    -#~ msgid "No Posts so far."
    -#~ msgstr ""
    -
    -#~ msgid "Change E-Mail Adress"
    -#~ msgstr ""
    -
    -#~ msgid "This E-Mail is invalid"
    -#~ msgstr ""
    -
    -#~ msgid "A username is required."
    -#~ msgstr ""
    -
    -#~ msgid "A subject is required."
    -#~ msgstr ""
    -
    -#~ msgid "A message is required."
    -#~ msgstr ""
    -
    -#~ msgid "The username you entered doesn't exist"
    -#~ msgstr ""
    -
    -#~ msgid "Your settings have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your password have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your email have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Your details have been updated!"
    -#~ msgstr ""
    -
    -#~ msgid "Message saved!"
    -#~ msgstr ""
    -
    -#~ msgid "Message sent!"
    -#~ msgstr ""
    -
    -#~ msgid "You cannot edit a sent message"
    -#~ msgstr ""
    -
    -#~ msgid "Message moved to Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message restored from Trash!"
    -#~ msgstr ""
    -
    -#~ msgid "Message deleted!"
    -#~ msgstr ""
    -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/es/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/es/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bf123bf2..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/es/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Ernesto Avilés Vázquez , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-02-19 16:42+0000\n"
    -"Last-Translator: Ernesto Avilés Vázquez \n"
    -"Language-Team: Spanish (http://www.transifex.com/flaskbb/flaskbb/language/es/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: es\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Restablecer contraseña"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Solo puedes usar letras, números o guiones."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Nombre de usuario o dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Se requiere nombre de usuario o dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Contraseña"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "Se requiere una contraseña."
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Recordar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Iniciar sesión"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "Se requiere un nombre de usuario"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Dirección electrónica"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "Dirección electrónica inválida."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "Las contraseñas deben coincidir."
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar contraseña"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Acepto los términos del servicio"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este nombre de usuario ya existe."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Esta dirección electrónica ya existe."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Actualizar inicio de sesión"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "Se requiere una dirección electrónica."
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar contraseña"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Restablecer  contraseña"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Dirección electrónica incorrecta."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuario o contraseña incorrectos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "Volver a autenticarse."
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Gracias por registrarse."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "¡Correo enviado! Por favor, revisa tu bandeja de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Has insertado un nombre de usuario o dirección electrónica que no está vinculado con tu cuenta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "Tu token de contraseña es inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "Tu token de contraseña ha expirado."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Tu contraseña ha sido actualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Respuesta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "No puedes publicar una respuesta sin contenido"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Respuesta"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Contenido"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir este tema"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Vista previa"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título del tema"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor elije un título para el tema."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Publicar tema"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Razón"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "¿Cuál es la razón por la que reportas este artículo?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Publicar reporte"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Buscar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Criterio"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Publicar"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tema"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Foro"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuarios"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Usted no permisos para crear un nuevo tema."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "No tienes los permisos para borrar este tema."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "No tienes permisos para bloquear este tema."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "No tienes permisos para desbloquear este tema."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "No tienes permisos para resaltar este tema."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "No tienes permisos para trivializar este tema."
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "No tienes permisos para mover este tema."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "No puedes mover este tema al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tema movido al foro %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "No tienes permisos para mezclar este tema."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "No se pueden mezclar los temas."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Los temas han sido mezclados satisfactoriamente"
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "No tienes permisos para publicar en este tema."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "No tienes permisos para editar este artículo."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "No tienes permisos para borrar este artículo."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Gracias por hacer el reporte."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Foro %(forum)s marcado como leído."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos los foros marcados como leídos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Cumpleaños"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Femenino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Ubicación"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Sitio web"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Firma del foro"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primario"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundarios"
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Guardar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nombre del grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "Se requiere un nombre de grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descripción"
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "¿Es del grupo Administración?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Con esta opción el grupo tiene acceso al panel de administración."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "¿Es del grupo Supermoderador?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Comprueba si los usuarios en este grupo tienen permiso para moderar todos los foros."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "¿Es del grupo Moderador?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Comprueba si los usuarios de este grupo tienen permiso para moderar foros específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "¿Es del grupo Baneado?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "Solo se permite un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "¿Es del grupo Invitado?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "Solo se permite un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Puede editar artículos"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden editar artículos."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Puede borrar artículos"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar artículos."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Puede borrar temas"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden borrar temas."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Puede crear temas"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Comprueba si los usuarios en este grupo pueden crear temas."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Puede publicar respuestas"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Comprueba si los usuarios en este grupo pueden publicar respuestas."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Los moderadores pueden editar perfiles de usuario"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite a los moderadores editar los perfiles de otros usuarios incluyendo contraseñas y cambios de direcciones electrónicas."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Los moderadores pueden banear usuarios"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite a los moderadores banear a otros usuarios."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este nombre de grupo ya existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Ya existe un grupo Baneado."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Ya existe un grupo Invitado."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título del foro"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "Se requiere un título de foro."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Puedes formatear tu descripción con BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posición"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "Se requiere una posición del foro"
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoría"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "La categoría que contiene este foro"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Enlace externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Un enlace a un sitio e.j.: \"http://flaskbb.org\""
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nombres de usuarios separados por coma. Déjalo en blanco si no deseas establecer algún moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "¿Deseas mostrar los moderadores en la página de inicio?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "¿Bloqueado?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Inhabilitar nuevos artículos y temas en este foro."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "No puedes convertir un foro que contiene temas en un enlace externo."
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "También necesitas especificar algunos moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s no está en el grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "El usuario %(moderator)s  no existe."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título de la categoría"
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "Se requiere un título de categoría."
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "Se requiere una posición para la categoría."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Ajustes guardados."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "No tienes permisos para editar este usuario"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuario actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuario"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuario borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuario añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Añadir usuario"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "No tienes permisos para banear a este usuario"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Un moderador no puede banear a un administrador."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "El usuario ha sido baneado."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "No se puede banear al usuario."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "No tienes permisos para desbanear a este usuario"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "El usuario ha sido desbaneado."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "No se puede desbanear al usuario."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "El reporte %(id)s ya está marcado como leído."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Reporte %(id)s marcado como leído."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos los reportes fueron marcados como leídos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Añadir grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Foro actualizado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar foro"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Foro borrado satisfactoriamente."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Foro añadido satisfactoriamente."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Añadir foro"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoría añadida satisfactoriamente."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Añadir categoría"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoría actualizada satisfactoriamente."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoría"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoría borrada junto con todos los foros asociados"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "El complemento está habilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que borrar el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "No se puede habilitar el complemento"
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "El complemento %(plugin)s no existe."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "El complemento está inhabilitado. Por favor recarga tu aplicación."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Si estás usando un host que no soporta escritura en disco, esto no funcionará, por lo que tendrás que crear el archivo \"DISABLED\" por tus propios medios."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "El complemento ha sido desinstalado."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "No se puede desinstalar el complemento."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "El plugin ha sido instalado."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "No se puede instalar el complemento."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de miembros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Seguidor de tema"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Ajustes"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administración"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Cerrar sesión"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensajes privados"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nuevo mensaje"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "¿Todavía sin ser miembro?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "¿Olvidaste tu contraseña?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Estimado %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restablecer tu contraseña haz clic en el siguiente enlace:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Saludos,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "La administración"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sin acceso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Página prohibida"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "No tienes permisos para ver esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "De regreso a los foros"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "¡Oh no! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oh, ¡La página no existe!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "La página que buscas no existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Erro del servidor - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Error del servidor"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "¡Ha ocurrido algo malo!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Temas"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Artículos"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "No hay artículos."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como leído"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Bloqueado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Nuevo tema"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Vistas"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "No hay temas."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estadísticas del foro"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "¿Quién está conectado?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Total de usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Total de temas"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Total de artículos"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Nuevos usuarios registrados"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "No hay usuarios"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuarios registrados conectados"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Invitados conectados"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Fecha de registro"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Nuevo artículo"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuarios conectados"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Cerrar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tema"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Última modificación"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Invitado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "MP"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Borrar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citar"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Borrar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Bloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Desbloquear tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Resaltar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr "Trivializar tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Dejar de seguir tema"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tema"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Temas seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuarios baneados"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Administrar usuarios"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Administrar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanear"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "No se encontraron usuarios que coincidan con el criterio de búsqueda."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Administrar foros"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Foros"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Administrar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Reseña"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reportes"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Complementos"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estadísticas globales"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "Versión de FlaskBB"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Versión de Python"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Versión de Flask"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Administrar complementos"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Complemento"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Información"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versión"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Inhabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reportes sin leer"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos los reportes"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Publicador"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportero"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Sin reportes."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reportes sin leer"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todos como leídos"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "No hay reportes sin leer."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banear"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Borradores"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "A"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Asunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Fecha"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opciones"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sin asunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta carpeta de mensajes está vacía."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Bandeja de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "borrado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensaje privado"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nuevo MP"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviados"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Papelera"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensajes enviados"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "No hay usuario"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restablecer"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "No hay mensaje"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos los artículos"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos los artículos creados por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos los temas"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos los temas creados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Cambiar dirección electrónica"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Cambiar contraseña"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Cambiar detalles del usuario"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Ajustes generales"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Información"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Estadísticas de usuario"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "El usuario no ha añadido ninguna nota suya."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Unido"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Visto por última vez"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último artículo"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Sin información"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Ajustes de la cuenta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "¡Solo se permiten jpg, jpeg, png y gifs!"
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Idioma"
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Apariencia"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Dirección electrónica anterior"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Dirección electrónica nueva"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "Las direcciones deben coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar dirección electrónica"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Contraseña vieja"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "Contraseña requerida"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar la nueva contraseña"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Tu cumpleaños"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Al usuario"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "Se requiere un asunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensaje"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "Se requiere un mensaje."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensaje"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Guardar mensaje"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "El nombre de usuario que has entrado no existe"
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "No te puedes enviar un MP a ti mismo"
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Ajustes actualizados."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Contraseña actualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Dirección electrónica actualizada."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalles actualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensaje guardado."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensaje enviado."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Componer mensaje."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "No puedes editar un mensaje enviado."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensaje"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensaje movido a la Papelera."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensaje restaurado desde la Papelera."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensaje borrado."
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 822f68f7..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/pt_BR/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1627 +0,0 @@
    -# Translations template for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# 
    -# Translators:
    -# Vinícius Ferreira , 2015
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: FlaskBB\n"
    -"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
    -"POT-Creation-Date: 2015-01-26 12:56+0100\n"
    -"PO-Revision-Date: 2015-03-01 21:46+0000\n"
    -"Last-Translator: Vinícius Ferreira \n"
    -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/flaskbb/flaskbb/language/pt_BR/)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=UTF-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Language: pt_BR\n"
    -"Plural-Forms: nplurals=2; plural=(n > 1);\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Recuperar senha"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:27
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "São permitidos apenas letras, números e traços."
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "Usuário ou endereço de e-mail "
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "É necessário um usuário ou endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:71
    -msgid "Password"
    -msgstr "Senha"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "Lembrar"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:90
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:91
    -#: flaskbb/themes/bootstrap3/templates/layout.html:90
    -msgid "Login"
    -msgstr "Conectar-se"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:43
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "Usuário"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:44
    -#: flaskbb/user/forms.py:110
    -msgid "A Username is required."
    -msgstr "É necessário um usuário."
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:47
    -msgid "E-Mail Address"
    -msgstr "Endereço de e-mail"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:48 flaskbb/user/forms.py:41
    -msgid "A E-Mail Address is required."
    -msgstr "É necessário um endereço de e-mail."
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:49
    -#: flaskbb/user/forms.py:42 flaskbb/user/forms.py:47 flaskbb/user/forms.py:50
    -msgid "Invalid E-Mail Address."
    -msgstr "E-mail inválido."
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:73
    -msgid "Passwords must match."
    -msgstr "As senhas devem se coincidir. "
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "Confirmar senha"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "Eu aceito os Termos de Serviço"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Register"
    -msgstr "Registrar"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:104
    -msgid "This Username is already taken."
    -msgstr "Este usuário já esta em uso."
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:118
    -#: flaskbb/user/forms.py:64
    -msgid "This E-Mail Address is already taken."
    -msgstr "Este e-mail já esta em uso."
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "Atualizar sessão"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr ""
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Solicitar senha"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:97
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:98
    -#: flaskbb/themes/bootstrap3/templates/layout.html:97
    -msgid "Reset Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "Endereço de e-mail incorreto."
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "Usuário ou senha incorretos."
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr ""
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "Obrigado por se registrar."
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "E-mail enviado! Por favor, cheque sua caixa de entrada."
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "Você digitou um usuário ou endereço de e-mail que não coincide com a sua conta."
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "O token da senha é inválido."
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "O token da senha expirou."
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "Sua senha foi atualizada."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Resposta rápida"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Você não pode postar uma resposta sem conteúdo. "
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:135
    -#: flaskbb/templates/forum/topic_controls.html:48
    -msgid "Reply"
    -msgstr "Responder"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Conteúdo"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:22
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "Preview"
    -msgstr "Prever"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Título do tópico"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Por favor, digite um título para o tópico."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Postar tópico"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "Motivo"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Qual o motivo para reportar este post?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "Reportar post"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:51
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:52
    -#: flaskbb/themes/bootstrap3/templates/layout.html:51
    -msgid "Search"
    -msgstr "Pesquisar"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Critérios"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Post"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "Tópico"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:49
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:9
    -#: flaskbb/templates/forum/new_topic.html:9
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/topic.html:9
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:35
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Forum"
    -msgstr "Fórum"
    -
    -#: flaskbb/forum/forms.py:102
    -#: flaskbb/templates/management/management_layout.html:8
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "Usuários"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "Você não tem permissão para criar um novo tópico."
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "Você não tem permissão para trancar este tópico."
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "Você não tem permissão para destrancar este tópico."
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "Você não tem permissão para ressaltar este tópico."
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr ""
    -
    -#: flaskbb/forum/views.py:281
    -msgid "You do not have the permissions to move this topic."
    -msgstr "Você não tem permissão para mover este tópico."
    -
    -#: flaskbb/forum/views.py:286
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "Não foi possível mover este tópico para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:290
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "Tópico movido para o fórum %(title)s."
    -
    -#: flaskbb/forum/views.py:306
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "Você não tem permissão para mesclar este tópico."
    -
    -#: flaskbb/forum/views.py:311
    -msgid "Could not merge the topics."
    -msgstr "Não foi possível mesclar os tópicos."
    -
    -#: flaskbb/forum/views.py:314
    -msgid "Topics succesfully merged."
    -msgstr "Tópicos mesclados com sucesso."
    -
    -#: flaskbb/forum/views.py:325 flaskbb/forum/views.py:352
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "Você não tem permissão para postar neste tópico."
    -
    -#: flaskbb/forum/views.py:378
    -msgid "You do not have the permissions to edit this post."
    -msgstr "Você não tem permissão para editar este tópico."
    -
    -#: flaskbb/forum/views.py:408
    -msgid "You do not have the permissions to delete this post."
    -msgstr "Você não tem permissão para deletar este tópico."
    -
    -#: flaskbb/forum/views.py:432
    -msgid "Thanks for reporting."
    -msgstr "Agradecemos por reportar."
    -
    -#: flaskbb/forum/views.py:469
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Fórum %(forum)s marcado como lido."
    -
    -#: flaskbb/forum/views.py:491
    -msgid "All forums marked as read."
    -msgstr "Todos os fóruns foram marcados como lidos."
    -
    -#: flaskbb/management/forms.py:54 flaskbb/templates/user/profile.html:77
    -msgid "Birthday"
    -msgstr "Aniversário"
    -
    -#: flaskbb/management/forms.py:58 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Sexo"
    -
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Masculino"
    -
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Feminino"
    -
    -#: flaskbb/management/forms.py:63 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Localização"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/forum/topic.html:109
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Website"
    -
    -#: flaskbb/management/forms.py:69 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Avatar"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Assinatura"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Notas"
    -
    -#: flaskbb/management/forms.py:79
    -msgid "Primary Group"
    -msgstr "Grupo primário"
    -
    -#: flaskbb/management/forms.py:84
    -msgid "Secondary Groups"
    -msgstr "Grupos secundários "
    -
    -#: flaskbb/management/forms.py:90 flaskbb/management/forms.py:200
    -#: flaskbb/management/forms.py:308 flaskbb/management/forms.py:397
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:36
    -#: flaskbb/user/forms.py:52 flaskbb/user/forms.py:77 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Salvar"
    -
    -#: flaskbb/management/forms.py:137 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "Nome do grupo"
    -
    -#: flaskbb/management/forms.py:138
    -msgid "A Group name is required."
    -msgstr "É necessário um nome para o grupo."
    -
    -#: flaskbb/management/forms.py:140 flaskbb/management/forms.py:267
    -#: flaskbb/management/forms.py:385 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "Descrição "
    -
    -#: flaskbb/management/forms.py:144
    -msgid "Is Admin Group?"
    -msgstr "Pertence ao grupo de administradores ?"
    -
    -#: flaskbb/management/forms.py:145
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Esta opção permite que os usuários deste grupo tenham acesso ao painel de administrador."
    -
    -#: flaskbb/management/forms.py:149
    -msgid "Is Super Moderator Group?"
    -msgstr "Pertence ao grupo de super-moderadores ?"
    -
    -#: flaskbb/management/forms.py:150
    -msgid ""
    -"Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Esta opção permite que os usuários deste grupo modere todos os fóruns."
    -
    -#: flaskbb/management/forms.py:154
    -msgid "Is Moderator Group?"
    -msgstr "Pertence ao grupo de moderadores ?"
    -
    -#: flaskbb/management/forms.py:155
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Esta opção permite que os usuários deste grupo moderem fóruns específicos."
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Banned Group?"
    -msgstr "Pertence ao grupo de banidos ?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "Only one Banned group is allowed."
    -msgstr "É permitido apenas um grupo de banido."
    -
    -#: flaskbb/management/forms.py:163
    -msgid "Is Guest Group?"
    -msgstr "Pertence ao grupo de visitantes ?"
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Only one Guest group is allowed."
    -msgstr "É permitido apenas um grupo de visitante."
    -
    -#: flaskbb/management/forms.py:167
    -msgid "Can edit posts"
    -msgstr "Pode editar posts"
    -
    -#: flaskbb/management/forms.py:168
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Permite que, usuários deste grupo, editem posts."
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Can delete posts"
    -msgstr "Pode deletar posts"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Permite que, usuários deste grupo, deletem posts."
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Can delete topics"
    -msgstr "Pode deletar tópicos"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Permite que, usuários deste grupo, deletem tópicos."
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Can create topics"
    -msgstr "Pode criar tópicos"
    -
    -#: flaskbb/management/forms.py:181
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Permite que, usuários deste grupo, criem tópicos."
    -
    -#: flaskbb/management/forms.py:185
    -msgid "Can post replies"
    -msgstr "Pode responder à tópicos"
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Permite que, usuários deste grupo, criem respostas nos tópicos."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Moderators can edit user profiles"
    -msgstr "Moderadores podem editar o perfil de usuários"
    -
    -#: flaskbb/management/forms.py:191
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Permite que moderadores alterem perfis de outros usuários, incluindo senha e e-mail."
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Moderators can ban users"
    -msgstr "Moderadores podem banir usuários"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Allow moderators to ban other users."
    -msgstr "Permite que moderadores possam banir outros usuários."
    -
    -#: flaskbb/management/forms.py:214
    -msgid "This Group name is already taken."
    -msgstr "Este grupo já existe."
    -
    -#: flaskbb/management/forms.py:228
    -msgid "There is already a Banned group."
    -msgstr "Já existe um grupo para banidos."
    -
    -#: flaskbb/management/forms.py:242
    -msgid "There is already a Guest group."
    -msgstr "Já existe um grupo para visitantes."
    -
    -#: flaskbb/management/forms.py:262
    -msgid "Forum Title"
    -msgstr "Título do fórum"
    -
    -#: flaskbb/management/forms.py:263
    -msgid "A Forum Title is required."
    -msgstr "É necessário um título para o fórum."
    -
    -#: flaskbb/management/forms.py:269 flaskbb/management/forms.py:387
    -msgid "You can format your description with BBCode."
    -msgstr "Você pode formatar sua descrição com BBCode."
    -
    -#: flaskbb/management/forms.py:273 flaskbb/management/forms.py:391
    -msgid "Position"
    -msgstr "Posição"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "The Forum Position is required."
    -msgstr "É necessário uma posição no fórum."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Category"
    -msgstr "Categoria"
    -
    -#: flaskbb/management/forms.py:283
    -msgid "The category that contains this forum."
    -msgstr "Categorias que este fórum possui."
    -
    -#: flaskbb/management/forms.py:287
    -msgid "External Link"
    -msgstr "Link externo"
    -
    -#: flaskbb/management/forms.py:289
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Uma url para um site, ex: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:293
    -#: flaskbb/templates/forum/category_layout.html:60
    -msgid "Moderators"
    -msgstr "Moderadores"
    -
    -#: flaskbb/management/forms.py:294
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Nome de usuários separados por virgula. Deixe em branco caso não deseje nenhum moderador."
    -
    -#: flaskbb/management/forms.py:299
    -msgid "Show Moderators"
    -msgstr "Mostrar moderadores"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Mostrar moderadores na página principal ?"
    -
    -#: flaskbb/management/forms.py:304
    -msgid "Locked?"
    -msgstr "Trancado ?"
    -
    -#: flaskbb/management/forms.py:305
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Desabilitar novos posts e tópicos neste fórum."
    -
    -#: flaskbb/management/forms.py:313
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr ""
    -
    -#: flaskbb/management/forms.py:318
    -msgid "You also need to specify some moderators."
    -msgstr "Também é necessário especificar alguns moderadores."
    -
    -#: flaskbb/management/forms.py:339
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s não pertence ao grupo de moderadores."
    -
    -#: flaskbb/management/forms.py:345
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "Usuário %(moderator)s não foi encontrado."
    -
    -#: flaskbb/management/forms.py:381
    -msgid "Category Title"
    -msgstr "Título da categoria."
    -
    -#: flaskbb/management/forms.py:382
    -msgid "A Category Title is required."
    -msgstr "É necessário um titulo para a categoria. "
    -
    -#: flaskbb/management/forms.py:393
    -msgid "The Category Position is required."
    -msgstr "É necessário uma posição para a categoria."
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "Configurações salvas."
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "Você não tem permissão para editar este usuário."
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "Usuário atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "Editar usuário"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "Usuário deletado com sucesso."
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "Usuário cadastrado com sucesso."
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "Adicionar usuário"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "Você não tem permissão para banir este usuário."
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Moderadores não podem banir administradores."
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "Usuário banido."
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "Não foi possível banir usuário."
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "Você não tem permissão para desbanir este usuário."
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "Usuário desbanido."
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "Não foi possível desbanir usuário."
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Report %(id)s já esta marcado como lido."
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Report %(id)s marcado como lido."
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "Todos os reports marcados como lidos."
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "Grupo atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "Editar grupo"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "Grupo deletado com sucesso."
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "Grupo adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "Cadastrar grupo"
    -
    -#: flaskbb/management/views.py:370
    -msgid "Forum successfully updated."
    -msgstr "Fórum atualizado com sucesso."
    -
    -#: flaskbb/management/views.py:381
    -msgid "Edit Forum"
    -msgstr "Editar fórum"
    -
    -#: flaskbb/management/views.py:394
    -msgid "Forum successfully deleted."
    -msgstr "Fórum deletado com sucesso."
    -
    -#: flaskbb/management/views.py:406
    -msgid "Forum successfully added."
    -msgstr "Fórum adicionado com sucesso."
    -
    -#: flaskbb/management/views.py:414
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "Adicionar fórum"
    -
    -#: flaskbb/management/views.py:424
    -msgid "Category successfully added."
    -msgstr "Categoria adicionada com sucesso."
    -
    -#: flaskbb/management/views.py:428
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "Adicionar categoria"
    -
    -#: flaskbb/management/views.py:440
    -msgid "Category successfully updated."
    -msgstr "Categoria atualizada com sucesso."
    -
    -#: flaskbb/management/views.py:444
    -msgid "Edit Category"
    -msgstr "Editar categoria"
    -
    -#: flaskbb/management/views.py:457
    -msgid "Category with all associated forums deleted."
    -msgstr "Categoria com todos os fóruns associados deletada."
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "Plugin habilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:485
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria. "
    -
    -#: flaskbb/management/views.py:489
    -msgid "Couldn't enable Plugin."
    -msgstr "Não foi possível habilitar o plugin."
    -
    -#: flaskbb/management/views.py:500
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Plugin %(plugin)s não encontrado."
    -
    -#: flaskbb/management/views.py:512
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "Plugin desabilitado. Por favor, recarregue sua aplicação."
    -
    -#: flaskbb/management/views.py:514
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "Se você estiver usando um host que não suporta escrita em disco, isto não ira funcionar - então você precisa deletar o arquivo 'DISABLED' por conta própria."
    -
    -#: flaskbb/management/views.py:529
    -msgid "Plugin has been uninstalled."
    -msgstr "Plugin desinstalado com sucesso."
    -
    -#: flaskbb/management/views.py:531
    -msgid "Cannot uninstall Plugin."
    -msgstr "Não foi possível desinstalar o plugin."
    -
    -#: flaskbb/management/views.py:544
    -msgid "Plugin has been installed."
    -msgstr "Plugin instalado com sucesso."
    -
    -#: flaskbb/management/views.py:546
    -msgid "Cannot install Plugin."
    -msgstr "Não foi possível instalar plugin."
    -
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Memberlist"
    -msgstr "Lista de membros"
    -
    -#: flaskbb/templates/layout.html:65
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:66
    -#: flaskbb/themes/bootstrap3/templates/layout.html:65
    -msgid "Topic Tracker"
    -msgstr "Rastreador de tópicos"
    -
    -#: flaskbb/templates/layout.html:68
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:69
    -#: flaskbb/themes/bootstrap3/templates/layout.html:68
    -msgid "Settings"
    -msgstr "Configurações"
    -
    -#: flaskbb/templates/layout.html:70
    -#: flaskbb/templates/management/forums.html:36
    -#: flaskbb/themes/bootstrap2/templates/layout.html:71
    -#: flaskbb/themes/bootstrap3/templates/layout.html:70
    -msgid "Management"
    -msgstr "Administração"
    -
    -#: flaskbb/templates/layout.html:74
    -#: flaskbb/themes/bootstrap2/templates/layout.html:75
    -#: flaskbb/themes/bootstrap3/templates/layout.html:74
    -msgid "Logout"
    -msgstr "Sair"
    -
    -#: flaskbb/templates/layout.html:83
    -msgid "Private Messages"
    -msgstr "Mensagens privadas"
    -
    -#: flaskbb/templates/layout.html:84
    -#: flaskbb/themes/bootstrap2/templates/layout.html:85
    -#: flaskbb/themes/bootstrap3/templates/layout.html:84
    -msgid "New Message"
    -msgstr "Nova mensagem"
    -
    -#: flaskbb/templates/macros.html:281
    -msgid "Pages"
    -msgstr "Páginas"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "Ainda não é um membro ?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "Esqueci a senha."
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Caro %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Para restaurar sua senha clique no seguinte link:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "Atenciosamente,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "A administração "
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Sem acesso - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "Acesso negado"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "Você não tem permissão para acessar esta página."
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "Voltar para o fórum"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "Oh não! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "Oops, página não encontrada!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "A página que você esta procurando não existe."
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Server error - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "Server error"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "Alguma coisa deu errado!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "Tópicos"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/topic.html:70
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/message/view_message.html:29
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "Posts"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86
    -#: flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/topic.html:35
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "por"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "Nenhum post disponível."
    -
    -#: flaskbb/templates/forum/forum.html:22
    -#: flaskbb/templates/management/unread_reports.html:44
    -msgid "Mark as Read"
    -msgstr "Marcar como lido"
    -
    -#: flaskbb/templates/forum/forum.html:27
    -msgid "Locked"
    -msgstr "Trancado"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/new_topic.html:16
    -msgid "New Topic"
    -msgstr "Novo tópico"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "Visualizações"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "Nenhum tópico disponível."
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "Estatísticas do fórum"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "Quem esta online ?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "Número total de usuários registrados"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "Número total de tópicos"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "Número total de posts"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "Usuário cadastrado mais recente"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "Sem usuários."
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "Usuários registrados online"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "Convidados online"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "Data registrada"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "Grupo"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:12
    -#: flaskbb/templates/forum/new_post.html:17
    -msgid "New Post"
    -msgstr "Novo post"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "Usuários online"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:116
    -msgid "Report"
    -msgstr "Reportar"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "Fechar"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Tópico"
    -
    -#: flaskbb/templates/forum/topic.html:35
    -msgid "Last modified"
    -msgstr "Ultima modificação"
    -
    -#: flaskbb/templates/forum/topic.html:71
    -#: flaskbb/templates/message/view_message.html:30
    -msgid "Registered since"
    -msgstr "Registrado desde"
    -
    -#: flaskbb/templates/forum/topic.html:77
    -msgid "Guest"
    -msgstr "Convidado"
    -
    -#: flaskbb/templates/forum/topic.html:106
    -msgid "PM"
    -msgstr "PM"
    -
    -#: flaskbb/templates/forum/topic.html:120
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:56
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -#: flaskbb/templates/message/drafts.html:21
    -msgid "Edit"
    -msgstr "Editar"
    -
    -#: flaskbb/templates/forum/topic.html:124
    -#: flaskbb/templates/forum/topic.html:128
    -#: flaskbb/templates/management/forums.html:29
    -#: flaskbb/templates/management/forums.html:57
    -#: flaskbb/templates/management/groups.html:38
    -#: flaskbb/templates/management/users.html:70
    -#: flaskbb/templates/message/drafts.html:22
    -#: flaskbb/templates/message/inbox.html:28
    -#: flaskbb/templates/message/sent.html:24
    -#: flaskbb/templates/message/trash.html:22
    -msgid "Delete"
    -msgstr "Deletar"
    -
    -#: flaskbb/templates/forum/topic.html:133
    -msgid "Quote"
    -msgstr "Citação"
    -
    -#: flaskbb/templates/forum/topic_controls.html:9
    -msgid "Delete Topic"
    -msgstr "Deletar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Lock Topic"
    -msgstr "Trancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:19
    -msgid "Unlock Topic"
    -msgstr "Destrancar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Highlight Topic"
    -msgstr "Ressaltar tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:28
    -msgid "Trivialize Topic"
    -msgstr ""
    -
    -#: flaskbb/templates/forum/topic_controls.html:38
    -msgid "Untrack Topic"
    -msgstr "Deixar de seguir este tópico"
    -
    -#: flaskbb/templates/forum/topic_controls.html:42
    -msgid "Track Topic"
    -msgstr "Seguir tópico"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "Tópicos seguidos"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "Usuários banidos"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Gerenciar usuários"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "Gerenciar"
    -
    -#: flaskbb/templates/management/banned_users.html:58
    -#: flaskbb/templates/management/users.html:66
    -msgid "Unban"
    -msgstr "Desbanir"
    -
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:77
    -msgid "No users found matching your search criteria."
    -msgstr "Nenhum usuário encontrado com estes critérios de pesquisa."
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "Gerenciar fórum"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:14
    -msgid "Forums"
    -msgstr "Fóruns"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "Gerenciar grupos"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:13
    -msgid "Groups"
    -msgstr "Grupos"
    -
    -#: flaskbb/templates/management/management_layout.html:7
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "Visão geral"
    -
    -#: flaskbb/templates/management/management_layout.html:9
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "Reports"
    -
    -#: flaskbb/templates/management/management_layout.html:15
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "Plugins"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "Estatísticas globais "
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB versão"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python versão"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask versão"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "Gerenciar plugins"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "Plugin"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "Informação"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "Versão"
    -
    -#: flaskbb/templates/management/plugins.html:34
    -msgid "Enable"
    -msgstr "Habilitar"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Disable"
    -msgstr "Desabilitar"
    -
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "Install"
    -msgstr "Instalar"
    -
    -#: flaskbb/templates/management/plugins.html:45
    -msgid "Uninstall"
    -msgstr "Desinstalar"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "Mostrar reports não lidos"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "Mostrar todos reports"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "Todos reports"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "Postado por"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "Reportado por"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "Reportado"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "Nenhuma reclamação."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "Reclamações não lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Mark all as Read"
    -msgstr "Marcar todas como lidas"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "No unread reports."
    -msgstr "Nenhuma reclamação não lida."
    -
    -#: flaskbb/templates/management/users.html:62
    -msgid "Ban"
    -msgstr "Banir"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "Rascunhos"
    -
    -#: flaskbb/templates/message/drafts.html:8
    -#: flaskbb/templates/message/sent.html:8
    -#: flaskbb/templates/message/trash.html:8
    -msgid "To"
    -msgstr "Para"
    -
    -#: flaskbb/templates/message/drafts.html:9
    -#: flaskbb/templates/message/inbox.html:9
    -#: flaskbb/templates/message/sent.html:9
    -#: flaskbb/templates/message/trash.html:9 flaskbb/user/forms.py:112
    -msgid "Subject"
    -msgstr "Assunto"
    -
    -#: flaskbb/templates/message/drafts.html:10
    -#: flaskbb/templates/message/inbox.html:10
    -#: flaskbb/templates/message/sent.html:10
    -#: flaskbb/templates/message/trash.html:10
    -msgid "Date"
    -msgstr "Data"
    -
    -#: flaskbb/templates/message/drafts.html:11
    -#: flaskbb/templates/message/inbox.html:11
    -#: flaskbb/templates/message/message_layout.html:15
    -#: flaskbb/templates/message/sent.html:11
    -#: flaskbb/templates/message/trash.html:11
    -msgid "Options"
    -msgstr "Opções"
    -
    -#: flaskbb/templates/message/drafts.html:18
    -#: flaskbb/templates/message/trash.html:18
    -msgid "No Subject"
    -msgstr "Sem assunto"
    -
    -#: flaskbb/templates/message/drafts.html:28
    -#: flaskbb/templates/message/inbox.html:33
    -#: flaskbb/templates/message/sent.html:29
    -#: flaskbb/templates/message/trash.html:28
    -msgid "This message folder is empty."
    -msgstr "Esta pasta de mensagens esta vazia."
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "Inbox"
    -msgstr "Caixa de entrada"
    -
    -#: flaskbb/templates/message/inbox.html:8
    -msgid "From"
    -msgstr "De"
    -
    -#: flaskbb/templates/message/inbox.html:20
    -#: flaskbb/templates/message/sent.html:20
    -#: flaskbb/templates/message/view_message.html:33
    -msgid "deleted"
    -msgstr "deletado"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Mensagem privada"
    -
    -#: flaskbb/templates/message/message_layout.html:15
    -msgid "New PM"
    -msgstr "Nova PM"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "Enviado"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Lixo"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Mensagens enviadas"
    -
    -#: flaskbb/templates/message/trash.html:17
    -msgid "No User"
    -msgstr "Sem usuário"
    -
    -#: flaskbb/templates/message/trash.html:21
    -msgid "Restore"
    -msgstr "Restaurar"
    -
    -#: flaskbb/templates/message/view_message.html:49
    -msgid "No Message"
    -msgstr "Sem mensagem"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "Todos os posts"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "Todos os posts feitos por %(user)s"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "Todos os tópicos"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "Todos os tópicos criados por %(user)s"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Mudar endereço de e-mail"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Alterar senha"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Alterar detalhes de usuári"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Configurações gerais"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "Info"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "Status do usuário"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "Usuário não adicionou notas sobre ele."
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "Registrado"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "Última visita"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "Nunca visto"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "Último post"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "Nunca"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "Nenhuma informação"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Configurações de conta"
    -
    -#: flaskbb/user/forms.py:27
    -msgid "Only jpg, jpeg, png and gifs are allowed!"
    -msgstr "São permitidos apenas jpg, jpeg, png e gifs."
    -
    -#: flaskbb/user/forms.py:33
    -msgid "Language"
    -msgstr "Lingua "
    -
    -#: flaskbb/user/forms.py:34
    -msgid "Theme"
    -msgstr "Tema"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "Old E-Mail Address"
    -msgstr "Endereço de e-mail antigo"
    -
    -#: flaskbb/user/forms.py:44
    -msgid "New E-Mail Address"
    -msgstr "Novo endereço de e-mail"
    -
    -#: flaskbb/user/forms.py:46
    -msgid "E-Mails must match."
    -msgstr "E-mails devem se coincidir."
    -
    -#: flaskbb/user/forms.py:49
    -msgid "Confirm E-Mail Address"
    -msgstr "Confirmar endereço de e-mai"
    -
    -#: flaskbb/user/forms.py:68
    -msgid "Old Password"
    -msgstr "Senha antiga"
    -
    -#: flaskbb/user/forms.py:69
    -msgid "Password required"
    -msgstr "É necessário uma senha"
    -
    -#: flaskbb/user/forms.py:75
    -msgid "Confirm New Password"
    -msgstr "Confirmar nova senha"
    -
    -#: flaskbb/user/forms.py:82
    -msgid "Your Birthday"
    -msgstr "Nascimento"
    -
    -#: flaskbb/user/forms.py:109
    -msgid "To User"
    -msgstr "Para o usuário"
    -
    -#: flaskbb/user/forms.py:113
    -msgid "A Subject is required."
    -msgstr "É necessário um assunto."
    -
    -#: flaskbb/user/forms.py:115
    -msgid "Message"
    -msgstr "Mensagem"
    -
    -#: flaskbb/user/forms.py:116
    -msgid "A Message is required."
    -msgstr "É necessário uma mensagem."
    -
    -#: flaskbb/user/forms.py:118
    -msgid "Send Message"
    -msgstr "Enviar mensagem"
    -
    -#: flaskbb/user/forms.py:119
    -msgid "Save Message"
    -msgstr "Salvar mensagem"
    -
    -#: flaskbb/user/forms.py:124
    -msgid "The Username you entered doesn't exist"
    -msgstr "O usuário que você inseriu não existe."
    -
    -#: flaskbb/user/forms.py:126
    -msgid "You cannot send a PM to yourself."
    -msgstr "Você não pode enviar uma mensagem privada para você mesmo."
    -
    -#: flaskbb/user/views.py:69
    -msgid "Settings updated."
    -msgstr "Configurações atualizadas."
    -
    -#: flaskbb/user/views.py:85
    -msgid "Password updated."
    -msgstr "Senha atualizada."
    -
    -#: flaskbb/user/views.py:97
    -msgid "E-Mail Address updated."
    -msgstr "Endereço de e-mail atualizado."
    -
    -#: flaskbb/user/views.py:110
    -msgid "Details updated."
    -msgstr "Detalhes atualizados."
    -
    -#: flaskbb/user/views.py:183 flaskbb/user/views.py:230
    -msgid "Message saved."
    -msgstr "Mensagem salva."
    -
    -#: flaskbb/user/views.py:201 flaskbb/user/views.py:247
    -msgid "Message sent."
    -msgstr "Mensagem enviada."
    -
    -#: flaskbb/user/views.py:207
    -msgid "Compose Message"
    -msgstr "Escrever mensagem."
    -
    -#: flaskbb/user/views.py:216
    -msgid "You cannot edit a sent message."
    -msgstr "Você não pode editar uma mensagem já enviada."
    -
    -#: flaskbb/user/views.py:255
    -msgid "Edit Message"
    -msgstr "Editar mensagem"
    -
    -#: flaskbb/user/views.py:264
    -msgid "Message moved to Trash."
    -msgstr "Mensagem movido para a lixeira."
    -
    -#: flaskbb/user/views.py:274
    -msgid "Message restored from Trash."
    -msgstr "Mensagem restaurada."
    -
    -#: flaskbb/user/views.py:283
    -msgid "Message deleted."
    -msgstr "Mensagem deletada."
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/ru/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/ru/LC_MESSAGES/messages.po
    deleted file mode 100644
    index bb1f10f3..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/ru/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1751 +0,0 @@
    -# Russian translations for FlaskBB.
    -# Copyright (C) 2016 DENIS ROMANOV
    -# This file is distributed under the same license as the FlaskBB project.
    -# DENIS ROMANOV , 2016.
    -
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: PROJECT VERSION\n"
    -"Report-Msgid-Bugs-To: denis.romanow@gmail.com\n"
    -"POT-Creation-Date: 2016-02-29 12:44+0300\n"
    -"PO-Revision-Date: 2016-02-29 12:44+0300\n"
    -"Last-Translator: DENIS ROMANOV \n"
    -"Language: ru\n"
    -"Language-Team: ru \n"
    -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
    -"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 2.2.0\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:23 flaskbb/management/forms.py:36
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "Используйте только буквы, цифры или символ подчеркивания"
    -
    -#: flaskbb/auth/forms.py:27
    -msgid "Username or E-Mail Address"
    -msgstr "Имя или эл. почта"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "A Username or E-Mail Address is required."
    -msgstr "Требуется имя пользователя или адрес электронной почты."
    -
    -#: flaskbb/auth/forms.py:31 flaskbb/auth/forms.py:48 flaskbb/auth/forms.py:86
    -#: flaskbb/auth/forms.py:107 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "Пароль"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:87
    -msgid "A Password is required."
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/auth/forms.py:34
    -msgid "Remember Me"
    -msgstr "Запомнить меня"
    -
    -#: flaskbb/auth/forms.py:36 flaskbb/templates/layout.html:134
    -#: flaskbb/templates/navigation.html:60 flaskbb/templates/auth/login.html:1
    -#: flaskbb/templates/auth/login.html:9
    -msgid "Login"
    -msgstr "Вход"
    -
    -#: flaskbb/auth/forms.py:40 flaskbb/management/forms.py:56
    -#: flaskbb/templates/forum/memberlist.html:43
    -#: flaskbb/templates/forum/search_result.html:104
    -#: flaskbb/templates/management/banned_users.html:62
    -#: flaskbb/templates/management/users.html:62
    -msgid "Username"
    -msgstr "Имя"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:57
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "Требуется имя"
    -
    -#: flaskbb/auth/forms.py:44 flaskbb/auth/forms.py:93 flaskbb/auth/forms.py:103
    -#: flaskbb/management/forms.py:60
    -msgid "E-Mail Address"
    -msgstr "Адрес эл. почты"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:104
    -#: flaskbb/management/forms.py:61 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/management/forms.py:62
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:50 flaskbb/auth/forms.py:109 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "Пароли должны совпадать."
    -
    -#: flaskbb/auth/forms.py:52 flaskbb/auth/forms.py:111
    -msgid "Confirm Password"
    -msgstr "Подтвердите пароль"
    -
    -#: flaskbb/auth/forms.py:55 flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "Язык"
    -
    -#: flaskbb/auth/forms.py:57
    -msgid "I accept the Terms of Service"
    -msgstr "Я принимаю условия сервиса"
    -
    -#: flaskbb/auth/forms.py:59 flaskbb/templates/layout.html:138
    -#: flaskbb/templates/navigation.html:66 flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:9
    -msgid "Register"
    -msgstr "Регистрация"
    -
    -#: flaskbb/auth/forms.py:64 flaskbb/management/forms.py:117
    -msgid "This Username is already taken."
    -msgstr "Это имя пользователя уже занято."
    -
    -#: flaskbb/auth/forms.py:69 flaskbb/management/forms.py:131
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "Этот адрес эл. почты уже занят"
    -
    -#: flaskbb/auth/forms.py:82
    -msgid "Captcha"
    -msgstr "Captcha"
    -
    -#: flaskbb/auth/forms.py:89 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:10
    -msgid "Refresh Login"
    -msgstr "Обновить вход"
    -
    -#: flaskbb/auth/forms.py:94
    -msgid "A E-Mail Address is reguired."
    -msgstr "Требуется адрес эл. почты."
    -
    -#: flaskbb/auth/forms.py:97 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "Запрос пароля"
    -
    -#: flaskbb/auth/forms.py:113 flaskbb/templates/layout.html:139
    -#: flaskbb/templates/navigation.html:67
    -#: flaskbb/templates/auth/forgot_password.html:9
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -msgid "Reset Password"
    -msgstr "Сброс пароля"
    -
    -#: flaskbb/auth/forms.py:118
    -msgid "Wrong E-Mail Address."
    -msgstr "Неверный адрес эл. почты."
    -
    -#: flaskbb/auth/views.py:47
    -msgid "Wrong Username or Password."
    -msgstr "Неверное имя пользователя или пароль."
    -
    -#: flaskbb/auth/views.py:62
    -msgid "Reauthenticated."
    -msgstr "Повторный вход выполнен."
    -
    -#: flaskbb/auth/views.py:103
    -msgid "Thanks for registering."
    -msgstr "Спасибо за регистрацию."
    -
    -#: flaskbb/auth/views.py:127
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "Вам отправлено сообщение эл. почты. Проверьте входящие письма."
    -
    -#: flaskbb/auth/views.py:130
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "Вы ввели имя пользователя или адрес эл. почты. которые не связаны с Вашей учетной записью."
    -
    -#: flaskbb/auth/views.py:150
    -msgid "Your Password Token is invalid."
    -msgstr "Неверный идентификатор пароля."
    -
    -#: flaskbb/auth/views.py:154
    -msgid "Your Password Token is expired."
    -msgstr "Идентификатор пароля истек."
    -
    -#: flaskbb/auth/views.py:160
    -msgid "Your Password has been updated."
    -msgstr "Ваш пароль был обновлен."
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "Быстрый ответ"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "Вы не можете отправить пустой комментарий."
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic_controls.html:94
    -msgid "Reply"
    -msgstr "Ответ"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "Содержание"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "Отслеживать"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -msgid "Preview"
    -msgstr "Предварительный просмотр"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "Заголовок темы"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "Пожалуйста выберете заголовок темы."
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "Опубликовать тему"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:39
    -#: flaskbb/templates/management/unread_reports.html:39
    -msgid "Reason"
    -msgstr "Причина"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "Какая причина жалобы на эту тему?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:16
    -msgid "Report Post"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:75
    -#: flaskbb/templates/navigation.html:21
    -#: flaskbb/templates/forum/memberlist.html:26
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:10
    -#: flaskbb/templates/forum/search_form.html:15
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:10
    -#: flaskbb/templates/management/banned_users.html:39
    -#: flaskbb/templates/management/users.html:39
    -msgid "Search"
    -msgstr "Поиск"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "Критерий"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "Комментарий"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/edit_forum.html:31
    -#: flaskbb/templates/forum/forum.html:49
    -#: flaskbb/templates/forum/search_result.html:134
    -#: flaskbb/templates/forum/topictracker.html:31
    -#: flaskbb/templates/management/reports.html:38
    -#: flaskbb/templates/management/unread_reports.html:38
    -msgid "Topic"
    -msgstr "Тема"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:73
    -#: flaskbb/templates/navigation.html:19 flaskbb/templates/forum/category.html:9
    -#: flaskbb/templates/forum/category_layout.html:8
    -#: flaskbb/templates/forum/edit_forum.html:13
    -#: flaskbb/templates/forum/forum.html:10
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/templates/forum/new_post.html:11
    -#: flaskbb/templates/forum/new_topic.html:11
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/forum/search_result.html:213
    -#: flaskbb/templates/forum/topic.html:10
    -#: flaskbb/templates/forum/topic_horizontal.html:14
    -#: flaskbb/templates/forum/topictracker.html:14
    -#: flaskbb/templates/management/banned_users.html:8
    -#: flaskbb/templates/management/category_form.html:8
    -#: flaskbb/templates/management/forum_form.html:8
    -#: flaskbb/templates/management/forums.html:7
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/group_form.html:8
    -#: flaskbb/templates/management/groups.html:7
    -#: flaskbb/templates/management/overview.html:7
    -#: flaskbb/templates/management/plugins.html:7
    -#: flaskbb/templates/management/reports.html:8
    -#: flaskbb/templates/management/settings.html:7
    -#: flaskbb/templates/management/unread_reports.html:8
    -#: flaskbb/templates/management/user_form.html:8
    -#: flaskbb/templates/management/users.html:8
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:5
    -#: flaskbb/templates/user/settings_layout.html:6
    -msgid "Forum"
    -msgstr "Форум"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:99
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/users.html:1
    -#: flaskbb/templates/management/users.html:34
    -msgid "Users"
    -msgstr "Пользователи"
    -
    -#: flaskbb/forum/views.py:180
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "У Вас нет прав создать новую тему."
    -
    -#: flaskbb/forum/views.py:208 flaskbb/utils/helpers.py:96
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "У Вас нет прав удалить эту тему."
    -
    -#: flaskbb/forum/views.py:225
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "У Вас нет прав закрыть эту тему."
    -
    -#: flaskbb/forum/views.py:241
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "У Вас нет прав открыть эту тему."
    -
    -#: flaskbb/forum/views.py:257
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "У Вас нет прав закрепить эту тему."
    -
    -#: flaskbb/forum/views.py:274
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "У Вас нет прав открепить эту тему."
    -
    -#: flaskbb/forum/views.py:297
    -msgid "You do not have the permissions to moderate this forum."
    -msgstr "У Вас нет прав модерировать этот форум."
    -
    -#: flaskbb/forum/views.py:323
    -#, python-format
    -msgid "%(count)s Topics locked."
    -msgstr "%(count)s Тем закрыто."
    -
    -#: flaskbb/forum/views.py:329
    -#, python-format
    -msgid "%(count)s Topics unlocked."
    -msgstr "%(count)s Тем открыто."
    -
    -#: flaskbb/forum/views.py:336
    -#, python-format
    -msgid "%(count)s Topics highlighted."
    -msgstr "%(count)s Тем закреплено."
    -
    -#: flaskbb/forum/views.py:342
    -#, python-format
    -msgid "%(count)s Topics trivialized."
    -msgstr "%(count)s Тем откреплено."
    -
    -#: flaskbb/forum/views.py:349
    -#, python-format
    -msgid "%(count)s Topics deleted."
    -msgstr "%(count)s Тем удалено."
    -
    -#: flaskbb/forum/views.py:357
    -msgid "Please choose a new forum for the topics."
    -msgstr "Пожалуйста, выберите новый форум для создания темы."
    -
    -#: flaskbb/forum/views.py:369
    -msgid "You do not have the permissions to move this topic."
    -msgstr "У Вас нет прав перемещать эту тему."
    -
    -#: flaskbb/forum/views.py:389 flaskbb/forum/views.py:416
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "У Вас нет прав комментировать эту тему."
    -
    -#: flaskbb/forum/views.py:442
    -msgid "You do not have the permissions to edit this post."
    -msgstr "У Вас нет прав редактировать этот комментарий."
    -
    -#: flaskbb/forum/views.py:473
    -msgid "You do not have the permissions to delete this post."
    -msgstr "У Вас нет прав удалять этот комментарий."
    -
    -#: flaskbb/forum/views.py:497
    -msgid "Thanks for reporting."
    -msgstr "Спасибо за сообщение."
    -
    -#: flaskbb/forum/views.py:533
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "Форум %(forum)s отмечен как прочитанный."
    -
    -#: flaskbb/forum/views.py:555
    -msgid "All forums marked as read."
    -msgstr "Все форумы отмечены как прочитанные."
    -
    -#: flaskbb/management/forms.py:67 flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "День рождения"
    -
    -#: flaskbb/management/forms.py:71 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "Пол"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "Мужской"
    -
    -#: flaskbb/management/forms.py:74 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "Женский"
    -
    -#: flaskbb/management/forms.py:76 flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "Местоположение"
    -
    -#: flaskbb/management/forms.py:79 flaskbb/templates/forum/search_result.html:48
    -#: flaskbb/templates/forum/topic.html:52
    -#: flaskbb/templates/forum/topic_horizontal.html:63
    -#: flaskbb/templates/message/conversation.html:47
    -#: flaskbb/templates/message/conversation.html:101 flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "Сайт"
    -
    -#: flaskbb/management/forms.py:82 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "Аватар "
    -
    -#: flaskbb/management/forms.py:85 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/management/forms.py:88 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "Комментарий"
    -
    -#: flaskbb/management/forms.py:92
    -msgid "Primary Group"
    -msgstr "Первичная группа"
    -
    -#: flaskbb/management/forms.py:97
    -msgid "Secondary Groups"
    -msgstr "Вторичная группа"
    -
    -#: flaskbb/management/forms.py:103 flaskbb/management/forms.py:215
    -#: flaskbb/management/forms.py:332 flaskbb/management/forms.py:411
    -#: flaskbb/templates/management/settings.html:59 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "Сохранить"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/templates/management/groups.html:34
    -msgid "Group Name"
    -msgstr "Имя группы"
    -
    -#: flaskbb/management/forms.py:153
    -msgid "A Group name is required."
    -msgstr "Требуется имя группы"
    -
    -#: flaskbb/management/forms.py:155 flaskbb/management/forms.py:284
    -#: flaskbb/management/forms.py:399 flaskbb/templates/management/groups.html:35
    -msgid "Description"
    -msgstr "Описание"
    -
    -#: flaskbb/management/forms.py:159
    -msgid "Is Admin Group?"
    -msgstr "Группа администраторов?"
    -
    -#: flaskbb/management/forms.py:160
    -msgid "With this option the group has access to the admin panel."
    -msgstr "Отметьте что бы пользователям был предоставлен доступ к панели администрирования."
    -
    -#: flaskbb/management/forms.py:164
    -msgid "Is Super Moderator Group?"
    -msgstr "Группа супермодераторов?"
    -
    -#: flaskbb/management/forms.py:165
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "Отметьте что бы пользователи могли модерировать все форумы."
    -
    -#: flaskbb/management/forms.py:169
    -msgid "Is Moderator Group?"
    -msgstr "Группа модераторов?"
    -
    -#: flaskbb/management/forms.py:170
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "Отметьте что бы пользователи могли редактировать отдельные форумы."
    -
    -#: flaskbb/management/forms.py:174
    -msgid "Is Banned Group?"
    -msgstr "Группа заблокированных?"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Only one Banned group is allowed."
    -msgstr "Допустима только одна группа заблокированных."
    -
    -#: flaskbb/management/forms.py:178
    -msgid "Is Guest Group?"
    -msgstr "Группа гостей?"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Only one Guest group is allowed."
    -msgstr "Допустима только одна группа гостей."
    -
    -#: flaskbb/management/forms.py:182
    -msgid "Can edit posts"
    -msgstr "Редактировать комментарии"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "Отметьте что бы пользователи могли редактировать комментарии."
    -
    -#: flaskbb/management/forms.py:186
    -msgid "Can delete posts"
    -msgstr "Удалять комментарии"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "Отметьте что бы пользователи могли удалять комментарии."
    -
    -#: flaskbb/management/forms.py:190
    -msgid "Can delete topics"
    -msgstr "Удалять темы"
    -
    -#: flaskbb/management/forms.py:191
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "Отметьте что бы пользователи могли удалять темы."
    -
    -#: flaskbb/management/forms.py:195
    -msgid "Can create topics"
    -msgstr "Создавать темы"
    -
    -#: flaskbb/management/forms.py:196
    -msgid "Check this is the users in this group can create topics."
    -msgstr "Отметьте что бы пользователи могли создавать темы."
    -
    -#: flaskbb/management/forms.py:200
    -msgid "Can post replies"
    -msgstr "Комментировать темы"
    -
    -#: flaskbb/management/forms.py:201
    -msgid "Check this is the users in this group can post replies."
    -msgstr "Отметьте что бы пользователи могли комментировать темы."
    -
    -#: flaskbb/management/forms.py:205
    -msgid "Moderators can edit user profiles"
    -msgstr "Модераторы могут редактировать профили пользователей"
    -
    -#: flaskbb/management/forms.py:206
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "Позволить модераторам редактировать профили других пользователей включая пароли и адреса эл. почты."
    -
    -#: flaskbb/management/forms.py:211
    -msgid "Moderators can ban users"
    -msgstr "Модераторы могут блокировать пользователей"
    -
    -#: flaskbb/management/forms.py:212
    -msgid "Allow moderators to ban other users."
    -msgstr "Позволить модераторам блокировать других пользователей."
    -
    -#: flaskbb/management/forms.py:229
    -msgid "This Group name is already taken."
    -msgstr "Эта группа уже существует"
    -
    -#: flaskbb/management/forms.py:243
    -msgid "There is already a Banned group."
    -msgstr "Уже существует группа заблокированных пользователей."
    -
    -#: flaskbb/management/forms.py:257
    -msgid "There is already a Guest group."
    -msgstr "Уже существует группа гостевых пользователей."
    -
    -#: flaskbb/management/forms.py:279
    -msgid "Forum Title"
    -msgstr "Заголовок форума"
    -
    -#: flaskbb/management/forms.py:280
    -msgid "A Forum Title is required."
    -msgstr "Требуется заголовок форума."
    -
    -#: flaskbb/management/forms.py:286 flaskbb/management/forms.py:401
    -msgid "You can format your description with BBCode."
    -msgstr "Вы можете форматировать описание с помощью BBCode"
    -
    -#: flaskbb/management/forms.py:290 flaskbb/management/forms.py:405
    -msgid "Position"
    -msgstr "Позиция"
    -
    -#: flaskbb/management/forms.py:292
    -msgid "The Forum Position is required."
    -msgstr "Требуеться позиция форума."
    -
    -#: flaskbb/management/forms.py:296
    -msgid "Category"
    -msgstr "Категория"
    -
    -#: flaskbb/management/forms.py:300
    -msgid "The category that contains this forum."
    -msgstr "Категория которая содержит данный форум."
    -
    -#: flaskbb/management/forms.py:304
    -msgid "External Link"
    -msgstr "Внешняя ссылка"
    -
    -#: flaskbb/management/forms.py:306
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "Ссылка на внешний сайт например: 'http://flaskbb.org'."
    -
    -#: flaskbb/management/forms.py:310
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/search_result.html:283
    -#: flaskbb/templates/management/forums.html:135
    -msgid "Moderators"
    -msgstr "Модераторы"
    -
    -#: flaskbb/management/forms.py:311
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "Имена пользователей разделенные запятой. Оставьте пустым если Вы не хотите назначать модераторов."
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Show Moderators"
    -msgstr "Показывать модераторов"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "Вы хотите показывать модераторов на главной странице?"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Locked?"
    -msgstr "Заблокирован?"
    -
    -#: flaskbb/management/forms.py:322
    -msgid "Disable new posts and topics in this forum."
    -msgstr "Отключить новые комментарии и темы на этом форуме."
    -
    -#: flaskbb/management/forms.py:326
    -msgid "Group Access to Forum"
    -msgstr "Доступ групп к форуму"
    -
    -#: flaskbb/management/forms.py:329
    -msgid "Select user groups that can access this forum."
    -msgstr "Выбрать группы пользователей у которых есть доступ к форуму."
    -
    -#: flaskbb/management/forms.py:337
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "Вы не можете преобразовать форум которые содержит темы во внешнюю ссылку."
    -
    -#: flaskbb/management/forms.py:342
    -msgid "You also need to specify some moderators."
    -msgstr "Вы должны назначить модераторов."
    -
    -#: flaskbb/management/forms.py:354
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s не входит в группу модераторов."
    -
    -#: flaskbb/management/forms.py:395
    -msgid "Category Title"
    -msgstr "Называние категории"
    -
    -#: flaskbb/management/forms.py:396
    -msgid "A Category Title is required."
    -msgstr "Требуется названии категории."
    -
    -#: flaskbb/management/forms.py:407
    -msgid "The Category Position is required."
    -msgstr "Требуется позиция категории."
    -
    -#: flaskbb/management/views.py:104
    -msgid "Settings saved."
    -msgstr "Настройки сохранены."
    -
    -#: flaskbb/management/views.py:143
    -msgid "You are not allowed to edit this user."
    -msgstr "Вам запрещено редактировать этого пользователя."
    -
    -#: flaskbb/management/views.py:177
    -msgid "User successfully updated."
    -msgstr "Пользователь обновлен."
    -
    -#: flaskbb/management/views.py:181
    -msgid "Edit User"
    -msgstr "Редактировать пользователя."
    -
    -#: flaskbb/management/views.py:216
    -msgid "You cannot delete yourself."
    -msgstr "Вы не можете удалить себя."
    -
    -#: flaskbb/management/views.py:220
    -msgid "User successfully deleted."
    -msgstr "Пользователь успешно удален."
    -
    -#: flaskbb/management/views.py:230
    -msgid "User successfully added."
    -msgstr "Пользователь успешно добавлен."
    -
    -#: flaskbb/management/views.py:234
    -#: flaskbb/templates/management/banned_users.html:24
    -#: flaskbb/templates/management/user_form.html:24
    -#: flaskbb/templates/management/users.html:24
    -msgid "Add User"
    -msgstr "Добавить пользователя"
    -
    -#: flaskbb/management/views.py:264
    -msgid "You do not have the permissions to ban this user."
    -msgstr "У Вас нет прав заблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:288
    -#: flaskbb/templates/management/banned_users.html:96
    -#: flaskbb/templates/management/users.html:122
    -msgid "Unban"
    -msgstr "Разблокировать"
    -
    -#: flaskbb/management/views.py:306
    -msgid "A moderator cannot ban an admin user."
    -msgstr "Модератор не может заблокировать администратора сайта."
    -
    -#: flaskbb/management/views.py:310
    -msgid "User is now banned."
    -msgstr "Пользователь заблокирован."
    -
    -#: flaskbb/management/views.py:312
    -msgid "Could not ban user."
    -msgstr "Невозможно заблокировать пользователя."
    -
    -#: flaskbb/management/views.py:322
    -msgid "You do not have the permissions to unban this user."
    -msgstr "У Вас нет прав разблокировать этого пользователя."
    -
    -#: flaskbb/management/views.py:337 flaskbb/templates/management/users.html:112
    -msgid "Ban"
    -msgstr "Заблокировать."
    -
    -#: flaskbb/management/views.py:352
    -msgid "User is now unbanned."
    -msgstr "Пользователь разблокирован."
    -
    -#: flaskbb/management/views.py:354
    -msgid "Could not unban user."
    -msgstr "Невозможно разблокировать пользователя."
    -
    -#: flaskbb/management/views.py:415
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "Жалоба %(id)s уже отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:422
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "Жалоба %(id)s отмечена как прочитанная."
    -
    -#: flaskbb/management/views.py:436
    -msgid "All reports were marked as read."
    -msgstr "Все жалобы уже отмечены как прочитанные."
    -
    -#: flaskbb/management/views.py:467
    -msgid "Group successfully updated."
    -msgstr "Группа успешно обновлена."
    -
    -#: flaskbb/management/views.py:471
    -msgid "Edit Group"
    -msgstr "Редактировать группу"
    -
    -#: flaskbb/management/views.py:499
    -msgid "You cannot delete one of the standard groups."
    -msgstr "Вы не можете удалить одну из стандартных групп."
    -
    -#: flaskbb/management/views.py:507
    -msgid "You cannot delete the standard groups. Try renaming them instead."
    -msgstr "Вы не можете удалить стандартную группу. Попробуйте вместо этого переименовать ее."
    -
    -#: flaskbb/management/views.py:513
    -msgid "Group successfully deleted."
    -msgstr "Группа успешно удалена."
    -
    -#: flaskbb/management/views.py:516
    -msgid "No group choosen.."
    -msgstr "Группа не выбрана."
    -
    -#: flaskbb/management/views.py:526
    -msgid "Group successfully added."
    -msgstr "Группа успешно добавлена."
    -
    -#: flaskbb/management/views.py:530
    -#: flaskbb/templates/management/group_form.html:21
    -#: flaskbb/templates/management/groups.html:20
    -msgid "Add Group"
    -msgstr "Добавит группу"
    -
    -#: flaskbb/management/views.py:549
    -msgid "Forum successfully updated."
    -msgstr "Форум успешно обновлен."
    -
    -#: flaskbb/management/views.py:560 flaskbb/templates/management/forums.html:154
    -msgid "Edit Forum"
    -msgstr "Редактирвать форум"
    -
    -#: flaskbb/management/views.py:573
    -msgid "Forum successfully deleted."
    -msgstr "Форум успешно удален."
    -
    -#: flaskbb/management/views.py:585
    -msgid "Forum successfully added."
    -msgstr "Форум успешно добавлен."
    -
    -#: flaskbb/management/views.py:594
    -#: flaskbb/templates/management/category_form.html:21
    -#: flaskbb/templates/management/forum_form.html:21
    -#: flaskbb/templates/management/forums.html:20
    -#: flaskbb/templates/management/forums.html:44
    -msgid "Add Forum"
    -msgstr "Добавить форум"
    -
    -#: flaskbb/management/views.py:604
    -msgid "Category successfully added."
    -msgstr "Категория успешно добавлена."
    -
    -#: flaskbb/management/views.py:608
    -#: flaskbb/templates/management/category_form.html:22
    -#: flaskbb/templates/management/forum_form.html:22
    -#: flaskbb/templates/management/forums.html:21
    -msgid "Add Category"
    -msgstr "Добавит категорию."
    -
    -#: flaskbb/management/views.py:620
    -msgid "Category successfully updated."
    -msgstr "Категория успешно обновлена."
    -
    -#: flaskbb/management/views.py:624 flaskbb/templates/management/forums.html:47
    -msgid "Edit Category"
    -msgstr "Редактировать категорию."
    -
    -#: flaskbb/management/views.py:637
    -msgid "Category with all associated forums deleted."
    -msgstr "Категория со всеми связаными форумами удалена."
    -
    -#: flaskbb/management/views.py:655
    -msgid "Plugin is already enabled."
    -msgstr "Расширение уже включено"
    -
    -#: flaskbb/management/views.py:660
    -#, python-format
    -msgid "Plugin %(plugin)s enabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s включено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:663
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"removing the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте удалить 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:676
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "Расширение %(plugin)s не найдено."
    -
    -#: flaskbb/management/views.py:681
    -#, python-format
    -msgid "Plugin %(plugin)s disabled. Please restart FlaskBB now."
    -msgstr "Расширение %(plugin)s отключено. Пожалуйста перезапустите FlaskBB."
    -
    -#: flaskbb/management/views.py:684
    -msgid ""
    -"It seems that FlaskBB does not have enough filesystem permissions. Try "
    -"creating the 'DISABLED' file by yourself."
    -msgstr "Похоже FlaskBB не хватает прав для удаления файла с диска. Попробуйте создать 'DISABLED' файл вручную."
    -
    -#: flaskbb/management/views.py:699
    -msgid "Plugin has been uninstalled."
    -msgstr "Расширение удалено."
    -
    -#: flaskbb/management/views.py:701
    -msgid "Cannot uninstall Plugin."
    -msgstr "Не могу удалить расширение."
    -
    -#: flaskbb/management/views.py:714
    -msgid "Plugin has been installed."
    -msgstr "Расширение установлено."
    -
    -#: flaskbb/management/views.py:716
    -msgid "Cannot install Plugin."
    -msgstr "Не могу установить расширение."
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "Получатель"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "Тема"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "Тема обязательна."
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:58
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/topic.html:47
    -#: flaskbb/templates/forum/topic_horizontal.html:58
    -#: flaskbb/templates/message/conversation.html:97
    -#: flaskbb/templates/user/profile_layout.html:47
    -msgid "Message"
    -msgstr "Сообщение"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:59
    -msgid "A Message is required."
    -msgstr "Текст сообщения обязательный"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "Начать переписку"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "Сохранить переписку"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "Такого пользователя не существует"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "Вы не можете отправить сообщение сообщение самому себе"
    -
    -#: flaskbb/message/forms.py:60
    -msgid "Send Message"
    -msgstr "Отправить сообщение"
    -
    -#: flaskbb/message/views.py:71 flaskbb/message/views.py:127
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "Вы не можете отправить больше сообщений, потому что Вы достигли своего лимита сообщений."
    -
    -#: flaskbb/message/views.py:144 flaskbb/message/views.py:216
    -msgid "Message saved."
    -msgstr "Сообщение сохранено"
    -
    -#: flaskbb/message/views.py:169 flaskbb/message/views.py:234
    -msgid "Message sent."
    -msgstr "Сообщение отправлено"
    -
    -#: flaskbb/message/views.py:175
    -msgid "Compose Message"
    -msgstr "Написать сообщение"
    -
    -#: flaskbb/message/views.py:202
    -msgid "You cannot edit a sent message."
    -msgstr "Вы не можете редактировать отправленное сообщение."
    -
    -#: flaskbb/message/views.py:242
    -msgid "Edit Message"
    -msgstr "Редактировать сообщение"
    -
    -#: flaskbb/templates/layout.html:74 flaskbb/templates/navigation.html:20
    -#: flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:10
    -#: flaskbb/templates/forum/memberlist.html:36
    -msgid "Memberlist"
    -msgstr "Участники"
    -
    -#: flaskbb/templates/layout.html:103 flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Inbox"
    -msgstr "Входящие"
    -
    -#: flaskbb/templates/layout.html:104 flaskbb/templates/navigation.html:54
    -#: flaskbb/templates/message/message_layout.html:16
    -msgid "New Message"
    -msgstr "Написать"
    -
    -#: flaskbb/templates/layout.html:116 flaskbb/templates/navigation.html:35
    -#: flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:15
    -#: flaskbb/templates/forum/topictracker.html:26
    -msgid "Topic Tracker"
    -msgstr "Отслеживание тем"
    -
    -#: flaskbb/templates/layout.html:119 flaskbb/templates/navigation.html:38
    -#: flaskbb/templates/management/management_layout.html:17
    -#: flaskbb/templates/user/settings_layout.html:8
    -msgid "Settings"
    -msgstr "Настройки"
    -
    -#: flaskbb/templates/layout.html:121 flaskbb/templates/navigation.html:40
    -#: flaskbb/templates/management/banned_users.html:9
    -#: flaskbb/templates/management/category_form.html:9
    -#: flaskbb/templates/management/forum_form.html:9
    -#: flaskbb/templates/management/forums.html:8
    -#: flaskbb/templates/management/group_form.html:9
    -#: flaskbb/templates/management/groups.html:8
    -#: flaskbb/templates/management/overview.html:8
    -#: flaskbb/templates/management/plugins.html:8
    -#: flaskbb/templates/management/reports.html:9
    -#: flaskbb/templates/management/settings.html:8
    -#: flaskbb/templates/management/unread_reports.html:9
    -#: flaskbb/templates/management/user_form.html:9
    -#: flaskbb/templates/management/users.html:9
    -msgid "Management"
    -msgstr "Управление"
    -
    -#: flaskbb/templates/layout.html:125 flaskbb/templates/navigation.html:44
    -msgid "Logout"
    -msgstr "Выход"
    -
    -#: flaskbb/templates/macros.html:325
    -msgid "Pages"
    -msgstr "Страницы"
    -
    -#: flaskbb/templates/navigation.html:53
    -msgid "Private Messages"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/auth/login.html:22
    -msgid "Not a member yet?"
    -msgstr "Еще не зарегистрированы?"
    -
    -#: flaskbb/templates/auth/login.html:23
    -msgid "Forgot Password?"
    -msgstr "Забыли пароль?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "Уважаемый %(user)s"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "Что бы обновить свой пароль пройдите по следующей ссылке:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "С уважением"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "Администрация"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "Нет доступа - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -msgid "Forbidden Page"
    -msgstr "Заблокированная страница"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:10
    -msgid "You do not have the permission to view this page."
    -msgstr "У Вас нет доступа к этой странице"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:11
    -#: flaskbb/templates/errors/page_not_found.html:11
    -msgid "Back to the Forums"
    -msgstr "Назад на форум"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "О нет! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Oops, Page not found!"
    -msgstr "Страница не найдена!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:10
    -msgid "The page you were looking for does not exist."
    -msgstr "Страницы которую вы ищете не существует"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "Ошибка сервера - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:9
    -msgid "Server Error"
    -msgstr "Ошибка сервера"
    -
    -#: flaskbb/templates/errors/server_error.html:10
    -msgid "Something went wrong!"
    -msgstr "Что-то пошло не так но мы работаем над этим!"
    -
    -#: flaskbb/templates/forum/category_layout.html:9
    -#: flaskbb/templates/forum/search_result.html:129
    -#: flaskbb/templates/forum/search_result.html:214
    -#: flaskbb/templates/management/overview.html:85
    -#: flaskbb/templates/user/all_posts.html:28
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile_layout.html:69
    -msgid "Topics"
    -msgstr "Темы"
    -
    -#: flaskbb/templates/forum/category_layout.html:10
    -#: flaskbb/templates/forum/edit_forum.html:32
    -#: flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/memberlist.html:50
    -#: flaskbb/templates/forum/search_result.html:16
    -#: flaskbb/templates/forum/search_result.html:40
    -#: flaskbb/templates/forum/search_result.html:105
    -#: flaskbb/templates/forum/search_result.html:135
    -#: flaskbb/templates/forum/search_result.html:215
    -#: flaskbb/templates/forum/topic.html:44
    -#: flaskbb/templates/forum/topic_horizontal.html:55
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/management/banned_users.html:63
    -#: flaskbb/templates/management/overview.html:88
    -#: flaskbb/templates/management/users.html:63
    -#: flaskbb/templates/message/conversation.html:44
    -#: flaskbb/templates/message/conversation.html:95
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/all_posts.html:34
    -#: flaskbb/templates/user/all_topics.html:34
    -#: flaskbb/templates/user/profile_layout.html:75
    -msgid "Posts"
    -msgstr "Комментарии"
    -
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/edit_forum.html:34
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/search_result.html:137
    -#: flaskbb/templates/forum/search_result.html:216
    -#: flaskbb/templates/forum/topictracker.html:34
    -msgid "Last Post"
    -msgstr "Последний комментарий "
    -
    -#: flaskbb/templates/forum/category_layout.html:27
    -#: flaskbb/templates/forum/search_result.html:232
    -#: flaskbb/templates/management/forums.html:80
    -msgid "Link to"
    -msgstr "Ссылка на"
    -
    -#: flaskbb/templates/forum/category_layout.html:114
    -#: flaskbb/templates/forum/edit_forum.html:68
    -#: flaskbb/templates/forum/edit_forum.html:91
    -#: flaskbb/templates/forum/forum.html:85 flaskbb/templates/forum/forum.html:107
    -#: flaskbb/templates/forum/search_result.html:162
    -#: flaskbb/templates/forum/search_result.html:184
    -#: flaskbb/templates/forum/search_result.html:317
    -#: flaskbb/templates/forum/topictracker.html:68
    -#: flaskbb/templates/forum/topictracker.html:91
    -#: flaskbb/templates/management/plugins.html:42
    -msgid "by"
    -msgstr "от"
    -
    -#: flaskbb/templates/forum/category_layout.html:123
    -#: flaskbb/templates/forum/search_result.html:326
    -msgid "No posts."
    -msgstr "Нет комментариев."
    -
    -#: flaskbb/templates/forum/edit_forum.html:33
    -#: flaskbb/templates/forum/forum.html:51
    -#: flaskbb/templates/forum/search_result.html:136
    -#: flaskbb/templates/forum/topictracker.html:33
    -msgid "Views"
    -msgstr "Просмотры"
    -
    -#: flaskbb/templates/forum/edit_forum.html:107
    -#: flaskbb/templates/forum/forum.html:120
    -#: flaskbb/templates/forum/topictracker.html:107
    -msgid "No Topics."
    -msgstr "Нет тем."
    -
    -#: flaskbb/templates/forum/edit_forum.html:117
    -msgid "Back"
    -msgstr "Назад"
    -
    -#: flaskbb/templates/forum/edit_forum.html:128
    -msgid "Lock"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:131
    -msgid "Unlock"
    -msgstr "Открыть"
    -
    -#: flaskbb/templates/forum/edit_forum.html:137
    -msgid "Highlight"
    -msgstr "Закрепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:140
    -msgid "Trivialize"
    -msgstr "Открепить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:145
    -#: flaskbb/templates/management/groups.html:64
    -#: flaskbb/templates/management/users.html:132
    -msgid "Delete"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/forum/edit_forum.html:158
    -msgid "Move to..."
    -msgstr "Переместить в ... "
    -
    -#: flaskbb/templates/forum/edit_forum.html:165
    -msgid "Move"
    -msgstr "Переместить"
    -
    -#: flaskbb/templates/forum/forum.html:25
    -#: flaskbb/templates/management/unread_reports.html:50
    -#: flaskbb/templates/management/unread_reports.html:69
    -msgid "Mark as Read"
    -msgstr "Отметить как прочитанные"
    -
    -#: flaskbb/templates/forum/forum.html:31
    -#: flaskbb/templates/forum/topic_controls.html:97
    -msgid "Locked"
    -msgstr "Закрыт"
    -
    -#: flaskbb/templates/forum/forum.html:35
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:13
    -#: flaskbb/templates/forum/new_topic.html:21
    -msgid "New Topic"
    -msgstr "Новая тема"
    -
    -#: flaskbb/templates/forum/forum.html:130
    -msgid "Moderation Mode"
    -msgstr "Режим модерации"
    -
    -#: flaskbb/templates/forum/index.html:11
    -msgid "Board Statistics"
    -msgstr "Статистика форума"
    -
    -#: flaskbb/templates/forum/index.html:12
    -msgid "Who is online?"
    -msgstr "Кто на форуме?"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Total number of registered users"
    -msgstr "Количество зарегистрированных пользователей"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Total number of topics"
    -msgstr "Количество тем"
    -
    -#: flaskbb/templates/forum/index.html:19
    -msgid "Total number of posts"
    -msgstr "Количество комментариев"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "Newest registered user"
    -msgstr "Последний зарегистрированный пользователь"
    -
    -#: flaskbb/templates/forum/index.html:22
    -msgid "No users"
    -msgstr "Нет пользователей"
    -
    -#: flaskbb/templates/forum/index.html:23
    -msgid "Registered users online"
    -msgstr "Зарегистрированных пользователей на сайте"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Guests online"
    -msgstr "Гостей на сайте"
    -
    -#: flaskbb/templates/forum/memberlist.html:46
    -#: flaskbb/templates/forum/search_result.html:106
    -#: flaskbb/templates/management/banned_users.html:64
    -#: flaskbb/templates/management/users.html:64
    -msgid "Date registered"
    -msgstr "Дата регистрация"
    -
    -#: flaskbb/templates/forum/memberlist.html:48
    -#: flaskbb/templates/forum/search_result.html:107
    -#: flaskbb/templates/management/banned_users.html:65
    -#: flaskbb/templates/management/users.html:65
    -msgid "Group"
    -msgstr "Группа"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:14
    -#: flaskbb/templates/forum/new_post.html:21
    -msgid "New Post"
    -msgstr "Новый комментарий"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:15
    -#: flaskbb/templates/management/overview.html:76
    -msgid "Online Users"
    -msgstr "Пользователи на форуме"
    -
    -#: flaskbb/templates/forum/report_post.html:20
    -msgid "Report"
    -msgstr "Пожаловаться"
    -
    -#: flaskbb/templates/forum/report_post.html:21
    -msgid "Close"
    -msgstr "Закрыть"
    -
    -#: flaskbb/templates/forum/search_result.html:39
    -#: flaskbb/templates/forum/topic.html:43
    -#: flaskbb/templates/forum/topic_horizontal.html:54
    -#: flaskbb/templates/message/conversation.html:43
    -#: flaskbb/templates/message/conversation.html:94
    -msgid "Joined"
    -msgstr "Присоединившиеся"
    -
    -#: flaskbb/templates/forum/search_result.html:54
    -#: flaskbb/templates/forum/topic.html:58
    -#: flaskbb/templates/message/conversation.html:106
    -msgid "Guest"
    -msgstr "Гость"
    -
    -#: flaskbb/templates/forum/search_result.html:89
    -msgid "No posts found matching your search criteria."
    -msgstr "Не найдено комментариев в соответсвии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/management/banned_users.html:104
    -#: flaskbb/templates/management/users.html:140
    -msgid "No users found matching your search criteria."
    -msgstr "Не найдено пользователей в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:197
    -msgid "No topics found matching your search criteria."
    -msgstr "Не найдено тем в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/search_result.html:335
    -msgid "No forums found matching your search criteria."
    -msgstr "Не найдено форумов в соответствии с этим критерием"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#: flaskbb/templates/forum/topic_horizontal.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - Тема"
    -
    -#: flaskbb/templates/forum/topic_controls.html:15
    -msgid "Moderate"
    -msgstr "Модерировать"
    -
    -#: flaskbb/templates/forum/topic_controls.html:24
    -msgid "Delete Topic"
    -msgstr "Удалить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Lock Topic"
    -msgstr "Закрыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Unlock Topic"
    -msgstr "Открыть тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:56
    -msgid "Highlight Topic"
    -msgstr "Закрепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:65
    -msgid "Trivialize Topic"
    -msgstr "Открепить тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:80
    -msgid "Untrack Topic"
    -msgstr "Не отслеживать тему"
    -
    -#: flaskbb/templates/forum/topic_controls.html:87
    -msgid "Track Topic"
    -msgstr "Отслеживать тему"
    -
    -#: flaskbb/templates/forum/topictracker.html:117
    -msgid "Untrack Topics"
    -msgstr "Не отслеживать темы"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:21
    -#: flaskbb/templates/management/banned_users.html:34
    -#: flaskbb/templates/management/overview.html:79
    -#: flaskbb/templates/management/user_form.html:21
    -#: flaskbb/templates/management/users.html:21
    -msgid "Banned Users"
    -msgstr "Заблокированные пользователи"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/user_form.html:20
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "Управлять пользователями"
    -
    -#: flaskbb/templates/management/banned_users.html:70
    -#: flaskbb/templates/management/groups.html:39
    -#: flaskbb/templates/management/unread_reports.html:45
    -#: flaskbb/templates/management/users.html:69
    -msgid "Actions"
    -msgstr "Действия"
    -
    -#: flaskbb/templates/management/banned_users.html:74
    -#: flaskbb/templates/management/users.html:79
    -msgid "Are you sure you want to unban these Users?"
    -msgstr "Вы уверены что вы хотите разблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/banned_users.html:75
    -#: flaskbb/templates/management/users.html:80
    -msgid "Unban selected Users"
    -msgstr "Разблокировать пользователей"
    -
    -#: flaskbb/templates/management/category_form.html:20
    -#: flaskbb/templates/management/forum_form.html:20
    -#: flaskbb/templates/management/forums.html:19
    -#: flaskbb/templates/management/forums.html:30
    -msgid "Manage Forums"
    -msgstr "Управлять форумами"
    -
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/management_layout.html:19
    -msgid "Forums"
    -msgstr "Форумы"
    -
    -#: flaskbb/templates/management/forums.html:52
    -msgid "Delete Category"
    -msgstr "Удалить категорию"
    -
    -#: flaskbb/templates/management/forums.html:63
    -msgid "Topics / Posts"
    -msgstr "Темы / Комментарии"
    -
    -#: flaskbb/templates/management/forums.html:100
    -msgid "Edit Link"
    -msgstr "Редактировать ссылку"
    -
    -#: flaskbb/templates/management/forums.html:105
    -msgid "Delete Link"
    -msgstr "Удалить ссылку"
    -
    -#: flaskbb/templates/management/forums.html:159
    -msgid "Delete Forum"
    -msgstr "Удалить форум"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/group_form.html:20
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:19
    -msgid "Manage Groups"
    -msgstr "Редактировать группы"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/groups.html:28
    -#: flaskbb/templates/management/management_layout.html:18
    -#: flaskbb/templates/management/overview.html:82
    -msgid "Groups"
    -msgstr "Группы"
    -
    -#: flaskbb/templates/management/groups.html:43
    -msgid "Are you sure you want to delete these Groups?"
    -msgstr "Вы уверены что хотите удалить эти группы?"
    -
    -#: flaskbb/templates/management/groups.html:44
    -msgid "Delete selected Groups"
    -msgstr "Удалить группы"
    -
    -#: flaskbb/templates/management/groups.html:59
    -#: flaskbb/templates/management/users.html:103
    -msgid "Edit"
    -msgstr "Редактировать"
    -
    -#: flaskbb/templates/management/groups.html:71
    -msgid "No groups found."
    -msgstr "Группы не найдены."
    -
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:1
    -#: flaskbb/templates/management/overview.html:16
    -#: flaskbb/templates/user/all_posts.html:16
    -#: flaskbb/templates/user/all_topics.html:16
    -#: flaskbb/templates/user/profile_layout.html:57
    -msgid "Overview"
    -msgstr "Обзор"
    -
    -#: flaskbb/templates/management/management_layout.html:14
    -#: flaskbb/templates/management/overview.html:91
    -#: flaskbb/templates/management/reports.html:1
    -#: flaskbb/templates/management/reports.html:10
    -msgid "Reports"
    -msgstr "Жалобы"
    -
    -#: flaskbb/templates/management/management_layout.html:20
    -#: flaskbb/templates/management/overview.html:115
    -#: flaskbb/templates/management/plugins.html:1
    -#: flaskbb/templates/management/plugins.html:9
    -msgid "Plugins"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/overview.html:25
    -msgid "Everything seems alright."
    -msgstr "Похоже все нормально."
    -
    -#: flaskbb/templates/management/overview.html:26
    -msgid "No new notifications."
    -msgstr "Новых оповещений нет."
    -
    -#: flaskbb/templates/management/overview.html:38
    -msgid "users"
    -msgstr "пользователи"
    -
    -#: flaskbb/templates/management/overview.html:50
    -msgid "posts"
    -msgstr "комментарии"
    -
    -#: flaskbb/templates/management/overview.html:62
    -msgid "topics"
    -msgstr "темы"
    -
    -#: flaskbb/templates/management/overview.html:70
    -msgid "Statistics"
    -msgstr "Статистика"
    -
    -#: flaskbb/templates/management/overview.html:73
    -msgid "Registered Users"
    -msgstr "Зарегистрированные пользователи"
    -
    -#: flaskbb/templates/management/overview.html:96
    -msgid "Components"
    -msgstr "Компоненты"
    -
    -#: flaskbb/templates/management/plugins.html:19
    -msgid "Manage Plugins"
    -msgstr "Управление расширениями"
    -
    -#: flaskbb/templates/management/plugins.html:25
    -msgid "Plugin"
    -msgstr "Расширения"
    -
    -#: flaskbb/templates/management/plugins.html:26
    -msgid "Information"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/management/plugins.html:27
    -msgid "Manage"
    -msgstr "Управлять"
    -
    -#: flaskbb/templates/management/plugins.html:40
    -msgid "Version"
    -msgstr "Версия"
    -
    -#: flaskbb/templates/management/plugins.html:48
    -msgid "Enable"
    -msgstr "Включить"
    -
    -#: flaskbb/templates/management/plugins.html:53
    -msgid "Disable"
    -msgstr "Выключить"
    -
    -#: flaskbb/templates/management/plugins.html:60
    -msgid "Install"
    -msgstr "Установить"
    -
    -#: flaskbb/templates/management/plugins.html:66
    -msgid "Uninstall"
    -msgstr "Удалить"
    -
    -#: flaskbb/templates/management/reports.html:21
    -#: flaskbb/templates/management/unread_reports.html:21
    -msgid "Show unread reports"
    -msgstr "Показать непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/reports.html:22
    -#: flaskbb/templates/management/unread_reports.html:22
    -msgid "Show all reports"
    -msgstr "Показать все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:31
    -msgid "All Reports"
    -msgstr "Все жалобы"
    -
    -#: flaskbb/templates/management/reports.html:37
    -#: flaskbb/templates/management/unread_reports.html:37
    -msgid "Poster"
    -msgstr "Комментатор"
    -
    -#: flaskbb/templates/management/reports.html:40
    -#: flaskbb/templates/management/unread_reports.html:40
    -msgid "Reporter"
    -msgstr "Сообщивший"
    -
    -#: flaskbb/templates/management/reports.html:41
    -#: flaskbb/templates/management/unread_reports.html:41
    -msgid "Reported"
    -msgstr "Сообщено"
    -
    -#: flaskbb/templates/management/reports.html:54
    -#: flaskbb/templates/management/unread_reports.html:76
    -msgid "No unread reports."
    -msgstr "Непрочитанных жалоб нет."
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:31
    -msgid "Unread Reports"
    -msgstr "Непрочитанные жалобы"
    -
    -#: flaskbb/templates/management/unread_reports.html:49
    -msgid "Are you sure you want to mark these Reports as read?"
    -msgstr "Вы уверены что Вы хотите отметить все жалобы как непрочитанные?"
    -
    -#: flaskbb/templates/management/users.html:73
    -msgid "Are you sure you want to ban these Users?"
    -msgstr "Вы уверены что Вы хотите заблокировать этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:74
    -msgid "Ban selected Users"
    -msgstr "Заблокировать пользователей"
    -
    -#: flaskbb/templates/management/users.html:85
    -msgid "Are you sure you want to delete these Users?"
    -msgstr "Вы уверены что Вы хотите удалить этих пользователей?"
    -
    -#: flaskbb/templates/management/users.html:86
    -msgid "Delete selected Users"
    -msgstr "Удалить пользователей"
    -
    -#: flaskbb/templates/message/conversation.html:105
    -msgid "Deleted"
    -msgstr "Удаленные"
    -
    -#: flaskbb/templates/message/conversation_list.html:6
    -msgid "Conversations"
    -msgstr "Переписки"
    -
    -#: flaskbb/templates/message/conversation_list.html:88
    -msgid "No conversations found."
    -msgstr "Переписок не найдено"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:20
    -msgid "Drafts"
    -msgstr "Черновики"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "Личные сообщения"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -msgid "Sent"
    -msgstr "Исходящие"
    -
    -#: flaskbb/templates/message/message_layout.html:21
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "Корзина"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "Отправленные сообщения"
    -
    -#: flaskbb/templates/user/all_posts.html:65
    -msgid "The user has not written any posts yet."
    -msgstr "Пользователь не написал ни одного комментария."
    -
    -#: flaskbb/templates/user/all_topics.html:67
    -msgid "The user has not opened any topics yet."
    -msgstr "Пользователь не начал ни одной темы."
    -
    -#: flaskbb/templates/user/change_email.html:7
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "Изменить адрес эл. почты"
    -
    -#: flaskbb/templates/user/change_password.html:7
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "Изменить пароль"
    -
    -#: flaskbb/templates/user/change_user_details.html:8
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "Изменить настройки пользователя"
    -
    -#: flaskbb/templates/user/general_settings.html:7
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "Общие настройки"
    -
    -#: flaskbb/templates/user/profile.html:19
    -msgid "Info"
    -msgstr "Информация"
    -
    -#: flaskbb/templates/user/profile.html:25
    -msgid "User has not added any notes about him."
    -msgstr "Пользователь не добавил комментарий о себе"
    -
    -#: flaskbb/templates/user/profile.html:34
    -msgid "Signature"
    -msgstr "Подпись"
    -
    -#: flaskbb/templates/user/profile_layout.html:27
    -msgid "Never seen"
    -msgstr "Никогда не видели"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "Настройки учетной записи"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "Тема"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "Старый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "Новый адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "Адреса эл. почты должны совпадать"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "Подтвердите адрес эл. почты"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "Текущий пароль"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "Требуется пароль"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "Подтвердите новый пароль"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "Неверный текущий пароль"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "Настройки обновлены"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "Пароль обновлен."
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "Адрес эл. почты обновлен"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "Детальная информация обновлена."
    -
    -#: flaskbb/utils/helpers.py:79
    -msgid "You do not have the permissions to execute this action."
    -msgstr "У Вас нет прав для этого действия."
    -
    -
    -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    deleted file mode 100644
    index 378697ee..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_CN/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1608 +0,0 @@
    -# Chinese (Simplified, China) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: https://github.com/flaskbb\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-15 10:53+0800\n"
    -"Language-Team: FlaskBB in zh_Hans_CN\n"
    -"Plural-Forms: nplurals=2; plural=(n != 1);\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -"Last-Translator: ZHOU JIAHUI \n"
    -"Language: zh\n"
    -"X-Generator: Poedit 1.8.1\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "密码重置"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "您只能使用字母、数字与短划线"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "用户名或邮箱地址"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "请输入用户名或邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密码"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "请输入密码。"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "记住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登录"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "用户名"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "请输入用户名。"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "邮箱地址"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "请输入邮箱地址"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "不正确的邮箱地址"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "两次输入的密码不一致。"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "校验密码"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我同意并遵守服务条例"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1 flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "注册"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "该用户名已被使用。"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "该邮箱已被使用。"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "验证码"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登录"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "请输入邮箱地址。"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "请求重置密码"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密码"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "错误的邮箱地址"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "错误的用户名或密码。"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "重新认证身份。"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感谢您的注册。"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "邮件已发送至您的邮箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with your "
    -"account."
    -msgstr "您输入的邮箱没有关联至您的账户。"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的令牌已不合法。"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "你的令牌已过期。"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密码已被更新。"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回复"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34 flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能发表一个空的回复。"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54 flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "内容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "关注该主题"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "预览"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "标题"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "请输入一个标题"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "发表主题"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "您为何报告这个主题?"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "报告主题"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89 flaskbb/forum/forms.py:104
    -#: flaskbb/templates/layout.html:50 flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜索"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "条件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "回复"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主题"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6 flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "论坛"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "用户"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您没有权限创建一个新主题。"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "你没有权限删除该主题。"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您没有权限锁上该主题。"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您没有权限解锁该主题。"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您没有权限高亮该主题。"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您没有权限去高亮该主题。"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您没有权限移动该主题。"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "无法将本主题移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "本主题已被移动至 %(title)s。"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您没有权限合并该主题。"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "无法合并主题。"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "主题已被成功合并。"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您没有权限回复该主题。"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您没有权限编辑本条回复。"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您没有权限删除本条回复。"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "感谢您的报告。"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "论坛 %(forum)s 已被标记为已读。"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "所有论坛已被标记为已读。"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性别"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "网站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "头像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "签名"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "个人说明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主用户组"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要用户组"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "保存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "用户组名"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "请输入用户组名。"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "描述"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "管理员组?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "勾上本选项后本群用户能够访问管理员面板。"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "超级版主组?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "勾上本选项后本群用户能够管理所有论坛。"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "版主组?"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified forums."
    -msgstr "勾上本选项后本群用户能够管理特定的论坛。"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "禁止用户组?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只允许存在一个禁止用户组。"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "来宾组?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只允许存在一个来宾用户组。"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "能编辑回复"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "勾上本选项后本群用户可以编辑回复。"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "能删除回复"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "勾上本选项后本群用户可以删除回复。"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "能删除主题"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "勾上本选项后本群用户可以删除主题。"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "能创建主题"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "能创建回复"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "勾上本选项后本群用户可以创建回复。"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "版主能够修改用户资料"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and email "
    -"changes."
    -msgstr "允许版主能够编辑其他用户的资料(包括密码和邮箱地址)"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "版主能够禁止用户"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允许版主能够禁止其他用户。"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "该用户组名已被使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已存在禁止用户组了。"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已存在来宾用户组。"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "论坛标题"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "请输入论坛标题。"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以使用 BBCode 来格式化您的描述。"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "先后位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "请输入一个先后位置。"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "分类"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "该论坛将位与此分类之下。"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部链接"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "链接到外部的网站(例:’http://flaskbb.org')。"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "版主"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "使用逗号来分割用户。如果您不想设置版主的话留空即可。"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "展示版主"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在主页上显示版主?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "加锁?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "在该论坛禁止发表新主题与回复。"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "请选择可以访问本论坛的用户组。"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您不能改变一个主题包含外部链接的论坛。"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定版主。"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "用户 %(user)s 不在版主组里。"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "分类标题"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "请输入分类标题。"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "请输入分类的先后位置。"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "设置已被保存。"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您没有权限编辑该用户。"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "用户信息已被成功更新。"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "编辑用户。"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "删除用户成功。"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "添加用户成功。"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "添加用户"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您没有权限禁止该用户。"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "一个版主无法禁止一个管理员。"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "该用户已被禁止。"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "无法禁止该用户。"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您没有权限恢复该用户。"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "该用户已被恢复。"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "无法恢复该用户。"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "报告 %(id)s 已被标记为已读。"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "报告 %(id)s 被标记为已读。"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "所有报告被标记为已读。"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "成功更新用户组信息。"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "编辑用户组"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "删除用户组成功。"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "添加用户组成功。"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "添加用户组"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "成功更新论坛信息。"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "编辑论坛"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "删除论坛成功。"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "添加论坛成功。"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "添加论坛"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "添加分类成功。"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "添加分类"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "成功更新分类信息。"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "编辑分类"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "该分类与所有相关联的论坛已被删除。"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "插件启用成功。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "插件已被启用。请重新载入您的应用。"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己删除 "
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "无法启用插件。"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "没有找到此插件:%(plugin)s。"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "插件已被禁用。请重新载入您的引用。"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this won't "
    -"work - than you need to create a 'DISABLED' file by yourself."
    -msgstr ""
    -"如果您部署的环境无法写入磁盘,那么刚才的设置不会起作用——您需要自己创建"
    -"「DISABLED」文件。"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "插件已被卸载。"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "无法卸载插件。"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "插件已被安装。"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "无法安装插件。"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "给用户"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主题"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "请输入主题"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "消息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "请输入消息。"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "新建会话"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "保存会话"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您输入的用户不存在。"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您无法给自己发送私人消息。"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "发送消息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message limit."
    -msgstr "由于您超出了限额,因此您将无法继续发送任何消息。"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "消息已被保存。"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "消息已被发送。"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "撰写消息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您无法编辑一条已被发送的消息。"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "编辑消息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "用户列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "设置"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "注销"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新消息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "页面"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "还未注册?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘记密码?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "亲爱的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "点击该链接来重置您的密码:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真诚的"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理人员"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "无法访问 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的页面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr "您没有权限访问该页面。"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "返回论坛。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "没有该页面 - 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "没有找到用户 %(moderator)s。"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您查找的页面不存在。"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr ""
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "服务器报告了一个错误。"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主题"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "回复量"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最后的回复"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "来自"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "暂无回复。"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "标记为已读。"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "锁定"
    -
    -#: flaskbb/templates/forum/forum.html:33 flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新建主题"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "浏览"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "没有主题"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "论坛统计"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "谁在线上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "所有注册用户数量"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "所有主题数量"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "所有回复数量"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新注册用户"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "暂无用户"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "在线注册用户"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "在线来宾用户"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "注册日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新建回复"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "在线用户"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "报告"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "关闭"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "注册于"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "来宾用户"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "没有找到符合条件的回复。"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "没有找到符合条件的用户。"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "没有找到符合条件的主题。"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "论坛"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "没有找到符合条件的论坛。"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主题"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最后修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "编辑"
    -
    -#: flaskbb/templates/forum/topic.html:131 flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "删除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "不再关注"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "关注主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "删除主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "锁上主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解锁主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "高亮主题"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "普通化主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "关注的主题"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "暂无主题。"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "被禁止的用户"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理员"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "恢复"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理论坛"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "能够访问本论坛的用户组。"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理用户组"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "用户组"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概况"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "报告"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "全局统计"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr ""
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理插件"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "插件"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "信息"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "启用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "禁用"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安装"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "卸载"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "显示未读报告"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "显示所有报告"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有报告"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回复者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "报告者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已被报告"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "还没有报告。"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未读报告"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "将所有标记为已读。"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "没有未读的报告。"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "所有会话"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "未找到任何会话。"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿箱"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "私人消息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "发件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "废纸篓"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "发送消息"
    -
    -#: flaskbb/templates/user/all_posts.html:8 flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有回复"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "所有回复由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主题"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "所有主题由 %(user)s 创建"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "修改邮箱"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "修改密码"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "修改用户信息"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "通用设置"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "信息"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "用户状态"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "该用户没有添加关于他的备注。"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入于"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最后上线于"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "从未上线"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最后发表回复"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "从未"
    -
    -#: flaskbb/templates/user/profile.html:74 flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "没有信息"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "账户设置"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "语言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主题"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原邮箱地址"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新邮箱地址"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "两次输入的邮箱不一致。"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "校对邮箱地址"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密码"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "请输入密码"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "校对密码"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密码错误。"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "设置更新成功。"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "密码修改成功。"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "邮箱更新成功。"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "更新用户信息成功。"
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po b/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    deleted file mode 100644
    index b8e31d78..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/translations/zh_TW/LC_MESSAGES/messages.po
    +++ /dev/null
    @@ -1,1615 +0,0 @@
    -# Chinese (Traditional, Taiwan) translations for PROJECT.
    -# Copyright (C) 2015 ORGANIZATION
    -# This file is distributed under the same license as the PROJECT project.
    -# FIRST AUTHOR , 2015.
    -#
    -#, fuzzy
    -msgid ""
    -msgstr ""
    -"Project-Id-Version: 0.1-dev\n"
    -"Report-Msgid-Bugs-To: http://github.com/flaskbb/issues\n"
    -"POT-Creation-Date: 2015-07-14 22:49+0800\n"
    -"PO-Revision-Date: 2015-07-16 15:04+0800\n"
    -"Last-Translator: Sean Chen \n"
    -"Language-Team: zh_Hant_TW \n"
    -"Plural-Forms: nplurals=2; plural=(n != 1)\n"
    -"MIME-Version: 1.0\n"
    -"Content-Type: text/plain; charset=utf-8\n"
    -"Content-Transfer-Encoding: 8bit\n"
    -"Generated-By: Babel 1.3\n"
    -
    -#: flaskbb/email.py:20
    -msgid "Password Reset"
    -msgstr "重設密碼"
    -
    -#: flaskbb/auth/forms.py:24 flaskbb/management/forms.py:37
    -msgid "You can only use letters, numbers or dashes."
    -msgstr "你只可以使用英文字母、數字或短橫線"
    -
    -#: flaskbb/auth/forms.py:28
    -msgid "Username or E-Mail Address"
    -msgstr "使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:29
    -msgid "A Username or E-Mail Address is required."
    -msgstr "請輸入使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:32 flaskbb/auth/forms.py:49 flaskbb/auth/forms.py:83
    -#: flaskbb/auth/forms.py:104 flaskbb/user/forms.py:67
    -msgid "Password"
    -msgstr "密碼"
    -
    -#: flaskbb/auth/forms.py:33 flaskbb/auth/forms.py:84
    -msgid "A Password is required."
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/auth/forms.py:35
    -msgid "Remember Me"
    -msgstr "記住我"
    -
    -#: flaskbb/auth/forms.py:37 flaskbb/templates/layout.html:89
    -#: flaskbb/templates/auth/login.html:1 flaskbb/templates/auth/login.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:90
    -#: flaskbb/themes/bootstrap3/templates/layout.html:89
    -msgid "Login"
    -msgstr "登入"
    -
    -#: flaskbb/auth/forms.py:41 flaskbb/management/forms.py:55
    -#: flaskbb/templates/forum/memberlist.html:31
    -#: flaskbb/templates/forum/search_result.html:83
    -#: flaskbb/templates/management/banned_users.html:41
    -#: flaskbb/templates/management/users.html:41
    -msgid "Username"
    -msgstr "使用者名稱"
    -
    -#: flaskbb/auth/forms.py:42 flaskbb/management/forms.py:56
    -#: flaskbb/message/forms.py:23
    -msgid "A Username is required."
    -msgstr "請輸入使用者名稱"
    -
    -#: flaskbb/auth/forms.py:45 flaskbb/auth/forms.py:90 flaskbb/auth/forms.py:100
    -#: flaskbb/management/forms.py:59
    -msgid "E-Mail Address"
    -msgstr "電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:46 flaskbb/auth/forms.py:101
    -#: flaskbb/management/forms.py:60 flaskbb/user/forms.py:37
    -msgid "A E-Mail Address is required."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:47 flaskbb/management/forms.py:61
    -#: flaskbb/user/forms.py:38 flaskbb/user/forms.py:43 flaskbb/user/forms.py:46
    -msgid "Invalid E-Mail Address."
    -msgstr "無效的電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:51 flaskbb/auth/forms.py:106 flaskbb/user/forms.py:69
    -msgid "Passwords must match."
    -msgstr "輸入的密碼不一致"
    -
    -#: flaskbb/auth/forms.py:53 flaskbb/auth/forms.py:108
    -msgid "Confirm Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/auth/forms.py:55
    -msgid "I accept the Terms of Service"
    -msgstr "我接受服務條款"
    -
    -#: flaskbb/auth/forms.py:57 flaskbb/templates/layout.html:95
    -#: flaskbb/templates/auth/register.html:1
    -#: flaskbb/templates/auth/register.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:96
    -#: flaskbb/themes/bootstrap3/templates/layout.html:95
    -msgid "Register"
    -msgstr "註冊"
    -
    -#: flaskbb/auth/forms.py:62 flaskbb/management/forms.py:116
    -msgid "This Username is already taken."
    -msgstr "使用者名稱已使用"
    -
    -#: flaskbb/auth/forms.py:67 flaskbb/management/forms.py:130
    -#: flaskbb/user/forms.py:60
    -msgid "This E-Mail Address is already taken."
    -msgstr "電子郵件帳號已使用"
    -
    -#: flaskbb/auth/forms.py:79
    -msgid "Captcha"
    -msgstr "驗證碼"
    -
    -#: flaskbb/auth/forms.py:86 flaskbb/templates/auth/reauth.html:1
    -#: flaskbb/templates/auth/reauth.html:9
    -msgid "Refresh Login"
    -msgstr "重新登入"
    -
    -#: flaskbb/auth/forms.py:91
    -msgid "A E-Mail Address is reguired."
    -msgstr "請輸入電子郵件帳號"
    -
    -#: flaskbb/auth/forms.py:94 flaskbb/templates/auth/forgot_password.html:1
    -msgid "Request Password"
    -msgstr "取得密碼"
    -
    -#: flaskbb/auth/forms.py:110 flaskbb/templates/layout.html:96
    -#: flaskbb/templates/auth/forgot_password.html:8
    -#: flaskbb/templates/auth/reset_password.html:1
    -#: flaskbb/templates/auth/reset_password.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:97
    -#: flaskbb/themes/bootstrap3/templates/layout.html:96
    -msgid "Reset Password"
    -msgstr "重置密碼"
    -
    -#: flaskbb/auth/forms.py:115
    -msgid "Wrong E-Mail Address."
    -msgstr "電子郵件帳號錯誤"
    -
    -#: flaskbb/auth/views.py:45
    -msgid "Wrong Username or Password."
    -msgstr "使用者名稱或密碼錯誤"
    -
    -#: flaskbb/auth/views.py:60
    -msgid "Reauthenticated."
    -msgstr "已重新驗證"
    -
    -#: flaskbb/auth/views.py:96
    -msgid "Thanks for registering."
    -msgstr "感謝註冊"
    -
    -#: flaskbb/auth/views.py:118
    -msgid "E-Mail sent! Please check your inbox."
    -msgstr "已寄出電子郵件!請確認您的信箱"
    -
    -#: flaskbb/auth/views.py:121
    -msgid ""
    -"You have entered a Username or E-Mail Address that is not linked with "
    -"your account."
    -msgstr "您輸入了未連結到您的帳號的使用者名稱或電子郵件帳號"
    -
    -#: flaskbb/auth/views.py:141
    -msgid "Your Password Token is invalid."
    -msgstr "您的重置密碼記號已失效"
    -
    -#: flaskbb/auth/views.py:145
    -msgid "Your Password Token is expired."
    -msgstr "您的重置密碼記號已過期"
    -
    -#: flaskbb/auth/views.py:151
    -msgid "Your Password has been updated."
    -msgstr "您的密碼已更新"
    -
    -#: flaskbb/forum/forms.py:22
    -msgid "Quick Reply"
    -msgstr "快速回文"
    -
    -#: flaskbb/forum/forms.py:23 flaskbb/forum/forms.py:34
    -#: flaskbb/forum/forms.py:55
    -msgid "You cannot post a reply without content."
    -msgstr "您不能發表空白的回文"
    -
    -#: flaskbb/forum/forms.py:25 flaskbb/forum/forms.py:39
    -#: flaskbb/templates/forum/topic.html:146
    -#: flaskbb/templates/forum/topic_controls.html:25
    -msgid "Reply"
    -msgstr "回文"
    -
    -#: flaskbb/forum/forms.py:33 flaskbb/forum/forms.py:54
    -#: flaskbb/forum/forms.py:100
    -msgid "Content"
    -msgstr "內容"
    -
    -#: flaskbb/forum/forms.py:36 flaskbb/forum/forms.py:57
    -msgid "Track this Topic"
    -msgstr "追蹤這個主題"
    -
    -#: flaskbb/forum/forms.py:40 flaskbb/forum/forms.py:61
    -#: flaskbb/templates/forum/new_post.html:28
    -#: flaskbb/templates/forum/new_topic.html:27
    -msgid "Preview"
    -msgstr "預覽"
    -
    -#: flaskbb/forum/forms.py:51
    -msgid "Topic Title"
    -msgstr "標題"
    -
    -#: flaskbb/forum/forms.py:52
    -msgid "Please choose a Topic Title."
    -msgstr "請選擇一個標題"
    -
    -#: flaskbb/forum/forms.py:60
    -msgid "Post Topic"
    -msgstr "發表文章"
    -
    -#: flaskbb/forum/forms.py:73 flaskbb/templates/management/reports.html:29
    -#: flaskbb/templates/management/unread_reports.html:29
    -msgid "Reason"
    -msgstr "原因"
    -
    -#: flaskbb/forum/forms.py:74
    -msgid "What's the reason for reporting this post?"
    -msgstr "為什麼要舉報這篇文章"
    -
    -#: flaskbb/forum/forms.py:77 flaskbb/templates/forum/report_post.html:1
    -#: flaskbb/templates/forum/report_post.html:13
    -msgid "Report Post"
    -msgstr "舉報文章"
    -
    -#: flaskbb/forum/forms.py:85 flaskbb/forum/forms.py:89
    -#: flaskbb/forum/forms.py:104 flaskbb/templates/layout.html:50
    -#: flaskbb/templates/forum/memberlist.html:21
    -#: flaskbb/templates/forum/search_form.html:1
    -#: flaskbb/templates/forum/search_form.html:9
    -#: flaskbb/templates/forum/search_form.html:13
    -#: flaskbb/templates/forum/search_result.html:1
    -#: flaskbb/templates/forum/search_result.html:9
    -#: flaskbb/templates/management/banned_users.html:31
    -#: flaskbb/templates/management/users.html:31
    -#: flaskbb/themes/bootstrap2/templates/layout.html:51
    -#: flaskbb/themes/bootstrap3/templates/layout.html:50
    -msgid "Search"
    -msgstr "搜尋"
    -
    -#: flaskbb/forum/forms.py:97
    -msgid "Criteria"
    -msgstr "搜尋條件"
    -
    -#: flaskbb/forum/forms.py:101
    -msgid "Post"
    -msgstr "文章"
    -
    -#: flaskbb/forum/forms.py:101 flaskbb/templates/forum/forum.html:50
    -#: flaskbb/templates/forum/search_result.html:113
    -#: flaskbb/templates/forum/topictracker.html:28
    -#: flaskbb/templates/management/reports.html:27
    -#: flaskbb/templates/management/unread_reports.html:27
    -#: flaskbb/templates/user/all_topics.html:26
    -msgid "Topic"
    -msgstr "主題"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/layout.html:48
    -#: flaskbb/templates/forum/category.html:8
    -#: flaskbb/templates/forum/category_layout.html:11
    -#: flaskbb/templates/forum/forum.html:9 flaskbb/templates/forum/index.html:5
    -#: flaskbb/templates/forum/memberlist.html:8
    -#: flaskbb/templates/forum/new_post.html:15
    -#: flaskbb/templates/forum/new_topic.html:15
    -#: flaskbb/templates/forum/search_form.html:8
    -#: flaskbb/templates/forum/search_result.html:8
    -#: flaskbb/templates/forum/search_result.html:185
    -#: flaskbb/templates/forum/topic.html:14
    -#: flaskbb/templates/forum/topictracker.html:9
    -#: flaskbb/templates/management/forums.html:38
    -#: flaskbb/templates/message/message_layout.html:6
    -#: flaskbb/templates/user/all_posts.html:6
    -#: flaskbb/templates/user/all_topics.html:6
    -#: flaskbb/templates/user/profile.html:4
    -#: flaskbb/templates/user/settings_layout.html:6
    -#: flaskbb/themes/bootstrap2/templates/layout.html:49
    -#: flaskbb/themes/bootstrap3/templates/layout.html:48
    -msgid "Forum"
    -msgstr "論壇"
    -
    -#: flaskbb/forum/forms.py:102 flaskbb/templates/forum/search_result.html:77
    -#: flaskbb/templates/management/management_layout.html:12
    -#: flaskbb/templates/management/overview.html:29
    -#: flaskbb/templates/management/users.html:1
    -msgid "Users"
    -msgstr "使用者"
    -
    -#: flaskbb/forum/views.py:160
    -msgid "You do not have the permissions to create a new topic."
    -msgstr "您沒有權限發表一個新的主題"
    -
    -#: flaskbb/forum/views.py:189
    -msgid "You do not have the permissions to delete this topic."
    -msgstr "您沒有權限刪除這個主題"
    -
    -#: flaskbb/forum/views.py:208
    -msgid "You do not have the permissions to lock this topic."
    -msgstr "您沒有權限鎖定這個主題"
    -
    -#: flaskbb/forum/views.py:227
    -msgid "You do not have the permissions to unlock this topic."
    -msgstr "您沒有權限解鎖這個主題"
    -
    -#: flaskbb/forum/views.py:243
    -msgid "You do not have the permissions to highlight this topic."
    -msgstr "您沒有權限強調這個主題"
    -
    -#: flaskbb/forum/views.py:260
    -msgid "You do not have the permissions to trivialize this topic."
    -msgstr "您沒有權限取消強調這個主題"
    -
    -#: flaskbb/forum/views.py:282
    -msgid "You do not have the permissions to move this topic."
    -msgstr "您沒有權限移動這個主題"
    -
    -#: flaskbb/forum/views.py:287
    -#, python-format
    -msgid "Could not move the topic to forum %(title)s."
    -msgstr "無法移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:291
    -#, python-format
    -msgid "Topic was moved to forum %(title)s."
    -msgstr "已移動主題至 %(title)s"
    -
    -#: flaskbb/forum/views.py:310
    -msgid "You do not have the permissions to merge this topic."
    -msgstr "您沒有權限合併這個主題"
    -
    -#: flaskbb/forum/views.py:315
    -msgid "Could not merge the topics."
    -msgstr "無法合併主題"
    -
    -#: flaskbb/forum/views.py:318
    -msgid "Topics succesfully merged."
    -msgstr "已成功合併主題"
    -
    -#: flaskbb/forum/views.py:329 flaskbb/forum/views.py:356
    -msgid "You do not have the permissions to post in this topic."
    -msgstr "您沒有權限回覆這個主題"
    -
    -#: flaskbb/forum/views.py:382
    -msgid "You do not have the permissions to edit this post."
    -msgstr "您沒有權限編輯這篇文章"
    -
    -#: flaskbb/forum/views.py:412
    -msgid "You do not have the permissions to delete this post."
    -msgstr "您沒有權限刪除這篇文章"
    -
    -#: flaskbb/forum/views.py:436
    -msgid "Thanks for reporting."
    -msgstr "謝謝您的舉報"
    -
    -#: flaskbb/forum/views.py:473
    -#, python-format
    -msgid "Forum %(forum)s marked as read."
    -msgstr "%(forum)s 論壇已經標記為已讀"
    -
    -#: flaskbb/forum/views.py:495
    -msgid "All forums marked as read."
    -msgstr "全部論壇已標記為已讀"
    -
    -#: flaskbb/management/forms.py:66 flaskbb/templates/user/profile.html:77
    -#: flaskbb/user/forms.py:81
    -msgid "Birthday"
    -msgstr "生日"
    -
    -#: flaskbb/management/forms.py:70 flaskbb/user/forms.py:85
    -msgid "Gender"
    -msgstr "性別"
    -
    -#: flaskbb/management/forms.py:72 flaskbb/user/forms.py:87
    -msgid "Male"
    -msgstr "男"
    -
    -#: flaskbb/management/forms.py:73 flaskbb/user/forms.py:88
    -msgid "Female"
    -msgstr "女"
    -
    -#: flaskbb/management/forms.py:75 flaskbb/templates/user/profile.html:73
    -#: flaskbb/user/forms.py:90
    -msgid "Location"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:78 flaskbb/templates/forum/topic.html:114
    -#: flaskbb/user/forms.py:93
    -msgid "Website"
    -msgstr "網站"
    -
    -#: flaskbb/management/forms.py:81 flaskbb/user/forms.py:96
    -msgid "Avatar"
    -msgstr "頭像"
    -
    -#: flaskbb/management/forms.py:84 flaskbb/user/forms.py:99
    -msgid "Forum Signature"
    -msgstr "簽名檔"
    -
    -#: flaskbb/management/forms.py:87 flaskbb/user/forms.py:102
    -msgid "Notes"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:91
    -msgid "Primary Group"
    -msgstr "主要群組"
    -
    -#: flaskbb/management/forms.py:96
    -msgid "Secondary Groups"
    -msgstr "次要群組"
    -
    -#: flaskbb/management/forms.py:102 flaskbb/management/forms.py:212
    -#: flaskbb/management/forms.py:328 flaskbb/management/forms.py:434
    -#: flaskbb/templates/management/settings.html:39 flaskbb/user/forms.py:32
    -#: flaskbb/user/forms.py:48 flaskbb/user/forms.py:73 flaskbb/user/forms.py:105
    -msgid "Save"
    -msgstr "儲存"
    -
    -#: flaskbb/management/forms.py:149 flaskbb/templates/management/groups.html:25
    -msgid "Group Name"
    -msgstr "群組名稱"
    -
    -#: flaskbb/management/forms.py:150
    -msgid "A Group name is required."
    -msgstr "請輸入群組名稱"
    -
    -#: flaskbb/management/forms.py:152 flaskbb/management/forms.py:279
    -#: flaskbb/management/forms.py:422 flaskbb/templates/management/groups.html:26
    -msgid "Description"
    -msgstr "說明"
    -
    -#: flaskbb/management/forms.py:156
    -msgid "Is Admin Group?"
    -msgstr "是否為管理者群組?"
    -
    -#: flaskbb/management/forms.py:157
    -msgid "With this option the group has access to the admin panel."
    -msgstr "選擇這個選項讓這個群組可使用管理者功能"
    -
    -#: flaskbb/management/forms.py:161
    -msgid "Is Super Moderator Group?"
    -msgstr "是否為超級協調者群組?"
    -
    -#: flaskbb/management/forms.py:162
    -msgid "Check this if the users in this group are allowed to moderate every forum."
    -msgstr "選擇這個選項讓此群組中的使用者可管理每個論壇"
    -
    -#: flaskbb/management/forms.py:166
    -msgid "Is Moderator Group?"
    -msgstr "是否為協調者群組"
    -
    -#: flaskbb/management/forms.py:167
    -msgid ""
    -"Check this if the users in this group are allowed to moderate specified "
    -"forums."
    -msgstr "選擇這個選項讓此群組中的使用者可管理特定的論壇"
    -
    -#: flaskbb/management/forms.py:171
    -msgid "Is Banned Group?"
    -msgstr "是否為禁止群組?"
    -
    -#: flaskbb/management/forms.py:172
    -msgid "Only one Banned group is allowed."
    -msgstr "只可選擇一個禁止群組"
    -
    -#: flaskbb/management/forms.py:175
    -msgid "Is Guest Group?"
    -msgstr "是否為遊客群組?"
    -
    -#: flaskbb/management/forms.py:176
    -msgid "Only one Guest group is allowed."
    -msgstr "只可選擇一個遊客群組"
    -
    -#: flaskbb/management/forms.py:179
    -msgid "Can edit posts"
    -msgstr "可編輯文章"
    -
    -#: flaskbb/management/forms.py:180
    -msgid "Check this if the users in this group can edit posts."
    -msgstr "選擇這個選項讓此群組中的使用者可編輯文章"
    -
    -#: flaskbb/management/forms.py:183
    -msgid "Can delete posts"
    -msgstr "可刪除文章"
    -
    -#: flaskbb/management/forms.py:184
    -msgid "Check this is the users in this group can delete posts."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除文章"
    -
    -#: flaskbb/management/forms.py:187
    -msgid "Can delete topics"
    -msgstr "可刪除主題"
    -
    -#: flaskbb/management/forms.py:188
    -msgid "Check this is the users in this group can delete topics."
    -msgstr "選擇這個選項讓此群組中的使用者可刪除主題"
    -
    -#: flaskbb/management/forms.py:192
    -msgid "Can create topics"
    -msgstr "可新增主題"
    -
    -#: flaskbb/management/forms.py:193
    -msgid "Check this is the users in this group can create topics."
    -msgstr "選擇這個選項讓此群組中的使用者可新增主題"
    -
    -#: flaskbb/management/forms.py:197
    -msgid "Can post replies"
    -msgstr "可發表回覆"
    -
    -#: flaskbb/management/forms.py:198
    -msgid "Check this is the users in this group can post replies."
    -msgstr "選擇這個選項讓此群組中的使用者可發表回覆"
    -
    -#: flaskbb/management/forms.py:202
    -msgid "Moderators can edit user profiles"
    -msgstr "協調者可編輯使用者檔案"
    -
    -#: flaskbb/management/forms.py:203
    -msgid ""
    -"Allow moderators to edit a another users profile including password and "
    -"email changes."
    -msgstr "允許協調者可編輯其他使用者檔案,包含密碼與電子郵件"
    -
    -#: flaskbb/management/forms.py:208
    -msgid "Moderators can ban users"
    -msgstr "協調者可禁止使用者"
    -
    -#: flaskbb/management/forms.py:209
    -msgid "Allow moderators to ban other users."
    -msgstr "允許協調者可禁止其他使用者"
    -
    -#: flaskbb/management/forms.py:226
    -msgid "This Group name is already taken."
    -msgstr "群組名稱已使用"
    -
    -#: flaskbb/management/forms.py:240
    -msgid "There is already a Banned group."
    -msgstr "已有一個禁止群組"
    -
    -#: flaskbb/management/forms.py:254
    -msgid "There is already a Guest group."
    -msgstr "已有一個遊客群組"
    -
    -#: flaskbb/management/forms.py:274
    -msgid "Forum Title"
    -msgstr "論壇標題"
    -
    -#: flaskbb/management/forms.py:275
    -msgid "A Forum Title is required."
    -msgstr "請輸入論壇標題"
    -
    -#: flaskbb/management/forms.py:281 flaskbb/management/forms.py:424
    -msgid "You can format your description with BBCode."
    -msgstr "您可以用 BBCode 編輯您的說明"
    -
    -#: flaskbb/management/forms.py:285 flaskbb/management/forms.py:428
    -msgid "Position"
    -msgstr "位置"
    -
    -#: flaskbb/management/forms.py:287
    -msgid "The Forum Position is required."
    -msgstr "請選擇論壇所在ㄙ位置"
    -
    -#: flaskbb/management/forms.py:291
    -msgid "Category"
    -msgstr "類別"
    -
    -#: flaskbb/management/forms.py:295
    -msgid "The category that contains this forum."
    -msgstr "論壇的類別"
    -
    -#: flaskbb/management/forms.py:299
    -msgid "External Link"
    -msgstr "外部連結"
    -
    -#: flaskbb/management/forms.py:301
    -msgid "A link to a website i.e. 'http://flaskbb.org'."
    -msgstr "網站連結 如:'http://flaskbb.org'"
    -
    -#: flaskbb/management/forms.py:305
    -#: flaskbb/templates/forum/category_layout.html:60
    -#: flaskbb/templates/forum/search_result.html:233
    -msgid "Moderators"
    -msgstr "協調者"
    -
    -#: flaskbb/management/forms.py:306
    -msgid ""
    -"Comma seperated usernames. Leave it blank if you do not want to set any "
    -"moderators."
    -msgstr "用逗號分開使用者名稱。如果您不想設定任何協調者請留空白"
    -
    -#: flaskbb/management/forms.py:311
    -msgid "Show Moderators"
    -msgstr "顯示協調者"
    -
    -#: flaskbb/management/forms.py:312
    -msgid "Do you want show the moderators on the index page?"
    -msgstr "您是否想在首頁顯示協調者?"
    -
    -#: flaskbb/management/forms.py:316
    -msgid "Locked?"
    -msgstr "鎖定?"
    -
    -#: flaskbb/management/forms.py:317
    -msgid "Disable new posts and topics in this forum."
    -msgstr "此論壇禁止所有新文章與主題"
    -
    -#: flaskbb/management/forms.py:321
    -msgid "Group Access to Forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/management/forms.py:325
    -msgid "Select user groups that can access this forum."
    -msgstr "選擇可使用此論壇的使用者群組"
    -
    -#: flaskbb/management/forms.py:333
    -msgid "You cannot convert a forum that contain topics in a external link."
    -msgstr "您無法將包含主題的論壇轉換成外部連結"
    -
    -#: flaskbb/management/forms.py:338
    -msgid "You also need to specify some moderators."
    -msgstr "您需要指定幾位協調者"
    -
    -#: flaskbb/management/forms.py:359
    -#, python-format
    -msgid "%(user)s is not in a moderators group."
    -msgstr "%(user)s 不屬於協調者群組"
    -
    -#: flaskbb/management/forms.py:365
    -#, python-format
    -msgid "User %(moderator)s not found."
    -msgstr "使用者 %(moderator)s 不存在"
    -
    -#: flaskbb/management/forms.py:418
    -msgid "Category Title"
    -msgstr "類別標題"
    -
    -#: flaskbb/management/forms.py:419
    -msgid "A Category Title is required."
    -msgstr "請輸入類別標題"
    -
    -#: flaskbb/management/forms.py:430
    -msgid "The Category Position is required."
    -msgstr "請選擇類別所在位置"
    -
    -#: flaskbb/management/views.py:85
    -msgid "Settings saved."
    -msgstr "設定已儲存"
    -
    -#: flaskbb/management/views.py:124
    -msgid "You are not allowed to edit this user."
    -msgstr "您沒有權限編輯這個使用者"
    -
    -#: flaskbb/management/views.py:144
    -msgid "User successfully updated."
    -msgstr "已成功更新使用者"
    -
    -#: flaskbb/management/views.py:148
    -msgid "Edit User"
    -msgstr "編輯使用者"
    -
    -#: flaskbb/management/views.py:156
    -msgid "User successfully deleted."
    -msgstr "已成功刪除使用者"
    -
    -#: flaskbb/management/views.py:166
    -msgid "User successfully added."
    -msgstr "已成功新增使用者"
    -
    -#: flaskbb/management/views.py:170
    -#: flaskbb/templates/management/banned_users.html:14
    -#: flaskbb/templates/management/user_form.html:14
    -#: flaskbb/templates/management/users.html:14
    -msgid "Add User"
    -msgstr "新增使用者"
    -
    -#: flaskbb/management/views.py:199
    -msgid "You do not have the permissions to ban this user."
    -msgstr "您沒有權限禁止此使用者"
    -
    -#: flaskbb/management/views.py:209
    -msgid "A moderator cannot ban an admin user."
    -msgstr "協調者不能禁止管理者"
    -
    -#: flaskbb/management/views.py:213
    -msgid "User is now banned."
    -msgstr "已禁止此使用者"
    -
    -#: flaskbb/management/views.py:215
    -msgid "Could not ban user."
    -msgstr "不能禁止此使用者"
    -
    -#: flaskbb/management/views.py:224
    -msgid "You do not have the permissions to unban this user."
    -msgstr "您沒有權限取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:231
    -msgid "User is now unbanned."
    -msgstr "已取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:233
    -msgid "Could not unban user."
    -msgstr "不能取消禁止此使用者"
    -
    -#: flaskbb/management/views.py:271
    -#, python-format
    -msgid "Report %(id)s is already marked as read."
    -msgstr "舉報 %(id)s 已標記為已讀"
    -
    -#: flaskbb/management/views.py:278
    -#, python-format
    -msgid "Report %(id)s marked as read."
    -msgstr "舉報 %(id)s 標記為已讀"
    -
    -#: flaskbb/management/views.py:292
    -msgid "All reports were marked as read."
    -msgstr "全部舉報已標記為已讀"
    -
    -#: flaskbb/management/views.py:323
    -msgid "Group successfully updated."
    -msgstr "已成功更新群組"
    -
    -#: flaskbb/management/views.py:327
    -msgid "Edit Group"
    -msgstr "編輯群組"
    -
    -#: flaskbb/management/views.py:335
    -msgid "Group successfully deleted."
    -msgstr "已成功刪除群組"
    -
    -#: flaskbb/management/views.py:345
    -msgid "Group successfully added."
    -msgstr "已成功新增群組"
    -
    -#: flaskbb/management/views.py:349
    -#: flaskbb/templates/management/group_form.html:11
    -#: flaskbb/templates/management/groups.html:10
    -msgid "Add Group"
    -msgstr "新增群組"
    -
    -#: flaskbb/management/views.py:368
    -msgid "Forum successfully updated."
    -msgstr "已成功更新論壇"
    -
    -#: flaskbb/management/views.py:379
    -msgid "Edit Forum"
    -msgstr "編輯論壇"
    -
    -#: flaskbb/management/views.py:392
    -msgid "Forum successfully deleted."
    -msgstr "已成功刪除論壇"
    -
    -#: flaskbb/management/views.py:404
    -msgid "Forum successfully added."
    -msgstr "已成功新增論壇"
    -
    -#: flaskbb/management/views.py:413
    -#: flaskbb/templates/management/category_form.html:11
    -#: flaskbb/templates/management/forum_form.html:11
    -#: flaskbb/templates/management/forums.html:10
    -#: flaskbb/templates/management/forums.html:27
    -msgid "Add Forum"
    -msgstr "新增論壇"
    -
    -#: flaskbb/management/views.py:423
    -msgid "Category successfully added."
    -msgstr "已成功新增類別"
    -
    -#: flaskbb/management/views.py:427
    -#: flaskbb/templates/management/category_form.html:12
    -#: flaskbb/templates/management/forum_form.html:12
    -#: flaskbb/templates/management/forums.html:11
    -msgid "Add Category"
    -msgstr "新增類別"
    -
    -#: flaskbb/management/views.py:439
    -msgid "Category successfully updated."
    -msgstr "已成功更新類別"
    -
    -#: flaskbb/management/views.py:443
    -msgid "Edit Category"
    -msgstr "編輯類別"
    -
    -#: flaskbb/management/views.py:456
    -msgid "Category with all associated forums deleted."
    -msgstr "已刪除類別與所有相關論壇"
    -
    -#: flaskbb/management/views.py:483
    -msgid "Plugin is enabled. Please reload your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:486
    -msgid "Plugin is already enabled. Please reload  your app."
    -msgstr "外掛已啟用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:490
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to delete the 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:495
    -msgid "Couldn't enable Plugin."
    -msgstr "無法啟用外掛"
    -
    -#: flaskbb/management/views.py:506
    -#, python-format
    -msgid "Plugin %(plugin)s not found."
    -msgstr "外掛 %(plugin)s 不存在"
    -
    -#: flaskbb/management/views.py:518
    -msgid "Plugin is disabled. Please reload your app."
    -msgstr "外掛已停用。請重新啟動應用程式"
    -
    -#: flaskbb/management/views.py:521
    -msgid ""
    -"If you are using a host which doesn't support writting on the disk, this "
    -"won't work - than you need to create a 'DISABLED' file by yourself."
    -msgstr "如果您使用的主機不支援寫入至磁碟,則此功能無法使用,您必須自行刪除 'DISABLED' 檔案"
    -
    -#: flaskbb/management/views.py:536
    -msgid "Plugin has been uninstalled."
    -msgstr "外掛已移除"
    -
    -#: flaskbb/management/views.py:538
    -msgid "Cannot uninstall Plugin."
    -msgstr "無法移除外掛"
    -
    -#: flaskbb/management/views.py:551
    -msgid "Plugin has been installed."
    -msgstr "外掛已安裝"
    -
    -#: flaskbb/management/views.py:553
    -msgid "Cannot install Plugin."
    -msgstr "無法安裝外掛"
    -
    -#: flaskbb/message/forms.py:22
    -msgid "To User"
    -msgstr "收件者"
    -
    -#: flaskbb/message/forms.py:25
    -msgid "Subject"
    -msgstr "主題"
    -
    -#: flaskbb/message/forms.py:26
    -msgid "A Subject is required."
    -msgstr "請輸入主題"
    -
    -#: flaskbb/message/forms.py:28 flaskbb/message/forms.py:57
    -msgid "Message"
    -msgstr "訊息"
    -
    -#: flaskbb/message/forms.py:29 flaskbb/message/forms.py:58
    -msgid "A Message is required."
    -msgstr "請輸入訊息"
    -
    -#: flaskbb/message/forms.py:31
    -msgid "Start Conversation"
    -msgstr "開始對話"
    -
    -#: flaskbb/message/forms.py:32
    -msgid "Save Conversation"
    -msgstr "儲存對話"
    -
    -#: flaskbb/message/forms.py:37
    -msgid "The Username you entered doesn't exist"
    -msgstr "您輸入的使用者不存在"
    -
    -#: flaskbb/message/forms.py:39
    -msgid "You cannot send a PM to yourself."
    -msgstr "您無法發送訊息給自己"
    -
    -#: flaskbb/message/forms.py:59
    -msgid "Send Message"
    -msgstr "發送訊息"
    -
    -#: flaskbb/message/views.py:70 flaskbb/message/views.py:126
    -msgid ""
    -"You cannot send any messages anymore because you havereached your message"
    -" limit."
    -msgstr "您無法發送任何訊息,因為您的訊息已達到上限"
    -
    -#: flaskbb/message/views.py:143 flaskbb/message/views.py:214
    -msgid "Message saved."
    -msgstr "訊息已儲存"
    -
    -#: flaskbb/message/views.py:167 flaskbb/message/views.py:232
    -msgid "Message sent."
    -msgstr "訊息已送出"
    -
    -#: flaskbb/message/views.py:173
    -msgid "Compose Message"
    -msgstr "編寫訊息"
    -
    -#: flaskbb/message/views.py:200
    -msgid "You cannot edit a sent message."
    -msgstr "您無法編輯一個已送出的訊息"
    -
    -#: flaskbb/message/views.py:240
    -msgid "Edit Message"
    -msgstr "編輯訊息"
    -
    -#: flaskbb/templates/layout.html:49 flaskbb/templates/forum/memberlist.html:1
    -#: flaskbb/templates/forum/memberlist.html:9
    -#: flaskbb/themes/bootstrap2/templates/layout.html:50
    -#: flaskbb/themes/bootstrap3/templates/layout.html:49
    -msgid "Memberlist"
    -msgstr "使用者列表"
    -
    -#: flaskbb/templates/layout.html:64 flaskbb/templates/forum/topictracker.html:1
    -#: flaskbb/templates/forum/topictracker.html:22
    -#: flaskbb/themes/bootstrap2/templates/layout.html:65
    -#: flaskbb/themes/bootstrap3/templates/layout.html:64
    -msgid "Topic Tracker"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/layout.html:67
    -#: flaskbb/templates/management/management_layout.html:16
    -#: flaskbb/templates/user/settings_layout.html:8
    -#: flaskbb/themes/bootstrap2/templates/layout.html:68
    -#: flaskbb/themes/bootstrap3/templates/layout.html:67
    -msgid "Settings"
    -msgstr "設定"
    -
    -#: flaskbb/templates/layout.html:69 flaskbb/templates/management/forums.html:39
    -#: flaskbb/themes/bootstrap2/templates/layout.html:70
    -#: flaskbb/themes/bootstrap3/templates/layout.html:69
    -msgid "Management"
    -msgstr "管理"
    -
    -#: flaskbb/templates/layout.html:73
    -#: flaskbb/themes/bootstrap2/templates/layout.html:74
    -#: flaskbb/themes/bootstrap3/templates/layout.html:73
    -msgid "Logout"
    -msgstr "登出"
    -
    -#: flaskbb/templates/layout.html:82
    -msgid "Private Messages"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/layout.html:83
    -#: flaskbb/themes/bootstrap2/templates/layout.html:84
    -#: flaskbb/themes/bootstrap3/templates/layout.html:83
    -msgid "New Message"
    -msgstr "新訊息"
    -
    -#: flaskbb/templates/macros.html:313
    -msgid "Pages"
    -msgstr "頁"
    -
    -#: flaskbb/templates/auth/login.html:18
    -msgid "Not a member yet?"
    -msgstr "還不是使用者?"
    -
    -#: flaskbb/templates/auth/login.html:19
    -msgid "Forgot Password?"
    -msgstr "忘記密碼?"
    -
    -#: flaskbb/templates/email/reset_password.html:1
    -#, python-format
    -msgid "Dear %(user)s,"
    -msgstr "親愛的 %(user)s,"
    -
    -#: flaskbb/templates/email/reset_password.html:2
    -msgid "To reset your password click on the following link:"
    -msgstr "點擊下面的連結來重設您的密碼:"
    -
    -#: flaskbb/templates/email/reset_password.html:4
    -msgid "Sincerely,"
    -msgstr "真誠地,"
    -
    -#: flaskbb/templates/email/reset_password.html:5
    -msgid "The Administration"
    -msgstr "管理團隊"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:1
    -msgid "No Access - 403"
    -msgstr "無法使用 - 403"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:7
    -msgid "Forbidden Page"
    -msgstr "被禁止的頁面"
    -
    -#: flaskbb/templates/errors/forbidden_page.html:8
    -msgid "You do not have the permission to view this page."
    -msgstr ""
    -
    -#: flaskbb/templates/errors/forbidden_page.html:9
    -#: flaskbb/templates/errors/page_not_found.html:9
    -msgid "Back to the Forums"
    -msgstr "回到論壇"
    -
    -#: flaskbb/templates/errors/page_not_found.html:1
    -msgid "Oh noes! 404"
    -msgstr "找不到頁面! 404"
    -
    -#: flaskbb/templates/errors/page_not_found.html:7
    -msgid "Oops, Page not found!"
    -msgstr "糟糕,找不到頁面!"
    -
    -#: flaskbb/templates/errors/page_not_found.html:8
    -msgid "The page you were looking for does not exist."
    -msgstr "您找尋的頁面不存在"
    -
    -#: flaskbb/templates/errors/server_error.html:1
    -msgid "Server Error - 500"
    -msgstr "伺服器錯誤 - 500"
    -
    -#: flaskbb/templates/errors/server_error.html:7
    -msgid "Server Error"
    -msgstr "伺服器錯誤"
    -
    -#: flaskbb/templates/errors/server_error.html:8
    -msgid "Something went wrong!"
    -msgstr "發生錯誤!"
    -
    -#: flaskbb/templates/forum/category_layout.html:12
    -#: flaskbb/templates/forum/search_result.html:108
    -#: flaskbb/templates/forum/search_result.html:186
    -#: flaskbb/templates/management/overview.html:23
    -msgid "Topics"
    -msgstr "主題數"
    -
    -#: flaskbb/templates/forum/category_layout.html:13
    -#: flaskbb/templates/forum/forum.html:52
    -#: flaskbb/templates/forum/memberlist.html:32
    -#: flaskbb/templates/forum/search_result.html:13
    -#: flaskbb/templates/forum/search_result.html:43
    -#: flaskbb/templates/forum/search_result.html:84
    -#: flaskbb/templates/forum/search_result.html:115
    -#: flaskbb/templates/forum/search_result.html:187
    -#: flaskbb/templates/forum/topic.html:75
    -#: flaskbb/templates/forum/topictracker.html:30
    -#: flaskbb/templates/management/banned_users.html:42
    -#: flaskbb/templates/management/overview.html:17
    -#: flaskbb/templates/management/users.html:42
    -#: flaskbb/templates/user/all_topics.html:28
    -#: flaskbb/templates/user/profile.html:56
    -msgid "Posts"
    -msgstr "文章數"
    -
    -#: flaskbb/templates/forum/category_layout.html:14
    -#: flaskbb/templates/forum/forum.html:56
    -#: flaskbb/templates/forum/search_result.html:119
    -#: flaskbb/templates/forum/search_result.html:188
    -#: flaskbb/templates/forum/topictracker.html:34
    -#: flaskbb/templates/user/all_topics.html:32
    -msgid "Last Post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/forum/category_layout.html:80
    -#: flaskbb/templates/forum/forum.html:86 flaskbb/templates/forum/forum.html:105
    -#: flaskbb/templates/forum/search_result.html:142
    -#: flaskbb/templates/forum/search_result.html:161
    -#: flaskbb/templates/forum/search_result.html:253
    -#: flaskbb/templates/forum/topic.html:40
    -#: flaskbb/templates/forum/topictracker.html:52
    -#: flaskbb/templates/forum/topictracker.html:70
    -#: flaskbb/templates/management/plugins.html:30
    -#: flaskbb/templates/user/all_topics.html:42
    -#: flaskbb/templates/user/all_topics.html:60
    -msgid "by"
    -msgstr "由"
    -
    -#: flaskbb/templates/forum/category_layout.html:88
    -#: flaskbb/templates/forum/search_result.html:261
    -#: flaskbb/templates/user/all_posts.html:40
    -msgid "No posts."
    -msgstr "無文章"
    -
    -#: flaskbb/templates/forum/forum.html:23
    -#: flaskbb/templates/management/unread_reports.html:51
    -msgid "Mark as Read"
    -msgstr "標示為已讀"
    -
    -#: flaskbb/templates/forum/forum.html:29
    -msgid "Locked"
    -msgstr "鎖定"
    -
    -#: flaskbb/templates/forum/forum.html:33
    -#: flaskbb/templates/forum/new_topic.html:1
    -#: flaskbb/templates/forum/new_topic.html:17
    -#: flaskbb/templates/forum/new_topic.html:22
    -msgid "New Topic"
    -msgstr "新主題"
    -
    -#: flaskbb/templates/forum/forum.html:54
    -#: flaskbb/templates/forum/search_result.html:117
    -#: flaskbb/templates/forum/topictracker.html:32
    -#: flaskbb/templates/user/all_topics.html:30
    -msgid "Views"
    -msgstr "閱覽數"
    -
    -#: flaskbb/templates/forum/forum.html:117
    -msgid "No Topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/forum/index.html:17
    -msgid "Board Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/forum/index.html:18
    -msgid "Who is online?"
    -msgstr "誰在線上?"
    -
    -#: flaskbb/templates/forum/index.html:25
    -msgid "Total number of registered users"
    -msgstr "註冊使用者總數"
    -
    -#: flaskbb/templates/forum/index.html:26
    -msgid "Total number of topics"
    -msgstr "主題總數"
    -
    -#: flaskbb/templates/forum/index.html:27
    -msgid "Total number of posts"
    -msgstr "文章總數"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "Newest registered user"
    -msgstr "最新註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:30
    -msgid "No users"
    -msgstr "無使用者"
    -
    -#: flaskbb/templates/forum/index.html:31
    -msgid "Registered users online"
    -msgstr "線上註冊使用者"
    -
    -#: flaskbb/templates/forum/index.html:33
    -msgid "Guests online"
    -msgstr "線上遊客"
    -
    -#: flaskbb/templates/forum/memberlist.html:33
    -#: flaskbb/templates/forum/search_result.html:85
    -#: flaskbb/templates/management/banned_users.html:43
    -#: flaskbb/templates/management/users.html:43
    -msgid "Date registered"
    -msgstr "註冊日期"
    -
    -#: flaskbb/templates/forum/memberlist.html:34
    -#: flaskbb/templates/forum/search_result.html:86
    -#: flaskbb/templates/management/banned_users.html:44
    -#: flaskbb/templates/management/users.html:44
    -#: flaskbb/templates/user/profile.html:48
    -msgid "Group"
    -msgstr "群組"
    -
    -#: flaskbb/templates/forum/new_post.html:1
    -#: flaskbb/templates/forum/new_post.html:18
    -#: flaskbb/templates/forum/new_post.html:23
    -msgid "New Post"
    -msgstr "新增文章"
    -
    -#: flaskbb/templates/forum/online_users.html:1
    -#: flaskbb/templates/forum/online_users.html:10
    -msgid "Online Users"
    -msgstr "線上使用者"
    -
    -#: flaskbb/templates/forum/report_post.html:17
    -#: flaskbb/templates/forum/topic.html:121
    -msgid "Report"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/forum/report_post.html:18
    -msgid "Close"
    -msgstr "關閉"
    -
    -#: flaskbb/templates/forum/search_result.html:44
    -#: flaskbb/templates/forum/topic.html:76
    -msgid "Registered since"
    -msgstr "註冊於"
    -
    -#: flaskbb/templates/forum/search_result.html:50
    -#: flaskbb/templates/forum/topic.html:82
    -msgid "Guest"
    -msgstr "遊客"
    -
    -#: flaskbb/templates/forum/search_result.html:69
    -msgid "No posts found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合文章"
    -
    -#: flaskbb/templates/forum/search_result.html:100
    -#: flaskbb/templates/management/banned_users.html:68
    -#: flaskbb/templates/management/users.html:86
    -msgid "No users found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合使用者"
    -
    -#: flaskbb/templates/forum/search_result.html:172
    -msgid "No topics found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合主題"
    -
    -#: flaskbb/templates/forum/search_result.html:180
    -#: flaskbb/templates/management/forums.html:1
    -#: flaskbb/templates/management/management_layout.html:18
    -msgid "Forums"
    -msgstr "論壇"
    -
    -#: flaskbb/templates/forum/search_result.html:269
    -msgid "No forums found matching your search criteria."
    -msgstr "您輸入的搜尋條件未發現符合論壇"
    -
    -#: flaskbb/templates/forum/topic.html:2
    -#, python-format
    -msgid "%(title)s - Topic"
    -msgstr "%(title)s - 主題"
    -
    -#: flaskbb/templates/forum/topic.html:40
    -msgid "Last modified"
    -msgstr "最後修改"
    -
    -#: flaskbb/templates/forum/topic.html:111
    -msgid "PM"
    -msgstr "發送訊息"
    -
    -#: flaskbb/templates/forum/topic.html:125
    -#: flaskbb/templates/management/forums.html:28
    -#: flaskbb/templates/management/forums.html:59
    -#: flaskbb/templates/management/groups.html:37
    -#: flaskbb/templates/management/users.html:58
    -msgid "Edit"
    -msgstr "編輯"
    -
    -#: flaskbb/templates/forum/topic.html:131
    -#: flaskbb/templates/forum/topic.html:138
    -#: flaskbb/templates/management/forums.html:31
    -#: flaskbb/templates/management/forums.html:62
    -#: flaskbb/templates/management/groups.html:40
    -#: flaskbb/templates/management/users.html:78
    -msgid "Delete"
    -msgstr "刪除"
    -
    -#: flaskbb/templates/forum/topic.html:144
    -msgid "Quote"
    -msgstr "引用"
    -
    -#: flaskbb/templates/forum/topic_controls.html:11
    -msgid "Untrack Topic"
    -msgstr "取消追蹤"
    -
    -#: flaskbb/templates/forum/topic_controls.html:18
    -msgid "Track Topic"
    -msgstr "追蹤主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:36
    -msgid "Delete Topic"
    -msgstr "刪除主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:45
    -msgid "Lock Topic"
    -msgstr "鎖定主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:52
    -msgid "Unlock Topic"
    -msgstr "解鎖主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:61
    -msgid "Highlight Topic"
    -msgstr "強調主題"
    -
    -#: flaskbb/templates/forum/topic_controls.html:68
    -msgid "Trivialize Topic"
    -msgstr "取消強調"
    -
    -#: flaskbb/templates/forum/topictracker.html:10
    -msgid "Tracked Topics"
    -msgstr "追蹤的主題"
    -
    -#: flaskbb/templates/forum/topictracker.html:82
    -#: flaskbb/templates/user/all_topics.html:72
    -msgid "No topics."
    -msgstr "無主題"
    -
    -#: flaskbb/templates/management/banned_users.html:1
    -#: flaskbb/templates/management/banned_users.html:11
    -#: flaskbb/templates/management/banned_users.html:20
    -#: flaskbb/templates/management/user_form.html:11
    -#: flaskbb/templates/management/users.html:11
    -msgid "Banned Users"
    -msgstr "禁止的使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:10
    -#: flaskbb/templates/management/user_form.html:10
    -#: flaskbb/templates/management/users.html:10
    -#: flaskbb/templates/management/users.html:20
    -msgid "Manage Users"
    -msgstr "管理使用者"
    -
    -#: flaskbb/templates/management/banned_users.html:45
    -#: flaskbb/templates/management/groups.html:27
    -#: flaskbb/templates/management/plugins.html:14
    -#: flaskbb/templates/management/users.html:45
    -msgid "Manage"
    -msgstr "管理"
    -
    -#: flaskbb/templates/management/banned_users.html:60
    -#: flaskbb/templates/management/users.html:71
    -msgid "Unban"
    -msgstr "取消禁止"
    -
    -#: flaskbb/templates/management/category_form.html:10
    -#: flaskbb/templates/management/forum_form.html:10
    -#: flaskbb/templates/management/forums.html:9
    -#: flaskbb/templates/management/forums.html:17
    -msgid "Manage Forums"
    -msgstr "管理論壇"
    -
    -#: flaskbb/templates/management/forum_form.html:37
    -msgid "Group Access to the forum"
    -msgstr "可使用此論壇的群組"
    -
    -#: flaskbb/templates/management/group_form.html:10
    -#: flaskbb/templates/management/groups.html:9
    -#: flaskbb/templates/management/groups.html:15
    -msgid "Manage Groups"
    -msgstr "管理群組"
    -
    -#: flaskbb/templates/management/groups.html:1
    -#: flaskbb/templates/management/management_layout.html:17
    -msgid "Groups"
    -msgstr "群組"
    -
    -#: flaskbb/templates/management/management_layout.html:11
    -#: flaskbb/templates/management/overview.html:1
    -msgid "Overview"
    -msgstr "概況"
    -
    -#: flaskbb/templates/management/management_layout.html:13
    -#: flaskbb/templates/management/reports.html:1
    -msgid "Reports"
    -msgstr "舉報"
    -
    -#: flaskbb/templates/management/management_layout.html:19
    -#: flaskbb/templates/management/plugins.html:1
    -msgid "Plugins"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/overview.html:10
    -msgid "Global Statistics"
    -msgstr "統計"
    -
    -#: flaskbb/templates/management/overview.html:15
    -msgid "FlaskBB Version"
    -msgstr "FlaskBB 版本"
    -
    -#: flaskbb/templates/management/overview.html:21
    -msgid "Python Version"
    -msgstr "Python 版本"
    -
    -#: flaskbb/templates/management/overview.html:27
    -msgid "Flask Version"
    -msgstr "Flask 版本"
    -
    -#: flaskbb/templates/management/plugins.html:7
    -msgid "Manage Plugins"
    -msgstr "管理外掛"
    -
    -#: flaskbb/templates/management/plugins.html:12
    -msgid "Plugin"
    -msgstr "外掛"
    -
    -#: flaskbb/templates/management/plugins.html:13
    -msgid "Information"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/management/plugins.html:28
    -msgid "Version"
    -msgstr "版本"
    -
    -#: flaskbb/templates/management/plugins.html:36
    -msgid "Enable"
    -msgstr "啟用"
    -
    -#: flaskbb/templates/management/plugins.html:41
    -msgid "Disable"
    -msgstr "取消"
    -
    -#: flaskbb/templates/management/plugins.html:50
    -msgid "Install"
    -msgstr "安裝"
    -
    -#: flaskbb/templates/management/plugins.html:56
    -msgid "Uninstall"
    -msgstr "移除"
    -
    -#: flaskbb/templates/management/reports.html:10
    -#: flaskbb/templates/management/unread_reports.html:10
    -msgid "Show unread reports"
    -msgstr "顯示未讀舉報"
    -
    -#: flaskbb/templates/management/reports.html:11
    -#: flaskbb/templates/management/unread_reports.html:11
    -msgid "Show all reports"
    -msgstr "顯示所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:16
    -msgid "All Reports"
    -msgstr "所有舉報"
    -
    -#: flaskbb/templates/management/reports.html:26
    -#: flaskbb/templates/management/unread_reports.html:26
    -msgid "Poster"
    -msgstr "回覆者"
    -
    -#: flaskbb/templates/management/reports.html:28
    -#: flaskbb/templates/management/unread_reports.html:28
    -msgid "Reporter"
    -msgstr "舉報者"
    -
    -#: flaskbb/templates/management/reports.html:30
    -#: flaskbb/templates/management/unread_reports.html:30
    -msgid "Reported"
    -msgstr "已舉報"
    -
    -#: flaskbb/templates/management/reports.html:45
    -msgid "No reports."
    -msgstr "無舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:1
    -#: flaskbb/templates/management/unread_reports.html:16
    -msgid "Unread Reports"
    -msgstr "未讀舉報"
    -
    -#: flaskbb/templates/management/unread_reports.html:34
    -msgid "Mark all as Read"
    -msgstr "全部標記為已讀"
    -
    -#: flaskbb/templates/management/unread_reports.html:57
    -msgid "No unread reports."
    -msgstr "沒有未讀舉報"
    -
    -#: flaskbb/templates/management/users.html:64
    -msgid "Ban"
    -msgstr "禁止"
    -
    -#: flaskbb/templates/message/conversation_list.html:4
    -msgid "Conversations"
    -msgstr "對話"
    -
    -#: flaskbb/templates/message/conversation_list.html:77
    -msgid "No conversations found."
    -msgstr "沒有對話"
    -
    -#: flaskbb/templates/message/drafts.html:1
    -#: flaskbb/templates/message/message_layout.html:18
    -msgid "Drafts"
    -msgstr "草稿"
    -
    -#: flaskbb/templates/message/inbox.html:1
    -#: flaskbb/templates/message/message_layout.html:16
    -#: flaskbb/themes/bootstrap2/templates/layout.html:83
    -#: flaskbb/themes/bootstrap3/templates/layout.html:82
    -msgid "Inbox"
    -msgstr "收件箱"
    -
    -#: flaskbb/templates/message/message_layout.html:8
    -msgid "Private Message"
    -msgstr "訊息"
    -
    -#: flaskbb/templates/message/message_layout.html:17
    -msgid "Sent"
    -msgstr "已送出"
    -
    -#: flaskbb/templates/message/message_layout.html:19
    -#: flaskbb/templates/message/trash.html:1
    -msgid "Trash"
    -msgstr "垃圾"
    -
    -#: flaskbb/templates/message/sent.html:1
    -msgid "Sent Messages"
    -msgstr "已送出訊息"
    -
    -#: flaskbb/templates/user/all_posts.html:8
    -#: flaskbb/templates/user/profile.html:29
    -msgid "All Posts"
    -msgstr "所有文章"
    -
    -#: flaskbb/templates/user/all_posts.html:18
    -#, python-format
    -msgid "All Posts created by %(user)s"
    -msgstr "%(user)s 的所有文章"
    -
    -#: flaskbb/templates/user/all_topics.html:8
    -#: flaskbb/templates/user/profile.html:28
    -msgid "All Topics"
    -msgstr "所有主題"
    -
    -#: flaskbb/templates/user/all_topics.html:20
    -#, python-format
    -msgid "All Topics created by %(user)s"
    -msgstr "%(user)s 的所有主題"
    -
    -#: flaskbb/templates/user/change_email.html:6
    -#: flaskbb/templates/user/settings_layout.html:18
    -msgid "Change E-Mail Address"
    -msgstr "變更電子郵件"
    -
    -#: flaskbb/templates/user/change_password.html:6
    -#: flaskbb/templates/user/settings_layout.html:19
    -msgid "Change Password"
    -msgstr "變更密碼"
    -
    -#: flaskbb/templates/user/change_user_details.html:6
    -#: flaskbb/templates/user/settings_layout.html:17
    -msgid "Change User Details"
    -msgstr "變更使用者內容"
    -
    -#: flaskbb/templates/user/general_settings.html:6
    -#: flaskbb/templates/user/settings_layout.html:16
    -msgid "General Settings"
    -msgstr "一般設定"
    -
    -#: flaskbb/templates/user/profile.html:11
    -msgid "Info"
    -msgstr "資訊"
    -
    -#: flaskbb/templates/user/profile.html:12
    -msgid "User Stats"
    -msgstr "使用者統計"
    -
    -#: flaskbb/templates/user/profile.html:40
    -msgid "User has not added any notes about him."
    -msgstr "使用者未新增說明"
    -
    -#: flaskbb/templates/user/profile.html:52
    -msgid "Joined"
    -msgstr "加入於"
    -
    -#: flaskbb/templates/user/profile.html:60
    -msgid "Last seen"
    -msgstr "最後一次登入"
    -
    -#: flaskbb/templates/user/profile.html:61
    -msgid "Never seen"
    -msgstr "從未登入"
    -
    -#: flaskbb/templates/user/profile.html:64
    -msgid "Last post"
    -msgstr "最後一篇文章"
    -
    -#: flaskbb/templates/user/profile.html:68
    -msgid "Never"
    -msgstr "從未"
    -
    -#: flaskbb/templates/user/profile.html:74
    -#: flaskbb/templates/user/profile.html:78
    -msgid "No Info"
    -msgstr "沒有資訊"
    -
    -#: flaskbb/templates/user/settings_layout.html:15
    -msgid "Account Settings"
    -msgstr "帳號設定"
    -
    -#: flaskbb/user/forms.py:29
    -msgid "Language"
    -msgstr "語言"
    -
    -#: flaskbb/user/forms.py:30
    -msgid "Theme"
    -msgstr "主題"
    -
    -#: flaskbb/user/forms.py:36
    -msgid "Old E-Mail Address"
    -msgstr "原電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:40
    -msgid "New E-Mail Address"
    -msgstr "新電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:42
    -msgid "E-Mails must match."
    -msgstr "電子郵件帳號需一致"
    -
    -#: flaskbb/user/forms.py:45
    -msgid "Confirm E-Mail Address"
    -msgstr "確認電子郵件帳號"
    -
    -#: flaskbb/user/forms.py:64
    -msgid "Old Password"
    -msgstr "原密碼"
    -
    -#: flaskbb/user/forms.py:65
    -msgid "Password required"
    -msgstr "請輸入密碼"
    -
    -#: flaskbb/user/forms.py:71
    -msgid "Confirm New Password"
    -msgstr "確認密碼"
    -
    -#: flaskbb/user/forms.py:77
    -msgid "Old Password is wrong."
    -msgstr "原密碼錯誤"
    -
    -#: flaskbb/user/views.py:66
    -msgid "Settings updated."
    -msgstr "已更新設定"
    -
    -#: flaskbb/user/views.py:82
    -msgid "Password updated."
    -msgstr "已更新密碼"
    -
    -#: flaskbb/user/views.py:94
    -msgid "E-Mail Address updated."
    -msgstr "已更新電子郵件帳號"
    -
    -#: flaskbb/user/views.py:107
    -msgid "Details updated."
    -msgstr "已更新內容"
    -
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/__init__.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/__init__.py
    deleted file mode 100644
    index e69de29b..00000000
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/database.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/database.py
    deleted file mode 100644
    index a6f93079..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/database.py
    +++ /dev/null
    @@ -1,28 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.utils.database
    -    ~~~~~~~~~~~~~~~~~~~~~~
    -
    -    Some database helpers such as a CRUD mixin.
    -
    -    :copyright: (c) 2015 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from flaskbb.extensions import db
    -
    -
    -class CRUDMixin(object):
    -    def __repr__(self):
    -        return "<{}>".format(self.__class__.__name__)
    -
    -    def save(self):
    -        """Saves the object to the database."""
    -        db.session.add(self)
    -        db.session.commit()
    -        return self
    -
    -    def delete(self):
    -        """Delete the object from the database."""
    -        db.session.delete(self)
    -        db.session.commit()
    -        return self
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/datastructures.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/datastructures.py
    deleted file mode 100644
    index 2a51ca5a..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/datastructures.py
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -try:
    -    from types import SimpleNamespace
    -
    -except ImportError:
    -
    -    class SimpleNamespace(dict):
    -
    -        def __getattr__(self, name):
    -            try:
    -                return super(SimpleNamespace, self).__getitem__(name)
    -            except KeyError:
    -                raise AttributeError('{0} has no attribute {1}'
    -                                     .format(self.__class__.__name__, name))
    -
    -        def __setattr__(self, name, value):
    -            super(SimpleNamespace, self).__setitem__(name, value)
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/fields.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/fields.py
    deleted file mode 100644
    index baa15acc..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/fields.py
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.utils.fields
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    Additional fields for wtforms
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -from datetime import datetime
    -from wtforms.fields import DateField
    -
    -
    -class BirthdayField(DateField):
    -    """Same as DateField, except it allows ``None`` values in case a user
    -    wants to delete his birthday.
    -    """
    -    def __init__(self, label=None, validators=None, format='%Y-%m-%d',
    -                 **kwargs):
    -        DateField.__init__(self, label, validators, format, **kwargs)
    -
    -    def process_formdata(self, valuelist):
    -        if valuelist:
    -            date_str = ' '.join(valuelist)
    -            try:
    -                self.data = datetime.strptime(date_str, self.format).date()
    -            except ValueError:
    -                self.data = None
    -
    -                # Only except the None value if all values are None.
    -                # A bit dirty though
    -                if valuelist != ["None", "None", "None"]:
    -                    raise ValueError("Not a valid date value")
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/helpers.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/helpers.py
    deleted file mode 100644
    index ceeaccf3..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/helpers.py
    +++ /dev/null
    @@ -1,505 +0,0 @@
    -# -*- coding: utf-8 -*-
    -"""
    -    flaskbb.utils.helpers
    -    ~~~~~~~~~~~~~~~~~~~~
    -
    -    A few helpers that are used by flaskbb
    -
    -    :copyright: (c) 2014 by the FlaskBB Team.
    -    :license: BSD, see LICENSE for more details.
    -"""
    -import re
    -import time
    -import itertools
    -import operator
    -import struct
    -from io import BytesIO
    -from datetime import datetime, timedelta
    -
    -import requests
    -import unidecode
    -from flask import session, url_for, flash
    -from jinja2 import Markup
    -from babel.dates import format_timedelta
    -from flask_babelplus import lazy_gettext as _
    -from flask_themes2 import render_theme_template
    -from flask_login import current_user
    -
    -from flaskbb._compat import range_method, text_type
    -from flaskbb.extensions import redis_store
    -from flaskbb.utils.settings import flaskbb_config
    -from flaskbb.utils.markup import markdown
    -from flask_allows import Permission
    -
    -_punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+')
    -
    -
    -def slugify(text, delim=u'-'):
    -    """Generates an slightly worse ASCII-only slug.
    -    Taken from the Flask Snippets page.
    -
    -   :param text: The text which should be slugified
    -   :param delim: Default "-". The delimeter for whitespace
    -    """
    -    text = unidecode.unidecode(text)
    -    result = []
    -    for word in _punct_re.split(text.lower()):
    -        if word:
    -            result.append(word)
    -    return text_type(delim.join(result))
    -
    -
    -def render_template(template, **context):  # pragma: no cover
    -    """A helper function that uses the `render_theme_template` function
    -    without needing to edit all the views
    -    """
    -    if current_user.is_authenticated and current_user.theme:
    -        theme = current_user.theme
    -    else:
    -        theme = session.get('theme', flaskbb_config['DEFAULT_THEME'])
    -    return render_theme_template(theme, template, **context)
    -
    -
    -def do_topic_action(topics, user, action, reverse):
    -    """Executes a specific action for topics. Returns a list with the modified
    -    topic objects.
    -
    -    :param topics: A iterable with ``Topic`` objects.
    -    :param user: The user object which wants to perform the action.
    -    :param action: One of the following actions: locked, important and delete.
    -    :param reverse: If the action should be done in a reversed way.
    -                    For example, to unlock a topic, ``reverse`` should be
    -                    set to ``True``.
    -    """
    -    from flaskbb.utils.requirements import IsAtleastModeratorInForum, CanDeleteTopic
    -
    -    from flaskbb.user.models import User
    -    from flaskbb.forum.models import Post
    -
    -    if not Permission(IsAtleastModeratorInForum(forum=topics[0].forum)):
    -        flash(_("You do not have the permissions to execute this "
    -                "action."), "danger")
    -        return False
    -
    -    modified_topics = 0
    -    if action != "delete":
    -
    -        for topic in topics:
    -            if getattr(topic, action) and not reverse:
    -                continue
    -
    -            setattr(topic, action, not reverse)
    -            modified_topics += 1
    -            topic.save()
    -    elif action == "delete":
    -        for topic in topics:
    -            if not Permission(CanDeleteTopic):
    -                flash(_("You do not have the permissions to delete this "
    -                        "topic."), "danger")
    -                return False
    -
    -            involved_users = User.query.filter(Post.topic_id == topic.id,
    -                                               User.id == Post.user_id).all()
    -            modified_topics += 1
    -            topic.delete(involved_users)
    -
    -    return modified_topics
    -
    -
    -def get_categories_and_forums(query_result, user):
    -    """Returns a list with categories. Every category has a list for all
    -    their associated forums.
    -
    -    The structure looks like this::
    -        [(,
    -          [(, None),
    -           (, )]),
    -         (,
    -          [(, None),
    -          (, None)])]
    -
    -    and to unpack the values you can do this::
    -        In [110]: for category, forums in x:
    -           .....:     print category
    -           .....:     for forum, forumsread in forums:
    -           .....:         print "\t", forum, forumsread
    -
    -   This will print something like this:
    -        
    -             None
    -             
    -        
    -             None
    -             None
    -
    -    :param query_result: A tuple (KeyedTuple) with all categories and forums
    -
    -    :param user: The user object is needed because a signed out user does not
    -                 have the ForumsRead relation joined.
    -    """
    -    it = itertools.groupby(query_result, operator.itemgetter(0))
    -
    -    forums = []
    -
    -    if user.is_authenticated:
    -        for key, value in it:
    -            forums.append((key, [(item[1], item[2]) for item in value]))
    -    else:
    -        for key, value in it:
    -            forums.append((key, [(item[1], None) for item in value]))
    -
    -    return forums
    -
    -
    -def get_forums(query_result, user):
    -    """Returns a tuple which contains the category and the forums as list.
    -    This is the counterpart for get_categories_and_forums and especially
    -    usefull when you just need the forums for one category.
    -
    -    For example::
    -        (,
    -          [(, None),
    -          (, None)])
    -
    -    :param query_result: A tuple (KeyedTuple) with all categories and forums
    -
    -    :param user: The user object is needed because a signed out user does not
    -                 have the ForumsRead relation joined.
    -    """
    -    it = itertools.groupby(query_result, operator.itemgetter(0))
    -
    -    if user.is_authenticated:
    -        for key, value in it:
    -            forums = key, [(item[1], item[2]) for item in value]
    -    else:
    -        for key, value in it:
    -            forums = key, [(item[1], None) for item in value]
    -
    -    return forums
    -
    -
    -def forum_is_unread(forum, forumsread, user):
    -    """Checks if a forum is unread
    -
    -    :param forum: The forum that should be checked if it is unread
    -
    -    :param forumsread: The forumsread object for the forum
    -
    -    :param user: The user who should be checked if he has read the forum
    -    """
    -    # If the user is not signed in, every forum is marked as read
    -    if not user.is_authenticated:
    -        return False
    -
    -    read_cutoff = datetime.utcnow() - timedelta(
    -        days=flaskbb_config["TRACKER_LENGTH"])
    -
    -    # disable tracker if TRACKER_LENGTH is set to 0
    -    if flaskbb_config["TRACKER_LENGTH"] == 0:
    -        return False
    -
    -    # If there are no topics in the forum, mark it as read
    -    if forum and forum.topic_count == 0:
    -        return False
    -
    -    # If the user hasn't visited a topic in the forum - therefore,
    -    # forumsread is None and we need to check if it is still unread
    -    if forum and not forumsread:
    -        return forum.last_post_created > read_cutoff
    -
    -    try:
    -        # check if the forum has been cleared and if there is a new post
    -        # since it have been cleared
    -        if forum.last_post_created > forumsread.cleared:
    -            if forum.last_post_created < forumsread.last_read:
    -                return False
    -    except TypeError:
    -        pass
    -
    -    # else just check if the user has read the last post
    -    return forum.last_post_created > forumsread.last_read
    -
    -
    -def topic_is_unread(topic, topicsread, user, forumsread=None):
    -    """Checks if a topic is unread.
    -
    -    :param topic: The topic that should be checked if it is unread
    -
    -    :param topicsread: The topicsread object for the topic
    -
    -    :param user: The user who should be checked if he has read the last post
    -                 in the topic
    -
    -    :param forumsread: The forumsread object in which the topic is. If you
    -                       also want to check if the user has marked the forum as
    -                       read, than you will also need to pass an forumsread
    -                       object.
    -    """
    -    if not user.is_authenticated:
    -        return False
    -
    -    read_cutoff = datetime.utcnow() - timedelta(
    -        days=flaskbb_config["TRACKER_LENGTH"])
    -
    -    # disable tracker if read_cutoff is set to 0
    -    if flaskbb_config["TRACKER_LENGTH"] == 0:
    -        return False
    -
    -    # check read_cutoff
    -    if topic.last_post.date_created < read_cutoff:
    -        return False
    -
    -    # topicsread is none if the user has marked the forum as read
    -    # or if he hasn't visited yet
    -    if topicsread is None:
    -        # user has cleared the forum sometime ago - check if there is a new post
    -        if forumsread and forumsread.cleared is not None:
    -            return forumsread.cleared < topic.last_post.date_created
    -
    -        # user hasn't read the topic yet, or there is a new post since the user
    -        # has marked the forum as read
    -        return True
    -
    -    # check if there is a new post since the user's last topic visit
    -    return topicsread.last_read < topic.last_post.date_created
    -
    -
    -def mark_online(user_id, guest=False):  # pragma: no cover
    -    """Marks a user as online
    -
    -    :param user_id: The id from the user who should be marked as online
    -
    -    :param guest: If set to True, it will add the user to the guest activity
    -                  instead of the user activity.
    -
    -    Ref: http://flask.pocoo.org/snippets/71/
    -    """
    -    now = int(time.time())
    -    expires = now + (flaskbb_config['ONLINE_LAST_MINUTES'] * 60) + 10
    -    if guest:
    -        all_users_key = 'online-guests/%d' % (now // 60)
    -        user_key = 'guest-activity/%s' % user_id
    -    else:
    -        all_users_key = 'online-users/%d' % (now // 60)
    -        user_key = 'user-activity/%s' % user_id
    -    p = redis_store.pipeline()
    -    p.sadd(all_users_key, user_id)
    -    p.set(user_key, now)
    -    p.expireat(all_users_key, expires)
    -    p.expireat(user_key, expires)
    -    p.execute()
    -
    -
    -def get_online_users(guest=False):  # pragma: no cover
    -    """Returns all online users within a specified time range
    -
    -    :param guest: If True, it will return the online guests
    -    """
    -    current = int(time.time()) // 60
    -    minutes = range_method(flaskbb_config['ONLINE_LAST_MINUTES'])
    -    if guest:
    -        return redis_store.sunion(['online-guests/%d' % (current - x)
    -                                   for x in minutes])
    -    return redis_store.sunion(['online-users/%d' % (current - x)
    -                               for x in minutes])
    -
    -
    -def crop_title(title, length=None, suffix="..."):
    -    """Crops the title to a specified length
    -
    -    :param title: The title that should be cropped
    -
    -    :param suffix: The suffix which should be appended at the
    -                   end of the title.
    -    """
    -    length = flaskbb_config['TITLE_LENGTH'] if length is None else length
    -
    -    if len(title) <= length:
    -        return title
    -
    -    return title[:length].rsplit(' ', 1)[0] + suffix
    -
    -
    -def render_markup(text):
    -    """Renders the given text as markdown
    -
    -    :param text: The text that should be rendered as markdown
    -    """
    -    return Markup(markdown.render(text))
    -
    -
    -def is_online(user):
    -    """A simple check to see if the user was online within a specified
    -    time range
    -
    -    :param user: The user who needs to be checked
    -    """
    -    return user.lastseen >= time_diff()
    -
    -
    -def time_diff():
    -    """Calculates the time difference between now and the ONLINE_LAST_MINUTES
    -    variable from the configuration.
    -    """
    -    now = datetime.utcnow()
    -    diff = now - timedelta(minutes=flaskbb_config['ONLINE_LAST_MINUTES'])
    -    return diff
    -
    -
    -def format_date(value, format='%Y-%m-%d'):
    -    """Returns a formatted time string
    -
    -    :param value: The datetime object that should be formatted
    -
    -    :param format: How the result should look like. A full list of available
    -                   directives is here: http://goo.gl/gNxMHE
    -    """
    -    return value.strftime(format)
    -
    -
    -def time_since(time):  # pragma: no cover
    -    """Returns a string representing time since e.g.
    -    3 days ago, 5 hours ago.
    -
    -    :param time: A datetime object
    -    """
    -    delta = time - datetime.utcnow()
    -
    -    locale = "en"
    -    if current_user.is_authenticated and current_user.language is not None:
    -        locale = current_user.language
    -
    -    return format_timedelta(delta, add_direction=True, locale=locale)
    -
    -
    -def format_quote(username, content):
    -    """Returns a formatted quote depending on the markup language.
    -
    -    :param username: The username of a user.
    -    :param content: The content of the quote
    -    """
    -    profile_url = url_for('user.profile', username=username)
    -    content = "\n> ".join(content.strip().split('\n'))
    -    quote = u"**[{username}]({profile_url}) wrote:**\n> {content}\n".\
    -            format(username=username, profile_url=profile_url, content=content)
    -
    -    return quote
    -
    -
    -def get_image_info(url):
    -    """Returns the content-type, image size (kb), height and width of a image
    -    without fully downloading it. It will just download the first 1024 bytes.
    -
    -    LICENSE: New BSD License (taken from the start page of the repository)
    -    https://code.google.com/p/bfg-pages/source/browse/trunk/pages/getimageinfo.py
    -    """
    -    r = requests.get(url, stream=True)
    -    image_size = r.headers.get("content-length")
    -    image_size = float(image_size) / 1000  # in kilobyte
    -
    -    data = r.raw.read(1024)
    -    size = len(data)
    -    height = -1
    -    width = -1
    -    content_type = ''
    -
    -    if size:
    -        size = int(size)
    -
    -    # handle GIFs
    -    if (size >= 10) and data[:6] in (b'GIF87a', b'GIF89a'):
    -        # Check to see if content_type is correct
    -        content_type = 'image/gif'
    -        w, h = struct.unpack(b'= 24) and data.startswith(b'\211PNG\r\n\032\n') and
    -            (data[12:16] == b'IHDR')):
    -        content_type = 'image/png'
    -        w, h = struct.unpack(b">LL", data[16:24])
    -        width = int(w)
    -        height = int(h)
    -
    -    # Maybe this is for an older PNG version.
    -    elif (size >= 16) and data.startswith(b'\211PNG\r\n\032\n'):
    -        # Check to see if we have the right content type
    -        content_type = 'image/png'
    -        w, h = struct.unpack(b">LL", data[8:16])
    -        width = int(w)
    -        height = int(h)
    -
    -    # handle JPEGs
    -    elif (size >= 2) and data.startswith(b'\377\330'):
    -        content_type = 'image/jpeg'
    -        jpeg = BytesIO(data)
    -        jpeg.read(2)
    -        b = jpeg.read(1)
    -        try:
    -            while (b and ord(b) != 0xDA):
    -
    -                while (ord(b) != 0xFF):
    -                    b = jpeg.read(1)
    -
    -                while (ord(b) == 0xFF):
    -                    b = jpeg.read(1)
    -
    -                if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
    -                    jpeg.read(3)
    -                    h, w = struct.unpack(b">HH", jpeg.read(4))
    -                    break
    -                else:
    -                    jpeg.read(int(struct.unpack(b">H", jpeg.read(2))[0])-2)
    -                b = jpeg.read(1)
    -            width = int(w)
    -            height = int(h)
    -        except struct.error:
    -            pass
    -        except ValueError:
    -            pass
    -
    -    return {"content-type": content_type, "size": image_size,
    -            "width": width, "height": height}
    -
    -
    -def check_image(url):
    -    """A little wrapper for the :func:`get_image_info` function.
    -    If the image doesn't match the ``flaskbb_config`` settings it will
    -    return a tuple with a the first value is the custom error message and
    -    the second value ``False`` for not passing the check.
    -    If the check is successful, it will return ``None`` for the error message
    -    and ``True`` for the passed check.
    -
    -    :param url: The image url to be checked.
    -    """
    -    img_info = get_image_info(url)
    -    error = None
    -
    -    if not img_info["content-type"] in flaskbb_config["AVATAR_TYPES"]:
    -        error = "Image type is not allowed. Allowed types are: {}".format(
    -            ", ".join(flaskbb_config["AVATAR_TYPES"])
    -        )
    -        return error, False
    -
    -    if img_info["width"] > flaskbb_config["AVATAR_WIDTH"]:
    -        error = "Image is too wide! {}px width is allowed.".format(
    -            flaskbb_config["AVATAR_WIDTH"]
    -        )
    -        return error, False
    -
    -    if img_info["height"] > flaskbb_config["AVATAR_HEIGHT"]:
    -        error = "Image is too high! {}px height is allowed.".format(
    -            flaskbb_config["AVATAR_HEIGHT"]
    -        )
    -        return error, False
    -
    -    if img_info["size"] > flaskbb_config["AVATAR_SIZE"]:
    -        error = "Image is too big! {}kb are allowed.".format(
    -            flaskbb_config["AVATAR_SIZE"]
    -        )
    -        return error, False
    -
    -    return error, True
    diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/markup.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/markup.py
    deleted file mode 100644
    index 395d4160..00000000
    --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/markup.py
    +++ /dev/null
    @@ -1,90 +0,0 @@
    -import os
    -import re
    -
    -from flask import url_for
    -
    -import mistune
    -from pygments import highlight
    -from pygments.lexers import get_lexer_by_name
    -from pygments.formatters import HtmlFormatter
    -
    -
    -_re_emoji = re.compile(r':([a-z0-9\+\-_]+):', re.I)
    -_re_user = re.compile(r'@(\w+)', re.I)
    -
    -# base directory of flaskbb - used to collect the emojis
    -_basedir = os.path.join(os.path.abspath(os.path.dirname(
    -                        os.path.dirname(__file__))))
    -
    -
    -def collect_emojis():
    -    """Returns a dictionary containing all emojis with their
    -    name and filename. If the folder doesn't exist it returns a empty
    -    dictionary.
    -    """
    -    emojis = dict()
    -    full_path = os.path.join(_basedir, "static", "emoji")
    -    # return an empty dictionary if the path doesn't exist
    -    if not os.path.exists(full_path):
    -        return emojis
    -
    -    for emoji in os.listdir(full_path):
    -        name, ending = emoji.split(".")
    -        if ending in ["png", "gif", "jpg", "jpeg"]:
    -            emojis[name] = emoji
    -
    -    return emojis
    -
    -EMOJIS = collect_emojis()
    -
    -
    -class FlaskBBRenderer(mistune.Renderer):
    -    """Markdown with some syntetic sugar such as @user gets linked to the
    -    user's profile and emoji support.
    -    """
    -    def __init__(self, **kwargs):
    -        super(FlaskBBRenderer, self).__init__(**kwargs)
    -
    -    def paragraph(self, text):
    -        """Rendering paragraph tags. Like ``

    `` with emoji support.""" - - def emojify(match): - value = match.group(1) - - if value in EMOJIS: - filename = url_for( - "static", - filename="emoji/{}".format(EMOJIS[value]) - ) - - emoji = "{alt}".format( - css="emoji", alt=value, - src=filename - ) - return emoji - return match.group(0) - - def userify(match): - value = match.group(1) - user = "@{user}".format( - url=url_for("user.profile", username=value, _external=False), - user=value - ) - return user - - text = _re_emoji.sub(emojify, text) - text = _re_user.sub(userify, text) - - return '

    %s

    \n' % text.strip(' ') - - def block_code(self, code, lang): - if not lang: - return '\n
    %s
    \n' % \ - mistune.escape(code) - lexer = get_lexer_by_name(lang, stripall=True) - formatter = HtmlFormatter() - return highlight(code, lexer, formatter) - - -renderer = FlaskBBRenderer(escape=True, hard_wrap=True) -markdown = mistune.Markdown(renderer=renderer) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/populate.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/populate.py deleted file mode 100644 index 4f9b14fd..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/populate.py +++ /dev/null @@ -1,322 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.utils.populate - ~~~~~~~~~~~~~~~~~~~~ - - A module that makes creating data more easily - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from flaskbb.management.models import Setting, SettingsGroup -from flaskbb.user.models import User, Group -from flaskbb.forum.models import Post, Topic, Forum, Category - - -def delete_settings_from_fixture(fixture): - """Deletes the settings from a fixture from the database. - Returns the deleted groups and settings. - - :param fixture: The fixture that should be deleted. - """ - deleted_settings = {} - - for settingsgroup in fixture: - group = SettingsGroup.query.filter_by(key=settingsgroup[0]).first() - deleted_settings[group] = [] - - for settings in settingsgroup[1]["settings"]: - setting = Setting.query.filter_by(key=settings[0]).first() - if setting: - deleted_settings[group].append(setting) - setting.delete() - - group.delete() - - return deleted_settings - - -def create_settings_from_fixture(fixture): - """Inserts the settings from a fixture into the database. - Returns the created groups and settings. - - :param fixture: The fixture which should inserted. - """ - created_settings = {} - for settingsgroup in fixture: - group = SettingsGroup( - key=settingsgroup[0], - name=settingsgroup[1]["name"], - description=settingsgroup[1]["description"] - ) - group.save() - created_settings[group] = [] - - for settings in settingsgroup[1]["settings"]: - setting = Setting( - key=settings[0], - value=settings[1]["value"], - value_type=settings[1]["value_type"], - name=settings[1]["name"], - description=settings[1]["description"], - extra=settings[1].get("extra", ""), # Optional field - - settingsgroup=group.key - ) - if setting: - setting.save() - created_settings[group].append(setting) - - return created_settings - - -def update_settings_from_fixture(fixture, overwrite_group=False, - overwrite_setting=False): - """Updates the database settings from a fixture. - Returns the updated groups and settings. - - :param fixture: The fixture which should be inserted/updated. - - :param overwrite_group: Set this to ``True`` if you want to overwrite - the group if it already exists. - Defaults to ``False``. - - :param overwrite_setting: Set this to ``True`` if you want to overwrite the - setting if it already exists. - Defaults to ``False``. - """ - updated_settings = {} - - for settingsgroup in fixture: - - group = SettingsGroup.query.filter_by(key=settingsgroup[0]).first() - - if (group is not None and overwrite_group) or group is None: - - if group is not None: - group.name = settingsgroup[1]["name"] - group.description = settingsgroup[1]["description"] - else: - group = SettingsGroup( - key=settingsgroup[0], - name=settingsgroup[1]["name"], - description=settingsgroup[1]["description"] - ) - - group.save() - updated_settings[group] = [] - - for settings in settingsgroup[1]["settings"]: - - setting = Setting.query.filter_by(key=settings[0]).first() - - if (setting is not None and overwrite_setting) or setting is None: - - if setting is not None: - setting.value = settings[1]["value"] - setting.value_type = settings[1]["value_type"] - setting.name = settings[1]["name"] - setting.description = settings[1]["description"] - setting.extra = settings[1].get("extra", "") - setting.settingsgroup = group.key - else: - setting = Setting( - key=settings[0], - value=settings[1]["value"], - value_type=settings[1]["value_type"], - name=settings[1]["name"], - description=settings[1]["description"], - extra=settings[1].get("extra", ""), - settingsgroup=group.key - ) - - setting.save() - updated_settings[group].append(setting) - - return updated_settings - - -def create_default_settings(): - """Creates the default settings.""" - from flaskbb.fixtures.settings import fixture - create_settings_from_fixture(fixture) - - -def create_default_groups(): - """This will create the 5 default groups.""" - from flaskbb.fixtures.groups import fixture - result = [] - for key, value in fixture.items(): - group = Group(name=key) - - for k, v in value.items(): - setattr(group, k, v) - - group.save() - result.append(group) - return result - - -def create_admin_user(username, password, email): - """Creates the administrator user. - Returns the created admin user. - - :param username: The username of the user. - - :param password: The password of the user. - - :param email: The email address of the user. - """ - - admin_group = Group.query.filter_by(admin=True).first() - user = User() - - user.username = username - user.password = password - user.email = email - user.primary_group_id = admin_group.id - - user.save() - return user - - -def create_welcome_forum(): - """This will create the `welcome forum` with a welcome topic. - Returns True if it's created successfully. - """ - - if User.query.count() < 1: - return False - - user = User.query.filter_by(id=1).first() - - category = Category(title="My Category", position=1) - category.save() - - forum = Forum(title="Welcome", description="Your first forum", - category_id=category.id) - forum.save() - - topic = Topic(title="Welcome!") - post = Post(content="Have fun with your new FlaskBB Forum!") - - topic.save(user=user, forum=forum, post=post) - return True - - -def create_test_data(users=5, categories=2, forums=2, topics=1, posts=1): - """Creates 5 users, 2 categories and 2 forums in each category. - It also creates a new topic topic in each forum with a post. - Returns the amount of created users, categories, forums, topics and posts - as a dict. - - :param users: The number of users. - - :param categories: The number of categories. - - :param forums: The number of forums which are created in each category. - - :param topics: The number of topics which are created in each forum. - - :param posts: The number of posts which are created in each topic. - """ - create_default_groups() - create_default_settings() - - data_created = {'users': 0, 'categories': 0, 'forums': 0, - 'topics': 0, 'posts': 0} - - # create 5 users - for u in range(1, users + 1): - username = "test%s" % u - email = "test%s@example.org" % u - user = User(username=username, password="test", email=email) - user.primary_group_id = u - user.save() - data_created['users'] += 1 - - user1 = User.query.filter_by(id=1).first() - user2 = User.query.filter_by(id=2).first() - - # lets send them a few private messages - for i in range(1, 3): - # TODO - pass - - # create 2 categories - for i in range(1, categories + 1): - category_title = "Test Category %s" % i - category = Category(title=category_title, - description="Test Description") - category.save() - data_created['categories'] += 1 - - # create 2 forums in each category - for j in range(1, forums + 1): - if i == 2: - j += 2 - - forum_title = "Test Forum %s %s" % (j, i) - forum = Forum(title=forum_title, description="Test Description", - category_id=i) - forum.save() - data_created['forums'] += 1 - - for t in range(1, topics + 1): - # create a topic - topic = Topic() - post = Post() - - topic.title = "Test Title %s" % j - post.content = "Test Content" - topic.save(post=post, user=user1, forum=forum) - data_created['topics'] += 1 - - for p in range(1, posts + 1): - # create a second post in the forum - post = Post() - post.content = "Test Post" - post.save(user=user2, topic=topic) - data_created['posts'] += 1 - - return data_created - - -def insert_mass_data(topics=100, posts=100): - """Creates a few topics in the first forum and each topic has - a few posts. WARNING: This might take very long! - Returns the count of created topics and posts. - - :param topics: The amount of topics in the forum. - :param posts: The number of posts in each topic. - """ - user1 = User.query.filter_by(id=1).first() - user2 = User.query.filter_by(id=2).first() - forum = Forum.query.filter_by(id=1).first() - - created_posts = 0 - created_topics = 0 - - if not (user1 or user2 or forum): - return False - - # create 1000 topics - for i in range(1, topics + 1): - - # create a topic - topic = Topic() - post = Post() - - topic.title = "Test Title %s" % i - post.content = "Test Content" - topic.save(post=post, user=user1, forum=forum) - created_topics += 1 - - # create 100 posts in each topic - for j in range(1, posts + 1): - post = Post() - post.content = "Test Post" - post.save(user=user2, topic=topic) - created_posts += 1 - - return created_topics, created_posts diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/requirements.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/requirements.py deleted file mode 100644 index 6a26a249..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/requirements.py +++ /dev/null @@ -1,341 +0,0 @@ -""" - flaskbb.utils.requirements - ~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Authorization requirements for FlaskBB. - - :copyright: (c) 2015 by the FlaskBB Team. - :license: BSD, see LICENSE for more details -""" - -from flask_allows import Requirement, Or, And -from flaskbb.exceptions import FlaskBBError -from flaskbb.forum.models import Post, Topic, Forum -from flaskbb.user.models import Group - - -class Has(Requirement): - def __init__(self, permission): - self.permission = permission - - def __repr__(self): - return "".format(self.permission) - - def fulfill(self, user, request): - return user.permissions.get(self.permission, False) - - -class IsAuthed(Requirement): - def fulfill(self, user, request): - return user.is_authenticated - - -class IsModeratorInForum(IsAuthed): - def __init__(self, forum=None, forum_id=None): - self.forum_id = forum_id - self.forum = forum - - def fulfill(self, user, request): - moderators = self._get_forum_moderators(request) - return (super(IsModeratorInForum, self).fulfill(user, request) and - self._user_is_forum_moderator(user, moderators)) - - def _user_is_forum_moderator(self, user, moderators): - return user in moderators - - def _get_forum_moderators(self, request): - return self._get_forum(request).moderators - - def _get_forum(self, request): - if self.forum is not None: - return self.forum - elif self.forum_id is not None: - return self._get_forum_from_id() - return self._get_forum_from_request(request) - - def _get_forum_from_id(self): - return Forum.query.get(self.forum_id) - - def _get_forum_from_request(self, request): - view_args = request.view_args - if 'post_id' in view_args: - return Post.query.get(view_args['post_id']).topic.forum - elif 'topic_id' in view_args: - return Topic.query.get(view_args['topic_id']).forum - elif 'forum_id' in view_args: - return Forum.query.get(view_args['forum_id']) - else: - raise FlaskBBError - - -class IsSameUser(IsAuthed): - def __init__(self, topic_or_post=None): - self._topic_or_post = topic_or_post - - def fulfill(self, user, request): - return (super(IsSameUser, self).fulfill(user, request) and - user.id == self._determine_user(request)) - - def _determine_user(self, request): - if self._topic_or_post is not None: - return self._topic_or_post.user_id - return self._get_user_id_from_post(request) - - def _get_user_id_from_post(self, request): - view_args = request.view_args - if 'post_id' in view_args: - return Post.query.get(view_args['post_id']).user_id - elif 'topic_id' in view_args: - return Topic.query.get(view_args['topic_id']).user_id - else: - raise FlaskBBError - - -class TopicNotLocked(Requirement): - def __init__(self, topic=None, topic_id=None, post_id=None, post=None): - self._topic = topic - self._topic_id = topic_id - self._post = post - self._post_id = post_id - - def fulfill(self, user, request): - return not any(self._determine_locked(request)) - - def _determine_locked(self, request): - """ - Returns a pair of booleans: - * Is the topic locked? - * Is the forum the topic belongs to locked? - - Except in the case of a topic instance being provided to the constructor, - all of these tuples are SQLA KeyedTuples - """ - if self._topic is not None: - return self._topic.locked, self._topic.forum.locked - elif self._post is not None: - return self._post.topic.locked, self._post.topic.forum.locked - elif self._topic_id is not None: - return ( - Topic.query.join(Forum, Forum.id == Topic.forum_id) - .filter(Topic.id == self._topic_id) - .with_entities(Topic.locked, Forum.locked) - .first() - ) - else: - return self._get_topic_from_request(request) - - def _get_topic_from_request(self, request): - view_args = request.view_args - if 'post_id' in view_args: - return ( - Topic.query.join(Post, Post.topic_id == Topic.id) - .join(Forum, Forum.id == Topic.forum_id) - .filter(Post.id == view_args['post_id']) - .with_entities(Topic.locked, Forum.locked) - .first() - ) - elif 'topic_id' in view_args: - return ( - Topic.query.join(Forum, Forum.id == Topic.forum_id) - .filter(Topic.id == view_args['topic_id']) - .with_entities(Topic.locked, Forum.locked) - .first() - ) - else: - raise FlaskBBError("How did you get this to happen?") - - -class ForumNotLocked(Requirement): - def __init__(self, forum=None, forum_id=None): - self._forum = forum - self._forum_id = forum_id - - def fulfill(self, user, request): - return self._is_forum_locked(request) - - def _is_forum_locked(self, request): - forum = self._determine_forum(request) - return not forum.locked - - def _determine_forum(self, request): - if self._forum is not None: - return self._forum - elif self._forum_id is not None: - return Forum.query.get(self._forum_id) - else: - return self._get_forum_from_request(request) - - def _get_forum_from_request(self, request): - view_args = request.view_args - - # These queries look big and nasty, but they really aren't that bad - # Basically, find the forum this post or topic belongs to - # with_entities returns a KeyedTuple with only the locked status - - if 'post_id' in view_args: - return ( - Forum.query.join(Topic, Topic.forum_id == Forum.id) - .join(Post, Post.topic_id == Topic.id) - .filter(Post.id == view_args['post_id']) - .with_entities(Forum.locked) - .first() - ) - - elif 'topic_id' in view_args: - return ( - Forum.query.join(Topic, Topic.forum_id == Forum.id) - .filter(Topic.id == view_args['topic_id']) - .with_entities(Forum.locked) - .first() - ) - - elif 'forum_id' in view_args: - return Forum.query.get(view_args['forum_id']) - - -class CanAccessForum(Requirement): - def fulfill(self, user, request): - forum_id = request.view_args['forum_id'] - group_ids = [g.id for g in user.groups] - - return Forum.query.filter( - Forum.id == forum_id, - Forum.groups.any(Group.id.in_(group_ids)) - ).count() - - -class CanAccessTopic(Requirement): - def fulfill(self, user, request): - topic_id = request.view_args['topic_id'] - group_ids = [g.id for g in user.groups] - - return Forum.query.join(Topic, Topic.forum_id == Forum.id).filter( - Topic.id == topic_id, - Forum.groups.any(Group.id.in_(group_ids)) - ).count() - - -def IsAtleastModeratorInForum(forum_id=None, forum=None): - return Or(IsAtleastSuperModerator, IsModeratorInForum(forum_id=forum_id, - forum=forum)) - -IsMod = And(IsAuthed(), Has('mod')) -IsSuperMod = And(IsAuthed(), Has('super_mod')) -IsAdmin = And(IsAuthed(), Has('admin')) - -IsAtleastModerator = Or(IsAdmin, IsSuperMod, IsMod) - -IsAtleastSuperModerator = Or(IsAdmin, IsSuperMod) - -CanBanUser = Or(IsAtleastSuperModerator, Has('mod_banuser')) - -CanEditUser = Or(IsAtleastSuperModerator, Has('mod_edituser')) - -CanEditPost = Or(IsAtleastSuperModerator, - And(IsModeratorInForum(), Has('editpost')), - And(IsSameUser(), Has('editpost'), TopicNotLocked())) - -CanDeletePost = CanEditPost - -CanPostReply = Or(And(Has('postreply'), TopicNotLocked()), - IsModeratorInForum(), - IsAtleastSuperModerator) - -CanPostTopic = Or(And(Has('posttopic'), ForumNotLocked()), - IsAtleastSuperModerator, - IsModeratorInForum()) - -CanDeleteTopic = Or(IsAtleastSuperModerator, - And(IsModeratorInForum(), Has('deletetopic')), - And(IsSameUser(), Has('deletetopic'), TopicNotLocked())) - - -# Template Allowances -- gross, I know - -def TplCanModerate(request): - def _(user, forum): - kwargs = {} - - if isinstance(forum, int): - kwargs['forum_id'] = forum - elif isinstance(forum, Forum): - kwargs['forum'] = forum - - return IsAtleastModeratorInForum(**kwargs)(user, request) - return _ - - -def TplCanPostReply(request): - def _(user, topic=None): - kwargs = {} - - if isinstance(topic, int): - kwargs['topic_id'] = topic - elif isinstance(topic, Topic): - kwargs['topic'] = topic - - return Or( - IsAtleastSuperModerator, - IsModeratorInForum(), - And(Has('postreply'), TopicNotLocked(**kwargs)) - )(user, request) - return _ - - -def TplCanEditPost(request): - def _(user, topic_or_post=None): - kwargs = {} - - if isinstance(topic_or_post, int): - kwargs['topic_id'] = topic_or_post - elif isinstance(topic_or_post, Topic): - kwargs['topic'] = topic_or_post - elif isinstance(topic_or_post, Post): - kwargs['post'] = topic_or_post - - return Or( - IsAtleastSuperModerator, - And(IsModeratorInForum(), Has('editpost')), - And( - IsSameUser(topic_or_post), - Has('editpost'), - TopicNotLocked(**kwargs) - ), - )(user, request) - return _ - -TplCanDeletePost = TplCanEditPost - - -def TplCanPostTopic(request): - def _(user, forum): - kwargs = {} - - if isinstance(forum, int): - kwargs['forum_id'] = forum - elif isinstance(forum, Forum): - kwargs['forum'] = forum - - return Or( - IsAtleastSuperModerator, - IsModeratorInForum(**kwargs), - And(Has('posttopic'), ForumNotLocked(**kwargs)) - )(user, request) - return _ - - -def TplCanDeleteTopic(request): - def _(user, topic=None): - kwargs = {} - - if isinstance(topic, int): - kwargs['topic_id'] = topic - elif isinstance(topic, Topic): - kwargs['topic'] = topic - - return Or( - IsAtleastSuperModerator, - And(IsModeratorInForum(), Has('deletetopic')), - And(IsSameUser(), Has('deletetopic'), TopicNotLocked(**kwargs)) - )(user, request) - return _ diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/settings.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/settings.py deleted file mode 100644 index 7fe212c2..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/settings.py +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.utils.settings - ~~~~~~~~~~~~~~~~~~~~~~ - - This module contains the interface for interacting with FlaskBB's - configuration. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import collections - -from flaskbb.management.models import Setting - - -class FlaskBBConfig(collections.MutableMapping): - """Provides a dictionary like interface for interacting with FlaskBB's - Settings cache. - """ - - def __init__(self, *args, **kwargs): - self.update(dict(*args, **kwargs)) - - def __getitem__(self, key): - return Setting.as_dict()[key] - - def __setitem__(self, key, value): - Setting.update({key.lower(): value}) - - def __delitem__(self, key): # pragma: no cover - pass - - def __iter__(self): - return iter(Setting.as_dict()) - - def __len__(self): - return len(Setting.as_dict()) - - -flaskbb_config = FlaskBBConfig() diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/translations.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/translations.py deleted file mode 100644 index 8340f649..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/translations.py +++ /dev/null @@ -1,64 +0,0 @@ -import os - -import babel - -from flask_babelplus import Domain, get_locale -from flask_plugins import get_enabled_plugins - - -class FlaskBBDomain(Domain): - def __init__(self, app): - self.app = app - super(FlaskBBDomain, self).__init__() - - self.plugins_folder = os.path.join( - os.path.join(self.app.root_path, "plugins") - ) - - # FlaskBB's translations - self.flaskbb_translations = os.path.join( - self.app.root_path, "translations" - ) - - # Plugin translations - with self.app.app_context(): - self.plugin_translations = [ - os.path.join(plugin.path, "translations") - for plugin in get_enabled_plugins() - ] - - def get_translations(self): - """Returns the correct gettext translations that should be used for - this request. This will never fail and return a dummy translation - object if used outside of the request or if a translation cannot be - found. - """ - locale = get_locale() - cache = self.get_translations_cache() - - translations = cache.get(str(locale)) - if translations is None: - # load flaskbb translations - translations = babel.support.Translations.load( - dirname=self.flaskbb_translations, - locales=locale, - domain="messages" - ) - - # If no compiled translations are found, return the - # NullTranslations object. - if not isinstance(translations, babel.support.Translations): - return translations - - # now load and add the plugin translations - for plugin in self.plugin_translations: - plugin_translation = babel.support.Translations.load( - dirname=plugin, - locales=locale, - domain="messages" - ) - translations.add(plugin_translation) - - cache[str(locale)] = translations - - return translations diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/views.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/views.py deleted file mode 100644 index b11a9c2f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/views.py +++ /dev/null @@ -1,12 +0,0 @@ -from flaskbb.utils.helpers import render_template -from flask.views import View - - -class RenderableView(View): - def __init__(self, template, view): - self.template = template - self.view = view - - def dispatch_request(self, *args, **kwargs): - view_model = self.view(*args, **kwargs) - return render_template(self.template, **view_model) diff --git a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/widgets.py b/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/widgets.py deleted file mode 100644 index 22c4b8c4..00000000 --- a/profiling/test_projects/flaskbb_lite_3/flaskbb/utils/widgets.py +++ /dev/null @@ -1,125 +0,0 @@ -# -*- coding: utf-8 -*- -""" - flaskbb.utils.widgets - ~~~~~~~~~~~~~~~~~~~~~ - - Additional widgets for wtforms - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -import simplejson as json -from datetime import datetime -from wtforms.widgets.core import Select, HTMLString, html_params - - -class SelectBirthdayWidget(object): - """Renders a DateTime field with 3 selects. - For more information see: http://stackoverflow.com/a/14664504 - """ - FORMAT_CHOICES = { - '%d': [(x, str(x)) for x in range(1, 32)], - '%m': [(x, str(x)) for x in range(1, 13)] - } - - FORMAT_CLASSES = { - '%d': 'select_date_day', - '%m': 'select_date_month', - '%Y': 'select_date_year' - } - - def __init__(self, years=range(1930, datetime.utcnow().year + 1)): - """Initialzes the widget. - - :param years: The min year which should be chooseable. - Defatuls to ``1930``. - """ - super(SelectBirthdayWidget, self).__init__() - self.FORMAT_CHOICES['%Y'] = [(x, str(x)) for x in years] - - def __call__(self, field, **kwargs): - field_id = kwargs.pop('id', field.id) - html = [] - allowed_format = ['%d', '%m', '%Y'] - surrounded_div = kwargs.pop('surrounded_div', None) - css_class = kwargs.get('class', None) - - for date_format in field.format.split(): - if date_format in allowed_format: - choices = self.FORMAT_CHOICES[date_format] - id_suffix = date_format.replace('%', '-') - id_current = field_id + id_suffix - - if css_class is not None: # pragma: no cover - select_class = "{} {}".format( - css_class, self.FORMAT_CLASSES[date_format] - ) - else: - select_class = self.FORMAT_CLASSES[date_format] - - kwargs['class'] = select_class - - try: - del kwargs['placeholder'] - except KeyError: - pass - - if surrounded_div is not None: - html.append('
    ' % surrounded_div) - - html.append('') - - if surrounded_div is not None: - html.append("
    ") - - html.append(' ') - - return HTMLString(''.join(html)) - - -class MultiSelect(object): - """ - Renders a megalist-multiselect widget. - - - The field must provide an `iter_choices()` method which the widget will - call on rendering; this method must yield tuples of - `(value, label, selected)`. - """ - - def __call__(self, field, **kwargs): - kwargs.setdefault('id', field.id) - src_list, dst_list = [], [] - - for val, label, selected in field.iter_choices(): - if selected: - dst_list.append({'label':label, 'listValue':val}) - else: - src_list.append({'label':label, 'listValue':val}) - kwargs.update( - { - 'data-provider-src':json.dumps(src_list), - 'data-provider-dst':json.dumps(dst_list) - } - ) - html = ['
    ' % html_params(name=field.name, **kwargs)] - html.append('
    ') - return HTMLString(''.join(html)) diff --git a/profiling/test_projects/flaskbb_lite_3/logs/.gitkeep b/profiling/test_projects/flaskbb_lite_3/logs/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/manage.py b/profiling/test_projects/flaskbb_lite_3/manage.py deleted file mode 100755 index 19e09941..00000000 --- a/profiling/test_projects/flaskbb_lite_3/manage.py +++ /dev/null @@ -1,317 +0,0 @@ -#!/usr/bin/env python - -""" - flaskbb.manage - ~~~~~~~~~~~~~~~~~~~~ - - This script provides some easy to use commands for - creating the database with or without some sample content. - You can also run the development server with it. - Just type `python manage.py` to see the full list of commands. - - TODO: When Flask 1.0 is released, get rid of Flask-Script and use click. - Then it's also possible to split the commands in "command groups" - which would make the commands better seperated from each other - and less confusing. - - :copyright: (c) 2014 by the FlaskBB Team. - :license: BSD, see LICENSE for more details. -""" -from __future__ import print_function -import sys -import os -import subprocess -import requests - -from flask import current_app -from werkzeug.utils import import_string -from sqlalchemy.exc import IntegrityError, OperationalError -from flask_script import (Manager, Shell, Server, prompt, prompt_pass, - prompt_bool) -from flask_migrate import MigrateCommand, upgrade - -from flaskbb import create_app -from flaskbb.extensions import db, plugin_manager -from flaskbb.utils.populate import (create_test_data, create_welcome_forum, - create_admin_user, create_default_groups, - create_default_settings, insert_mass_data, - update_settings_from_fixture) - -# Use the development configuration if available -try: - from flaskbb.configs.development import DevelopmentConfig as Config -except ImportError: - from flaskbb.configs.default import DefaultConfig as Config - -app = create_app(Config) -manager = Manager(app) - -# Used to get the plugin translations -PLUGINS_FOLDER = os.path.join(app.root_path, "plugins") - -# Run local server -manager.add_command("runserver", Server("localhost", port=8080)) - -# Migration commands -manager.add_command('db', MigrateCommand) - - -# Add interactive project shell -def make_shell_context(): - return dict(app=current_app, db=db) -manager.add_command("shell", Shell(make_context=make_shell_context)) - - -@manager.command -def initdb(): - """Creates the database.""" - - upgrade() - - -@manager.command -def dropdb(): - """Deletes the database.""" - - db.drop_all() - - -@manager.command -def populate(dropdb=False, createdb=False): - """Creates the database with some default data. - To drop or create the databse use the '-d' or '-c' options. - """ - - if dropdb: - print("Dropping database...") - db.drop_all() - - if createdb: - print("Creating database...") - upgrade() - - app.logger.info("Creating test data...") - create_test_data() - - -@manager.option('-u', '--username', dest='username') -@manager.option('-p', '--password', dest='password') -@manager.option('-e', '--email', dest='email') -def create_admin(username=None, password=None, email=None): - """Creates the admin user.""" - - if not (username and password and email): - username = prompt("Username") - email = prompt("A valid email address") - password = prompt_pass("Password") - - create_admin_user(username=username, password=password, email=email) - - -@manager.option('-u', '--username', dest='username') -@manager.option('-p', '--password', dest='password') -@manager.option('-e', '--email', dest='email') -def install(username=None, password=None, email=None): - """Installs FlaskBB with all necessary data.""" - - print("Creating default data...") - try: - create_default_groups() - create_default_settings() - except IntegrityError: - print("Couldn't create the default data because it already exist!") - if prompt_bool("Found an existing database." - "Do you want to recreate the database? (y/n)"): - db.session.rollback() - db.drop_all() - upgrade() - create_default_groups() - create_default_settings() - else: - sys.exit(0) - except OperationalError: - print("No database found.") - if prompt_bool("Do you want to create the database now? (y/n)"): - db.session.rollback() - upgrade() - create_default_groups() - create_default_settings() - else: - sys.exit(0) - - print("Creating admin user...") - if username and password and email: - create_admin_user(username=username, password=password, email=email) - else: - create_admin() - - print("Creating welcome forum...") - create_welcome_forum() - - print("Compiling translations...") - compile_translations() - - if prompt_bool("Do you want to use Emojis? (y/n)"): - print("Downloading emojis. This can take a few minutes.") - download_emoji() - - print("Congratulations! FlaskBB has been successfully installed") - - -@manager.command -def insertmassdata(): - """Warning: This can take a long time!. - Creates 100 topics and each topic contains 100 posts. - """ - insert_mass_data() - - -@manager.option('-s', '--settings', dest="settings") -@manager.option('-f', '--force', dest="force", default=False) -def update(settings=None, force=False): - """Updates the settings via a fixture. All fixtures have to be placed - in the `fixture`. - Usage: python manage.py update -s your_fixture - """ - - try: - fixture = import_string( - "flaskbb.fixtures.{}".format(settings) - ) - fixture = fixture.fixture - except ImportError: - raise "{} fixture is not available".format(settings) - - overwrite_group = overwrite_setting = False - if force: - overwrite_group = overwrite_setting = True - - count = update_settings_from_fixture( - fixture=fixture, - overwrite_group=overwrite_group, - overwrite_setting=overwrite_setting - ) - print("{} groups and {} settings updated.".format( - len(count.keys()), len(count.values())) - ) - - -@manager.command -def update_translations(): - """Updates all translations.""" - - # update flaskbb translations - translations_folder = os.path.join(app.root_path, "translations") - source_file = os.path.join(translations_folder, "messages.pot") - - subprocess.call(["pybabel", "extract", "-F", "babel.cfg", - "-k", "lazy_gettext", "-o", source_file, "."]) - subprocess.call(["pybabel", "update", "-i", source_file, - "-d", translations_folder]) - - # updates all plugin translations too - for plugin in plugin_manager.all_plugins: - update_plugin_translations(plugin) - - -@manager.command -def add_translations(translation): - """Adds a new language to the translations.""" - - translations_folder = os.path.join(app.root_path, "translations") - source_file = os.path.join(translations_folder, "messages.pot") - - subprocess.call(["pybabel", "extract", "-F", "babel.cfg", - "-k", "lazy_gettext", "-o", source_file, "."]) - subprocess.call(["pybabel", "init", "-i", source_file, - "-d", translations_folder, "-l", translation]) - - -@manager.command -def compile_translations(): - """Compiles all translations.""" - - # compile flaskbb translations - translations_folder = os.path.join(app.root_path, "translations") - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - # compile all plugin translations - for plugin in plugin_manager.all_plugins: - compile_plugin_translations(plugin) - - -# Plugin translation commands -@manager.command -def add_plugin_translations(plugin, translation): - """Adds a new language to the plugin translations. Expects the name - of the plugin and the translations name like "en". - """ - - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - source_file = os.path.join(translations_folder, "messages.pot") - - subprocess.call(["pybabel", "extract", "-F", "babel.cfg", - "-k", "lazy_gettext", "-o", source_file, - plugin_folder]) - subprocess.call(["pybabel", "init", "-i", source_file, - "-d", translations_folder, "-l", translation]) - - -@manager.command -def update_plugin_translations(plugin): - """Updates the plugin translations. Expects the name of the plugin.""" - - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - source_file = os.path.join(translations_folder, "messages.pot") - - subprocess.call(["pybabel", "extract", "-F", "babel.cfg", - "-k", "lazy_gettext", "-o", source_file, - plugin_folder]) - subprocess.call(["pybabel", "update", "-i", source_file, - "-d", translations_folder]) - - -@manager.command -def compile_plugin_translations(plugin): - """Compile the plugin translations. Expects the name of the plugin.""" - - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - -@manager.command -def download_emoji(): - """Downloads emojis from emoji-cheat-sheet.com.""" - HOSTNAME = "https://api.github.com" - REPO = "/repos/arvida/emoji-cheat-sheet.com/contents/public/graphics/emojis" - FULL_URL = "{}{}".format(HOSTNAME, REPO) - DOWNLOAD_PATH = os.path.join(app.static_folder, "emoji") - - response = requests.get(FULL_URL) - - cached_count = 0 - count = 0 - for image in response.json(): - if not os.path.exists(os.path.abspath(DOWNLOAD_PATH)): - print("{} does not exist.".format(os.path.abspath(DOWNLOAD_PATH))) - sys.exit(1) - - full_path = os.path.join(DOWNLOAD_PATH, image["name"]) - if not os.path.exists(full_path): - count += 1 - f = open(full_path, 'wb') - f.write(requests.get(image["download_url"]).content) - f.close() - if count == cached_count + 50: - cached_count = count - print("{} out of {} Emojis downloaded...".format( - cached_count, len(response.json()))) - - print("Finished downloading {} Emojis.".format(count)) - -if __name__ == "__main__": - manager.run() diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/README b/profiling/test_projects/flaskbb_lite_3/migrations/README deleted file mode 100644 index 98e4f9c4..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration. \ No newline at end of file diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/alembic.ini b/profiling/test_projects/flaskbb_lite_3/migrations/alembic.ini deleted file mode 100644 index f8ed4801..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/alembic.ini +++ /dev/null @@ -1,45 +0,0 @@ -# A generic, single database configuration. - -[alembic] -# template used to generate migration files -# file_template = %%(rev)s_%%(slug)s - -# set to 'true' to run the environment during -# the 'revision' command, regardless of autogenerate -# revision_environment = false - - -# Logging configuration -[loggers] -keys = root,sqlalchemy,alembic - -[handlers] -keys = console - -[formatters] -keys = generic - -[logger_root] -level = WARN -handlers = console -qualname = - -[logger_sqlalchemy] -level = WARN -handlers = -qualname = sqlalchemy.engine - -[logger_alembic] -level = INFO -handlers = -qualname = alembic - -[handler_console] -class = StreamHandler -args = (sys.stderr,) -level = NOTSET -formatter = generic - -[formatter_generic] -format = %(levelname)-5.5s [%(name)s] %(message)s -datefmt = %H:%M:%S diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/env.py b/profiling/test_projects/flaskbb_lite_3/migrations/env.py deleted file mode 100644 index 70961ce2..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/env.py +++ /dev/null @@ -1,73 +0,0 @@ -from __future__ import with_statement -from alembic import context -from sqlalchemy import engine_from_config, pool -from logging.config import fileConfig - -# this is the Alembic Config object, which provides -# access to the values within the .ini file in use. -config = context.config - -# Interpret the config file for Python logging. -# This line sets up loggers basically. -fileConfig(config.config_file_name) - -# add your model's MetaData object here -# for 'autogenerate' support -# from myapp import mymodel -# target_metadata = mymodel.Base.metadata -from flask import current_app -config.set_main_option('sqlalchemy.url', current_app.config.get('SQLALCHEMY_DATABASE_URI')) -target_metadata = current_app.extensions['migrate'].db.metadata - -# other values from the config, defined by the needs of env.py, -# can be acquired: -# my_important_option = config.get_main_option("my_important_option") -# ... etc. - -def run_migrations_offline(): - """Run migrations in 'offline' mode. - - This configures the context with just a URL - and not an Engine, though an Engine is acceptable - here as well. By skipping the Engine creation - we don't even need a DBAPI to be available. - - Calls to context.execute() here emit the given string to the - script output. - - """ - url = config.get_main_option("sqlalchemy.url") - context.configure(url=url) - - with context.begin_transaction(): - context.run_migrations() - -def run_migrations_online(): - """Run migrations in 'online' mode. - - In this scenario we need to create an Engine - and associate a connection with the context. - - """ - engine = engine_from_config( - config.get_section(config.config_ini_section), - prefix='sqlalchemy.', - poolclass=pool.NullPool) - - connection = engine.connect() - context.configure( - connection=connection, - target_metadata=target_metadata - ) - - try: - with context.begin_transaction(): - context.run_migrations() - finally: - connection.close() - -if context.is_offline_mode(): - run_migrations_offline() -else: - run_migrations_online() - diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/script.py.mako b/profiling/test_projects/flaskbb_lite_3/migrations/script.py.mako deleted file mode 100644 index 95702017..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/script.py.mako +++ /dev/null @@ -1,22 +0,0 @@ -"""${message} - -Revision ID: ${up_revision} -Revises: ${down_revision} -Create Date: ${create_date} - -""" - -# revision identifiers, used by Alembic. -revision = ${repr(up_revision)} -down_revision = ${repr(down_revision)} - -from alembic import op -import sqlalchemy as sa -${imports if imports else ""} - -def upgrade(): - ${upgrades if upgrades else "pass"} - - -def downgrade(): - ${downgrades if downgrades else "pass"} diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py b/profiling/test_projects/flaskbb_lite_3/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py deleted file mode 100644 index 9408a6a7..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/versions/127be3fb000_added_m2m_forumgroups_table.py +++ /dev/null @@ -1,31 +0,0 @@ -"""Added m2m forumgroups table - -Revision ID: 127be3fb000 -Revises: 514ca0a3282c -Create Date: 2015-04-08 22:25:52.809557 - -""" - -# revision identifiers, used by Alembic. -revision = '127be3fb000' -down_revision = '514ca0a3282c' - -from alembic import op -import sqlalchemy as sa - - -def upgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_table('forumgroups', - sa.Column('group_id', sa.Integer(), nullable=False), - sa.Column('forum_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True), - sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ) - ) - ### end Alembic commands ### - - -def downgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.drop_table('forumgroups') - ### end Alembic commands ### diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/versions/514ca0a3282c_private_messages.py b/profiling/test_projects/flaskbb_lite_3/migrations/versions/514ca0a3282c_private_messages.py deleted file mode 100644 index a3e865b9..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/versions/514ca0a3282c_private_messages.py +++ /dev/null @@ -1,70 +0,0 @@ -"""Private Messages - -Revision ID: 514ca0a3282c -Revises: 8ad96e49dc6 -Create Date: 2015-03-22 21:57:57.444251 - -""" - -# revision identifiers, used by Alembic. -revision = '514ca0a3282c' -down_revision = '8ad96e49dc6' - -from alembic import op -import sqlalchemy as sa -import sqlalchemy_utils - - -def upgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_table('conversations', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('from_user_id', sa.Integer(), nullable=True), - sa.Column('to_user_id', sa.Integer(), nullable=True), - sa.Column('shared_id', sqlalchemy_utils.types.uuid.UUIDType(binary=16), nullable=False), - sa.Column('subject', sa.String(length=255), nullable=True), - sa.Column('date_created', sa.DateTime(), nullable=True), - sa.Column('trash', sa.Boolean(), nullable=False), - sa.Column('draft', sa.Boolean(), nullable=False), - sa.Column('unread', sa.Boolean(), nullable=False), - sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ), - sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('messages', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('conversation_id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('message', sa.Text(), nullable=False), - sa.Column('date_created', sa.DateTime(), nullable=True), - sa.ForeignKeyConstraint(['conversation_id'], ['conversations.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.drop_table('privatemessages') - ### end Alembic commands ### - - -def downgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_table('privatemessages', - sa.Column('id', sa.INTEGER(), nullable=False), - sa.Column('user_id', sa.INTEGER(), nullable=False), - sa.Column('from_user_id', sa.INTEGER(), nullable=True), - sa.Column('to_user_id', sa.INTEGER(), nullable=True), - sa.Column('subject', sa.VARCHAR(length=255), nullable=True), - sa.Column('message', sa.TEXT(), nullable=True), - sa.Column('date_created', sa.DATETIME(), nullable=True), - sa.Column('trash', sa.BOOLEAN(), nullable=False), - sa.Column('draft', sa.BOOLEAN(), nullable=False), - sa.Column('unread', sa.BOOLEAN(), nullable=False), - sa.ForeignKeyConstraint(['from_user_id'], [u'users.id'], ), - sa.ForeignKeyConstraint(['to_user_id'], [u'users.id'], ), - sa.ForeignKeyConstraint(['user_id'], [u'users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.drop_table('messages') - op.drop_table('conversations') - ### end Alembic commands ### diff --git a/profiling/test_projects/flaskbb_lite_3/migrations/versions/8ad96e49dc6_init.py b/profiling/test_projects/flaskbb_lite_3/migrations/versions/8ad96e49dc6_init.py deleted file mode 100644 index d84d9cb6..00000000 --- a/profiling/test_projects/flaskbb_lite_3/migrations/versions/8ad96e49dc6_init.py +++ /dev/null @@ -1,225 +0,0 @@ -"""init - -Revision ID: 8ad96e49dc6 -Revises: None -Create Date: 2015-01-08 23:14:01.941746 - -""" - -# revision identifiers, used by Alembic. -revision = '8ad96e49dc6' -down_revision = None - -from alembic import op -import sqlalchemy as sa - - -def upgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.create_table('groups', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('name', sa.String(length=255), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('admin', sa.Boolean(), nullable=False), - sa.Column('super_mod', sa.Boolean(), nullable=False), - sa.Column('mod', sa.Boolean(), nullable=False), - sa.Column('guest', sa.Boolean(), nullable=False), - sa.Column('banned', sa.Boolean(), nullable=False), - sa.Column('mod_edituser', sa.Boolean(), nullable=False), - sa.Column('mod_banuser', sa.Boolean(), nullable=False), - sa.Column('editpost', sa.Boolean(), nullable=False), - sa.Column('deletepost', sa.Boolean(), nullable=False), - sa.Column('deletetopic', sa.Boolean(), nullable=False), - sa.Column('posttopic', sa.Boolean(), nullable=False), - sa.Column('postreply', sa.Boolean(), nullable=False), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('name') - ) - op.create_table('categories', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('title', sa.String(length=255), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('position', sa.Integer(), nullable=False), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('settingsgroup', - sa.Column('key', sa.String(length=255), nullable=False), - sa.Column('name', sa.String(length=255), nullable=False), - sa.Column('description', sa.Text(), nullable=False), - sa.PrimaryKeyConstraint('key') - ) - op.create_table('settings', - sa.Column('key', sa.String(length=255), nullable=False), - sa.Column('value', sa.PickleType(), nullable=False), - sa.Column('settingsgroup', sa.String(length=255), nullable=False), - sa.Column('name', sa.String(length=200), nullable=False), - sa.Column('description', sa.Text(), nullable=False), - sa.Column('value_type', sa.String(length=20), nullable=False), - sa.Column('extra', sa.PickleType(), nullable=True), - sa.ForeignKeyConstraint(['settingsgroup'], ['settingsgroup.key'], name='fk_settingsgroup', use_alter=True), - sa.PrimaryKeyConstraint('key') - ) - op.create_table('users', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('username', sa.String(length=200), nullable=False), - sa.Column('email', sa.String(length=200), nullable=False), - sa.Column('password', sa.String(length=120), nullable=False), - sa.Column('date_joined', sa.DateTime(), nullable=True), - sa.Column('lastseen', sa.DateTime(), nullable=True), - sa.Column('birthday', sa.DateTime(), nullable=True), - sa.Column('gender', sa.String(length=10), nullable=True), - sa.Column('website', sa.String(length=200), nullable=True), - sa.Column('location', sa.String(length=100), nullable=True), - sa.Column('signature', sa.Text(), nullable=True), - sa.Column('avatar', sa.String(length=200), nullable=True), - sa.Column('notes', sa.Text(), nullable=True), - sa.Column('theme', sa.String(length=15), nullable=True), - sa.Column('language', sa.String(length=15), nullable=True), - sa.Column('post_count', sa.Integer(), nullable=True), - sa.Column('primary_group_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['primary_group_id'], ['groups.id'], ), - sa.PrimaryKeyConstraint('id'), - sa.UniqueConstraint('email'), - sa.UniqueConstraint('username') - ) - op.create_table('topictracker', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('topic_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tracker_topic_id', use_alter=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ) - ) - op.create_table('groups_users', - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('group_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['group_id'], ['groups.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ) - ) - op.create_table('forumsread', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('forum_id', sa.Integer(), nullable=False), - sa.Column('last_read', sa.DateTime(), nullable=True), - sa.Column('cleared', sa.DateTime(), nullable=True), - sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_fr_forum_id', use_alter=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('user_id', 'forum_id') - ) - op.create_table('moderators', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('forum_id', sa.Integer(), nullable=False), - sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_forum_id', use_alter=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ) - ) - op.create_table('posts', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('topic_id', sa.Integer(), nullable=True), - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('username', sa.String(length=200), nullable=False), - sa.Column('content', sa.Text(), nullable=False), - sa.Column('date_created', sa.DateTime(), nullable=True), - sa.Column('date_modified', sa.DateTime(), nullable=True), - sa.Column('modified_by', sa.String(length=200), nullable=True), - sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_post_topic_id', ondelete='CASCADE', use_alter=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('privatemessages', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('from_user_id', sa.Integer(), nullable=True), - sa.Column('to_user_id', sa.Integer(), nullable=True), - sa.Column('subject', sa.String(length=255), nullable=True), - sa.Column('message', sa.Text(), nullable=True), - sa.Column('date_created', sa.DateTime(), nullable=True), - sa.Column('trash', sa.Boolean(), nullable=False), - sa.Column('draft', sa.Boolean(), nullable=False), - sa.Column('unread', sa.Boolean(), nullable=False), - sa.ForeignKeyConstraint(['from_user_id'], ['users.id'], ), - sa.ForeignKeyConstraint(['to_user_id'], ['users.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('topicsread', - sa.Column('user_id', sa.Integer(), nullable=False), - sa.Column('topic_id', sa.Integer(), nullable=False), - sa.Column('forum_id', sa.Integer(), nullable=False), - sa.Column('last_read', sa.DateTime(), nullable=True), - sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_tr_forum_id', use_alter=True), - sa.ForeignKeyConstraint(['topic_id'], ['topics.id'], name='fk_tr_topic_id', use_alter=True), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('user_id', 'topic_id', 'forum_id') - ) - op.create_table('topics', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('forum_id', sa.Integer(), nullable=False), - sa.Column('title', sa.String(length=255), nullable=False), - sa.Column('user_id', sa.Integer(), nullable=True), - sa.Column('username', sa.String(length=200), nullable=False), - sa.Column('date_created', sa.DateTime(), nullable=True), - sa.Column('last_updated', sa.DateTime(), nullable=True), - sa.Column('locked', sa.Boolean(), nullable=True), - sa.Column('important', sa.Boolean(), nullable=True), - sa.Column('views', sa.Integer(), nullable=True), - sa.Column('post_count', sa.Integer(), nullable=True), - sa.Column('first_post_id', sa.Integer(), nullable=True), - sa.Column('last_post_id', sa.Integer(), nullable=True), - sa.ForeignKeyConstraint(['first_post_id'], ['posts.id'], ondelete='CASCADE'), - sa.ForeignKeyConstraint(['forum_id'], ['forums.id'], name='fk_topic_forum_id', use_alter=True), - sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ), - sa.ForeignKeyConstraint(['user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('reports', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('reporter_id', sa.Integer(), nullable=False), - sa.Column('reported', sa.DateTime(), nullable=True), - sa.Column('post_id', sa.Integer(), nullable=False), - sa.Column('zapped', sa.DateTime(), nullable=True), - sa.Column('zapped_by', sa.Integer(), nullable=True), - sa.Column('reason', sa.Text(), nullable=True), - sa.ForeignKeyConstraint(['post_id'], ['posts.id'], ), - sa.ForeignKeyConstraint(['reporter_id'], ['users.id'], ), - sa.ForeignKeyConstraint(['zapped_by'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - op.create_table('forums', - sa.Column('id', sa.Integer(), nullable=False), - sa.Column('category_id', sa.Integer(), nullable=False), - sa.Column('title', sa.String(length=255), nullable=False), - sa.Column('description', sa.Text(), nullable=True), - sa.Column('position', sa.Integer(), nullable=False), - sa.Column('locked', sa.Boolean(), nullable=False), - sa.Column('show_moderators', sa.Boolean(), nullable=False), - sa.Column('external', sa.String(length=200), nullable=True), - sa.Column('post_count', sa.Integer(), nullable=False), - sa.Column('topic_count', sa.Integer(), nullable=False), - sa.Column('last_post_id', sa.Integer(), nullable=True), - sa.Column('last_post_title', sa.String(length=255), nullable=True), - sa.Column('last_post_user_id', sa.Integer(), nullable=True), - sa.Column('last_post_username', sa.String(length=255), nullable=True), - sa.Column('last_post_created', sa.DateTime(), nullable=True), - sa.ForeignKeyConstraint(['category_id'], ['categories.id'], ), - sa.ForeignKeyConstraint(['last_post_id'], ['posts.id'], ), - sa.ForeignKeyConstraint(['last_post_user_id'], ['users.id'], ), - sa.PrimaryKeyConstraint('id') - ) - ### end Alembic commands ### - - -def downgrade(): - ### commands auto generated by Alembic - please adjust! ### - op.drop_table('forums') - op.drop_table('reports') - op.drop_table('topics') - op.drop_table('topicsread') - op.drop_table('privatemessages') - op.drop_table('posts') - op.drop_table('moderators') - op.drop_table('forumsread') - op.drop_table('groups_users') - op.drop_table('topictracker') - op.drop_table('users') - op.drop_table('settings') - op.drop_table('settingsgroup') - op.drop_table('categories') - op.drop_table('groups') - ### end Alembic commands ### diff --git a/profiling/test_projects/flaskbb_lite_3/mprof.py b/profiling/test_projects/flaskbb_lite_3/mprof.py deleted file mode 100644 index 6c3c6a99..00000000 --- a/profiling/test_projects/flaskbb_lite_3/mprof.py +++ /dev/null @@ -1,512 +0,0 @@ -#!/usr/bin/env python - -import glob -import os -import os.path as osp -import sys -import re -import copy -import time -import math - -from optparse import OptionParser, OptionValueError - -import memory_profiler as mp - -ALL_ACTIONS = ("run", "rm", "clean", "list", "plot") -help_msg = """ -Available commands: - - run run a given command or python file - rm remove a given file generated by mprof - clean clean the current directory from files created by mprof - list display existing profiles, with indices - plot plot memory consumption generated by mprof run - -Type mprof --help for usage help on a specific command. -For example, mprof plot --help will list all plotting options. -""" - -def print_usage(): - print("Usage: %s " - % osp.basename(sys.argv[0])) - print(help_msg) - - - -def get_action(): - """Pop first argument, check it is a valid action.""" - if len(sys.argv) <= 1: - print_usage() - sys.exit(1) - if not sys.argv[1] in ALL_ACTIONS: - print_usage() - sys.exit(1) - - return sys.argv.pop(1) - - -def get_profile_filenames(args): - """Return list of profile filenames. - - Parameters - ========== - args (list) - list of filename or integer. An integer is the index of the - profile in the list of existing profiles. 0 is the oldest, - -1 in the more recent. - Non-existing files cause a ValueError exception to be thrown. - - Returns - ======= - filenames (list) - list of existing memory profile filenames. It is guaranteed - that an given file name will not appear twice in this list. - """ - profiles = glob.glob("mprofile_??????????????.dat") - profiles.sort() - - if args is "all": - filenames = copy.copy(profiles) - else: - filenames = [] - for arg in args: - if arg == "--": # workaround - continue - try: - index = int(arg) - except ValueError: - index = None - if index is not None: - try: - filename = profiles[index] - except IndexError: - raise ValueError("Invalid index (non-existing file): %s" % arg) - - if filename not in filenames: - filenames.append(filename) - else: - if osp.isfile(arg): - if arg not in filenames: - filenames.append(arg) - elif osp.isdir(arg): - raise ValueError("Path %s is a directory" % arg) - else: - raise ValueError("File %s not found" % arg) - - # Add timestamp files, if any - for filename in reversed(filenames): - parts = osp.splitext(filename) - timestamp_file = parts[0] + "_ts" + parts[1] - if osp.isfile(timestamp_file) and timestamp_file not in filenames: - filenames.append(timestamp_file) - - return filenames - - -def list_action(): - """Display existing profiles, with indices.""" - parser = OptionParser(version=mp.__version__) - parser.disable_interspersed_args() - - (options, args) = parser.parse_args() - - if len(args) > 0: - print("This command takes no argument.") - sys.exit(1) - - filenames = get_profile_filenames("all") - for n, filename in enumerate(filenames): - ts = osp.splitext(filename)[0].split('_')[-1] - print("{index} {filename} {hour}:{min}:{sec} {day}/{month}/{year}" - .format(index=n, filename=filename, - year=ts[:4], month=ts[4:6], day=ts[6:8], - hour=ts[8:10], min=ts[10:12], sec=ts[12:14])) - - -def rm_action(): - """TODO: merge with clean_action (@pgervais)""" - parser = OptionParser(version=mp.__version__) - parser.disable_interspersed_args() - parser.add_option("--dry-run", dest="dry_run", default=False, - action="store_true", - help="""Show what will be done, without actually doing it.""") - - (options, args) = parser.parse_args() - - if len(args) == 0: - print("A profile to remove must be provided (number or filename)") - sys.exit(1) - - filenames = get_profile_filenames(args) - if options.dry_run: - print("Files to be removed: ") - for filename in filenames: - print(filename) - else: - for filename in filenames: - os.remove(filename) - - -def clean_action(): - """Remove every profile file in current directory.""" - parser = OptionParser(version=mp.__version__) - parser.disable_interspersed_args() - parser.add_option("--dry-run", dest="dry_run", default=False, - action="store_true", - help="""Show what will be done, without actually doing it.""") - - (options, args) = parser.parse_args() - - if len(args) > 0: - print("This command takes no argument.") - sys.exit(1) - - filenames = get_profile_filenames("all") - if options.dry_run: - print("Files to be removed: ") - for filename in filenames: - print(filename) - else: - for filename in filenames: - os.remove(filename) - - -def get_cmd_line(args): - """Given a set or arguments, compute command-line.""" - blanks = set(' \t') - args = [s if blanks.isdisjoint(s) else "'" + s + "'" for s in args] - return ' '.join(args) - - -def run_action(): - import time, subprocess - parser = OptionParser(version=mp.__version__) - parser.disable_interspersed_args() - parser.add_option("--python", dest="python", default=False, - action="store_true", - help="""Activates extra features when the profiled executable is - a Python program (currently: function timestamping.)""") - parser.add_option("--nopython", dest="nopython", default=False, - action="store_true", - help="""Disables extra features when the profiled executable is - a Python program (currently: function timestamping.)""") - parser.add_option("--interval", "-T", dest="interval", default="0.1", - type="float", action="store", - help="Sampling period (in seconds), defaults to 0.1") - parser.add_option("--include-children", "-C", dest="include_children", - default=False, action="store_true", - help="""Monitors forked processes as well (sum up all process memory)""") - - (options, args) = parser.parse_args() - - if len(args) == 0: - print("A program to run must be provided. Use -h for help") - sys.exit(1) - - print("{1}: Sampling memory every {0.interval}s".format( - options, osp.basename(sys.argv[0]))) - - ## Output results in a file called "mprofile_.dat" (where - ## is the date-time of the program start) in the current - ## directory. This file contains the process memory consumption, in Mb (one - ## value per line). Memory is sampled twice each second.""" - - suffix = time.strftime("%Y%m%d%H%M%S", time.localtime()) - mprofile_output = "mprofile_%s.dat" % suffix - - # .. TODO: more than one script as argument ? .. - if args[0].endswith('.py') and not options.nopython: - options.python = True - if options.python: - print("running as a Python program...") - if not args[0].startswith("python"): - args.insert(0, "python") - cmd_line = get_cmd_line(args) - args[1:1] = ("-m", "memory_profiler", "--timestamp", - "-o", mprofile_output) - p = subprocess.Popen(args) - else: - cmd_line = get_cmd_line(args) - p = subprocess.Popen(args) - - with open(mprofile_output, "a") as f: - f.write("CMDLINE {0}\n".format(cmd_line)) - mp.memory_usage(proc=p, interval=options.interval, timestamps=True, - include_children=options.include_children, stream=f) - - -def add_brackets(xloc, yloc, xshift=0, color="r", label=None, options=None): - """Add two brackets on the memory line plot. - - This function uses the current figure. - - Parameters - ========== - xloc: tuple with 2 values - brackets location (on horizontal axis). - yloc: tuple with 2 values - brackets location (on vertical axis) - xshift: float - value to subtract to xloc. - """ - try: - import pylab as pl - except ImportError: - print("matplotlib is needed for plotting.") - sys.exit(1) - height_ratio = 20. - vsize = (pl.ylim()[1] - pl.ylim()[0]) / height_ratio - hsize = (pl.xlim()[1] - pl.xlim()[0]) / (3.*height_ratio) - - bracket_x = pl.asarray([hsize, 0, 0, hsize]) - bracket_y = pl.asarray([vsize, vsize, -vsize, -vsize]) - - # Matplotlib workaround: labels starting with _ aren't displayed - if label[0] == '_': - label = ' ' + label - if options.xlim is None or options.xlim[0] <= (xloc[0] - xshift) <= options.xlim[1]: - pl.plot(bracket_x + xloc[0] - xshift, bracket_y + yloc[0], - "-" + color, linewidth=2, label=label) - if options.xlim is None or options.xlim[0] <= (xloc[1] - xshift) <= options.xlim[1]: - pl.plot(-bracket_x + xloc[1] - xshift, bracket_y + yloc[1], - "-" + color, linewidth=2 ) - - # TODO: use matplotlib.patches.Polygon to draw a colored background for - # each function. - - # with maplotlib 1.2, use matplotlib.path.Path to create proper markers - # see http://matplotlib.org/examples/pylab_examples/marker_path.html - # This works with matplotlib 0.99.1 - ## pl.plot(xloc[0], yloc[0], "<"+color, markersize=7, label=label) - ## pl.plot(xloc[1], yloc[1], ">"+color, markersize=7) - - -def read_mprofile_file(filename): - """Read an mprofile file and return its content. - - Returns - ======= - content: dict - Keys: - - - "mem_usage": (list) memory usage values, in MiB - - "timestamp": (list) time instant for each memory usage value, in - second - - "func_timestamp": (dict) for each function, timestamps and memory - usage upon entering and exiting. - - 'cmd_line': (str) command-line ran for this profile. - """ - func_ts = {} - mem_usage = [] - timestamp = [] - cmd_line = None - f = open(filename, "r") - for l in f: - if l == '\n': - raise ValueError('Sampling time was too short') - field, value = l.split(' ', 1) - if field == "MEM": - # mem, timestamp - values = value.split(' ') - mem_usage.append(float(values[0])) - timestamp.append(float(values[1])) - - elif field == "FUNC": - values = value.split(' ') - f_name, mem_start, start, mem_end, end = values[:5] - ts = func_ts.get(f_name, []) - ts.append([float(start), float(end), - float(mem_start), float(mem_end)]) - func_ts[f_name] = ts - - elif field == "CMDLINE": - cmd_line = value - else: - pass - f.close() - - return {"mem_usage": mem_usage, "timestamp": timestamp, - "func_timestamp": func_ts, 'filename': filename, - 'cmd_line': cmd_line} - - - -def plot_file(filename, index=0, timestamps=True, options=None): - try: - import pylab as pl - except ImportError: - print("matplotlib is needed for plotting.") - sys.exit(1) - import numpy as np # pylab requires numpy anyway - mprofile = read_mprofile_file(filename) - - if len(mprofile['timestamp']) == 0: - print('** No memory usage values have been found in the profile ' - 'file.**\nFile path: {0}\n' - 'File may be empty or invalid.\n' - 'It can be deleted with "mprof rm {0}"'.format( - mprofile['filename'])) - sys.exit(0) - - # Merge function timestamps and memory usage together - ts = mprofile['func_timestamp'] - t = mprofile['timestamp'] - mem = mprofile['mem_usage'] - - if len(ts) > 0: - for values in ts.values(): - for v in values: - t.extend(v[:2]) - mem.extend(v[2:4]) - - mem = np.asarray(mem) - t = np.asarray(t) - ind = t.argsort() - mem = mem[ind] - t = t[ind] - - # Plot curves - global_start = float(t[0]) - t = t - global_start - - max_mem = mem.max() - max_mem_ind = mem.argmax() - - all_colors=("c", "y", "g", "r", "b") - mem_line_colors=("k", "b", "r", "g", "c", "y", "m") - mem_line_label = time.strftime("%d / %m / %Y - start at %H:%M:%S", - time.localtime(global_start)) \ - + ".{0:03d}".format(int(round(math.modf(global_start)[0]*1000))) - - pl.plot(t, mem, "+-" + mem_line_colors[index % len(mem_line_colors)], - label=mem_line_label) - - bottom, top = pl.ylim() - bottom += 0.001 - top -= 0.001 - - # plot timestamps, if any - if len(ts) > 0 and timestamps: - func_num = 0 - for f, exec_ts in ts.items(): - for execution in exec_ts: - add_brackets(execution[:2], execution[2:], xshift=global_start, - color= all_colors[func_num % len(all_colors)], - label=f.split(".")[-1] - + " %.3fs" % (execution[1] - execution[0]), options=options) - func_num += 1 - - if timestamps: - pl.hlines(max_mem, - pl.xlim()[0] + 0.001, pl.xlim()[1] - 0.001, - colors="r", linestyles="--") - pl.vlines(t[max_mem_ind], bottom, top, - colors="r", linestyles="--") - return mprofile - - -def plot_action(): - def get_comma_separated_args(option, opt, value, parser): - try: - newvalue = [float(x) for x in value.split(',')] - except: - raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value) - if len(newvalue) != 2: - raise OptionValueError("'%s' option must contain two numbers separated with a comma" % value) - setattr(parser.values, option.dest, newvalue) - - try: - import pylab as pl - except ImportError: - print("matplotlib is needed for plotting.") - sys.exit(1) - - parser = OptionParser(version=mp.__version__) - parser.disable_interspersed_args() - parser.add_option("--title", "-t", dest="title", default=None, - type="str", action="store", - help="String shown as plot title") - parser.add_option("--no-function-ts", "-n", dest="no_timestamps", - default=False, action="store_true", - help="Do not display function timestamps on plot.") - parser.add_option("--output", "-o", - help="Save plot to file instead of displaying it.") - parser.add_option("--window", "-w", dest="xlim", - type="str", action="callback", - callback=get_comma_separated_args, - help="Plot a time-subset of the data. E.g. to plot between 0 and 20.5 seconds: --window 0,20.5") - (options, args) = parser.parse_args() - - profiles = glob.glob("mprofile_??????????????.dat") - profiles.sort() - - if len(args) == 0: - if len(profiles) == 0: - print("No input file found. \nThis program looks for " - "mprofile_*.dat files, generated by the " - "'mprof run' command.") - sys.exit(-1) - print("Using last profile data.") - filenames = [profiles[-1]] - else: - filenames = [] - for arg in args: - if osp.exists(arg): - if not arg in filenames: - filenames.append(arg) - else: - try: - n = int(arg) - if not profiles[n] in filenames: - filenames.append(profiles[n]) - except ValueError: - print("Input file not found: " + arg) - if not len(filenames): - print("No files found from given input.") - sys.exit(-1) - - fig = pl.figure(figsize=(14, 6), dpi=90) - ax = fig.add_axes([0.1, 0.1, 0.6, 0.75]) - if options.xlim is not None: - pl.xlim(options.xlim[0], options.xlim[1]) - - if len(filenames) > 1 or options.no_timestamps: - timestamps = False - else: - timestamps = True - for n, filename in enumerate(filenames): - mprofile = plot_file(filename, index=n, timestamps=timestamps, options=options) - pl.xlabel("time (in seconds)") - pl.ylabel("memory used (in MiB)") - - if options.title is None and len(filenames) == 1: - pl.title(mprofile['cmd_line']) - else: - if options.title is not None: - pl.title(options.title) - - # place legend within the plot, make partially transparent in - # case it obscures part of the lineplot - leg = ax.legend(loc='center left', bbox_to_anchor=(1, 0.5)) - leg.get_frame().set_alpha(0.5) - pl.grid() - if options.output: - pl.savefig(options.output) - else: - pl.show() - -if __name__ == "__main__": - # Workaround for optparse limitation: insert -- before first negative - # number found. - negint = re.compile("-[0-9]+") - for n, arg in enumerate(sys.argv): - if negint.match(arg): - sys.argv.insert(n, "--") - break - actions = {"rm": rm_action, - "clean": clean_action, - "list": list_action, - "run": run_action, - "plot": plot_action} - actions[get_action()]() diff --git a/profiling/test_projects/flaskbb_lite_3/pytest.ini b/profiling/test_projects/flaskbb_lite_3/pytest.ini deleted file mode 100644 index 295bc34d..00000000 --- a/profiling/test_projects/flaskbb_lite_3/pytest.ini +++ /dev/null @@ -1,3 +0,0 @@ -[pytest] -norecursedirs = docs flaskbb logs migrations whoosh_index -addopts = --strict --random -vvl diff --git a/profiling/test_projects/flaskbb_lite_3/requirements.txt b/profiling/test_projects/flaskbb_lite_3/requirements.txt deleted file mode 100644 index 1a4d91f7..00000000 --- a/profiling/test_projects/flaskbb_lite_3/requirements.txt +++ /dev/null @@ -1,38 +0,0 @@ -alembic==0.8.4 -Babel==2.2.0 -blinker==1.3 -cov-core==1.15.0 -coverage==4.0.3 -Flask==0.10.1 -flask-allows==0.1.0 -Flask-BabelPlus==1.0.1 -Flask-Cache==0.13.1 -Flask-DebugToolbar==0.10.0 -Flask-Login==0.3.2 -Flask-Mail==0.9.1 -Flask-Migrate==1.7.0 -Flask-Plugins==1.6.1 -Flask-Redis==0.1.0 -Flask-Script==2.0.5 -Flask-SQLAlchemy==2.1 -Flask-Themes2==0.1.4 -Flask-WTF==0.12 -itsdangerous==0.24 -Jinja2==2.8 -Mako==1.0.3 -MarkupSafe==0.23 -mistune==0.7.1 -Pygments==2.1 -pytz==2015.7 -redis==2.10.5 -requests==2.9.1 -simplejson==3.8.1 -six==1.10.0 -speaklater==1.3 -SQLAlchemy==1.0.11 -SQLAlchemy-Utils==0.31.6 -Unidecode==0.04.19 -Werkzeug==0.11.3 -Whoosh==2.7.0 -WTForms==2.1 -https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-Whooshalchemy diff --git a/profiling/test_projects/flaskbb_lite_3/setup.py b/profiling/test_projects/flaskbb_lite_3/setup.py deleted file mode 100644 index 265d0688..00000000 --- a/profiling/test_projects/flaskbb_lite_3/setup.py +++ /dev/null @@ -1,123 +0,0 @@ -""" -FlaskBB -======= - -FlaskBB is a forum software written in Python using the microframework Flask. - - -And Easy to Setup ------------------ - -.. code:: bash - $ python manage.py createall - - $ python manage.py runserver - * Running on http://localhost:8080/ - - -Resources ---------- - -* `website `_ -* `source `_ -* `issues `_ - -""" -from setuptools import setup -from setuptools.command.test import test as TestCommand -import sys - - -class PyTestCommand(TestCommand): - user_options = [('pytest-args=', 'a', 'Arguments to pass to py.test')] - - def initialize_options(self): - TestCommand.initialize_options(self) - self.pytest_args = [] - - def finalize_options(self): - TestCommand.finalize_options(self) - self.test_args = [] - self.test_suite = True - - def run_tests(self): - import pytest - errno = pytest.main(self.pytest_args) - sys.exit(errno) - - -setup( - name='FlaskBB', - version='1.0.dev0', - url='http://github.com/sh4nks/flaskbb/', - license='BSD', - author='sh4nks', - author_email='sh4nks7@gmail.com', - description='A forum software written with flask', - long_description=__doc__, - packages=['flaskbb'], - include_package_data=True, - zip_safe=False, - platforms='any', - install_requires=[ - 'Babel', - 'Flask', - 'Flask-Cache', - 'Flask-DebugToolbar', - 'Flask-Login', - 'Flask-Mail', - 'Flask-Migrate', - 'Flask-Plugins', - 'Flask-Redis', - 'Flask-SQLAlchemy', - 'Flask-Script', - 'Flask-Themes2', - 'Flask-WTF', - 'Flask-WhooshAlchemy', - 'Flask-BabelEx', - 'Jinja2', - 'Mako', - 'MarkupSafe', - 'Pygments', - 'SQLAlchemy', - 'Unidecode', - 'WTForms', - 'Werkzeug', - 'Whoosh', - 'alembic', - 'blinker', - 'cov-core', - 'coverage', - 'itsdangerous', - 'mistune', - 'pytz', - 'redis', - 'requests', - 'simplejson', - 'speaklater', - 'sqlalchemy-utils' - ], - test_suite='tests', - tests_require=[ - 'py', - 'pytest', - 'pytest-cov', - 'pytest-random' - ], - dependency_links=[ - 'https://github.com/jshipley/Flask-WhooshAlchemy/archive/master.zip#egg=Flask-WhooshAlchemy', - 'https://github.com/sh4nks/flask-babelex/tarball/master#egg=Flask-BabelEx' - ], - classifiers=[ - 'Development Status :: 4 - Beta', - 'Environment :: Web Environment', - 'Intended Audience :: Developers, Users', - 'License :: OSI Approved :: BSD License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Topic :: Internet :: WWW/HTTP :: Dynamic Content', - 'Topic :: Software Development :: Libraries :: Python Modules' - ], - cmdclass={'test': PyTestCommand} -) diff --git a/profiling/test_projects/flaskbb_lite_3/test_requirements.txt b/profiling/test_projects/flaskbb_lite_3/test_requirements.txt deleted file mode 100644 index 2390419f..00000000 --- a/profiling/test_projects/flaskbb_lite_3/test_requirements.txt +++ /dev/null @@ -1,5 +0,0 @@ --r requirements.txt -py==1.4.31 -pytest==2.8.7 -pytest-cov==2.2.0 -pytest-random==0.2 diff --git a/profiling/test_projects/flaskbb_lite_3/tests/__init__.py b/profiling/test_projects/flaskbb_lite_3/tests/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/profiling/test_projects/flaskbb_lite_3/tests/conftest.py b/profiling/test_projects/flaskbb_lite_3/tests/conftest.py deleted file mode 100644 index f5158fa1..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/conftest.py +++ /dev/null @@ -1,3 +0,0 @@ -from tests.fixtures.app import * -from tests.fixtures.forum import * -from tests.fixtures.user import * diff --git a/profiling/test_projects/flaskbb_lite_3/tests/endtoend/.test_auth_views.py.swp b/profiling/test_projects/flaskbb_lite_3/tests/endtoend/.test_auth_views.py.swp deleted file mode 100644 index eb61b9d46f8973e6fe46bd4ee295734c3e6b603b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12288 zcmeI2&2AGh5XT+F0SUtQ0d7M$bR)v16eK>R2yv;z0U;sL>*DM>i6Oh*+TOI~0D?XM z;^P%~0R$3)Gj9OgxbX}e5#x=Qv{k4|6$urMrGG51?eWZS$A?v>JHK@E7F-T5F>FT} zJ9%LL()Idc?J6*Kzc7|(+Rbd+;w0X7zM6dG4Yp&ISuMNm-jJII-EP|oV@+FRiBM0ps>C3SL*EI!i9Oa|7_z7oH%}WSEgta5g-CYfCvx) zB0vO)01+Spdy|08YwR()zR$Z4zOQZR{g65$Km>>Y5g-CYfCvx)B0vO)01+SpL|_jR z;0a@=4l?!@<^KN%AH%mJjJ-##qY9Ko8Po#m^I^t5qCTKF>K-aW9YcMuGxiDf8nupk zih6=Nhx&Plu`j51sF$c0sOP9f)M?ZY^x>=b#t3a;?)FG%SMfRrG6OA4&Z-q|038^~>OtB6#XeU?tGxN3`P=SL^<@?nczlqm zL}+f6E{EeKE7A^t=lM{^+)9;&u2479V!3d=tKt=_HfUaBiReK&SDg{Ltr6PXVz;%? zTnlg?FNQWU!djX24VuDF5Z`7Ro+)ynokKGZvb5|Xop!`Oi9^UcZHG!MTk!iV}DO;ASS9~TH<_{Sz z(_G<&A0N$nTBYDi;X{m9l<^txtERfNc~iBold

    \n" - - -def test_is_online(default_settings, user): - assert is_online(user) - - -def test_format_date(): - date = datetime.date(2015, 2, 15) - time = datetime.datetime.combine(date, datetime.datetime.min.time()) - assert format_date(time) == "2015-02-15" - - -def test_format_quote(topic): - expected_markdown = "**[test_normal](http://localhost:5000/user/test_normal) wrote:**\n> Test Content Normal\n" - actual = format_quote(topic.first_post.username, topic.first_post.content) - assert actual == expected_markdown - - -def test_get_image_info(): - # some random jpg/gif/png images from my imgur account - jpg = "http://i.imgur.com/NgVIeRG.jpg" - gif = "http://i.imgur.com/l3Vmp4m.gif" - png = "http://i.imgur.com/JXzKxNs.png" - - jpg_img = get_image_info(jpg) - assert jpg_img["content-type"] == "image/jpeg" - assert jpg_img["height"] == 1024 - assert jpg_img["width"] == 1280 - assert jpg_img["size"] == 209.06 - - gif_img = get_image_info(gif) - assert gif_img["content-type"] == "image/gif" - assert gif_img["height"] == 168 - assert gif_img["width"] == 400 - assert gif_img["size"] == 576.138 - - png_img = get_image_info(png) - assert png_img["content-type"] == "image/png" - assert png_img["height"] == 1080 - assert png_img["width"] == 1920 - assert png_img["size"] == 269.409 - - -def test_check_image(default_settings): - # test200x100.png - img_width = "http://i.imgur.com/4dAWAZI.png" - # test100x200.png - img_height = "http://i.imgur.com/I7GwF3D.png" - # test100x100.png - img_ok = "http://i.imgur.com/CYV6NzT.png" - # random too big image - img_size = "http://i.imgur.com/l3Vmp4m.gif" - # random image wrong type - img_type = "https://d11xdyzr0div58.cloudfront.net/static/logos/archlinux-logo-black-scalable.f931920e6cdb.svg" - - data = check_image(img_width) - assert "wide" in data[0] - assert not data[1] - - data = check_image(img_height) - assert "high" in data[0] - assert not data[1] - - data = check_image(img_type) - assert "type" in data[0] - assert not data[1] - - data = check_image(img_ok) - assert data[0] is None - assert data[1] - - flaskbb_config["AVATAR_WIDTH"] = 1000 - flaskbb_config["AVATAR_HEIGHT"] = 1000 - data = check_image(img_size) - assert "big" in data[0] - assert not data[1] diff --git a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_markup.py b/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_markup.py deleted file mode 100644 index 19d8caf7..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_markup.py +++ /dev/null @@ -1,28 +0,0 @@ -from flaskbb.utils.markup import collect_emojis, EMOJIS, markdown - - -def test_collect_emojis(): - assert collect_emojis() == EMOJIS - - -def test_custom_renderer(): - # custom paragraph - p_expected = "

    @sh4nks is :developing: flaskbb.

    \n" - p_plain = "@sh4nks is :developing: :flaskbb:." - assert markdown.render(p_plain) == p_expected - - # custom block code with pygments highlighting - b_expected = """\n
    print("Hello World")
    \n""" - b_expected_lang = """
    print("Hello World")\n
    \n""" - b_plain = """ -``` -print("Hello World") -``` -""" - b_plain_lang = """ -```python -print("Hello World") -``` -""" - assert markdown.render(b_plain) == b_expected - assert markdown.render(b_plain_lang) == b_expected_lang diff --git a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_populate.py b/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_populate.py deleted file mode 100644 index 71030664..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_populate.py +++ /dev/null @@ -1,94 +0,0 @@ -import pytest -from flaskbb.utils.populate import * -from flaskbb.fixtures.groups import fixture as group_fixture -from flaskbb.fixtures.settings import fixture as settings_fixture -from flaskbb.user.models import Group -from flaskbb.forum.models import Category, Topic, Post - -# 184-199, 218-268, 278-307 -def test_delete_settings_from_fixture(default_settings): - groups_count = SettingsGroup.query.count() - assert len(settings_fixture) == groups_count - - deleted = delete_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(deleted) - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - -def test_create_settings_from_fixture(database): - assert not SettingsGroup.query.count() - assert not Setting.query.count() - - created = create_settings_from_fixture(settings_fixture) - - assert len(settings_fixture) == len(created) - assert SettingsGroup.query.count() == len(created) - - -def test_update_settings_from_fixture(database): - # No force-overwrite - the fixtures will be created because - # do not exist. - assert not SettingsGroup.query.count() - assert not Setting.query.count() - updated = update_settings_from_fixture(settings_fixture) - assert len(updated) == SettingsGroup.query.count() - - # force-overwrite - the fixtures exist, but they will be overwritten now. - force_updated = update_settings_from_fixture(settings_fixture, - overwrite_group=True, - overwrite_setting=True) - assert len(force_updated) == SettingsGroup.query.count() - - -def test_create_admin_user(default_groups): - user = User.query.filter_by(username="admin").first() - assert not user - - user = create_admin_user(username="admin", password="test", - email="test@example.org") - assert user.username == "admin" - assert user.permissions["admin"] - - -def test_create_welcome_forum(default_groups): - assert not create_welcome_forum() - - create_admin_user(username="admin", password="test", - email="test@example.org") - assert create_welcome_forum() - - -def test_create_test_data(database): - assert Category.query.count() == 0 - data_created = create_test_data() - assert Category.query.count() == data_created['categories'] - - -def test_insert_mass_data(database): - assert not insert_mass_data(topics=1, posts=1) - - create_test_data(categories=1, forums=1, topics=0) - assert Topic.query.count() == 0 - - topics, posts = insert_mass_data(topics=1, posts=1) - assert Topic.query.count() == topics - # -1 bc the topic post also counts as post - assert Post.query.count() - 1 == posts - - -def test_create_default_groups(database): - """Test that the default groups are created correctly.""" - - assert Group.query.count() == 0 - - create_default_groups() - - assert Group.query.count() == len(group_fixture) - - for key, attributes in group_fixture.items(): - group = Group.query.filter_by(name=key).first() - - for attribute, value in attributes.items(): - assert getattr(group, attribute) == value diff --git a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_settings.py b/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_settings.py deleted file mode 100644 index 729a855b..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_settings.py +++ /dev/null @@ -1,15 +0,0 @@ -from flaskbb.utils.settings import FlaskBBConfig - - -def test_flaskbb_config(default_settings): - flaskbb_config = FlaskBBConfig() - - assert len(flaskbb_config) > 0 - # test __getitem__ - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBB' - # test __setitem__ - flaskbb_config['PROJECT_TITLE'] = 'FlaskBBTest' - assert flaskbb_config['PROJECT_TITLE'] == 'FlaskBBTest' - # test __iter__ - test_dict = {} - assert type(flaskbb_config.__iter__()) == type(test_dict.__iter__()) diff --git a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_translations.py b/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_translations.py deleted file mode 100644 index 5877efc9..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_translations.py +++ /dev/null @@ -1,48 +0,0 @@ -import subprocess -import os -from flask import current_app -from babel.support import Translations, NullTranslations -from flaskbb.utils.translations import FlaskBBDomain -from flaskbb.extensions import plugin_manager - - -def _remove_compiled_translations(): - translations_folder = os.path.join(current_app.root_path, "translations") - - # walks through the translations folder and deletes all files - # ending with .mo - for root, dirs, files in os.walk(translations_folder): - for name in files: - if name.endswith(".mo"): - os.unlink(os.path.join(root, name)) - - -def _compile_translations(): - PLUGINS_FOLDER = os.path.join(current_app.root_path, "plugins") - translations_folder = os.path.join(current_app.root_path, "translations") - - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - for plugin in plugin_manager.all_plugins: - plugin_folder = os.path.join(PLUGINS_FOLDER, plugin) - translations_folder = os.path.join(plugin_folder, "translations") - subprocess.call(["pybabel", "compile", "-d", translations_folder]) - - -def test_flaskbbdomain_translations(default_settings): - domain = FlaskBBDomain(current_app) - - with current_app.test_request_context(): - assert domain.get_translations_cache() == {} - - # just to be on the safe side that there are really no compiled - # translations available - _remove_compiled_translations() - # no compiled translations are available - assert isinstance(domain.get_translations(), NullTranslations) - - # lets compile them and test again - _compile_translations() - - # now there should be translations :) - assert isinstance(domain.get_translations(), Translations) diff --git a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_widgets.py b/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_widgets.py deleted file mode 100644 index 93c6032d..00000000 --- a/profiling/test_projects/flaskbb_lite_3/tests/unit/utils/test_widgets.py +++ /dev/null @@ -1,37 +0,0 @@ -"""Tests for the utils/widgets.py file.""" -from flaskbb.utils.widgets import SelectBirthdayWidget - - -def test_select_birthday_widget(): - """Test the SelectDateWidget.""" - - assert SelectBirthdayWidget.FORMAT_CHOICES['%d'] == [ - (x, str(x)) for x in range(1, 32) - ] - assert SelectBirthdayWidget.FORMAT_CHOICES['%m'] == [ - (x, str(x)) for x in range(1, 13) - ] - - assert SelectBirthdayWidget.FORMAT_CLASSES == { - '%d': 'select_date_day', - '%m': 'select_date_month', - '%Y': 'select_date_year' - } - - select_birthday_widget = SelectBirthdayWidget(years=[0, 1]) - - assert select_birthday_widget.FORMAT_CHOICES['%Y'] == [(0, '0'), (1, '1')] - - class Field(object): - id = 'world' - name = 'helloWorld' - format = '%d %m %Y' - data = None - - html = select_birthday_widget(field=Field(), surrounded_div="test-div") - assert 'world' in html - assert 'helloWorld' in html - assert 'class="select_date_day"' in html - assert 'class="select_date_month"' in html - assert 'class="select_date_year"' in html - assert '
    ' in html diff --git a/profiling/test_projects/flaskbb_lite_3/wsgi.py b/profiling/test_projects/flaskbb_lite_3/wsgi.py deleted file mode 100644 index e7089893..00000000 --- a/profiling/test_projects/flaskbb_lite_3/wsgi.py +++ /dev/null @@ -1,4 +0,0 @@ -from flaskbb import create_app -from flaskbb.configs.production import ProductionConfig - -flaskbb = create_app(config=ProductionConfig()) diff --git a/pydocstyle.py b/pydocstyle.py deleted file mode 100644 index 6a8d9ff3..00000000 --- a/pydocstyle.py +++ /dev/null @@ -1,28 +0,0 @@ -import os -import re -import subprocess -import sys - - -os.chdir(os.path.join('pyt')) - -try: - docstyle = subprocess.run(["pydocstyle", "--ignore=D105,D203,D212,D213"], - stderr=subprocess.PIPE, universal_newlines=True) -except FileNotFoundError: - print('Error: Install pydocstyle with pip for python 3.' - ' Something like: "sudo python -m pip install pydocstyle"') - sys.exit() - -lines = re.split('\n', docstyle.stderr) - -errors = zip(lines[0::2], lines[1::2]) - -errors = [x + "\n\t" + y for x, y in errors] - -errors = [error for error in errors if 'visit_' not in error] - -for error in errors: - print(error + '\n') - -print("Total errors: {}".format(len(errors))) diff --git a/readme_static_files/pyt_example.png b/readme_static_files/pyt_example.png deleted file mode 100644 index 616ba56c445a315b96ff80357bae675b19872258..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48706 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 From ac7eed6cbb417507219a4b52d78a9982c1e7cc77 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 14 Apr 2018 18:16:55 -0700 Subject: [PATCH 247/541] Update link to static image file --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index be16dc05..8f502650 100644 --- a/README.rst +++ b/README.rst @@ -39,7 +39,7 @@ Features Example usage and output: -.. image:: https://raw.githubusercontent.com/python-security/pyt/master/readme_static_files/pyt_example.png +.. image:: https://raw.githubusercontent.com/KevinHock/rtdpyt/master/readme_static_files/pyt_example.png Install ======= From f5ca13259b0fa89969acb8bceb1cb1f4eaa2645e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 14 Apr 2018 18:33:41 -0700 Subject: [PATCH 248/541] Rename example folder to examples folder --- example/report_cfg_examples/simple.py | 1 - {example => examples}/cfg_example.py | 1 - .../django.nV/taskManager/__init__.py | 0 .../django.nV/taskManager/forms.py | 0 .../taskManager/loop_false_negative.py | 0 .../django.nV/taskManager/misc.py | 0 .../django.nV/taskManager/models.py | 0 .../redirect_maybe_should_trigger_vuln.py | 2 +- .../django.nV/taskManager/settings.py | 0 .../django.nV/taskManager/taskManager_urls.py | 0 .../taskManager/upload_controller.py | 2 +- .../django.nV/taskManager/urls.py | 0 .../django.nV/taskManager/views.py | 0 .../django.nV/taskManager/wsgi.py | 0 .../assignment_multiple_assign.py | 0 .../assignment_multiple_assign_call.py | 0 .../example_inputs/assignment_tuple_value.py | 0 .../example_inputs/assignment_two_targets.py | 0 .../example_inputs/assignmentandbuiltin.py | 0 .../example_inputs/call_on_call.py | 2 +- .../example_inputs/call_with_attribute.py | 0 .../example_inputs/comprehensions.py | 2 +- .../django_flask_and_normal_functions.py | 0 .../example_inputs/django_views.py | 0 .../example_inputs/example.py | 0 .../example_inputs/for_complete.py | 0 .../example_inputs/for_func_iterator.py | 2 +- .../example_inputs/for_no_orelse.py | 0 .../example_inputs/for_tuple_target.py | 0 .../example_inputs/function.py | 0 .../function_with_multiple_return.py | 0 .../example_inputs/function_with_params.py | 0 .../generator_expression_assign.py | 0 .../example_inputs}/if.py | 0 .../example_inputs/if_complete.py | 0 .../example_inputs}/if_else.py | 0 .../example_inputs}/if_else_elif.py | 0 .../example_inputs/if_not.py | 0 .../example_inputs/if_program.py | 0 .../example_inputs}/import.py | 0 .../example_inputs/linear.py | 0 .../example_inputs/list_comprehension.py | 0 .../example_inputs/multiple_except.py | 0 .../example_inputs/multiple_if_else.py | 0 .../multiple_parameters_function.py | 0 .../example_inputs/multiscope.py | 0 .../example_inputs/name_constant.py | 0 .../example_inputs/name_for.py | 0 .../example_inputs/name_if.py | 0 .../example_inputs/nested_if_else_elif.py | 0 .../example_inputs/parameters_function.py | 0 .../example_inputs/recursive.py | 0 .../example_inputs/simple.py | 0 .../example_inputs/simple_function.py | 0 .../simple_function_with_return.py | 0 .../example_inputs/single_comprehension.py | 0 .../example_inputs/str_ignored.py | 0 {example => examples}/example_inputs/try.py | 0 .../example_inputs/try_final.py | 0 .../example_inputs/try_orelse.py | 0 .../try_orelse_with_no_variables_to_save.py | 0 ...e_with_no_variables_to_save_and_no_args.py | 0 {example => examples}/example_inputs/while.py | 0 .../example_inputs/while_break.py | 0 .../example_inputs/while_complete.py | 0 .../example_inputs/while_no_orelse.py | 0 {example => examples}/example_inputs/yield.py | 0 .../import_test}/import.py | 1 - .../import_test/import_ast.py | 0 .../import_test/import_from.py | 0 .../import_test/import_math.py | 0 .../import_test/import_os.py | 0 .../import_test_project/A.py | 0 .../all_folder/__init__.py | 0 .../import_test_project/all_folder/has_all.py | 0 .../import_test_project/all_folder/no_all.py | 0 .../import_test_project/foo/bar.py | 0 .../import_test_project/multiple_files/A.py | 0 .../import_test_project/multiple_files/B.py | 0 .../import_test_project/multiple_files/C.py | 0 .../import_test_project/multiple_files/D.py | 0 .../other_dir/test_from_dot_dot.py | 0 .../test_relative_between_folders.py | 0 .../import_test_project/package_star}/A.py | 0 .../import_test_project/package_star}/B.py | 0 .../package_star/__init__.py | 0 .../package_star}/folder/C.py | 0 .../package_star/folder/__init__.py | 0 .../package_star_with_alias}/A.py | 0 .../package_star_with_alias}/B.py | 0 .../package_star_with_alias/__init__.py | 0 .../package_star_with_alias}/folder/C.py | 0 .../folder/__init__.py | 0 .../package_with_file/__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../package_with_file_and_alias/__init__.py | 0 .../nested_folder_without_init/Starbucks.py | 0 .../package_with_folder/__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/moose.py | 0 .../package_with_folder_and_alias/__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/moose.py | 0 .../package_with_function/__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../__init__.py | 0 .../nested_folder_with_init/__init__.py | 0 .../nested_folder_with_init/starbucks.py | 0 .../import_test_project/test_all.py | 0 .../test_from_directory.py | 0 .../import_test_project/test_from_dot.py | 0 .../test_from_file_import_star.py | 0 .../test_from_package_import_star.py | 0 ...est_from_package_import_star_with_alias.py | 0 .../test_from_package_with_file.py | 0 .../test_from_package_with_file_and_alias.py | 0 .../test_from_package_with_function.py | 0 ...st_from_package_with_function_and_alias.py | 0 .../import_test_project/test_import.py | 0 .../import_test_project/test_import_as.py | 0 .../test_multiple_files_with_aliases.py | 0 .../test_multiple_functions_with_aliases.py | 0 .../import_test_project/test_no_all.py | 0 .../test_package_with_file.py | 0 .../test_package_with_file_and_alias.py | 0 .../test_package_with_folder.py | 0 .../test_package_with_folder_and_alias.py | 0 .../test_package_with_function.py | 0 .../test_package_with_function_and_alias.py | 0 .../test_relative_from_directory.py | 0 .../test_relative_level_1.py | 0 .../test_relative_level_2.py | 0 .../builtin_with_user_defined_inner.py | 0 .../nested_user_defined_function_calls.py | 0 .../sink_with_blackbox_inner.py | 0 .../sink_with_result_of_blackbox_nested.py | 0 ...sink_with_result_of_user_defined_nested.py | 0 .../sink_with_user_defined_inner.py | 0 .../report_cfg_examples/ast_example.py | 0 .../report_cfg_examples/decorator.py | 4 +- .../report_cfg_examples/for_else.py | 0 .../report_cfg_examples}/if.py | 0 .../report_cfg_examples}/if_else.py | 0 .../report_cfg_examples}/if_else_elif.py | 0 .../report_cfg_examples/sequence.py | 0 examples/report_cfg_examples/simple.py | 1 + .../report_cfg_examples/small_program.py | 0 .../report_cfg_examples/while.py | 0 .../report_cfg_examples/while_break.py | 0 .../report_cfg_examples/while_else.py | 0 .../report_cfg_examples/while_else_2.py | 0 {example => examples}/test_project/app.py | 0 .../test_project/exceptions.py | 0 .../test_project/folder/directory/indhold.py | 0 .../test_project/folder/file.txt | 0 .../test_project/folder/some.py | 0 .../test_project/license.txt | 0 {example => examples}/test_project/utils.py | 0 {example => examples}/vulnerable_code/XSS.py | 0 .../XSS_assign_to_other_var.py | 0 .../vulnerable_code/XSS_call.py | 0 .../vulnerable_code/XSS_form.py | 0 .../vulnerable_code/XSS_no_vuln.py | 0 .../vulnerable_code/XSS_reassign.py | 0 .../vulnerable_code/XSS_sanitised.py | 0 .../vulnerable_code/XSS_url.py | 0 .../vulnerable_code/XSS_variable_assign.py | 0 .../XSS_variable_assign_no_vuln.py | 0 .../XSS_variable_multiple_assign.py | 2 +- .../vulnerable_code/blackbox_call_after_if.py | 0 .../vulnerable_code/command_injection.py | 0 .../vulnerable_code/django_XSS.py | 1 - .../vulnerable_code/ensure_saved_scope.py | 0 .../inter_command_injection.py | 0 .../inter_command_injection_2.py | 0 .../vulnerable_code/menu.txt | 0 .../vulnerable_code/multi_chain.py | 1 - ...box_calls_in_user_defined_call_after_if.py | 0 ...ultiple_nested_blackbox_calls_after_for.py | 0 ...iple_nested_user_defined_calls_after_if.py | 1 - ...defined_calls_in_blackbox_call_after_if.py | 0 .../vulnerable_code/path_traversal.py | 0 .../path_traversal_sanitised.py | 0 .../path_traversal_sanitised_2.py | 0 .../vulnerable_code/render_ids.py | 0 .../vulnerable_code/simple_vulnerability.py | 0 .../vulnerable_code/sql/init_db.py | 0 .../vulnerable_code/sql/sqli.py | 4 +- .../tainted_arg_normal_function.py | 0 .../vulnerable_code/templates/XSS_param.html | 0 .../templates/attackerSite.html | 0 .../templates/command_injection.html | 0 .../templates/example2_form.html | 0 .../templates/example2_response.html | 0 .../vulnerable_code/templates/link.html | 0 .../vulnerable_code/templates/render_ids.html | 0 .../absolute_from_file_command_injection.py | 0 .../absolute_from_file_command_injection_2.py | 0 .../blackbox_library_call.py | 0 .../import_file_command_injection.py | 0 .../import_file_command_injection_2.py | 0 .../import_file_does_not_exist.py | 0 ..._absolute_from_file_command_injection_3.py | 0 ...ositive_import_file_command_injection_3.py | 0 .../other_file.py | 0 tests/cfg_test.py | 116 ++++----- tests/framework_helper_test.py | 10 +- tests/import_test.py | 92 +++---- tests/liveness_test.py | 2 +- tests/nested_functions_test.py | 2 +- tests/project_handler_test.py | 4 +- tests/reaching_definitions_taint_test.py | 10 +- tests/reaching_definitions_test.py | 4 +- tests/vulnerabilities_across_files_test.py | 160 ++++++------ tests/vulnerabilities_test.py | 234 +++++++++--------- 216 files changed, 328 insertions(+), 333 deletions(-) delete mode 100644 example/report_cfg_examples/simple.py rename {example => examples}/cfg_example.py (99%) rename {example => examples}/django.nV/taskManager/__init__.py (100%) rename {example => examples}/django.nV/taskManager/forms.py (100%) rename {example => examples}/django.nV/taskManager/loop_false_negative.py (100%) rename {example => examples}/django.nV/taskManager/misc.py (100%) rename {example => examples}/django.nV/taskManager/models.py (100%) rename {example => examples}/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py (97%) rename {example => examples}/django.nV/taskManager/settings.py (100%) rename {example => examples}/django.nV/taskManager/taskManager_urls.py (100%) rename {example => examples}/django.nV/taskManager/upload_controller.py (98%) rename {example => examples}/django.nV/taskManager/urls.py (100%) rename {example => examples}/django.nV/taskManager/views.py (100%) rename {example => examples}/django.nV/taskManager/wsgi.py (100%) rename {example => examples}/example_inputs/assignment_multiple_assign.py (100%) rename {example => examples}/example_inputs/assignment_multiple_assign_call.py (100%) rename {example => examples}/example_inputs/assignment_tuple_value.py (100%) rename {example => examples}/example_inputs/assignment_two_targets.py (100%) rename {example => examples}/example_inputs/assignmentandbuiltin.py (100%) rename {example => examples}/example_inputs/call_on_call.py (96%) rename {example => examples}/example_inputs/call_with_attribute.py (100%) rename {example => examples}/example_inputs/comprehensions.py (76%) rename {example => examples}/example_inputs/django_flask_and_normal_functions.py (100%) rename {example => examples}/example_inputs/django_views.py (100%) rename {example => examples}/example_inputs/example.py (100%) rename {example => examples}/example_inputs/for_complete.py (100%) rename {example => examples}/example_inputs/for_func_iterator.py (75%) rename {example => examples}/example_inputs/for_no_orelse.py (100%) rename {example => examples}/example_inputs/for_tuple_target.py (100%) rename {example => examples}/example_inputs/function.py (100%) rename {example => examples}/example_inputs/function_with_multiple_return.py (100%) rename {example => examples}/example_inputs/function_with_params.py (100%) rename {example => examples}/example_inputs/generator_expression_assign.py (100%) rename {example/report_cfg_examples => examples/example_inputs}/if.py (100%) rename {example => examples}/example_inputs/if_complete.py (100%) rename {example/report_cfg_examples => examples/example_inputs}/if_else.py (100%) rename {example/report_cfg_examples => examples/example_inputs}/if_else_elif.py (100%) rename {example => examples}/example_inputs/if_not.py (100%) rename {example => examples}/example_inputs/if_program.py (100%) rename {example/import_test => examples/example_inputs}/import.py (100%) rename {example => examples}/example_inputs/linear.py (100%) rename {example => examples}/example_inputs/list_comprehension.py (100%) rename {example => examples}/example_inputs/multiple_except.py (100%) rename {example => examples}/example_inputs/multiple_if_else.py (100%) rename {example => examples}/example_inputs/multiple_parameters_function.py (100%) rename {example => examples}/example_inputs/multiscope.py (100%) rename {example => examples}/example_inputs/name_constant.py (100%) rename {example => examples}/example_inputs/name_for.py (100%) rename {example => examples}/example_inputs/name_if.py (100%) rename {example => examples}/example_inputs/nested_if_else_elif.py (100%) rename {example => examples}/example_inputs/parameters_function.py (100%) rename {example => examples}/example_inputs/recursive.py (100%) rename {example => examples}/example_inputs/simple.py (100%) rename {example => examples}/example_inputs/simple_function.py (100%) rename {example => examples}/example_inputs/simple_function_with_return.py (100%) rename {example => examples}/example_inputs/single_comprehension.py (100%) rename {example => examples}/example_inputs/str_ignored.py (100%) rename {example => examples}/example_inputs/try.py (100%) rename {example => examples}/example_inputs/try_final.py (100%) rename {example => examples}/example_inputs/try_orelse.py (100%) rename {example => examples}/example_inputs/try_orelse_with_no_variables_to_save.py (100%) rename {example => examples}/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py (100%) rename {example => examples}/example_inputs/while.py (100%) rename {example => examples}/example_inputs/while_break.py (100%) rename {example => examples}/example_inputs/while_complete.py (100%) rename {example => examples}/example_inputs/while_no_orelse.py (100%) rename {example => examples}/example_inputs/yield.py (100%) rename {example/example_inputs => examples/import_test}/import.py (98%) rename {example => examples}/import_test/import_ast.py (100%) rename {example => examples}/import_test/import_from.py (100%) rename {example => examples}/import_test/import_math.py (100%) rename {example => examples}/import_test/import_os.py (100%) rename {example => examples}/import_test_project/A.py (100%) rename {example => examples}/import_test_project/all_folder/__init__.py (100%) rename {example => examples}/import_test_project/all_folder/has_all.py (100%) rename {example => examples}/import_test_project/all_folder/no_all.py (100%) rename {example => examples}/import_test_project/foo/bar.py (100%) rename {example => examples}/import_test_project/multiple_files/A.py (100%) rename {example => examples}/import_test_project/multiple_files/B.py (100%) rename {example => examples}/import_test_project/multiple_files/C.py (100%) rename {example => examples}/import_test_project/multiple_files/D.py (100%) rename {example => examples}/import_test_project/other_dir/test_from_dot_dot.py (100%) rename {example => examples}/import_test_project/other_dir/test_relative_between_folders.py (100%) rename {example/import_test_project/package_star_with_alias => examples/import_test_project/package_star}/A.py (100%) rename {example/import_test_project/package_star_with_alias => examples/import_test_project/package_star}/B.py (100%) rename {example => examples}/import_test_project/package_star/__init__.py (100%) rename {example/import_test_project/package_star_with_alias => examples/import_test_project/package_star}/folder/C.py (100%) rename {example => examples}/import_test_project/package_star/folder/__init__.py (100%) rename {example/import_test_project/package_star => examples/import_test_project/package_star_with_alias}/A.py (100%) rename {example/import_test_project/package_star => examples/import_test_project/package_star_with_alias}/B.py (100%) rename {example => examples}/import_test_project/package_star_with_alias/__init__.py (100%) rename {example/import_test_project/package_star => examples/import_test_project/package_star_with_alias}/folder/C.py (100%) rename {example => examples}/import_test_project/package_star_with_alias/folder/__init__.py (100%) rename {example => examples}/import_test_project/package_with_file/__init__.py (100%) rename {example/import_test_project/package_with_file_and_alias => examples/import_test_project/package_with_file}/nested_folder_without_init/Starbucks.py (100%) rename {example => examples}/import_test_project/package_with_file_and_alias/__init__.py (100%) rename {example/import_test_project/package_with_file => examples/import_test_project/package_with_file_and_alias}/nested_folder_without_init/Starbucks.py (100%) rename {example => examples}/import_test_project/package_with_folder/__init__.py (100%) rename {example/import_test_project/package_with_folder_and_alias => examples/import_test_project/package_with_folder}/nested_folder_with_init/__init__.py (100%) rename {example/import_test_project/package_with_folder_and_alias => examples/import_test_project/package_with_folder}/nested_folder_with_init/moose.py (100%) rename {example => examples}/import_test_project/package_with_folder_and_alias/__init__.py (100%) rename {example/import_test_project/package_with_folder => examples/import_test_project/package_with_folder_and_alias}/nested_folder_with_init/__init__.py (100%) rename {example/import_test_project/package_with_folder => examples/import_test_project/package_with_folder_and_alias}/nested_folder_with_init/moose.py (100%) rename {example => examples}/import_test_project/package_with_function/__init__.py (100%) rename {example/import_test_project/package_with_function_and_alias => examples/import_test_project/package_with_function}/nested_folder_with_init/__init__.py (100%) mode change 100644 => 100755 rename {example/import_test_project/package_with_function_and_alias => examples/import_test_project/package_with_function}/nested_folder_with_init/starbucks.py (100%) mode change 100644 => 100755 rename {example => examples}/import_test_project/package_with_function_and_alias/__init__.py (100%) rename {example/import_test_project/package_with_function => examples/import_test_project/package_with_function_and_alias}/nested_folder_with_init/__init__.py (100%) mode change 100755 => 100644 rename {example/import_test_project/package_with_function => examples/import_test_project/package_with_function_and_alias}/nested_folder_with_init/starbucks.py (100%) mode change 100755 => 100644 rename {example => examples}/import_test_project/test_all.py (100%) rename {example => examples}/import_test_project/test_from_directory.py (100%) rename {example => examples}/import_test_project/test_from_dot.py (100%) rename {example => examples}/import_test_project/test_from_file_import_star.py (100%) rename {example => examples}/import_test_project/test_from_package_import_star.py (100%) rename {example => examples}/import_test_project/test_from_package_import_star_with_alias.py (100%) rename {example => examples}/import_test_project/test_from_package_with_file.py (100%) rename {example => examples}/import_test_project/test_from_package_with_file_and_alias.py (100%) rename {example => examples}/import_test_project/test_from_package_with_function.py (100%) rename {example => examples}/import_test_project/test_from_package_with_function_and_alias.py (100%) rename {example => examples}/import_test_project/test_import.py (100%) rename {example => examples}/import_test_project/test_import_as.py (100%) rename {example => examples}/import_test_project/test_multiple_files_with_aliases.py (100%) rename {example => examples}/import_test_project/test_multiple_functions_with_aliases.py (100%) rename {example => examples}/import_test_project/test_no_all.py (100%) rename {example => examples}/import_test_project/test_package_with_file.py (100%) rename {example => examples}/import_test_project/test_package_with_file_and_alias.py (100%) rename {example => examples}/import_test_project/test_package_with_folder.py (100%) rename {example => examples}/import_test_project/test_package_with_folder_and_alias.py (100%) rename {example => examples}/import_test_project/test_package_with_function.py (100%) rename {example => examples}/import_test_project/test_package_with_function_and_alias.py (100%) rename {example => examples}/import_test_project/test_relative_from_directory.py (100%) rename {example => examples}/import_test_project/test_relative_level_1.py (100%) rename {example => examples}/import_test_project/test_relative_level_2.py (100%) rename {example => examples}/nested_functions_code/builtin_with_user_defined_inner.py (100%) rename {example => examples}/nested_functions_code/nested_user_defined_function_calls.py (100%) rename {example => examples}/nested_functions_code/sink_with_blackbox_inner.py (100%) rename {example => examples}/nested_functions_code/sink_with_result_of_blackbox_nested.py (100%) rename {example => examples}/nested_functions_code/sink_with_result_of_user_defined_nested.py (100%) rename {example => examples}/nested_functions_code/sink_with_user_defined_inner.py (100%) rename {example => examples}/report_cfg_examples/ast_example.py (100%) rename {example => examples}/report_cfg_examples/decorator.py (93%) rename {example => examples}/report_cfg_examples/for_else.py (100%) rename {example/example_inputs => examples/report_cfg_examples}/if.py (100%) rename {example/example_inputs => examples/report_cfg_examples}/if_else.py (100%) rename {example/example_inputs => examples/report_cfg_examples}/if_else_elif.py (100%) rename {example => examples}/report_cfg_examples/sequence.py (100%) create mode 100644 examples/report_cfg_examples/simple.py rename {example => examples}/report_cfg_examples/small_program.py (100%) rename {example => examples}/report_cfg_examples/while.py (100%) rename {example => examples}/report_cfg_examples/while_break.py (100%) rename {example => examples}/report_cfg_examples/while_else.py (100%) rename {example => examples}/report_cfg_examples/while_else_2.py (100%) rename {example => examples}/test_project/app.py (100%) rename {example => examples}/test_project/exceptions.py (100%) rename {example => examples}/test_project/folder/directory/indhold.py (100%) rename {example => examples}/test_project/folder/file.txt (100%) rename {example => examples}/test_project/folder/some.py (100%) rename {example => examples}/test_project/license.txt (100%) rename {example => examples}/test_project/utils.py (100%) rename {example => examples}/vulnerable_code/XSS.py (100%) rename {example => examples}/vulnerable_code/XSS_assign_to_other_var.py (100%) rename {example => examples}/vulnerable_code/XSS_call.py (100%) rename {example => examples}/vulnerable_code/XSS_form.py (100%) rename {example => examples}/vulnerable_code/XSS_no_vuln.py (100%) rename {example => examples}/vulnerable_code/XSS_reassign.py (100%) rename {example => examples}/vulnerable_code/XSS_sanitised.py (100%) rename {example => examples}/vulnerable_code/XSS_url.py (100%) rename {example => examples}/vulnerable_code/XSS_variable_assign.py (100%) rename {example => examples}/vulnerable_code/XSS_variable_assign_no_vuln.py (100%) rename {example => examples}/vulnerable_code/XSS_variable_multiple_assign.py (98%) rename {example => examples}/vulnerable_code/blackbox_call_after_if.py (100%) rename {example => examples}/vulnerable_code/command_injection.py (100%) rename {example => examples}/vulnerable_code/django_XSS.py (99%) rename {example => examples}/vulnerable_code/ensure_saved_scope.py (100%) rename {example => examples}/vulnerable_code/inter_command_injection.py (100%) rename {example => examples}/vulnerable_code/inter_command_injection_2.py (100%) rename {example => examples}/vulnerable_code/menu.txt (100%) rename {example => examples}/vulnerable_code/multi_chain.py (99%) rename {example => examples}/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py (100%) rename {example => examples}/vulnerable_code/multiple_nested_blackbox_calls_after_for.py (100%) rename {example => examples}/vulnerable_code/multiple_nested_user_defined_calls_after_if.py (99%) rename {example => examples}/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py (100%) rename {example => examples}/vulnerable_code/path_traversal.py (100%) rename {example => examples}/vulnerable_code/path_traversal_sanitised.py (100%) rename {example => examples}/vulnerable_code/path_traversal_sanitised_2.py (100%) rename {example => examples}/vulnerable_code/render_ids.py (100%) rename {example => examples}/vulnerable_code/simple_vulnerability.py (100%) rename {example => examples}/vulnerable_code/sql/init_db.py (100%) rename {example => examples}/vulnerable_code/sql/sqli.py (95%) rename {example => examples}/vulnerable_code/tainted_arg_normal_function.py (100%) rename {example => examples}/vulnerable_code/templates/XSS_param.html (100%) rename {example => examples}/vulnerable_code/templates/attackerSite.html (100%) rename {example => examples}/vulnerable_code/templates/command_injection.html (100%) rename {example => examples}/vulnerable_code/templates/example2_form.html (100%) rename {example => examples}/vulnerable_code/templates/example2_response.html (100%) rename {example => examples}/vulnerable_code/templates/link.html (100%) rename {example => examples}/vulnerable_code/templates/render_ids.html (100%) rename {example => examples}/vulnerable_code_across_files/absolute_from_file_command_injection.py (100%) rename {example => examples}/vulnerable_code_across_files/absolute_from_file_command_injection_2.py (100%) rename {example => examples}/vulnerable_code_across_files/blackbox_library_call.py (100%) rename {example => examples}/vulnerable_code_across_files/import_file_command_injection.py (100%) rename {example => examples}/vulnerable_code_across_files/import_file_command_injection_2.py (100%) rename {example => examples}/vulnerable_code_across_files/import_file_does_not_exist.py (100%) rename {example => examples}/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py (100%) rename {example => examples}/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py (100%) rename {example => examples}/vulnerable_code_across_files/other_file.py (100%) diff --git a/example/report_cfg_examples/simple.py b/example/report_cfg_examples/simple.py deleted file mode 100644 index 46a9982a..00000000 --- a/example/report_cfg_examples/simple.py +++ /dev/null @@ -1 +0,0 @@ -x = 3 diff --git a/example/cfg_example.py b/examples/cfg_example.py similarity index 99% rename from example/cfg_example.py rename to examples/cfg_example.py index 9b496d14..ba10bf3f 100644 --- a/example/cfg_example.py +++ b/examples/cfg_example.py @@ -7,4 +7,3 @@ cfg.create(ast) print_CFG(cfg) - diff --git a/example/django.nV/taskManager/__init__.py b/examples/django.nV/taskManager/__init__.py similarity index 100% rename from example/django.nV/taskManager/__init__.py rename to examples/django.nV/taskManager/__init__.py diff --git a/example/django.nV/taskManager/forms.py b/examples/django.nV/taskManager/forms.py similarity index 100% rename from example/django.nV/taskManager/forms.py rename to examples/django.nV/taskManager/forms.py diff --git a/example/django.nV/taskManager/loop_false_negative.py b/examples/django.nV/taskManager/loop_false_negative.py similarity index 100% rename from example/django.nV/taskManager/loop_false_negative.py rename to examples/django.nV/taskManager/loop_false_negative.py diff --git a/example/django.nV/taskManager/misc.py b/examples/django.nV/taskManager/misc.py similarity index 100% rename from example/django.nV/taskManager/misc.py rename to examples/django.nV/taskManager/misc.py diff --git a/example/django.nV/taskManager/models.py b/examples/django.nV/taskManager/models.py similarity index 100% rename from example/django.nV/taskManager/models.py rename to examples/django.nV/taskManager/models.py diff --git a/example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py b/examples/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py similarity index 97% rename from example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py rename to examples/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py index 66d3fb78..0f43d640 100644 --- a/example/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py +++ b/examples/django.nV/taskManager/redirect_maybe_should_trigger_vuln.py @@ -22,4 +22,4 @@ def task_edit(request, project_id, task_id): return redirect('/taskManager/' + project_id + '/' + task_id) else: return render_to_response( - 'taskManager/task_edit.html', {'task': task}, RequestContext(request)) \ No newline at end of file + 'taskManager/task_edit.html', {'task': task}, RequestContext(request)) diff --git a/example/django.nV/taskManager/settings.py b/examples/django.nV/taskManager/settings.py similarity index 100% rename from example/django.nV/taskManager/settings.py rename to examples/django.nV/taskManager/settings.py diff --git a/example/django.nV/taskManager/taskManager_urls.py b/examples/django.nV/taskManager/taskManager_urls.py similarity index 100% rename from example/django.nV/taskManager/taskManager_urls.py rename to examples/django.nV/taskManager/taskManager_urls.py diff --git a/example/django.nV/taskManager/upload_controller.py b/examples/django.nV/taskManager/upload_controller.py similarity index 98% rename from example/django.nV/taskManager/upload_controller.py rename to examples/django.nV/taskManager/upload_controller.py index 1be60d57..e78f51d1 100644 --- a/example/django.nV/taskManager/upload_controller.py +++ b/examples/django.nV/taskManager/upload_controller.py @@ -24,4 +24,4 @@ def upload(request, project_id): else: form = ProjectFileForm() return render_to_response( - 'taskManager/upload.html', {'form': form}, RequestContext(request)) \ No newline at end of file + 'taskManager/upload.html', {'form': form}, RequestContext(request)) diff --git a/example/django.nV/taskManager/urls.py b/examples/django.nV/taskManager/urls.py similarity index 100% rename from example/django.nV/taskManager/urls.py rename to examples/django.nV/taskManager/urls.py diff --git a/example/django.nV/taskManager/views.py b/examples/django.nV/taskManager/views.py similarity index 100% rename from example/django.nV/taskManager/views.py rename to examples/django.nV/taskManager/views.py diff --git a/example/django.nV/taskManager/wsgi.py b/examples/django.nV/taskManager/wsgi.py similarity index 100% rename from example/django.nV/taskManager/wsgi.py rename to examples/django.nV/taskManager/wsgi.py diff --git a/example/example_inputs/assignment_multiple_assign.py b/examples/example_inputs/assignment_multiple_assign.py similarity index 100% rename from example/example_inputs/assignment_multiple_assign.py rename to examples/example_inputs/assignment_multiple_assign.py diff --git a/example/example_inputs/assignment_multiple_assign_call.py b/examples/example_inputs/assignment_multiple_assign_call.py similarity index 100% rename from example/example_inputs/assignment_multiple_assign_call.py rename to examples/example_inputs/assignment_multiple_assign_call.py diff --git a/example/example_inputs/assignment_tuple_value.py b/examples/example_inputs/assignment_tuple_value.py similarity index 100% rename from example/example_inputs/assignment_tuple_value.py rename to examples/example_inputs/assignment_tuple_value.py diff --git a/example/example_inputs/assignment_two_targets.py b/examples/example_inputs/assignment_two_targets.py similarity index 100% rename from example/example_inputs/assignment_two_targets.py rename to examples/example_inputs/assignment_two_targets.py diff --git a/example/example_inputs/assignmentandbuiltin.py b/examples/example_inputs/assignmentandbuiltin.py similarity index 100% rename from example/example_inputs/assignmentandbuiltin.py rename to examples/example_inputs/assignmentandbuiltin.py diff --git a/example/example_inputs/call_on_call.py b/examples/example_inputs/call_on_call.py similarity index 96% rename from example/example_inputs/call_on_call.py rename to examples/example_inputs/call_on_call.py index 28f45703..76ce5ac5 100644 --- a/example/example_inputs/call_on_call.py +++ b/examples/example_inputs/call_on_call.py @@ -4,6 +4,6 @@ def op(self, b): def operation(self, a): return a - + obj = String() s = obj.op('x').operation('g') diff --git a/example/example_inputs/call_with_attribute.py b/examples/example_inputs/call_with_attribute.py similarity index 100% rename from example/example_inputs/call_with_attribute.py rename to examples/example_inputs/call_with_attribute.py diff --git a/example/example_inputs/comprehensions.py b/examples/example_inputs/comprehensions.py similarity index 76% rename from example/example_inputs/comprehensions.py rename to examples/example_inputs/comprehensions.py index a7db4298..dcf6f1dc 100644 --- a/example/example_inputs/comprehensions.py +++ b/examples/example_inputs/comprehensions.py @@ -3,4 +3,4 @@ d = {i : x for i,x in enumerate([1,2,3])} s = {x for x in [1,2,3,2,2,1,2]} g = (x for x in [1,2,3]) -dd = { x + y : y for x in [1,2,3] for y in [4,5,6]} +dd = { x + y : y for x in [1,2,3] for y in [4,5,6]} diff --git a/example/example_inputs/django_flask_and_normal_functions.py b/examples/example_inputs/django_flask_and_normal_functions.py similarity index 100% rename from example/example_inputs/django_flask_and_normal_functions.py rename to examples/example_inputs/django_flask_and_normal_functions.py diff --git a/example/example_inputs/django_views.py b/examples/example_inputs/django_views.py similarity index 100% rename from example/example_inputs/django_views.py rename to examples/example_inputs/django_views.py diff --git a/example/example_inputs/example.py b/examples/example_inputs/example.py similarity index 100% rename from example/example_inputs/example.py rename to examples/example_inputs/example.py diff --git a/example/example_inputs/for_complete.py b/examples/example_inputs/for_complete.py similarity index 100% rename from example/example_inputs/for_complete.py rename to examples/example_inputs/for_complete.py diff --git a/example/example_inputs/for_func_iterator.py b/examples/example_inputs/for_func_iterator.py similarity index 75% rename from example/example_inputs/for_func_iterator.py rename to examples/example_inputs/for_func_iterator.py index 02778058..e3dcc376 100644 --- a/example/example_inputs/for_func_iterator.py +++ b/examples/example_inputs/for_func_iterator.py @@ -2,4 +2,4 @@ def foo(): return range(1, 8) for x in foo(): - print(x) + print(x) diff --git a/example/example_inputs/for_no_orelse.py b/examples/example_inputs/for_no_orelse.py similarity index 100% rename from example/example_inputs/for_no_orelse.py rename to examples/example_inputs/for_no_orelse.py diff --git a/example/example_inputs/for_tuple_target.py b/examples/example_inputs/for_tuple_target.py similarity index 100% rename from example/example_inputs/for_tuple_target.py rename to examples/example_inputs/for_tuple_target.py diff --git a/example/example_inputs/function.py b/examples/example_inputs/function.py similarity index 100% rename from example/example_inputs/function.py rename to examples/example_inputs/function.py diff --git a/example/example_inputs/function_with_multiple_return.py b/examples/example_inputs/function_with_multiple_return.py similarity index 100% rename from example/example_inputs/function_with_multiple_return.py rename to examples/example_inputs/function_with_multiple_return.py diff --git a/example/example_inputs/function_with_params.py b/examples/example_inputs/function_with_params.py similarity index 100% rename from example/example_inputs/function_with_params.py rename to examples/example_inputs/function_with_params.py diff --git a/example/example_inputs/generator_expression_assign.py b/examples/example_inputs/generator_expression_assign.py similarity index 100% rename from example/example_inputs/generator_expression_assign.py rename to examples/example_inputs/generator_expression_assign.py diff --git a/example/report_cfg_examples/if.py b/examples/example_inputs/if.py similarity index 100% rename from example/report_cfg_examples/if.py rename to examples/example_inputs/if.py diff --git a/example/example_inputs/if_complete.py b/examples/example_inputs/if_complete.py similarity index 100% rename from example/example_inputs/if_complete.py rename to examples/example_inputs/if_complete.py diff --git a/example/report_cfg_examples/if_else.py b/examples/example_inputs/if_else.py similarity index 100% rename from example/report_cfg_examples/if_else.py rename to examples/example_inputs/if_else.py diff --git a/example/report_cfg_examples/if_else_elif.py b/examples/example_inputs/if_else_elif.py similarity index 100% rename from example/report_cfg_examples/if_else_elif.py rename to examples/example_inputs/if_else_elif.py diff --git a/example/example_inputs/if_not.py b/examples/example_inputs/if_not.py similarity index 100% rename from example/example_inputs/if_not.py rename to examples/example_inputs/if_not.py diff --git a/example/example_inputs/if_program.py b/examples/example_inputs/if_program.py similarity index 100% rename from example/example_inputs/if_program.py rename to examples/example_inputs/if_program.py diff --git a/example/import_test/import.py b/examples/example_inputs/import.py similarity index 100% rename from example/import_test/import.py rename to examples/example_inputs/import.py diff --git a/example/example_inputs/linear.py b/examples/example_inputs/linear.py similarity index 100% rename from example/example_inputs/linear.py rename to examples/example_inputs/linear.py diff --git a/example/example_inputs/list_comprehension.py b/examples/example_inputs/list_comprehension.py similarity index 100% rename from example/example_inputs/list_comprehension.py rename to examples/example_inputs/list_comprehension.py diff --git a/example/example_inputs/multiple_except.py b/examples/example_inputs/multiple_except.py similarity index 100% rename from example/example_inputs/multiple_except.py rename to examples/example_inputs/multiple_except.py diff --git a/example/example_inputs/multiple_if_else.py b/examples/example_inputs/multiple_if_else.py similarity index 100% rename from example/example_inputs/multiple_if_else.py rename to examples/example_inputs/multiple_if_else.py diff --git a/example/example_inputs/multiple_parameters_function.py b/examples/example_inputs/multiple_parameters_function.py similarity index 100% rename from example/example_inputs/multiple_parameters_function.py rename to examples/example_inputs/multiple_parameters_function.py diff --git a/example/example_inputs/multiscope.py b/examples/example_inputs/multiscope.py similarity index 100% rename from example/example_inputs/multiscope.py rename to examples/example_inputs/multiscope.py diff --git a/example/example_inputs/name_constant.py b/examples/example_inputs/name_constant.py similarity index 100% rename from example/example_inputs/name_constant.py rename to examples/example_inputs/name_constant.py diff --git a/example/example_inputs/name_for.py b/examples/example_inputs/name_for.py similarity index 100% rename from example/example_inputs/name_for.py rename to examples/example_inputs/name_for.py diff --git a/example/example_inputs/name_if.py b/examples/example_inputs/name_if.py similarity index 100% rename from example/example_inputs/name_if.py rename to examples/example_inputs/name_if.py diff --git a/example/example_inputs/nested_if_else_elif.py b/examples/example_inputs/nested_if_else_elif.py similarity index 100% rename from example/example_inputs/nested_if_else_elif.py rename to examples/example_inputs/nested_if_else_elif.py diff --git a/example/example_inputs/parameters_function.py b/examples/example_inputs/parameters_function.py similarity index 100% rename from example/example_inputs/parameters_function.py rename to examples/example_inputs/parameters_function.py diff --git a/example/example_inputs/recursive.py b/examples/example_inputs/recursive.py similarity index 100% rename from example/example_inputs/recursive.py rename to examples/example_inputs/recursive.py diff --git a/example/example_inputs/simple.py b/examples/example_inputs/simple.py similarity index 100% rename from example/example_inputs/simple.py rename to examples/example_inputs/simple.py diff --git a/example/example_inputs/simple_function.py b/examples/example_inputs/simple_function.py similarity index 100% rename from example/example_inputs/simple_function.py rename to examples/example_inputs/simple_function.py diff --git a/example/example_inputs/simple_function_with_return.py b/examples/example_inputs/simple_function_with_return.py similarity index 100% rename from example/example_inputs/simple_function_with_return.py rename to examples/example_inputs/simple_function_with_return.py diff --git a/example/example_inputs/single_comprehension.py b/examples/example_inputs/single_comprehension.py similarity index 100% rename from example/example_inputs/single_comprehension.py rename to examples/example_inputs/single_comprehension.py diff --git a/example/example_inputs/str_ignored.py b/examples/example_inputs/str_ignored.py similarity index 100% rename from example/example_inputs/str_ignored.py rename to examples/example_inputs/str_ignored.py diff --git a/example/example_inputs/try.py b/examples/example_inputs/try.py similarity index 100% rename from example/example_inputs/try.py rename to examples/example_inputs/try.py diff --git a/example/example_inputs/try_final.py b/examples/example_inputs/try_final.py similarity index 100% rename from example/example_inputs/try_final.py rename to examples/example_inputs/try_final.py diff --git a/example/example_inputs/try_orelse.py b/examples/example_inputs/try_orelse.py similarity index 100% rename from example/example_inputs/try_orelse.py rename to examples/example_inputs/try_orelse.py diff --git a/example/example_inputs/try_orelse_with_no_variables_to_save.py b/examples/example_inputs/try_orelse_with_no_variables_to_save.py similarity index 100% rename from example/example_inputs/try_orelse_with_no_variables_to_save.py rename to examples/example_inputs/try_orelse_with_no_variables_to_save.py diff --git a/example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py b/examples/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py similarity index 100% rename from example/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py rename to examples/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py diff --git a/example/example_inputs/while.py b/examples/example_inputs/while.py similarity index 100% rename from example/example_inputs/while.py rename to examples/example_inputs/while.py diff --git a/example/example_inputs/while_break.py b/examples/example_inputs/while_break.py similarity index 100% rename from example/example_inputs/while_break.py rename to examples/example_inputs/while_break.py diff --git a/example/example_inputs/while_complete.py b/examples/example_inputs/while_complete.py similarity index 100% rename from example/example_inputs/while_complete.py rename to examples/example_inputs/while_complete.py diff --git a/example/example_inputs/while_no_orelse.py b/examples/example_inputs/while_no_orelse.py similarity index 100% rename from example/example_inputs/while_no_orelse.py rename to examples/example_inputs/while_no_orelse.py diff --git a/example/example_inputs/yield.py b/examples/example_inputs/yield.py similarity index 100% rename from example/example_inputs/yield.py rename to examples/example_inputs/yield.py diff --git a/example/example_inputs/import.py b/examples/import_test/import.py similarity index 98% rename from example/example_inputs/import.py rename to examples/import_test/import.py index d45204a9..9277d8b4 100644 --- a/example/example_inputs/import.py +++ b/examples/import_test/import.py @@ -1,4 +1,3 @@ import import_os import import_ast as a import import_math as _ - diff --git a/example/import_test/import_ast.py b/examples/import_test/import_ast.py similarity index 100% rename from example/import_test/import_ast.py rename to examples/import_test/import_ast.py diff --git a/example/import_test/import_from.py b/examples/import_test/import_from.py similarity index 100% rename from example/import_test/import_from.py rename to examples/import_test/import_from.py diff --git a/example/import_test/import_math.py b/examples/import_test/import_math.py similarity index 100% rename from example/import_test/import_math.py rename to examples/import_test/import_math.py diff --git a/example/import_test/import_os.py b/examples/import_test/import_os.py similarity index 100% rename from example/import_test/import_os.py rename to examples/import_test/import_os.py diff --git a/example/import_test_project/A.py b/examples/import_test_project/A.py similarity index 100% rename from example/import_test_project/A.py rename to examples/import_test_project/A.py diff --git a/example/import_test_project/all_folder/__init__.py b/examples/import_test_project/all_folder/__init__.py similarity index 100% rename from example/import_test_project/all_folder/__init__.py rename to examples/import_test_project/all_folder/__init__.py diff --git a/example/import_test_project/all_folder/has_all.py b/examples/import_test_project/all_folder/has_all.py similarity index 100% rename from example/import_test_project/all_folder/has_all.py rename to examples/import_test_project/all_folder/has_all.py diff --git a/example/import_test_project/all_folder/no_all.py b/examples/import_test_project/all_folder/no_all.py similarity index 100% rename from example/import_test_project/all_folder/no_all.py rename to examples/import_test_project/all_folder/no_all.py diff --git a/example/import_test_project/foo/bar.py b/examples/import_test_project/foo/bar.py similarity index 100% rename from example/import_test_project/foo/bar.py rename to examples/import_test_project/foo/bar.py diff --git a/example/import_test_project/multiple_files/A.py b/examples/import_test_project/multiple_files/A.py similarity index 100% rename from example/import_test_project/multiple_files/A.py rename to examples/import_test_project/multiple_files/A.py diff --git a/example/import_test_project/multiple_files/B.py b/examples/import_test_project/multiple_files/B.py similarity index 100% rename from example/import_test_project/multiple_files/B.py rename to examples/import_test_project/multiple_files/B.py diff --git a/example/import_test_project/multiple_files/C.py b/examples/import_test_project/multiple_files/C.py similarity index 100% rename from example/import_test_project/multiple_files/C.py rename to examples/import_test_project/multiple_files/C.py diff --git a/example/import_test_project/multiple_files/D.py b/examples/import_test_project/multiple_files/D.py similarity index 100% rename from example/import_test_project/multiple_files/D.py rename to examples/import_test_project/multiple_files/D.py diff --git a/example/import_test_project/other_dir/test_from_dot_dot.py b/examples/import_test_project/other_dir/test_from_dot_dot.py similarity index 100% rename from example/import_test_project/other_dir/test_from_dot_dot.py rename to examples/import_test_project/other_dir/test_from_dot_dot.py diff --git a/example/import_test_project/other_dir/test_relative_between_folders.py b/examples/import_test_project/other_dir/test_relative_between_folders.py similarity index 100% rename from example/import_test_project/other_dir/test_relative_between_folders.py rename to examples/import_test_project/other_dir/test_relative_between_folders.py diff --git a/example/import_test_project/package_star_with_alias/A.py b/examples/import_test_project/package_star/A.py similarity index 100% rename from example/import_test_project/package_star_with_alias/A.py rename to examples/import_test_project/package_star/A.py diff --git a/example/import_test_project/package_star_with_alias/B.py b/examples/import_test_project/package_star/B.py similarity index 100% rename from example/import_test_project/package_star_with_alias/B.py rename to examples/import_test_project/package_star/B.py diff --git a/example/import_test_project/package_star/__init__.py b/examples/import_test_project/package_star/__init__.py similarity index 100% rename from example/import_test_project/package_star/__init__.py rename to examples/import_test_project/package_star/__init__.py diff --git a/example/import_test_project/package_star_with_alias/folder/C.py b/examples/import_test_project/package_star/folder/C.py similarity index 100% rename from example/import_test_project/package_star_with_alias/folder/C.py rename to examples/import_test_project/package_star/folder/C.py diff --git a/example/import_test_project/package_star/folder/__init__.py b/examples/import_test_project/package_star/folder/__init__.py similarity index 100% rename from example/import_test_project/package_star/folder/__init__.py rename to examples/import_test_project/package_star/folder/__init__.py diff --git a/example/import_test_project/package_star/A.py b/examples/import_test_project/package_star_with_alias/A.py similarity index 100% rename from example/import_test_project/package_star/A.py rename to examples/import_test_project/package_star_with_alias/A.py diff --git a/example/import_test_project/package_star/B.py b/examples/import_test_project/package_star_with_alias/B.py similarity index 100% rename from example/import_test_project/package_star/B.py rename to examples/import_test_project/package_star_with_alias/B.py diff --git a/example/import_test_project/package_star_with_alias/__init__.py b/examples/import_test_project/package_star_with_alias/__init__.py similarity index 100% rename from example/import_test_project/package_star_with_alias/__init__.py rename to examples/import_test_project/package_star_with_alias/__init__.py diff --git a/example/import_test_project/package_star/folder/C.py b/examples/import_test_project/package_star_with_alias/folder/C.py similarity index 100% rename from example/import_test_project/package_star/folder/C.py rename to examples/import_test_project/package_star_with_alias/folder/C.py diff --git a/example/import_test_project/package_star_with_alias/folder/__init__.py b/examples/import_test_project/package_star_with_alias/folder/__init__.py similarity index 100% rename from example/import_test_project/package_star_with_alias/folder/__init__.py rename to examples/import_test_project/package_star_with_alias/folder/__init__.py diff --git a/example/import_test_project/package_with_file/__init__.py b/examples/import_test_project/package_with_file/__init__.py similarity index 100% rename from example/import_test_project/package_with_file/__init__.py rename to examples/import_test_project/package_with_file/__init__.py diff --git a/example/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py b/examples/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py rename to examples/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/package_with_file_and_alias/__init__.py b/examples/import_test_project/package_with_file_and_alias/__init__.py similarity index 100% rename from example/import_test_project/package_with_file_and_alias/__init__.py rename to examples/import_test_project/package_with_file_and_alias/__init__.py diff --git a/example/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py b/examples/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py similarity index 100% rename from example/import_test_project/package_with_file/nested_folder_without_init/Starbucks.py rename to examples/import_test_project/package_with_file_and_alias/nested_folder_without_init/Starbucks.py diff --git a/example/import_test_project/package_with_folder/__init__.py b/examples/import_test_project/package_with_folder/__init__.py similarity index 100% rename from example/import_test_project/package_with_folder/__init__.py rename to examples/import_test_project/package_with_folder/__init__.py diff --git a/example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py b/examples/import_test_project/package_with_folder/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py rename to examples/import_test_project/package_with_folder/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py b/examples/import_test_project/package_with_folder/nested_folder_with_init/moose.py similarity index 100% rename from example/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py rename to examples/import_test_project/package_with_folder/nested_folder_with_init/moose.py diff --git a/example/import_test_project/package_with_folder_and_alias/__init__.py b/examples/import_test_project/package_with_folder_and_alias/__init__.py similarity index 100% rename from example/import_test_project/package_with_folder_and_alias/__init__.py rename to examples/import_test_project/package_with_folder_and_alias/__init__.py diff --git a/example/import_test_project/package_with_folder/nested_folder_with_init/__init__.py b/examples/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py similarity index 100% rename from example/import_test_project/package_with_folder/nested_folder_with_init/__init__.py rename to examples/import_test_project/package_with_folder_and_alias/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/package_with_folder/nested_folder_with_init/moose.py b/examples/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py similarity index 100% rename from example/import_test_project/package_with_folder/nested_folder_with_init/moose.py rename to examples/import_test_project/package_with_folder_and_alias/nested_folder_with_init/moose.py diff --git a/example/import_test_project/package_with_function/__init__.py b/examples/import_test_project/package_with_function/__init__.py similarity index 100% rename from example/import_test_project/package_with_function/__init__.py rename to examples/import_test_project/package_with_function/__init__.py diff --git a/example/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py b/examples/import_test_project/package_with_function/nested_folder_with_init/__init__.py old mode 100644 new mode 100755 similarity index 100% rename from example/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py rename to examples/import_test_project/package_with_function/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py b/examples/import_test_project/package_with_function/nested_folder_with_init/starbucks.py old mode 100644 new mode 100755 similarity index 100% rename from example/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py rename to examples/import_test_project/package_with_function/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/package_with_function_and_alias/__init__.py b/examples/import_test_project/package_with_function_and_alias/__init__.py similarity index 100% rename from example/import_test_project/package_with_function_and_alias/__init__.py rename to examples/import_test_project/package_with_function_and_alias/__init__.py diff --git a/example/import_test_project/package_with_function/nested_folder_with_init/__init__.py b/examples/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py old mode 100755 new mode 100644 similarity index 100% rename from example/import_test_project/package_with_function/nested_folder_with_init/__init__.py rename to examples/import_test_project/package_with_function_and_alias/nested_folder_with_init/__init__.py diff --git a/example/import_test_project/package_with_function/nested_folder_with_init/starbucks.py b/examples/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py old mode 100755 new mode 100644 similarity index 100% rename from example/import_test_project/package_with_function/nested_folder_with_init/starbucks.py rename to examples/import_test_project/package_with_function_and_alias/nested_folder_with_init/starbucks.py diff --git a/example/import_test_project/test_all.py b/examples/import_test_project/test_all.py similarity index 100% rename from example/import_test_project/test_all.py rename to examples/import_test_project/test_all.py diff --git a/example/import_test_project/test_from_directory.py b/examples/import_test_project/test_from_directory.py similarity index 100% rename from example/import_test_project/test_from_directory.py rename to examples/import_test_project/test_from_directory.py diff --git a/example/import_test_project/test_from_dot.py b/examples/import_test_project/test_from_dot.py similarity index 100% rename from example/import_test_project/test_from_dot.py rename to examples/import_test_project/test_from_dot.py diff --git a/example/import_test_project/test_from_file_import_star.py b/examples/import_test_project/test_from_file_import_star.py similarity index 100% rename from example/import_test_project/test_from_file_import_star.py rename to examples/import_test_project/test_from_file_import_star.py diff --git a/example/import_test_project/test_from_package_import_star.py b/examples/import_test_project/test_from_package_import_star.py similarity index 100% rename from example/import_test_project/test_from_package_import_star.py rename to examples/import_test_project/test_from_package_import_star.py diff --git a/example/import_test_project/test_from_package_import_star_with_alias.py b/examples/import_test_project/test_from_package_import_star_with_alias.py similarity index 100% rename from example/import_test_project/test_from_package_import_star_with_alias.py rename to examples/import_test_project/test_from_package_import_star_with_alias.py diff --git a/example/import_test_project/test_from_package_with_file.py b/examples/import_test_project/test_from_package_with_file.py similarity index 100% rename from example/import_test_project/test_from_package_with_file.py rename to examples/import_test_project/test_from_package_with_file.py diff --git a/example/import_test_project/test_from_package_with_file_and_alias.py b/examples/import_test_project/test_from_package_with_file_and_alias.py similarity index 100% rename from example/import_test_project/test_from_package_with_file_and_alias.py rename to examples/import_test_project/test_from_package_with_file_and_alias.py diff --git a/example/import_test_project/test_from_package_with_function.py b/examples/import_test_project/test_from_package_with_function.py similarity index 100% rename from example/import_test_project/test_from_package_with_function.py rename to examples/import_test_project/test_from_package_with_function.py diff --git a/example/import_test_project/test_from_package_with_function_and_alias.py b/examples/import_test_project/test_from_package_with_function_and_alias.py similarity index 100% rename from example/import_test_project/test_from_package_with_function_and_alias.py rename to examples/import_test_project/test_from_package_with_function_and_alias.py diff --git a/example/import_test_project/test_import.py b/examples/import_test_project/test_import.py similarity index 100% rename from example/import_test_project/test_import.py rename to examples/import_test_project/test_import.py diff --git a/example/import_test_project/test_import_as.py b/examples/import_test_project/test_import_as.py similarity index 100% rename from example/import_test_project/test_import_as.py rename to examples/import_test_project/test_import_as.py diff --git a/example/import_test_project/test_multiple_files_with_aliases.py b/examples/import_test_project/test_multiple_files_with_aliases.py similarity index 100% rename from example/import_test_project/test_multiple_files_with_aliases.py rename to examples/import_test_project/test_multiple_files_with_aliases.py diff --git a/example/import_test_project/test_multiple_functions_with_aliases.py b/examples/import_test_project/test_multiple_functions_with_aliases.py similarity index 100% rename from example/import_test_project/test_multiple_functions_with_aliases.py rename to examples/import_test_project/test_multiple_functions_with_aliases.py diff --git a/example/import_test_project/test_no_all.py b/examples/import_test_project/test_no_all.py similarity index 100% rename from example/import_test_project/test_no_all.py rename to examples/import_test_project/test_no_all.py diff --git a/example/import_test_project/test_package_with_file.py b/examples/import_test_project/test_package_with_file.py similarity index 100% rename from example/import_test_project/test_package_with_file.py rename to examples/import_test_project/test_package_with_file.py diff --git a/example/import_test_project/test_package_with_file_and_alias.py b/examples/import_test_project/test_package_with_file_and_alias.py similarity index 100% rename from example/import_test_project/test_package_with_file_and_alias.py rename to examples/import_test_project/test_package_with_file_and_alias.py diff --git a/example/import_test_project/test_package_with_folder.py b/examples/import_test_project/test_package_with_folder.py similarity index 100% rename from example/import_test_project/test_package_with_folder.py rename to examples/import_test_project/test_package_with_folder.py diff --git a/example/import_test_project/test_package_with_folder_and_alias.py b/examples/import_test_project/test_package_with_folder_and_alias.py similarity index 100% rename from example/import_test_project/test_package_with_folder_and_alias.py rename to examples/import_test_project/test_package_with_folder_and_alias.py diff --git a/example/import_test_project/test_package_with_function.py b/examples/import_test_project/test_package_with_function.py similarity index 100% rename from example/import_test_project/test_package_with_function.py rename to examples/import_test_project/test_package_with_function.py diff --git a/example/import_test_project/test_package_with_function_and_alias.py b/examples/import_test_project/test_package_with_function_and_alias.py similarity index 100% rename from example/import_test_project/test_package_with_function_and_alias.py rename to examples/import_test_project/test_package_with_function_and_alias.py diff --git a/example/import_test_project/test_relative_from_directory.py b/examples/import_test_project/test_relative_from_directory.py similarity index 100% rename from example/import_test_project/test_relative_from_directory.py rename to examples/import_test_project/test_relative_from_directory.py diff --git a/example/import_test_project/test_relative_level_1.py b/examples/import_test_project/test_relative_level_1.py similarity index 100% rename from example/import_test_project/test_relative_level_1.py rename to examples/import_test_project/test_relative_level_1.py diff --git a/example/import_test_project/test_relative_level_2.py b/examples/import_test_project/test_relative_level_2.py similarity index 100% rename from example/import_test_project/test_relative_level_2.py rename to examples/import_test_project/test_relative_level_2.py diff --git a/example/nested_functions_code/builtin_with_user_defined_inner.py b/examples/nested_functions_code/builtin_with_user_defined_inner.py similarity index 100% rename from example/nested_functions_code/builtin_with_user_defined_inner.py rename to examples/nested_functions_code/builtin_with_user_defined_inner.py diff --git a/example/nested_functions_code/nested_user_defined_function_calls.py b/examples/nested_functions_code/nested_user_defined_function_calls.py similarity index 100% rename from example/nested_functions_code/nested_user_defined_function_calls.py rename to examples/nested_functions_code/nested_user_defined_function_calls.py diff --git a/example/nested_functions_code/sink_with_blackbox_inner.py b/examples/nested_functions_code/sink_with_blackbox_inner.py similarity index 100% rename from example/nested_functions_code/sink_with_blackbox_inner.py rename to examples/nested_functions_code/sink_with_blackbox_inner.py diff --git a/example/nested_functions_code/sink_with_result_of_blackbox_nested.py b/examples/nested_functions_code/sink_with_result_of_blackbox_nested.py similarity index 100% rename from example/nested_functions_code/sink_with_result_of_blackbox_nested.py rename to examples/nested_functions_code/sink_with_result_of_blackbox_nested.py diff --git a/example/nested_functions_code/sink_with_result_of_user_defined_nested.py b/examples/nested_functions_code/sink_with_result_of_user_defined_nested.py similarity index 100% rename from example/nested_functions_code/sink_with_result_of_user_defined_nested.py rename to examples/nested_functions_code/sink_with_result_of_user_defined_nested.py diff --git a/example/nested_functions_code/sink_with_user_defined_inner.py b/examples/nested_functions_code/sink_with_user_defined_inner.py similarity index 100% rename from example/nested_functions_code/sink_with_user_defined_inner.py rename to examples/nested_functions_code/sink_with_user_defined_inner.py diff --git a/example/report_cfg_examples/ast_example.py b/examples/report_cfg_examples/ast_example.py similarity index 100% rename from example/report_cfg_examples/ast_example.py rename to examples/report_cfg_examples/ast_example.py diff --git a/example/report_cfg_examples/decorator.py b/examples/report_cfg_examples/decorator.py similarity index 93% rename from example/report_cfg_examples/decorator.py rename to examples/report_cfg_examples/decorator.py index abc9afd3..868087b8 100644 --- a/example/report_cfg_examples/decorator.py +++ b/examples/report_cfg_examples/decorator.py @@ -4,9 +4,9 @@ def __init__(self, number): def __call__(self, f): print('Function: ', self.number) - + return f - + @LabelDecorator(1) def foo(a, b): diff --git a/example/report_cfg_examples/for_else.py b/examples/report_cfg_examples/for_else.py similarity index 100% rename from example/report_cfg_examples/for_else.py rename to examples/report_cfg_examples/for_else.py diff --git a/example/example_inputs/if.py b/examples/report_cfg_examples/if.py similarity index 100% rename from example/example_inputs/if.py rename to examples/report_cfg_examples/if.py diff --git a/example/example_inputs/if_else.py b/examples/report_cfg_examples/if_else.py similarity index 100% rename from example/example_inputs/if_else.py rename to examples/report_cfg_examples/if_else.py diff --git a/example/example_inputs/if_else_elif.py b/examples/report_cfg_examples/if_else_elif.py similarity index 100% rename from example/example_inputs/if_else_elif.py rename to examples/report_cfg_examples/if_else_elif.py diff --git a/example/report_cfg_examples/sequence.py b/examples/report_cfg_examples/sequence.py similarity index 100% rename from example/report_cfg_examples/sequence.py rename to examples/report_cfg_examples/sequence.py diff --git a/examples/report_cfg_examples/simple.py b/examples/report_cfg_examples/simple.py new file mode 100644 index 00000000..b95c23a4 --- /dev/null +++ b/examples/report_cfg_examples/simple.py @@ -0,0 +1 @@ +x = 3 diff --git a/example/report_cfg_examples/small_program.py b/examples/report_cfg_examples/small_program.py similarity index 100% rename from example/report_cfg_examples/small_program.py rename to examples/report_cfg_examples/small_program.py diff --git a/example/report_cfg_examples/while.py b/examples/report_cfg_examples/while.py similarity index 100% rename from example/report_cfg_examples/while.py rename to examples/report_cfg_examples/while.py diff --git a/example/report_cfg_examples/while_break.py b/examples/report_cfg_examples/while_break.py similarity index 100% rename from example/report_cfg_examples/while_break.py rename to examples/report_cfg_examples/while_break.py diff --git a/example/report_cfg_examples/while_else.py b/examples/report_cfg_examples/while_else.py similarity index 100% rename from example/report_cfg_examples/while_else.py rename to examples/report_cfg_examples/while_else.py diff --git a/example/report_cfg_examples/while_else_2.py b/examples/report_cfg_examples/while_else_2.py similarity index 100% rename from example/report_cfg_examples/while_else_2.py rename to examples/report_cfg_examples/while_else_2.py diff --git a/example/test_project/app.py b/examples/test_project/app.py similarity index 100% rename from example/test_project/app.py rename to examples/test_project/app.py diff --git a/example/test_project/exceptions.py b/examples/test_project/exceptions.py similarity index 100% rename from example/test_project/exceptions.py rename to examples/test_project/exceptions.py diff --git a/example/test_project/folder/directory/indhold.py b/examples/test_project/folder/directory/indhold.py similarity index 100% rename from example/test_project/folder/directory/indhold.py rename to examples/test_project/folder/directory/indhold.py diff --git a/example/test_project/folder/file.txt b/examples/test_project/folder/file.txt similarity index 100% rename from example/test_project/folder/file.txt rename to examples/test_project/folder/file.txt diff --git a/example/test_project/folder/some.py b/examples/test_project/folder/some.py similarity index 100% rename from example/test_project/folder/some.py rename to examples/test_project/folder/some.py diff --git a/example/test_project/license.txt b/examples/test_project/license.txt similarity index 100% rename from example/test_project/license.txt rename to examples/test_project/license.txt diff --git a/example/test_project/utils.py b/examples/test_project/utils.py similarity index 100% rename from example/test_project/utils.py rename to examples/test_project/utils.py diff --git a/example/vulnerable_code/XSS.py b/examples/vulnerable_code/XSS.py similarity index 100% rename from example/vulnerable_code/XSS.py rename to examples/vulnerable_code/XSS.py diff --git a/example/vulnerable_code/XSS_assign_to_other_var.py b/examples/vulnerable_code/XSS_assign_to_other_var.py similarity index 100% rename from example/vulnerable_code/XSS_assign_to_other_var.py rename to examples/vulnerable_code/XSS_assign_to_other_var.py diff --git a/example/vulnerable_code/XSS_call.py b/examples/vulnerable_code/XSS_call.py similarity index 100% rename from example/vulnerable_code/XSS_call.py rename to examples/vulnerable_code/XSS_call.py diff --git a/example/vulnerable_code/XSS_form.py b/examples/vulnerable_code/XSS_form.py similarity index 100% rename from example/vulnerable_code/XSS_form.py rename to examples/vulnerable_code/XSS_form.py diff --git a/example/vulnerable_code/XSS_no_vuln.py b/examples/vulnerable_code/XSS_no_vuln.py similarity index 100% rename from example/vulnerable_code/XSS_no_vuln.py rename to examples/vulnerable_code/XSS_no_vuln.py diff --git a/example/vulnerable_code/XSS_reassign.py b/examples/vulnerable_code/XSS_reassign.py similarity index 100% rename from example/vulnerable_code/XSS_reassign.py rename to examples/vulnerable_code/XSS_reassign.py diff --git a/example/vulnerable_code/XSS_sanitised.py b/examples/vulnerable_code/XSS_sanitised.py similarity index 100% rename from example/vulnerable_code/XSS_sanitised.py rename to examples/vulnerable_code/XSS_sanitised.py diff --git a/example/vulnerable_code/XSS_url.py b/examples/vulnerable_code/XSS_url.py similarity index 100% rename from example/vulnerable_code/XSS_url.py rename to examples/vulnerable_code/XSS_url.py diff --git a/example/vulnerable_code/XSS_variable_assign.py b/examples/vulnerable_code/XSS_variable_assign.py similarity index 100% rename from example/vulnerable_code/XSS_variable_assign.py rename to examples/vulnerable_code/XSS_variable_assign.py diff --git a/example/vulnerable_code/XSS_variable_assign_no_vuln.py b/examples/vulnerable_code/XSS_variable_assign_no_vuln.py similarity index 100% rename from example/vulnerable_code/XSS_variable_assign_no_vuln.py rename to examples/vulnerable_code/XSS_variable_assign_no_vuln.py diff --git a/example/vulnerable_code/XSS_variable_multiple_assign.py b/examples/vulnerable_code/XSS_variable_multiple_assign.py similarity index 98% rename from example/vulnerable_code/XSS_variable_multiple_assign.py rename to examples/vulnerable_code/XSS_variable_multiple_assign.py index 1f2ff708..fb352999 100644 --- a/example/vulnerable_code/XSS_variable_multiple_assign.py +++ b/examples/vulnerable_code/XSS_variable_multiple_assign.py @@ -13,7 +13,7 @@ def XSS1(): html = open('templates/XSS_param.html').read() resp = make_response(html.replace('{{ param }}', another_one)) - + return resp if __name__ == '__main__': diff --git a/example/vulnerable_code/blackbox_call_after_if.py b/examples/vulnerable_code/blackbox_call_after_if.py similarity index 100% rename from example/vulnerable_code/blackbox_call_after_if.py rename to examples/vulnerable_code/blackbox_call_after_if.py diff --git a/example/vulnerable_code/command_injection.py b/examples/vulnerable_code/command_injection.py similarity index 100% rename from example/vulnerable_code/command_injection.py rename to examples/vulnerable_code/command_injection.py diff --git a/example/vulnerable_code/django_XSS.py b/examples/vulnerable_code/django_XSS.py similarity index 99% rename from example/vulnerable_code/django_XSS.py rename to examples/vulnerable_code/django_XSS.py index 6dd9560b..3a4d47ab 100644 --- a/example/vulnerable_code/django_XSS.py +++ b/examples/vulnerable_code/django_XSS.py @@ -3,4 +3,3 @@ def xss1(request, param): return render(request, 'templates/xss.html', {'param': param}) - diff --git a/example/vulnerable_code/ensure_saved_scope.py b/examples/vulnerable_code/ensure_saved_scope.py similarity index 100% rename from example/vulnerable_code/ensure_saved_scope.py rename to examples/vulnerable_code/ensure_saved_scope.py diff --git a/example/vulnerable_code/inter_command_injection.py b/examples/vulnerable_code/inter_command_injection.py similarity index 100% rename from example/vulnerable_code/inter_command_injection.py rename to examples/vulnerable_code/inter_command_injection.py diff --git a/example/vulnerable_code/inter_command_injection_2.py b/examples/vulnerable_code/inter_command_injection_2.py similarity index 100% rename from example/vulnerable_code/inter_command_injection_2.py rename to examples/vulnerable_code/inter_command_injection_2.py diff --git a/example/vulnerable_code/menu.txt b/examples/vulnerable_code/menu.txt similarity index 100% rename from example/vulnerable_code/menu.txt rename to examples/vulnerable_code/menu.txt diff --git a/example/vulnerable_code/multi_chain.py b/examples/vulnerable_code/multi_chain.py similarity index 99% rename from example/vulnerable_code/multi_chain.py rename to examples/vulnerable_code/multi_chain.py index 7be9e884..b80bc288 100644 --- a/example/vulnerable_code/multi_chain.py +++ b/examples/vulnerable_code/multi_chain.py @@ -16,4 +16,3 @@ def multi_chain(): subprocess.call(ben, shell=True) return render_template('multi_chain.html') - diff --git a/example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py b/examples/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py similarity index 100% rename from example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py rename to examples/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py diff --git a/example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py b/examples/vulnerable_code/multiple_nested_blackbox_calls_after_for.py similarity index 100% rename from example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py rename to examples/vulnerable_code/multiple_nested_blackbox_calls_after_for.py diff --git a/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py b/examples/vulnerable_code/multiple_nested_user_defined_calls_after_if.py similarity index 99% rename from example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py rename to examples/vulnerable_code/multiple_nested_user_defined_calls_after_if.py index e99212f5..c14bf6ea 100644 --- a/example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py +++ b/examples/vulnerable_code/multiple_nested_user_defined_calls_after_if.py @@ -16,4 +16,3 @@ def second_inner(second_inner_arg): image_name = 'foo' foo = outer(first_inner(image_name), second_inner(image_name)) # Any call after ControlFlowNode caused the problem send_file(foo) - diff --git a/example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py b/examples/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py similarity index 100% rename from example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py rename to examples/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py diff --git a/example/vulnerable_code/path_traversal.py b/examples/vulnerable_code/path_traversal.py similarity index 100% rename from example/vulnerable_code/path_traversal.py rename to examples/vulnerable_code/path_traversal.py diff --git a/example/vulnerable_code/path_traversal_sanitised.py b/examples/vulnerable_code/path_traversal_sanitised.py similarity index 100% rename from example/vulnerable_code/path_traversal_sanitised.py rename to examples/vulnerable_code/path_traversal_sanitised.py diff --git a/example/vulnerable_code/path_traversal_sanitised_2.py b/examples/vulnerable_code/path_traversal_sanitised_2.py similarity index 100% rename from example/vulnerable_code/path_traversal_sanitised_2.py rename to examples/vulnerable_code/path_traversal_sanitised_2.py diff --git a/example/vulnerable_code/render_ids.py b/examples/vulnerable_code/render_ids.py similarity index 100% rename from example/vulnerable_code/render_ids.py rename to examples/vulnerable_code/render_ids.py diff --git a/example/vulnerable_code/simple_vulnerability.py b/examples/vulnerable_code/simple_vulnerability.py similarity index 100% rename from example/vulnerable_code/simple_vulnerability.py rename to examples/vulnerable_code/simple_vulnerability.py diff --git a/example/vulnerable_code/sql/init_db.py b/examples/vulnerable_code/sql/init_db.py similarity index 100% rename from example/vulnerable_code/sql/init_db.py rename to examples/vulnerable_code/sql/init_db.py diff --git a/example/vulnerable_code/sql/sqli.py b/examples/vulnerable_code/sql/sqli.py similarity index 95% rename from example/vulnerable_code/sql/sqli.py rename to examples/vulnerable_code/sql/sqli.py index f8fbd0d8..7435ae67 100644 --- a/example/vulnerable_code/sql/sqli.py +++ b/examples/vulnerable_code/sql/sqli.py @@ -19,8 +19,8 @@ def __init__(self, username, email): self.email = email def __repr__(self): - return '' % self.username - + return '' % self.username + @app.route('/raw') def index(): param = request.args.get('param', 'not set') diff --git a/example/vulnerable_code/tainted_arg_normal_function.py b/examples/vulnerable_code/tainted_arg_normal_function.py similarity index 100% rename from example/vulnerable_code/tainted_arg_normal_function.py rename to examples/vulnerable_code/tainted_arg_normal_function.py diff --git a/example/vulnerable_code/templates/XSS_param.html b/examples/vulnerable_code/templates/XSS_param.html similarity index 100% rename from example/vulnerable_code/templates/XSS_param.html rename to examples/vulnerable_code/templates/XSS_param.html diff --git a/example/vulnerable_code/templates/attackerSite.html b/examples/vulnerable_code/templates/attackerSite.html similarity index 100% rename from example/vulnerable_code/templates/attackerSite.html rename to examples/vulnerable_code/templates/attackerSite.html diff --git a/example/vulnerable_code/templates/command_injection.html b/examples/vulnerable_code/templates/command_injection.html similarity index 100% rename from example/vulnerable_code/templates/command_injection.html rename to examples/vulnerable_code/templates/command_injection.html diff --git a/example/vulnerable_code/templates/example2_form.html b/examples/vulnerable_code/templates/example2_form.html similarity index 100% rename from example/vulnerable_code/templates/example2_form.html rename to examples/vulnerable_code/templates/example2_form.html diff --git a/example/vulnerable_code/templates/example2_response.html b/examples/vulnerable_code/templates/example2_response.html similarity index 100% rename from example/vulnerable_code/templates/example2_response.html rename to examples/vulnerable_code/templates/example2_response.html diff --git a/example/vulnerable_code/templates/link.html b/examples/vulnerable_code/templates/link.html similarity index 100% rename from example/vulnerable_code/templates/link.html rename to examples/vulnerable_code/templates/link.html diff --git a/example/vulnerable_code/templates/render_ids.html b/examples/vulnerable_code/templates/render_ids.html similarity index 100% rename from example/vulnerable_code/templates/render_ids.html rename to examples/vulnerable_code/templates/render_ids.html diff --git a/example/vulnerable_code_across_files/absolute_from_file_command_injection.py b/examples/vulnerable_code_across_files/absolute_from_file_command_injection.py similarity index 100% rename from example/vulnerable_code_across_files/absolute_from_file_command_injection.py rename to examples/vulnerable_code_across_files/absolute_from_file_command_injection.py diff --git a/example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py b/examples/vulnerable_code_across_files/absolute_from_file_command_injection_2.py similarity index 100% rename from example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py rename to examples/vulnerable_code_across_files/absolute_from_file_command_injection_2.py diff --git a/example/vulnerable_code_across_files/blackbox_library_call.py b/examples/vulnerable_code_across_files/blackbox_library_call.py similarity index 100% rename from example/vulnerable_code_across_files/blackbox_library_call.py rename to examples/vulnerable_code_across_files/blackbox_library_call.py diff --git a/example/vulnerable_code_across_files/import_file_command_injection.py b/examples/vulnerable_code_across_files/import_file_command_injection.py similarity index 100% rename from example/vulnerable_code_across_files/import_file_command_injection.py rename to examples/vulnerable_code_across_files/import_file_command_injection.py diff --git a/example/vulnerable_code_across_files/import_file_command_injection_2.py b/examples/vulnerable_code_across_files/import_file_command_injection_2.py similarity index 100% rename from example/vulnerable_code_across_files/import_file_command_injection_2.py rename to examples/vulnerable_code_across_files/import_file_command_injection_2.py diff --git a/example/vulnerable_code_across_files/import_file_does_not_exist.py b/examples/vulnerable_code_across_files/import_file_does_not_exist.py similarity index 100% rename from example/vulnerable_code_across_files/import_file_does_not_exist.py rename to examples/vulnerable_code_across_files/import_file_does_not_exist.py diff --git a/example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py b/examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py similarity index 100% rename from example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py rename to examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py diff --git a/example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py b/examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py similarity index 100% rename from example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py rename to examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py diff --git a/example/vulnerable_code_across_files/other_file.py b/examples/vulnerable_code_across_files/other_file.py similarity index 100% rename from example/vulnerable_code_across_files/other_file.py rename to examples/vulnerable_code_across_files/other_file.py diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 1dcde561..f3a3a28a 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -4,21 +4,21 @@ class CFGGeneralTest(BaseTestCase): def test_repr_cfg(self): - self.cfg_create_from_file('example/example_inputs/for_complete.py') + self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) #print(repr(self.cfg)) def test_str_cfg(self): - self.cfg_create_from_file('example/example_inputs/for_complete.py') + self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) #print(self.cfg) def test_no_tuples(self): - self.cfg_create_from_file('example/example_inputs/for_complete.py') + self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) @@ -27,7 +27,7 @@ def test_no_tuples(self): self.assertIsInstance(edge, Node) def test_start_and_exit_nodes(self): - self.cfg_create_from_file('example/example_inputs/simple.py') + self.cfg_create_from_file('examples/example_inputs/simple.py') self.assert_length(self.cfg.nodes, expected_length=3) @@ -41,14 +41,14 @@ def test_start_and_exit_nodes(self): self.assertEqual(type(self.cfg.nodes[exit_node]), EntryOrExitNode) def test_start_and_exit_nodes_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/simple.py') + self.cfg_create_from_file('examples/example_inputs/simple.py') self.assertLineNumber(self.cfg.nodes[0], None) self.assertLineNumber(self.cfg.nodes[1], 1) self.assertLineNumber(self.cfg.nodes[2], None) def test_str_ignored(self): - self.cfg_create_from_file('example/example_inputs/str_ignored.py') + self.cfg_create_from_file('examples/example_inputs/str_ignored.py') self.assert_length(self.cfg.nodes, expected_length=3) @@ -59,7 +59,7 @@ def test_str_ignored(self): class CFGForTest(BaseTestCase): def test_for_complete(self): - self.cfg_create_from_file('example/example_inputs/for_complete.py') + self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.assert_length(self.cfg.nodes, expected_length=8) @@ -89,7 +89,7 @@ def test_for_complete(self): (exit_node, next_node)]) def test_for_no_orelse(self): - self.cfg_create_from_file('example/example_inputs/for_no_orelse.py') + self.cfg_create_from_file('examples/example_inputs/for_no_orelse.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) @@ -105,7 +105,7 @@ def test_for_no_orelse(self): self.assertInCfg([(for_node, entry), (body_1, for_node), (body_2, body_1), (for_node, body_2), (next_node, for_node), (exit_node, next_node)]) def test_for_tuple_target(self): - self.cfg_create_from_file('example/example_inputs/for_tuple_target.py') + self.cfg_create_from_file('examples/example_inputs/for_tuple_target.py') self.assert_length(self.cfg.nodes, expected_length = 4) @@ -118,7 +118,7 @@ def test_for_tuple_target(self): self.assertEqual(self.cfg.nodes[for_node].label, "for (x, y) in [(1, 2), (3, 4)]:") def test_for_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/for_complete.py') + self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.assert_length(self.cfg.nodes, expected_length=8) @@ -138,7 +138,7 @@ def test_for_line_numbers(self): self.assertLineNumber(next_node, 7) def test_for_func_iterator(self): - self.cfg_create_from_file('example/example_inputs/for_func_iterator.py') + self.cfg_create_from_file('examples/example_inputs/for_func_iterator.py') self.assert_length(self.cfg.nodes, expected_length=9) @@ -168,7 +168,7 @@ def connected(self, node, successor): return (successor, node) def test_simple_try(self): - self.cfg_create_from_file('example/example_inputs/try.py') + self.cfg_create_from_file('examples/example_inputs/try.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) @@ -189,7 +189,7 @@ def test_simple_try(self): self.connected(try_body, _exit)]) def test_orelse(self): - self.cfg_create_from_file('example/example_inputs/try_orelse.py') + self.cfg_create_from_file('examples/example_inputs/try_orelse.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=20) @@ -246,7 +246,7 @@ def test_orelse(self): self.connected(print_good, _exit)]) def test_final(self): - self.cfg_create_from_file('example/example_inputs/try_final.py') + self.cfg_create_from_file('examples/example_inputs/try_final.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) @@ -273,7 +273,7 @@ def test_final(self): class CFGIfTest(BaseTestCase): def test_if_complete(self): - self.cfg_create_from_file('example/example_inputs/if_complete.py') + self.cfg_create_from_file('examples/example_inputs/if_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) @@ -301,7 +301,7 @@ def test_if_complete(self): self.assertInCfg([(test, entry), (eliftest, test), (body_1, test), (body_2, body_1), (next_node, body_2), (else_body, eliftest), (elif_body, eliftest), (next_node, elif_body), (next_node, else_body), (exit_node, next_node)]) def test_single_if(self): - self.cfg_create_from_file('example/example_inputs/if.py') + self.cfg_create_from_file('examples/example_inputs/if.py') self.assert_length(self.cfg.nodes, expected_length=4) @@ -312,7 +312,7 @@ def test_single_if(self): self.assertInCfg([(test_node,start_node), (body_node,test_node), (exit_node,test_node), (exit_node,body_node)]) def test_single_if_else(self): - self.cfg_create_from_file('example/example_inputs/if_else.py') + self.cfg_create_from_file('examples/example_inputs/if_else.py') self.assert_length(self.cfg.nodes, expected_length=5) @@ -324,7 +324,7 @@ def test_single_if_else(self): self.assertInCfg([(test_node,start_node), (body_node,test_node), (else_body,test_node), (exit_node,else_body), (exit_node,body_node)]) def test_multiple_if_else(self): - self.cfg_create_from_file('example/example_inputs/multiple_if_else.py') + self.cfg_create_from_file('examples/example_inputs/multiple_if_else.py') self.assert_length(self.cfg.nodes, expected_length=9) @@ -352,7 +352,7 @@ def test_multiple_if_else(self): ]) def test_if_else_elif(self): - self.cfg_create_from_file('example/example_inputs/if_else_elif.py') + self.cfg_create_from_file('examples/example_inputs/if_else_elif.py') self.assert_length(self.cfg.nodes, expected_length=7) @@ -375,7 +375,7 @@ def test_if_else_elif(self): ]) def test_nested_if_else_elif(self): - self.cfg_create_from_file('example/example_inputs/nested_if_else_elif.py') + self.cfg_create_from_file('examples/example_inputs/nested_if_else_elif.py') self.assert_length(self.cfg.nodes, expected_length=12) @@ -411,7 +411,7 @@ def test_nested_if_else_elif(self): def test_if_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/if_complete.py') + self.cfg_create_from_file('examples/example_inputs/if_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=9) @@ -434,7 +434,7 @@ def test_if_line_numbers(self): self.assertLineNumber(next_stmt, 8) def test_if_not(self): - self.cfg_create_from_file('example/example_inputs/if_not.py') + self.cfg_create_from_file('examples/example_inputs/if_not.py') self.assert_length(self.cfg.nodes, expected_length=4) @@ -449,7 +449,7 @@ def test_if_not(self): class CFGWhileTest(BaseTestCase): def test_while_complete(self): - self.cfg_create_from_file('example/example_inputs/while_complete.py') + self.cfg_create_from_file('examples/example_inputs/while_complete.py') self.assert_length(self.cfg.nodes, expected_length=8) @@ -467,7 +467,7 @@ def test_while_complete(self): self.assertInCfg([(test, entry), (body_1, test), (else_body_1, test), ( body_2, body_1), (test, body_2), (else_body_2, else_body_1), (next_node, else_body_2), (exit_node, next_node)]) def test_while_no_orelse(self): - self.cfg_create_from_file('example/example_inputs/while_no_orelse.py') + self.cfg_create_from_file('examples/example_inputs/while_no_orelse.py') self.assert_length(self.cfg.nodes, expected_length=6) @@ -481,7 +481,7 @@ def test_while_no_orelse(self): self.assertInCfg([(test, entry), (body_1, test), ( next_node, test), (body_2, body_1), (test, body_2), (exit_node, next_node)]) def test_while_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/while_complete.py') + self.cfg_create_from_file('examples/example_inputs/while_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=8) @@ -503,7 +503,7 @@ def test_while_line_numbers(self): class CFGAssignmentMultiTest(BaseTestCase): def test_assignment_multi_target(self): - self.cfg_create_from_file('example/example_inputs/assignment_two_targets.py') + self.cfg_create_from_file('examples/example_inputs/assignment_two_targets.py') self.assert_length(self.cfg.nodes, expected_length=4) start_node = 0 @@ -517,7 +517,7 @@ def test_assignment_multi_target(self): self.assertEqual(self.cfg.nodes[node_2].label, 'y = 2') def test_assignment_multi_target_call(self): - self.cfg_create_from_file('example/example_inputs/assignment_multiple_assign_call.py') + self.cfg_create_from_file('examples/example_inputs/assignment_multiple_assign_call.py') self.assert_length(self.cfg.nodes, expected_length=6) start_node = self.cfg.nodes[0] @@ -536,7 +536,7 @@ def test_assignment_multi_target_call(self): self.assertEqual(assignment_to_y.label, 'y = ~call_2') def test_assignment_multi_target_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/assignment_two_targets.py') + self.cfg_create_from_file('examples/example_inputs/assignment_two_targets.py') node = self.cfg.nodes[1] node_2 = self.cfg.nodes[2] @@ -545,7 +545,7 @@ def test_assignment_multi_target_line_numbers(self): self.assertLineNumber(node_2, 1) def test_assignment_and_builtin(self): - self.cfg_create_from_file('example/example_inputs/assignmentandbuiltin.py') + self.cfg_create_from_file('examples/example_inputs/assignmentandbuiltin.py') self.assert_length(self.cfg.nodes, expected_length=4) @@ -557,7 +557,7 @@ def test_assignment_and_builtin(self): self.assertInCfg([(assign, entry), (builtin, assign), (exit_node, builtin)]) def test_assignment_and_builtin_line_numbers(self): - self.cfg_create_from_file('example/example_inputs/assignmentandbuiltin.py') + self.cfg_create_from_file('examples/example_inputs/assignmentandbuiltin.py') assign = self.cfg.nodes[1] builtin = self.cfg.nodes[2] @@ -566,7 +566,7 @@ def test_assignment_and_builtin_line_numbers(self): self.assertLineNumber(builtin, 2) def test_multiple_assignment(self): - self.cfg_create_from_file('example/example_inputs/assignment_multiple_assign.py') + self.cfg_create_from_file('examples/example_inputs/assignment_multiple_assign.py') self.assert_length(self.cfg.nodes, expected_length=4) @@ -579,7 +579,7 @@ def test_multiple_assignment(self): self.assertEqual(assign_y.label, 'y = 5') def test_assign_list_comprehension(self): - self.cfg_create_from_file('example/example_inputs/generator_expression_assign.py') + self.cfg_create_from_file('examples/example_inputs/generator_expression_assign.py') length = 4 self.assert_length(self.cfg.nodes, expected_length=length) @@ -592,7 +592,7 @@ def test_assign_list_comprehension(self): self.assertInCfg(list(l)) def test_assignment_tuple_value(self): - self.cfg_create_from_file('example/example_inputs/assignment_tuple_value.py') + self.cfg_create_from_file('examples/example_inputs/assignment_tuple_value.py') self.assert_length(self.cfg.nodes, expected_length=3) start_node = 0 @@ -607,47 +607,47 @@ def test_assignment_tuple_value(self): class CFGComprehensionTest(BaseTestCase): def test_nodes(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') self.assert_length(self.cfg.nodes, expected_length=8) def test_list_comprehension(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') listcomp = self.cfg.nodes[1] self.assertEqual(listcomp.label, 'l = [x for x in [1, 2, 3]]') def test_list_comprehension_multi(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') listcomp = self.cfg.nodes[2] self.assertEqual(listcomp.label, 'll = [(x, y) for x in [1, 2, 3] for y in [4, 5, 6]]') def test_dict_comprehension(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') dictcomp = self.cfg.nodes[3] self.assertEqual(dictcomp.label, 'd = {i : x for (i, x) in enumerate([1, 2, 3])}') def test_set_comprehension(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') setcomp = self.cfg.nodes[4] self.assertEqual(setcomp.label, 's = {x for x in [1, 2, 3, 2, 2, 1, 2]}') def test_generator_expression(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') listcomp = self.cfg.nodes[5] self.assertEqual(listcomp.label, 'g = (x for x in [1, 2, 3])') def test_dict_comprehension_multi(self): - self.cfg_create_from_file('example/example_inputs/comprehensions.py') + self.cfg_create_from_file('examples/example_inputs/comprehensions.py') listcomp = self.cfg.nodes[6] self.assertEqual(listcomp.label, 'dd = {x + y : y for x in [1, 2, 3] for y in [4, 5, 6]}') @@ -657,7 +657,7 @@ def connected(self, node, successor): return (successor, node) def test_simple_function(self): - path = 'example/example_inputs/simple_function.py' + path = 'examples/example_inputs/simple_function.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=9) @@ -682,7 +682,7 @@ def test_simple_function(self): self.connected(y_load, _exit)]) def test_function_line_numbers(self): - path = 'example/example_inputs/simple_function.py' + path = 'examples/example_inputs/simple_function.py' self.cfg_create_from_file(path) input_call = self.cfg.nodes[1] @@ -702,7 +702,7 @@ def test_function_line_numbers(self): self.assertLineNumber(y_load, 1) def test_function_parameters(self): - path = 'example/example_inputs/parameters_function.py' + path = 'examples/example_inputs/parameters_function.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=14) @@ -737,7 +737,7 @@ def test_function_parameters(self): self.connected(restore_actual_y, _exit)]) def test_function_with_return(self): - path = 'example/example_inputs/simple_function_with_return.py' + path = 'examples/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=19) @@ -746,7 +746,7 @@ def test_function_with_return(self): self.assertInCfg(list(l)) def test_function_multiple_return(self): - path = 'example/example_inputs/function_with_multiple_return.py' + path = 'examples/example_inputs/function_with_multiple_return.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=9) @@ -772,7 +772,7 @@ def test_function_multiple_return(self): (_exit, call_foo)]) def test_blackbox_call_after_if(self): - path = 'example/vulnerable_code/blackbox_call_after_if.py' + path = 'examples/vulnerable_code/blackbox_call_after_if.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=9) @@ -800,7 +800,7 @@ def test_blackbox_call_after_if(self): ]) def test_multiple_nested_user_defined_calls_after_if(self): - path = 'example/vulnerable_code/multiple_nested_user_defined_calls_after_if.py' + path = 'examples/vulnerable_code/multiple_nested_user_defined_calls_after_if.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=39) @@ -896,7 +896,7 @@ def test_multiple_nested_user_defined_calls_after_if(self): ]) def test_multiple_nested_blackbox_calls_after_for(self): - path = 'example/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' + path = 'examples/vulnerable_code/multiple_nested_blackbox_calls_after_for.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=11) @@ -928,7 +928,7 @@ def test_multiple_nested_blackbox_calls_after_for(self): ]) def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): - path = 'example/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py' + path = 'examples/vulnerable_code/multiple_blackbox_calls_in_user_defined_call_after_if.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=32) @@ -1011,7 +1011,7 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): - path = 'example/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py' + path = 'examples/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py' self.cfg_create_from_file(path) self.assert_length(self.cfg.nodes, expected_length=30) @@ -1081,7 +1081,7 @@ def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): ]) def test_function_line_numbers_2(self): - path = 'example/example_inputs/simple_function_with_return.py' + path = 'examples/example_inputs/simple_function_with_return.py' self.cfg_create_from_file(path) assignment_with_function = self.cfg.nodes[1] @@ -1089,7 +1089,7 @@ def test_function_line_numbers_2(self): self.assertLineNumber(assignment_with_function, 9) def test_multiple_parameters(self): - path = 'example/example_inputs/multiple_parameters_function.py' + path = 'examples/example_inputs/multiple_parameters_function.py' self.cfg_create_from_file(path) @@ -1101,7 +1101,7 @@ def test_multiple_parameters(self): self.assertInCfg(list(l)) def test_call_on_call(self): - path = 'example/example_inputs/call_on_call.py' + path = 'examples/example_inputs/call_on_call.py' self.cfg_create_from_file(path) @@ -1109,7 +1109,7 @@ def test_call_on_call(self): class CFGCallWithAttributeTest(BaseTestCase): def setUp(self): - self.cfg_create_from_file('example/example_inputs/call_with_attribute.py') + self.cfg_create_from_file('examples/example_inputs/call_with_attribute.py') def test_call_with_attribute(self): length = 14 @@ -1129,7 +1129,7 @@ def test_call_with_attribute_line_numbers(self): class CFGBreak(BaseTestCase): """Break in while and for and other places""" def test_break(self): - self.cfg_create_from_file('example/example_inputs/while_break.py') + self.cfg_create_from_file('examples/example_inputs/while_break.py') self.assert_length(self.cfg.nodes, expected_length=8) @@ -1156,7 +1156,7 @@ def test_break(self): class CFGNameConstant(BaseTestCase): def setUp(self): - self.cfg_create_from_file('example/example_inputs/name_constant.py') + self.cfg_create_from_file('examples/example_inputs/name_constant.py') def test_name_constant_in_assign(self): self.assert_length(self.cfg.nodes, expected_length=6) @@ -1176,14 +1176,14 @@ class CFGName(BaseTestCase): """Test is Name nodes are properly handled in different contexts""" def test_name_if(self): - self.cfg_create_from_file('example/example_inputs/name_if.py') + self.cfg_create_from_file('examples/example_inputs/name_if.py') self.assert_length(self.cfg.nodes, expected_length=5) self.assertEqual(self.cfg.nodes[2].label, 'if x:') def test_name_for(self): - self.cfg_create_from_file('example/example_inputs/name_for.py') + self.cfg_create_from_file('examples/example_inputs/name_for.py') self.assert_length(self.cfg.nodes, expected_length=4) self.assertEqual(self.cfg.nodes[1].label, 'for x in l:') diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py index db209c8b..9086e55d 100644 --- a/tests/framework_helper_test.py +++ b/tests/framework_helper_test.py @@ -10,7 +10,7 @@ class FrameworkEngineTest(BaseTestCase): def test_find_flask_functions(self): - self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') + self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -25,7 +25,7 @@ def test_find_flask_functions(self): def test_find_every_function_without_leading_underscore(self): - self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') + self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -38,7 +38,7 @@ def test_find_every_function_without_leading_underscore(self): self.assertEqual(i, 3) def test_find_every_function(self): - self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') + self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -51,7 +51,7 @@ def test_find_every_function(self): self.assertEqual(len(funcs), 4) def test_find_django_functions(self): - self.cfg_create_from_file('example/example_inputs/django_flask_and_normal_functions.py') + self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') cfg_list = [self.cfg] funcs = _get_func_nodes() @@ -65,7 +65,7 @@ def test_find_django_functions(self): self.assertEqual(i, 1) def test_find_django_views(self): - self.cfg_create_from_file('example/example_inputs/django_views.py') + self.cfg_create_from_file('examples/example_inputs/django_views.py') cfg_list = [self.cfg] funcs = _get_func_nodes() diff --git a/tests/import_test.py b/tests/import_test.py index 1ccecd07..94d829b1 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -8,7 +8,7 @@ class ImportTest(BaseTestCase): def test_import(self): - path = os.path.normpath('example/import_test_project/test_import.py') + path = os.path.normpath('examples/import_test_project/test_import.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -42,7 +42,7 @@ def test_import(self): self.assertEqual(node.label, expected_label) def test_import_as(self): - path = os.path.normpath('example/import_test_project/test_import_as.py') + path = os.path.normpath('examples/import_test_project/test_import_as.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -76,7 +76,7 @@ def test_import_as(self): self.assertEqual(node.label, expected_label) def test_from_file_import_star(self): - path = os.path.normpath('example/import_test_project/test_from_file_import_star.py') + path = os.path.normpath('examples/import_test_project/test_from_file_import_star.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -110,7 +110,7 @@ def test_from_file_import_star(self): self.assertEqual(node.label, expected_label) def test_from_package_import_star(self): - path = os.path.normpath('example/import_test_project/test_from_package_import_star.py') + path = os.path.normpath('examples/import_test_project/test_from_package_import_star.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -143,7 +143,7 @@ def test_from_package_import_star(self): self.assertEqual(node.label, expected_label) def test_from_package_import_star_with_alias(self): - path = os.path.normpath('example/import_test_project/test_from_package_import_star_with_alias.py') + path = os.path.normpath('examples/import_test_project/test_from_package_import_star_with_alias.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -176,8 +176,8 @@ def test_from_package_import_star_with_alias(self): self.assertEqual(node.label, expected_label) def test_from_directory(self): - file_path = os.path.normpath('example/import_test_project/test_from_directory.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_directory.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -200,7 +200,7 @@ def test_from_directory(self): self.assertEqual(node.label, expected_label) def test_relative_level_1(self): - path = os.path.normpath('example/import_test_project/test_relative_level_1.py') + path = os.path.normpath('examples/import_test_project/test_relative_level_1.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -234,7 +234,7 @@ def test_relative_level_1(self): self.assertEqual(node.label, expected_label) def test_relative_level_2(self): - path = os.path.normpath('example/import_test_project/test_relative_level_2.py') + path = os.path.normpath('examples/import_test_project/test_relative_level_2.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) @@ -243,11 +243,11 @@ def test_relative_level_2(self): self.cfg_create_from_file(path, project_modules, local_modules) except Exception as e: self.assertTrue("OSError('Input needs to be a file. Path: " in repr(e)) - self.assertTrue("example/A.py" in repr(e)) + self.assertTrue("examples/A.py" in repr(e)) def test_relative_between_folders(self): - file_path = os.path.normpath('example/import_test_project/other_dir/test_relative_between_folders.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/other_dir/test_relative_between_folders.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -270,8 +270,8 @@ def test_relative_between_folders(self): self.assertEqual(node.label, expected_label) def test_relative_from_directory(self): - file_path = os.path.normpath('example/import_test_project/test_relative_from_directory.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_relative_from_directory.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -293,8 +293,8 @@ def test_relative_from_directory(self): self.assertEqual(node.label, expected_label) def test_from_dot(self): - file_path = os.path.normpath('example/import_test_project/test_from_dot.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_dot.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -318,8 +318,8 @@ def test_from_dot(self): self.assertEqual(node.label, expected_label) def test_from_dot_dot(self): - file_path = os.path.normpath('example/import_test_project/other_dir/test_from_dot_dot.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/other_dir/test_from_dot_dot.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -343,8 +343,8 @@ def test_from_dot_dot(self): self.assertEqual(node.label, expected_label) def test_multiple_files_with_aliases(self): - file_path = os.path.normpath('example/import_test_project/test_multiple_files_with_aliases.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_multiple_files_with_aliases.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -406,8 +406,8 @@ def test_multiple_files_with_aliases(self): self.assertEqual(node.label, expected_label) def test_multiple_functions_with_aliases(self): - file_path = os.path.normpath('example/import_test_project/test_multiple_functions_with_aliases.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_multiple_functions_with_aliases.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -451,8 +451,8 @@ def test_multiple_functions_with_aliases(self): self.assertEqual(node.label, expected_label) def test_package_with_function(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_function.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_function.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -475,8 +475,8 @@ def test_package_with_function(self): self.assertEqual(node.label, expected_label) def test_package_with_function_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_function_and_alias.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_function_and_alias.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -499,8 +499,8 @@ def test_package_with_function_and_alias(self): self.assertEqual(node.label, expected_label) def test_package_with_file(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_file.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_file.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -521,8 +521,8 @@ def test_package_with_file(self): self.assertEqual(node.label, expected_label) def test_package_with_file_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_file_and_alias.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_file_and_alias.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -543,8 +543,8 @@ def test_package_with_file_and_alias(self): self.assertEqual(node.label, expected_label) def test_package_with_folder(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_folder.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_folder.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -567,8 +567,8 @@ def test_package_with_folder(self): self.assertEqual(node.label, expected_label) def test_package_with_folder_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_package_with_folder_and_alias.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_package_with_folder_and_alias.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -591,8 +591,8 @@ def test_package_with_folder_and_alias(self): self.assertEqual(node.label, expected_label) def test_from_package_with_function(self): - file_path = os.path.normpath('example/import_test_project/test_from_package_with_function.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_package_with_function.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -615,8 +615,8 @@ def test_from_package_with_function(self): self.assertEqual(node.label, expected_label) def test_from_package_with_function_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_from_package_with_function_and_alias.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_package_with_function_and_alias.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -639,8 +639,8 @@ def test_from_package_with_function_and_alias(self): self.assertEqual(node.label, expected_label) def test_from_package_with_file(self): - file_path = os.path.normpath('example/import_test_project/test_from_package_with_file.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_package_with_file.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -661,8 +661,8 @@ def test_from_package_with_file(self): self.assertEqual(node.label, expected_label) def test_from_package_with_file_and_alias(self): - file_path = os.path.normpath('example/import_test_project/test_from_package_with_file_and_alias.py') - project_path = os.path.normpath('example/import_test_project') + file_path = os.path.normpath('examples/import_test_project/test_from_package_with_file_and_alias.py') + project_path = os.path.normpath('examples/import_test_project') project_modules = get_modules_and_packages(project_path) local_modules = get_directory_modules(project_path) @@ -683,8 +683,8 @@ def test_from_package_with_file_and_alias(self): self.assertEqual(node.label, expected_label) # def test_all(self): - # file_path = os.path.normpath('example/import_test_project/test_all.py') - # project_path = os.path.normpath('example/import_test_project') + # file_path = os.path.normpath('examples/import_test_project/test_all.py') + # project_path = os.path.normpath('examples/import_test_project') # project_modules = get_modules_and_packages(project_path) # local_modules = get_directory_modules(project_path) @@ -697,8 +697,8 @@ def test_from_package_with_file_and_alias(self): # self.assertEqual(node.label, expected_label) # def test_no_all(self): - # file_path = os.path.normpath('example/import_test_project/test_no_all.py') - # project_path = os.path.normpath('example/import_test_project') + # file_path = os.path.normpath('examples/import_test_project/test_no_all.py') + # project_path = os.path.normpath('examples/import_test_project') # project_modules = get_modules_and_packages(project_path) # local_modules = get_directory_modules(project_path) diff --git a/tests/liveness_test.py b/tests/liveness_test.py index 2e114468..da6f08a0 100644 --- a/tests/liveness_test.py +++ b/tests/liveness_test.py @@ -5,7 +5,7 @@ class LivenessTest(AnalysisBaseTestCase): def test_example(self): - lattice = self.run_analysis('example/example_inputs/example.py', LivenessAnalysis) + lattice = self.run_analysis('examples/example_inputs/example.py', LivenessAnalysis) x = 0b1 # 1 y = 0b10 # 2 diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 0d4cba10..7147bbab 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -7,7 +7,7 @@ class NestedTest(BaseTestCase): def test_nested_user_defined_function_calls(self): - path = os.path.normpath('example/nested_functions_code/nested_user_defined_function_calls.py') + path = os.path.normpath('examples/nested_functions_code/nested_user_defined_function_calls.py') project_modules = get_modules_and_packages(os.path.dirname(path)) local_modules = get_directory_modules(os.path.dirname(path)) diff --git a/tests/project_handler_test.py b/tests/project_handler_test.py index 9abb990f..a5105dc2 100644 --- a/tests/project_handler_test.py +++ b/tests/project_handler_test.py @@ -19,7 +19,7 @@ def test_is_python_file(self): self.assertEqual(is_python_file(not_python_module), False) def test_get_modules(self): - project_folder = os.path.normpath(os.path.join('example', 'test_project')) + project_folder = os.path.normpath(os.path.join('examples', 'test_project')) project_namespace = 'test_project' folder = 'folder' @@ -55,7 +55,7 @@ def test_get_modules(self): self.assertEqual(len(modules), 5) def test_get_modules_and_packages(self): - project_folder = os.path.normpath(os.path.join('example', 'test_project')) + project_folder = os.path.normpath(os.path.join('examples', 'test_project')) project_namespace = 'test_project' folder = 'folder' diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index 1a02cce5..dc18dcd5 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -7,7 +7,7 @@ class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/linear.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/linear.py', ReachingDefinitionsTaintAnalysis) EXPECTED = [ "Label: Entry module:", @@ -26,7 +26,7 @@ def test_linear_program(self): def test_if_program(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/if_program.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/if_program.py', ReachingDefinitionsTaintAnalysis) EXPECTED = [ "Label: Entry module:", @@ -45,7 +45,7 @@ def test_if_program(self): def test_example(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/example.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/example.py', ReachingDefinitionsTaintAnalysis) EXPECTED = [ "Label: Entry module:", @@ -71,7 +71,7 @@ def test_example(self): i = i + 1 def test_func_with_params(self): - lattice = self.run_analysis('example/example_inputs/function_with_params.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/function_with_params.py', ReachingDefinitionsTaintAnalysis) self.assertInCfg([(1,1), (1,2), (2,2), @@ -86,7 +86,7 @@ def test_func_with_params(self): def test_while(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/while.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/while.py', ReachingDefinitionsTaintAnalysis) EXPECTED = [ "Label: Entry module: ", diff --git a/tests/reaching_definitions_test.py b/tests/reaching_definitions_test.py index b76e4643..75524893 100644 --- a/tests/reaching_definitions_test.py +++ b/tests/reaching_definitions_test.py @@ -6,7 +6,7 @@ class ReachingDefinitionsTest(AnalysisBaseTestCase): def test_linear_program(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/linear.py', ReachingDefinitionsAnalysis) + lattice = self.run_analysis('examples/example_inputs/linear.py', ReachingDefinitionsAnalysis) EXPECTED = [ "Label: Entry module: ", @@ -24,7 +24,7 @@ def test_linear_program(self): def test_example(self): constraint_table = {} - lattice = self.run_analysis('example/example_inputs/example.py', ReachingDefinitionsAnalysis) + lattice = self.run_analysis('examples/example_inputs/example.py', ReachingDefinitionsAnalysis) EXPECTED = [ "Label: Entry module: ", diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index a92197cf..7492aee2 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -44,36 +44,36 @@ def run_analysis(self, path): ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_absolute_from_file_command_injection_3(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') self.assert_length(vulnerabilities, expected_length=0) def test_blackbox_library_call(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/blackbox_library_call.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/blackbox_library_call.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > User input at line 12, trigger word "request.args.get(": ~call_1 = ret_request.args.get('suggestion') Reassigned in: - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 12: param = ~call_1 - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 15: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 15: command = ~call_2 - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 16: hey = command - File: example/vulnerable_code_across_files/blackbox_library_call.py + File: examples/vulnerable_code_across_files/blackbox_library_call.py > reaches line 17, trigger word "subprocess.call(": ~call_3 = ret_subprocess.call(hey, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') @@ -82,33 +82,33 @@ def test_blackbox_library_call(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_builtin_with_user_defined_inner(self): - vulnerabilities = self.run_analysis('example/nested_functions_code/builtin_with_user_defined_inner.py') + vulnerabilities = self.run_analysis('examples/nested_functions_code/builtin_with_user_defined_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: save_2_req_param = req_param - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: temp_2_inner_arg = req_param - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: inner_arg = temp_2_inner_arg - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 11: yes_vuln = inner_arg + 'hey' - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 12: ret_inner = yes_vuln - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: req_param = save_2_req_param - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: ~call_2 = ret_inner - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: ~call_1 = ret_scrypt.encrypt(~call_2) - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: foo = ~call_1 - File: example/nested_functions_code/builtin_with_user_defined_inner.py + File: examples/nested_functions_code/builtin_with_user_defined_inner.py > reaches line 20, trigger word "subprocess.call(": ~call_3 = ret_subprocess.call(foo, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) @@ -116,37 +116,37 @@ def test_builtin_with_user_defined_inner(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_result_of_blackbox_nested(self): - vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_result_of_blackbox_nested.py') + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_blackbox_nested.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: result = ~call_1 - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > reaches line 14, trigger word "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt(req_param) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: result = ~call_1 - File: example/nested_functions_code/sink_with_result_of_blackbox_nested.py + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > reaches line 14, trigger word "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) @@ -156,79 +156,79 @@ def test_sink_with_result_of_blackbox_nested(self): self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_result_of_user_defined_nested(self): - vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_result_of_user_defined_nested.py') + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_user_defined_nested.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: save_1_req_param = req_param - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: save_2_req_param = req_param - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: temp_2_inner_arg = req_param - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: inner_arg = temp_2_inner_arg - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 11: inner_ret_val = inner_arg + 'hey' - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 12: ret_inner = inner_ret_val - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 10: req_param = save_2_req_param - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: ~call_2 = ret_inner - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: temp_1_outer_arg = ~call_2 - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: outer_arg = temp_1_outer_arg - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 7: outer_ret_val = outer_arg + 'hey' - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 8: ret_outer = outer_ret_val - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: req_param = save_1_req_param - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: ~call_1 = ret_outer - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: result = ~call_1 - File: example/nested_functions_code/sink_with_result_of_user_defined_nested.py + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > reaches line 18, trigger word "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_blackbox_inner(self): - vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_blackbox_inner.py') + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_blackbox_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_3 = ret_scrypt.encypt(req_param) - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > reaches line 14, trigger word "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encypt(~call_3) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > User input at line 12, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_3 = ret_scrypt.encypt(req_param) - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) - File: example/nested_functions_code/sink_with_blackbox_inner.py + File: examples/nested_functions_code/sink_with_blackbox_inner.py > reaches line 14, trigger word "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) @@ -238,57 +238,57 @@ def test_sink_with_blackbox_inner(self): self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sink_with_user_defined_inner(self): - vulnerabilities = self.run_analysis('example/nested_functions_code/sink_with_user_defined_inner.py') + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_user_defined_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > User input at line 16, trigger word "form[": req_param = request.form['suggestion'] Reassigned in: - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 6: save_2_req_param = req_param - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 10: save_3_req_param = req_param - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: temp_3_inner_arg = req_param - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 10: inner_arg = temp_3_inner_arg - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 11: inner_ret_val = inner_arg + 'hey' - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 12: ret_inner = inner_ret_val - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 10: req_param = save_3_req_param - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ~call_3 = ret_inner - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: temp_2_outer_arg = ~call_3 - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 6: outer_arg = temp_2_outer_arg - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 7: outer_ret_val = outer_arg + 'hey' - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 8: ret_outer = outer_ret_val - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 6: req_param = save_2_req_param - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ~call_2 = ret_outer - File: example/nested_functions_code/sink_with_user_defined_inner.py + File: examples/nested_functions_code/sink_with_user_defined_inner.py > reaches line 18, trigger word "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_find_vulnerabilities_import_file_command_injection(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_import_file_command_injection_2(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/import_file_command_injection_2.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_import_file_command_injection_3(self): - vulnerabilities = self.run_analysis('example/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') self.assert_length(vulnerabilities, expected_length=0) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 65538734..fb3c00f2 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -83,7 +83,7 @@ def test_label_contains(self): self.assert_length(l, expected_length=2) def test_find_triggers(self): - self.cfg_create_from_file('example/vulnerable_code/XSS.py') + self.cfg_create_from_file('examples/vulnerable_code/XSS.py') cfg_list = [self.cfg] @@ -107,7 +107,7 @@ def test_find_sanitiser_nodes(self): def test_build_sanitiser_node_dict(self): - self.cfg_create_from_file('example/vulnerable_code/XSS_sanitised.py') + self.cfg_create_from_file('examples/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) @@ -144,35 +144,35 @@ def run_analysis(self, path): def test_find_vulnerabilities_assign_other_var(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_assign_to_other_var.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection_2(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) def test_XSS_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > Line 9: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > Line 9: resp = ~call_3 - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py + File: examples/vulnerable_code/XSS.py > reaches line 9, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -180,17 +180,17 @@ def test_XSS_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_command_injection_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/command_injection.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/command_injection.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/command_injection.py + File: examples/vulnerable_code/command_injection.py > User input at line 15, trigger word "form[": param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/command_injection.py + File: examples/vulnerable_code/command_injection.py > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' - File: example/vulnerable_code/command_injection.py + File: examples/vulnerable_code/command_injection.py > reaches line 18, trigger word "subprocess.call(": ~call_1 = ret_subprocess.call(command, shell=True) """ @@ -198,37 +198,37 @@ def test_command_injection_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > User input at line 15, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 15: image_name = ~call_1 - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 6: save_2_image_name = image_name - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 10: save_3_image_name = image_name - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 10: image_name = save_3_image_name - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 19: temp_2_other_arg = image_name - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 6: other_arg = temp_2_other_arg - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 8: ret_outer = outer_ret_val - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 6: image_name = save_2_image_name - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 19: ~call_2 = ret_outer - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > Line 19: foo = ~call_2 - File: example/vulnerable_code/path_traversal.py + File: examples/vulnerable_code/path_traversal.py > reaches line 20, trigger word "send_file(": ~call_4 = ret_send_file(foo) """ @@ -236,37 +236,37 @@ def test_path_traversal_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_ensure_saved_scope(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/ensure_saved_scope.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > User input at line 15, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 15: image_name = ~call_1 - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 6: save_2_image_name = image_name - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 10: save_3_image_name = image_name - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 10: image_name = save_3_image_name - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 19: temp_2_other_arg = image_name - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 6: other_arg = temp_2_other_arg - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 8: ret_outer = outer_ret_val - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 6: image_name = save_2_image_name - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 19: ~call_2 = ret_outer - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > Line 19: foo = ~call_2 - File: example/vulnerable_code/ensure_saved_scope.py + File: examples/vulnerable_code/ensure_saved_scope.py > reaches line 20, trigger word "send_file(": ~call_4 = ret_send_file(image_name) """ @@ -274,25 +274,25 @@ def test_ensure_saved_scope(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > User input at line 8, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > Line 8: image_name = ~call_1 - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > Line 10: ~call_2 = ret_image_name.replace('..', '') - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > Line 10: image_name = ~call_2 - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > Line 12: ret_cat_picture = ~call_3 - File: example/vulnerable_code/path_traversal_sanitised.py + File: examples/vulnerable_code/path_traversal_sanitised.py > reaches line 12, trigger word "send_file(": ~call_3 = ret_send_file(~call_4) This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') @@ -301,21 +301,21 @@ def test_path_traversal_sanitised_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_2_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised_2.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal_sanitised_2.py + File: examples/vulnerable_code/path_traversal_sanitised_2.py > User input at line 8, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: example/vulnerable_code/path_traversal_sanitised_2.py + File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 8: image_name = ~call_1 - File: example/vulnerable_code/path_traversal_sanitised_2.py + File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) - File: example/vulnerable_code/path_traversal_sanitised_2.py + File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ret_cat_picture = ~call_2 - File: example/vulnerable_code/path_traversal_sanitised_2.py + File: examples/vulnerable_code/path_traversal_sanitised_2.py > reaches line 12, trigger word "send_file(": ~call_2 = ret_send_file(~call_3) This vulnerability is potentially sanitised by: Label: if '..' in image_name: @@ -324,19 +324,19 @@ def test_path_traversal_sanitised_2_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sql_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/sql/sqli.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/sql/sqli.py + File: examples/vulnerable_code/sql/sqli.py > User input at line 26, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/sql/sqli.py + File: examples/vulnerable_code/sql/sqli.py > Line 26: param = ~call_1 - File: example/vulnerable_code/sql/sqli.py + File: examples/vulnerable_code/sql/sqli.py > Line 27: result = ~call_2 - File: example/vulnerable_code/sql/sqli.py + File: examples/vulnerable_code/sql/sqli.py > reaches line 27, trigger word "execute(": ~call_2 = ret_db.engine.execute(param) """ @@ -344,21 +344,21 @@ def test_sql_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_form_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_form.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_form.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_form.py + File: examples/vulnerable_code/XSS_form.py > User input at line 14, trigger word "form[": data = request.form['my_text'] Reassigned in: - File: example/vulnerable_code/XSS_form.py + File: examples/vulnerable_code/XSS_form.py > Line 15: ~call_1 = ret_make_response(~call_2) - File: example/vulnerable_code/XSS_form.py + File: examples/vulnerable_code/XSS_form.py > Line 15: resp = ~call_1 - File: example/vulnerable_code/XSS_form.py + File: examples/vulnerable_code/XSS_form.py > Line 17: ret_example2_action = resp - File: example/vulnerable_code/XSS_form.py + File: examples/vulnerable_code/XSS_form.py > reaches line 15, trigger word "replace(": ~call_2 = ret_html1.replace('{{ data }}', data) """ @@ -366,23 +366,23 @@ def test_XSS_form_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_url_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_url.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_url.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > User input at line 4, trigger word "Framework function URL parameter": url Reassigned in: - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > Line 6: param = url - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > Line 9: ~call_2 = ret_make_response(~call_3) - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > Line 9: resp = ~call_2 - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS_url.py + File: examples/vulnerable_code/XSS_url.py > reaches line 9, trigger word "replace(": ~call_3 = ret_html.replace('{{ param }}', param) """ @@ -390,29 +390,29 @@ def test_XSS_url_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_no_vuln_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_no_vuln.py') self.assert_length(vulnerabilities, expected_length=0) def test_XSS_reassign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_reassign.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_reassign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > Line 8: param = param + '' - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > Line 11: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > Line 11: resp = ~call_3 - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > Line 12: ret_XSS1 = resp - File: example/vulnerable_code/XSS_reassign.py + File: examples/vulnerable_code/XSS_reassign.py > reaches line 11, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -420,27 +420,27 @@ def test_XSS_reassign_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_sanitised_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_sanitised.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > User input at line 7, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 7: param = ~call_1 - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 9: ~call_2 = ret_Markup.escape(param) - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 9: param = ~call_2 - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 12: ~call_4 = ret_make_response(~call_5) - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 12: resp = ~call_4 - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > Line 13: ret_XSS1 = resp - File: example/vulnerable_code/XSS_sanitised.py + File: examples/vulnerable_code/XSS_sanitised.py > reaches line 12, trigger word "replace(": ~call_5 = ret_html.replace('{{ param }}', param) This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) @@ -449,29 +449,29 @@ def test_XSS_sanitised_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_assign_no_vuln_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign_no_vuln.py') self.assert_length(vulnerabilities, expected_length=0) def test_XSS_variable_assign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > Line 8: other_var = param + '' - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > Line 11: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > Line 11: resp = ~call_3 - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > Line 12: ret_XSS1 = resp - File: example/vulnerable_code/XSS_variable_assign.py + File: examples/vulnerable_code/XSS_variable_assign.py > reaches line 11, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', other_var) """ @@ -479,29 +479,29 @@ def test_XSS_variable_assign_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_multiple_assign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_multiple_assign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 8: other_var = param + '' - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 10: not_the_same_var = '' + other_var - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 12: another_one = not_the_same_var + '' - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 15: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 15: resp = ~call_3 - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 17: ret_XSS1 = resp - File: example/vulnerable_code/XSS_variable_multiple_assign.py + File: examples/vulnerable_code/XSS_variable_multiple_assign.py > reaches line 15, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', another_one) """ @@ -539,18 +539,18 @@ def run_analysis(self, path): ) def test_django_view_param(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/django_XSS.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code/django_XSS.py') self.assert_length(vulnerabilities, expected_length=2) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/django_XSS.py + File: examples/vulnerable_code/django_XSS.py > User input at line 4, trigger word "Framework function URL parameter": param Reassigned in: - File: example/vulnerable_code/django_XSS.py + File: examples/vulnerable_code/django_XSS.py > Line 5: ret_xss1 = ~call_1 - File: example/vulnerable_code/django_XSS.py + File: examples/vulnerable_code/django_XSS.py > reaches line 5, trigger word "render(": ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ From 84edb94f7ede2e240c52a612e0777653263ba6a8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 14 Apr 2018 18:39:04 -0700 Subject: [PATCH 249/541] [tox] 87->88%, rm tests/python_name.txt --- tests/python_name.txt | 1 - tox.ini | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 tests/python_name.txt diff --git a/tests/python_name.txt b/tests/python_name.txt deleted file mode 100644 index fdc793e7..00000000 --- a/tests/python_name.txt +++ /dev/null @@ -1 +0,0 @@ -python diff --git a/tox.ini b/tox.ini index 4eeb372c..933a1460 100644 --- a/tox.ini +++ b/tox.ini @@ -7,5 +7,5 @@ deps = -rrequirements-dev.txt commands = coverage erase coverage run tests - coverage report --show-missing --fail-under 87 + coverage report --show-missing --fail-under 88 pre-commit run From 99048e0294f2638f7bde677f386f12b68aa3948f Mon Sep 17 00:00:00 2001 From: cclauss Date: Sun, 15 Apr 2018 13:32:18 +0200 Subject: [PATCH 250/541] Flake8 testing finds undefined names --- .travis.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c72bdbf0..100ed8c2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,7 +3,12 @@ python: - "3.6" install: - pip install -r requirements.txt - - pip install codeclimate-test-reporter + - pip install codeclimate-test-reporter flake8 +before_script: + # stop the build if there are Python syntax errors or undefined names + - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics + # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide + - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics script: - python -m tests - coverage run -m tests From 54941fea83a02ad5f822a2df0dfa5b4b9deccaf3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 14 Apr 2018 19:04:59 -0700 Subject: [PATCH 251/541] Fix pagination vulnerabilities --- pyt/vulnerability_definitions/blackbox_mapping.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/vulnerability_definitions/blackbox_mapping.json b/pyt/vulnerability_definitions/blackbox_mapping.json index fbb229e3..124e0d45 100644 --- a/pyt/vulnerability_definitions/blackbox_mapping.json +++ b/pyt/vulnerability_definitions/blackbox_mapping.json @@ -1,7 +1,8 @@ { "does_not_propagate": [ "fast_eddie", - "url_for" + "url_for", + "Post.query.paginate" ], "propagates": [ "os.path.join", From 66f7d3f7f60bd1bced32b35bc2c07ffc18cdf6bd Mon Sep 17 00:00:00 2001 From: KevinHock Date: Mon, 16 Apr 2018 20:54:43 -0700 Subject: [PATCH 252/541] Changed python commands to python3 to be more explicit --- README.rst | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index 8f502650..89b0382e 100644 --- a/README.rst +++ b/README.rst @@ -33,8 +33,6 @@ Features * Search GitHub and analyse hits with PyT -* Scan intraprocedural or interprocedural - * A lot of customisation possible Example usage and output: @@ -46,20 +44,20 @@ Install 1. git clone https://github.com/python-security/pyt.git 2. cd pyt/ - 3. python setup.py install + 3. python3 setup.py install 4. pyt -h Usage from Source ================= -Using it like a user ``python -m pyt -f example/vulnerable_code/XSS_call.py save -du`` +Using it like a user ``python3 -m pyt -f example/vulnerable_code/XSS_call.py save -du`` -Running the tests ``python -m tests`` +Running the tests ``python3 -m tests`` -Running an individual test file ``python -m unittest tests.import_test`` +Running an individual test file ``python3 -m unittest tests.import_test`` -Running an individual test ``python -m unittest tests.import_test.ImportTest.test_import`` +Running an individual test ``python3 -m unittest tests.import_test.ImportTest.test_import`` Contributions From b98bf50e45d4e441fcec279116fc6111013eeb9b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 16 Apr 2018 21:07:23 -0700 Subject: [PATCH 253/541] Combine flask and django trigger words, make it the default --- pyt/argument_helpers.py | 2 +- .../all_trigger_words.pyt | 34 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 pyt/vulnerability_definitions/all_trigger_words.pyt diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index a2ecee35..847636f9 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -15,7 +15,7 @@ default_trigger_word_file = os.path.join( os.path.dirname(__file__), 'vulnerability_definitions', - 'flask_trigger_words.pyt' + 'all_trigger_words.pyt' ) diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt new file mode 100644 index 00000000..656c8386 --- /dev/null +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -0,0 +1,34 @@ +sources: +request.args.get( +Markup( +POST.get( +GET.get( +META.get( +POST[ +GET[ +META[ +FILES[ +.data +form[ +form( +mark_safe( +cookies[ +files[ +SQLAlchemy + +sinks: +replace( -> escape +send_file( -> '..', '..' in +execute( +system( +filter( +subprocess.call( +render_template( +set_cookie( +redirect( +url_for( +flash( +jsonify( +render( +render_to_response( +Popen( \ No newline at end of file From c2a4e67dbee2d7acc7638d321b499101b610ee24 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 17 Apr 2018 09:34:41 -0700 Subject: [PATCH 254/541] Fix Ifatty line_number arg RaiseNode bug --- pyt/node_types.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pyt/node_types.py b/pyt/node_types.py index 8451e9c3..9d194bcf 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -138,14 +138,13 @@ def __init__(self, label): class RaiseNode(Node, ConnectToExitNode): """CFG Node that represents a Raise statement.""" - def __init__(self, ast_node, *, line_number, path): + def __init__(self, ast_node, *, path): label_visitor = LabelVisitor() label_visitor.visit(ast_node) super().__init__( label_visitor.result, ast_node, - line_number=line_number, path=path ) From b3110b3e99c9aed855a242f74594306eec8dcf24 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 17 Apr 2018 09:44:39 -0700 Subject: [PATCH 255/541] Fix the foddy infinite loop --- pyt/stmt_visitor_helper.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/pyt/stmt_visitor_helper.py b/pyt/stmt_visitor_helper.py index 21f1f666..315c3332 100644 --- a/pyt/stmt_visitor_helper.py +++ b/pyt/stmt_visitor_helper.py @@ -1,4 +1,5 @@ import ast +import random from collections import namedtuple from .node_types import ( @@ -101,16 +102,24 @@ def get_first_node( node, node_not_to_step_past ): + """ + This is a super hacky way of getting the first node after a statement. + We do this because we visit a statement and keep on visiting and get something in return that is rarely the first node. + So we loop and loop backwards until we hit the statement or there is nothing to step back to. + """ ingoing = None + i = 0 current_node = node while current_node.ingoing: + # This is used because there may be multiple ingoing and loop will cause an infinite loop if we did [0] + i = random.randrange(len(current_node.ingoing)) # e.g. We don't want to step past the Except of an Except basic block - if current_node.ingoing[0] == node_not_to_step_past: + if current_node.ingoing[i] == node_not_to_step_past: break ingoing = current_node.ingoing - current_node = current_node.ingoing[0] + current_node = current_node.ingoing[i] if ingoing: - return ingoing[0] + return ingoing[i] return current_node From 054b70611579d28e6dcef4c9e1c4356e42a698d5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 18 Apr 2018 19:14:55 -0700 Subject: [PATCH 256/541] Skip making self a TaintedNode, vuln test for it, flake8 vuln_test, 88->89% --- .pre-commit-config.yaml | 2 +- .../def_with_self_as_first_arg.py | 4 ++ pyt/framework_adaptor.py | 31 +++++++++---- pyt/node_types.py | 4 ++ tests/vulnerabilities_test.py | 46 ++++++++++++++++--- tox.ini | 2 +- 6 files changed, 70 insertions(+), 19 deletions(-) create mode 100644 examples/example_inputs/def_with_self_as_first_arg.py diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 8ef0f176..33a48e76 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,4 +8,4 @@ - id: check-ast - id: check-symlinks - id: flake8 - args: ['--ignore=E501'] + args: ['--exclude=examples/*', '--ignore=E501,E741'] diff --git a/examples/example_inputs/def_with_self_as_first_arg.py b/examples/example_inputs/def_with_self_as_first_arg.py new file mode 100644 index 00000000..0c244455 --- /dev/null +++ b/examples/example_inputs/def_with_self_as_first_arg.py @@ -0,0 +1,4 @@ + + +def my_data(self, foo, bar): + return redirect(self.something) diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index d602a92f..c7e5119d 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -5,7 +5,10 @@ from .ast_helper import Arguments from .expr_visitor import make_cfg from .module_definitions import project_definitions -from .node_types import TaintedNode +from .node_types import ( + AssignmentNode, + TaintedNode +) class FrameworkAdaptor(): @@ -37,19 +40,27 @@ def get_func_cfg_with_tainted_args(self, definition): first_node_after_args = func_cfg.nodes[1] first_node_after_args.ingoing = list() - # We're just gonna give all the tainted args the lineno of the def + # We are just going to give all the tainted args the lineno of the def definition_lineno = definition.node.lineno # Taint all the arguments - for arg in args: - tainted_node = TaintedNode(arg, arg, - None, [], - line_number=definition_lineno, - path=definition.path) - function_entry_node.connect(tainted_node) + for i, arg in enumerate(args): + node_type = TaintedNode + if i == 0 and arg == 'self': + node_type = AssignmentNode + + arg_node = node_type( + label=arg, + left_hand_side=arg, + ast_node=None, + right_hand_side_variables=[], + line_number=definition_lineno, + path=definition.path + ) + function_entry_node.connect(arg_node) # 1 and not 0 so that Entry Node remains first in the list - func_cfg.nodes.insert(1, tainted_node) - tainted_node.connect(first_node_after_args) + func_cfg.nodes.insert(1, arg_node) + arg_node.connect(first_node_after_args) return func_cfg diff --git a/pyt/node_types.py b/pyt/node_types.py index 9d194bcf..3819963a 100644 --- a/pyt/node_types.py +++ b/pyt/node_types.py @@ -176,6 +176,10 @@ def __repr__(self): class TaintedNode(AssignmentNode): + """CFG Node that represents a tainted node. + + Only created in framework_adaptor.py and only used in `identify_triggers` of vulnerabilities.py + """ pass diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index fb3c00f2..f3d77279 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -15,9 +15,10 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import( +from pyt.framework_helper import ( is_django_view_function, - is_flask_route_function + is_flask_route_function, + is_function ) from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis @@ -95,17 +96,15 @@ def test_find_triggers(self): l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words) self.assert_length(l, expected_length=1) - def test_find_sanitiser_nodes(self): cfg_node = Node(None, None, line_number=None, path=None) - sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) + sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) sanitiser = 'escape' result = list(vulnerabilities.find_sanitiser_nodes(sanitiser, [sanitiser_tuple])) self.assert_length(result, expected_length=1) self.assertEqual(result[0], cfg_node) - def test_build_sanitiser_node_dict(self): self.cfg_create_from_file('examples/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] @@ -114,7 +113,7 @@ def test_build_sanitiser_node_dict(self): cfg = cfg_list[1] - cfg_node = Node(None, None, line_number=None, path=None) + cfg_node = Node(None, None, line_number=None, path=None) sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)] sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file) @@ -142,7 +141,6 @@ def run_analysis(self, path): ) ) - def test_find_vulnerabilities_assign_other_var(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_assign_to_other_var.py') self.assert_length(vulnerabilities, expected_length=1) @@ -555,3 +553,37 @@ def test_django_view_param(self): ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + +class EngineEveryTest(BaseTestCase): + def run_empty(self): + return + + def run_analysis(self, path): + self.cfg_create_from_file(path) + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_function) + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + + trigger_word_file = os.path.join( + 'pyt', + 'vulnerability_definitions', + 'all_trigger_words.pyt' + ) + + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + trigger_word_file + ) + ) + + def test_self_is_not_tainted(self): + vulnerabilities = self.run_analysis('examples/example_inputs/def_with_self_as_first_arg.py') + self.assert_length(vulnerabilities, expected_length=0) diff --git a/tox.ini b/tox.ini index 933a1460..70393146 100644 --- a/tox.ini +++ b/tox.ini @@ -7,5 +7,5 @@ deps = -rrequirements-dev.txt commands = coverage erase coverage run tests - coverage report --show-missing --fail-under 88 + coverage report --show-missing --fail-under 89 pre-commit run From 84f7eac80ecb23b021ba67b804f91f231a227f8d Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 18 Apr 2018 19:22:23 -0700 Subject: [PATCH 257/541] Missed a spot (python -> python3) --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 89b0382e..9bd41255 100644 --- a/README.rst +++ b/README.rst @@ -89,7 +89,7 @@ Create the virtual environment Check that you have the right versions -``python --version`` sample output ``Python 3.6.0`` +``python3 --version`` sample output ``Python 3.6.0`` ``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` From 101f3204ccba6bc76b0d216258022eac93557962 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 18 Apr 2018 20:15:09 -0700 Subject: [PATCH 258/541] Our first CHANGELOG.md, added Unreleased section --- CHANGELOG.md | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..328cfd3e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,55 @@ +# What's New + +Thanks to all our contributors, users, and the many people that make PyT possible! :heart: + +If you love PyT, please star our project on GitHub to show your support! :star: + + + +# Unreleased +##### April 18, 2018 + +#### :tada: New Features + +* Baseline support by in ([#106], thanks [@omergunal]) + +[#106]: https://github.com/python-security/pyt/pull/106 +[@omergunal]: https://github.com/omergunal + +#### :sparkles: Usability +* Combined all source/sink files and made it the default (#116) + +#### :telescope: Precision +* Fixed a bug where "Post.query.paginate" progated taint (#115) +* Fixed a false-positive where `self` was marked as taint (#119) + +#### :bug: Bugfixes +* Fixed a bug where `visit_Raise` raised a `TypeError` (#117) +* Fixed an infinite loop bug that was caused while handling certain loops (#118) + +#### :snake: Miscellaneous + +* Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) (#110, #111) + +[#106]: https://github.com/python-security/pyt/pull/116 +[#106]: https://github.com/python-security/pyt/pull/115 +[#106]: https://github.com/python-security/pyt/pull/119 +[#106]: https://github.com/python-security/pyt/pull/117 +[#106]: https://github.com/python-security/pyt/pull/118 +[#106]: https://github.com/python-security/pyt/pull/111 +[#106]: https://github.com/python-security/pyt/pull/110 From 9aaa926b11eea6cc14615c36db81246baebe8fc9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 18 Apr 2018 20:17:05 -0700 Subject: [PATCH 259/541] Missing square brackets --- CHANGELOG.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 328cfd3e..b89d349d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,19 +32,19 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@omergunal]: https://github.com/omergunal #### :sparkles: Usability -* Combined all source/sink files and made it the default (#116) +* Combined all source/sink files and made it the default ([#116]) #### :telescope: Precision -* Fixed a bug where "Post.query.paginate" progated taint (#115) -* Fixed a false-positive where `self` was marked as taint (#119) +* Fixed a bug where "Post.query.paginate" progated taint ([#115]) +* Fixed a false-positive where `self` was marked as taint ([#119]) #### :bug: Bugfixes -* Fixed a bug where `visit_Raise` raised a `TypeError` (#117) -* Fixed an infinite loop bug that was caused while handling certain loops (#118) +* Fixed a bug where `visit_Raise` raised a `TypeError` ([#117]) +* Fixed an infinite loop bug that was caused while handling certain loops ([#118]) #### :snake: Miscellaneous -* Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) (#110, #111) +* Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) [#106]: https://github.com/python-security/pyt/pull/116 [#106]: https://github.com/python-security/pyt/pull/115 From 4bf72b0e0328a1840549c6bf8ceff6f7c88a301d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 18 Apr 2018 20:18:52 -0700 Subject: [PATCH 260/541] I should go to sleep now :D --- CHANGELOG.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b89d349d..0219c59b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,10 +46,10 @@ If you love PyT, please star our project on GitHub to show your support! :star: * Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) -[#106]: https://github.com/python-security/pyt/pull/116 -[#106]: https://github.com/python-security/pyt/pull/115 -[#106]: https://github.com/python-security/pyt/pull/119 -[#106]: https://github.com/python-security/pyt/pull/117 -[#106]: https://github.com/python-security/pyt/pull/118 -[#106]: https://github.com/python-security/pyt/pull/111 -[#106]: https://github.com/python-security/pyt/pull/110 +[#116]: https://github.com/python-security/pyt/pull/116 +[#115]: https://github.com/python-security/pyt/pull/115 +[#119]: https://github.com/python-security/pyt/pull/119 +[#117]: https://github.com/python-security/pyt/pull/117 +[#118]: https://github.com/python-security/pyt/pull/118 +[#111]: https://github.com/python-security/pyt/pull/111 +[#110]: https://github.com/python-security/pyt/pull/110 From 45f848362eaf1b494b7150a5fe2b3643818acd25 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 18 Apr 2018 20:20:39 -0700 Subject: [PATCH 261/541] I should go to sleep now :D --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0219c59b..b9418124 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -32,10 +32,10 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@omergunal]: https://github.com/omergunal #### :sparkles: Usability -* Combined all source/sink files and made it the default ([#116]) +* Combined all source/sink information files and made it the default ([#116]) #### :telescope: Precision -* Fixed a bug where "Post.query.paginate" progated taint ([#115]) +* Fixed a bug where `Post.query.paginate` propagated taint ([#115]) * Fixed a false-positive where `self` was marked as taint ([#119]) #### :bug: Bugfixes From c15a10c496d056f190a3c98da04750747057f2f8 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 18 Apr 2018 20:42:29 -0700 Subject: [PATCH 262/541] Typo --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b9418124..ba1451e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,7 +26,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :tada: New Features -* Baseline support by in ([#106], thanks [@omergunal]) +* Baseline support ([#106], thanks [@omergunal]) [#106]: https://github.com/python-security/pyt/pull/106 [@omergunal]: https://github.com/omergunal From 3f97f9923748b993033f3da242ffeb84d4acd53a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 19 Apr 2018 18:18:06 -0700 Subject: [PATCH 263/541] Added thanks @lfatty --- CHANGELOG.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1451e4..18e840a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :boom: Breaking Changes #### :tada: New Features #### :sparkles: Usability +#### :mortar_board: Walkthrough / Help #### :telescope: Precision #### :bug: Bugfixes #### :snake: Miscellaneous @@ -36,10 +37,10 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :telescope: Precision * Fixed a bug where `Post.query.paginate` propagated taint ([#115]) -* Fixed a false-positive where `self` was marked as taint ([#119]) +* Fixed a false-positive where `self` was marked as taint ([#119], thanks [@lFatty]) #### :bug: Bugfixes -* Fixed a bug where `visit_Raise` raised a `TypeError` ([#117]) +* Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) * Fixed an infinite loop bug that was caused while handling certain loops ([#118]) #### :snake: Miscellaneous @@ -53,3 +54,4 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#118]: https://github.com/python-security/pyt/pull/118 [#111]: https://github.com/python-security/pyt/pull/111 [#110]: https://github.com/python-security/pyt/pull/110 +[@lfatty]: https://github.com/lfatty From 09c99be4a813fc11a49783d1a7e7cc99875f8271 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 17:35:22 -0700 Subject: [PATCH 264/541] Format parsing of command line args --- pyt/__main__.py | 308 ++++++++++++++++++++++++++++++------------------ 1 file changed, 191 insertions(+), 117 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 4ceb67d1..9d2b7e21 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -60,135 +60,209 @@ def parse_args(args): subparsers = parser.add_subparsers() entry_group = parser.add_mutually_exclusive_group(required=True) - entry_group.add_argument('-f', '--filepath', - help='Path to the file that should be analysed.', - type=str) - entry_group.add_argument('-gr', '--git-repos', - help='Takes a CSV file of git_url, path per entry.', - type=str) - - parser.add_argument('-pr', '--project-root', - help='Add project root, this is important when the entry' + - ' file is not at the root of the project.', type=str) - parser.add_argument('-d', '--draw-cfg', - help='Draw CFG and output as .pdf file.', - action='store_true') - parser.add_argument('-o', '--output-filename', - help='Output filename.', type=str) - parser.add_argument('-csv', '--csv-path', type=str, - help='Give the path of the csv file' - ' repos should be added to.') + entry_group.add_argument( + '-f', '--filepath', + help='Path to the file that should be analysed.', + type=str + ) + entry_group.add_argument( + '-gr', '--git-repos', + help='Takes a CSV file of git_url, path per entry.', + type=str + ) + + parser.add_argument( + '-pr', '--project-root', + help='Add project root, this is important when the entry ' + 'file is not at the root of the project.', + type=str + ) + parser.add_argument( + '-d', '--draw-cfg', + help='Draw CFG and output as .pdf file.', + action='store_true' + ) + parser.add_argument( + '-o', '--output-filename', + help='Output filename.', type=str + ) + parser.add_argument( + '-csv', '--csv-path', type=str, + help='Give the path of the csv file' + ' repos should be added to.' + ) + parser.add_argument( + '-t', '--trigger-word-file', + help='Input trigger word file.', + type=str, + default=default_trigger_word_file + ) + parser.add_argument( + '-m', '--blackbox-mapping-file', + help='Input blackbox mapping file.', + type=str, + default=default_blackbox_mapping_file + ) + parser.add_argument( + '-py2', '--python-2', + help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + + ' needed when target file(s) are written in Python 2.', + action='store_true' + ) + parser.add_argument( + '-l', '--log-level', + help='Choose logging level: CRITICAL, ERROR,' + ' WARNING(Default), INFO, DEBUG, NOTSET.', + type=str + ) + parser.add_argument( + '-a', '--adaptor', + help='Choose an adaptor: Flask(Default), Django, Every or Pylons', + type=str + ) + parser.add_argument( + '-db', '--create-database', + help='Creates a sql file that can be used to' + ' create a database.', + action='store_true' + ) + parser.add_argument( + '-dl', '--draw-lattice', + nargs='+', help='Draws a lattice.' + ) + parser.add_argument( + '-j', '--json', + help='Prints JSON instead of report.', + action='store_true', + default=False + ) + parser.add_argument( + '-ppm', '--print-project-modules', + help='Print project modules.', action='store_true' + ) + parser.add_argument( + '-b', '--baseline', + help='path of a baseline report to compare against ' + '(only JSON-formatted files are accepted)', + type=str, + default=False + ) print_group = parser.add_mutually_exclusive_group() - print_group.add_argument('-p', '--print', - help='Prints the nodes of the CFG.', - action='store_true') - print_group.add_argument('-vp', '--verbose-print', - help='Verbose printing of -p.', action='store_true') - print_group.add_argument('-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', - action='store_true', - default=False) - print_group.add_argument('-i', '--interactive', - help='Will ask you about each vulnerability chain and blackbox nodes.', - action='store_true', - default=False) - - parser.add_argument('-t', '--trigger-word-file', - help='Input trigger word file.', - type=str, - default=default_trigger_word_file) - parser.add_argument('-m', '--blackbox-mapping-file', - help='Input blackbox mapping file.', - type=str, - default=default_blackbox_mapping_file) - parser.add_argument('-py2', '--python-2', - help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + - ' needed when target file(s) are written in Python 2.', action='store_true') - parser.add_argument('-l', '--log-level', - help='Choose logging level: CRITICAL, ERROR,' + - ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) - parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: Flask(Default), Django, Every or Pylons', - type=str) - parser.add_argument('-db', '--create-database', - help='Creates a sql file that can be used to' + - ' create a database.', action='store_true') - parser.add_argument('-dl', '--draw-lattice', - nargs='+', help='Draws a lattice.') - parser.add_argument('-j', '--json', - help='Prints JSON instead of report.', - action='store_true', - default=False) + print_group.add_argument( + '-p', '--print', + help='Prints the nodes of the CFG.', + action='store_true' + ) + print_group.add_argument( + '-vp', '--verbose-print', + help='Verbose printing of -p.', + action='store_true' + ) + print_group.add_argument( + '-trim', '--trim-reassigned-in', + help='Trims the reassigned list to the vulnerability chain.', + action='store_true', + default=False + ) + print_group.add_argument( + '-i', '--interactive', + help='Will ask you about each vulnerability chain and blackbox nodes.', + action='store_true', + default=False + ) analysis_group = parser.add_mutually_exclusive_group() - analysis_group.add_argument('-li', '--liveness', - help='Run liveness analysis. Default is' + - ' reaching definitions tainted version.', - action='store_true') - analysis_group.add_argument('-re', '--reaching', - help='Run reaching definitions analysis.' + - ' Default is reaching definitions' + - ' tainted version.', action='store_true') - analysis_group.add_argument('-rt', '--reaching-taint', - help='This is the default analysis:' + - ' reaching definitions tainted version.', - action='store_true') - - parser.add_argument('-ppm', '--print-project-modules', - help='Print project modules.', action='store_true') - parser.add_argument('-b', '--baseline', - help='path of a baseline report to compare against ' - '(only JSON-formatted files are accepted)', - type=str, - default=False) - - save_parser = subparsers.add_parser('save', help='Save menu.') - save_parser.set_defaults(which='save') - save_parser.add_argument('-fp', '--filename-prefix', - help='Filename prefix fx file_lattice.pyt', - type=str) - save_parser.add_argument('-du', '--def-use-chain', - help='Output the def-use chain(s) to file.', - action='store_true') - save_parser.add_argument('-ud', '--use-def-chain', - help='Output the use-def chain(s) to file', - action='store_true') - save_parser.add_argument('-cfg', '--control-flow-graph', - help='Output the CFGs to file.', - action='store_true') - save_parser.add_argument('-vcfg', '--verbose-control-flow-graph', - help='Output the verbose CFGs to file.', - action='store_true') - save_parser.add_argument('-an', '--analysis', - help='Output analysis results to file' + - ' in form of a constraint table.', - action='store_true') - save_parser.add_argument('-la', '--lattice', help='Output lattice(s) to file.', - action='store_true') - save_parser.add_argument('-vu', '--vulnerabilities', - help='Output vulnerabilities to file.', - action='store_true') - save_parser.add_argument('-all', '--save-all', - help='Output everything to file.', - action='store_true') + analysis_group.add_argument( + '-li', '--liveness', + help='Run liveness analysis. Default is' + ' reaching definitions tainted version.', + action='store_true' + ) + analysis_group.add_argument( + '-re', '--reaching', + help='Run reaching definitions analysis.' + ' Default is reaching definitions' + ' tainted version.', + action='store_true' + ) + analysis_group.add_argument( + '-rt', '--reaching-taint', + help='This is the default analysis:' + ' reaching definitions tainted version.', + action='store_true' + ) + save_parser = subparsers.add_parser( + 'save', + help='Save menu.' + ) + save_parser.set_defaults(which='save') + save_parser.add_argument( + '-fp', '--filename-prefix', + help='Filename prefix fx file_lattice.pyt', + type=str + ) + save_parser.add_argument( + '-du', '--def-use-chain', + help='Output the def-use chain(s) to file.', + action='store_true' + ) + save_parser.add_argument( + '-ud', '--use-def-chain', + help='Output the use-def chain(s) to file', + action='store_true' + ) + save_parser.add_argument( + '-cfg', '--control-flow-graph', + help='Output the CFGs to file.', + action='store_true' + ) + save_parser.add_argument( + '-vcfg', '--verbose-control-flow-graph', + help='Output the verbose CFGs to file.', + action='store_true' + ) + save_parser.add_argument( + '-an', '--analysis', + help='Output analysis results to file ' + 'in form of a constraint table.', + action='store_true' + ) + save_parser.add_argument( + '-la', '--lattice', help='Output lattice(s) to file.', + action='store_true' + ) + save_parser.add_argument( + '-vu', '--vulnerabilities', + help='Output vulnerabilities to file.', + action='store_true' + ) + save_parser.add_argument( + '-all', '--save-all', + help='Output everything to file.', + action='store_true' + ) search_parser = subparsers.add_parser( 'github_search', - help='Searches through github and runs PyT' - ' on found repositories. This can take some time.') + help='Searches through github and runs PyT ' + 'on found repositories. This can take some time.' + ) search_parser.set_defaults(which='search') - search_parser.add_argument( '-ss', '--search-string', required=True, - help='String for searching for repos on github.', type=str) + help='String for searching for repos on github.', + type=str + ) + search_parser.add_argument( + '-sd', '--start-date', + help='Start date for repo search. ' + 'Criteria used is Created Date.', + type=valid_date, + default=date(2010, 1, 1) + ) - search_parser.add_argument('-sd', '--start-date', - help='Start date for repo search. ' - 'Criteria used is Created Date.', - type=valid_date, - default=date(2010, 1, 1)) return parser.parse_args(args) From aae962534e941fa8f58c3e40ae4b51b520707f42 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 17:38:09 -0700 Subject: [PATCH 265/541] Fix https://stackoverflow.com/questions/43393764/python-3-6-project-structure-leads-to-runtimewarning --- pyt/__init__.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/pyt/__init__.py b/pyt/__init__.py index aa35dd91..e69de29b 100644 --- a/pyt/__init__.py +++ b/pyt/__init__.py @@ -1,5 +0,0 @@ -from .__main__ import main - - -if __name__ == '__main__': - main() From ed59b6d9fa276d2b5a34140f6851ef603cbc6d28 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 17:43:13 -0700 Subject: [PATCH 266/541] [tests] Make test_no_args pass after re-formatting the arg parsing --- tests/command_line_test.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index a4663225..9ee97067 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -24,10 +24,10 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] - [-p | -vp | -trim | -i] [-t TRIGGER_WORD_FILE] - [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] - [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] - [-j] [-li | -re | -rt] [-ppm] [-b BASELINE] + [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-py2] + [-l LOG_LEVEL] [-a ADAPTOR] [-db] + [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-j] [-ppm] + [-b BASELINE] [-p | -vp | -trim | -i] [-li | -re | -rt] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" From 72285cd79eda4b56ca5ee4b012e72ef10c0491b5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 21:04:24 -0700 Subject: [PATCH 267/541] Re-organize a lot of stuff --- .coveragerc | 6 - pyt/__main__.py | 260 +++------------------ pyt/analysis_base.py | 36 --- pyt/constraint_table.py | 6 - pyt/definition_chains.py | 5 +- pyt/draw.py | 230 ------------------ pyt/fixed_point.py | 4 +- pyt/framework_adaptor.py | 8 +- pyt/github_search.py | 255 ++++++++++---------- pyt/lattice.py | 26 +-- pyt/liveness.py | 134 ----------- pyt/reaching_definitions.py | 3 + pyt/reaching_definitions_base.py | 24 +- pyt/reaching_definitions_taint.py | 4 +- pyt/repo_runner.py | 64 ++--- pyt/save.py | 162 ------------- pyt/vulnerabilities.py | 4 +- tests/analysis_base_test_case.py | 21 +- tests/command_line_test.py | 12 +- tests/github_search_test.py | 18 +- tests/lattice_test.py | 143 ------------ tests/liveness_test.py | 33 --- tests/vulnerabilities_across_files_test.py | 15 +- tests/vulnerabilities_test.py | 18 +- tox.ini | 2 +- 25 files changed, 291 insertions(+), 1202 deletions(-) delete mode 100644 pyt/analysis_base.py delete mode 100644 pyt/draw.py delete mode 100644 pyt/liveness.py delete mode 100644 pyt/save.py delete mode 100644 tests/lattice_test.py diff --git a/.coveragerc b/.coveragerc index 3b2dc417..37429140 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,8 +1,5 @@ [report] exclude_lines = - def print_lattice - def print_report - def print_table def valid_date def __repr__ def __str__ @@ -16,10 +13,7 @@ source = ./pyt omit = pyt/__main__.py pyt/definition_chains.py - pyt/draw.py pyt/formatters/json.py pyt/formatters/text.py pyt/github_search.py - pyt/liveness.py pyt/repo_runner.py - pyt/save.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 9d2b7e21..0d23bebc 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -1,10 +1,9 @@ -"""This module is the comand line tool of pyt.""" +"""The comand line module of PyT.""" import argparse import os import sys from datetime import date -from pprint import pprint from .argument_helpers import ( default_blackbox_mapping_file, @@ -15,11 +14,7 @@ ) from .ast_helper import generate_ast from .baseline import get_vulnerabilities_not_in_baseline -from .constraint_table import ( - initialize_constraint_table, - print_table -) -from .draw import draw_cfgs, draw_lattices +from .constraint_table import initialize_constraint_table from .expr_visitor import make_cfg from .fixed_point import analyse from .formatters import ( @@ -33,23 +28,17 @@ is_function, is_function_without_leading_ ) -from .github_search import scan_github, set_github_api_token -from .lattice import print_lattice -from .liveness import LivenessAnalysis -from .project_handler import get_directory_modules, get_modules -from .reaching_definitions import ReachingDefinitionsAnalysis +from .github_search import ( + analyse_repo, + scan_github, + set_github_api_token +) +from .project_handler import ( + get_directory_modules, + get_modules +) from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .repo_runner import get_repos -from .save import ( - cfg_to_file, - create_database, - def_use_chain_to_file, - lattice_to_file, - Output, - use_def_chain_to_file, - verbose_cfg_to_file, - vulnerabilities_to_file -) from .vulnerabilities import find_vulnerabilities @@ -62,7 +51,7 @@ def parse_args(args): entry_group = parser.add_mutually_exclusive_group(required=True) entry_group.add_argument( '-f', '--filepath', - help='Path to the file that should be analysed.', + help='Path to the file that should be analysed.', type=str ) entry_group.add_argument( @@ -77,15 +66,6 @@ def parse_args(args): 'file is not at the root of the project.', type=str ) - parser.add_argument( - '-d', '--draw-cfg', - help='Draw CFG and output as .pdf file.', - action='store_true' - ) - parser.add_argument( - '-o', '--output-filename', - help='Output filename.', type=str - ) parser.add_argument( '-csv', '--csv-path', type=str, help='Give the path of the csv file' @@ -120,26 +100,12 @@ def parse_args(args): help='Choose an adaptor: Flask(Default), Django, Every or Pylons', type=str ) - parser.add_argument( - '-db', '--create-database', - help='Creates a sql file that can be used to' - ' create a database.', - action='store_true' - ) - parser.add_argument( - '-dl', '--draw-lattice', - nargs='+', help='Draws a lattice.' - ) parser.add_argument( '-j', '--json', help='Prints JSON instead of report.', action='store_true', default=False ) - parser.add_argument( - '-ppm', '--print-project-modules', - help='Print project modules.', action='store_true' - ) parser.add_argument( '-b', '--baseline', help='path of a baseline report to compare against ' @@ -149,16 +115,6 @@ def parse_args(args): ) print_group = parser.add_mutually_exclusive_group() - print_group.add_argument( - '-p', '--print', - help='Prints the nodes of the CFG.', - action='store_true' - ) - print_group.add_argument( - '-vp', '--verbose-print', - help='Verbose printing of -p.', - action='store_true' - ) print_group.add_argument( '-trim', '--trim-reassigned-in', help='Trims the reassigned list to the vulnerability chain.', @@ -172,78 +128,6 @@ def parse_args(args): default=False ) - analysis_group = parser.add_mutually_exclusive_group() - analysis_group.add_argument( - '-li', '--liveness', - help='Run liveness analysis. Default is' - ' reaching definitions tainted version.', - action='store_true' - ) - analysis_group.add_argument( - '-re', '--reaching', - help='Run reaching definitions analysis.' - ' Default is reaching definitions' - ' tainted version.', - action='store_true' - ) - analysis_group.add_argument( - '-rt', '--reaching-taint', - help='This is the default analysis:' - ' reaching definitions tainted version.', - action='store_true' - ) - - save_parser = subparsers.add_parser( - 'save', - help='Save menu.' - ) - save_parser.set_defaults(which='save') - save_parser.add_argument( - '-fp', '--filename-prefix', - help='Filename prefix fx file_lattice.pyt', - type=str - ) - save_parser.add_argument( - '-du', '--def-use-chain', - help='Output the def-use chain(s) to file.', - action='store_true' - ) - save_parser.add_argument( - '-ud', '--use-def-chain', - help='Output the use-def chain(s) to file', - action='store_true' - ) - save_parser.add_argument( - '-cfg', '--control-flow-graph', - help='Output the CFGs to file.', - action='store_true' - ) - save_parser.add_argument( - '-vcfg', '--verbose-control-flow-graph', - help='Output the verbose CFGs to file.', - action='store_true' - ) - save_parser.add_argument( - '-an', '--analysis', - help='Output analysis results to file ' - 'in form of a constraint table.', - action='store_true' - ) - save_parser.add_argument( - '-la', '--lattice', help='Output lattice(s) to file.', - action='store_true' - ) - save_parser.add_argument( - '-vu', '--vulnerabilities', - help='Output vulnerabilities to file.', - action='store_true' - ) - save_parser.add_argument( - '-all', '--save-all', - help='Output everything to file.', - action='store_true' - ) - search_parser = subparsers.add_parser( 'github_search', help='Searches through github and runs PyT ' @@ -266,43 +150,9 @@ def parse_args(args): return parser.parse_args(args) -def analyse_repo(args, github_repo, analysis_type, ui_mode): - cfg_list = list() - directory = os.path.dirname(github_repo.path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - tree = generate_ast(github_repo.path) - cfg = make_cfg( - tree, - project_modules, - local_modules, - github_repo.path - ) - cfg_list.append(cfg) - - initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=analysis_type) - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis_type, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ) - ) - return vulnerabilities - - def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) - analysis = ReachingDefinitionsTaintAnalysis - if args.liveness: - analysis = LivenessAnalysis - elif args.reaching: - analysis = ReachingDefinitionsAnalysis - ui_mode = UImode.NORMAL if args.interactive: ui_mode = UImode.INTERACTIVE @@ -314,7 +164,11 @@ def main(command_line_args=sys.argv[1:]): repos = get_repos(args.git_repos) for repo in repos: repo.clone() - vulnerabilities = analyse_repo(args, repo, analysis, ui_mode) + vulnerabilities = analyse_repo( + args, + repo, + ui_mode + ) if args.json: json.report(vulnerabilities, sys.stdout) else: @@ -323,14 +177,11 @@ def main(command_line_args=sys.argv[1:]): repo.clean_up() exit() - if args.which == 'search': set_github_api_token() scan_github( args.search_string, args.start_date, - analysis, - analyse_repo, args.csv_path, ui_mode, args @@ -339,7 +190,6 @@ def main(command_line_args=sys.argv[1:]): path = os.path.normpath(args.filepath) - directory = None if args.project_root: directory = os.path.normpath(args.project_root) else: @@ -349,14 +199,13 @@ def main(command_line_args=sys.argv[1:]): tree = generate_ast(path, python_2=args.python_2) - cfg_list = list() cfg = make_cfg( tree, project_modules, local_modules, path ) - cfg_list.append(cfg) + cfg_list = list(cfg) framework_route_criteria = is_flask_route_function if args.adaptor: if args.adaptor.lower().startswith('e'): @@ -366,15 +215,20 @@ def main(command_line_args=sys.argv[1:]): elif args.adaptor.lower().startswith('d'): framework_route_criteria = is_django_view_function # Add all the route functions to the cfg_list - FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + FrameworkAdaptor( + cfg_list, + project_modules, + local_modules, + framework_route_criteria + ) initialize_constraint_table(cfg_list) - - analyse(cfg_list, analysis_type=analysis) - + analyse( + cfg_list, + ReachingDefinitionsTaintAnalysis + ) vulnerabilities = find_vulnerabilities( cfg_list, - analysis, ui_mode, VulnerabilityFiles( args.blackbox_mapping_file, @@ -382,64 +236,16 @@ def main(command_line_args=sys.argv[1:]): ) ) if args.baseline: - vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) - + vulnerabilities = get_vulnerabilities_not_in_baseline( + vulnerabilities, + args.baseline + ) + if args.json: json.report(vulnerabilities, sys.stdout) else: text.report(vulnerabilities, sys.stdout) - if args.draw_cfg: - if args.output_filename: - draw_cfgs(cfg_list, args.output_filename) - else: - draw_cfgs(cfg_list) - if args.print: - lattice = print_lattice(cfg_list, analysis) - - print_table(lattice) - for i, e in enumerate(cfg_list): - print('############## CFG number: ', i) - print(e) - if args.verbose_print: - for i, e in enumerate(cfg_list): - print('############## CFG number: ', i) - print(repr(e)) - - if args.print_project_modules: - print('############## PROJECT MODULES ##############') - pprint(project_modules) - - if args.create_database: - create_database(cfg_list, vulnerabilities) - if args.draw_lattice: - draw_lattices(cfg_list) - - # Output to file - if args.which == 'save': - if args.filename_prefix: - Output.filename_prefix = args.filename_prefix - if args.save_all: - def_use_chain_to_file(cfg_list) - use_def_chain_to_file(cfg_list) - cfg_to_file(cfg_list) - verbose_cfg_to_file(cfg_list) - lattice_to_file(cfg_list, analysis) - vulnerabilities_to_file(vulnerabilities) - else: - if args.def_use_chain: - def_use_chain_to_file(cfg_list) - if args.use_def_chain: - use_def_chain_to_file(cfg_list) - if args.control_flow_graph: - cfg_to_file(cfg_list) - if args.verbose_control_flow_graph: - verbose_cfg_to_file(cfg_list) - if args.lattice: - lattice_to_file(cfg_list, analysis) - if args.vulnerabilities: - vulnerabilities_to_file(vulnerabilities) - if __name__ == '__main__': main() diff --git a/pyt/analysis_base.py b/pyt/analysis_base.py deleted file mode 100644 index 8a4bbcf6..00000000 --- a/pyt/analysis_base.py +++ /dev/null @@ -1,36 +0,0 @@ -"""This module contains a base class for the analysis component used in PyT.""" - -from abc import ( - ABCMeta, - abstractmethod -) - - -class AnalysisBase(metaclass=ABCMeta): - """Base class for fixed point analyses.""" - - annotated_cfg_nodes = dict() - - def __init__(self, cfg): - self.cfg = cfg - self.build_lattice(cfg) - - @staticmethod - @abstractmethod - def get_lattice_elements(cfg_nodes): - pass - - @abstractmethod - def equal(self, value, other): - """Define the equality for two constraint sets - that are defined by bitvectors.""" - pass - - @abstractmethod - def build_lattice(self, cfg): - pass - - @abstractmethod - def dep(self, q_1): - """Represents the dep mapping from Schwartzbach.""" - pass diff --git a/pyt/constraint_table.py b/pyt/constraint_table.py index de7a0cea..bc7466d7 100644 --- a/pyt/constraint_table.py +++ b/pyt/constraint_table.py @@ -17,9 +17,3 @@ def constraint_join(cfg_nodes): for e in cfg_nodes: r = r | constraint_table[e] return r - - -def print_table(lattice): - print('Constraint table:') - for k, v in constraint_table.items(): - print(str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)])) diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index 8b813e8b..ad63871b 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -3,7 +3,6 @@ from .constraint_table import constraint_table from .lattice import Lattice from .node_types import AssignmentNode -from .reaching_definitions import ReachingDefinitionsAnalysis from .vars_visitor import VarsVisitor @@ -38,7 +37,7 @@ def get_constraint_nodes(node, lattice): def build_use_def_chain(cfg_nodes): use_def = dict() - lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) + lattice = Lattice(cfg_nodes) for node in cfg_nodes: definitions = list() @@ -53,7 +52,7 @@ def build_use_def_chain(cfg_nodes): def build_def_use_chain(cfg_nodes): def_use = dict() - lattice = Lattice(cfg_nodes, ReachingDefinitionsAnalysis) + lattice = Lattice(cfg_nodes) # For every node for node in cfg_nodes: diff --git a/pyt/draw.py b/pyt/draw.py deleted file mode 100644 index 7dbf378a..00000000 --- a/pyt/draw.py +++ /dev/null @@ -1,230 +0,0 @@ -"""Draws CFG.""" - -import argparse -from itertools import permutations -from subprocess import call - -from graphviz import Digraph - -from .node_types import AssignmentNode - - -IGNORED_LABEL_NAME_CHARACHTERS = ':' - -cfg_styles = { - 'graph': { - 'fontsize': '16', - 'fontcolor': 'black', - 'bgcolor': 'transparent', - 'rankdir': 'TB', - 'splines': 'ortho', - 'margin': '0.01', - }, - 'nodes': { - 'fontname': 'Gotham', - 'shape': 'box', - 'fontcolor': 'black', - 'color': 'black', - 'style': 'filled', - 'fillcolor': 'transparent', - }, - 'edges': { - 'style': 'filled', - 'color': 'black', - 'arrowhead': 'normal', - 'fontname': 'Courier', - 'fontsize': '12', - 'fontcolor': 'black', - } -} - -lattice_styles = { - 'graph': { - 'fontsize': '16', - 'fontcolor': 'black', - 'bgcolor': 'transparent', - 'rankdir': 'TB', - 'splines': 'line', - 'margin': '0.01', - 'ranksep': '1', - }, - 'nodes': { - 'fontname': 'Gotham', - 'shape': 'none', - 'fontcolor': 'black', - 'color': 'black', - 'style': 'filled', - 'fillcolor': 'transparent', - }, - 'edges': { - 'style': 'filled', - 'color': 'black', - 'arrowhead': 'none', - 'fontname': 'Courier', - 'fontsize': '12', - 'fontcolor': 'black', - } -} - - -def apply_styles(graph, styles): - """Apply styles to graph.""" - graph.graph_attr.update( - ('graph' in styles and styles['graph']) or {} - ) - graph.node_attr.update( - ('nodes' in styles and styles['nodes']) or {} - ) - graph.edge_attr.update( - ('edges' in styles and styles['edges']) or {} - ) - return graph - - -def draw_cfg(cfg, output_filename='output'): - """Draw CFG and output as pdf.""" - graph = Digraph(format='pdf') - - for node in cfg.nodes: - stripped_label = node.label.replace(IGNORED_LABEL_NAME_CHARACHTERS, '') - - if 'Exit' in stripped_label: - graph.node(stripped_label, 'Exit', shape='none') - elif 'Entry' in stripped_label: - graph.node(stripped_label, 'Entry', shape='none') - else: - graph.node(stripped_label, stripped_label) - - for ingoing_node in node.ingoing: - graph.edge(ingoing_node.label.replace( - IGNORED_LABEL_NAME_CHARACHTERS, ''), stripped_label) - - graph = apply_styles(graph, cfg_styles) - graph.render(filename=output_filename) - - -class Node(): - def __init__(self, s, parent, children=None): - self.s = s - self.parent = parent - self.children = children - - def __str__(self): - return 'Node: ' + str(self.s) + ' Parent: ' + str(self.parent) + ' Children: ' + str(self.children) - - def __hash__(self): - return hash(str(self.s)) - - -def draw_node(l, graph, node): - node_label = str(node.s) - graph.node(node_label, node_label) - for child in node.children: - child_label = str(child.s) - graph.node(child_label, child_label) - if not (node_label, child_label) in l: - graph.edge(node_label, child_label, ) - l.append((node_label, child_label)) - draw_node(l, graph, child) - - -def make_lattice(s, length): - p = Node(s, None) - p.children = get_children(p, s, length) - return p - - -def get_children(p, s, length): - children = set() - if length < 0: - return children - for subset in permutations(s, length): - setsubset = set(subset) - append = True - for node in children: - if setsubset == node.s: - append = False - break - if append: - n = Node(setsubset, p) - n.children = get_children(n, setsubset, length-1) - children.add(n) - return children - - -def add_anchor(filename): - filename += '.dot' - out = list() - delimiter = '->' - with open(filename, 'r') as fd: - for line in fd: - if delimiter in line: - s = line.split(delimiter) - ss = s[0][:-1] - s[0] = ss + ':s ' - ss = s[1][:-1] - s[1] = ss + ':n\n' - s.insert(1, delimiter) - out.append(''.join(s)) - elif 'set()' in line: - out.append('"set()" [label="{}"]') - else: - out.append(line) - with open(filename, 'w') as fd: - for line in out: - fd.write(line) - - -def run_dot(filename): - filename += '.dot' - call(['dot', '-Tpdf', filename, '-o', filename.replace('.dot', '.pdf')]) - - -def draw_lattice(cfg, output_filename='output'): - """Draw CFG and output as pdf.""" - graph = Digraph(format='pdf') - - ll = [s.label for s in cfg.nodes if isinstance(s, AssignmentNode)] - root = make_lattice(ll, len(ll)-1) - l = list() - draw_node(l, graph, root) - - graph = apply_styles(graph, lattice_styles) - graph.render(filename=output_filename+'.dot') - - add_anchor(output_filename) - run_dot(output_filename) - - -def draw_lattice_from_labels(labels, output_filename): - graph = Digraph(format='pdf') - - root = make_lattice(labels, len(labels)-1) - l = list() - draw_node(l, graph, root) - - graph = apply_styles(graph, lattice_styles) - graph.render(filename=output_filename+'.dot') - - add_anchor(output_filename) - run_dot(output_filename) - - -def draw_lattices(cfg_list, output_prefix='output'): - for i, cfg in enumerate(cfg_list): - draw_lattice(cfg, output_prefix + '_' + str(i)) - - -def draw_cfgs(cfg_list, output_prefix='output'): - for i, cfg in enumerate(cfg_list): - draw_cfg(cfg, output_prefix + '_' + str(i)) - - -parser = argparse.ArgumentParser() -parser.add_argument('-l', '--labels', nargs='+', - help='Set of labels in lattice.') -parser.add_argument('-n', '--name', help='Specify filename.', type=str) -if __name__ == '__main__': - args = parser.parse_args() - - draw_lattice_from_labels(args.labels, args.name) diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index b0574934..de148518 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -9,7 +9,7 @@ def __init__(self, cfg, analysis): """Fixed point analysis. Analysis must be a dataflow analysis containing a 'fixpointmethod' - method that analyses one CFG node.""" + method that analyses one CFG.""" self.analysis = analysis(cfg) self.cfg = cfg @@ -22,7 +22,7 @@ def fixpoint_runner(self): self.analysis.fixpointmethod(q[0]) # y = F_i(x_1, ..., x_n); y = constraint_table[q[0]] # y = q[0].new_constraint - if not self.analysis.equal(y, x_i): + if y != x_i: for node in self.analysis.dep(q[0]): # for (v in dep(v_i)) q.append(node) # q.append(v): constraint_table[q[0]] = y # q[0].old_constraint = q[0].new_constraint # x_i = y diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index c7e5119d..c2a49ef9 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -16,7 +16,13 @@ class FrameworkAdaptor(): entry points in a framework and then taints their arguments. """ - def __init__(self, cfg_list, project_modules, local_modules, is_route_function): + def __init__( + self, + cfg_list, + project_modules, + local_modules, + is_route_function + ): self.cfg_list = cfg_list self.project_modules = project_modules self.local_modules = local_modules diff --git a/pyt/github_search.py b/pyt/github_search.py index df0cb40c..0dc1e953 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -1,3 +1,4 @@ +import os import re import requests import time @@ -5,9 +6,19 @@ from datetime import date, datetime, timedelta from . import repo_runner +from .argument_helpers import VulnerabilityFiles +from .ast_helper import generate_ast +from .constraint_table import initialize_constraint_table +from .expr_visitor import make_cfg +from .fixed_point import analyse +from .formatters import json +from .project_handler import ( + get_directory_modules, + get_modules +) from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .repo_runner import add_repo_to_csv, NoEntryPathError -from .save import save_repo_scan +from .vulnerabilities import find_vulnerabilities DEFAULT_TIMEOUT_IN_SECONDS = 60 @@ -21,8 +32,10 @@ def set_github_api_token(): global GITHUB_OAUTH_TOKEN try: - GITHUB_OAUTH_TOKEN = open('github_access_token.pyt', - 'r').read().strip() + GITHUB_OAUTH_TOKEN = open( + 'github_access_token.pyt', + 'r' + ).read().strip() except FileNotFoundError: print('Insert your GitHub access token' ' in the github_access_token.pyt file in the pyt package' @@ -30,25 +43,26 @@ def set_github_api_token(): exit(0) -class Languages: - _prefix = 'language:' - python = _prefix + 'python' - javascript = _prefix + 'javascript' - # add others here - - class Query: - def __init__(self, base_url, search_string, - language=None, repo=None, time_interval=None, per_page=100): + def __init__( + self, + base_url, + search_string, + repo=None, + time_interval=None, + per_page=100 + ): repo = self._repo_parameter(repo) time_interval = self._time_interval_parameter(time_interval) search_string = self._search_parameter(search_string) per_page = self._per_page_parameter(per_page) - parameters = self._construct_parameters([search_string, - language, - repo, - time_interval, - per_page]) + parameters = self._construct_parameters([ + search_string, + 'language:python', + repo, + time_interval, + per_page + ]) self.query_string = self._construct_query(base_url, parameters) def _construct_query(self, base_url, parameters): @@ -106,10 +120,14 @@ def append(self, request_time): else: delta = request_time - self.counter[0] if delta.seconds < self.timeout_in_seconds: - print('Maximum requests "{}" reached' - ' timing out for {} seconds.' - .format(len(self.counter), - self.timeout_in_seconds - delta.seconds)) + print( + 'Maximum requests "{}" reached' + ' timing out for {} seconds.' + .format( + len(self.counter), + self.timeout_in_seconds - delta.seconds + ) + ) self.timeout(self.timeout_in_seconds - delta.seconds) self.counter.pop(0) # pop index 0 self.counter.append(datetime.now()) @@ -138,22 +156,22 @@ def _request(self, query_string): headers = {'Authorization': 'token ' + GITHUB_OAUTH_TOKEN} r = requests.get(query_string, headers=headers) - json = r.json() + response_body = r.json() if r.status_code != 200: print('Bad request:') print(r.status_code) - print(json) + print(response_body) Search.request_counter.timeout() self._request(query_string) return - self.total_count = json['total_count'] + self.total_count = response_body['total_count'] print('Number of results: {}.'.format(self.total_count)) - self.incomplete_results = json['incomplete_results'] + self.incomplete_results = response_body['incomplete_results'] if self.incomplete_results: raise IncompleteResultsError() - self.parse_results(json['items']) + self.parse_results(response_body['items']) @abstractmethod def parse_results(self, json_results): @@ -173,106 +191,103 @@ def parse_results(self, json_results): class File: - def __init__(self, json): - self.name = json['name'] - self.repo = Repo(json['repository']) + def __init__(self, item): + self.name = item['name'] + self.repo = Repo(item['repository']) class Repo: - def __init__(self, json): - self.url = json['html_url'] - self.name = json['full_name'] + def __init__(self, item): + self.url = item['html_url'] + self.name = item['full_name'] -def get_dates(start_date, end_date=date.today(), interval=7): +def get_dates( + start_date, + end_date=date.today() +): + interval = 7 delta = end_date - start_date - for i in range(delta.days // interval): - yield (start_date + timedelta(days=(i * interval) - interval), - start_date + timedelta(days=i * interval)) - else: - # Take care of the remainder of days - yield (start_date + timedelta(days=i * interval), - start_date + timedelta(days=i * interval + - interval + - delta.days % interval)) - - -def scan_github(search_string, start_date, analysis_type, analyse_repo_func, csv_path, ui_mode, other_args): - analyse_repo = analyse_repo_func - for d in get_dates(start_date, interval=7): - q = Query(SEARCH_REPO_URL, search_string, - language=Languages.python, - time_interval=str(d[0]) + ' .. ' + str(d[1]), - per_page=100) - s = SearchRepo(q) - for repo in s.results: - q = Query(SEARCH_CODE_URL, 'app = Flask(__name__)', - Languages.python, repo) - s = SearchCode(q) - if s.results: - r = repo_runner.Repo(repo.url) + for i in range((delta.days // interval) + 1): + yield ( + start_date + timedelta(days=i * interval), + start_date + timedelta(days=i * interval + interval) + ) + + +def analyse_repo( + args, + github_repo, + ui_mode +): + cfg_list = list() + directory = os.path.dirname(github_repo.path) + project_modules = get_modules(directory) + local_modules = get_directory_modules(directory) + tree = generate_ast(github_repo.path) + cfg = make_cfg( + tree, + project_modules, + local_modules, + github_repo.path + ) + cfg_list.append(cfg) + + initialize_constraint_table(cfg_list) + analyse( + cfg_list, + ReachingDefinitionsTaintAnalysis + ) + vulnerabilities = find_vulnerabilities( + cfg_list, + ui_mode, + VulnerabilityFiles( + args.blackbox_mapping_file, + args.trigger_word_file + ) + ) + return vulnerabilities + + +def scan_github( + search_string, + start_date, + csv_path, + ui_mode, + other_args +): + for range_start, range_end in get_dates(start_date): + query = Query( + SEARCH_REPO_URL, + search_string, + time_interval='{} .. {}'.format( + range_start, + range_end + ), + per_page=100 + ) + search_repos = SearchRepo(query) + for repo in search_repos.results: + query = Query( + SEARCH_CODE_URL, + 'app = Flask(__name__)', + repo + ) + search_code = SearchCode(query) + if search_code.results: + repo = repo_runner.Repo(repo.url) try: - r.clone() + repo.clone() except NoEntryPathError as err: - save_repo_scan(repo, r.path, vulnerabilities=None, error=err) + print('NoEntryPathError for {}'.format(repo.url)) continue - except: - save_repo_scan(repo, r.path, vulnerabilities=None, error='Other Error Unknown while cloning :-(') - continue - try: - vulnerabilities = analyse_repo(other_args, r, analysis_type, ui_mode) - if vulnerabilities: - save_repo_scan(repo, r.path, vulnerabilities) - add_repo_to_csv(csv_path, r) - else: - save_repo_scan(repo, r.path, vulnerabilities=None) - r.clean_up() - except SyntaxError as err: - save_repo_scan(repo, r.path, vulnerabilities=None, error=err) - except IOError as err: - save_repo_scan(repo, r.path, vulnerabilities=None, error=err) - except AttributeError as err: - save_repo_scan(repo, r.path, vulnerabilities=None, error=err) - except: - save_repo_scan(repo, r.path, vulnerabilities=None, error='Other Error Unknown :-(') - -if __name__ == '__main__': - for x in get_dates(date(2010, 1, 1), interval=93): - print(x) - exit() - scan_github('flask', ReachingDefinitionsTaintAnalysis) - exit() - q = Query(SEARCH_REPO_URL, 'flask') - s = SearchRepo(q) - for repo in s.results[:3]: - q = Query(SEARCH_CODE_URL, 'app = Flask(__name__)', Languages.python, repo) - s = SearchCode(q) - r = repo_runner.Repo(repo.url) - r.clone() - print(r.path) - r.clean_up() - print(repo.name) - print(len(s.results)) - print([f.name for f in s.results]) - exit() - - r = RequestCounter('test', timeout=2) - for x in range(15): - r.append(datetime.now()) - exit() - - dates = get_dates(date(2010, 1, 1)) - for date in dates: - q = Query(SEARCH_REPO_URL, 'flask', - time_interval=str(date) + ' .. ' + str(date)) - print(q.query_string) - exit() - s = SearchRepo(q) - print(s.total_count) - print(s.incomplete_results) - print([r.URL for r in s.results]) - q = Query(SEARCH_CODE_URL, 'import flask', Languages.python, s.results[0]) - s = SearchCode(q) - #print(s.total_count) - #print(s.incomplete_results) - #print([f.name for f in s.results]) + vulnerabilities = analyse_repo( + other_args, + repo, + ui_mode + ) + with open(repo.path + '.pyt', 'a') as fd: + json.report(vulnerabilities, fd) + if vulnerabilities: + add_repo_to_csv(csv_path, repo) + repo.clean_up() diff --git a/pyt/lattice.py b/pyt/lattice.py index 125a8c2a..f4dd531f 100644 --- a/pyt/lattice.py +++ b/pyt/lattice.py @@ -1,11 +1,21 @@ from .constraint_table import constraint_table +from .node_types import AssignmentNode + + +def get_lattice_elements(cfg_nodes): + """Returns all assignment nodes as they are the only lattice elements + in the reaching definitions analysis. + """ + for node in cfg_nodes: + if isinstance(node, AssignmentNode): + yield node class Lattice: - def __init__(self, cfg_nodes, analysis_type): + def __init__(self, cfg_nodes): self.el2bv = dict() # Element to bitvector dictionary self.bv2el = list() # Bitvector to element list - for i, e in enumerate(analysis_type.get_lattice_elements(cfg_nodes)): + for i, e in enumerate(get_lattice_elements(cfg_nodes)): # Give each element a unique shift of 1 self.el2bv[e] = 0b1 << i self.bv2el.insert(0, e) @@ -37,15 +47,3 @@ def in_constraint(self, node1, node2): return False return constraint & value != 0 - - -def print_lattice(cfg_list, analysis_type): - nodes = list() - for cfg in cfg_list: - nodes.extend(cfg.nodes) - l = Lattice(nodes, analysis_type) - - print('Lattice:') - for k, v in l.el2bv.items(): - print(str(k) + ': ' + str(v)) - return l diff --git a/pyt/liveness.py b/pyt/liveness.py deleted file mode 100644 index 38935b94..00000000 --- a/pyt/liveness.py +++ /dev/null @@ -1,134 +0,0 @@ -import ast - -from .analysis_base import AnalysisBase -from .ast_helper import get_call_names_as_string -from .constraint_table import ( - constraint_join, - constraint_table -) -from .lattice import Lattice -from .node_types import ( - AssignmentNode, - BBorBInode, - EntryOrExitNode -) -from .vars_visitor import VarsVisitor - - -class LivenessAnalysis(AnalysisBase): - """Reaching definitions analysis rules implemented.""" - - def __init__(self, cfg): - super().__init__(cfg) - - def join(self, cfg_node): - """Joins all constraints of the ingoing nodes and returns them. - This represents the JOIN auxiliary definition from Schwartzbach.""" - return constraint_join(cfg_node.outgoing) - - def is_output(self, cfg_node): - if isinstance(cfg_node.ast_node, ast.Call): - call_name = get_call_names_as_string(cfg_node.ast_node.func) - if 'print' in call_name: - return True - return False - - def is_condition(self, cfg_node): - if isinstance(cfg_node.ast_node, (ast.If, ast.While)): - return True - elif self.is_output(cfg_node): - return True - return False - - def remove_id_assignment(self, JOIN, cfg_node): - lvars = list() - - if isinstance(cfg_node, BBorBInode): - lvars.append(cfg_node.left_hand_side) - else: - try: - for expr in cfg_node.ast_node.targets: - vv = VarsVisitor() - vv.visit(expr) - lvars.extend(vv.result) - except AttributeError: # If it is AugAssign - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.target) - lvars.extend(vv.result) - for var in lvars: - if var in self.lattice.get_elements(JOIN): - # Remove var from JOIN - JOIN = JOIN ^ self.lattice.el2bv[var] - return JOIN - - def add_vars_assignment(self, JOIN, cfg_node): - rvars = list() - if isinstance(cfg_node, BBorBInode): - # A conscience decision was made not to include e.g. ~call_N's in RHS vars - rvars.extend(cfg_node.right_hand_side_variables) - else: - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.value) - rvars.extend(vv.result) - for var in rvars: - # Add var to JOIN - JOIN = JOIN | self.lattice.el2bv[var] - return JOIN - - def add_vars_conditional(self, JOIN, cfg_node): - varse = None - if isinstance(cfg_node.ast_node, ast.While): - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.test) - varse = vv.result - elif self.is_output(cfg_node): - vv = VarsVisitor() - vv.visit(cfg_node.ast_node) - varse = vv.result - elif isinstance(cfg_node.ast_node, ast.If): - vv = VarsVisitor() - vv.visit(cfg_node.ast_node.test) - varse = vv.result - - for var in varse: - JOIN = JOIN | self.lattice.el2bv[var] - - return JOIN - - def fixpointmethod(self, cfg_node): - if isinstance(cfg_node, EntryOrExitNode) and 'Exit' in cfg_node.label: - constraint_table[cfg_node] = 0 - elif isinstance(cfg_node, AssignmentNode): - JOIN = self.join(cfg_node) - JOIN = self.remove_id_assignment(JOIN, cfg_node) - JOIN = self.add_vars_assignment(JOIN, cfg_node) - constraint_table[cfg_node] = JOIN - elif self.is_condition(cfg_node): - JOIN = self.join(cfg_node) - JOIN = self.add_vars_conditional(JOIN, cfg_node) - constraint_table[cfg_node] = JOIN - else: - constraint_table[cfg_node] = self.join(cfg_node) - - def dep(self, q_1): - """Represents the dep mapping from Schwartzbach.""" - for node in q_1.outgoing: - yield node - - def get_lattice_elements(cfg_nodes): - """Returns all variables as they are the only lattice elements - in the liveness analysis. - This is a static method which is overwritten from the base class.""" - lattice_elements = set() # set() to avoid duplicates - for node in (node for node in cfg_nodes if node.ast_node): - vv = VarsVisitor() - vv.visit(node.ast_node) - for var in vv.result: - lattice_elements.add(var) - return lattice_elements - - def equal(self, value, other): - return value == other - - def build_lattice(self, cfg): - self.lattice = Lattice(cfg.nodes, LivenessAnalysis) diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py index 3bf5d075..299339d2 100644 --- a/pyt/reaching_definitions.py +++ b/pyt/reaching_definitions.py @@ -7,6 +7,9 @@ class ReachingDefinitionsAnalysis(ReachingDefinitionsAnalysisBase): """Reaching definitions analysis rules implemented.""" def fixpointmethod(self, cfg_node): + """Regular reaching definitions. + Used in definition_chains.py + """ JOIN = self.join(cfg_node) # Assignment check if isinstance(cfg_node, AssignmentNode): diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py index 5fecaa6a..f2dec1dd 100644 --- a/pyt/reaching_definitions_base.py +++ b/pyt/reaching_definitions_base.py @@ -1,14 +1,13 @@ -from .analysis_base import AnalysisBase from .constraint_table import constraint_join from .lattice import Lattice -from .node_types import AssignmentNode -class ReachingDefinitionsAnalysisBase(AnalysisBase): +class ReachingDefinitionsAnalysisBase(): """Reaching definitions analysis rules implemented.""" def __init__(self, cfg): - super().__init__(cfg) + self.cfg = cfg + self.lattice = Lattice(cfg.nodes) def join(self, cfg_node): """Joins all constraints of the ingoing nodes and returns them. @@ -24,24 +23,7 @@ def arrow(self, JOIN, _id): r = r ^ self.lattice.el2bv[node] return r - def fixpointmethod(self, cfg_node): - raise NotImplementedError() - def dep(self, q_1): """Represents the dep mapping from Schwartzbach.""" for node in q_1.outgoing: yield node - - def get_lattice_elements(cfg_nodes): - """Returns all assignment nodes as they are the only lattice elements - in the reaching definitions analysis. - This is a static method which is overwritten from the base class.""" - for node in cfg_nodes: - if isinstance(node, AssignmentNode): - yield node - - def equal(self, value, other): - return value == other - - def build_lattice(self, cfg): - self.lattice = Lattice(cfg.nodes, ReachingDefinitionsAnalysisBase) diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index 3ca72acc..b2c2e1d7 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -4,9 +4,11 @@ class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): - """Reaching definitions analysis rules implemented.""" def fixpointmethod(self, cfg_node): + """The most important part of PyT, where we perform + the variant of reaching definitions to find where sources reach. + """ JOIN = self.join(cfg_node) # Assignment check if isinstance(cfg_node, AssignmentNode): diff --git a/pyt/repo_runner.py b/pyt/repo_runner.py index cfb63290..7d6acba9 100644 --- a/pyt/repo_runner.py +++ b/pyt/repo_runner.py @@ -1,4 +1,4 @@ -"""This modules runs PyT on a CSV file of git repos.""" +"""Runs PyT on a CSV file of git repos.""" import os import shutil @@ -14,24 +14,25 @@ class NoEntryPathError(Exception): class Repo: """Holder for a repo with git URL and - a path to where the analysis should start""" + a path to where the analysis should start.""" - def __init__(self, URL, path=None): + def __init__( + self, + URL, + path=None + ): self.URL = URL.strip() - if path: - self.path = path.strip() - else: - self.path = None self.directory = None + self.path = path.strip() if path else None def clone(self): - """Clone repo and update path to match the current one""" + """Clone repo and update path to match the current one.""" - r = self.URL.split('/')[-1].split('.') - if len(r) > 1: - self.directory = '.'.join(r[:-1]) + repo = self.URL.split('/')[-1].split('.') + if len(repo) > 1: + self.directory = '.'.join(repo[:-1]) else: - self.directory = r[0] + self.directory = repo[0] if self.directory not in os.listdir(): git.Git().clone(self.URL) @@ -40,9 +41,7 @@ def clone(self): self._find_entry_path() elif self.path[0] == '/': self.path = self.path[1:] - self.path = os.path.join(self.directory, self.path) - else: - self.path = os.path.join(self.directory, self.path) + self.path = os.path.join(self.directory, self.path) def _find_entry_path(self): for root, dirs, files in os.walk(self.directory): @@ -52,8 +51,10 @@ def _find_entry_path(self): if 'app = Flask(__name__)' in fd.read(): self.path = os.path.join(root, f) return - raise NoEntryPathError('No entry path found in repo {}.' - .format(self.URL)) + raise NoEntryPathError( + 'No entry path found in repo {}.' + .format(self.URL) + ) def clean_up(self): """Deletes the repo""" @@ -70,21 +71,22 @@ def get_repos(csv_path): return repos -def add_repo_to_file(path, repo): +def add_repo_to_csv( + repo, + csv_path=DEFAULT_CSV_PATH +): try: - with open(path, 'a') as fd: - fd.write('{}{}, {}' - .format(os.linesep, repo.URL, repo.path)) + with open(csv_path, 'a') as fd: + fd.write( + '{}{}, {}'.format( + os.linesep, + repo.URL, + repo.path + ) + ) except FileNotFoundError: - print('-csv handle not used and fallback path not found: {}' + print('-csv file not used and fallback path not found: {}' .format(DEFAULT_CSV_PATH)) - print('You need to specify the csv_path' - ' by using the "-csv" handle.') + print('To specify the csv_path ' + 'use the "-csv" option.') exit(1) - - -def add_repo_to_csv(csv_path, repo): - if csv_path is None: - add_repo_to_file(DEFAULT_CSV_PATH, repo) - else: - add_repo_to_file(csv_path, repo) diff --git a/pyt/save.py b/pyt/save.py deleted file mode 100644 index 5f0e3759..00000000 --- a/pyt/save.py +++ /dev/null @@ -1,162 +0,0 @@ -import os -from datetime import datetime - -from .definition_chains import ( - build_def_use_chain, - build_use_def_chain -) -from .formatters import text -from .lattice import Lattice -from .node_types import Node - - -database_file_name = 'db.sql' -nodes_table_name = 'nodes' -vulnerabilities_table_name = 'vulnerabilities' - -def create_nodes_table(): - with open(database_file_name, 'a') as fd: - fd.write('DROP TABLE IF EXISTS ' + nodes_table_name + '\n') - fd.write('CREATE TABLE ' + nodes_table_name + '(id int,label varchar(255),line_number int, path varchar(255));') - -def create_vulnerabilities_table(): - with open(database_file_name, 'a') as fd: - fd.write('DROP TABLE IF EXISTS ' + vulnerabilities_table_name + '\n') - fd.write('CREATE TABLE ' + vulnerabilities_table_name + '(id int, source varchar(255), source_word varchar(255), sink varchar(255), sink_word varchar(255));') - -def quote(item): - if isinstance(item, Node): - item = item.label - return "'" + item.replace("'", "''") + "'" - -def insert_vulnerability(vulnerability): - with open(database_file_name, 'a') as fd: - fd.write('\nINSERT INTO ' + vulnerabilities_table_name + '\n') - fd.write('VALUES (') - fd.write(quote(vulnerability.__dict__['source']) + ',') - fd.write(quote(vulnerability.__dict__['source_trigger_word']) + ',') - fd.write(quote(vulnerability.__dict__['sink']) + ',') - fd.write(quote(vulnerability.__dict__['sink_trigger_word'])) - fd.write(');') - -def insert_node(node): - with open(database_file_name, 'a') as fd: - fd.write('\nINSERT INTO ' + nodes_table_name + '\n') - fd.write('VALUES (') - fd.write("'" + node.__dict__['label'].replace("'", "''") + "'" + ',') - line_number = node.__dict__['line_number'] - if line_number: - fd.write(str(line_number) + ',') - else: - fd.write('NULL,') - path = node.__dict__['path'] - if path: - fd.write("'" + path.replace("'", "''") + "'") - else: - fd.write('NULL') - fd.write(');') - -def create_database(cfg_list, vulnerabilities): - create_nodes_table() - for cfg in cfg_list: - for node in cfg.nodes: - insert_node(node) - create_vulnerabilities_table() - for vulnerability in vulnerabilities: - insert_vulnerability(vulnerability) - - -class Output(): - filename_prefix = None - - def __init__(self, title): - if Output.filename_prefix: - self.title = Output.filename_prefix + '_' + title - else: - self.title = title - - def __enter__(self): - self.fd = open(self.title, 'w') - return self.fd - - def __exit__(self, type, value, traceback): - self.fd.close() - - -def def_use_chain_to_file(cfg_list): - with Output('def-use_chain.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### Def-use chain for CFG {} #####{}' - .format(i, os.linesep)) - def_use = build_def_use_chain(cfg.nodes) - for k, v in def_use.items(): - fd.write('Def: {} -> Use: [{}]{}' - .format(k.label, - ', '.join([n.label for n in v]), - os.linesep)) - - -def use_def_chain_to_file(cfg_list): - with Output('use-def_chain.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### Use-def chain for CFG {} #####{}' - .format(i, os.linesep)) - def_use = build_use_def_chain(cfg.nodes) - for k, v in def_use.items(): - fd.write('Use: {} -> Def: [{}]{}' - .format(k.label, - ', '.join([n[1].label for n in v]), - os.linesep)) - - -def cfg_to_file(cfg_list): - with Output('control_flow_graph.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### CFG {} #####{}'.format(i, os.linesep)) - for i, node in enumerate(cfg.nodes): - fd.write('Node {}: {}{}'.format(i, node.label, os.linesep)) - - -def verbose_cfg_to_file(cfg_list): - with Output('verbose_control_flow_graph.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### CFG {} #####{}'.format(i, os.linesep)) - for i, node in enumerate(cfg.nodes): - fd.write('Node {}: {}{}'.format(i, repr(node), os.linesep)) - - -def lattice_to_file(cfg_list, analysis_type): - with Output('lattice.pyt') as fd: - for i, cfg in enumerate(cfg_list): - fd.write('##### Lattice for CFG {} #####{}'.format(i, os.linesep)) - l = Lattice(cfg.nodes, analysis_type) - - fd.write('# Elements to bitvector #{}'.format(os.linesep)) - for k, v in l.el2bv.items(): - fd.write('{} -> {}{}'.format(str(k), bin(v), os.linesep)) - - fd.write('# Bitvector to elements #{}'.format(os.linesep)) - for k, v in l.el2bv.items(): - fd.write('{} -> {}{}'.format(bin(v), str(k), os.linesep)) - - -def vulnerabilities_to_file(vulnerabilities): - with Output('vulnerabilities.pyt') as fd: - text.report(vulnerabilities, fd) - - -def save_repo_scan(repo, entry_path, vulnerabilities, error=None): - with open('scan.pyt', 'a') as fd: - fd.write('{}{}'.format(repo.name, os.linesep)) - fd.write('{}{}'.format(repo.url, os.linesep)) - fd.write('Entry file: {}{}'.format(entry_path, os.linesep)) - fd.write('Scanned: {}{}'.format(datetime.now(), os.linesep)) - if vulnerabilities: - text.report(vulnerabilities, fd) - else: - fd.write('No vulnerabilities found.{}'.format(os.linesep)) - if error: - fd.write('An Error occurred while scanning the repo: {}' - .format(str(error))) - fd.write(os.linesep) - fd.write(os.linesep) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index ba7debff..ca4c1ca6 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -501,7 +501,6 @@ def find_vulnerabilities_in_cfg( def find_vulnerabilities( cfg_list, - analysis_type, ui_mode, vulnerability_files ): @@ -509,7 +508,6 @@ def find_vulnerabilities( Args: cfg_list(list[CFG]): the list of CFGs to scan. - analysis_type(AnalysisBase): analysis object used to create lattice. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files @@ -525,7 +523,7 @@ def find_vulnerabilities( find_vulnerabilities_in_cfg( cfg, definitions, - Lattice(cfg.nodes, analysis_type), + Lattice(cfg.nodes), ui_mode, blackbox_mapping, vulnerabilities diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index cdd33182..8e8bb37d 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -1,4 +1,3 @@ -import unittest from collections import namedtuple from .base_test_case import BaseTestCase @@ -15,6 +14,7 @@ class AnalysisBaseTestCase(BaseTestCase): 'element' ) ) + def setUp(self): self.cfg = None @@ -29,21 +29,32 @@ def assertInCfg(self, connections, lattice): lattice(Lattice): The lattice we're analysing. """ for connection in connections: - self.assertEqual(lattice.in_constraint(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]]), True, str(connection) + " expected to be connected") + self.assertEqual(lattice.in_constraint( + self.cfg.nodes[connection[0]], + self.cfg.nodes[connection[1]]), + True, + str(connection) + " expected to be connected") nodes = len(self.cfg.nodes) for element in range(nodes): for sets in range(nodes): if (element, sets) not in connections: - self.assertEqual(lattice.in_constraint(self.cfg.nodes[element], self.cfg.nodes[sets]), False, "(%s,%s)" % (self.cfg.nodes[element], self.cfg.nodes[sets]) + " expected to be disconnected") + self.assertEqual( + lattice.in_constraint( + self.cfg.nodes[element], + self.cfg.nodes[sets] + ), + False, + "(%s,%s)" % (self.cfg.nodes[element], self.cfg.nodes[sets]) + " expected to be disconnected" + ) def constraints(self, list_of_constraints, node_number): for c in list_of_constraints: - yield (c,node_number) + yield (c, node_number) def run_analysis(self, path, analysis_type): self.cfg_create_from_file(path) initialize_constraint_table([self.cfg]) self.analysis = FixedPointAnalysis(self.cfg, analysis_type) self.analysis.fixpoint_runner() - return Lattice(self.cfg.nodes, analysis_type) + return Lattice(self.cfg.nodes) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index 9ee97067..6dbd79f2 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -6,6 +6,7 @@ from .base_test_case import BaseTestCase from pyt.__main__ import parse_args + @contextmanager def capture_sys_output(): capture_out, capture_err = StringIO(), StringIO() @@ -16,6 +17,7 @@ def capture_sys_output(): finally: sys.stdout, sys.stderr = current_out, current_err + class CommandLineTest(BaseTestCase): def test_no_args(self): with self.assertRaises(SystemExit): @@ -23,12 +25,10 @@ def test_no_args(self): parse_args([]) EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] - [-d] [-o OUTPUT_FILENAME] [-csv CSV_PATH] - [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-py2] - [-l LOG_LEVEL] [-a ADAPTOR] [-db] - [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-j] [-ppm] - [-b BASELINE] [-p | -vp | -trim | -i] [-li | -re | -rt] - {save,github_search} ...\n""" + \ + [-csv CSV_PATH] [-t TRIGGER_WORD_FILE] + [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] + [-a ADAPTOR] [-j] [-b BASELINE] [-trim | -i] + {github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" self.assertEqual(stderr.getvalue(), EXPECTED) diff --git a/tests/github_search_test.py b/tests/github_search_test.py index f5797f39..be1539b1 100644 --- a/tests/github_search_test.py +++ b/tests/github_search_test.py @@ -5,7 +5,17 @@ class GetDatesTest(unittest.TestCase): - def test_range_shorter_than_interval(self): - date_range = get_dates(date(2016,12,12), date(2016,12,13), 7) - - + def test_get_dates(self): + date_ranges = get_dates( + date(2018, 1, 1), + date(2018, 1, 31) + ) + EXPECTED_RANGE = ( + ('2018-01-01', '2018-01-08'), + ('2018-01-08', '2018-01-15'), + ('2018-01-15', '2018-01-22'), + ('2018-01-22', '2018-01-29') + ) + for date_range, expected_range in zip(date_ranges, EXPECTED_RANGE): + for date_, expected_date in zip(date_range, expected_range): + assert str(date_) == expected_date diff --git a/tests/lattice_test.py b/tests/lattice_test.py deleted file mode 100644 index 5164c8ac..00000000 --- a/tests/lattice_test.py +++ /dev/null @@ -1,143 +0,0 @@ -from .base_test_case import BaseTestCase -from pyt.constraint_table import constraint_table -from pyt.lattice import Lattice -from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis - - -class LatticeTest(BaseTestCase): - - class AnalysisType: - @staticmethod - def get_lattice_elements(cfg_nodes): - for node in cfg_nodes: - if node.lattice_element == True: - yield node - def equality(self, value): - return self.value == value - - class Node: - def __init__(self, value, lattice_element): - self.value = value - self.lattice_element = lattice_element - def __str__(self): - return str(self.value) - - def test_generate_integer_elements(self): - one = self.Node(1, True) - two = self.Node(2, True) - three = self.Node(3, True) - a = self.Node('a', False) - b = self.Node('b', False) - c = self.Node('c', False) - cfg_nodes = [one, two, three, a, b, c] - lattice = Lattice(cfg_nodes, self.AnalysisType) - - self.assertEqual(lattice.el2bv[one], 0b1) - self.assertEqual(lattice.el2bv[two], 0b10) - self.assertEqual(lattice.el2bv[three], 0b100) - - self.assertEqual(lattice.bv2el[0], three) - self.assertEqual(lattice.bv2el[1], two) - self.assertEqual(lattice.bv2el[2], one) - - def test_join(self): - # join not used at the moment - return - - a = self.Node('x = 1', True) - b = self.Node('print(x)', False) - c = self.Node('x = 3', True) - d = self.Node('y = x', True) - - lattice = Lattice([a, c, d], self.AnalysisType) - - # Constraint results after fixpoint: - lattice.table[a] = 0b0001 - lattice.table[b] = 0b0001 - lattice.table[c] = 0b0010 - lattice.table[d] = 0b1010 - - r = lattice.join([a,c], [c]) - self.assertEqual(r, 0b11) - r = lattice.join([a, c], [d, c]) - self.assertEqual(r, 0b1011) - r = lattice.join([a], [c]) - self.assertEqual(r, 0b11) - r = lattice.join([c], [d]) - self.assertEqual(r, 0b1010) - r = lattice.join([], [a]) - self.assertEqual(r, 0b1) - r = lattice.join([a,c,d], [a,c,d]) - self.assertEqual(r, 0b1011) - r = lattice.join([d,c], []) - self.assertEqual(r, 0b1010) - - def test_meet(self): - # meet not used on lattice atm - return - - a = self.Node('x = 1', True) - b = self.Node('print(x)', False) - c = self.Node('x = 3', True) - d = self.Node('y = x', True) - - lattice = Lattice([a, c, d], self.AnalysisType) - - # Constraint results after fixpoint: - lattice.table[a] = 0b0001 - lattice.table[b] = 0b0001 - lattice.table[c] = 0b0010 - lattice.table[d] = 0b1010 - - r = lattice.meet([a,c], [c,d]) - self.assertEqual(r, 0b10) - r = lattice.meet([a], [d]) - self.assertEqual(r, 0b0) - r = lattice.meet([a,c,d], [a,c]) - self.assertEqual(r, 0b011) - r = lattice.meet([c,d], [a,d]) - self.assertEqual(r, 0b1010) - r = lattice.meet([], []) - self.assertEqual(r, 0b0) - r = lattice.meet([a], []) - self.assertEqual(r, 0b0) - - def test_in_constraint(self): - a = self.Node('x = 1', True) - b = self.Node('print(x)', False) - c = self.Node('x = 3', True) - d = self.Node('y = x', True) - - lattice = Lattice([a, c, d], self.AnalysisType) - - constraint_table[a] = 0b001 - constraint_table[b] = 0b001 - constraint_table[c] = 0b010 - constraint_table[d] = 0b110 - - self.assertEqual(lattice.in_constraint(a, b), True) - self.assertEqual(lattice.in_constraint(a, a), True) - self.assertEqual(lattice.in_constraint(a, d), False) - self.assertEqual(lattice.in_constraint(a, c), False) - self.assertEqual(lattice.in_constraint(c, d), True) - self.assertEqual(lattice.in_constraint(d, d), True) - self.assertEqual(lattice.in_constraint(c, c), True) - self.assertEqual(lattice.in_constraint(c, a), False) - self.assertEqual(lattice.in_constraint(c, b), False) - - def test_get_elements(self): - a = self.Node('x = 1', True) - b = self.Node('print(x)', False) - c = self.Node('x = 3', True) - d = self.Node('y = x', True) - - lattice = Lattice([a, c, d], self.AnalysisType) - - self.assertEqual(set(lattice.get_elements(0b111)), {a,c,d}) - self.assertEqual(set(lattice.get_elements(0b0)), set()) - self.assertEqual(set(lattice.get_elements(0b1)), {a}) - self.assertEqual(set(lattice.get_elements(0b10)), {c}) - self.assertEqual(set(lattice.get_elements(0b100)), {d}) - self.assertEqual(set(lattice.get_elements(0b11)), {a,c}) - self.assertEqual(set(lattice.get_elements(0b101)), {a,d}) - self.assertEqual(set(lattice.get_elements(0b110)), {c,d}) diff --git a/tests/liveness_test.py b/tests/liveness_test.py index da6f08a0..e69de29b 100644 --- a/tests/liveness_test.py +++ b/tests/liveness_test.py @@ -1,33 +0,0 @@ -from .analysis_base_test_case import AnalysisBaseTestCase -from pyt.constraint_table import constraint_table -from pyt.liveness import LivenessAnalysis - - -class LivenessTest(AnalysisBaseTestCase): - def test_example(self): - lattice = self.run_analysis('examples/example_inputs/example.py', LivenessAnalysis) - - x = 0b1 # 1 - y = 0b10 # 2 - z = 0b100 # 4 - - lattice.el2bv['x'] = x - lattice.el2bv['y'] = y - lattice.el2bv['z'] = z - - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[0]]), []) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[1]]), []) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[2]]), []) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[3]]), ['x']) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[4]]), ['x']) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[5]]), ['x']) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[6]]), ['x']) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[7]])), set(['x','y'])) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[8]])), set(['x','y'])) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[9]]), ['x']) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[10]])), set(['x','z'])) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[11]])), set(['x','z'])) - self.assertEqual(set(lattice.get_elements(constraint_table[self.cfg.nodes[12]])), set(['x','z'])) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[13]]), ['x']) - self.assertEqual(lattice.get_elements(constraint_table[self.cfg.nodes[14]]), []) - self.assertEqual(len(lattice.el2bv), 3) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 7492aee2..4bbcde74 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -35,7 +35,6 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, - ReachingDefinitionsTaintAnalysis, UImode.NORMAL, VulnerabilityFiles( default_blackbox_mapping_file, @@ -151,9 +150,10 @@ def test_sink_with_result_of_blackbox_nested(self): ~call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) - or - self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertTrue( + self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION) + ) def test_sink_with_result_of_user_defined_nested(self): vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_user_defined_nested.py') @@ -233,9 +233,10 @@ def test_sink_with_blackbox_inner(self): ~call_1 = ret_subprocess.call(~call_2, shell=True) This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) - or - self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertTrue( + self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION) + ) def test_sink_with_user_defined_inner(self): vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_user_defined_inner.py') diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index f3d77279..d85acdad 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -129,11 +129,13 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + analyse( + cfg_list, + analysis_type=ReachingDefinitionsTaintAnalysis + ) return vulnerabilities.find_vulnerabilities( cfg_list, - ReachingDefinitionsTaintAnalysis, UImode.NORMAL, VulnerabilityFiles( default_blackbox_mapping_file, @@ -518,7 +520,10 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_django_view_function) initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + analyse( + cfg_list, + analysis_type=ReachingDefinitionsTaintAnalysis + ) trigger_word_file = os.path.join( 'pyt', @@ -528,7 +533,6 @@ def run_analysis(self, path): return vulnerabilities.find_vulnerabilities( cfg_list, - ReachingDefinitionsTaintAnalysis, UImode.NORMAL, VulnerabilityFiles( default_blackbox_mapping_file, @@ -566,7 +570,10 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_function) initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + analyse( + cfg_list, + analysis_type=ReachingDefinitionsTaintAnalysis + ) trigger_word_file = os.path.join( 'pyt', @@ -576,7 +583,6 @@ def run_analysis(self, path): return vulnerabilities.find_vulnerabilities( cfg_list, - ReachingDefinitionsTaintAnalysis, UImode.NORMAL, VulnerabilityFiles( default_blackbox_mapping_file, diff --git a/tox.ini b/tox.ini index 70393146..933a1460 100644 --- a/tox.ini +++ b/tox.ini @@ -7,5 +7,5 @@ deps = -rrequirements-dev.txt commands = coverage erase coverage run tests - coverage report --show-missing --fail-under 89 + coverage report --show-missing --fail-under 88 pre-commit run From bbb6c2e1bc1ce7b211138edf434efc1fb0cc15db Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 22:45:45 -0700 Subject: [PATCH 268/541] made github_search the only thing that imports repo_runner --- pyt/__main__.py | 31 ++++++--------------- pyt/github_search.py | 65 ++++++++++++++++++++++++++++++++------------ 2 files changed, 56 insertions(+), 40 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 0d23bebc..fac79881 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -29,7 +29,7 @@ is_function_without_leading_ ) from .github_search import ( - analyse_repo, + analyse_repos, scan_github, set_github_api_token ) @@ -38,7 +38,6 @@ get_modules ) from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from .repo_runner import get_repos from .vulnerabilities import find_vulnerabilities @@ -161,30 +160,16 @@ def main(command_line_args=sys.argv[1:]): cfg_list = list() if args.git_repos: - repos = get_repos(args.git_repos) - for repo in repos: - repo.clone() - vulnerabilities = analyse_repo( - args, - repo, - ui_mode - ) - if args.json: - json.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) - if not vulnerabilities: - repo.clean_up() + analyse_repos( + args, + ui_mode + ) exit() - - if args.which == 'search': + elif args.which == 'search': set_github_api_token() scan_github( - args.search_string, - args.start_date, - args.csv_path, - ui_mode, - args + args, + ui_mode ) exit() diff --git a/pyt/github_search.py b/pyt/github_search.py index 0dc1e953..e6945b28 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -1,23 +1,37 @@ import os import re import requests +import sys import time -from abc import ABCMeta, abstractmethod -from datetime import date, datetime, timedelta - +from abc import ( + ABCMeta, + abstractmethod +) +from datetime import ( + date, + datetime, + timedelta +) from . import repo_runner from .argument_helpers import VulnerabilityFiles from .ast_helper import generate_ast from .constraint_table import initialize_constraint_table from .expr_visitor import make_cfg from .fixed_point import analyse -from .formatters import json +from .formatters import ( + json, + text +) from .project_handler import ( get_directory_modules, get_modules ) from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from .repo_runner import add_repo_to_csv, NoEntryPathError +from .repo_runner import ( + add_repo_to_csv, + get_repos, + NoEntryPathError +) from .vulnerabilities import find_vulnerabilities @@ -220,7 +234,6 @@ def analyse_repo( github_repo, ui_mode ): - cfg_list = list() directory = os.path.dirname(github_repo.path) project_modules = get_modules(directory) local_modules = get_directory_modules(directory) @@ -231,7 +244,7 @@ def analyse_repo( local_modules, github_repo.path ) - cfg_list.append(cfg) + cfg_list = list(cfg) initialize_constraint_table(cfg_list) analyse( @@ -250,16 +263,13 @@ def analyse_repo( def scan_github( - search_string, - start_date, - csv_path, - ui_mode, - other_args + cmd_line_args, + ui_mode ): - for range_start, range_end in get_dates(start_date): + for range_start, range_end in get_dates(cmd_line_args.start_date): query = Query( SEARCH_REPO_URL, - search_string, + cmd_line_args.search_string, time_interval='{} .. {}'.format( range_start, range_end @@ -282,12 +292,33 @@ def scan_github( print('NoEntryPathError for {}'.format(repo.url)) continue vulnerabilities = analyse_repo( - other_args, + cmd_line_args, repo, ui_mode ) with open(repo.path + '.pyt', 'a') as fd: - json.report(vulnerabilities, fd) + if cmd_line_args.json: + json.report(vulnerabilities, fd) + else: + text.report(vulnerabilities, fd) + if vulnerabilities: - add_repo_to_csv(csv_path, repo) + add_repo_to_csv(cmd_line_args.csv_path, repo) repo.clean_up() + + +def analyse_repos(cmd_line_args, ui_mode): + repos = get_repos(cmd_line_args.git_repos) + for repo in repos: + repo.clone() + vulnerabilities = analyse_repo( + cmd_line_args, + repo, + ui_mode + ) + if cmd_line_args.json: + json.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) + if not vulnerabilities: + repo.clean_up() From cc3e10e12f2763b041d87792169c5d687458c34b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 23:04:33 -0700 Subject: [PATCH 269/541] Trim reaching definitions, and definition chains --- .coveragerc | 1 - pyt/definition_chains.py | 64 ++++++------------------------ pyt/reaching_definitions.py | 23 ----------- pyt/reaching_definitions_base.py | 29 -------------- pyt/reaching_definitions_taint.py | 31 +++++++++++++-- pyt/vulnerabilities.py | 5 ++- tests/reaching_definitions_test.py | 50 ----------------------- 7 files changed, 44 insertions(+), 159 deletions(-) delete mode 100644 pyt/reaching_definitions.py delete mode 100644 pyt/reaching_definitions_base.py delete mode 100644 tests/reaching_definitions_test.py diff --git a/.coveragerc b/.coveragerc index 37429140..48d1154f 100644 --- a/.coveragerc +++ b/.coveragerc @@ -12,7 +12,6 @@ exclude_lines = source = ./pyt omit = pyt/__main__.py - pyt/definition_chains.py pyt/formatters/json.py pyt/formatters/text.py pyt/github_search.py diff --git a/pyt/definition_chains.py b/pyt/definition_chains.py index ad63871b..b69da7c3 100644 --- a/pyt/definition_chains.py +++ b/pyt/definition_chains.py @@ -1,73 +1,33 @@ -import ast +from collections import defaultdict from .constraint_table import constraint_table -from .lattice import Lattice from .node_types import AssignmentNode -from .vars_visitor import VarsVisitor -def get_vars(node): - vv = VarsVisitor() - if isinstance(node.ast_node, (ast.If, ast.While)): - vv.visit(node.ast_node.test) - elif isinstance(node.ast_node, (ast.ClassDef, ast.FunctionDef)): - return set() - else: - try: - vv.visit(node.ast_node) - except AttributeError: # If no ast_node - vv.result = list() - - vv.result = set(vv.result) - - # Filter out lvars: - for var in vv.result: - try: - if var in node.right_hand_side_variables: - yield var - except AttributeError: - yield var - - -def get_constraint_nodes(node, lattice): +def get_constraint_nodes( + node, + lattice +): for n in lattice.get_elements(constraint_table[node]): if n is not node: yield n -def build_use_def_chain(cfg_nodes): - use_def = dict() - lattice = Lattice(cfg_nodes) - - for node in cfg_nodes: - definitions = list() - for constraint_node in get_constraint_nodes(node, lattice): - for var in get_vars(node): - if var in constraint_node.left_hand_side: - definitions.append((var, constraint_node)) - use_def[node] = definitions - - return use_def - - -def build_def_use_chain(cfg_nodes): - def_use = dict() - lattice = Lattice(cfg_nodes) - +def build_def_use_chain( + cfg_nodes, + lattice +): + def_use = defaultdict(list) # For every node for node in cfg_nodes: # That's a definition if isinstance(node, AssignmentNode): - # Make an empty list for it in def_use dict - def_use[node] = list() - - # Get its uses + # Get the uses for variable in node.right_hand_side_variables: # Loop through most of the nodes before it for earlier_node in get_constraint_nodes(node, lattice): - # and add to the 'uses list' of each earlier node, when applicable + # and add them to the 'uses list' of each earlier node, when applicable # 'earlier node' here being a simplification if variable in earlier_node.left_hand_side: def_use[earlier_node].append(node) - return def_use diff --git a/pyt/reaching_definitions.py b/pyt/reaching_definitions.py deleted file mode 100644 index 299339d2..00000000 --- a/pyt/reaching_definitions.py +++ /dev/null @@ -1,23 +0,0 @@ -from .constraint_table import constraint_table -from .node_types import AssignmentNode -from .reaching_definitions_base import ReachingDefinitionsAnalysisBase - - -class ReachingDefinitionsAnalysis(ReachingDefinitionsAnalysisBase): - """Reaching definitions analysis rules implemented.""" - - def fixpointmethod(self, cfg_node): - """Regular reaching definitions. - Used in definition_chains.py - """ - JOIN = self.join(cfg_node) - # Assignment check - if isinstance(cfg_node, AssignmentNode): - arrow_result = JOIN - # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN - arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) - arrow_result = arrow_result | self.lattice.el2bv[cfg_node] - constraint_table[cfg_node] = arrow_result - # Default case - else: - constraint_table[cfg_node] = JOIN diff --git a/pyt/reaching_definitions_base.py b/pyt/reaching_definitions_base.py deleted file mode 100644 index f2dec1dd..00000000 --- a/pyt/reaching_definitions_base.py +++ /dev/null @@ -1,29 +0,0 @@ -from .constraint_table import constraint_join -from .lattice import Lattice - - -class ReachingDefinitionsAnalysisBase(): - """Reaching definitions analysis rules implemented.""" - - def __init__(self, cfg): - self.cfg = cfg - self.lattice = Lattice(cfg.nodes) - - def join(self, cfg_node): - """Joins all constraints of the ingoing nodes and returns them. - This represents the JOIN auxiliary definition from Schwartzbach.""" - return constraint_join(cfg_node.ingoing) - - def arrow(self, JOIN, _id): - """Removes all previous assignments from JOIN that have the same left hand side. - This represents the arrow id definition from Schwartzbach.""" - r = JOIN - for node in self.lattice.get_elements(JOIN): - if node.left_hand_side == _id: - r = r ^ self.lattice.el2bv[node] - return r - - def dep(self, q_1): - """Represents the dep mapping from Schwartzbach.""" - for node in q_1.outgoing: - yield node diff --git a/pyt/reaching_definitions_taint.py b/pyt/reaching_definitions_taint.py index b2c2e1d7..c334d187 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/reaching_definitions_taint.py @@ -1,9 +1,15 @@ -from .constraint_table import constraint_table +from .constraint_table import ( + constraint_join, + constraint_table +) +from .lattice import Lattice from .node_types import AssignmentNode -from .reaching_definitions_base import ReachingDefinitionsAnalysisBase -class ReachingDefinitionsTaintAnalysis(ReachingDefinitionsAnalysisBase): +class ReachingDefinitionsTaintAnalysis(): + def __init__(self, cfg): + self.cfg = cfg + self.lattice = Lattice(cfg.nodes) def fixpointmethod(self, cfg_node): """The most important part of PyT, where we perform @@ -24,3 +30,22 @@ def fixpointmethod(self, cfg_node): # Default case else: constraint_table[cfg_node] = JOIN + + def join(self, cfg_node): + """Joins all constraints of the ingoing nodes and returns them. + This represents the JOIN auxiliary definition from Schwartzbach.""" + return constraint_join(cfg_node.ingoing) + + def arrow(self, JOIN, _id): + """Removes all previous assignments from JOIN that have the same left hand side. + This represents the arrow id definition from Schwartzbach.""" + r = JOIN + for node in self.lattice.get_elements(JOIN): + if node.left_hand_side == _id: + r = r ^ self.lattice.el2bv[node] + return r + + def dep(self, q_1): + """Represents the dep mapping from Schwartzbach.""" + for node in q_1.outgoing: + yield node diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index ca4c1ca6..d3f7e629 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -434,7 +434,10 @@ def get_vulnerability( elif isinstance(cfg_node, IfNode): potential_sanitiser = cfg_node - def_use = build_def_use_chain(cfg.nodes) + def_use = build_def_use_chain( + cfg.nodes, + lattice + ) for chain in get_vulnerability_chains( source.cfg_node, sink.cfg_node, diff --git a/tests/reaching_definitions_test.py b/tests/reaching_definitions_test.py deleted file mode 100644 index 75524893..00000000 --- a/tests/reaching_definitions_test.py +++ /dev/null @@ -1,50 +0,0 @@ -from .analysis_base_test_case import AnalysisBaseTestCase -from pyt.constraint_table import constraint_table -from pyt.reaching_definitions import ReachingDefinitionsAnalysis - - -class ReachingDefinitionsTest(AnalysisBaseTestCase): - def test_linear_program(self): - constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/linear.py', ReachingDefinitionsAnalysis) - - EXPECTED = [ - "Label: Entry module: ", - "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - ] - i = 0 - for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 - - def test_example(self): - constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/example.py', ReachingDefinitionsAnalysis) - - EXPECTED = [ - "Label: Entry module: ", - "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x - y: Label: z = z - 1, Label: x = x - y, Label: y = x / 2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: y = x / 2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - ] - i = 0 - for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 From eebff478618896c0d192e1908e58024bf8023a51 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 23:21:18 -0700 Subject: [PATCH 270/541] Made fixed point only accept reaching_definitions_taint_test --- pyt/fixed_point.py | 9 +- tests/analysis_base_test_case.py | 4 +- tests/reaching_definitions_taint_test.py | 146 ++++++++++----------- tests/vulnerabilities_across_files_test.py | 3 +- tests/vulnerabilities_test.py | 16 +-- 5 files changed, 81 insertions(+), 97 deletions(-) diff --git a/pyt/fixed_point.py b/pyt/fixed_point.py index de148518..e77086ce 100644 --- a/pyt/fixed_point.py +++ b/pyt/fixed_point.py @@ -1,16 +1,17 @@ """This module implements the fixed point algorithm.""" from .constraint_table import constraint_table +from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis class FixedPointAnalysis(): """Run the fix point analysis.""" - def __init__(self, cfg, analysis): + def __init__(self, cfg): """Fixed point analysis. Analysis must be a dataflow analysis containing a 'fixpointmethod' method that analyses one CFG.""" - self.analysis = analysis(cfg) + self.analysis = ReachingDefinitionsTaintAnalysis(cfg) self.cfg = cfg def fixpoint_runner(self): @@ -29,8 +30,8 @@ def fixpoint_runner(self): q = q[1:] # q = q.tail() # The list minus the head -def analyse(cfg_list, *, analysis_type): +def analyse(cfg_list): """Analyse a list of control flow graphs with a given analysis type.""" for cfg in cfg_list: - analysis = FixedPointAnalysis(cfg, analysis_type) + analysis = FixedPointAnalysis(cfg) analysis.fixpoint_runner() diff --git a/tests/analysis_base_test_case.py b/tests/analysis_base_test_case.py index 8e8bb37d..9bf5874b 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis_base_test_case.py @@ -52,9 +52,9 @@ def constraints(self, list_of_constraints, node_number): for c in list_of_constraints: yield (c, node_number) - def run_analysis(self, path, analysis_type): + def run_analysis(self, path): self.cfg_create_from_file(path) initialize_constraint_table([self.cfg]) - self.analysis = FixedPointAnalysis(self.cfg, analysis_type) + self.analysis = FixedPointAnalysis(self.cfg) self.analysis.fixpoint_runner() return Lattice(self.cfg.nodes) diff --git a/tests/reaching_definitions_taint_test.py b/tests/reaching_definitions_taint_test.py index dc18dcd5..e2d437a8 100644 --- a/tests/reaching_definitions_taint_test.py +++ b/tests/reaching_definitions_taint_test.py @@ -1,111 +1,105 @@ from .analysis_base_test_case import AnalysisBaseTestCase -from pyt.constraint_table import constraint_table -from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/linear.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/linear.py') EXPECTED = [ - "Label: Entry module:", - "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" - ] + "Label: Entry module:", + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" + ] i = 0 for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 - + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_if_program(self): constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/if_program.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/if_program.py') EXPECTED = [ - "Label: Entry module:", - "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: if x > 0:: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: y = x + 1: Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" - ] + "Label: Entry module:", + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: if x > 0:: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: y = x + 1: Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" + ] i = 0 for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_example(self): constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/example.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/example.py') EXPECTED = [ - "Label: Entry module:", - "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()" - ] + "Label: Entry module:", + "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", + "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", + "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()" + ] i = 0 for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 def test_func_with_params(self): - lattice = self.run_analysis('examples/example_inputs/function_with_params.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/function_with_params.py') - self.assertInCfg([(1,1), - (1,2), (2,2), - (1,3), (2,3), (3,3), - (1,4), (2,4), (3,4), (4,4), - (1,5), (2,5), (3,5), (4,5), - *self.constraints([1,2,3,4,6], 6), - *self.constraints([1,2,3,4,6,7], 7), - *self.constraints([1,2,3,4,6,7], 8), - *self.constraints([2,3,4,6,7,9], 9), - *self.constraints([2,3,4,6,7,9], 10)], lattice) + self.assertInCfg([(1, 1), + (1, 2), (2, 2), + (1, 3), (2, 3), (3, 3), + (1, 4), (2, 4), (3, 4), (4, 4), + (1, 5), (2, 5), (3, 5), (4, 5), + *self.constraints([1, 2, 3, 4, 6], 6), + *self.constraints([1, 2, 3, 4, 6, 7], 7), + *self.constraints([1, 2, 3, 4, 6, 7], 8), + *self.constraints([2, 3, 4, 6, 7, 9], 9), + *self.constraints([2, 3, 4, 6, 7, 9], 10)], lattice) def test_while(self): constraint_table = {} - lattice = self.run_analysis('examples/example_inputs/while.py', ReachingDefinitionsTaintAnalysis) + lattice = self.run_analysis('examples/example_inputs/while.py') EXPECTED = [ - "Label: Entry module: ", - "Label: ~call_2 = ret_input(): Label: ~call_2 = ret_input()", - "Label: ~call_1 = ret_int(~call_2): Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: while x < 10:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input(", - "Label: x = x + 1: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: if x == 5:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: BreakNode: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: x = 6: Label: x = 6, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: Exit module: Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()" - ] + "Label: Entry module: ", + "Label: ~call_2 = ret_input(): Label: ~call_2 = ret_input()", + "Label: ~call_1 = ret_int(~call_2): Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: while x < 10:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input(", + "Label: x = x + 1: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: if x == 5:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: BreakNode: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: x = 6: Label: x = 6, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + "Label: Exit module: Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()" + ] i = 0 for k, v in constraint_table.items(): - row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) - self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) - i = i + 1 - - def test_join(self): - pass + row = str(k) + ': ' + ','.join([str(n) for n in lattice.get_elements(v)]) + self.assertTrue(self.string_compare_alnum(row, EXPECTED[i])) + i = i + 1 diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 4bbcde74..a9e1b02c 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -12,7 +12,6 @@ from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_flask_route_function from pyt.project_handler import get_directory_modules, get_modules -from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from pyt.vulnerabilities import find_vulnerabilities @@ -31,7 +30,7 @@ def run_analysis(self, path): initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + analyse(cfg_list) return find_vulnerabilities( cfg_list, diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index d85acdad..50470a14 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -21,7 +21,6 @@ is_function ) from pyt.node_types import Node -from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis class EngineTest(BaseTestCase): @@ -129,10 +128,7 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) - analyse( - cfg_list, - analysis_type=ReachingDefinitionsTaintAnalysis - ) + analyse(cfg_list) return vulnerabilities.find_vulnerabilities( cfg_list, @@ -520,10 +516,7 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_django_view_function) initialize_constraint_table(cfg_list) - analyse( - cfg_list, - analysis_type=ReachingDefinitionsTaintAnalysis - ) + analyse(cfg_list) trigger_word_file = os.path.join( 'pyt', @@ -570,10 +563,7 @@ def run_analysis(self, path): FrameworkAdaptor(cfg_list, [], [], is_function) initialize_constraint_table(cfg_list) - analyse( - cfg_list, - analysis_type=ReachingDefinitionsTaintAnalysis - ) + analyse(cfg_list) trigger_word_file = os.path.join( 'pyt', From 54d53c503d1db7bb1d90577943dd14401f9f4e5b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 23:35:04 -0700 Subject: [PATCH 271/541] Updated more analyse call-sites --- pyt/__main__.py | 6 +----- pyt/github_search.py | 6 +----- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index fac79881..d3556d92 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -37,7 +37,6 @@ get_directory_modules, get_modules ) -from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .vulnerabilities import find_vulnerabilities @@ -208,10 +207,7 @@ def main(command_line_args=sys.argv[1:]): ) initialize_constraint_table(cfg_list) - analyse( - cfg_list, - ReachingDefinitionsTaintAnalysis - ) + analyse(cfg_list) vulnerabilities = find_vulnerabilities( cfg_list, ui_mode, diff --git a/pyt/github_search.py b/pyt/github_search.py index e6945b28..2fa1b2f5 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -26,7 +26,6 @@ get_directory_modules, get_modules ) -from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from .repo_runner import ( add_repo_to_csv, get_repos, @@ -247,10 +246,7 @@ def analyse_repo( cfg_list = list(cfg) initialize_constraint_table(cfg_list) - analyse( - cfg_list, - ReachingDefinitionsTaintAnalysis - ) + analyse(cfg_list) vulnerabilities = find_vulnerabilities( cfg_list, ui_mode, From 53e8ae0e1aca9eb006ef699ea47d862039a01c81 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 20 Apr 2018 23:59:03 -0700 Subject: [PATCH 272/541] Move analysis modules and tests into their own folders --- pyt/__main__.py | 4 ++-- pyt/{ => analysis}/constraint_table.py | 0 pyt/{ => analysis}/definition_chains.py | 2 +- pyt/{ => analysis}/fixed_point.py | 0 pyt/{ => analysis}/lattice.py | 2 +- .../reaching_definitions_taint.py | 2 +- pyt/github_search.py | 4 ++-- pyt/utils/log.py | 23 ------------------- pyt/vulnerabilities.py | 4 ++-- .../__init__.py} | 0 .../{ => analysis}/analysis_base_test_case.py | 8 +++---- .../reaching_definitions_taint_test.py | 0 tests/vulnerabilities_across_files_test.py | 4 ++-- tests/vulnerabilities_test.py | 4 ++-- 14 files changed, 17 insertions(+), 40 deletions(-) rename pyt/{ => analysis}/constraint_table.py (100%) rename pyt/{ => analysis}/definition_chains.py (96%) rename pyt/{ => analysis}/fixed_point.py (100%) rename pyt/{ => analysis}/lattice.py (97%) rename pyt/{ => analysis}/reaching_definitions_taint.py (97%) delete mode 100644 pyt/utils/log.py rename tests/{liveness_test.py => analysis/__init__.py} (100%) rename tests/{ => analysis}/analysis_base_test_case.py (90%) rename tests/{ => analysis}/reaching_definitions_taint_test.py (100%) diff --git a/pyt/__main__.py b/pyt/__main__.py index d3556d92..1378b9ea 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -5,6 +5,8 @@ import sys from datetime import date +from .analysis.constraint_table import initialize_constraint_table +from .analysis.fixed_point import analyse from .argument_helpers import ( default_blackbox_mapping_file, default_trigger_word_file, @@ -14,9 +16,7 @@ ) from .ast_helper import generate_ast from .baseline import get_vulnerabilities_not_in_baseline -from .constraint_table import initialize_constraint_table from .expr_visitor import make_cfg -from .fixed_point import analyse from .formatters import ( json, text diff --git a/pyt/constraint_table.py b/pyt/analysis/constraint_table.py similarity index 100% rename from pyt/constraint_table.py rename to pyt/analysis/constraint_table.py diff --git a/pyt/definition_chains.py b/pyt/analysis/definition_chains.py similarity index 96% rename from pyt/definition_chains.py rename to pyt/analysis/definition_chains.py index b69da7c3..e4c79c83 100644 --- a/pyt/definition_chains.py +++ b/pyt/analysis/definition_chains.py @@ -1,7 +1,7 @@ from collections import defaultdict from .constraint_table import constraint_table -from .node_types import AssignmentNode +from ..node_types import AssignmentNode def get_constraint_nodes( diff --git a/pyt/fixed_point.py b/pyt/analysis/fixed_point.py similarity index 100% rename from pyt/fixed_point.py rename to pyt/analysis/fixed_point.py diff --git a/pyt/lattice.py b/pyt/analysis/lattice.py similarity index 97% rename from pyt/lattice.py rename to pyt/analysis/lattice.py index f4dd531f..148237c2 100644 --- a/pyt/lattice.py +++ b/pyt/analysis/lattice.py @@ -1,5 +1,5 @@ from .constraint_table import constraint_table -from .node_types import AssignmentNode +from ..node_types import AssignmentNode def get_lattice_elements(cfg_nodes): diff --git a/pyt/reaching_definitions_taint.py b/pyt/analysis/reaching_definitions_taint.py similarity index 97% rename from pyt/reaching_definitions_taint.py rename to pyt/analysis/reaching_definitions_taint.py index c334d187..6ec26e01 100644 --- a/pyt/reaching_definitions_taint.py +++ b/pyt/analysis/reaching_definitions_taint.py @@ -3,7 +3,7 @@ constraint_table ) from .lattice import Lattice -from .node_types import AssignmentNode +from ..node_types import AssignmentNode class ReachingDefinitionsTaintAnalysis(): diff --git a/pyt/github_search.py b/pyt/github_search.py index 2fa1b2f5..9e11f219 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -13,11 +13,11 @@ timedelta ) from . import repo_runner +from .analysis.constraint_table import initialize_constraint_table +from .analysis.fixed_point import analyse from .argument_helpers import VulnerabilityFiles from .ast_helper import generate_ast -from .constraint_table import initialize_constraint_table from .expr_visitor import make_cfg -from .fixed_point import analyse from .formatters import ( json, text diff --git a/pyt/utils/log.py b/pyt/utils/log.py deleted file mode 100644 index 74a49f56..00000000 --- a/pyt/utils/log.py +++ /dev/null @@ -1,23 +0,0 @@ -import logging - - -LOGGING_FMT = '%(levelname)3s] %(filename)s::%(funcName)s(%(lineno)d) - %(message)s' - - -def remove_other_handlers(to_keep=None): - for hdl in logger.handlers: - if hdl != to_keep: - logger.removeHandler(hdl) - - -def enable_logger(to_file=None): - logger.setLevel(logging.DEBUG) - ch = logging.StreamHandler() if not to_file else logging.FileHandler(to_file, mode='w') - ch.setLevel(logging.DEBUG) - fmt = logging.Formatter(LOGGING_FMT) - ch.setFormatter(fmt) - logger.addHandler(ch) - remove_other_handlers(ch) - -logger = logging.getLogger('pyt') -remove_other_handlers() diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index d3f7e629..58be0591 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -4,9 +4,9 @@ import json from collections import namedtuple +from .analysis.definition_chains import build_def_use_chain +from .analysis.lattice import Lattice from .argument_helpers import UImode -from .definition_chains import build_def_use_chain -from .lattice import Lattice from .node_types import ( AssignmentNode, BBorBInode, diff --git a/tests/liveness_test.py b/tests/analysis/__init__.py similarity index 100% rename from tests/liveness_test.py rename to tests/analysis/__init__.py diff --git a/tests/analysis_base_test_case.py b/tests/analysis/analysis_base_test_case.py similarity index 90% rename from tests/analysis_base_test_case.py rename to tests/analysis/analysis_base_test_case.py index 9bf5874b..37d8e6f6 100644 --- a/tests/analysis_base_test_case.py +++ b/tests/analysis/analysis_base_test_case.py @@ -1,9 +1,9 @@ from collections import namedtuple -from .base_test_case import BaseTestCase -from pyt.constraint_table import initialize_constraint_table -from pyt.fixed_point import FixedPointAnalysis -from pyt.lattice import Lattice +from ..base_test_case import BaseTestCase +from pyt.analysis.constraint_table import initialize_constraint_table +from pyt.analysis.fixed_point import FixedPointAnalysis +from pyt.analysis.lattice import Lattice class AnalysisBaseTestCase(BaseTestCase): diff --git a/tests/reaching_definitions_taint_test.py b/tests/analysis/reaching_definitions_taint_test.py similarity index 100% rename from tests/reaching_definitions_taint_test.py rename to tests/analysis/reaching_definitions_taint_test.py diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index a9e1b02c..30316c72 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -7,8 +7,8 @@ UImode, VulnerabilityFiles ) -from pyt.constraint_table import initialize_constraint_table -from pyt.fixed_point import analyse +from pyt.analysis.constraint_table import initialize_constraint_table +from pyt.analysis.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_flask_route_function from pyt.project_handler import get_directory_modules, get_modules diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 50470a14..d578866d 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -6,14 +6,14 @@ trigger_definitions_parser, vulnerabilities ) +from pyt.analysis.constraint_table import initialize_constraint_table +from pyt.analysis.fixed_point import analyse from pyt.argument_helpers import ( default_blackbox_mapping_file, default_trigger_word_file, UImode, VulnerabilityFiles ) -from pyt.constraint_table import initialize_constraint_table -from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import ( is_django_view_function, From 078d171b41438341106d3a7990aa738d4868f932 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 21 Apr 2018 13:32:56 -0700 Subject: [PATCH 273/541] Moved cfg modules into their own submodule --- pyt/__main__.py | 2 +- pyt/cfg/__init__.py | 38 +++++++++++++++++++ pyt/{ => cfg}/expr_visitor.py | 32 +++------------- pyt/{ => cfg}/expr_visitor_helper.py | 20 +--------- pyt/{ => cfg}/stmt_visitor.py | 16 ++++---- pyt/{ => cfg}/stmt_visitor_helper.py | 2 +- pyt/framework_adaptor.py | 2 +- pyt/github_search.py | 2 +- tests/base_test_case.py | 57 +++++++++++++++++++--------- 9 files changed, 96 insertions(+), 75 deletions(-) create mode 100644 pyt/cfg/__init__.py rename pyt/{ => cfg}/expr_visitor.py (97%) rename pyt/{ => cfg}/expr_visitor_helper.py (56%) rename pyt/{ => cfg}/stmt_visitor.py (99%) rename pyt/{ => cfg}/stmt_visitor_helper.py (99%) diff --git a/pyt/__main__.py b/pyt/__main__.py index 1378b9ea..523809aa 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -16,7 +16,7 @@ ) from .ast_helper import generate_ast from .baseline import get_vulnerabilities_not_in_baseline -from .expr_visitor import make_cfg +from .cfg import make_cfg from .formatters import ( json, text diff --git a/pyt/cfg/__init__.py b/pyt/cfg/__init__.py new file mode 100644 index 00000000..710c5f66 --- /dev/null +++ b/pyt/cfg/__init__.py @@ -0,0 +1,38 @@ +from .expr_visitor import ExprVisitor + + +class CFG(): + def __init__(self, nodes, blackbox_assignments): + self.nodes = nodes + self.blackbox_assignments = blackbox_assignments + + def __repr__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) + return output + + def __str__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) + return output + + +def make_cfg( + node, + project_modules, + local_modules, + filename, + module_definitions=None +): + visitor = ExprVisitor( + node, + project_modules, + local_modules, filename, + module_definitions + ) + return CFG( + visitor.nodes, + visitor.blackbox_assignments + ) diff --git a/pyt/expr_visitor.py b/pyt/cfg/expr_visitor.py similarity index 97% rename from pyt/expr_visitor.py rename to pyt/cfg/expr_visitor.py index 410d3b97..597f21f8 100644 --- a/pyt/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -1,21 +1,20 @@ import ast -from .alias_helper import ( +from ..alias_helper import ( handle_aliases_in_calls ) -from .ast_helper import ( +from ..ast_helper import ( Arguments, get_call_names_as_string ) from .expr_visitor_helper import ( BUILTINS, - CFG, return_connection_handler, SavedVariable ) -from .label_visitor import LabelVisitor -from .module_definitions import ModuleDefinitions -from .node_types import ( +from ..label_visitor import LabelVisitor +from ..module_definitions import ModuleDefinitions +from ..node_types import ( AssignmentCallNode, AssignmentNode, BBorBInode, @@ -26,7 +25,7 @@ RestoreNode, ReturnNode ) -from .right_hand_side_visitor import RHSVisitor +from ..right_hand_side_visitor import RHSVisitor from .stmt_visitor import StmtVisitor from .stmt_visitor_helper import CALL_IDENTIFIER @@ -564,22 +563,3 @@ def visit_Call(self, node): # Mark the call as a blackbox because we don't have the definition return self.add_blackbox_or_builtin_call(node, blackbox=True) return self.add_blackbox_or_builtin_call(node, blackbox=False) - - -def make_cfg( - node, - project_modules, - local_modules, - filename, - module_definitions=None -): - visitor = ExprVisitor( - node, - project_modules, - local_modules, filename, - module_definitions - ) - return CFG( - visitor.nodes, - visitor.blackbox_assignments - ) diff --git a/pyt/expr_visitor_helper.py b/pyt/cfg/expr_visitor_helper.py similarity index 56% rename from pyt/expr_visitor_helper.py rename to pyt/cfg/expr_visitor_helper.py index aebeccd3..27e1df78 100644 --- a/pyt/expr_visitor_helper.py +++ b/pyt/cfg/expr_visitor_helper.py @@ -1,6 +1,6 @@ from collections import namedtuple -from .node_types import ConnectToExitNode +from ..node_types import ConnectToExitNode SavedVariable = namedtuple( @@ -33,24 +33,6 @@ ) -class CFG(): - def __init__(self, nodes, blackbox_assignments): - self.nodes = nodes - self.blackbox_assignments = blackbox_assignments - - def __repr__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) - return output - - def __str__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) - return output - - def return_connection_handler(nodes, exit_node): """Connect all return statements to the Exit node.""" for function_body_node in nodes: diff --git a/pyt/stmt_visitor.py b/pyt/cfg/stmt_visitor.py similarity index 99% rename from pyt/stmt_visitor.py rename to pyt/cfg/stmt_visitor.py index c855c9bb..3df1e275 100644 --- a/pyt/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -2,24 +2,24 @@ import itertools import os.path -from .alias_helper import ( +from ..alias_helper import ( as_alias_handler, handle_aliases_in_init_files, handle_fdid_aliases, not_as_alias_handler, retrieve_import_alias_mapping ) -from .ast_helper import ( +from ..ast_helper import ( generate_ast, get_call_names_as_string ) -from .label_visitor import LabelVisitor -from .module_definitions import ( +from ..label_visitor import LabelVisitor +from ..module_definitions import ( LocalModuleDefinition, ModuleDefinition, ModuleDefinitions ) -from .node_types import ( +from ..node_types import ( AssignmentNode, AssignmentCallNode, BBorBInode, @@ -33,8 +33,8 @@ ReturnNode, TryNode ) -from .project_handler import get_directory_modules -from .right_hand_side_visitor import RHSVisitor +from ..project_handler import get_directory_modules +from ..right_hand_side_visitor import RHSVisitor from .stmt_visitor_helper import ( CALL_IDENTIFIER, ConnectStatements, @@ -45,7 +45,7 @@ get_last_statements, remove_breaks ) -from .vars_visitor import VarsVisitor +from ..vars_visitor import VarsVisitor class StmtVisitor(ast.NodeVisitor): diff --git a/pyt/stmt_visitor_helper.py b/pyt/cfg/stmt_visitor_helper.py similarity index 99% rename from pyt/stmt_visitor_helper.py rename to pyt/cfg/stmt_visitor_helper.py index 315c3332..a52f22b6 100644 --- a/pyt/stmt_visitor_helper.py +++ b/pyt/cfg/stmt_visitor_helper.py @@ -2,7 +2,7 @@ import random from collections import namedtuple -from .node_types import ( +from ..node_types import ( AssignmentCallNode, BBorBInode, BreakNode, diff --git a/pyt/framework_adaptor.py b/pyt/framework_adaptor.py index c2a49ef9..00f5a07b 100644 --- a/pyt/framework_adaptor.py +++ b/pyt/framework_adaptor.py @@ -3,7 +3,7 @@ import ast from .ast_helper import Arguments -from .expr_visitor import make_cfg +from .cfg import make_cfg from .module_definitions import project_definitions from .node_types import ( AssignmentNode, diff --git a/pyt/github_search.py b/pyt/github_search.py index 9e11f219..e58a5ee3 100644 --- a/pyt/github_search.py +++ b/pyt/github_search.py @@ -17,7 +17,7 @@ from .analysis.fixed_point import analyse from .argument_helpers import VulnerabilityFiles from .ast_helper import generate_ast -from .expr_visitor import make_cfg +from .cfg import make_cfg from .formatters import ( json, text diff --git a/tests/base_test_case.py b/tests/base_test_case.py index bbcb9d52..72fa0284 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -2,7 +2,7 @@ import unittest from pyt.ast_helper import generate_ast -from pyt.expr_visitor import make_cfg +from pyt.cfg import make_cfg from pyt.module_definitions import project_definitions @@ -27,30 +27,49 @@ def assertInCfg(self, connections): for element in range(nodes): for sets in range(nodes): if not (element, sets) in connections: - self.assertNotIn(self.cfg.nodes[element], self.cfg.nodes[sets].outgoing, "(%s <- %s)" % (element, sets) + " expected to be disconnected") - self.assertNotIn(self.cfg.nodes[sets], self.cfg.nodes[element].ingoing, "(%s <- %s)" % (sets, element) + " expected to be disconnected") + self.assertNotIn( + self.cfg.nodes[element], + self.cfg.nodes[sets].outgoing, + "(%s <- %s)" % (element, sets) + " expected to be disconnected" + ) + self.assertNotIn( + self.cfg.nodes[sets], + self.cfg.nodes[element].ingoing, + "(%s <- %s)" % (sets, element) + " expected to be disconnected" + ) def assertConnected(self, node, successor): """Asserts that a node is connected to its successor. This means that node has successor in its outgoing and successor has node in its ingoing.""" - self.assertIn(successor, node.outgoing, - '\n%s was NOT found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']') + self.assertIn( + successor, + node.outgoing, + '\n%s was NOT found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']' + ) - self.assertIn(node, successor.ingoing, - '\n%s was NOT found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']') + self.assertIn( + node, + successor.ingoing, + '\n%s was NOT found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']' + ) def assertNotConnected(self, node, successor): """Asserts that a node is not connected to its successor. This means that node does not the successor in its outgoing and successor does not have the node in its ingoing.""" - self.assertNotIn(successor, node.outgoing, - '\n%s was mistakenly found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']') - - self.assertNotIn(node, successor.ingoing, - '\n%s was mistakenly found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']') + self.assertNotIn( + successor, + node.outgoing, + '\n%s was mistakenly found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']' + ) + self.assertNotIn( + node, + successor.ingoing, + '\n%s was mistakenly found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']' + ) def assertLineNumber(self, node, line_number): self.assertEqual(node.line_number, line_number) @@ -70,11 +89,13 @@ def cfg_create_from_file(self, filename, project_modules=list(), local_modules=l self.cfg = make_cfg(tree, project_modules, local_modules, filename) def string_compare_alpha(self, output, expected_string): - return [char for char in output if char.isalpha()] \ - == \ - [char for char in expected_string if char.isalpha()] + return ( + [char for char in output if char.isalpha()] == + [char for char in expected_string if char.isalpha()] + ) def string_compare_alnum(self, output, expected_string): - return [char for char in output if char.isalnum()] \ - == \ - [char for char in expected_string if char.isalnum()] + return ( + [char for char in output if char.isalnum()] == + [char for char in expected_string if char.isalnum()] + ) From 6bd97ba0f1c7257bb0e91fb7d494860b33e9f879 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 21 Apr 2018 14:25:07 -0700 Subject: [PATCH 274/541] Move vulnerability files into their own submodule --- pyt/{ => cfg}/alias_helper.py | 1 + pyt/cfg/expr_visitor.py | 2 +- pyt/cfg/stmt_visitor.py | 2 +- pyt/vulnerabilities/__init__.py | 40 ++++++++++++++++ .../trigger_definitions_parser.py | 1 - pyt/{ => vulnerabilities}/vulnerabilities.py | 48 ++----------------- .../vulnerability_helper.py | 0 tests/base_test_case.py | 26 ++++++++-- tests/vulnerabilities_test.py | 11 +++-- 9 files changed, 76 insertions(+), 55 deletions(-) rename pyt/{ => cfg}/alias_helper.py (99%) create mode 100644 pyt/vulnerabilities/__init__.py rename pyt/{ => vulnerabilities}/trigger_definitions_parser.py (99%) rename pyt/{ => vulnerabilities}/vulnerabilities.py (91%) rename pyt/{ => vulnerabilities}/vulnerability_helper.py (100%) diff --git a/pyt/alias_helper.py b/pyt/cfg/alias_helper.py similarity index 99% rename from pyt/alias_helper.py rename to pyt/cfg/alias_helper.py index 9d294444..a1c83ab0 100644 --- a/pyt/alias_helper.py +++ b/pyt/cfg/alias_helper.py @@ -1,5 +1,6 @@ """This module contains alias helper functions for the expr_visitor module.""" + def as_alias_handler(alias_list): """Returns a list of all the names that will be called.""" list_ = list() diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index 597f21f8..2301fce6 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -1,6 +1,6 @@ import ast -from ..alias_helper import ( +from .alias_helper import ( handle_aliases_in_calls ) from ..ast_helper import ( diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 3df1e275..85ed523c 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -2,7 +2,7 @@ import itertools import os.path -from ..alias_helper import ( +from .alias_helper import ( as_alias_handler, handle_aliases_in_init_files, handle_fdid_aliases, diff --git a/pyt/vulnerabilities/__init__.py b/pyt/vulnerabilities/__init__.py new file mode 100644 index 00000000..07224a49 --- /dev/null +++ b/pyt/vulnerabilities/__init__.py @@ -0,0 +1,40 @@ +import json + +from ..analysis.lattice import Lattice +from .trigger_definitions_parser import parse +from .vulnerabilities import find_vulnerabilities_in_cfg + + +def find_vulnerabilities( + cfg_list, + ui_mode, + vulnerability_files +): + """Find vulnerabilities in a list of CFGs from a trigger_word_file. + + Args: + cfg_list(list[CFG]): the list of CFGs to scan. + ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files + + Returns: + A list of vulnerabilities. + """ + vulnerabilities = list() + definitions = parse(vulnerability_files.triggers) + + with open(vulnerability_files.blackbox_mapping) as infile: + blackbox_mapping = json.load(infile) + for cfg in cfg_list: + find_vulnerabilities_in_cfg( + cfg, + definitions, + Lattice(cfg.nodes), + ui_mode, + blackbox_mapping, + vulnerabilities + ) + with open(vulnerability_files.blackbox_mapping, 'w') as outfile: + json.dump(blackbox_mapping, outfile, indent=4) + + return vulnerabilities diff --git a/pyt/trigger_definitions_parser.py b/pyt/vulnerabilities/trigger_definitions_parser.py similarity index 99% rename from pyt/trigger_definitions_parser.py rename to pyt/vulnerabilities/trigger_definitions_parser.py index 7515da4a..62cdbce0 100644 --- a/pyt/trigger_definitions_parser.py +++ b/pyt/vulnerabilities/trigger_definitions_parser.py @@ -1,4 +1,3 @@ -import os from collections import namedtuple diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py similarity index 91% rename from pyt/vulnerabilities.py rename to pyt/vulnerabilities/vulnerabilities.py index 58be0591..fafa212c 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -1,21 +1,18 @@ """Module for finding vulnerabilities based on a definitions file.""" import ast -import json from collections import namedtuple -from .analysis.definition_chains import build_def_use_chain -from .analysis.lattice import Lattice -from .argument_helpers import UImode -from .node_types import ( +from ..analysis.definition_chains import build_def_use_chain +from ..argument_helpers import UImode +from ..node_types import ( AssignmentNode, BBorBInode, IfNode, TaintedNode ) -from .right_hand_side_visitor import RHSVisitor -from .trigger_definitions_parser import parse -from .vars_visitor import VarsVisitor +from ..right_hand_side_visitor import RHSVisitor +from ..vars_visitor import VarsVisitor from .vulnerability_helper import ( vuln_factory, VulnerabilityType @@ -500,38 +497,3 @@ def find_vulnerabilities_in_cfg( ) if vulnerability: vulnerabilities_list.append(vulnerability) - - -def find_vulnerabilities( - cfg_list, - ui_mode, - vulnerability_files -): - """Find vulnerabilities in a list of CFGs from a trigger_word_file. - - Args: - cfg_list(list[CFG]): the list of CFGs to scan. - ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. - vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files - - Returns: - A list of vulnerabilities. - """ - vulnerabilities = list() - definitions = parse(vulnerability_files.triggers) - - with open(vulnerability_files.blackbox_mapping) as infile: - blackbox_mapping = json.load(infile) - for cfg in cfg_list: - find_vulnerabilities_in_cfg( - cfg, - definitions, - Lattice(cfg.nodes), - ui_mode, - blackbox_mapping, - vulnerabilities - ) - with open(vulnerability_files.blackbox_mapping, 'w') as outfile: - json.dump(blackbox_mapping, outfile, indent=4) - - return vulnerabilities diff --git a/pyt/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py similarity index 100% rename from pyt/vulnerability_helper.py rename to pyt/vulnerabilities/vulnerability_helper.py diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 72fa0284..2683aae1 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -19,8 +19,16 @@ def assertInCfg(self, connections): at index 1 of the tuple. """ for connection in connections: - self.assertIn(self.cfg.nodes[connection[0]], self.cfg.nodes[connection[1]].outgoing, str(connection) + " expected to be connected") - self.assertIn(self.cfg.nodes[connection[1]], self.cfg.nodes[connection[0]].ingoing, str(connection) + " expected to be connected") + self.assertIn( + self.cfg.nodes[connection[0]], + self.cfg.nodes[connection[1]].outgoing, + str(connection) + " expected to be connected" + ) + self.assertIn( + self.cfg.nodes[connection[1]], + self.cfg.nodes[connection[0]].ingoing, + str(connection) + " expected to be connected" + ) nodes = len(self.cfg.nodes) @@ -83,10 +91,20 @@ def assert_length(self, _list, *, expected_length): actual_length = len(_list) self.assertEqual(expected_length, actual_length) - def cfg_create_from_file(self, filename, project_modules=list(), local_modules=list()): + def cfg_create_from_file( + self, + filename, + project_modules=list(), + local_modules=list() + ): project_definitions.clear() tree = generate_ast(filename) - self.cfg = make_cfg(tree, project_modules, local_modules, filename) + self.cfg = make_cfg( + tree, + project_modules, + local_modules, + filename + ) def string_compare_alpha(self, output, expected_string): return ( diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index d578866d..202f4ee4 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -2,7 +2,8 @@ from .base_test_case import BaseTestCase -from pyt import ( +from pyt.vulnerabilities import ( + find_vulnerabilities, trigger_definitions_parser, vulnerabilities ) @@ -32,7 +33,7 @@ def get_lattice_elements(self, cfg_nodes): return cfg_nodes def test_parse(self): - definitions = vulnerabilities.parse( + definitions = trigger_definitions_parser.parse( trigger_word_file=os.path.join( os.getcwd(), 'pyt', @@ -130,7 +131,7 @@ def run_analysis(self, path): analyse(cfg_list) - return vulnerabilities.find_vulnerabilities( + return find_vulnerabilities( cfg_list, UImode.NORMAL, VulnerabilityFiles( @@ -524,7 +525,7 @@ def run_analysis(self, path): 'django_trigger_words.pyt' ) - return vulnerabilities.find_vulnerabilities( + return find_vulnerabilities( cfg_list, UImode.NORMAL, VulnerabilityFiles( @@ -571,7 +572,7 @@ def run_analysis(self, path): 'all_trigger_words.pyt' ) - return vulnerabilities.find_vulnerabilities( + return find_vulnerabilities( cfg_list, UImode.NORMAL, VulnerabilityFiles( From 4cd3ea596e2ef0c834e206938af6963bbd08130d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 22 Apr 2018 13:51:49 +0300 Subject: [PATCH 275/541] nosec_lines for #108's issue Added args and nosec_lines --- pyt/__main__.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pyt/__main__.py b/pyt/__main__.py index 4ceb67d1..fd2ba223 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -142,6 +142,9 @@ def parse_args(args): '(only JSON-formatted files are accepted)', type=str, default=False) + parser.add_argument('-in', '--ignore-nosec', + help='Ignoring nosec commands', + action='store_true') save_parser = subparsers.add_parser('save', help='Save menu.') save_parser.set_defaults(which='save') @@ -307,6 +310,17 @@ def main(command_line_args=sys.argv[1:]): args.trigger_word_file ) ) + + if args.ignore_nosec: + nosec_lines = set() + else: + file = open(path, "r") + lines = file.readlines() + nosec_lines = set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line) + if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) From 1316bc079c7a28afbc48c5883d43b29a53352bb0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 22 Apr 2018 23:38:52 -0700 Subject: [PATCH 276/541] Move argparse code into usage.py, delete python 2 option, still need to fix https://stackoverflow.com/questions/24180527/argparse-required-arguments-listed-under-optional-arguments --- pyt/__main__.py | 116 +---------------- pyt/argument_helpers.py | 26 ---- pyt/ast_helper.py | 11 +- pyt/baseline.py | 8 +- pyt/module_definitions.py | 3 +- pyt/usage.py | 142 +++++++++++++++++++++ tests/vulnerabilities_across_files_test.py | 6 +- tests/vulnerabilities_test.py | 7 +- 8 files changed, 161 insertions(+), 158 deletions(-) create mode 100644 pyt/usage.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 523809aa..06dc9f1e 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -1,16 +1,11 @@ """The comand line module of PyT.""" -import argparse import os import sys -from datetime import date from .analysis.constraint_table import initialize_constraint_table from .analysis.fixed_point import analyse from .argument_helpers import ( - default_blackbox_mapping_file, - default_trigger_word_file, - valid_date, VulnerabilityFiles, UImode ) @@ -37,117 +32,10 @@ get_directory_modules, get_modules ) +from .usage import parse_args from .vulnerabilities import find_vulnerabilities -def parse_args(args): - parser = argparse.ArgumentParser(prog='python -m pyt') - parser.set_defaults(which='') - - subparsers = parser.add_subparsers() - - entry_group = parser.add_mutually_exclusive_group(required=True) - entry_group.add_argument( - '-f', '--filepath', - help='Path to the file that should be analysed.', - type=str - ) - entry_group.add_argument( - '-gr', '--git-repos', - help='Takes a CSV file of git_url, path per entry.', - type=str - ) - - parser.add_argument( - '-pr', '--project-root', - help='Add project root, this is important when the entry ' - 'file is not at the root of the project.', - type=str - ) - parser.add_argument( - '-csv', '--csv-path', type=str, - help='Give the path of the csv file' - ' repos should be added to.' - ) - parser.add_argument( - '-t', '--trigger-word-file', - help='Input trigger word file.', - type=str, - default=default_trigger_word_file - ) - parser.add_argument( - '-m', '--blackbox-mapping-file', - help='Input blackbox mapping file.', - type=str, - default=default_blackbox_mapping_file - ) - parser.add_argument( - '-py2', '--python-2', - help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + - ' needed when target file(s) are written in Python 2.', - action='store_true' - ) - parser.add_argument( - '-l', '--log-level', - help='Choose logging level: CRITICAL, ERROR,' - ' WARNING(Default), INFO, DEBUG, NOTSET.', - type=str - ) - parser.add_argument( - '-a', '--adaptor', - help='Choose an adaptor: Flask(Default), Django, Every or Pylons', - type=str - ) - parser.add_argument( - '-j', '--json', - help='Prints JSON instead of report.', - action='store_true', - default=False - ) - parser.add_argument( - '-b', '--baseline', - help='path of a baseline report to compare against ' - '(only JSON-formatted files are accepted)', - type=str, - default=False - ) - - print_group = parser.add_mutually_exclusive_group() - print_group.add_argument( - '-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', - action='store_true', - default=False - ) - print_group.add_argument( - '-i', '--interactive', - help='Will ask you about each vulnerability chain and blackbox nodes.', - action='store_true', - default=False - ) - - search_parser = subparsers.add_parser( - 'github_search', - help='Searches through github and runs PyT ' - 'on found repositories. This can take some time.' - ) - search_parser.set_defaults(which='search') - search_parser.add_argument( - '-ss', '--search-string', required=True, - help='String for searching for repos on github.', - type=str - ) - search_parser.add_argument( - '-sd', '--start-date', - help='Start date for repo search. ' - 'Criteria used is Created Date.', - type=valid_date, - default=date(2010, 1, 1) - ) - - return parser.parse_args(args) - - def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) @@ -181,7 +69,7 @@ def main(command_line_args=sys.argv[1:]): project_modules = get_modules(directory) local_modules = get_directory_modules(directory) - tree = generate_ast(path, python_2=args.python_2) + tree = generate_ast(path) cfg = make_cfg( tree, diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py index 847636f9..bd076775 100644 --- a/pyt/argument_helpers.py +++ b/pyt/argument_helpers.py @@ -1,33 +1,7 @@ -import os -from argparse import ArgumentTypeError from collections import namedtuple -from datetime import datetime from enum import Enum -default_blackbox_mapping_file = os.path.join( - os.path.dirname(__file__), - 'vulnerability_definitions', - 'blackbox_mapping.json' -) - - -default_trigger_word_file = os.path.join( - os.path.dirname(__file__), - 'vulnerability_definitions', - 'all_trigger_words.pyt' -) - - -def valid_date(s): - date_format = "%Y-%m-%d" - try: - return datetime.strptime(s, date_format).date() - except ValueError: - msg = "Not a valid date: '{0}'. Format: {1}".format(s, date_format) - raise ArgumentTypeError(msg) - - class UImode(Enum): INTERACTIVE = 0 NORMAL = 1 diff --git a/pyt/ast_helper.py b/pyt/ast_helper.py index 985eee70..e741ac50 100644 --- a/pyt/ast_helper.py +++ b/pyt/ast_helper.py @@ -8,7 +8,6 @@ BLACK_LISTED_CALL_NAMES = ['self'] recursive = False -python_2_mode = False def convert_to_3(path): # pragma: no cover @@ -22,17 +21,12 @@ def convert_to_3(path): # pragma: no cover exit(1) -def generate_ast(path, python_2=False): +def generate_ast(path): """Generate an Abstract Syntax Tree using the ast module. Args: path(str): The path to the file e.g. example/foo/bar.py - python_2(bool): Determines whether or not to call 2to3. """ - # If set, it stays set. - global python_2_mode - if python_2: # pragma: no cover - python_2_mode = True if os.path.isfile(path): with open(path, 'r') as f: try: @@ -40,8 +34,7 @@ def generate_ast(path, python_2=False): except SyntaxError: # pragma: no cover global recursive if not recursive: - if not python_2_mode: - convert_to_3(path) + convert_to_3(path) recursive = True return generate_ast(path) else: diff --git a/pyt/baseline.py b/pyt/baseline.py index 1e3258a0..1dc3128b 100644 --- a/pyt/baseline.py +++ b/pyt/baseline.py @@ -1,10 +1,12 @@ import json -def get_vulnerabilities_not_in_baseline(vulnerabilities, baseline): - baseline = json.load(open(baseline)) +def get_vulnerabilities_not_in_baseline( + vulnerabilities, + baseline_file +): + baseline = json.load(open(baseline_file)) output = list() - vulnerabilities =[vuln for vuln in vulnerabilities] for vuln in vulnerabilities: if vuln.as_dict() not in baseline['vulnerabilities']: output.append(vuln) diff --git a/pyt/module_definitions.py b/pyt/module_definitions.py index bde14ce7..6ec197de 100644 --- a/pyt/module_definitions.py +++ b/pyt/module_definitions.py @@ -4,7 +4,8 @@ import ast -# Contains all project definitions for a program run: +# Contains all project definitions for a program run +# Only used in framework_adaptor.py, but modified here project_definitions = dict() diff --git a/pyt/usage.py b/pyt/usage.py new file mode 100644 index 00000000..1dc23c07 --- /dev/null +++ b/pyt/usage.py @@ -0,0 +1,142 @@ +import argparse +import os +from datetime import ( + date, + datetime +) + + +default_blackbox_mapping_file = os.path.join( + os.path.dirname(__file__), + 'vulnerability_definitions', + 'blackbox_mapping.json' +) + + +default_trigger_word_file = os.path.join( + os.path.dirname(__file__), + 'vulnerability_definitions', + 'all_trigger_words.pyt' +) + + +def valid_date(s): + date_format = "%Y-%m-%d" + try: + return datetime.strptime(s, date_format).date() + except ValueError: + msg = "Not a valid date: '{0}'. Format: {1}".format(s, date_format) + raise argparse.ArgumentTypeError(msg) + + +def _add_entry_group(parser): + entry_group = parser.add_mutually_exclusive_group(required=True) + entry_group.add_argument( + '-f', '--filepath', + help='Path to the file that should be analysed.', + type=str + ) + entry_group.add_argument( + '-gr', '--git-repos', + help='Takes a CSV file of git_url, path per entry.', + type=str, + metavar='CSV_FILE' + ) + + +def _add_regular_arguments(parser): + parser.add_argument( + '-r', '--root-directory', + help='Add project root, this is important when the entry ' + 'file is not at the root of the project.', + type=str, + metavar='DIR_TO_ANALYZE' + ) + parser.add_argument( + '-a', '--adaptor', + help='Choose a web framework adaptor: ' + 'Flask(Default), Django, Every or Pylons', + type=str + ) + parser.add_argument( + '-b', '--baseline', + help='Path of a baseline report to compare against ' + '(only JSON-formatted files are accepted)', + type=str, + default=False, + metavar='BASELINE_JSON_FILE', + ) + parser.add_argument( + '-j', '--json', + help='Prints JSON instead of report.', + action='store_true', + default=False + ) + parser.add_argument( + '-m', '--blackbox-mapping-file', + help='Input blackbox mapping file.', + type=str, + default=default_blackbox_mapping_file + ) + parser.add_argument( + '-t', '--trigger-word-file', + help='Input trigger word file.', + type=str, + default=default_trigger_word_file + ) + parser.add_argument( + '-csv', '--csv-path', + help='Give the path of the csv file ' + 'repos should be added to.', + type=str + ) + + +def _add_print_group(parser): + print_group = parser.add_mutually_exclusive_group() + print_group.add_argument( + '-trim', '--trim-reassigned-in', + help='Trims the reassigned list to the vulnerability chain.', + action='store_true', + default=True + ) + print_group.add_argument( + '--interactive', + help='Will ask you about each vulnerability chain and blackbox nodes.', + action='store_true', + default=False + ) + + +def _add_search_parser(parser): + subparsers = parser.add_subparsers() + search_parser = subparsers.add_parser( + 'github_search', + help='Searches through github and runs PyT ' + 'on found repositories. This can take some time.' + ) + search_parser.set_defaults(which='search') + search_parser.add_argument( + '-ss', '--search-string', required=True, + help='String for searching for repos on github.', + type=str + ) + search_parser.add_argument( + '-sd', '--start-date', + help='Start date for repo search. ' + 'Criteria used is Created Date.', + type=valid_date, + default=date(2010, 1, 1) + ) + + +def parse_args(args): + parser = argparse.ArgumentParser(prog='python -m pyt') + parser.set_defaults(which='') + + _add_entry_group(parser) + _add_regular_arguments(parser) + _add_print_group(parser) + _add_search_parser(parser) + + return parser.parse_args(args) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 30316c72..ef6cceb5 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -2,8 +2,6 @@ from .base_test_case import BaseTestCase from pyt.argument_helpers import ( - default_blackbox_mapping_file, - default_trigger_word_file, UImode, VulnerabilityFiles ) @@ -12,6 +10,10 @@ from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import is_flask_route_function from pyt.project_handler import get_directory_modules, get_modules +from pyt.usage import ( + default_blackbox_mapping_file, + default_trigger_word_file +) from pyt.vulnerabilities import find_vulnerabilities diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 202f4ee4..c67b36c1 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -10,8 +10,6 @@ from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse from pyt.argument_helpers import ( - default_blackbox_mapping_file, - default_trigger_word_file, UImode, VulnerabilityFiles ) @@ -22,7 +20,10 @@ is_function ) from pyt.node_types import Node - +from pyt.usage import ( + default_blackbox_mapping_file, + default_trigger_word_file +) class EngineTest(BaseTestCase): def run_empty(self): From ae9e8e94de6f567aeef8beffcc5efb2e5bfdb136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 23 Apr 2018 12:33:58 +0300 Subject: [PATCH 277/541] nosec_lines --- pyt/__main__.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index fd2ba223..9b197906 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -301,6 +301,7 @@ def main(command_line_args=sys.argv[1:]): analyse(cfg_list, analysis_type=analysis) + nosec_lines = set() vulnerabilities = find_vulnerabilities( cfg_list, analysis, @@ -308,7 +309,8 @@ def main(command_line_args=sys.argv[1:]): VulnerabilityFiles( args.blackbox_mapping_file, args.trigger_word_file - ) + ), + nosec_lines ) if args.ignore_nosec: @@ -319,7 +321,17 @@ def main(command_line_args=sys.argv[1:]): nosec_lines = set( lineno for (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) + if '#nosec' in line or '# nosec' in line) + vulnerabilities = find_vulnerabilities( + cfg_list, + analysis, + ui_mode, + VulnerabilityFiles( + args.blackbox_mapping_file, + args.trigger_word_file + ), + nosec_lines + ) if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) From 1735db7be5d600fdc85af9d08bc5b03cb1edac17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 23 Apr 2018 12:37:20 +0300 Subject: [PATCH 278/541] added nosec_lines parameter --- pyt/vulnerabilities.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index ba7debff..8d76c040 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -73,7 +73,8 @@ def identify_triggers( cfg, sources, sinks, - lattice + lattice, + nosec_lines ): """Identify sources, sinks and sanitisers in a CFG. @@ -89,12 +90,12 @@ def identify_triggers( tainted_nodes = filter_cfg_nodes(cfg, TaintedNode) tainted_trigger_nodes = [TriggerNode('Framework function URL parameter', None, node) for node in tainted_nodes] - sources_in_file = find_triggers(assignment_nodes, sources) + sources_in_file = find_triggers(assignment_nodes, sources, nosec_lines) sources_in_file.extend(tainted_trigger_nodes) find_secondary_sources(assignment_nodes, sources_in_file, lattice) - sinks_in_file = find_triggers(cfg.nodes, sinks) + sinks_in_file = find_triggers(cfg.nodes, sinks, nosec_lines) sanitiser_node_dict = build_sanitiser_node_dict(cfg, sinks_in_file) @@ -170,7 +171,8 @@ def append_node_if_reassigned( def find_triggers( nodes, - trigger_words + trigger_words, + nosec_lines ): """Find triggers from the trigger_word_list in the nodes. @@ -183,7 +185,11 @@ def find_triggers( """ trigger_nodes = list() for node in nodes: - trigger_nodes.extend(iter(label_contains(node, trigger_words))) + if node.line_number not in nosec_lines: + trigger_nodes.extend(iter(label_contains(node, trigger_words))) + else: + pass + return trigger_nodes @@ -466,7 +472,8 @@ def find_vulnerabilities_in_cfg( lattice, ui_mode, blackbox_mapping, - vulnerabilities_list + vulnerabilities_list, + nosec_lines ): """Find vulnerabilities in a cfg. @@ -482,7 +489,8 @@ def find_vulnerabilities_in_cfg( cfg, definitions.sources, definitions.sinks, - lattice + lattice, + nosec_lines ) for sink in triggers.sinks: for source in triggers.sources: @@ -503,7 +511,8 @@ def find_vulnerabilities( cfg_list, analysis_type, ui_mode, - vulnerability_files + vulnerability_files, + nosec_lines ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. @@ -518,19 +527,19 @@ def find_vulnerabilities( """ vulnerabilities = list() definitions = parse(vulnerability_files.triggers) - with open(vulnerability_files.blackbox_mapping) as infile: blackbox_mapping = json.load(infile) for cfg in cfg_list: + find_vulnerabilities_in_cfg( cfg, definitions, Lattice(cfg.nodes, analysis_type), ui_mode, blackbox_mapping, - vulnerabilities + vulnerabilities, + nosec_lines ) with open(vulnerability_files.blackbox_mapping, 'w') as outfile: json.dump(blackbox_mapping, outfile, indent=4) - return vulnerabilities From fb88051e1d988d5890127ef3aa6867adf0db07de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Mon, 23 Apr 2018 12:38:13 +0300 Subject: [PATCH 279/541] Update vulnerabilities.py --- pyt/vulnerabilities.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 8d76c040..5e9bd675 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -189,7 +189,6 @@ def find_triggers( trigger_nodes.extend(iter(label_contains(node, trigger_words))) else: pass - return trigger_nodes From 079a235f9aec15886ab7f4c186a0e80c567b3c7c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 23 Apr 2018 22:24:26 -0700 Subject: [PATCH 280/541] A great minimalist usage.py --- pyt/usage.py | 88 ++++++++++++++++++++-------------------------------- 1 file changed, 34 insertions(+), 54 deletions(-) diff --git a/pyt/usage.py b/pyt/usage.py index 1dc23c07..17d4587b 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -29,36 +29,32 @@ def valid_date(s): raise argparse.ArgumentTypeError(msg) -def _add_entry_group(parser): - entry_group = parser.add_mutually_exclusive_group(required=True) - entry_group.add_argument( +def _add_required_group(parser): + required_group = parser.add_argument_group('required arguments') + required_group.add_argument( '-f', '--filepath', help='Path to the file that should be analysed.', type=str ) - entry_group.add_argument( - '-gr', '--git-repos', - help='Takes a CSV file of git_url, path per entry.', - type=str, - metavar='CSV_FILE' - ) - - -def _add_regular_arguments(parser): - parser.add_argument( + required_group.add_argument( '-r', '--root-directory', help='Add project root, this is important when the entry ' 'file is not at the root of the project.', type=str, metavar='DIR_TO_ANALYZE' ) - parser.add_argument( + + +def _add_optional_group(parser): + optional_group = parser.add_argument_group('optional arguments') + + optional_group.add_argument( '-a', '--adaptor', help='Choose a web framework adaptor: ' 'Flask(Default), Django, Every or Pylons', type=str ) - parser.add_argument( + optional_group.add_argument( '-b', '--baseline', help='Path of a baseline report to compare against ' '(only JSON-formatted files are accepted)', @@ -66,30 +62,24 @@ def _add_regular_arguments(parser): default=False, metavar='BASELINE_JSON_FILE', ) - parser.add_argument( + optional_group.add_argument( '-j', '--json', help='Prints JSON instead of report.', action='store_true', default=False ) - parser.add_argument( + optional_group.add_argument( '-m', '--blackbox-mapping-file', help='Input blackbox mapping file.', type=str, default=default_blackbox_mapping_file ) - parser.add_argument( + optional_group.add_argument( '-t', '--trigger-word-file', - help='Input trigger word file.', + help='Input file with a list of sources and sinks', type=str, default=default_trigger_word_file ) - parser.add_argument( - '-csv', '--csv-path', - help='Give the path of the csv file ' - 'repos should be added to.', - type=str - ) def _add_print_group(parser): @@ -101,42 +91,32 @@ def _add_print_group(parser): default=True ) print_group.add_argument( - '--interactive', + '-i', '--interactive', help='Will ask you about each vulnerability chain and blackbox nodes.', action='store_true', default=False ) - -def _add_search_parser(parser): - subparsers = parser.add_subparsers() - search_parser = subparsers.add_parser( - 'github_search', - help='Searches through github and runs PyT ' - 'on found repositories. This can take some time.' - ) - search_parser.set_defaults(which='search') - search_parser.add_argument( - '-ss', '--search-string', required=True, - help='String for searching for repos on github.', - type=str - ) - search_parser.add_argument( - '-sd', '--start-date', - help='Start date for repo search. ' - 'Criteria used is Created Date.', - type=valid_date, - default=date(2010, 1, 1) - ) - +def _check_required_and_mutually_exclusive_args(parser, args): + if args.filepath is None and args.git_repos is None: + parser.error('one of the arguments -f/--filepath -gr/--git-repos is required') + if args.filepath and args.git_repos: + parser.error('argument -f/--filepath: not allowed with argument -gr/--git-repos') + if args.trim_reassigned_in and args.interactive: + parser.error('argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in') def parse_args(args): + if len(args) == 0: + args.append('-h') parser = argparse.ArgumentParser(prog='python -m pyt') - parser.set_defaults(which='') - - _add_entry_group(parser) - _add_regular_arguments(parser) + parser._action_groups.pop() + _add_required_group(parser) + _add_optional_group(parser) _add_print_group(parser) - _add_search_parser(parser) - return parser.parse_args(args) + args = parser.parse_args(args) + _check_required_and_mutually_exclusive_args( + parser, + args + ) + return args From 867f344e326a1b0a6bafa777c10b39bbd16bd184 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 23 Apr 2018 23:06:14 -0700 Subject: [PATCH 281/541] Take code out of __init__ files, __all__ the things, delete more stuff --- .coveragerc | 3 +- pyt/__main__.py | 40 +-- pyt/argument_helpers.py | 17 -- pyt/cfg/__init__.py | 39 +-- pyt/cfg/make_cfg.py | 38 +++ pyt/github_search.py | 320 -------------------- pyt/repo_runner.py | 92 ------ pyt/vulnerabilities/__init__.py | 42 +-- pyt/vulnerabilities/vulnerabilities.py | 95 +++--- pyt/vulnerabilities/vulnerability_helper.py | 60 +++- tests/command_line_test.py | 34 --- tests/github_search_test.py | 21 -- tests/vulnerabilities_across_files_test.py | 16 +- tests/vulnerabilities_test.py | 34 +-- 14 files changed, 174 insertions(+), 677 deletions(-) delete mode 100644 pyt/argument_helpers.py create mode 100644 pyt/cfg/make_cfg.py delete mode 100644 pyt/github_search.py delete mode 100644 pyt/repo_runner.py delete mode 100644 tests/command_line_test.py delete mode 100644 tests/github_search_test.py diff --git a/.coveragerc b/.coveragerc index 48d1154f..2678c03a 100644 --- a/.coveragerc +++ b/.coveragerc @@ -12,7 +12,6 @@ exclude_lines = source = ./pyt omit = pyt/__main__.py + pyt/usage.py pyt/formatters/json.py pyt/formatters/text.py - pyt/github_search.py - pyt/repo_runner.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 06dc9f1e..b12bdf8b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -5,10 +5,6 @@ from .analysis.constraint_table import initialize_constraint_table from .analysis.fixed_point import analyse -from .argument_helpers import ( - VulnerabilityFiles, - UImode -) from .ast_helper import generate_ast from .baseline import get_vulnerabilities_not_in_baseline from .cfg import make_cfg @@ -23,17 +19,15 @@ is_function, is_function_without_leading_ ) -from .github_search import ( - analyse_repos, - scan_github, - set_github_api_token -) from .project_handler import ( get_directory_modules, get_modules ) from .usage import parse_args -from .vulnerabilities import find_vulnerabilities +from .vulnerabilities import ( + find_vulnerabilities, + UImode +) def main(command_line_args=sys.argv[1:]): @@ -45,25 +39,9 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM - cfg_list = list() - if args.git_repos: - analyse_repos( - args, - ui_mode - ) - exit() - elif args.which == 'search': - set_github_api_token() - scan_github( - args, - ui_mode - ) - exit() - path = os.path.normpath(args.filepath) - - if args.project_root: - directory = os.path.normpath(args.project_root) + if args.root_directory: + directory = os.path.normpath(args.root_directory) else: directory = os.path.dirname(path) project_modules = get_modules(directory) @@ -99,10 +77,8 @@ def main(command_line_args=sys.argv[1:]): vulnerabilities = find_vulnerabilities( cfg_list, ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ) + args.blackbox_mapping_file, + args.trigger_word_file ) if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline( diff --git a/pyt/argument_helpers.py b/pyt/argument_helpers.py deleted file mode 100644 index bd076775..00000000 --- a/pyt/argument_helpers.py +++ /dev/null @@ -1,17 +0,0 @@ -from collections import namedtuple -from enum import Enum - - -class UImode(Enum): - INTERACTIVE = 0 - NORMAL = 1 - TRIM = 2 - - -VulnerabilityFiles = namedtuple( - 'VulnerabilityFiles', - ( - 'blackbox_mapping', - 'triggers' - ) -) diff --git a/pyt/cfg/__init__.py b/pyt/cfg/__init__.py index 710c5f66..30037a72 100644 --- a/pyt/cfg/__init__.py +++ b/pyt/cfg/__init__.py @@ -1,38 +1,3 @@ -from .expr_visitor import ExprVisitor +from .make_cfg import make_cfg - -class CFG(): - def __init__(self, nodes, blackbox_assignments): - self.nodes = nodes - self.blackbox_assignments = blackbox_assignments - - def __repr__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) - return output - - def __str__(self): - output = '' - for x, n in enumerate(self.nodes): - output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) - return output - - -def make_cfg( - node, - project_modules, - local_modules, - filename, - module_definitions=None -): - visitor = ExprVisitor( - node, - project_modules, - local_modules, filename, - module_definitions - ) - return CFG( - visitor.nodes, - visitor.blackbox_assignments - ) +__all__ = ['make_cfg'] diff --git a/pyt/cfg/make_cfg.py b/pyt/cfg/make_cfg.py new file mode 100644 index 00000000..710c5f66 --- /dev/null +++ b/pyt/cfg/make_cfg.py @@ -0,0 +1,38 @@ +from .expr_visitor import ExprVisitor + + +class CFG(): + def __init__(self, nodes, blackbox_assignments): + self.nodes = nodes + self.blackbox_assignments = blackbox_assignments + + def __repr__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + repr(n), '\n\n')) + return output + + def __str__(self): + output = '' + for x, n in enumerate(self.nodes): + output = ''.join((output, 'Node: ' + str(x) + ' ' + str(n), '\n\n')) + return output + + +def make_cfg( + node, + project_modules, + local_modules, + filename, + module_definitions=None +): + visitor = ExprVisitor( + node, + project_modules, + local_modules, filename, + module_definitions + ) + return CFG( + visitor.nodes, + visitor.blackbox_assignments + ) diff --git a/pyt/github_search.py b/pyt/github_search.py deleted file mode 100644 index e58a5ee3..00000000 --- a/pyt/github_search.py +++ /dev/null @@ -1,320 +0,0 @@ -import os -import re -import requests -import sys -import time -from abc import ( - ABCMeta, - abstractmethod -) -from datetime import ( - date, - datetime, - timedelta -) -from . import repo_runner -from .analysis.constraint_table import initialize_constraint_table -from .analysis.fixed_point import analyse -from .argument_helpers import VulnerabilityFiles -from .ast_helper import generate_ast -from .cfg import make_cfg -from .formatters import ( - json, - text -) -from .project_handler import ( - get_directory_modules, - get_modules -) -from .repo_runner import ( - add_repo_to_csv, - get_repos, - NoEntryPathError -) -from .vulnerabilities import find_vulnerabilities - - -DEFAULT_TIMEOUT_IN_SECONDS = 60 -GITHUB_API_URL = 'https://api.github.com' -GITHUB_OAUTH_TOKEN = None -NUMBER_OF_REQUESTS_ALLOWED_PER_MINUTE = 30 # Rate limit is 10 and 30 with auth -SEARCH_CODE_URL = GITHUB_API_URL + '/search/code' -SEARCH_REPO_URL = GITHUB_API_URL + '/search/repositories' - - -def set_github_api_token(): - global GITHUB_OAUTH_TOKEN - try: - GITHUB_OAUTH_TOKEN = open( - 'github_access_token.pyt', - 'r' - ).read().strip() - except FileNotFoundError: - print('Insert your GitHub access token' - ' in the github_access_token.pyt file in the pyt package' - ' if you want to use GitHub search.') - exit(0) - - -class Query: - def __init__( - self, - base_url, - search_string, - repo=None, - time_interval=None, - per_page=100 - ): - repo = self._repo_parameter(repo) - time_interval = self._time_interval_parameter(time_interval) - search_string = self._search_parameter(search_string) - per_page = self._per_page_parameter(per_page) - parameters = self._construct_parameters([ - search_string, - 'language:python', - repo, - time_interval, - per_page - ]) - self.query_string = self._construct_query(base_url, parameters) - - def _construct_query(self, base_url, parameters): - query = base_url - query += '+'.join(parameters) - return query - - def _construct_parameters(self, parameters): - r = list() - for p in parameters: - if p: - r.append(p) - return r - - def _search_parameter(self, search_string): - return '?q="' + search_string + '"' - - def _repo_parameter(self, repo): - if repo: - return 'repo:' + repo.name - else: - return None - - def _time_interval_parameter(self, created): - if created: - p = re.compile('\d\d\d\d-\d\d-\d\d \.\. \d\d\d\d-\d\d-\d\d') - m = p.match(created) - if m.group(): - return 'created:"' + m.group() + '"' - else: - print('The time interval parameter should be ' - 'of the form: "YYYY-MM-DD .. YYYY-MM-DD"') - exit(1) - return None - - def _per_page_parameter(self, per_page): - if per_page > 100: - print('The GitHub api does not allow pages with over 100 results.') - exit(1) - return '&per_page={}'.format(per_page) - - -class IncompleteResultsError(Exception): - pass - - -class RequestCounter: - def __init__(self, timeout=DEFAULT_TIMEOUT_IN_SECONDS): - self.timeout_in_seconds = timeout # timeout in seconds - self.counter = list() - - def append(self, request_time): - if len(self.counter) < NUMBER_OF_REQUESTS_ALLOWED_PER_MINUTE: - self.counter.append(request_time) - else: - delta = request_time - self.counter[0] - if delta.seconds < self.timeout_in_seconds: - print( - 'Maximum requests "{}" reached' - ' timing out for {} seconds.' - .format( - len(self.counter), - self.timeout_in_seconds - delta.seconds - ) - ) - self.timeout(self.timeout_in_seconds - delta.seconds) - self.counter.pop(0) # pop index 0 - self.counter.append(datetime.now()) - else: - self.counter.pop(0) # pop index 0 - self.counter.append(request_time) - - def timeout(self, time_in_seconds=DEFAULT_TIMEOUT_IN_SECONDS): - time.sleep(time_in_seconds) - - -class Search(metaclass=ABCMeta): - request_counter = RequestCounter() - - def __init__(self, query): - self.total_count = None - self.incomplete_results = None - self.results = list() - self._request(query.query_string) - - def _request(self, query_string): - Search.request_counter.append(datetime.now()) - - print('Making request: {}'.format(query_string)) - - headers = {'Authorization': 'token ' + GITHUB_OAUTH_TOKEN} - r = requests.get(query_string, headers=headers) - - response_body = r.json() - - if r.status_code != 200: - print('Bad request:') - print(r.status_code) - print(response_body) - Search.request_counter.timeout() - self._request(query_string) - return - - self.total_count = response_body['total_count'] - print('Number of results: {}.'.format(self.total_count)) - self.incomplete_results = response_body['incomplete_results'] - if self.incomplete_results: - raise IncompleteResultsError() - self.parse_results(response_body['items']) - - @abstractmethod - def parse_results(self, json_results): - pass - - -class SearchRepo(Search): - def parse_results(self, json_results): - for item in json_results: - self.results.append(Repo(item)) - - -class SearchCode(Search): - def parse_results(self, json_results): - for item in json_results: - self.results.append(File(item)) - - -class File: - def __init__(self, item): - self.name = item['name'] - self.repo = Repo(item['repository']) - - -class Repo: - def __init__(self, item): - self.url = item['html_url'] - self.name = item['full_name'] - - -def get_dates( - start_date, - end_date=date.today() -): - interval = 7 - delta = end_date - start_date - for i in range((delta.days // interval) + 1): - yield ( - start_date + timedelta(days=i * interval), - start_date + timedelta(days=i * interval + interval) - ) - - -def analyse_repo( - args, - github_repo, - ui_mode -): - directory = os.path.dirname(github_repo.path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - tree = generate_ast(github_repo.path) - cfg = make_cfg( - tree, - project_modules, - local_modules, - github_repo.path - ) - cfg_list = list(cfg) - - initialize_constraint_table(cfg_list) - analyse(cfg_list) - vulnerabilities = find_vulnerabilities( - cfg_list, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ) - ) - return vulnerabilities - - -def scan_github( - cmd_line_args, - ui_mode -): - for range_start, range_end in get_dates(cmd_line_args.start_date): - query = Query( - SEARCH_REPO_URL, - cmd_line_args.search_string, - time_interval='{} .. {}'.format( - range_start, - range_end - ), - per_page=100 - ) - search_repos = SearchRepo(query) - for repo in search_repos.results: - query = Query( - SEARCH_CODE_URL, - 'app = Flask(__name__)', - repo - ) - search_code = SearchCode(query) - if search_code.results: - repo = repo_runner.Repo(repo.url) - try: - repo.clone() - except NoEntryPathError as err: - print('NoEntryPathError for {}'.format(repo.url)) - continue - vulnerabilities = analyse_repo( - cmd_line_args, - repo, - ui_mode - ) - with open(repo.path + '.pyt', 'a') as fd: - if cmd_line_args.json: - json.report(vulnerabilities, fd) - else: - text.report(vulnerabilities, fd) - - if vulnerabilities: - add_repo_to_csv(cmd_line_args.csv_path, repo) - repo.clean_up() - - -def analyse_repos(cmd_line_args, ui_mode): - repos = get_repos(cmd_line_args.git_repos) - for repo in repos: - repo.clone() - vulnerabilities = analyse_repo( - cmd_line_args, - repo, - ui_mode - ) - if cmd_line_args.json: - json.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) - if not vulnerabilities: - repo.clean_up() diff --git a/pyt/repo_runner.py b/pyt/repo_runner.py deleted file mode 100644 index 7d6acba9..00000000 --- a/pyt/repo_runner.py +++ /dev/null @@ -1,92 +0,0 @@ -"""Runs PyT on a CSV file of git repos.""" -import os -import shutil - -import git - - -DEFAULT_CSV_PATH = 'flask_open_source_apps.csv' - - -class NoEntryPathError(Exception): - pass - - -class Repo: - """Holder for a repo with git URL and - a path to where the analysis should start.""" - - def __init__( - self, - URL, - path=None - ): - self.URL = URL.strip() - self.directory = None - self.path = path.strip() if path else None - - def clone(self): - """Clone repo and update path to match the current one.""" - - repo = self.URL.split('/')[-1].split('.') - if len(repo) > 1: - self.directory = '.'.join(repo[:-1]) - else: - self.directory = repo[0] - - if self.directory not in os.listdir(): - git.Git().clone(self.URL) - - if self.path is None: - self._find_entry_path() - elif self.path[0] == '/': - self.path = self.path[1:] - self.path = os.path.join(self.directory, self.path) - - def _find_entry_path(self): - for root, dirs, files in os.walk(self.directory): - for f in files: - if f.endswith('.py'): - with open(os.path.join(root, f), 'r') as fd: - if 'app = Flask(__name__)' in fd.read(): - self.path = os.path.join(root, f) - return - raise NoEntryPathError( - 'No entry path found in repo {}.' - .format(self.URL) - ) - - def clean_up(self): - """Deletes the repo""" - shutil.rmtree(self.directory) - - -def get_repos(csv_path): - """Parses a CSV file containing repos.""" - repos = list() - with open(csv_path, 'r') as fd: - for line in fd: - url, path = line.split(',') - repos.append(Repo(url, path)) - return repos - - -def add_repo_to_csv( - repo, - csv_path=DEFAULT_CSV_PATH -): - try: - with open(csv_path, 'a') as fd: - fd.write( - '{}{}, {}'.format( - os.linesep, - repo.URL, - repo.path - ) - ) - except FileNotFoundError: - print('-csv file not used and fallback path not found: {}' - .format(DEFAULT_CSV_PATH)) - print('To specify the csv_path ' - 'use the "-csv" option.') - exit(1) diff --git a/pyt/vulnerabilities/__init__.py b/pyt/vulnerabilities/__init__.py index 07224a49..cd9670bc 100644 --- a/pyt/vulnerabilities/__init__.py +++ b/pyt/vulnerabilities/__init__.py @@ -1,40 +1,4 @@ -import json +from .vulnerabilities import find_vulnerabilities +from .vulnerability_helper import UImode -from ..analysis.lattice import Lattice -from .trigger_definitions_parser import parse -from .vulnerabilities import find_vulnerabilities_in_cfg - - -def find_vulnerabilities( - cfg_list, - ui_mode, - vulnerability_files -): - """Find vulnerabilities in a list of CFGs from a trigger_word_file. - - Args: - cfg_list(list[CFG]): the list of CFGs to scan. - ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. - vulnerability_files(VulnerabilityFiles): contains trigger words and blackbox_mapping files - - Returns: - A list of vulnerabilities. - """ - vulnerabilities = list() - definitions = parse(vulnerability_files.triggers) - - with open(vulnerability_files.blackbox_mapping) as infile: - blackbox_mapping = json.load(infile) - for cfg in cfg_list: - find_vulnerabilities_in_cfg( - cfg, - definitions, - Lattice(cfg.nodes), - ui_mode, - blackbox_mapping, - vulnerabilities - ) - with open(vulnerability_files.blackbox_mapping, 'w') as outfile: - json.dump(blackbox_mapping, outfile, indent=4) - - return vulnerabilities +__all__ = ['find_vulnerabilities', 'UImode'] diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index fafa212c..5132f7b5 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -1,10 +1,10 @@ """Module for finding vulnerabilities based on a definitions file.""" import ast -from collections import namedtuple +import json from ..analysis.definition_chains import build_def_use_chain -from ..argument_helpers import UImode +from ..analysis.lattice import Lattice from ..node_types import ( AssignmentNode, BBorBInode, @@ -12,60 +12,18 @@ TaintedNode ) from ..right_hand_side_visitor import RHSVisitor +from .trigger_definitions_parser import parse from ..vars_visitor import VarsVisitor from .vulnerability_helper import ( + Sanitiser, + TriggerNode, + Triggers, vuln_factory, - VulnerabilityType + VulnerabilityType, + UImode ) -Sanitiser = namedtuple( - 'Sanitiser', - ( - 'trigger_word', - 'cfg_node' - ) -) -Triggers = namedtuple( - 'Triggers', - ( - 'sources', - 'sinks', - 'sanitiser_dict' - ) -) - - -class TriggerNode(): - def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=[]): - self.trigger_word = trigger_word - self.sanitisers = sanitisers - self.cfg_node = cfg_node - self.secondary_nodes = secondary_nodes - - def append(self, cfg_node): - if not cfg_node == self.cfg_node: - if self.secondary_nodes and cfg_node not in self.secondary_nodes: - self.secondary_nodes.append(cfg_node) - elif not self.secondary_nodes: - self.secondary_nodes = [cfg_node] - - def __repr__(self): - output = 'TriggerNode(' - - if self.trigger_word: - output = '{} trigger_word is {}, '.format( - output, - self.trigger_word - ) - - return ( - output + - 'sanitisers are {}, '.format(self.sanitisers) + - 'cfg_node is {})\n'.format(self.cfg_node) - ) - - def identify_triggers( cfg, sources, @@ -497,3 +455,40 @@ def find_vulnerabilities_in_cfg( ) if vulnerability: vulnerabilities_list.append(vulnerability) + + +def find_vulnerabilities( + cfg_list, + ui_mode, + blackbox_mapping_file, + source_sink_file +): + """Find vulnerabilities in a list of CFGs from a trigger_word_file. + + Args: + cfg_list(list[CFG]): the list of CFGs to scan. + ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + blackbox_mapping_file(str) + source_sink_file(str) + + Returns: + A list of vulnerabilities. + """ + vulnerabilities = list() + definitions = parse(source_sink_file) + + with open(blackbox_mapping_file) as infile: + blackbox_mapping = json.load(infile) + for cfg in cfg_list: + find_vulnerabilities_in_cfg( + cfg, + definitions, + Lattice(cfg.nodes), + ui_mode, + blackbox_mapping, + vulnerabilities + ) + with open(blackbox_mapping_file, 'w') as outfile: + json.dump(blackbox_mapping, outfile, indent=4) + + return vulnerabilities diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index 832160e0..d31c5ef7 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -1,8 +1,7 @@ -"""This module contains vulnerability types and helpers. +"""This module contains vulnerability types, Enums, nodes and helpers.""" -It is only used in vulnerabilities.py -""" from enum import Enum +from collections import namedtuple class VulnerabilityType(Enum): @@ -12,6 +11,12 @@ class VulnerabilityType(Enum): UNKNOWN = 3 +class UImode(Enum): + INTERACTIVE = 0 + NORMAL = 1 + TRIM = 2 + + def vuln_factory(vulnerability_type): if vulnerability_type == VulnerabilityType.UNKNOWN: return UnknownVulnerability @@ -134,3 +139,52 @@ def __str__(self): '\nThis vulnerability is unknown due to: ' + str(self.unknown_assignment) ) + + +Sanitiser = namedtuple( + 'Sanitiser', + ( + 'trigger_word', + 'cfg_node' + ) +) + + +Triggers = namedtuple( + 'Triggers', + ( + 'sources', + 'sinks', + 'sanitiser_dict' + ) +) + + +class TriggerNode(): + def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=[]): + self.trigger_word = trigger_word + self.sanitisers = sanitisers + self.cfg_node = cfg_node + self.secondary_nodes = secondary_nodes + + def append(self, cfg_node): + if not cfg_node == self.cfg_node: + if self.secondary_nodes and cfg_node not in self.secondary_nodes: + self.secondary_nodes.append(cfg_node) + elif not self.secondary_nodes: + self.secondary_nodes = [cfg_node] + + def __repr__(self): + output = 'TriggerNode(' + + if self.trigger_word: + output = '{} trigger_word is {}, '.format( + output, + self.trigger_word + ) + + return ( + output + + 'sanitisers are {}, '.format(self.sanitisers) + + 'cfg_node is {})\n'.format(self.cfg_node) + ) diff --git a/tests/command_line_test.py b/tests/command_line_test.py deleted file mode 100644 index 6dbd79f2..00000000 --- a/tests/command_line_test.py +++ /dev/null @@ -1,34 +0,0 @@ -"""This just tests __main__.py""" -import sys -from contextlib import contextmanager -from io import StringIO - -from .base_test_case import BaseTestCase -from pyt.__main__ import parse_args - - -@contextmanager -def capture_sys_output(): - capture_out, capture_err = StringIO(), StringIO() - current_out, current_err = sys.stdout, sys.stderr - try: - sys.stdout, sys.stderr = capture_out, capture_err - yield capture_out, capture_err - finally: - sys.stdout, sys.stderr = current_out, current_err - - -class CommandLineTest(BaseTestCase): - def test_no_args(self): - with self.assertRaises(SystemExit): - with capture_sys_output() as (_, stderr): - parse_args([]) - - EXPECTED = """usage: python -m pyt [-h] (-f FILEPATH | -gr GIT_REPOS) [-pr PROJECT_ROOT] - [-csv CSV_PATH] [-t TRIGGER_WORD_FILE] - [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] - [-a ADAPTOR] [-j] [-b BASELINE] [-trim | -i] - {github_search} ...\n""" + \ - "python -m pyt: error: one of the arguments " + \ - "-f/--filepath -gr/--git-repos is required\n" - self.assertEqual(stderr.getvalue(), EXPECTED) diff --git a/tests/github_search_test.py b/tests/github_search_test.py deleted file mode 100644 index be1539b1..00000000 --- a/tests/github_search_test.py +++ /dev/null @@ -1,21 +0,0 @@ -import unittest -from datetime import date - -from pyt.github_search import get_dates - - -class GetDatesTest(unittest.TestCase): - def test_get_dates(self): - date_ranges = get_dates( - date(2018, 1, 1), - date(2018, 1, 31) - ) - EXPECTED_RANGE = ( - ('2018-01-01', '2018-01-08'), - ('2018-01-08', '2018-01-15'), - ('2018-01-15', '2018-01-22'), - ('2018-01-22', '2018-01-29') - ) - for date_range, expected_range in zip(date_ranges, EXPECTED_RANGE): - for date_, expected_date in zip(date_range, expected_range): - assert str(date_) == expected_date diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index ef6cceb5..b405383b 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -1,10 +1,7 @@ import os from .base_test_case import BaseTestCase -from pyt.argument_helpers import ( - UImode, - VulnerabilityFiles -) + from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor @@ -14,7 +11,10 @@ default_blackbox_mapping_file, default_trigger_word_file ) -from pyt.vulnerabilities import find_vulnerabilities +from pyt.vulnerabilities import ( + find_vulnerabilities, + UImode +) class EngineTest(BaseTestCase): @@ -37,10 +37,8 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - default_trigger_word_file - ) + default_blackbox_mapping_file, + default_trigger_word_file ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index c67b36c1..649a0c28 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -2,17 +2,8 @@ from .base_test_case import BaseTestCase -from pyt.vulnerabilities import ( - find_vulnerabilities, - trigger_definitions_parser, - vulnerabilities -) from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse -from pyt.argument_helpers import ( - UImode, - VulnerabilityFiles -) from pyt.framework_adaptor import FrameworkAdaptor from pyt.framework_helper import ( is_django_view_function, @@ -24,6 +15,13 @@ default_blackbox_mapping_file, default_trigger_word_file ) +from pyt.vulnerabilities import ( + find_vulnerabilities, + trigger_definitions_parser, + UImode, + vulnerabilities +) + class EngineTest(BaseTestCase): def run_empty(self): @@ -135,10 +133,8 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - default_trigger_word_file - ) + default_blackbox_mapping_file, + default_trigger_word_file ) def test_find_vulnerabilities_assign_other_var(self): @@ -529,10 +525,8 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - trigger_word_file - ) + default_blackbox_mapping_file, + trigger_word_file ) def test_django_view_param(self): @@ -576,10 +570,8 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - trigger_word_file - ) + default_blackbox_mapping_file, + trigger_word_file ) def test_self_is_not_tainted(self): From d1471afca18fdd07ccba7e7e8f81eb09269d44e0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 23 Apr 2018 23:17:01 -0700 Subject: [PATCH 282/541] Delete baseline.py, move to vulnerability_helper --- pyt/__main__.py | 2 +- pyt/baseline.py | 13 ------------- pyt/usage.py | 7 +++---- pyt/vulnerabilities/__init__.py | 12 ++++++++++-- pyt/vulnerabilities/vulnerability_helper.py | 13 +++++++++++++ 5 files changed, 27 insertions(+), 20 deletions(-) delete mode 100644 pyt/baseline.py diff --git a/pyt/__main__.py b/pyt/__main__.py index b12bdf8b..dc6879b0 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -6,7 +6,6 @@ from .analysis.constraint_table import initialize_constraint_table from .analysis.fixed_point import analyse from .ast_helper import generate_ast -from .baseline import get_vulnerabilities_not_in_baseline from .cfg import make_cfg from .formatters import ( json, @@ -26,6 +25,7 @@ from .usage import parse_args from .vulnerabilities import ( find_vulnerabilities, + get_vulnerabilities_not_in_baseline, UImode ) diff --git a/pyt/baseline.py b/pyt/baseline.py deleted file mode 100644 index 1dc3128b..00000000 --- a/pyt/baseline.py +++ /dev/null @@ -1,13 +0,0 @@ -import json - - -def get_vulnerabilities_not_in_baseline( - vulnerabilities, - baseline_file -): - baseline = json.load(open(baseline_file)) - output = list() - for vuln in vulnerabilities: - if vuln.as_dict() not in baseline['vulnerabilities']: - output.append(vuln) - return(output) diff --git a/pyt/usage.py b/pyt/usage.py index 17d4587b..37fa3bc2 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -1,9 +1,6 @@ import argparse import os -from datetime import ( - date, - datetime -) +from datetime import datetime default_blackbox_mapping_file = os.path.join( @@ -97,6 +94,7 @@ def _add_print_group(parser): default=False ) + def _check_required_and_mutually_exclusive_args(parser, args): if args.filepath is None and args.git_repos is None: parser.error('one of the arguments -f/--filepath -gr/--git-repos is required') @@ -105,6 +103,7 @@ def _check_required_and_mutually_exclusive_args(parser, args): if args.trim_reassigned_in and args.interactive: parser.error('argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in') + def parse_args(args): if len(args) == 0: args.append('-h') diff --git a/pyt/vulnerabilities/__init__.py b/pyt/vulnerabilities/__init__.py index cd9670bc..992af18a 100644 --- a/pyt/vulnerabilities/__init__.py +++ b/pyt/vulnerabilities/__init__.py @@ -1,4 +1,12 @@ from .vulnerabilities import find_vulnerabilities -from .vulnerability_helper import UImode +from .vulnerability_helper import ( + get_vulnerabilities_not_in_baseline, + UImode +) -__all__ = ['find_vulnerabilities', 'UImode'] + +__all__ = [ + 'find_vulnerabilities', + 'get_vulnerabilities_not_in_baseline', + 'UImode' +] diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index d31c5ef7..bd2407dd 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -1,5 +1,6 @@ """This module contains vulnerability types, Enums, nodes and helpers.""" +import json from enum import Enum from collections import namedtuple @@ -188,3 +189,15 @@ def __repr__(self): 'sanitisers are {}, '.format(self.sanitisers) + 'cfg_node is {})\n'.format(self.cfg_node) ) + + +def get_vulnerabilities_not_in_baseline( + vulnerabilities, + baseline_file +): + baseline = json.load(open(baseline_file)) + output = list() + for vuln in vulnerabilities: + if vuln.as_dict() not in baseline['vulnerabilities']: + output.append(vuln) + return(output) From 7ce2d58d58f3443cd6500a0427bbf1e6c3e4d526 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 23 Apr 2018 23:36:59 -0700 Subject: [PATCH 283/541] Make core, web_frameworks and helper_visitors directories --- pyt/{ => core}/ast_helper.py | 0 pyt/{ => core}/module_definitions.py | 0 pyt/{ => core}/node_types.py | 0 pyt/{ => core}/project_handler.py | 0 pyt/{ => helper_visitors}/label_visitor.py | 0 pyt/{ => helper_visitors}/right_hand_side_visitor.py | 0 pyt/{ => helper_visitors}/vars_visitor.py | 0 pyt/{ => web_frameworks}/framework_adaptor.py | 0 pyt/{ => web_frameworks}/framework_helper.py | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename pyt/{ => core}/ast_helper.py (100%) rename pyt/{ => core}/module_definitions.py (100%) rename pyt/{ => core}/node_types.py (100%) rename pyt/{ => core}/project_handler.py (100%) rename pyt/{ => helper_visitors}/label_visitor.py (100%) rename pyt/{ => helper_visitors}/right_hand_side_visitor.py (100%) rename pyt/{ => helper_visitors}/vars_visitor.py (100%) rename pyt/{ => web_frameworks}/framework_adaptor.py (100%) rename pyt/{ => web_frameworks}/framework_helper.py (100%) diff --git a/pyt/ast_helper.py b/pyt/core/ast_helper.py similarity index 100% rename from pyt/ast_helper.py rename to pyt/core/ast_helper.py diff --git a/pyt/module_definitions.py b/pyt/core/module_definitions.py similarity index 100% rename from pyt/module_definitions.py rename to pyt/core/module_definitions.py diff --git a/pyt/node_types.py b/pyt/core/node_types.py similarity index 100% rename from pyt/node_types.py rename to pyt/core/node_types.py diff --git a/pyt/project_handler.py b/pyt/core/project_handler.py similarity index 100% rename from pyt/project_handler.py rename to pyt/core/project_handler.py diff --git a/pyt/label_visitor.py b/pyt/helper_visitors/label_visitor.py similarity index 100% rename from pyt/label_visitor.py rename to pyt/helper_visitors/label_visitor.py diff --git a/pyt/right_hand_side_visitor.py b/pyt/helper_visitors/right_hand_side_visitor.py similarity index 100% rename from pyt/right_hand_side_visitor.py rename to pyt/helper_visitors/right_hand_side_visitor.py diff --git a/pyt/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py similarity index 100% rename from pyt/vars_visitor.py rename to pyt/helper_visitors/vars_visitor.py diff --git a/pyt/framework_adaptor.py b/pyt/web_frameworks/framework_adaptor.py similarity index 100% rename from pyt/framework_adaptor.py rename to pyt/web_frameworks/framework_adaptor.py diff --git a/pyt/framework_helper.py b/pyt/web_frameworks/framework_helper.py similarity index 100% rename from pyt/framework_helper.py rename to pyt/web_frameworks/framework_helper.py From 9a4555e724b2b0f629ad5920abaa8ae20664c71e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 13:15:22 -0700 Subject: [PATCH 284/541] Make tests pass with the 'Make core, web_frameworks and helper_visitors directories' change --- pyt/__main__.py | 14 +- pyt/analysis/definition_chains.py | 2 +- pyt/analysis/lattice.py | 2 +- pyt/analysis/reaching_definitions_taint.py | 2 +- pyt/cfg/expr_visitor.py | 26 ++-- pyt/cfg/expr_visitor_helper.py | 2 +- pyt/cfg/stmt_visitor.py | 18 ++- pyt/cfg/stmt_visitor_helper.py | 2 +- pyt/core/node_types.py | 2 +- pyt/helper_visitors/__init__.py | 10 ++ pyt/helper_visitors/vars_visitor.py | 2 +- pyt/vulnerabilities/vulnerabilities.py | 8 +- pyt/web_frameworks/__init__.py | 20 +++ pyt/web_frameworks/framework_adaptor.py | 8 +- pyt/web_frameworks/framework_helper.py | 18 +-- tests/__main__.py | 6 +- tests/base_test_case.py | 4 +- tests/cfg_test.py | 144 +++++++++++++++------ tests/framework_helper_test.py | 11 +- tests/import_test.py | 34 ++--- tests/label_visitor_test.py | 42 +++--- tests/nested_functions_test.py | 6 +- tests/project_handler_test.py | 26 ++-- tests/vars_visitor_test.py | 3 +- tests/vulnerabilities_across_files_test.py | 11 +- tests/vulnerabilities_test.py | 14 +- 26 files changed, 274 insertions(+), 163 deletions(-) create mode 100644 pyt/helper_visitors/__init__.py create mode 100644 pyt/web_frameworks/__init__.py diff --git a/pyt/__main__.py b/pyt/__main__.py index dc6879b0..7831a177 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -11,13 +11,6 @@ json, text ) -from .framework_adaptor import FrameworkAdaptor -from .framework_helper import ( - is_django_view_function, - is_flask_route_function, - is_function, - is_function_without_leading_ -) from .project_handler import ( get_directory_modules, get_modules @@ -28,6 +21,13 @@ get_vulnerabilities_not_in_baseline, UImode ) +from pyt.web_frameworks import ( + FrameworkAdaptor, + is_django_view_function, + is_flask_route_function, + is_function, + is_function_without_leading_ +) def main(command_line_args=sys.argv[1:]): diff --git a/pyt/analysis/definition_chains.py b/pyt/analysis/definition_chains.py index e4c79c83..fad898b6 100644 --- a/pyt/analysis/definition_chains.py +++ b/pyt/analysis/definition_chains.py @@ -1,7 +1,7 @@ from collections import defaultdict from .constraint_table import constraint_table -from ..node_types import AssignmentNode +from ..core.node_types import AssignmentNode def get_constraint_nodes( diff --git a/pyt/analysis/lattice.py b/pyt/analysis/lattice.py index 148237c2..5ffcec11 100644 --- a/pyt/analysis/lattice.py +++ b/pyt/analysis/lattice.py @@ -1,5 +1,5 @@ from .constraint_table import constraint_table -from ..node_types import AssignmentNode +from ..core.node_types import AssignmentNode def get_lattice_elements(cfg_nodes): diff --git a/pyt/analysis/reaching_definitions_taint.py b/pyt/analysis/reaching_definitions_taint.py index 6ec26e01..dad8e9e1 100644 --- a/pyt/analysis/reaching_definitions_taint.py +++ b/pyt/analysis/reaching_definitions_taint.py @@ -2,8 +2,8 @@ constraint_join, constraint_table ) +from ..core.node_types import AssignmentNode from .lattice import Lattice -from ..node_types import AssignmentNode class ReachingDefinitionsTaintAnalysis(): diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index 2301fce6..b4a96168 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -1,20 +1,12 @@ import ast -from .alias_helper import ( - handle_aliases_in_calls -) -from ..ast_helper import ( +from .alias_helper import handle_aliases_in_calls +from ..core.ast_helper import ( Arguments, get_call_names_as_string ) -from .expr_visitor_helper import ( - BUILTINS, - return_connection_handler, - SavedVariable -) -from ..label_visitor import LabelVisitor -from ..module_definitions import ModuleDefinitions -from ..node_types import ( +from ..core.module_definitions import ModuleDefinitions +from ..core.node_types import ( AssignmentCallNode, AssignmentNode, BBorBInode, @@ -25,7 +17,15 @@ RestoreNode, ReturnNode ) -from ..right_hand_side_visitor import RHSVisitor +from .expr_visitor_helper import ( + BUILTINS, + return_connection_handler, + SavedVariable +) +from ..helper_visitors import ( + LabelVisitor, + RHSVisitor +) from .stmt_visitor import StmtVisitor from .stmt_visitor_helper import CALL_IDENTIFIER diff --git a/pyt/cfg/expr_visitor_helper.py b/pyt/cfg/expr_visitor_helper.py index 27e1df78..9667f7c1 100644 --- a/pyt/cfg/expr_visitor_helper.py +++ b/pyt/cfg/expr_visitor_helper.py @@ -1,6 +1,6 @@ from collections import namedtuple -from ..node_types import ConnectToExitNode +from ..core.node_types import ConnectToExitNode SavedVariable = namedtuple( diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 85ed523c..06a985e5 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -9,17 +9,16 @@ not_as_alias_handler, retrieve_import_alias_mapping ) -from ..ast_helper import ( +from ..core.ast_helper import ( generate_ast, get_call_names_as_string ) -from ..label_visitor import LabelVisitor -from ..module_definitions import ( +from ..core.module_definitions import ( LocalModuleDefinition, ModuleDefinition, ModuleDefinitions ) -from ..node_types import ( +from ..core.node_types import ( AssignmentNode, AssignmentCallNode, BBorBInode, @@ -33,8 +32,14 @@ ReturnNode, TryNode ) -from ..project_handler import get_directory_modules -from ..right_hand_side_visitor import RHSVisitor +from ..core.project_handler import ( + get_directory_modules +) +from ..helper_visitors import ( + LabelVisitor, + RHSVisitor, + VarsVisitor +) from .stmt_visitor_helper import ( CALL_IDENTIFIER, ConnectStatements, @@ -45,7 +50,6 @@ get_last_statements, remove_breaks ) -from ..vars_visitor import VarsVisitor class StmtVisitor(ast.NodeVisitor): diff --git a/pyt/cfg/stmt_visitor_helper.py b/pyt/cfg/stmt_visitor_helper.py index a52f22b6..407df31f 100644 --- a/pyt/cfg/stmt_visitor_helper.py +++ b/pyt/cfg/stmt_visitor_helper.py @@ -2,7 +2,7 @@ import random from collections import namedtuple -from ..node_types import ( +from ..core.node_types import ( AssignmentCallNode, BBorBInode, BreakNode, diff --git a/pyt/core/node_types.py b/pyt/core/node_types.py index 3819963a..6cc2f1eb 100644 --- a/pyt/core/node_types.py +++ b/pyt/core/node_types.py @@ -1,7 +1,7 @@ """This module contains all of the CFG nodes types.""" from collections import namedtuple -from .label_visitor import LabelVisitor +from ..helper_visitors import LabelVisitor ControlFlowNode = namedtuple( diff --git a/pyt/helper_visitors/__init__.py b/pyt/helper_visitors/__init__.py new file mode 100644 index 00000000..ffd5f878 --- /dev/null +++ b/pyt/helper_visitors/__init__.py @@ -0,0 +1,10 @@ +from .label_visitor import LabelVisitor +from .right_hand_side_visitor import RHSVisitor +from .vars_visitor import VarsVisitor + + +__all__ = [ + 'LabelVisitor', + 'RHSVisitor', + 'VarsVisitor' +] diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index f64abd9e..bda24c9b 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -1,7 +1,7 @@ import ast import itertools -from .ast_helper import get_call_names +from ..core.ast_helper import get_call_names class VarsVisitor(ast.NodeVisitor): diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 5132f7b5..e8786db8 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -5,15 +5,17 @@ from ..analysis.definition_chains import build_def_use_chain from ..analysis.lattice import Lattice -from ..node_types import ( +from ..core.node_types import ( AssignmentNode, BBorBInode, IfNode, TaintedNode ) -from ..right_hand_side_visitor import RHSVisitor +from ..helper_visitors import ( + RHSVisitor, + VarsVisitor +) from .trigger_definitions_parser import parse -from ..vars_visitor import VarsVisitor from .vulnerability_helper import ( Sanitiser, TriggerNode, diff --git a/pyt/web_frameworks/__init__.py b/pyt/web_frameworks/__init__.py new file mode 100644 index 00000000..e764e8a5 --- /dev/null +++ b/pyt/web_frameworks/__init__.py @@ -0,0 +1,20 @@ +from .framework_adaptor import ( + FrameworkAdaptor, + _get_func_nodes +) +from .framework_helper import ( + is_django_view_function, + is_flask_route_function, + is_function, + is_function_without_leading_ +) + + +__all__ = [ + 'FrameworkAdaptor', + 'is_django_view_function', + 'is_flask_route_function', + 'is_function', + 'is_function_without_leading_', + '_get_func_nodes' # Only used in framework_helper_test +] diff --git a/pyt/web_frameworks/framework_adaptor.py b/pyt/web_frameworks/framework_adaptor.py index 00f5a07b..2bc4d7ee 100644 --- a/pyt/web_frameworks/framework_adaptor.py +++ b/pyt/web_frameworks/framework_adaptor.py @@ -2,10 +2,10 @@ import ast -from .ast_helper import Arguments -from .cfg import make_cfg -from .module_definitions import project_definitions -from .node_types import ( +from ..cfg import make_cfg +from ..core.ast_helper import Arguments +from ..core.module_definitions import project_definitions +from ..core.node_types import ( AssignmentNode, TaintedNode ) diff --git a/pyt/web_frameworks/framework_helper.py b/pyt/web_frameworks/framework_helper.py index fd5996fa..7156968a 100644 --- a/pyt/web_frameworks/framework_helper.py +++ b/pyt/web_frameworks/framework_helper.py @@ -1,12 +1,14 @@ """Provides helper functions that help with determining if a function is a route function.""" import ast -from .ast_helper import get_call_names +from ..core.ast_helper import get_call_names -def is_function(function): - """Always returns true because arg is always a function.""" - return True +def is_django_view_function(ast_node): + if len(ast_node.args.args): + first_arg_name = ast_node.args.args[0].arg + return first_arg_name == 'request' + return False def is_flask_route_function(ast_node): @@ -18,11 +20,9 @@ def is_flask_route_function(ast_node): return False -def is_django_view_function(ast_node): - if len(ast_node.args.args): - first_arg_name = ast_node.args.args[0].arg - return first_arg_name == 'request' - return False +def is_function(function): + """Always returns true because arg is always a function.""" + return True def is_function_without_leading_(ast_node): diff --git a/tests/__main__.py b/tests/__main__.py index 8fad5457..61f69077 100644 --- a/tests/__main__.py +++ b/tests/__main__.py @@ -1,4 +1,8 @@ -from unittest import TestLoader, TestSuite, TextTestRunner +from unittest import ( + TestLoader, + TestSuite, + TextTestRunner +) test_suite = TestSuite() diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 2683aae1..c0df17f2 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -1,9 +1,9 @@ """A module that contains a base class that has helper methods for testing PyT.""" import unittest -from pyt.ast_helper import generate_ast from pyt.cfg import make_cfg -from pyt.module_definitions import project_definitions +from pyt.core.ast_helper import generate_ast +from pyt.core.module_definitions import project_definitions class BaseTestCase(unittest.TestCase): diff --git a/tests/cfg_test.py b/tests/cfg_test.py index f3a3a28a..0f9ba2d3 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,5 +1,9 @@ from .base_test_case import BaseTestCase -from pyt.node_types import EntryOrExitNode, Node + +from pyt.core.node_types import ( + EntryOrExitNode, + Node +) class CFGGeneralTest(BaseTestCase): @@ -8,15 +12,11 @@ def test_repr_cfg(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - #print(repr(self.cfg)) - def test_str_cfg(self): self.cfg_create_from_file('examples/example_inputs/for_complete.py') self.nodes = self.cfg_list_to_dict(self.cfg.nodes) - #print(self.cfg) - def test_no_tuples(self): self.cfg_create_from_file('examples/example_inputs/for_complete.py') @@ -35,7 +35,10 @@ def test_start_and_exit_nodes(self): node = 1 exit_node = 2 - self.assertInCfg([(1,0),(2,1)]) + self.assertInCfg([ + (node, start_node), + (exit_node, node) + ]) self.assertEqual(type(self.cfg.nodes[start_node]), EntryOrExitNode) self.assertEqual(type(self.cfg.nodes[exit_node]), EntryOrExitNode) @@ -72,7 +75,7 @@ def test_for_complete(self): next_node = 6 exit_node = 7 - self.assertEqual(self.cfg.nodes[for_node].label,'for x in range(3):') + self.assertEqual(self.cfg.nodes[for_node].label, 'for x in range(3):') self.assertEqual(self.cfg.nodes[body_1].label, '~call_1 = ret_print(x)') self.assertEqual(self.cfg.nodes[body_2].label, 'y += 1') self.assertEqual(self.cfg.nodes[else_body_1].label, "~call_2 = ret_print('Final: %s' % x)") @@ -107,15 +110,23 @@ def test_for_no_orelse(self): def test_for_tuple_target(self): self.cfg_create_from_file('examples/example_inputs/for_tuple_target.py') - self.assert_length(self.cfg.nodes, expected_length = 4) + self.assert_length(self.cfg.nodes, expected_length=4) entry_node = 0 for_node = 1 print_node = 2 exit_node = 3 - self.assertInCfg([(for_node,entry_node),(print_node,for_node),(for_node,print_node),(exit_node,for_node)]) - self.assertEqual(self.cfg.nodes[for_node].label, "for (x, y) in [(1, 2), (3, 4)]:") + self.assertInCfg([ + (for_node, entry_node), + (print_node, for_node), + (for_node, print_node), + (exit_node, for_node) + ]) + self.assertEqual( + self.cfg.nodes[for_node].label, + "for (x, y) in [(1, 2), (3, 4)]:" + ) def test_for_line_numbers(self): self.cfg_create_from_file('examples/example_inputs/for_complete.py') @@ -152,16 +163,19 @@ def test_for_func_iterator(self): _print = 7 _exit = 8 - self.assertInCfg([(_for, entry), - (_for, call_foo), - (_for, _print), - (entry_foo, _for), - (call_to_range, entry_foo), - (ret_foo, call_to_range), - (exit_foo, ret_foo), - (call_foo, exit_foo), - (_print, _for), - (_exit, _for)]) + self.assertInCfg([ + (_for, entry), + (_for, call_foo), + (_for, _print), + (entry_foo, _for), + (call_to_range, entry_foo), + (ret_foo, call_to_range), + (exit_foo, ret_foo), + (call_foo, exit_foo), + (_print, _for), + (_exit, _for) + ]) + class CFGTryTest(BaseTestCase): def connected(self, node, successor): @@ -200,14 +214,14 @@ def test_orelse(self): print_a5 = 3 except_im = 4 except_im_body_1 = 5 - value_equal_call_2 = 6 # value = ~call_2 + value_equal_call_2 = 6 # value = ~call_2 print_wagyu = 7 save_node = 8 assign_to_temp = 9 assign_from_temp = 10 function_entry = 11 ret_of_subprocess_call = 12 - ret_does_this_kill_us_equal_call_5 = 13 # ret_does_this_kill_us = ~call_5 + ret_does_this_kill_us_equal_call_5 = 13 # ret_does_this_kill_us = ~call_5 function_exit = 14 restore_node = 15 return_handler = 16 @@ -297,8 +311,18 @@ def test_if_complete(self): self.assertEqual(self.cfg.nodes[else_body].label, 'x += 4') self.assertEqual(self.cfg.nodes[next_node].label, 'x += 5') - - self.assertInCfg([(test, entry), (eliftest, test), (body_1, test), (body_2, body_1), (next_node, body_2), (else_body, eliftest), (elif_body, eliftest), (next_node, elif_body), (next_node, else_body), (exit_node, next_node)]) + self.assertInCfg([ + (test, entry), + (eliftest, test), + (body_1, test), + (body_2, body_1), + (next_node, body_2), + (else_body, eliftest), + (elif_body, eliftest), + (next_node, elif_body), + (next_node, else_body), + (exit_node, next_node) + ]) def test_single_if(self): self.cfg_create_from_file('examples/example_inputs/if.py') @@ -309,7 +333,13 @@ def test_single_if(self): test_node = 1 body_node = 2 exit_node = 3 - self.assertInCfg([(test_node,start_node), (body_node,test_node), (exit_node,test_node), (exit_node,body_node)]) + + self.assertInCfg([ + (test_node, start_node), + (body_node, test_node), + (exit_node, test_node), + (exit_node, body_node) + ]) def test_single_if_else(self): self.cfg_create_from_file('examples/example_inputs/if_else.py') @@ -321,7 +351,14 @@ def test_single_if_else(self): body_node = 2 else_body = 3 exit_node = 4 - self.assertInCfg([(test_node,start_node), (body_node,test_node), (else_body,test_node), (exit_node,else_body), (exit_node,body_node)]) + + self.assertInCfg([ + (test_node, start_node), + (body_node, test_node), + (else_body, test_node), + (exit_node, else_body), + (exit_node, body_node) + ]) def test_multiple_if_else(self): self.cfg_create_from_file('examples/example_inputs/multiple_if_else.py') @@ -409,7 +446,6 @@ def test_nested_if_else_elif(self): (_exit, elif_body) ]) - def test_if_line_numbers(self): self.cfg_create_from_file('examples/example_inputs/if_complete.py') @@ -443,7 +479,12 @@ def test_if_not(self): body = 2 _exit = 3 - self.assertInCfg([(1, 0), (2, 1), (3, 2), (3, 1)]) + self.assertInCfg([ + (_if, entry), + (body, _if), + (_exit, body), + (_exit, _if) + ]) class CFGWhileTest(BaseTestCase): @@ -464,7 +505,16 @@ def test_while_complete(self): self.assertEqual(self.cfg.nodes[test].label, 'while x > 0:') - self.assertInCfg([(test, entry), (body_1, test), (else_body_1, test), ( body_2, body_1), (test, body_2), (else_body_2, else_body_1), (next_node, else_body_2), (exit_node, next_node)]) + self.assertInCfg([ + (test, entry), + (body_1, test), + (else_body_1, test), + (body_2, body_1), + (test, body_2), + (else_body_2, else_body_1), + (next_node, else_body_2), + (exit_node, next_node) + ]) def test_while_no_orelse(self): self.cfg_create_from_file('examples/example_inputs/while_no_orelse.py') @@ -478,7 +528,14 @@ def test_while_no_orelse(self): next_node = 4 exit_node = 5 - self.assertInCfg([(test, entry), (body_1, test), ( next_node, test), (body_2, body_1), (test, body_2), (exit_node, next_node)]) + self.assertInCfg([ + (test, entry), + (body_1, test), + (next_node, test), + (body_2, body_1), + (test, body_2), + (exit_node, next_node) + ]) def test_while_line_numbers(self): self.cfg_create_from_file('examples/example_inputs/while_complete.py') @@ -509,7 +566,7 @@ def test_assignment_multi_target(self): start_node = 0 node = 1 node_2 = 2 - exit_node =3 + exit_node = 3 self.assertInCfg([(node, start_node), (node_2, node), (exit_node, node_2)]) @@ -520,15 +577,22 @@ def test_assignment_multi_target_call(self): self.cfg_create_from_file('examples/example_inputs/assignment_multiple_assign_call.py') self.assert_length(self.cfg.nodes, expected_length=6) - start_node = self.cfg.nodes[0] + + # start_node = self.cfg.nodes[0] assignment_to_call1 = self.cfg.nodes[1] assignment_to_x = self.cfg.nodes[2] assignment_to_call2 = self.cfg.nodes[3] assignment_to_y = self.cfg.nodes[4] - exit_node = self.cfg.nodes[5] + # exit_node = self.cfg.nodes[5] # This assert means N should be connected to N+1 - self.assertInCfg([(1,0),(2,1),(3,2),(4,3),(5,4)]) + self.assertInCfg([ + (1, 0), + (2, 1), + (3, 2), + (4, 3), + (5, 4) + ]) self.assertEqual(assignment_to_call1.label, '~call_1 = ret_int(5)') self.assertEqual(assignment_to_x.label, 'x = ~call_1') @@ -570,10 +634,10 @@ def test_multiple_assignment(self): self.assert_length(self.cfg.nodes, expected_length=4) - start_node = self.cfg.nodes[0] + # start_node = self.cfg.nodes[0] assign_y = self.cfg.nodes[1] assign_x = self.cfg.nodes[2] - exit_node = self.cfg.nodes[-1] + # exit_node = self.cfg.nodes[-1] self.assertEqual(assign_x.label, 'x = 5') self.assertEqual(assign_y.label, 'y = 5') @@ -652,6 +716,7 @@ def test_dict_comprehension_multi(self): self.assertEqual(listcomp.label, 'dd = {x + y : y for x in [1, 2, 3] for y in [4, 5, 6]}') + class CFGFunctionNodeTest(BaseTestCase): def connected(self, node, successor): return (successor, node) @@ -1007,9 +1072,6 @@ def test_multiple_blackbox_calls_in_user_defined_call_after_if(self): (_exit, ret_send_file) ]) - - - def test_multiple_user_defined_calls_in_blackbox_call_after_if(self): path = 'examples/vulnerable_code/multiple_user_defined_calls_in_blackbox_call_after_if.py' self.cfg_create_from_file(path) @@ -1105,8 +1167,6 @@ def test_call_on_call(self): self.cfg_create_from_file(path) - - class CFGCallWithAttributeTest(BaseTestCase): def setUp(self): self.cfg_create_from_file('examples/example_inputs/call_with_attribute.py') @@ -1126,6 +1186,7 @@ def test_call_with_attribute_line_numbers(self): self.assertLineNumber(call, 5) + class CFGBreak(BaseTestCase): """Break in while and for and other places""" def test_break(self): @@ -1178,7 +1239,6 @@ class CFGName(BaseTestCase): def test_name_if(self): self.cfg_create_from_file('examples/example_inputs/name_if.py') - self.assert_length(self.cfg.nodes, expected_length=5) self.assertEqual(self.cfg.nodes[2].label, 'if x:') diff --git a/tests/framework_helper_test.py b/tests/framework_helper_test.py index 9086e55d..07bd01c8 100644 --- a/tests/framework_helper_test.py +++ b/tests/framework_helper_test.py @@ -1,10 +1,11 @@ from .base_test_case import BaseTestCase -from pyt.framework_adaptor import _get_func_nodes -from pyt.framework_helper import ( + +from pyt.web_frameworks import ( is_django_view_function, is_flask_route_function, is_function, is_function_without_leading_, + _get_func_nodes ) @@ -12,7 +13,6 @@ class FrameworkEngineTest(BaseTestCase): def test_find_flask_functions(self): self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') - cfg_list = [self.cfg] funcs = _get_func_nodes() i = 0 @@ -23,11 +23,9 @@ def test_find_flask_functions(self): # So it is supposed to be 1, because foo is not an app.route self.assertEqual(i, 1) - def test_find_every_function_without_leading_underscore(self): self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') - cfg_list = [self.cfg] funcs = _get_func_nodes() i = 0 @@ -40,7 +38,6 @@ def test_find_every_function_without_leading_underscore(self): def test_find_every_function(self): self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') - cfg_list = [self.cfg] funcs = _get_func_nodes() i = 0 @@ -53,7 +50,6 @@ def test_find_every_function(self): def test_find_django_functions(self): self.cfg_create_from_file('examples/example_inputs/django_flask_and_normal_functions.py') - cfg_list = [self.cfg] funcs = _get_func_nodes() i = 0 @@ -67,7 +63,6 @@ def test_find_django_functions(self): def test_find_django_views(self): self.cfg_create_from_file('examples/example_inputs/django_views.py') - cfg_list = [self.cfg] funcs = _get_func_nodes() i = 0 diff --git a/tests/import_test.py b/tests/import_test.py index 94d829b1..6c2320cc 100644 --- a/tests/import_test.py +++ b/tests/import_test.py @@ -2,8 +2,12 @@ import os from .base_test_case import BaseTestCase -from pyt.ast_helper import get_call_names_as_string -from pyt.project_handler import get_directory_modules, get_modules_and_packages + +from pyt.core.ast_helper import get_call_names_as_string +from pyt.core.project_handler import ( + get_directory_modules, + get_modules_and_packages +) class ImportTest(BaseTestCase): @@ -184,17 +188,18 @@ def test_from_directory(self): self.cfg_create_from_file(file_path, project_modules, local_modules) - - EXPECTED = ["Entry module", - "Module Entry bar", - "Module Exit bar", - "temp_1_s = 'hey'", - "s = temp_1_s", - "Function Entry bar.H", - "ret_bar.H = s + 'end'", - "Exit bar.H", - "~call_1 = ret_bar.H", - "Exit module"] + EXPECTED = [ + "Entry module", + "Module Entry bar", + "Module Exit bar", + "temp_1_s = 'hey'", + "s = temp_1_s", + "Function Entry bar.H", + "ret_bar.H = s + 'end'", + "Exit bar.H", + "~call_1 = ret_bar.H", + "Exit module" + ] for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -313,7 +318,6 @@ def test_from_dot(self): 'c = ~call_1', 'Exit module'] - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -338,7 +342,6 @@ def test_from_dot_dot(self): 'c = ~call_1', 'Exit module'] - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) @@ -446,7 +449,6 @@ def test_multiple_functions_with_aliases(self): "c = ~call_3", "Exit module"] - for node, expected_label in zip(self.cfg.nodes, EXPECTED): self.assertEqual(node.label, expected_label) diff --git a/tests/label_visitor_test.py b/tests/label_visitor_test.py index 6ee44bb4..0f2d2f7d 100644 --- a/tests/label_visitor_test.py +++ b/tests/label_visitor_test.py @@ -1,7 +1,7 @@ import ast import unittest -from pyt.label_visitor import LabelVisitor +from pyt.helper_visitors import LabelVisitor class LabelVisitorTestCase(unittest.TestCase): @@ -14,64 +14,60 @@ def perform_labeling_on_expression(self, expr): return label + class LabelVisitorTest(LabelVisitorTestCase): def test_assign(self): label = self.perform_labeling_on_expression('a = 1') - self.assertEqual(label.result,'a = 1') + self.assertEqual(label.result, 'a = 1') def test_augassign(self): label = self.perform_labeling_on_expression('a +=2') - self.assertEqual(label.result,'a += 2') + self.assertEqual(label.result, 'a += 2') def test_compare_simple(self): label = self.perform_labeling_on_expression('a > b') - self.assertEqual(label.result,'a > b') + self.assertEqual(label.result, 'a > b') def test_compare_multi(self): label = self.perform_labeling_on_expression('a > b > c') - self.assertEqual(label.result,'a > b > c') + self.assertEqual(label.result, 'a > b > c') def test_binop(self): label = self.perform_labeling_on_expression('a / b') - self.assertEqual(label.result,'a / b') + self.assertEqual(label.result, 'a / b') def test_call_no_arg(self): label = self.perform_labeling_on_expression('range()') - self.assertEqual(label.result,'range()') - + self.assertEqual(label.result, 'range()') def test_call_single_arg(self): label = self.perform_labeling_on_expression('range(5)') - self.assertEqual(label.result,'range(5)') + self.assertEqual(label.result, 'range(5)') def test_call_multi_arg(self): - label = self.perform_labeling_on_expression('range(1,5)') - self.assertEqual(label.result,'range(1, 5)') + label = self.perform_labeling_on_expression('range(1, 5)') + self.assertEqual(label.result, 'range(1, 5)') def test_tuple_one_element(self): label = self.perform_labeling_on_expression('(1)') - self.assertEqual(label.result,'1') + self.assertEqual(label.result, '1') def test_tuple_two_elements(self): - label = self.perform_labeling_on_expression('(1,2)') - self.assertEqual(label.result,'(1, 2)') + label = self.perform_labeling_on_expression('(1, 2)') + self.assertEqual(label.result, '(1, 2)') def test_empty_tuple(self): label = self.perform_labeling_on_expression('()') - self.assertEqual(label.result,'()') + self.assertEqual(label.result, '()') def test_empty_list(self): label = self.perform_labeling_on_expression('[]') - self.assertEqual(label.result,'[]') + self.assertEqual(label.result, '[]') def test_list_one_element(self): label = self.perform_labeling_on_expression('[1]') - self.assertEqual(label.result,'[1]') + self.assertEqual(label.result, '[1]') def test_list_two_elements(self): - label = self.perform_labeling_on_expression('[1,2]') - self.assertEqual(label.result,'[1, 2]') - - - - + label = self.perform_labeling_on_expression('[1, 2]') + self.assertEqual(label.result, '[1, 2]') diff --git a/tests/nested_functions_test.py b/tests/nested_functions_test.py index 7147bbab..4d5d923c 100644 --- a/tests/nested_functions_test.py +++ b/tests/nested_functions_test.py @@ -1,7 +1,11 @@ import os.path from .base_test_case import BaseTestCase -from pyt.project_handler import get_directory_modules, get_modules_and_packages + +from pyt.core.project_handler import ( + get_directory_modules, + get_modules_and_packages +) class NestedTest(BaseTestCase): diff --git a/tests/project_handler_test.py b/tests/project_handler_test.py index a5105dc2..b6657cd5 100644 --- a/tests/project_handler_test.py +++ b/tests/project_handler_test.py @@ -1,13 +1,13 @@ import os import unittest -from pprint import pprint -from pyt.project_handler import ( +from pyt.core.project_handler import ( get_modules, get_modules_and_packages, is_python_file ) + class ProjectHandlerTest(unittest.TestCase): """Tests for the project handler.""" @@ -28,12 +28,12 @@ def test_get_modules(self): modules = get_modules(project_folder) app_path = os.path.join(project_folder, 'app.py') - utils_path = os.path.join(project_folder,'utils.py') + utils_path = os.path.join(project_folder, 'utils.py') exceptions_path = os.path.join(project_folder, 'exceptions.py') some_path = os.path.join(project_folder, folder, 'some.py') indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') - relative_folder_name = '.' + folder + # relative_folder_name = '.' + folder app_name = project_namespace + '.' + 'app' utils_name = project_namespace + '.' + 'utils' exceptions_name = project_namespace + '.' + 'exceptions' @@ -66,8 +66,8 @@ def test_get_modules_and_packages(self): folder_path = os.path.join(project_folder, folder) app_path = os.path.join(project_folder, 'app.py') exceptions_path = os.path.join(project_folder, 'exceptions.py') - utils_path = os.path.join(project_folder,'utils.py') - directory_path = os.path.join(project_folder, folder, directory) + utils_path = os.path.join(project_folder, 'utils.py') + # directory_path = os.path.join(project_folder, folder, directory) some_path = os.path.join(project_folder, folder, 'some.py') indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') @@ -75,15 +75,23 @@ def test_get_modules_and_packages(self): app_name = project_namespace + '.' + 'app' exceptions_name = project_namespace + '.' + 'exceptions' utils_name = project_namespace + '.' + 'utils' - relative_directory_name = '.' + folder + '.' + directory + # relative_directory_name = '.' + folder + '.' + directory some_name = project_namespace + '.' + folder + '.some' indhold_name = project_namespace + '.' + folder + '.' + directory + '.indhold' - folder_tuple = (relative_folder_name[1:], folder_path, relative_folder_name) + folder_tuple = ( + relative_folder_name[1:], + folder_path, + relative_folder_name + ) app_tuple = (app_name, app_path) exceptions_tuple = (exceptions_name, exceptions_path) utils_tuple = (utils_name, utils_path) - directory_tuple = (relative_directory_name[1:], directory_path, relative_directory_name) + # directory_tuple = ( + # relative_directory_name[1:], + # directory_path, + # relative_directory_name + # ) some_tuple = (some_name, some_path) indhold_tuple = (indhold_name, indhold_path) diff --git a/tests/vars_visitor_test.py b/tests/vars_visitor_test.py index 4f1c7c1e..09640434 100644 --- a/tests/vars_visitor_test.py +++ b/tests/vars_visitor_test.py @@ -1,7 +1,8 @@ import ast import unittest -from pyt.vars_visitor import VarsVisitor + +from pyt.helper_visitors import VarsVisitor class VarsVisitorTestCase(unittest.TestCase): diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index b405383b..ed2d82cd 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -4,9 +4,10 @@ from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse -from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import is_flask_route_function -from pyt.project_handler import get_directory_modules, get_modules +from pyt.core.project_handler import ( + get_directory_modules, + get_modules +) from pyt.usage import ( default_blackbox_mapping_file, default_trigger_word_file @@ -15,6 +16,10 @@ find_vulnerabilities, UImode ) +from pyt.web_frameworks import ( + FrameworkAdaptor, + is_flask_route_function +) class EngineTest(BaseTestCase): diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 649a0c28..4fda2076 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -4,13 +4,7 @@ from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse -from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import ( - is_django_view_function, - is_flask_route_function, - is_function -) -from pyt.node_types import Node +from pyt.core.node_types import Node from pyt.usage import ( default_blackbox_mapping_file, default_trigger_word_file @@ -21,6 +15,12 @@ UImode, vulnerabilities ) +from pyt.web_frameworks import ( + FrameworkAdaptor, + is_django_view_function, + is_flask_route_function, + is_function +) class EngineTest(BaseTestCase): From 151e59fce07f6569b1f226f6b9d8ba4c7590d19e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 13:27:29 -0700 Subject: [PATCH 285/541] Organize tests into different folders --- tests/analysis/analysis_base_test_case.py | 1 + tests/cfg/__init__.py | 0 tests/{ => cfg}/cfg_test.py | 2 +- tests/{ => cfg}/import_test.py | 2 +- tests/{ => cfg}/nested_functions_test.py | 2 +- tests/core/__init__.py | 0 tests/{ => core}/project_handler_test.py | 0 tests/helper_visitors/__init__.py | 0 tests/{ => helper_visitors}/label_visitor_test.py | 0 tests/{ => helper_visitors}/vars_visitor_test.py | 1 - tests/vulnerabilities/__init__.py | 0 .../{ => vulnerabilities}/vulnerabilities_across_files_test.py | 2 +- tests/{ => vulnerabilities}/vulnerabilities_test.py | 2 +- tests/web_frameworks/__init__.py | 0 tests/{ => web_frameworks}/framework_helper_test.py | 2 +- 15 files changed, 7 insertions(+), 7 deletions(-) create mode 100644 tests/cfg/__init__.py rename tests/{ => cfg}/cfg_test.py (99%) rename tests/{ => cfg}/import_test.py (99%) rename tests/{ => cfg}/nested_functions_test.py (97%) create mode 100644 tests/core/__init__.py rename tests/{ => core}/project_handler_test.py (100%) create mode 100644 tests/helper_visitors/__init__.py rename tests/{ => helper_visitors}/label_visitor_test.py (100%) rename tests/{ => helper_visitors}/vars_visitor_test.py (99%) create mode 100644 tests/vulnerabilities/__init__.py rename tests/{ => vulnerabilities}/vulnerabilities_across_files_test.py (99%) rename tests/{ => vulnerabilities}/vulnerabilities_test.py (99%) create mode 100644 tests/web_frameworks/__init__.py rename tests/{ => web_frameworks}/framework_helper_test.py (98%) diff --git a/tests/analysis/analysis_base_test_case.py b/tests/analysis/analysis_base_test_case.py index 37d8e6f6..a6252c01 100644 --- a/tests/analysis/analysis_base_test_case.py +++ b/tests/analysis/analysis_base_test_case.py @@ -1,6 +1,7 @@ from collections import namedtuple from ..base_test_case import BaseTestCase + from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import FixedPointAnalysis from pyt.analysis.lattice import Lattice diff --git a/tests/cfg/__init__.py b/tests/cfg/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/cfg_test.py b/tests/cfg/cfg_test.py similarity index 99% rename from tests/cfg_test.py rename to tests/cfg/cfg_test.py index 0f9ba2d3..e9a1f489 100644 --- a/tests/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -1,4 +1,4 @@ -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.core.node_types import ( EntryOrExitNode, diff --git a/tests/import_test.py b/tests/cfg/import_test.py similarity index 99% rename from tests/import_test.py rename to tests/cfg/import_test.py index 6c2320cc..842fafa5 100644 --- a/tests/import_test.py +++ b/tests/cfg/import_test.py @@ -1,7 +1,7 @@ import ast import os -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.core.ast_helper import get_call_names_as_string from pyt.core.project_handler import ( diff --git a/tests/nested_functions_test.py b/tests/cfg/nested_functions_test.py similarity index 97% rename from tests/nested_functions_test.py rename to tests/cfg/nested_functions_test.py index 4d5d923c..7a5f5772 100644 --- a/tests/nested_functions_test.py +++ b/tests/cfg/nested_functions_test.py @@ -1,6 +1,6 @@ import os.path -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.core.project_handler import ( get_directory_modules, diff --git a/tests/core/__init__.py b/tests/core/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/project_handler_test.py b/tests/core/project_handler_test.py similarity index 100% rename from tests/project_handler_test.py rename to tests/core/project_handler_test.py diff --git a/tests/helper_visitors/__init__.py b/tests/helper_visitors/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/label_visitor_test.py b/tests/helper_visitors/label_visitor_test.py similarity index 100% rename from tests/label_visitor_test.py rename to tests/helper_visitors/label_visitor_test.py diff --git a/tests/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py similarity index 99% rename from tests/vars_visitor_test.py rename to tests/helper_visitors/vars_visitor_test.py index 09640434..849206b8 100644 --- a/tests/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -1,7 +1,6 @@ import ast import unittest - from pyt.helper_visitors import VarsVisitor diff --git a/tests/vulnerabilities/__init__.py b/tests/vulnerabilities/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py similarity index 99% rename from tests/vulnerabilities_across_files_test.py rename to tests/vulnerabilities/vulnerabilities_across_files_test.py index ed2d82cd..026c38ef 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -1,6 +1,6 @@ import os -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py similarity index 99% rename from tests/vulnerabilities_test.py rename to tests/vulnerabilities/vulnerabilities_test.py index 4fda2076..175746a9 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -1,6 +1,6 @@ import os -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse diff --git a/tests/web_frameworks/__init__.py b/tests/web_frameworks/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/framework_helper_test.py b/tests/web_frameworks/framework_helper_test.py similarity index 98% rename from tests/framework_helper_test.py rename to tests/web_frameworks/framework_helper_test.py index 07bd01c8..5ee8d21d 100644 --- a/tests/framework_helper_test.py +++ b/tests/web_frameworks/framework_helper_test.py @@ -1,4 +1,4 @@ -from .base_test_case import BaseTestCase +from ..base_test_case import BaseTestCase from pyt.web_frameworks import ( is_django_view_function, From d0e8ef0cfbb855ba44b359c11e1cc4fe7924fd26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 25 Apr 2018 00:21:54 +0300 Subject: [PATCH 286/541] Code edited edited argument, moved code place --- pyt/__main__.py | 50 ++++++++++++++++++++++++------------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 9b197906..edb73b2b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -142,9 +142,9 @@ def parse_args(args): '(only JSON-formatted files are accepted)', type=str, default=False) - parser.add_argument('-in', '--ignore-nosec', - help='Ignoring nosec commands', - action='store_true') + parser.add_argument('--ignore-nosec', dest='ignore_nosec', action='store_true', + help='do not skip lines with # nosec comments' + ) save_parser = subparsers.add_parser('save', help='Save menu.') save_parser.set_defaults(which='save') @@ -238,7 +238,28 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM + path = os.path.normpath(args.filepath) cfg_list = list() + if args.ignore_nosec: + nosec_lines = set() + else: + file = open(path, "r") + lines = file.readlines() + nosec_lines = set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line) + vulnerabilities = find_vulnerabilities( + cfg_list, + analysis, + ui_mode, + VulnerabilityFiles( + args.blackbox_mapping_file, + args.trigger_word_file + ), + nosec_lines + ) + if args.git_repos: repos = get_repos(args.git_repos) for repo in repos: @@ -266,8 +287,6 @@ def main(command_line_args=sys.argv[1:]): ) exit() - path = os.path.normpath(args.filepath) - directory = None if args.project_root: directory = os.path.normpath(args.project_root) @@ -301,7 +320,6 @@ def main(command_line_args=sys.argv[1:]): analyse(cfg_list, analysis_type=analysis) - nosec_lines = set() vulnerabilities = find_vulnerabilities( cfg_list, analysis, @@ -313,26 +331,6 @@ def main(command_line_args=sys.argv[1:]): nosec_lines ) - if args.ignore_nosec: - nosec_lines = set() - else: - file = open(path, "r") - lines = file.readlines() - nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), - nosec_lines - ) - if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) From 8569aa467a6524f3ae11091c2783d3a9f8249f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 25 Apr 2018 00:24:20 +0300 Subject: [PATCH 287/541] unnecessary codes deleted --- pyt/vulnerabilities.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 5e9bd675..eeb9404a 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -187,8 +187,6 @@ def find_triggers( for node in nodes: if node.line_number not in nosec_lines: trigger_nodes.extend(iter(label_contains(node, trigger_words))) - else: - pass return trigger_nodes @@ -529,7 +527,6 @@ def find_vulnerabilities( with open(vulnerability_files.blackbox_mapping) as infile: blackbox_mapping = json.load(infile) for cfg in cfg_list: - find_vulnerabilities_in_cfg( cfg, definitions, From a76893fb8cbb4412ee1373b5b39b5be5bccb567b Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 24 Apr 2018 14:38:55 -0700 Subject: [PATCH 288/541] Add PRs Welcome badge --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 9bd41255..db509cf1 100644 --- a/README.rst +++ b/README.rst @@ -10,6 +10,9 @@ .. image:: https://badge.fury.io/py/python-taint.svg :target: https://badge.fury.io/py/python-taint +.. image:: https://img.shields.io/badge/PRs-welcome-ff69b4.svg + :target: https://github.com/python-security/pyt/issues?q=is%3Aopen+is%3Aissue+label%3Agood-first-issue + Python Taint ============ From dc1b21097d3d4f2f525bb8851476b2675a561e58 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 24 Apr 2018 14:45:48 -0700 Subject: [PATCH 289/541] Add Python 3.6 badge --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index db509cf1..65fd44e5 100644 --- a/README.rst +++ b/README.rst @@ -1,3 +1,6 @@ +.. image:: https://img.shields.io/badge/python-v3.6-blue.svg + :target: https://pypi.org/project/python-taint/ + .. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt From f238575182b1efa85d1a8f52957526299c10796b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 15:07:21 -0700 Subject: [PATCH 290/541] [wip] trying to make deadcode in reaching_definitions_taint_test work --- tests/__main__.py | 2 +- .../reaching_definitions_taint_test.py | 10 +++-- tests/base_test_case.py | 40 +++---------------- tests/vulnerabilities/vulnerabilities_test.py | 13 ------ 4 files changed, 13 insertions(+), 52 deletions(-) diff --git a/tests/__main__.py b/tests/__main__.py index 61f69077..5356acd2 100644 --- a/tests/__main__.py +++ b/tests/__main__.py @@ -15,6 +15,6 @@ if result.wasSuccessful(): print('Success') exit(0) -else: +else: # pragma: no cover print('Failure') exit(1) diff --git a/tests/analysis/reaching_definitions_taint_test.py b/tests/analysis/reaching_definitions_taint_test.py index e2d437a8..03a38c4b 100644 --- a/tests/analysis/reaching_definitions_taint_test.py +++ b/tests/analysis/reaching_definitions_taint_test.py @@ -1,10 +1,12 @@ from .analysis_base_test_case import AnalysisBaseTestCase +from pyt.analysis.constraint_table import constraint_table + class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): - constraint_table = {} + # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/linear.py') EXPECTED = [ @@ -22,7 +24,7 @@ def test_linear_program(self): i = i + 1 def test_if_program(self): - constraint_table = {} + # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/if_program.py') EXPECTED = [ @@ -41,7 +43,7 @@ def test_if_program(self): i = i + 1 def test_example(self): - constraint_table = {} + # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/example.py') EXPECTED = [ @@ -82,7 +84,7 @@ def test_func_with_params(self): *self.constraints([2, 3, 4, 6, 7, 9], 10)], lattice) def test_while(self): - constraint_table = {} + # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/while.py') EXPECTED = [ diff --git a/tests/base_test_case.py b/tests/base_test_case.py index c0df17f2..b2b70dca 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -46,45 +46,15 @@ def assertInCfg(self, connections): "(%s <- %s)" % (sets, element) + " expected to be disconnected" ) - def assertConnected(self, node, successor): - """Asserts that a node is connected to its successor. - This means that node has successor in its outgoing and - successor has node in its ingoing.""" - - self.assertIn( - successor, - node.outgoing, - '\n%s was NOT found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']' - ) - - self.assertIn( - node, - successor.ingoing, - '\n%s was NOT found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']' - ) - - def assertNotConnected(self, node, successor): - """Asserts that a node is not connected to its successor. - This means that node does not the successor in its outgoing and - successor does not have the node in its ingoing.""" - - self.assertNotIn( - successor, - node.outgoing, - '\n%s was mistakenly found in the outgoing list of %s containing: ' % (successor.label, node.label) + '[' + ', '.join([x.label for x in node.outgoing]) + ']' - ) - self.assertNotIn( - node, - successor.ingoing, - '\n%s was mistakenly found in the ingoing list of %s containing: ' % (node.label, successor.label) + '[' + ', '.join([x.label for x in successor.ingoing]) + ']' - ) - def assertLineNumber(self, node, line_number): + """Only used in cfg_test.""" self.assertEqual(node.line_number, line_number) def cfg_list_to_dict(self, list): """This method converts the CFG list to a dict, making it easier to find nodes to test. - This method assumes that no nodes in the code have the same label""" + This method assumes that no nodes in the code have the same label. + Only used in cfg_test. + """ return {x.label: x for x in list} def assert_length(self, _list, *, expected_length): @@ -107,12 +77,14 @@ def cfg_create_from_file( ) def string_compare_alpha(self, output, expected_string): + # Only used in vulnerability tests return ( [char for char in output if char.isalpha()] == [char for char in expected_string if char.isalpha()] ) def string_compare_alnum(self, output, expected_string): + # Only used in reaching_definitions_taint_test return ( [char for char in output if char.isalnum()] == [char for char in expected_string if char.isalnum()] diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 175746a9..7313a766 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -24,13 +24,6 @@ class EngineTest(BaseTestCase): - def run_empty(self): - return - - def get_lattice_elements(self, cfg_nodes): - """Dummy analysis method""" - return cfg_nodes - def test_parse(self): definitions = trigger_definitions_parser.parse( trigger_word_file=os.path.join( @@ -504,9 +497,6 @@ def test_XSS_variable_multiple_assign_result(self): class EngineDjangoTest(BaseTestCase): - def run_empty(self): - return - def run_analysis(self, path): self.cfg_create_from_file(path) cfg_list = [self.cfg] @@ -549,9 +539,6 @@ def test_django_view_param(self): class EngineEveryTest(BaseTestCase): - def run_empty(self): - return - def run_analysis(self, path): self.cfg_create_from_file(path) cfg_list = [self.cfg] From 36d0a3afd8959d6091dfcf09dd653281b404729b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 15:08:55 -0700 Subject: [PATCH 291/541] Add init file to vulnerability_definitions folder --- pyt/vulnerability_definitions/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 pyt/vulnerability_definitions/__init__.py diff --git a/pyt/vulnerability_definitions/__init__.py b/pyt/vulnerability_definitions/__init__.py new file mode 100644 index 00000000..e69de29b From a017a29b1e7fa797575913a97d71689a2fa319aa Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 15:10:22 -0700 Subject: [PATCH 292/541] Bump version to 0.31 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index e0ed08c5..e648647e 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.30' +VERSION = '0.31' setup( From a9029d9cf90435994d5811138a76645fc0b018a9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 15:24:44 -0700 Subject: [PATCH 293/541] Bump to 0.32, include package_data from every package --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index e648647e..9a387648 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.31' +VERSION = '0.32' setup( @@ -11,7 +11,7 @@ version=VERSION, include_package_data=True, package_data={ - 'pyt': ['*.json', '*.pyt'], + '': ['*.json', '*.pyt'], }, description='Find security vulnerabilities in Python web applications' ' using static analysis.', From bc8a28f9eb00bf8f8a46c49ee264db2a869e2b53 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 15:35:21 -0700 Subject: [PATCH 294/541] Bump to 0.33, see if package_data works at all --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index 9a387648..e1fcace3 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.32' +VERSION = '0.33' setup( @@ -11,7 +11,7 @@ version=VERSION, include_package_data=True, package_data={ - '': ['*.json', '*.pyt'], + 'pyt.vulnerability_definitions': ['*.json', '*.pyt'], }, description='Find security vulnerabilities in Python web applications' ' using static analysis.', From c5235fd402d3ad483ded8208ae487e29eb2b53ca Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 24 Apr 2018 16:06:59 -0700 Subject: [PATCH 295/541] Finally fix the missing files with a MANIFEST.in --- MANIFEST.in | 1 + pyt/vulnerability_definitions/__init__.py | 0 setup.py | 5 +---- 3 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 MANIFEST.in delete mode 100644 pyt/vulnerability_definitions/__init__.py diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 00000000..d1c8d23a --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +graft pyt/vulnerability_definitions diff --git a/pyt/vulnerability_definitions/__init__.py b/pyt/vulnerability_definitions/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/setup.py b/setup.py index e1fcace3..39aa9440 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.33' +VERSION = '0.34' setup( @@ -10,9 +10,6 @@ packages=find_packages(exclude=(['tests*'])), version=VERSION, include_package_data=True, - package_data={ - 'pyt.vulnerability_definitions': ['*.json', '*.pyt'], - }, description='Find security vulnerabilities in Python web applications' ' using static analysis.', long_description="Check out PyT on `GitHub `_!", From 30019c56e937c6806570d1d7ddee6145363a4d58 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 24 Apr 2018 16:14:41 -0700 Subject: [PATCH 296/541] Release 0.34, added thanks to @Ekultek --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18e840a6..564342ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,8 +22,8 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@xxxx]: https://github.com/xxxx --> -# Unreleased -##### April 18, 2018 +# 0.34 +##### April 24, 2018 #### :tada: New Features @@ -42,6 +42,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :bug: Bugfixes * Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) * Fixed an infinite loop bug that was caused while handling certain loops ([#118]) +* Fixed a bug where we were not including `pyt/vulnerability_definitions` files ([#122], thanks [@Ekultek]) #### :snake: Miscellaneous @@ -55,3 +56,5 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#111]: https://github.com/python-security/pyt/pull/111 [#110]: https://github.com/python-security/pyt/pull/110 [@lfatty]: https://github.com/lfatty +[#122]: https://github.com/python-security/pyt/issues/122 +[@Ekultek]: https://github.com/Ekultek From 20b62c39e11dd1f2ee495bdd662c3d64b30044e5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 25 Apr 2018 09:31:41 -0700 Subject: [PATCH 297/541] Move 3.6 badge to the right --- README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index 65fd44e5..5e259000 100644 --- a/README.rst +++ b/README.rst @@ -1,6 +1,3 @@ -.. image:: https://img.shields.io/badge/python-v3.6-blue.svg - :target: https://pypi.org/project/python-taint/ - .. image:: https://travis-ci.org/python-security/pyt.svg?branch=master :target: https://travis-ci.org/python-security/pyt @@ -16,6 +13,9 @@ .. image:: https://img.shields.io/badge/PRs-welcome-ff69b4.svg :target: https://github.com/python-security/pyt/issues?q=is%3Aopen+is%3Aissue+label%3Agood-first-issue +.. image:: https://img.shields.io/badge/python-v3.6-blue.svg + :target: https://pypi.org/project/python-taint/ + Python Taint ============ From e8cddd06515bb24b46c8d28636cafe8a43e1f885 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 01:12:43 +0300 Subject: [PATCH 298/541] passed nosec_lines on analyse_repo unnecessary codes deleted, passed nosec_lines on analyse_repo --- pyt/__main__.py | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index edb73b2b..8ce6cc67 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -195,7 +195,7 @@ def parse_args(args): return parser.parse_args(args) -def analyse_repo(args, github_repo, analysis_type, ui_mode): +def analyse_repo(args, github_repo, analysis_type, ui_mode, nosec_lines): cfg_list = list() directory = os.path.dirname(github_repo.path) project_modules = get_modules(directory) @@ -218,7 +218,8 @@ def analyse_repo(args, github_repo, analysis_type, ui_mode): VulnerabilityFiles( args.blackbox_mapping_file, args.trigger_word_file - ) + ), + nosec_lines ) return vulnerabilities @@ -248,23 +249,13 @@ def main(command_line_args=sys.argv[1:]): nosec_lines = set( lineno for (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), - nosec_lines - ) + if '#nosec' in line or '# nosec' in line) if args.git_repos: repos = get_repos(args.git_repos) for repo in repos: repo.clone() - vulnerabilities = analyse_repo(args, repo, analysis, ui_mode) + vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) if args.json: json.report(vulnerabilities, sys.stdout) else: From 448e987fa9f87fec790bb7f425017351ca6c53e7 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 25 Apr 2018 18:44:53 -0700 Subject: [PATCH 299/541] Fixed deadcode in reaching_definitions_taint_test --- .coveragerc | 4 +++- tests/analysis/analysis_base_test_case.py | 11 ++++++++++- tests/analysis/reaching_definitions_taint_test.py | 4 ---- tox.ini | 3 ++- 4 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.coveragerc b/.coveragerc index 2678c03a..ebd6df4f 100644 --- a/.coveragerc +++ b/.coveragerc @@ -9,7 +9,9 @@ exclude_lines = raise NotImplementedError [run] -source = ./pyt +source = + ./pyt + ./tests omit = pyt/__main__.py pyt/usage.py diff --git a/tests/analysis/analysis_base_test_case.py b/tests/analysis/analysis_base_test_case.py index a6252c01..76037c7e 100644 --- a/tests/analysis/analysis_base_test_case.py +++ b/tests/analysis/analysis_base_test_case.py @@ -2,11 +2,19 @@ from ..base_test_case import BaseTestCase -from pyt.analysis.constraint_table import initialize_constraint_table +from pyt.analysis.constraint_table import ( + constraint_table, + initialize_constraint_table +) from pyt.analysis.fixed_point import FixedPointAnalysis from pyt.analysis.lattice import Lattice +def clear_constraint_table(): + for key in list(constraint_table): + del constraint_table[key] + + class AnalysisBaseTestCase(BaseTestCase): connection = namedtuple( 'connection', @@ -55,6 +63,7 @@ def constraints(self, list_of_constraints, node_number): def run_analysis(self, path): self.cfg_create_from_file(path) + clear_constraint_table() initialize_constraint_table([self.cfg]) self.analysis = FixedPointAnalysis(self.cfg) self.analysis.fixpoint_runner() diff --git a/tests/analysis/reaching_definitions_taint_test.py b/tests/analysis/reaching_definitions_taint_test.py index 03a38c4b..20f50b5a 100644 --- a/tests/analysis/reaching_definitions_taint_test.py +++ b/tests/analysis/reaching_definitions_taint_test.py @@ -6,7 +6,6 @@ class ReachingDefinitionsTaintTest(AnalysisBaseTestCase): # Note: the numbers in the test represent the line numbers of the assignments in the program. def test_linear_program(self): - # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/linear.py') EXPECTED = [ @@ -24,7 +23,6 @@ def test_linear_program(self): i = i + 1 def test_if_program(self): - # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/if_program.py') EXPECTED = [ @@ -43,7 +41,6 @@ def test_if_program(self): i = i + 1 def test_example(self): - # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/example.py') EXPECTED = [ @@ -84,7 +81,6 @@ def test_func_with_params(self): *self.constraints([2, 3, 4, 6, 7, 9], 10)], lattice) def test_while(self): - # constraint_table = {} lattice = self.run_analysis('examples/example_inputs/while.py') EXPECTED = [ diff --git a/tox.ini b/tox.ini index 933a1460..f85b156c 100644 --- a/tox.ini +++ b/tox.ini @@ -7,5 +7,6 @@ deps = -rrequirements-dev.txt commands = coverage erase coverage run tests - coverage report --show-missing --fail-under 88 + coverage report --include=tests/* --fail-under 100 + coverage report --include=pyt/* --fail-under 88 pre-commit run From de48495322e70f00d94dc98d9e8f74f0d654f73b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 25 Apr 2018 18:48:10 -0700 Subject: [PATCH 300/541] [coveragerc] Add show_missing = True --- .coveragerc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.coveragerc b/.coveragerc index ebd6df4f..bfd2571f 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,4 +1,6 @@ [report] +show_missing = True + exclude_lines = def valid_date def __repr__ From 0f5fb431c0ac6d804d54439e266da4c70addae84 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 25 Apr 2018 19:07:33 -0700 Subject: [PATCH 301/541] fix silly usage and main -r things --- pyt/__main__.py | 12 ++++++------ pyt/usage.py | 8 ++++---- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 7831a177..c1bc68ef 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -5,23 +5,23 @@ from .analysis.constraint_table import initialize_constraint_table from .analysis.fixed_point import analyse -from .ast_helper import generate_ast from .cfg import make_cfg +from .core.ast_helper import generate_ast +from .core.project_handler import ( + get_directory_modules, + get_modules +) from .formatters import ( json, text ) -from .project_handler import ( - get_directory_modules, - get_modules -) from .usage import parse_args from .vulnerabilities import ( find_vulnerabilities, get_vulnerabilities_not_in_baseline, UImode ) -from pyt.web_frameworks import ( +from .web_frameworks import ( FrameworkAdaptor, is_django_view_function, is_flask_route_function, diff --git a/pyt/usage.py b/pyt/usage.py index 37fa3bc2..d2cf2d98 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -96,10 +96,10 @@ def _add_print_group(parser): def _check_required_and_mutually_exclusive_args(parser, args): - if args.filepath is None and args.git_repos is None: - parser.error('one of the arguments -f/--filepath -gr/--git-repos is required') - if args.filepath and args.git_repos: - parser.error('argument -f/--filepath: not allowed with argument -gr/--git-repos') + if args.filepath is None and args.root_directory is None: + parser.error('one of the arguments -f/--filepath -r/--root-directory is required') + if args.filepath and args.root_directory: + parser.error('argument -f/--filepath: not allowed with argument -r/--root-directory') if args.trim_reassigned_in and args.interactive: parser.error('argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in') From 8c2dffa6c0219cefa6ec9ae1ff9762042eb0d0f2 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 25 Apr 2018 19:11:10 -0700 Subject: [PATCH 302/541] Added: Please see the change log For a look at recent changes, please see the `change log`_. --- README.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.rst b/README.rst index 5e259000..84f04a08 100644 --- a/README.rst +++ b/README.rst @@ -41,6 +41,10 @@ Features * A lot of customisation possible +For a look at recent changes, please see the `change log`_. + +.. _change_log: https://github.com/python-security/pyt/blob/master/CHANGELOG.md + Example usage and output: .. image:: https://raw.githubusercontent.com/KevinHock/rtdpyt/master/readme_static_files/pyt_example.png From 846347b1827a1cbdcdda4f974988e40a52ea25e4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 25 Apr 2018 19:11:55 -0700 Subject: [PATCH 303/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 84f04a08..2f8e9644 100644 --- a/README.rst +++ b/README.rst @@ -41,7 +41,7 @@ Features * A lot of customisation possible -For a look at recent changes, please see the `change log`_. +For a look at recent changes, please see the `change log`_ .. _change_log: https://github.com/python-security/pyt/blob/master/CHANGELOG.md From 3f9d3efe00f50e8d9283b1ae7c01feb7f8f843cc Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 25 Apr 2018 19:14:31 -0700 Subject: [PATCH 304/541] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 2f8e9644..65084da8 100644 --- a/README.rst +++ b/README.rst @@ -41,9 +41,9 @@ Features * A lot of customisation possible -For a look at recent changes, please see the `change log`_ +For a look at recent changes, please see the `changelog`_. -.. _change_log: https://github.com/python-security/pyt/blob/master/CHANGELOG.md +.. _changelog: https://github.com/python-security/pyt/blob/master/CHANGELOG.md Example usage and output: From 3d5867b49f88698430318e79e88803bf14ba234c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 18:40:20 +0300 Subject: [PATCH 305/541] Added nosec_lines Added empty nosec_lines for tests --- tests/vulnerabilities_test.py | 290 +++++++++++++++------------------- 1 file changed, 130 insertions(+), 160 deletions(-) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index f3d77279..7ec1ae1f 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -15,15 +15,14 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import ( +from pyt.framework_helper import( is_django_view_function, - is_flask_route_function, - is_function + is_flask_route_function ) from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis - +nosec_lines = set() class EngineTest(BaseTestCase): def run_empty(self): return @@ -84,7 +83,7 @@ def test_label_contains(self): self.assert_length(l, expected_length=2) def test_find_triggers(self): - self.cfg_create_from_file('examples/vulnerable_code/XSS.py') + self.cfg_create_from_file('example/vulnerable_code/XSS.py') cfg_list = [self.cfg] @@ -93,27 +92,29 @@ def test_find_triggers(self): XSS1 = cfg_list[1] trigger_words = [('get', [])] - l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words) + l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words, nosec_lines) self.assert_length(l, expected_length=1) + def test_find_sanitiser_nodes(self): cfg_node = Node(None, None, line_number=None, path=None) - sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) + sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) sanitiser = 'escape' result = list(vulnerabilities.find_sanitiser_nodes(sanitiser, [sanitiser_tuple])) self.assert_length(result, expected_length=1) self.assertEqual(result[0], cfg_node) + def test_build_sanitiser_node_dict(self): - self.cfg_create_from_file('examples/vulnerable_code/XSS_sanitised.py') + self.cfg_create_from_file('example/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) cfg = cfg_list[1] - cfg_node = Node(None, None, line_number=None, path=None) + cfg_node = Node(None, None, line_number=None, path=None) sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)] sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file) @@ -124,6 +125,7 @@ def test_build_sanitiser_node_dict(self): def run_analysis(self, path): self.cfg_create_from_file(path) + cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) @@ -138,39 +140,40 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, default_trigger_word_file - ) + ), + nosec_lines ) def test_find_vulnerabilities_assign_other_var(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_assign_to_other_var.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection.py') self.assert_length(vulnerabilities, expected_length=1) def test_find_vulnerabilities_inter_command_injection_2(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection_2.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) def test_XSS_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > Line 6: param = ~call_1 - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > Line 9: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > Line 9: resp = ~call_3 - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > Line 10: ret_XSS1 = resp - File: examples/vulnerable_code/XSS.py + File: example/vulnerable_code/XSS.py > reaches line 9, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -178,17 +181,17 @@ def test_XSS_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_command_injection_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/command_injection.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/command_injection.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/command_injection.py + File: example/vulnerable_code/command_injection.py > User input at line 15, trigger word "form[": param = request.form['suggestion'] Reassigned in: - File: examples/vulnerable_code/command_injection.py + File: example/vulnerable_code/command_injection.py > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' - File: examples/vulnerable_code/command_injection.py + File: example/vulnerable_code/command_injection.py > reaches line 18, trigger word "subprocess.call(": ~call_1 = ret_subprocess.call(command, shell=True) """ @@ -196,37 +199,37 @@ def test_command_injection_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > User input at line 15, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 15: image_name = ~call_1 - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 6: save_2_image_name = image_name - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 10: save_3_image_name = image_name - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 10: image_name = save_3_image_name - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 19: temp_2_other_arg = image_name - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 6: other_arg = temp_2_other_arg - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 8: ret_outer = outer_ret_val - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 6: image_name = save_2_image_name - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 19: ~call_2 = ret_outer - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > Line 19: foo = ~call_2 - File: examples/vulnerable_code/path_traversal.py + File: example/vulnerable_code/path_traversal.py > reaches line 20, trigger word "send_file(": ~call_4 = ret_send_file(foo) """ @@ -234,37 +237,37 @@ def test_path_traversal_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_ensure_saved_scope(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/ensure_saved_scope.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > User input at line 15, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 15: image_name = ~call_1 - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 6: save_2_image_name = image_name - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 10: save_3_image_name = image_name - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 10: image_name = save_3_image_name - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 19: temp_2_other_arg = image_name - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 6: other_arg = temp_2_other_arg - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 8: ret_outer = outer_ret_val - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 6: image_name = save_2_image_name - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 19: ~call_2 = ret_outer - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > Line 19: foo = ~call_2 - File: examples/vulnerable_code/ensure_saved_scope.py + File: example/vulnerable_code/ensure_saved_scope.py > reaches line 20, trigger word "send_file(": ~call_4 = ret_send_file(image_name) """ @@ -272,25 +275,25 @@ def test_ensure_saved_scope(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > User input at line 8, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > Line 8: image_name = ~call_1 - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > Line 10: ~call_2 = ret_image_name.replace('..', '') - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > Line 10: image_name = ~call_2 - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > Line 12: ret_cat_picture = ~call_3 - File: examples/vulnerable_code/path_traversal_sanitised.py + File: example/vulnerable_code/path_traversal_sanitised.py > reaches line 12, trigger word "send_file(": ~call_3 = ret_send_file(~call_4) This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') @@ -299,21 +302,21 @@ def test_path_traversal_sanitised_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_path_traversal_sanitised_2_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised_2.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/path_traversal_sanitised_2.py + File: example/vulnerable_code/path_traversal_sanitised_2.py > User input at line 8, trigger word "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/vulnerable_code/path_traversal_sanitised_2.py + File: example/vulnerable_code/path_traversal_sanitised_2.py > Line 8: image_name = ~call_1 - File: examples/vulnerable_code/path_traversal_sanitised_2.py + File: example/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) - File: examples/vulnerable_code/path_traversal_sanitised_2.py + File: example/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ret_cat_picture = ~call_2 - File: examples/vulnerable_code/path_traversal_sanitised_2.py + File: example/vulnerable_code/path_traversal_sanitised_2.py > reaches line 12, trigger word "send_file(": ~call_2 = ret_send_file(~call_3) This vulnerability is potentially sanitised by: Label: if '..' in image_name: @@ -322,19 +325,19 @@ def test_path_traversal_sanitised_2_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_sql_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/sql/sqli.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/sql/sqli.py + File: example/vulnerable_code/sql/sqli.py > User input at line 26, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/sql/sqli.py + File: example/vulnerable_code/sql/sqli.py > Line 26: param = ~call_1 - File: examples/vulnerable_code/sql/sqli.py + File: example/vulnerable_code/sql/sqli.py > Line 27: result = ~call_2 - File: examples/vulnerable_code/sql/sqli.py + File: example/vulnerable_code/sql/sqli.py > reaches line 27, trigger word "execute(": ~call_2 = ret_db.engine.execute(param) """ @@ -342,21 +345,21 @@ def test_sql_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_form_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_form.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_form.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_form.py + File: example/vulnerable_code/XSS_form.py > User input at line 14, trigger word "form[": data = request.form['my_text'] Reassigned in: - File: examples/vulnerable_code/XSS_form.py + File: example/vulnerable_code/XSS_form.py > Line 15: ~call_1 = ret_make_response(~call_2) - File: examples/vulnerable_code/XSS_form.py + File: example/vulnerable_code/XSS_form.py > Line 15: resp = ~call_1 - File: examples/vulnerable_code/XSS_form.py + File: example/vulnerable_code/XSS_form.py > Line 17: ret_example2_action = resp - File: examples/vulnerable_code/XSS_form.py + File: example/vulnerable_code/XSS_form.py > reaches line 15, trigger word "replace(": ~call_2 = ret_html1.replace('{{ data }}', data) """ @@ -364,23 +367,23 @@ def test_XSS_form_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_url_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_url.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_url.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > User input at line 4, trigger word "Framework function URL parameter": url Reassigned in: - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > Line 6: param = url - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > Line 9: ~call_2 = ret_make_response(~call_3) - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > Line 9: resp = ~call_2 - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp - File: examples/vulnerable_code/XSS_url.py + File: example/vulnerable_code/XSS_url.py > reaches line 9, trigger word "replace(": ~call_3 = ret_html.replace('{{ param }}', param) """ @@ -388,29 +391,29 @@ def test_XSS_url_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_no_vuln_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_no_vuln.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') self.assert_length(vulnerabilities, expected_length=0) def test_XSS_reassign_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_reassign.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_reassign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > Line 6: param = ~call_1 - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > Line 8: param = param + '' - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > Line 11: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > Line 11: resp = ~call_3 - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > Line 12: ret_XSS1 = resp - File: examples/vulnerable_code/XSS_reassign.py + File: example/vulnerable_code/XSS_reassign.py > reaches line 11, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -418,27 +421,27 @@ def test_XSS_reassign_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_sanitised_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_sanitised.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > User input at line 7, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 7: param = ~call_1 - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 9: ~call_2 = ret_Markup.escape(param) - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 9: param = ~call_2 - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 12: ~call_4 = ret_make_response(~call_5) - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 12: resp = ~call_4 - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > Line 13: ret_XSS1 = resp - File: examples/vulnerable_code/XSS_sanitised.py + File: example/vulnerable_code/XSS_sanitised.py > reaches line 12, trigger word "replace(": ~call_5 = ret_html.replace('{{ param }}', param) This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) @@ -447,29 +450,29 @@ def test_XSS_sanitised_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_assign_no_vuln_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign_no_vuln.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') self.assert_length(vulnerabilities, expected_length=0) def test_XSS_variable_assign_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 6: param = ~call_1 - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 8: other_var = param + '' - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 11: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 11: resp = ~call_3 - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > Line 12: ret_XSS1 = resp - File: examples/vulnerable_code/XSS_variable_assign.py + File: example/vulnerable_code/XSS_variable_assign.py > reaches line 11, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', other_var) """ @@ -477,29 +480,29 @@ def test_XSS_variable_assign_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) def test_XSS_variable_multiple_assign_result(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_multiple_assign.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, trigger word "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 6: param = ~call_1 - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 8: other_var = param + '' - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 10: not_the_same_var = '' + other_var - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 12: another_one = not_the_same_var + '' - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 15: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 15: resp = ~call_3 - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > Line 17: ret_XSS1 = resp - File: examples/vulnerable_code/XSS_variable_multiple_assign.py + File: example/vulnerable_code/XSS_variable_multiple_assign.py > reaches line 15, trigger word "replace(": ~call_4 = ret_html.replace('{{ param }}', another_one) """ @@ -533,57 +536,24 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, trigger_word_file - ) + ), + nosec_lines ) def test_django_view_param(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code/django_XSS.py') + vulnerabilities = self.run_analysis('example/vulnerable_code/django_XSS.py') self.assert_length(vulnerabilities, expected_length=2) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code/django_XSS.py + File: example/vulnerable_code/django_XSS.py > User input at line 4, trigger word "Framework function URL parameter": param Reassigned in: - File: examples/vulnerable_code/django_XSS.py + File: example/vulnerable_code/django_XSS.py > Line 5: ret_xss1 = ~call_1 - File: examples/vulnerable_code/django_XSS.py + File: example/vulnerable_code/django_XSS.py > reaches line 5, trigger word "render(": ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - -class EngineEveryTest(BaseTestCase): - def run_empty(self): - return - - def run_analysis(self, path): - self.cfg_create_from_file(path) - cfg_list = [self.cfg] - - FrameworkAdaptor(cfg_list, [], [], is_function) - initialize_constraint_table(cfg_list) - - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - - trigger_word_file = os.path.join( - 'pyt', - 'vulnerability_definitions', - 'all_trigger_words.pyt' - ) - - return vulnerabilities.find_vulnerabilities( - cfg_list, - ReachingDefinitionsTaintAnalysis, - UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - trigger_word_file - ) - ) - - def test_self_is_not_tainted(self): - vulnerabilities = self.run_analysis('examples/example_inputs/def_with_self_as_first_arg.py') - self.assert_length(vulnerabilities, expected_length=0) From 1502ee73e81ba6f981ca39658d6f93863091727c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 18:45:03 +0300 Subject: [PATCH 306/541] added empty nosec lines for tests --- tests/vulnerabilities_test.py | 664 ++++++++++------------------------ 1 file changed, 200 insertions(+), 464 deletions(-) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 7ec1ae1f..b30d415b 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -1,11 +1,6 @@ import os from .base_test_case import BaseTestCase - -from pyt import ( - trigger_definitions_parser, - vulnerabilities -) from pyt.argument_helpers import ( default_blackbox_mapping_file, default_trigger_word_file, @@ -15,125 +10,30 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import( - is_django_view_function, - is_flask_route_function -) -from pyt.node_types import Node +from pyt.framework_helper import is_flask_route_function +from pyt.project_handler import get_directory_modules, get_modules from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis +from pyt.vulnerabilities import find_vulnerabilities nosec_lines = set() class EngineTest(BaseTestCase): - def run_empty(self): - return - - def get_lattice_elements(self, cfg_nodes): - """Dummy analysis method""" - return cfg_nodes - - def test_parse(self): - definitions = vulnerabilities.parse( - trigger_word_file=os.path.join( - os.getcwd(), - 'pyt', - 'vulnerability_definitions', - 'test_triggers.pyt' - ) - ) - - self.assert_length(definitions.sources, expected_length=1) - self.assert_length(definitions.sinks, expected_length=3) - self.assert_length(definitions.sinks[0][1], expected_length=1) - self.assert_length(definitions.sinks[1][1], expected_length=3) - - def test_parse_section(self): - l = list(trigger_definitions_parser.parse_section(iter(['get']))) - self.assert_length(l, expected_length=1) - self.assertEqual(l[0][0], 'get') - self.assertEqual(l[0][1], list()) - - l = list(trigger_definitions_parser.parse_section(iter(['get', 'get -> a, b, c d s aq a']))) - self.assert_length(l, expected_length=2) - self.assertEqual(l[0][0], 'get') - self.assertEqual(l[1][0], 'get') - self.assertEqual(l[1][1], ['a', 'b', 'c d s aq a']) - self.assert_length(l[1][1], expected_length=3) - - def test_label_contains(self): - cfg_node = Node('label', None, line_number=None, path=None) - trigger_words = [('get', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=0) - - cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) - trigger_words = [('get', []), ('request', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=2) - - trigger_node_1 = l[0] - trigger_node_2 = l[1] - self.assertEqual(trigger_node_1.trigger_word, 'get') - self.assertEqual(trigger_node_1.cfg_node, cfg_node) - self.assertEqual(trigger_node_2.trigger_word, 'request') - self.assertEqual(trigger_node_2.cfg_node, cfg_node) - - cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) - trigger_words = [('get', []), ('get', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=2) - - def test_find_triggers(self): - self.cfg_create_from_file('example/vulnerable_code/XSS.py') - - cfg_list = [self.cfg] - - FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) - - XSS1 = cfg_list[1] - trigger_words = [('get', [])] - - l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words, nosec_lines) - self.assert_length(l, expected_length=1) - - - def test_find_sanitiser_nodes(self): - cfg_node = Node(None, None, line_number=None, path=None) - sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) - sanitiser = 'escape' + def run_analysis(self, path): + path = os.path.normpath(path) - result = list(vulnerabilities.find_sanitiser_nodes(sanitiser, [sanitiser_tuple])) - self.assert_length(result, expected_length=1) - self.assertEqual(result[0], cfg_node) + project_modules = get_modules(os.path.dirname(path)) + local_modules = get_directory_modules(os.path.dirname(path)) + self.cfg_create_from_file(path, project_modules, local_modules) - def test_build_sanitiser_node_dict(self): - self.cfg_create_from_file('example/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) - cfg = cfg_list[1] - - cfg_node = Node(None, None, line_number=None, path=None) - sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)] - - sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file) - self.assert_length(sanitiser_dict, expected_length=1) - self.assertIn('escape', sanitiser_dict.keys()) - - self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) - - def run_analysis(self, path): - self.cfg_create_from_file(path) - - cfg_list = [self.cfg] - - FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - return vulnerabilities.find_vulnerabilities( + return find_vulnerabilities( cfg_list, ReachingDefinitionsTaintAnalysis, UImode.NORMAL, @@ -144,416 +44,252 @@ def run_analysis(self, path): nosec_lines ) - def test_find_vulnerabilities_assign_other_var(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_assign_to_other_var.py') - self.assert_length(vulnerabilities, expected_length=1) - - def test_find_vulnerabilities_inter_command_injection(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection.py') - self.assert_length(vulnerabilities, expected_length=1) + def test_find_vulnerabilities_absolute_from_file_command_injection(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection.py') - def test_find_vulnerabilities_inter_command_injection_2(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/inter_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) - def test_XSS_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS.py') + def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS.py - > User input at line 6, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS.py - > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS.py - > Line 9: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS.py - > Line 9: resp = ~call_3 - File: example/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": - ~call_4 = ret_html.replace('{{ param }}', param) - """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + def test_no_false_positive_absolute_from_file_command_injection_3(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') + self.assert_length(vulnerabilities, expected_length=0) - def test_command_injection_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/command_injection.py') + def test_blackbox_library_call(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/blackbox_library_call.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/command_injection.py - > User input at line 15, trigger word "form[": - param = request.form['suggestion'] + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > User input at line 12, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('suggestion') Reassigned in: - File: example/vulnerable_code/command_injection.py - > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' - File: example/vulnerable_code/command_injection.py - > reaches line 18, trigger word "subprocess.call(": - ~call_1 = ret_subprocess.call(command, shell=True) + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > Line 12: param = ~call_1 + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > Line 15: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > Line 15: command = ~call_2 + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > Line 16: hey = command + File: examples/vulnerable_code_across_files/blackbox_library_call.py + > reaches line 17, trigger word "subprocess.call(": + ~call_3 = ret_subprocess.call(hey, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_path_traversal_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal.py') + def test_builtin_with_user_defined_inner(self): + vulnerabilities = self.run_analysis('examples/nested_functions_code/builtin_with_user_defined_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal.py - > User input at line 15, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > User input at line 16, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/path_traversal.py - > Line 15: image_name = ~call_1 - File: example/vulnerable_code/path_traversal.py - > Line 6: save_2_image_name = image_name - File: example/vulnerable_code/path_traversal.py - > Line 10: save_3_image_name = image_name - File: example/vulnerable_code/path_traversal.py - > Line 10: image_name = save_3_image_name - File: example/vulnerable_code/path_traversal.py - > Line 19: temp_2_other_arg = image_name - File: example/vulnerable_code/path_traversal.py - > Line 6: other_arg = temp_2_other_arg - File: example/vulnerable_code/path_traversal.py - > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: example/vulnerable_code/path_traversal.py - > Line 8: ret_outer = outer_ret_val - File: example/vulnerable_code/path_traversal.py - > Line 6: image_name = save_2_image_name - File: example/vulnerable_code/path_traversal.py - > Line 19: ~call_2 = ret_outer - File: example/vulnerable_code/path_traversal.py - > Line 19: foo = ~call_2 - File: example/vulnerable_code/path_traversal.py - > reaches line 20, trigger word "send_file(": - ~call_4 = ret_send_file(foo) + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 10: save_2_req_param = req_param + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 19: temp_2_inner_arg = req_param + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 10: inner_arg = temp_2_inner_arg + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 11: yes_vuln = inner_arg + 'hey' + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 12: ret_inner = yes_vuln + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 10: req_param = save_2_req_param + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 19: ~call_2 = ret_inner + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 19: ~call_1 = ret_scrypt.encrypt(~call_2) + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > Line 19: foo = ~call_1 + File: examples/nested_functions_code/builtin_with_user_defined_inner.py + > reaches line 20, trigger word "subprocess.call(": + ~call_3 = ret_subprocess.call(foo, shell=True) + This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_ensure_saved_scope(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/ensure_saved_scope.py') + def test_sink_with_result_of_blackbox_nested(self): + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_blackbox_nested.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/ensure_saved_scope.py - > User input at line 15, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/ensure_saved_scope.py - > Line 15: image_name = ~call_1 - File: example/vulnerable_code/ensure_saved_scope.py - > Line 6: save_2_image_name = image_name - File: example/vulnerable_code/ensure_saved_scope.py - > Line 10: save_3_image_name = image_name - File: example/vulnerable_code/ensure_saved_scope.py - > Line 10: image_name = save_3_image_name - File: example/vulnerable_code/ensure_saved_scope.py - > Line 19: temp_2_other_arg = image_name - File: example/vulnerable_code/ensure_saved_scope.py - > Line 6: other_arg = temp_2_other_arg - File: example/vulnerable_code/ensure_saved_scope.py - > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: example/vulnerable_code/ensure_saved_scope.py - > Line 8: ret_outer = outer_ret_val - File: example/vulnerable_code/ensure_saved_scope.py - > Line 6: image_name = save_2_image_name - File: example/vulnerable_code/ensure_saved_scope.py - > Line 19: ~call_2 = ret_outer - File: example/vulnerable_code/ensure_saved_scope.py - > Line 19: foo = ~call_2 - File: example/vulnerable_code/ensure_saved_scope.py - > reaches line 20, trigger word "send_file(": - ~call_4 = ret_send_file(image_name) + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: result = ~call_1 + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > reaches line 14, trigger word "subprocess.call(": + ~call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt(req_param) """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_path_traversal_sanitised_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised.py') - self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal_sanitised.py - > User input at line 8, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/path_traversal_sanitised.py - > Line 8: image_name = ~call_1 - File: example/vulnerable_code/path_traversal_sanitised.py - > Line 10: ~call_2 = ret_image_name.replace('..', '') - File: example/vulnerable_code/path_traversal_sanitised.py - > Line 10: image_name = ~call_2 - File: example/vulnerable_code/path_traversal_sanitised.py - > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) - File: example/vulnerable_code/path_traversal_sanitised.py - > Line 12: ret_cat_picture = ~call_3 - File: example/vulnerable_code/path_traversal_sanitised.py - > reaches line 12, trigger word "send_file(": - ~call_3 = ret_send_file(~call_4) - This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > Line 13: result = ~call_1 + File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py + > reaches line 14, trigger word "subprocess.call(": + ~call_3 = ret_subprocess.call(result, shell=True) + This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_path_traversal_sanitised_2_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/path_traversal_sanitised_2.py') + def test_sink_with_result_of_user_defined_nested(self): + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_user_defined_nested.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/path_traversal_sanitised_2.py - > User input at line 8, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > User input at line 16, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 8: image_name = ~call_1 - File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) - File: example/vulnerable_code/path_traversal_sanitised_2.py - > Line 12: ret_cat_picture = ~call_2 - File: example/vulnerable_code/path_traversal_sanitised_2.py - > reaches line 12, trigger word "send_file(": - ~call_2 = ret_send_file(~call_3) - This vulnerability is potentially sanitised by: Label: if '..' in image_name: + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: save_1_req_param = req_param + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: save_2_req_param = req_param + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 17: temp_2_inner_arg = req_param + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: inner_arg = temp_2_inner_arg + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 11: inner_ret_val = inner_arg + 'hey' + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 12: ret_inner = inner_ret_val + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 10: req_param = save_2_req_param + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 17: ~call_2 = ret_inner + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 17: temp_1_outer_arg = ~call_2 + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: outer_arg = temp_1_outer_arg + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 7: outer_ret_val = outer_arg + 'hey' + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 8: ret_outer = outer_ret_val + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 6: req_param = save_1_req_param + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 17: ~call_1 = ret_outer + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > Line 17: result = ~call_1 + File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py + > reaches line 18, trigger word "subprocess.call(": + ~call_3 = ret_subprocess.call(result, shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_sql_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/sql/sqli.py') + def test_sink_with_blackbox_inner(self): + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_blackbox_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/sql/sqli.py - > User input at line 26, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/sql/sqli.py - > Line 26: param = ~call_1 - File: example/vulnerable_code/sql/sqli.py - > Line 27: result = ~call_2 - File: example/vulnerable_code/sql/sqli.py - > reaches line 27, trigger word "execute(": - ~call_2 = ret_db.engine.execute(param) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ~call_3 = ret_scrypt.encypt(req_param) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > reaches line 14, trigger word "subprocess.call(": + ~call_1 = ret_subprocess.call(~call_2, shell=True) + This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encypt(~call_3) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_XSS_form_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_form.py') - self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_form.py - > User input at line 14, trigger word "form[": - data = request.form['my_text'] + OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > User input at line 12, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/XSS_form.py - > Line 15: ~call_1 = ret_make_response(~call_2) - File: example/vulnerable_code/XSS_form.py - > Line 15: resp = ~call_1 - File: example/vulnerable_code/XSS_form.py - > Line 17: ret_example2_action = resp - File: example/vulnerable_code/XSS_form.py - > reaches line 15, trigger word "replace(": - ~call_2 = ret_html1.replace('{{ data }}', data) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ~call_3 = ret_scrypt.encypt(req_param) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) + File: examples/nested_functions_code/sink_with_blackbox_inner.py + > reaches line 14, trigger word "subprocess.call(": + ~call_1 = ret_subprocess.call(~call_2, shell=True) + This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + or + self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_XSS_url_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_url.py') + def test_sink_with_user_defined_inner(self): + vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_user_defined_inner.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_url.py - > User input at line 4, trigger word "Framework function URL parameter": - url + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > User input at line 16, trigger word "form[": + req_param = request.form['suggestion'] Reassigned in: - File: example/vulnerable_code/XSS_url.py - > Line 6: param = url - File: example/vulnerable_code/XSS_url.py - > Line 9: ~call_2 = ret_make_response(~call_3) - File: example/vulnerable_code/XSS_url.py - > Line 9: resp = ~call_2 - File: example/vulnerable_code/XSS_url.py - > Line 10: ret_XSS1 = resp - File: example/vulnerable_code/XSS_url.py - > reaches line 9, trigger word "replace(": - ~call_3 = ret_html.replace('{{ param }}', param) + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: save_2_req_param = req_param + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: save_3_req_param = req_param + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 18: temp_3_inner_arg = req_param + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: inner_arg = temp_3_inner_arg + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 11: inner_ret_val = inner_arg + 'hey' + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 12: ret_inner = inner_ret_val + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 10: req_param = save_3_req_param + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 18: ~call_3 = ret_inner + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 18: temp_2_outer_arg = ~call_3 + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: outer_arg = temp_2_outer_arg + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 7: outer_ret_val = outer_arg + 'hey' + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 8: ret_outer = outer_ret_val + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 6: req_param = save_2_req_param + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > Line 18: ~call_2 = ret_outer + File: examples/nested_functions_code/sink_with_user_defined_inner.py + > reaches line 18, trigger word "subprocess.call(": + ~call_1 = ret_subprocess.call(~call_2, shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_XSS_no_vuln_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_no_vuln.py') - self.assert_length(vulnerabilities, expected_length=0) + def test_find_vulnerabilities_import_file_command_injection(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection.py') - def test_XSS_reassign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_reassign.py') self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_reassign.py - > User input at line 6, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS_reassign.py - > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_reassign.py - > Line 8: param = param + '' - File: example/vulnerable_code/XSS_reassign.py - > Line 11: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_reassign.py - > Line 11: resp = ~call_3 - File: example/vulnerable_code/XSS_reassign.py - > Line 12: ret_XSS1 = resp - File: example/vulnerable_code/XSS_reassign.py - > reaches line 11, trigger word "replace(": - ~call_4 = ret_html.replace('{{ param }}', param) - """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_XSS_sanitised_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_sanitised.py') + def test_find_vulnerabilities_import_file_command_injection_2(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_sanitised.py - > User input at line 7, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS_sanitised.py - > Line 7: param = ~call_1 - File: example/vulnerable_code/XSS_sanitised.py - > Line 9: ~call_2 = ret_Markup.escape(param) - File: example/vulnerable_code/XSS_sanitised.py - > Line 9: param = ~call_2 - File: example/vulnerable_code/XSS_sanitised.py - > Line 12: ~call_4 = ret_make_response(~call_5) - File: example/vulnerable_code/XSS_sanitised.py - > Line 12: resp = ~call_4 - File: example/vulnerable_code/XSS_sanitised.py - > Line 13: ret_XSS1 = resp - File: example/vulnerable_code/XSS_sanitised.py - > reaches line 12, trigger word "replace(": - ~call_5 = ret_html.replace('{{ param }}', param) - This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) - """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_XSS_variable_assign_no_vuln_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign_no_vuln.py') + def test_no_false_positive_import_file_command_injection_3(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') self.assert_length(vulnerabilities, expected_length=0) - - def test_XSS_variable_assign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_assign.py') - self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_variable_assign.py - > User input at line 6, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS_variable_assign.py - > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_variable_assign.py - > Line 8: other_var = param + '' - File: example/vulnerable_code/XSS_variable_assign.py - > Line 11: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_variable_assign.py - > Line 11: resp = ~call_3 - File: example/vulnerable_code/XSS_variable_assign.py - > Line 12: ret_XSS1 = resp - File: example/vulnerable_code/XSS_variable_assign.py - > reaches line 11, trigger word "replace(": - ~call_4 = ret_html.replace('{{ param }}', other_var) - """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - def test_XSS_variable_multiple_assign_result(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/XSS_variable_multiple_assign.py') - self.assert_length(vulnerabilities, expected_length=1) - vulnerability_description = str(vulnerabilities[0]) - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > User input at line 6, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') - Reassigned in: - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 6: param = ~call_1 - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 8: other_var = param + '' - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 10: not_the_same_var = '' + other_var - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 12: another_one = not_the_same_var + '' - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: ~call_3 = ret_make_response(~call_4) - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: resp = ~call_3 - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > Line 17: ret_XSS1 = resp - File: example/vulnerable_code/XSS_variable_multiple_assign.py - > reaches line 15, trigger word "replace(": - ~call_4 = ret_html.replace('{{ param }}', another_one) - """ - - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - - -class EngineDjangoTest(BaseTestCase): - def run_empty(self): - return - - def run_analysis(self, path): - self.cfg_create_from_file(path) - cfg_list = [self.cfg] - - FrameworkAdaptor(cfg_list, [], [], is_django_view_function) - initialize_constraint_table(cfg_list) - - analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - - trigger_word_file = os.path.join( - 'pyt', - 'vulnerability_definitions', - 'django_trigger_words.pyt' - ) - - return vulnerabilities.find_vulnerabilities( - cfg_list, - ReachingDefinitionsTaintAnalysis, - UImode.NORMAL, - VulnerabilityFiles( - default_blackbox_mapping_file, - trigger_word_file - ), - nosec_lines - ) - - def test_django_view_param(self): - vulnerabilities = self.run_analysis('example/vulnerable_code/django_XSS.py') - self.assert_length(vulnerabilities, expected_length=2) - vulnerability_description = str(vulnerabilities[0]) - - EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: example/vulnerable_code/django_XSS.py - > User input at line 4, trigger word "Framework function URL parameter": - param - Reassigned in: - File: example/vulnerable_code/django_XSS.py - > Line 5: ret_xss1 = ~call_1 - File: example/vulnerable_code/django_XSS.py - > reaches line 5, trigger word "render(": - ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) - """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From bed2f77fc96e07ad6006df540cd450afd5b6b039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 18:53:40 +0300 Subject: [PATCH 307/541] added nosec_lines --- tests/vulnerabilities_test.py | 697 ++++++++++++++++++++++++---------- 1 file changed, 497 insertions(+), 200 deletions(-) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index b30d415b..381860ae 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -1,6 +1,11 @@ import os from .base_test_case import BaseTestCase + +from pyt import ( + trigger_definitions_parser, + vulnerabilities +) from pyt.argument_helpers import ( default_blackbox_mapping_file, default_trigger_word_file, @@ -10,30 +15,123 @@ from pyt.constraint_table import initialize_constraint_table from pyt.fixed_point import analyse from pyt.framework_adaptor import FrameworkAdaptor -from pyt.framework_helper import is_flask_route_function -from pyt.project_handler import get_directory_modules, get_modules +from pyt.framework_helper import ( + is_django_view_function, + is_flask_route_function, + is_function +) +from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from pyt.vulnerabilities import find_vulnerabilities nosec_lines = set() class EngineTest(BaseTestCase): - def run_analysis(self, path): - path = os.path.normpath(path) + def run_empty(self): + return + + def get_lattice_elements(self, cfg_nodes): + """Dummy analysis method""" + return cfg_nodes + + def test_parse(self): + definitions = vulnerabilities.parse( + trigger_word_file=os.path.join( + os.getcwd(), + 'pyt', + 'vulnerability_definitions', + 'test_triggers.pyt' + ) + ) + + self.assert_length(definitions.sources, expected_length=1) + self.assert_length(definitions.sinks, expected_length=3) + self.assert_length(definitions.sinks[0][1], expected_length=1) + self.assert_length(definitions.sinks[1][1], expected_length=3) + + def test_parse_section(self): + l = list(trigger_definitions_parser.parse_section(iter(['get']))) + self.assert_length(l, expected_length=1) + self.assertEqual(l[0][0], 'get') + self.assertEqual(l[0][1], list()) + + l = list(trigger_definitions_parser.parse_section(iter(['get', 'get -> a, b, c d s aq a']))) + self.assert_length(l, expected_length=2) + self.assertEqual(l[0][0], 'get') + self.assertEqual(l[1][0], 'get') + self.assertEqual(l[1][1], ['a', 'b', 'c d s aq a']) + self.assert_length(l[1][1], expected_length=3) + + def test_label_contains(self): + cfg_node = Node('label', None, line_number=None, path=None) + trigger_words = [('get', [])] + l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(l, expected_length=0) + + cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) + trigger_words = [('get', []), ('request', [])] + l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(l, expected_length=2) + + trigger_node_1 = l[0] + trigger_node_2 = l[1] + self.assertEqual(trigger_node_1.trigger_word, 'get') + self.assertEqual(trigger_node_1.cfg_node, cfg_node) + self.assertEqual(trigger_node_2.trigger_word, 'request') + self.assertEqual(trigger_node_2.cfg_node, cfg_node) + + cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) + trigger_words = [('get', []), ('get', [])] + l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(l, expected_length=2) + + def test_find_triggers(self): + self.cfg_create_from_file('examples/vulnerable_code/XSS.py') + + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) + + XSS1 = cfg_list[1] + trigger_words = [('get', [])] + + l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words, nosec_lines) + self.assert_length(l, expected_length=1) - project_modules = get_modules(os.path.dirname(path)) - local_modules = get_directory_modules(os.path.dirname(path)) + def test_find_sanitiser_nodes(self): + cfg_node = Node(None, None, line_number=None, path=None) + sanitiser_tuple = vulnerabilities.Sanitiser('escape', cfg_node) + sanitiser = 'escape' - self.cfg_create_from_file(path, project_modules, local_modules) + result = list(vulnerabilities.find_sanitiser_nodes(sanitiser, [sanitiser_tuple])) + self.assert_length(result, expected_length=1) + self.assertEqual(result[0], cfg_node) + def test_build_sanitiser_node_dict(self): + self.cfg_create_from_file('examples/vulnerable_code/XSS_sanitised.py') cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) + cfg = cfg_list[1] + + cfg_node = Node(None, None, line_number=None, path=None) + sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)] + + sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file) + self.assert_length(sanitiser_dict, expected_length=1) + self.assertIn('escape', sanitiser_dict.keys()) + + self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) + + def run_analysis(self, path): + self.cfg_create_from_file(path) + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) initialize_constraint_table(cfg_list) analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) - return find_vulnerabilities( + return vulnerabilities.find_vulnerabilities( cfg_list, ReachingDefinitionsTaintAnalysis, UImode.NORMAL, @@ -44,252 +142,451 @@ def run_analysis(self, path): nosec_lines ) - def test_find_vulnerabilities_absolute_from_file_command_injection(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection.py') + def test_find_vulnerabilities_assign_other_var(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_assign_to_other_var.py') + self.assert_length(vulnerabilities, expected_length=1) + def test_find_vulnerabilities_inter_command_injection(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection.py') self.assert_length(vulnerabilities, expected_length=1) - def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/absolute_from_file_command_injection_2.py') + def test_find_vulnerabilities_inter_command_injection_2(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/inter_command_injection_2.py') self.assert_length(vulnerabilities, expected_length=1) - def test_no_false_positive_absolute_from_file_command_injection_3(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') - self.assert_length(vulnerabilities, expected_length=0) + def test_XSS_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS.py + > User input at line 6, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS.py + > Line 6: param = ~call_1 + File: examples/vulnerable_code/XSS.py + > Line 9: ~call_3 = ret_make_response(~call_4) + File: examples/vulnerable_code/XSS.py + > Line 9: resp = ~call_3 + File: examples/vulnerable_code/XSS.py + > Line 10: ret_XSS1 = resp + File: examples/vulnerable_code/XSS.py + > reaches line 9, trigger word "replace(": + ~call_4 = ret_html.replace('{{ param }}', param) + """ - def test_blackbox_library_call(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/blackbox_library_call.py') + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_command_injection_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/command_injection.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > User input at line 12, trigger word "request.args.get(": - ~call_1 = ret_request.args.get('suggestion') + File: examples/vulnerable_code/command_injection.py + > User input at line 15, trigger word "form[": + param = request.form['suggestion'] Reassigned in: - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > Line 12: param = ~call_1 - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > Line 15: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > Line 15: command = ~call_2 - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > Line 16: hey = command - File: examples/vulnerable_code_across_files/blackbox_library_call.py - > reaches line 17, trigger word "subprocess.call(": - ~call_3 = ret_subprocess.call(hey, shell=True) - This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + File: examples/vulnerable_code/command_injection.py + > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' + File: examples/vulnerable_code/command_injection.py + > reaches line 18, trigger word "subprocess.call(": + ~call_1 = ret_subprocess.call(command, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_builtin_with_user_defined_inner(self): - vulnerabilities = self.run_analysis('examples/nested_functions_code/builtin_with_user_defined_inner.py') + def test_path_traversal_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > User input at line 16, trigger word "form[": - req_param = request.form['suggestion'] + File: examples/vulnerable_code/path_traversal.py + > User input at line 15, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 10: save_2_req_param = req_param - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: temp_2_inner_arg = req_param - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 10: inner_arg = temp_2_inner_arg - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 11: yes_vuln = inner_arg + 'hey' - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 12: ret_inner = yes_vuln - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 10: req_param = save_2_req_param - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: ~call_2 = ret_inner - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: ~call_1 = ret_scrypt.encrypt(~call_2) - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 19: foo = ~call_1 - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > reaches line 20, trigger word "subprocess.call(": - ~call_3 = ret_subprocess.call(foo, shell=True) - This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) + File: examples/vulnerable_code/path_traversal.py + > Line 15: image_name = ~call_1 + File: examples/vulnerable_code/path_traversal.py + > Line 6: save_2_image_name = image_name + File: examples/vulnerable_code/path_traversal.py + > Line 10: save_3_image_name = image_name + File: examples/vulnerable_code/path_traversal.py + > Line 10: image_name = save_3_image_name + File: examples/vulnerable_code/path_traversal.py + > Line 19: temp_2_other_arg = image_name + File: examples/vulnerable_code/path_traversal.py + > Line 6: other_arg = temp_2_other_arg + File: examples/vulnerable_code/path_traversal.py + > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg + File: examples/vulnerable_code/path_traversal.py + > Line 8: ret_outer = outer_ret_val + File: examples/vulnerable_code/path_traversal.py + > Line 6: image_name = save_2_image_name + File: examples/vulnerable_code/path_traversal.py + > Line 19: ~call_2 = ret_outer + File: examples/vulnerable_code/path_traversal.py + > Line 19: foo = ~call_2 + File: examples/vulnerable_code/path_traversal.py + > reaches line 20, trigger word "send_file(": + ~call_4 = ret_send_file(foo) """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_sink_with_result_of_blackbox_nested(self): - vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_blackbox_nested.py') + def test_ensure_saved_scope(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/ensure_saved_scope.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > User input at line 12, trigger word "form[": - req_param = request.form['suggestion'] + File: examples/vulnerable_code/ensure_saved_scope.py + > User input at line 15, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: result = ~call_1 - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > reaches line 14, trigger word "subprocess.call(": - ~call_3 = ret_subprocess.call(result, shell=True) - This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt(req_param) + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 15: image_name = ~call_1 + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 6: save_2_image_name = image_name + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 10: save_3_image_name = image_name + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 10: image_name = save_3_image_name + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 19: temp_2_other_arg = image_name + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 6: other_arg = temp_2_other_arg + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 8: ret_outer = outer_ret_val + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 6: image_name = save_2_image_name + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 19: ~call_2 = ret_outer + File: examples/vulnerable_code/ensure_saved_scope.py + > Line 19: foo = ~call_2 + File: examples/vulnerable_code/ensure_saved_scope.py + > reaches line 20, trigger word "send_file(": + ~call_4 = ret_send_file(image_name) """ - OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > User input at line 12, trigger word "form[": - req_param = request.form['suggestion'] + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_path_traversal_sanitised_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/path_traversal_sanitised.py + > User input at line 8, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ~call_2 = ret_scrypt.encrypt(req_param) - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: ~call_1 = ret_scrypt.encrypt(~call_2) - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > Line 13: result = ~call_1 - File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > reaches line 14, trigger word "subprocess.call(": - ~call_3 = ret_subprocess.call(result, shell=True) - This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) + File: examples/vulnerable_code/path_traversal_sanitised.py + > Line 8: image_name = ~call_1 + File: examples/vulnerable_code/path_traversal_sanitised.py + > Line 10: ~call_2 = ret_image_name.replace('..', '') + File: examples/vulnerable_code/path_traversal_sanitised.py + > Line 10: image_name = ~call_2 + File: examples/vulnerable_code/path_traversal_sanitised.py + > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) + File: examples/vulnerable_code/path_traversal_sanitised.py + > Line 12: ret_cat_picture = ~call_3 + File: examples/vulnerable_code/path_traversal_sanitised.py + > reaches line 12, trigger word "send_file(": + ~call_3 = ret_send_file(~call_4) + This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) - or - self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_sink_with_result_of_user_defined_nested(self): - vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_user_defined_nested.py') + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_path_traversal_sanitised_2_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised_2.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > User input at line 16, trigger word "form[": - req_param = request.form['suggestion'] + File: examples/vulnerable_code/path_traversal_sanitised_2.py + > User input at line 8, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('image_name') Reassigned in: - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 6: save_1_req_param = req_param - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 10: save_2_req_param = req_param - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: temp_2_inner_arg = req_param - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 10: inner_arg = temp_2_inner_arg - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 11: inner_ret_val = inner_arg + 'hey' - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 12: ret_inner = inner_ret_val - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 10: req_param = save_2_req_param - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: ~call_2 = ret_inner - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: temp_1_outer_arg = ~call_2 - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 6: outer_arg = temp_1_outer_arg - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 7: outer_ret_val = outer_arg + 'hey' - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 8: ret_outer = outer_ret_val - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 6: req_param = save_1_req_param - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: ~call_1 = ret_outer - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 17: result = ~call_1 - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > reaches line 18, trigger word "subprocess.call(": - ~call_3 = ret_subprocess.call(result, shell=True) + File: examples/vulnerable_code/path_traversal_sanitised_2.py + > Line 8: image_name = ~call_1 + File: examples/vulnerable_code/path_traversal_sanitised_2.py + > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) + File: examples/vulnerable_code/path_traversal_sanitised_2.py + > Line 12: ret_cat_picture = ~call_2 + File: examples/vulnerable_code/path_traversal_sanitised_2.py + > reaches line 12, trigger word "send_file(": + ~call_2 = ret_send_file(~call_3) + This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_sink_with_blackbox_inner(self): - vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_blackbox_inner.py') + def test_sql_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > User input at line 12, trigger word "form[": - req_param = request.form['suggestion'] + File: examples/vulnerable_code/sql/sqli.py + > User input at line 26, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ~call_3 = ret_scrypt.encypt(req_param) - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > reaches line 14, trigger word "subprocess.call(": - ~call_1 = ret_subprocess.call(~call_2, shell=True) - This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encypt(~call_3) + File: examples/vulnerable_code/sql/sqli.py + > Line 26: param = ~call_1 + File: examples/vulnerable_code/sql/sqli.py + > Line 27: result = ~call_2 + File: examples/vulnerable_code/sql/sqli.py + > reaches line 27, trigger word "execute(": + ~call_2 = ret_db.engine.execute(param) """ - OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > User input at line 12, trigger word "form[": - req_param = request.form['suggestion'] + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_form_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_form.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS_form.py + > User input at line 14, trigger word "form[": + data = request.form['my_text'] Reassigned in: - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ~call_3 = ret_scrypt.encypt(req_param) - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) - File: examples/nested_functions_code/sink_with_blackbox_inner.py - > reaches line 14, trigger word "subprocess.call(": - ~call_1 = ret_subprocess.call(~call_2, shell=True) - This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) + File: examples/vulnerable_code/XSS_form.py + > Line 15: ~call_1 = ret_make_response(~call_2) + File: examples/vulnerable_code/XSS_form.py + > Line 15: resp = ~call_1 + File: examples/vulnerable_code/XSS_form.py + > Line 17: ret_example2_action = resp + File: examples/vulnerable_code/XSS_form.py + > reaches line 15, trigger word "replace(": + ~call_2 = ret_html1.replace('{{ data }}', data) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) - or - self.string_compare_alpha(vulnerability_description, OTHER_EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_sink_with_user_defined_inner(self): - vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_user_defined_inner.py') + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_url_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_url.py') self.assert_length(vulnerabilities, expected_length=1) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > User input at line 16, trigger word "form[": - req_param = request.form['suggestion'] + File: examples/vulnerable_code/XSS_url.py + > User input at line 4, trigger word "Framework function URL parameter": + url Reassigned in: - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: save_2_req_param = req_param - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: save_3_req_param = req_param - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: temp_3_inner_arg = req_param - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: inner_arg = temp_3_inner_arg - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 11: inner_ret_val = inner_arg + 'hey' - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 12: ret_inner = inner_ret_val - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: req_param = save_3_req_param - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: ~call_3 = ret_inner - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: temp_2_outer_arg = ~call_3 - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: outer_arg = temp_2_outer_arg - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 7: outer_ret_val = outer_arg + 'hey' - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 8: ret_outer = outer_ret_val - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: req_param = save_2_req_param - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 18: ~call_2 = ret_outer - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > reaches line 18, trigger word "subprocess.call(": - ~call_1 = ret_subprocess.call(~call_2, shell=True) + File: examples/vulnerable_code/XSS_url.py + > Line 6: param = url + File: examples/vulnerable_code/XSS_url.py + > Line 9: ~call_2 = ret_make_response(~call_3) + File: examples/vulnerable_code/XSS_url.py + > Line 9: resp = ~call_2 + File: examples/vulnerable_code/XSS_url.py + > Line 10: ret_XSS1 = resp + File: examples/vulnerable_code/XSS_url.py + > reaches line 9, trigger word "replace(": + ~call_3 = ret_html.replace('{{ param }}', param) """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_find_vulnerabilities_import_file_command_injection(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection.py') + def test_XSS_no_vuln_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_no_vuln.py') + self.assert_length(vulnerabilities, expected_length=0) + def test_XSS_reassign_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_reassign.py') self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS_reassign.py + > User input at line 6, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS_reassign.py + > Line 6: param = ~call_1 + File: examples/vulnerable_code/XSS_reassign.py + > Line 8: param = param + '' + File: examples/vulnerable_code/XSS_reassign.py + > Line 11: ~call_3 = ret_make_response(~call_4) + File: examples/vulnerable_code/XSS_reassign.py + > Line 11: resp = ~call_3 + File: examples/vulnerable_code/XSS_reassign.py + > Line 12: ret_XSS1 = resp + File: examples/vulnerable_code/XSS_reassign.py + > reaches line 11, trigger word "replace(": + ~call_4 = ret_html.replace('{{ param }}', param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) - def test_find_vulnerabilities_import_file_command_injection_2(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection_2.py') + def test_XSS_sanitised_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_sanitised.py') self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS_sanitised.py + > User input at line 7, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS_sanitised.py + > Line 7: param = ~call_1 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 9: ~call_2 = ret_Markup.escape(param) + File: examples/vulnerable_code/XSS_sanitised.py + > Line 9: param = ~call_2 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 12: ~call_4 = ret_make_response(~call_5) + File: examples/vulnerable_code/XSS_sanitised.py + > Line 12: resp = ~call_4 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 13: ret_XSS1 = resp + File: examples/vulnerable_code/XSS_sanitised.py + > reaches line 12, trigger word "replace(": + ~call_5 = ret_html.replace('{{ param }}', param) + This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_variable_assign_no_vuln_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign_no_vuln.py') + self.assert_length(vulnerabilities, expected_length=0) + + def test_XSS_variable_assign_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS_variable_assign.py + > User input at line 6, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS_variable_assign.py + > Line 6: param = ~call_1 + File: examples/vulnerable_code/XSS_variable_assign.py + > Line 8: other_var = param + '' + File: examples/vulnerable_code/XSS_variable_assign.py + > Line 11: ~call_3 = ret_make_response(~call_4) + File: examples/vulnerable_code/XSS_variable_assign.py + > Line 11: resp = ~call_3 + File: examples/vulnerable_code/XSS_variable_assign.py + > Line 12: ret_XSS1 = resp + File: examples/vulnerable_code/XSS_variable_assign.py + > reaches line 11, trigger word "replace(": + ~call_4 = ret_html.replace('{{ param }}', other_var) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + def test_XSS_variable_multiple_assign_result(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_multiple_assign.py') + self.assert_length(vulnerabilities, expected_length=1) + vulnerability_description = str(vulnerabilities[0]) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > User input at line 6, trigger word "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 6: param = ~call_1 + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 8: other_var = param + '' + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 10: not_the_same_var = '' + other_var + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 12: another_one = not_the_same_var + '' + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 15: ~call_3 = ret_make_response(~call_4) + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 15: resp = ~call_3 + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > Line 17: ret_XSS1 = resp + File: examples/vulnerable_code/XSS_variable_multiple_assign.py + > reaches line 15, trigger word "replace(": + ~call_4 = ret_html.replace('{{ param }}', another_one) + """ + + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + +class EngineDjangoTest(BaseTestCase): + def run_empty(self): + return + + def run_analysis(self, path): + self.cfg_create_from_file(path) + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_django_view_function) + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + + trigger_word_file = os.path.join( + 'pyt', + 'vulnerability_definitions', + 'django_trigger_words.pyt' + ) + + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + trigger_word_file + ), + nosec_lines + ) + + def test_django_view_param(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/django_XSS.py') + self.assert_length(vulnerabilities, expected_length=2) + vulnerability_description = str(vulnerabilities[0]) + + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/django_XSS.py + > User input at line 4, trigger word "Framework function URL parameter": + param + Reassigned in: + File: examples/vulnerable_code/django_XSS.py + > Line 5: ret_xss1 = ~call_1 + File: examples/vulnerable_code/django_XSS.py + > reaches line 5, trigger word "render(": + ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) + """ + self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + + +class EngineEveryTest(BaseTestCase): + def run_empty(self): + return + + def run_analysis(self, path): + self.cfg_create_from_file(path) + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_function) + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=ReachingDefinitionsTaintAnalysis) + + trigger_word_file = os.path.join( + 'pyt', + 'vulnerability_definitions', + 'all_trigger_words.pyt' + ) + + return vulnerabilities.find_vulnerabilities( + cfg_list, + ReachingDefinitionsTaintAnalysis, + UImode.NORMAL, + VulnerabilityFiles( + default_blackbox_mapping_file, + trigger_word_file + ), + nosec_lines + ) - def test_no_false_positive_import_file_command_injection_3(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') + def test_self_is_not_tainted(self): + vulnerabilities = self.run_analysis('examples/example_inputs/def_with_self_as_first_arg.py') self.assert_length(vulnerabilities, expected_length=0) From 69d019327eca9f916aefbaad2cc2c433309c36bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 18:54:51 +0300 Subject: [PATCH 308/541] added empty nosec_lines for tests --- tests/vulnerabilities_across_files_test.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 7492aee2..b30d415b 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -15,7 +15,7 @@ from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from pyt.vulnerabilities import find_vulnerabilities - +nosec_lines = set() class EngineTest(BaseTestCase): def run_analysis(self, path): path = os.path.normpath(path) @@ -40,7 +40,8 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, default_trigger_word_file - ) + ), + nosec_lines ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): From 3cb5186942473d7a8fceb851e09cb36133355c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 18:57:10 +0300 Subject: [PATCH 309/541] Added ignore-nosec argument --- tests/command_line_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/command_line_test.py b/tests/command_line_test.py index a4663225..25d06a73 100644 --- a/tests/command_line_test.py +++ b/tests/command_line_test.py @@ -28,6 +28,7 @@ def test_no_args(self): [-m BLACKBOX_MAPPING_FILE] [-py2] [-l LOG_LEVEL] [-a ADAPTOR] [-db] [-dl DRAW_LATTICE [DRAW_LATTICE ...]] [-j] [-li | -re | -rt] [-ppm] [-b BASELINE] + [--ignore-nosec] {save,github_search} ...\n""" + \ "python -m pyt: error: one of the arguments " + \ "-f/--filepath -gr/--git-repos is required\n" From ec6d23acbe87bc0cc0f97fa91bb5bdca4f58a4cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 20:51:55 +0300 Subject: [PATCH 310/541] Update vulnerabilities_test.py --- tests/vulnerabilities_test.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index 381860ae..b4698e91 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -23,7 +23,6 @@ from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -nosec_lines = set() class EngineTest(BaseTestCase): def run_empty(self): return @@ -93,7 +92,7 @@ def test_find_triggers(self): XSS1 = cfg_list[1] trigger_words = [('get', [])] - l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words, nosec_lines) + l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words) self.assert_length(l, expected_length=1) def test_find_sanitiser_nodes(self): @@ -138,8 +137,7 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, default_trigger_word_file - ), - nosec_lines + ) ) def test_find_vulnerabilities_assign_other_var(self): @@ -534,8 +532,7 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, trigger_word_file - ), - nosec_lines + ) ) def test_django_view_param(self): @@ -583,8 +580,7 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, trigger_word_file - ), - nosec_lines + ) ) def test_self_is_not_tainted(self): From 6f099120464ed17dad1546ddd32556d68d842fe4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 20:52:46 +0300 Subject: [PATCH 311/541] unnecessary codes removed --- tests/vulnerabilities_across_files_test.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index b30d415b..25dd1267 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -15,7 +15,6 @@ from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from pyt.vulnerabilities import find_vulnerabilities -nosec_lines = set() class EngineTest(BaseTestCase): def run_analysis(self, path): path = os.path.normpath(path) @@ -40,8 +39,7 @@ def run_analysis(self, path): VulnerabilityFiles( default_blackbox_mapping_file, default_trigger_word_file - ), - nosec_lines + ) ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): From 9c4dea6e511f76abca8feb396ecf1e6f2e1565fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 26 Apr 2018 20:53:40 +0300 Subject: [PATCH 312/541] added default nosec_lines --- pyt/vulnerabilities.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index eeb9404a..ecf76e78 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -172,7 +172,7 @@ def append_node_if_reassigned( def find_triggers( nodes, trigger_words, - nosec_lines + nosec_lines = set() ): """Find triggers from the trigger_word_list in the nodes. @@ -470,7 +470,7 @@ def find_vulnerabilities_in_cfg( ui_mode, blackbox_mapping, vulnerabilities_list, - nosec_lines + nosec_lines = set() ): """Find vulnerabilities in a cfg. From 882b51939a3c5350458906ee886b591311ef8c2d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 26 Apr 2018 18:23:46 -0700 Subject: [PATCH 313/541] Refactored out string_compare_alpha and string_compare_alnum out of base_test_case --- tests/analysis/analysis_base_test_case.py | 6 ++++++ tests/base_test_case.py | 14 -------------- .../vulnerabilities_across_files_test.py | 4 ++-- .../vulnerabilities_base_test_case.py | 10 ++++++++++ tests/vulnerabilities/vulnerabilities_test.py | 8 ++++---- 5 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 tests/vulnerabilities/vulnerabilities_base_test_case.py diff --git a/tests/analysis/analysis_base_test_case.py b/tests/analysis/analysis_base_test_case.py index 76037c7e..e92efb19 100644 --- a/tests/analysis/analysis_base_test_case.py +++ b/tests/analysis/analysis_base_test_case.py @@ -68,3 +68,9 @@ def run_analysis(self, path): self.analysis = FixedPointAnalysis(self.cfg) self.analysis.fixpoint_runner() return Lattice(self.cfg.nodes) + + def string_compare_alnum(self, output, expected_string): + return ( + [char for char in output if char.isalnum()] == + [char for char in expected_string if char.isalnum()] + ) diff --git a/tests/base_test_case.py b/tests/base_test_case.py index b2b70dca..a8d31f94 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -75,17 +75,3 @@ def cfg_create_from_file( local_modules, filename ) - - def string_compare_alpha(self, output, expected_string): - # Only used in vulnerability tests - return ( - [char for char in output if char.isalpha()] == - [char for char in expected_string if char.isalpha()] - ) - - def string_compare_alnum(self, output, expected_string): - # Only used in reaching_definitions_taint_test - return ( - [char for char in output if char.isalnum()] == - [char for char in expected_string if char.isalnum()] - ) diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index 026c38ef..b33982ab 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -1,6 +1,6 @@ import os -from ..base_test_case import BaseTestCase +from .vulnerabilities_base_test_case import VulnerabilitiesBaseTestCase from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse @@ -22,7 +22,7 @@ ) -class EngineTest(BaseTestCase): +class EngineTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): path = os.path.normpath(path) diff --git a/tests/vulnerabilities/vulnerabilities_base_test_case.py b/tests/vulnerabilities/vulnerabilities_base_test_case.py new file mode 100644 index 00000000..dcf088a4 --- /dev/null +++ b/tests/vulnerabilities/vulnerabilities_base_test_case.py @@ -0,0 +1,10 @@ +from ..base_test_case import BaseTestCase + + +class VulnerabilitiesBaseTestCase(BaseTestCase): + + def string_compare_alpha(self, output, expected_string): + return ( + [char for char in output if char.isalpha()] == + [char for char in expected_string if char.isalpha()] + ) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 7313a766..a1d48fd1 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -1,6 +1,6 @@ import os -from ..base_test_case import BaseTestCase +from .vulnerabilities_base_test_case import VulnerabilitiesBaseTestCase from pyt.analysis.constraint_table import initialize_constraint_table from pyt.analysis.fixed_point import analyse @@ -23,7 +23,7 @@ ) -class EngineTest(BaseTestCase): +class EngineTest(VulnerabilitiesBaseTestCase): def test_parse(self): definitions = trigger_definitions_parser.parse( trigger_word_file=os.path.join( @@ -496,7 +496,7 @@ def test_XSS_variable_multiple_assign_result(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) -class EngineDjangoTest(BaseTestCase): +class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): self.cfg_create_from_file(path) cfg_list = [self.cfg] @@ -538,7 +538,7 @@ def test_django_view_param(self): self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) -class EngineEveryTest(BaseTestCase): +class EngineEveryTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): self.cfg_create_from_file(path) cfg_list = [self.cfg] From 7c81a160db72b8810ccc80cedf5bfc4bf03c4fe2 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 26 Apr 2018 18:37:21 -0700 Subject: [PATCH 314/541] Refactored out assertInCfg, assertLineNumber and cfg_list_to_dict out of base_test_case into CFGBaseTestCase --- tests/base_test_case.py | 48 ------------------------------- tests/cfg/cfg_base_test_case.py | 50 +++++++++++++++++++++++++++++++++ tests/cfg/cfg_test.py | 26 ++++++++--------- 3 files changed, 63 insertions(+), 61 deletions(-) create mode 100644 tests/cfg/cfg_base_test_case.py diff --git a/tests/base_test_case.py b/tests/base_test_case.py index a8d31f94..21b7c695 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -9,54 +9,6 @@ class BaseTestCase(unittest.TestCase): """A base class that has helper methods for testing PyT.""" - def assertInCfg(self, connections): - """Asserts that all connections in the connections list exists in the cfg, - as well as that all connections not in the list do not exist. - - Args: - connections(list[tuple]): the node at index 0 of the tuple has - to be in the new_constraint set of the node - at index 1 of the tuple. - """ - for connection in connections: - self.assertIn( - self.cfg.nodes[connection[0]], - self.cfg.nodes[connection[1]].outgoing, - str(connection) + " expected to be connected" - ) - self.assertIn( - self.cfg.nodes[connection[1]], - self.cfg.nodes[connection[0]].ingoing, - str(connection) + " expected to be connected" - ) - - nodes = len(self.cfg.nodes) - - for element in range(nodes): - for sets in range(nodes): - if not (element, sets) in connections: - self.assertNotIn( - self.cfg.nodes[element], - self.cfg.nodes[sets].outgoing, - "(%s <- %s)" % (element, sets) + " expected to be disconnected" - ) - self.assertNotIn( - self.cfg.nodes[sets], - self.cfg.nodes[element].ingoing, - "(%s <- %s)" % (sets, element) + " expected to be disconnected" - ) - - def assertLineNumber(self, node, line_number): - """Only used in cfg_test.""" - self.assertEqual(node.line_number, line_number) - - def cfg_list_to_dict(self, list): - """This method converts the CFG list to a dict, making it easier to find nodes to test. - This method assumes that no nodes in the code have the same label. - Only used in cfg_test. - """ - return {x.label: x for x in list} - def assert_length(self, _list, *, expected_length): actual_length = len(_list) self.assertEqual(expected_length, actual_length) diff --git a/tests/cfg/cfg_base_test_case.py b/tests/cfg/cfg_base_test_case.py new file mode 100644 index 00000000..5d6d0f8f --- /dev/null +++ b/tests/cfg/cfg_base_test_case.py @@ -0,0 +1,50 @@ +from ..base_test_case import BaseTestCase + + +class CFGBaseTestCase(BaseTestCase): + + def assertInCfg(self, connections): + """Asserts that all connections in the connections list exists in the cfg, + as well as that all connections not in the list do not exist. + + Args: + connections(list[tuple]): the node at index 0 of the tuple has + to be in the new_constraint set of the node + at index 1 of the tuple. + """ + for connection in connections: + self.assertIn( + self.cfg.nodes[connection[0]], + self.cfg.nodes[connection[1]].outgoing, + str(connection) + " expected to be connected" + ) + self.assertIn( + self.cfg.nodes[connection[1]], + self.cfg.nodes[connection[0]].ingoing, + str(connection) + " expected to be connected" + ) + + nodes = len(self.cfg.nodes) + + for element in range(nodes): + for sets in range(nodes): + if not (element, sets) in connections: + self.assertNotIn( + self.cfg.nodes[element], + self.cfg.nodes[sets].outgoing, + "(%s <- %s)" % (element, sets) + " expected to be disconnected" + ) + self.assertNotIn( + self.cfg.nodes[sets], + self.cfg.nodes[element].ingoing, + "(%s <- %s)" % (sets, element) + " expected to be disconnected" + ) + + def assertLineNumber(self, node, line_number): + self.assertEqual(node.line_number, line_number) + + def cfg_list_to_dict(self, list): + """This method converts the CFG list to a dict, making it easier to find nodes to test. + This method assumes that no nodes in the code have the same label. + """ + return {x.label: x for x in list} diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index e9a1f489..ceb9c5c5 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -1,4 +1,4 @@ -from ..base_test_case import BaseTestCase +from .cfg_base_test_case import CFGBaseTestCase from pyt.core.node_types import ( EntryOrExitNode, @@ -6,7 +6,7 @@ ) -class CFGGeneralTest(BaseTestCase): +class CFGGeneralTest(CFGBaseTestCase): def test_repr_cfg(self): self.cfg_create_from_file('examples/example_inputs/for_complete.py') @@ -60,7 +60,7 @@ def test_str_ignored(self): self.assertEqual(expected_label, actual_label) -class CFGForTest(BaseTestCase): +class CFGForTest(CFGBaseTestCase): def test_for_complete(self): self.cfg_create_from_file('examples/example_inputs/for_complete.py') @@ -177,7 +177,7 @@ def test_for_func_iterator(self): ]) -class CFGTryTest(BaseTestCase): +class CFGTryTest(CFGBaseTestCase): def connected(self, node, successor): return (successor, node) @@ -285,7 +285,7 @@ def test_final(self): self.connected(print_final, _exit)]) -class CFGIfTest(BaseTestCase): +class CFGIfTest(CFGBaseTestCase): def test_if_complete(self): self.cfg_create_from_file('examples/example_inputs/if_complete.py') @@ -487,7 +487,7 @@ def test_if_not(self): ]) -class CFGWhileTest(BaseTestCase): +class CFGWhileTest(CFGBaseTestCase): def test_while_complete(self): self.cfg_create_from_file('examples/example_inputs/while_complete.py') @@ -558,7 +558,7 @@ def test_while_line_numbers(self): self.assertLineNumber(next_stmt, 7) -class CFGAssignmentMultiTest(BaseTestCase): +class CFGAssignmentMultiTest(CFGBaseTestCase): def test_assignment_multi_target(self): self.cfg_create_from_file('examples/example_inputs/assignment_two_targets.py') @@ -669,7 +669,7 @@ def test_assignment_tuple_value(self): self.assertEqual(self.cfg.nodes[node].label, 'a = (x, y)') -class CFGComprehensionTest(BaseTestCase): +class CFGComprehensionTest(CFGBaseTestCase): def test_nodes(self): self.cfg_create_from_file('examples/example_inputs/comprehensions.py') @@ -717,7 +717,7 @@ def test_dict_comprehension_multi(self): self.assertEqual(listcomp.label, 'dd = {x + y : y for x in [1, 2, 3] for y in [4, 5, 6]}') -class CFGFunctionNodeTest(BaseTestCase): +class CFGFunctionNodeTest(CFGBaseTestCase): def connected(self, node, successor): return (successor, node) @@ -1167,7 +1167,7 @@ def test_call_on_call(self): self.cfg_create_from_file(path) -class CFGCallWithAttributeTest(BaseTestCase): +class CFGCallWithAttributeTest(CFGBaseTestCase): def setUp(self): self.cfg_create_from_file('examples/example_inputs/call_with_attribute.py') @@ -1187,7 +1187,7 @@ def test_call_with_attribute_line_numbers(self): self.assertLineNumber(call, 5) -class CFGBreak(BaseTestCase): +class CFGBreak(CFGBaseTestCase): """Break in while and for and other places""" def test_break(self): self.cfg_create_from_file('examples/example_inputs/while_break.py') @@ -1215,7 +1215,7 @@ def test_break(self): (_exit, print_next)]) -class CFGNameConstant(BaseTestCase): +class CFGNameConstant(CFGBaseTestCase): def setUp(self): self.cfg_create_from_file('examples/example_inputs/name_constant.py') @@ -1233,7 +1233,7 @@ def test_name_constant_if(self): self.assertEqual(expected_label, actual_label) -class CFGName(BaseTestCase): +class CFGName(CFGBaseTestCase): """Test is Name nodes are properly handled in different contexts""" def test_name_if(self): From 3c3f6f5ce09eecf8656866c1ea62ecf01bcfb5df Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 26 Apr 2018 19:18:23 -0700 Subject: [PATCH 315/541] Added a test for usage.py --- .coveragerc | 1 - pyt/__main__.py | 4 +- pyt/usage.py | 25 ++++++------- tests/usage_test.py | 91 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 17 deletions(-) create mode 100644 tests/usage_test.py diff --git a/.coveragerc b/.coveragerc index bfd2571f..19ad217b 100644 --- a/.coveragerc +++ b/.coveragerc @@ -16,6 +16,5 @@ source = ./tests omit = pyt/__main__.py - pyt/usage.py pyt/formatters/json.py pyt/formatters/text.py diff --git a/pyt/__main__.py b/pyt/__main__.py index c1bc68ef..71571e4b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -40,8 +40,8 @@ def main(command_line_args=sys.argv[1:]): ui_mode = UImode.TRIM path = os.path.normpath(args.filepath) - if args.root_directory: - directory = os.path.normpath(args.root_directory) + if args.project_root: + directory = os.path.normpath(args.project_root) else: directory = os.path.dirname(path) project_modules = get_modules(directory) diff --git a/pyt/usage.py b/pyt/usage.py index d2cf2d98..617ca3d3 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -33,13 +33,6 @@ def _add_required_group(parser): help='Path to the file that should be analysed.', type=str ) - required_group.add_argument( - '-r', '--root-directory', - help='Add project root, this is important when the entry ' - 'file is not at the root of the project.', - type=str, - metavar='DIR_TO_ANALYZE' - ) def _add_optional_group(parser): @@ -51,6 +44,12 @@ def _add_optional_group(parser): 'Flask(Default), Django, Every or Pylons', type=str ) + optional_group.add_argument( + '-pr', '--project-root', + help='Add project root, only important when the entry ' + 'file is not at the root of the project.', + type=str + ) optional_group.add_argument( '-b', '--baseline', help='Path of a baseline report to compare against ' @@ -80,26 +79,24 @@ def _add_optional_group(parser): def _add_print_group(parser): - print_group = parser.add_mutually_exclusive_group() + print_group = parser.add_argument_group('print arguments') print_group.add_argument( '-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', + help='Trims the reassigned list to just the vulnerability chain.', action='store_true', default=True ) print_group.add_argument( '-i', '--interactive', - help='Will ask you about each vulnerability chain and blackbox nodes.', + help='Will ask you about each blackbox function call in vulnerability chains.', action='store_true', default=False ) def _check_required_and_mutually_exclusive_args(parser, args): - if args.filepath is None and args.root_directory is None: - parser.error('one of the arguments -f/--filepath -r/--root-directory is required') - if args.filepath and args.root_directory: - parser.error('argument -f/--filepath: not allowed with argument -r/--root-directory') + if args.filepath is None: + parser.error('The -f/--filepath argument is required') if args.trim_reassigned_in and args.interactive: parser.error('argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in') diff --git a/tests/usage_test.py b/tests/usage_test.py new file mode 100644 index 00000000..8a495541 --- /dev/null +++ b/tests/usage_test.py @@ -0,0 +1,91 @@ +"""This just tests usage.py""" +import sys +from contextlib import contextmanager +from io import StringIO + +from .base_test_case import BaseTestCase +from pyt.usage import parse_args + + +@contextmanager +def capture_sys_output(): + capture_out, capture_err = StringIO(), StringIO() + current_out, current_err = sys.stdout, sys.stderr + try: + sys.stdout, sys.stderr = capture_out, capture_err + yield capture_out, capture_err + finally: + sys.stdout, sys.stderr = current_out, current_err + + +class UsageTest(BaseTestCase): + def test_no_args(self): + with self.assertRaises(SystemExit): + with capture_sys_output() as (stdout, _): + parse_args([]) + + self.maxDiff = None + + EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] + [-t TRIGGER_WORD_FILE] [-trim] [-i] + +required arguments: + -f FILEPATH, --filepath FILEPATH + Path to the file that should be analysed. + +optional arguments: + -a ADAPTOR, --adaptor ADAPTOR + Choose a web framework adaptor: Flask(Default), + Django, Every or Pylons + -pr PROJECT_ROOT, --project-root PROJECT_ROOT + Add project root, only important when the entry file + is not at the root of the project. + -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE + Path of a baseline report to compare against (only + JSON-formatted files are accepted) + -j, --json Prints JSON instead of report. + -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE + Input blackbox mapping file. + -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE + Input file with a list of sources and sinks + +print arguments: + -trim, --trim-reassigned-in + Trims the reassigned list to just the vulnerability + chain. + -i, --interactive Will ask you about each blackbox function call in + vulnerability chains.\n""" + + self.assertEqual(stdout.getvalue(), EXPECTED) + + def test_valid_args_but_no_filepath(self): + with self.assertRaises(SystemExit): + with capture_sys_output() as (_, stderr): + parse_args(['-j']) + + EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] + [-t TRIGGER_WORD_FILE] [-trim] [-i] +python -m pyt: error: The -f/--filepath argument is required\n""" + + self.assertEqual(stderr.getvalue(), EXPECTED) + + def test_using_both_mutually_exclusive_args(self): + with self.assertRaises(SystemExit): + with capture_sys_output() as (_, stderr): + parse_args(['-f', 'foo.py', '-trim', '--interactive']) + + EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] + [-t TRIGGER_WORD_FILE] [-trim] [-i] +python -m pyt: error: argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in\n""" + + self.assertEqual(stderr.getvalue(), EXPECTED) + + def test_normal_usage(self): + with capture_sys_output() as (stdout, stderr): + parse_args(['-f', 'foo.py']) + + self.assertEqual(stdout.getvalue(), '') + self.assertEqual(stderr.getvalue(), '') From 609acd6ca7e3800f21e82d5e3736e8112a91b49c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 26 Apr 2018 20:41:53 -0700 Subject: [PATCH 316/541] Added a test for __main__ and the outfile option --- .coveragerc | 1 - pyt/__main__.py | 6 ++--- pyt/usage.py | 9 +++++++ tests/main_test.py | 60 +++++++++++++++++++++++++++++++++++++++++++++ tests/usage_test.py | 9 ++++--- 5 files changed, 77 insertions(+), 8 deletions(-) create mode 100644 tests/main_test.py diff --git a/.coveragerc b/.coveragerc index 19ad217b..c7e7a385 100644 --- a/.coveragerc +++ b/.coveragerc @@ -15,6 +15,5 @@ source = ./pyt ./tests omit = - pyt/__main__.py pyt/formatters/json.py pyt/formatters/text.py diff --git a/pyt/__main__.py b/pyt/__main__.py index 71571e4b..9007e412 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -55,7 +55,7 @@ def main(command_line_args=sys.argv[1:]): local_modules, path ) - cfg_list = list(cfg) + cfg_list = [cfg] framework_route_criteria = is_flask_route_function if args.adaptor: if args.adaptor.lower().startswith('e'): @@ -87,9 +87,9 @@ def main(command_line_args=sys.argv[1:]): ) if args.json: - json.report(vulnerabilities, sys.stdout) + json.report(vulnerabilities, args.output_file) else: - text.report(vulnerabilities, sys.stdout) + text.report(vulnerabilities, args.output_file) if __name__ == '__main__': diff --git a/pyt/usage.py b/pyt/usage.py index 617ca3d3..d633cf79 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -1,5 +1,6 @@ import argparse import os +import sys from datetime import datetime @@ -76,6 +77,14 @@ def _add_optional_group(parser): type=str, default=default_trigger_word_file ) + optional_group.add_argument( + '-o', '--output', + help='write report to filename', + dest='output_file', + action='store', + type=argparse.FileType('w'), + default=sys.stdout, + ) def _add_print_group(parser): diff --git a/tests/main_test.py b/tests/main_test.py new file mode 100644 index 00000000..eea6ff47 --- /dev/null +++ b/tests/main_test.py @@ -0,0 +1,60 @@ +import mock + +from .base_test_case import BaseTestCase +from pyt.__main__ import main + + +class MainTest(BaseTestCase): + @mock.patch('pyt.__main__.parse_args') + @mock.patch('pyt.__main__.find_vulnerabilities') + @mock.patch('pyt.__main__.text') + def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args): + mock_find_vulnerabilities.return_value = 'stuff' + example_file = 'examples/vulnerable_code/inter_command_injection.py' + output_file = 'mocked_outfile' + + mock_parse_args.return_value = mock.Mock( + autospec=True, + filepath=example_file, + project_root=None, + baseline=None, + json=None, + output_file=output_file + ) + main([ + 'parse_args is mocked' + ]) + assert mock_text.report.call_count == 1 + # This with: makes no sense + with self.assertRaises(AssertionError): + assert mock_text.report.assert_called_with( + mock_find_vulnerabilities.return_value, + mock_parse_args.return_value.output_file + ) + + @mock.patch('pyt.__main__.parse_args') + @mock.patch('pyt.__main__.find_vulnerabilities') + @mock.patch('pyt.__main__.json') + def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args): + mock_find_vulnerabilities.return_value = 'stuff' + example_file = 'examples/vulnerable_code/inter_command_injection.py' + output_file = 'mocked_outfile' + + mock_parse_args.return_value = mock.Mock( + autospec=True, + filepath=example_file, + project_root=None, + baseline=None, + json=True, + output_file=output_file + ) + main([ + 'parse_args is mocked' + ]) + assert mock_json.report.call_count == 1 + # This with: makes no sense + with self.assertRaises(AssertionError): + assert mock_json.report.assert_called_with( + mock_find_vulnerabilities.return_value, + mock_parse_args.return_value.output_file + ) diff --git a/tests/usage_test.py b/tests/usage_test.py index 8a495541..2b8673c9 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -1,4 +1,3 @@ -"""This just tests usage.py""" import sys from contextlib import contextmanager from io import StringIO @@ -28,7 +27,7 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-trim] [-i] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] required arguments: -f FILEPATH, --filepath FILEPATH @@ -49,6 +48,8 @@ def test_no_args(self): Input blackbox mapping file. -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE Input file with a list of sources and sinks + -o OUTPUT_FILE, --output OUTPUT_FILE + write report to filename print arguments: -trim, --trim-reassigned-in @@ -66,7 +67,7 @@ def test_valid_args_but_no_filepath(self): EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-trim] [-i] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] python -m pyt: error: The -f/--filepath argument is required\n""" self.assertEqual(stderr.getvalue(), EXPECTED) @@ -78,7 +79,7 @@ def test_using_both_mutually_exclusive_args(self): EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-trim] [-i] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] python -m pyt: error: argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in\n""" self.assertEqual(stderr.getvalue(), EXPECTED) From 18609661f44a7a49fd43510f29f41098515578b8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 26 Apr 2018 20:53:16 -0700 Subject: [PATCH 317/541] Per-directory READMEs, coming soon --- pyt/analysis/README.rst | 1 + pyt/cfg/README.rst | 1 + pyt/core/README.rst | 1 + pyt/helper_visitors/README.rst | 1 + pyt/vulnerabilities/README.rst | 1 + pyt/vulnerability_definitions/README.rst | 1 + pyt/web_frameworks/README.rst | 1 + 7 files changed, 7 insertions(+) create mode 100644 pyt/analysis/README.rst create mode 100644 pyt/cfg/README.rst create mode 100644 pyt/core/README.rst create mode 100644 pyt/helper_visitors/README.rst create mode 100644 pyt/vulnerabilities/README.rst create mode 100644 pyt/vulnerability_definitions/README.rst create mode 100644 pyt/web_frameworks/README.rst diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/analysis/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/cfg/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/core/README.rst b/pyt/core/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/core/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/helper_visitors/README.rst b/pyt/helper_visitors/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/helper_visitors/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/vulnerabilities/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/vulnerability_definitions/README.rst b/pyt/vulnerability_definitions/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/vulnerability_definitions/README.rst @@ -0,0 +1 @@ +Coming soon. diff --git a/pyt/web_frameworks/README.rst b/pyt/web_frameworks/README.rst new file mode 100644 index 00000000..3ba5b13c --- /dev/null +++ b/pyt/web_frameworks/README.rst @@ -0,0 +1 @@ +Coming soon. From f4ebbffe64fc39961b34f4876927d310c1dc725a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 27 Apr 2018 11:40:40 +0300 Subject: [PATCH 318/541] Update vulnerabilities.py --- pyt/vulnerabilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index ecf76e78..b9a0c96b 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -74,7 +74,7 @@ def identify_triggers( sources, sinks, lattice, - nosec_lines + nosec_lines = set() ): """Identify sources, sinks and sanitisers in a CFG. From 7c872a039d0817868587be95c6caf1e916cee5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 27 Apr 2018 11:41:52 +0300 Subject: [PATCH 319/541] Update vulnerabilities.py --- pyt/vulnerabilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index b9a0c96b..d5bc2e1b 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -509,7 +509,7 @@ def find_vulnerabilities( analysis_type, ui_mode, vulnerability_files, - nosec_lines + nosec_lines = set() ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. From 0f0140448a6cbf0c7a0038d92a960cdbc9686396 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 27 Apr 2018 18:21:46 -0700 Subject: [PATCH 320/541] [many readme] start to write a bit --- pyt/README.rst | 56 +++++++++++++++++++++++++++++++++++ pyt/analysis/README.rst | 2 ++ pyt/cfg/README.rst | 19 +++++++++++- pyt/cfg/make_cfg.py | 4 +-- pyt/web_frameworks/README.rst | 4 +++ 5 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 pyt/README.rst diff --git a/pyt/README.rst b/pyt/README.rst new file mode 100644 index 00000000..90ea58c6 --- /dev/null +++ b/pyt/README.rst @@ -0,0 +1,56 @@ +`__main__.py`_ is where all the high-level steps happen. + +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py + +Step 1 + Parse command line arguments. + + `parse_args` with `usage.py`_ + + .. _usage.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py + + +Step 2 + Generate the Abstract Syntax Tree (AST). + + Essentially done in these lines of code with the `ast`_ module: + + .. code-block:: python + + import ast + ast.parse(f.read()) + + `generate_ast`_ from `ast_helper.py`_ + + .. _ast: https://docs.python.org/3/library/ast.html + .. _generate_ast: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py#L24 + .. _ast_helper.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py + + +Step 3 + Pass the AST to create a `Control Flow Graph (CFG)`_ + + .. _Control Flow Graph (CFG): https://github.com/python-security/pyt/tree/re_organize_code/pyt/cfg + +Step 4 + Pass the CFG to a `Framework Adaptor`_, which will mark the arguments of certain functions as tainted sources. + + .. _Framework Adaptor: https://github.com/python-security/pyt/tree/re_organize_code/pyt/web_frameworks + +Step 5 + Perform (modified-)reaching definitions `analysis`_, to know where definitions reach. + + .. _analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis + +Step 6 + Find `vulnerabilities`_, by seeing where sources reach, and how. + + .. _vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities + +Step 7 + Remove the already vulnerabilities if a baseline (JSON file of a previous run of PyT) is provided. + +Step 8 + Output the results in either `text or JSON form`_, to stdout or the outfile. + + .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index 3ba5b13c..8f9883b0 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -1 +1,3 @@ Coming soon. + +This folder probably won't change at all for the lifetime of the project, unless we were to implement more advanced analyses like solving string constraints or doing alias analysis, right now and in the foreseeable future there are more pressing concerns, like handling web frameworks and handling all ast node types in the CFG construction. diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 3ba5b13c..a649a944 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1 +1,18 @@ -Coming soon. +These modules mirror the `abstract grammar`_ of Python. + +.. _abstract grammar: https://docs.python.org/3/library/ast.html#abstract-grammar + + +Dive into the raw ast NodeVisitor code. + + +Statements can contain expressions, but not the other way around, +so it was natural to have ExprVisitor inherit from StmtVisitor. + + +TODO: stmt_star_handler and expr_star_handler explanations and walk throughs. + + +For more information on AST nodes, see the `Green Tree Snakes`_ documentation. + +.. _Green Tree Snakes: https://greentreesnakes.readthedocs.io/en/latest/nodes.html diff --git a/pyt/cfg/make_cfg.py b/pyt/cfg/make_cfg.py index 710c5f66..eaa78c9b 100644 --- a/pyt/cfg/make_cfg.py +++ b/pyt/cfg/make_cfg.py @@ -20,14 +20,14 @@ def __str__(self): def make_cfg( - node, + tree, project_modules, local_modules, filename, module_definitions=None ): visitor = ExprVisitor( - node, + tree, project_modules, local_modules, filename, module_definitions diff --git a/pyt/web_frameworks/README.rst b/pyt/web_frameworks/README.rst index 3ba5b13c..aa1b121b 100644 --- a/pyt/web_frameworks/README.rst +++ b/pyt/web_frameworks/README.rst @@ -1 +1,5 @@ Coming soon. + + +Web frameworks +Sorry state of affairs From febb605096a2bc10f09ed6a7dd4e46626b31c44c Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 18:30:42 -0700 Subject: [PATCH 321/541] Better links/Grammar --- pyt/README.rst | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/pyt/README.rst b/pyt/README.rst index 90ea58c6..d69b8e72 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -5,8 +5,9 @@ Step 1 Parse command line arguments. - `parse_args` with `usage.py`_ + `parse_args`_ in `usage.py`_ + .. _parse_args: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L113 .. _usage.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py @@ -20,7 +21,7 @@ Step 2 import ast ast.parse(f.read()) - `generate_ast`_ from `ast_helper.py`_ + `generate_ast`_ in `ast_helper.py`_ .. _ast: https://docs.python.org/3/library/ast.html .. _generate_ast: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py#L24 @@ -48,9 +49,13 @@ Step 6 .. _vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities Step 7 - Remove the already vulnerabilities if a baseline (JSON file of a previous run of PyT) is provided. + `Remove already known vulnerabilities`_ if a `baseline`_ (JSON file of a previous run of PyT) is provided. + + .. _Remove already known vulnerabilities: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L194 + .. _baseline: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L54 Step 8 - Output the results in either `text or JSON form`_, to stdout or the outfile. + Output the results in either `text or JSON form`_, to stdout or the `output file`_. .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters + .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 From 780b48d109d18af4886913501553675cba1cc9ad Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 18:33:00 -0700 Subject: [PATCH 322/541] Update README.rst --- pyt/README.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/README.rst b/pyt/README.rst index d69b8e72..611002a5 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -39,14 +39,14 @@ Step 4 .. _Framework Adaptor: https://github.com/python-security/pyt/tree/re_organize_code/pyt/web_frameworks Step 5 - Perform (modified-)reaching definitions `analysis`_, to know where definitions reach. + Perform `(modified-)reaching definitions analysis`_, to know where definitions reach. - .. _analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis + .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis Step 6 - Find `vulnerabilities`_, by seeing where sources reach, and how. + `Find vulnerabilities`_, by seeing where sources reach, and how. - .. _vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities + .. _Find vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities Step 7 `Remove already known vulnerabilities`_ if a `baseline`_ (JSON file of a previous run of PyT) is provided. From 7acd6e8f34cc470e93aa9fa3dad47a440b9960a7 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 18:48:04 -0700 Subject: [PATCH 323/541] Replace Install section with pip install --- README.rst | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.rst b/README.rst index 65084da8..874a0c95 100644 --- a/README.rst +++ b/README.rst @@ -52,11 +52,9 @@ Example usage and output: Install ======= - 1. git clone https://github.com/python-security/pyt.git - 2. cd pyt/ - 3. python3 setup.py install - 4. pyt -h +.. code-block:: python + pip install python-taint Usage from Source ================= From e02aa41dfccccc937e624b297bcd9fa0046c17f7 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 27 Apr 2018 18:56:35 -0700 Subject: [PATCH 324/541] Added more to pyt/README.rst --- pyt/README.rst | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/pyt/README.rst b/pyt/README.rst index 90ea58c6..611002a5 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -5,8 +5,9 @@ Step 1 Parse command line arguments. - `parse_args` with `usage.py`_ + `parse_args`_ in `usage.py`_ + .. _parse_args: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L113 .. _usage.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py @@ -20,7 +21,7 @@ Step 2 import ast ast.parse(f.read()) - `generate_ast`_ from `ast_helper.py`_ + `generate_ast`_ in `ast_helper.py`_ .. _ast: https://docs.python.org/3/library/ast.html .. _generate_ast: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py#L24 @@ -38,19 +39,23 @@ Step 4 .. _Framework Adaptor: https://github.com/python-security/pyt/tree/re_organize_code/pyt/web_frameworks Step 5 - Perform (modified-)reaching definitions `analysis`_, to know where definitions reach. + Perform `(modified-)reaching definitions analysis`_, to know where definitions reach. - .. _analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis + .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis Step 6 - Find `vulnerabilities`_, by seeing where sources reach, and how. + `Find vulnerabilities`_, by seeing where sources reach, and how. - .. _vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities + .. _Find vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities Step 7 - Remove the already vulnerabilities if a baseline (JSON file of a previous run of PyT) is provided. + `Remove already known vulnerabilities`_ if a `baseline`_ (JSON file of a previous run of PyT) is provided. + + .. _Remove already known vulnerabilities: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L194 + .. _baseline: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L54 Step 8 - Output the results in either `text or JSON form`_, to stdout or the outfile. + Output the results in either `text or JSON form`_, to stdout or the `output file`_. .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters + .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 From 49915aab523ee27813466334b4fbd4fb38b1af17 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 27 Apr 2018 18:59:23 -0700 Subject: [PATCH 325/541] Replace trigger word with source and sink --- pyt/vulnerabilities/vulnerability_helper.py | 4 +- .../vulnerabilities_across_files_test.py | 32 +++++------ tests/vulnerabilities/vulnerabilities_test.py | 56 +++++++++---------- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index bd2407dd..1104de13 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -68,9 +68,9 @@ def __str__(self): reassigned_str = _get_reassignment_str(self.reassignment_nodes) return ( 'File: {}\n' - ' > User input at line {}, trigger word "{}":\n' + ' > User input at line {}, source "{}":\n' '\t {}{}\nFile: {}\n' - ' > reaches line {}, trigger word "{}":\n' + ' > reaches line {}, sink "{}":\n' '\t{}'.format( self.source.path, self.source.line_number, self.source_trigger_word, diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index b33982ab..d8bd3840 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -65,7 +65,7 @@ def test_blackbox_library_call(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code_across_files/blackbox_library_call.py - > User input at line 12, trigger word "request.args.get(": + > User input at line 12, source "request.args.get(": ~call_1 = ret_request.args.get('suggestion') Reassigned in: File: examples/vulnerable_code_across_files/blackbox_library_call.py @@ -77,7 +77,7 @@ def test_blackbox_library_call(self): File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 16: hey = command File: examples/vulnerable_code_across_files/blackbox_library_call.py - > reaches line 17, trigger word "subprocess.call(": + > reaches line 17, sink "subprocess.call(": ~call_3 = ret_subprocess.call(hey, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ @@ -90,7 +90,7 @@ def test_builtin_with_user_defined_inner(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > User input at line 16, trigger word "form[": + > User input at line 16, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/builtin_with_user_defined_inner.py @@ -112,7 +112,7 @@ def test_builtin_with_user_defined_inner(self): File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: foo = ~call_1 File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > reaches line 20, trigger word "subprocess.call(": + > reaches line 20, sink "subprocess.call(": ~call_3 = ret_subprocess.call(foo, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ @@ -124,7 +124,7 @@ def test_sink_with_result_of_blackbox_nested(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > User input at line 12, trigger word "form[": + > User input at line 12, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py @@ -134,13 +134,13 @@ def test_sink_with_result_of_blackbox_nested(self): File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: result = ~call_1 File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, sink "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt(req_param) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > User input at line 12, trigger word "form[": + > User input at line 12, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py @@ -150,7 +150,7 @@ def test_sink_with_result_of_blackbox_nested(self): File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py > Line 13: result = ~call_1 File: examples/nested_functions_code/sink_with_result_of_blackbox_nested.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, sink "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ @@ -165,7 +165,7 @@ def test_sink_with_result_of_user_defined_nested(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > User input at line 16, trigger word "form[": + > User input at line 16, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -199,7 +199,7 @@ def test_sink_with_result_of_user_defined_nested(self): File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: result = ~call_1 File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, sink "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -210,7 +210,7 @@ def test_sink_with_blackbox_inner(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_blackbox_inner.py - > User input at line 12, trigger word "form[": + > User input at line 12, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_blackbox_inner.py @@ -218,14 +218,14 @@ def test_sink_with_blackbox_inner(self): File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) File: examples/nested_functions_code/sink_with_blackbox_inner.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, sink "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encypt(~call_3) """ OTHER_EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_blackbox_inner.py - > User input at line 12, trigger word "form[": + > User input at line 12, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_blackbox_inner.py @@ -233,7 +233,7 @@ def test_sink_with_blackbox_inner(self): File: examples/nested_functions_code/sink_with_blackbox_inner.py > Line 14: ~call_2 = ret_scrypt.encypt(~call_3) File: examples/nested_functions_code/sink_with_blackbox_inner.py - > reaches line 14, trigger word "subprocess.call(": + > reaches line 14, sink "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) This vulnerability is unknown due to: Label: ~call_3 = ret_scrypt.encypt(req_param) """ @@ -248,7 +248,7 @@ def test_sink_with_user_defined_inner(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_user_defined_inner.py - > User input at line 16, trigger word "form[": + > User input at line 16, source "form[": req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_user_defined_inner.py @@ -280,7 +280,7 @@ def test_sink_with_user_defined_inner(self): File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ~call_2 = ret_outer File: examples/nested_functions_code/sink_with_user_defined_inner.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, sink "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index a1d48fd1..440f492e 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -148,7 +148,7 @@ def test_XSS_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS.py - > User input at line 6, trigger word "request.args.get(": + > User input at line 6, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS.py @@ -160,7 +160,7 @@ def test_XSS_result(self): File: examples/vulnerable_code/XSS.py > Line 10: ret_XSS1 = resp File: examples/vulnerable_code/XSS.py - > reaches line 9, trigger word "replace(": + > reaches line 9, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -172,13 +172,13 @@ def test_command_injection_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/command_injection.py - > User input at line 15, trigger word "form[": + > User input at line 15, source "form[": param = request.form['suggestion'] Reassigned in: File: examples/vulnerable_code/command_injection.py > Line 16: command = 'echo ' + param + ' >> ' + 'menu.txt' File: examples/vulnerable_code/command_injection.py - > reaches line 18, trigger word "subprocess.call(": + > reaches line 18, sink "subprocess.call(": ~call_1 = ret_subprocess.call(command, shell=True) """ @@ -190,7 +190,7 @@ def test_path_traversal_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal.py - > User input at line 15, trigger word "request.args.get(": + > User input at line 15, source "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal.py @@ -216,7 +216,7 @@ def test_path_traversal_result(self): File: examples/vulnerable_code/path_traversal.py > Line 19: foo = ~call_2 File: examples/vulnerable_code/path_traversal.py - > reaches line 20, trigger word "send_file(": + > reaches line 20, sink "send_file(": ~call_4 = ret_send_file(foo) """ @@ -228,7 +228,7 @@ def test_ensure_saved_scope(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/ensure_saved_scope.py - > User input at line 15, trigger word "request.args.get(": + > User input at line 15, source "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/ensure_saved_scope.py @@ -254,7 +254,7 @@ def test_ensure_saved_scope(self): File: examples/vulnerable_code/ensure_saved_scope.py > Line 19: foo = ~call_2 File: examples/vulnerable_code/ensure_saved_scope.py - > reaches line 20, trigger word "send_file(": + > reaches line 20, sink "send_file(": ~call_4 = ret_send_file(image_name) """ @@ -266,7 +266,7 @@ def test_path_traversal_sanitised_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal_sanitised.py - > User input at line 8, trigger word "request.args.get(": + > User input at line 8, source "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal_sanitised.py @@ -280,7 +280,7 @@ def test_path_traversal_sanitised_result(self): File: examples/vulnerable_code/path_traversal_sanitised.py > Line 12: ret_cat_picture = ~call_3 File: examples/vulnerable_code/path_traversal_sanitised.py - > reaches line 12, trigger word "send_file(": + > reaches line 12, sink "send_file(": ~call_3 = ret_send_file(~call_4) This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') """ @@ -293,7 +293,7 @@ def test_path_traversal_sanitised_2_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal_sanitised_2.py - > User input at line 8, trigger word "request.args.get(": + > User input at line 8, source "request.args.get(": ~call_1 = ret_request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal_sanitised_2.py @@ -303,7 +303,7 @@ def test_path_traversal_sanitised_2_result(self): File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ret_cat_picture = ~call_2 File: examples/vulnerable_code/path_traversal_sanitised_2.py - > reaches line 12, trigger word "send_file(": + > reaches line 12, sink "send_file(": ~call_2 = ret_send_file(~call_3) This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ @@ -316,7 +316,7 @@ def test_sql_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/sql/sqli.py - > User input at line 26, trigger word "request.args.get(": + > User input at line 26, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/sql/sqli.py @@ -324,7 +324,7 @@ def test_sql_result(self): File: examples/vulnerable_code/sql/sqli.py > Line 27: result = ~call_2 File: examples/vulnerable_code/sql/sqli.py - > reaches line 27, trigger word "execute(": + > reaches line 27, sink "execute(": ~call_2 = ret_db.engine.execute(param) """ @@ -336,7 +336,7 @@ def test_XSS_form_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_form.py - > User input at line 14, trigger word "form[": + > User input at line 14, source "form[": data = request.form['my_text'] Reassigned in: File: examples/vulnerable_code/XSS_form.py @@ -346,7 +346,7 @@ def test_XSS_form_result(self): File: examples/vulnerable_code/XSS_form.py > Line 17: ret_example2_action = resp File: examples/vulnerable_code/XSS_form.py - > reaches line 15, trigger word "replace(": + > reaches line 15, sink "replace(": ~call_2 = ret_html1.replace('{{ data }}', data) """ @@ -358,7 +358,7 @@ def test_XSS_url_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_url.py - > User input at line 4, trigger word "Framework function URL parameter": + > User input at line 4, source "Framework function URL parameter": url Reassigned in: File: examples/vulnerable_code/XSS_url.py @@ -370,7 +370,7 @@ def test_XSS_url_result(self): File: examples/vulnerable_code/XSS_url.py > Line 10: ret_XSS1 = resp File: examples/vulnerable_code/XSS_url.py - > reaches line 9, trigger word "replace(": + > reaches line 9, sink "replace(": ~call_3 = ret_html.replace('{{ param }}', param) """ @@ -386,7 +386,7 @@ def test_XSS_reassign_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_reassign.py - > User input at line 6, trigger word "request.args.get(": + > User input at line 6, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_reassign.py @@ -400,7 +400,7 @@ def test_XSS_reassign_result(self): File: examples/vulnerable_code/XSS_reassign.py > Line 12: ret_XSS1 = resp File: examples/vulnerable_code/XSS_reassign.py - > reaches line 11, trigger word "replace(": + > reaches line 11, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', param) """ @@ -412,7 +412,7 @@ def test_XSS_sanitised_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_sanitised.py - > User input at line 7, trigger word "request.args.get(": + > User input at line 7, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_sanitised.py @@ -428,7 +428,7 @@ def test_XSS_sanitised_result(self): File: examples/vulnerable_code/XSS_sanitised.py > Line 13: ret_XSS1 = resp File: examples/vulnerable_code/XSS_sanitised.py - > reaches line 12, trigger word "replace(": + > reaches line 12, sink "replace(": ~call_5 = ret_html.replace('{{ param }}', param) This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) """ @@ -445,7 +445,7 @@ def test_XSS_variable_assign_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_variable_assign.py - > User input at line 6, trigger word "request.args.get(": + > User input at line 6, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_variable_assign.py @@ -459,7 +459,7 @@ def test_XSS_variable_assign_result(self): File: examples/vulnerable_code/XSS_variable_assign.py > Line 12: ret_XSS1 = resp File: examples/vulnerable_code/XSS_variable_assign.py - > reaches line 11, trigger word "replace(": + > reaches line 11, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', other_var) """ @@ -471,7 +471,7 @@ def test_XSS_variable_multiple_assign_result(self): vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_variable_multiple_assign.py - > User input at line 6, trigger word "request.args.get(": + > User input at line 6, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_variable_multiple_assign.py @@ -489,7 +489,7 @@ def test_XSS_variable_multiple_assign_result(self): File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 17: ret_XSS1 = resp File: examples/vulnerable_code/XSS_variable_multiple_assign.py - > reaches line 15, trigger word "replace(": + > reaches line 15, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', another_one) """ @@ -526,13 +526,13 @@ def test_django_view_param(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/django_XSS.py - > User input at line 4, trigger word "Framework function URL parameter": + > User input at line 4, source "Framework function URL parameter": param Reassigned in: File: examples/vulnerable_code/django_XSS.py > Line 5: ret_xss1 = ~call_1 File: examples/vulnerable_code/django_XSS.py - > reaches line 5, trigger word "render(": + > reaches line 5, sink "render(": ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) From f87539864dc0188f5c3beee3e053f83f643457c9 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:28:59 -0700 Subject: [PATCH 326/541] Update README.rst --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index 874a0c95..cfe767b0 100644 --- a/README.rst +++ b/README.rst @@ -56,6 +56,12 @@ Install pip install python-taint +PyT can also be installed from source. To do so, clone the repo, and then install it: + +.. code-block:: python + + python3 setup.py install + Usage from Source ================= From 3bf405bd4a21bed9c595105400c448c56ef51540 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:29:52 -0700 Subject: [PATCH 327/541] Add from source install instructions --- README.rst | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.rst b/README.rst index 874a0c95..cfe767b0 100644 --- a/README.rst +++ b/README.rst @@ -56,6 +56,12 @@ Install pip install python-taint +PyT can also be installed from source. To do so, clone the repo, and then install it: + +.. code-block:: python + + python3 setup.py install + Usage from Source ================= From df2402ca6244783c75c611c4cbbfcb3e5bb1f8ab Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 27 Apr 2018 19:34:08 -0700 Subject: [PATCH 328/541] Add usage to root README.rst --- README.rst | 111 ++++++++++++++++++----------------------------------- 1 file changed, 38 insertions(+), 73 deletions(-) diff --git a/README.rst b/README.rst index 874a0c95..914c486e 100644 --- a/README.rst +++ b/README.rst @@ -25,19 +25,7 @@ Static analysis of Python web applications based on theoretical foundations (Con Features -------- -* Detect Command injection - -* Detect SQL injection - -* Detect XSS - -* Detect directory traversal - -* Get a control flow graph - -* Get a def-use and/or a use-def chain - -* Search GitHub and analyse hits with PyT +* Detect command injection, SSRF, SQL injection, XSS, directory traveral etc. * A lot of customisation possible @@ -56,67 +44,44 @@ Install pip install python-taint -Usage from Source -================= - -Using it like a user ``python3 -m pyt -f example/vulnerable_code/XSS_call.py save -du`` - -Running the tests ``python3 -m tests`` - -Running an individual test file ``python3 -m unittest tests.import_test`` - -Running an individual test ``python3 -m unittest tests.import_test.ImportTest.test_import`` - - -Contributions -============= - -Join our slack group: https://pyt-dev.slack.com/ - ask for invite: mr.thalmann@gmail.com - -`Guidelines`_ - -.. _Guidelines: https://github.com/python-security/pyt/blob/master/CONTRIBUTIONS.md - +PyT can also be installed from source. To do so, clone the repo, and then install it: -Virtual env setup guide -======================= - -Create a directory to hold the virtual env and project - -``mkdir ~/a_folder`` - -``cd ~/a_folder`` - -Clone the project into the directory - -``git clone https://github.com/python-security/pyt.git`` - -Create the virtual environment - -``python3 -m venv ~/a_folder/`` - -Check that you have the right versions - -``python3 --version`` sample output ``Python 3.6.0`` - -``pip --version`` sample output ``pip 9.0.1 from /Users/kevinhock/a_folder/lib/python3.6/site-packages (python 3.6)`` - -Change to project directory - -``cd pyt`` - -Install dependencies - -``pip install -r requirements.txt`` +.. code-block:: python -``pip list`` sample output :: + python3 setup.py install - gitdb (0.6.4) - GitPython (2.0.8) - graphviz (0.4.10) - pip (9.0.1) - requests (2.10.0) - setuptools (28.8.0) - smmap (0.9.0) +Usage +======= -In the future, just type ``source ~/a_folder/bin/activate`` to start developing. + usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] + + required arguments: + -f FILEPATH, --filepath FILEPATH + Path to the file that should be analysed. + + optional arguments: + -a ADAPTOR, --adaptor ADAPTOR + Choose a web framework adaptor: Flask(Default), + Django, Every or Pylons + -pr PROJECT_ROOT, --project-root PROJECT_ROOT + Add project root, only important when the entry file + is not at the root of the project. + -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE + Path of a baseline report to compare against (only + JSON-formatted files are accepted) + -j, --json Prints JSON instead of report. + -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE + Input blackbox mapping file. + -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE + Input file with a list of sources and sinks + -o OUTPUT_FILE, --output OUTPUT_FILE + write report to filename + + print arguments: + -trim, --trim-reassigned-in + Trims the reassigned list to just the vulnerability + chain. + -i, --interactive Will ask you about each blackbox function call in + vulnerability chains. From 9e44237106e420497fdcb188f83a3cca246b1615 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:37:44 -0700 Subject: [PATCH 329/541] Update README.rst --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 2ca0a05d..8a233211 100644 --- a/README.rst +++ b/README.rst @@ -53,6 +53,7 @@ PyT can also be installed from source. To do so, clone the repo, and then instal Usage ======= +Usage:: usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] From 387e60eaa37efa8e79518bf4a7fbd7d7e44a538c Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:40:01 -0700 Subject: [PATCH 330/541] Update README.rst --- README.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.rst b/README.rst index 8a233211..7016b0b2 100644 --- a/README.rst +++ b/README.rst @@ -50,10 +50,8 @@ PyT can also be installed from source. To do so, clone the repo, and then instal python3 setup.py install -Usage -======= -Usage:: + usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] From 03e2622c77bbbc4f732e18d9b8d71dae18c102b8 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:40:39 -0700 Subject: [PATCH 331/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 7016b0b2..6fa8b0a5 100644 --- a/README.rst +++ b/README.rst @@ -50,7 +50,7 @@ PyT can also be installed from source. To do so, clone the repo, and then instal python3 setup.py install - +.. code-block:: usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] From 8f68b3e81f06f3058fe5a3926b8d613240287a27 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:42:39 -0700 Subject: [PATCH 332/541] Update README.rst --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index 6fa8b0a5..1ca64f95 100644 --- a/README.rst +++ b/README.rst @@ -50,6 +50,9 @@ PyT can also be installed from source. To do so, clone the repo, and then instal python3 setup.py install +Usage +===== + .. code-block:: usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] From c8a0f32dca93df593ad2a3780722e022cbc0898f Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 27 Apr 2018 19:43:19 -0700 Subject: [PATCH 333/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 1ca64f95..d35eea1b 100644 --- a/README.rst +++ b/README.rst @@ -44,7 +44,7 @@ Install pip install python-taint -PyT can also be installed from source. To do so, clone the repo, and then install it: +PyT can also be installed from source. To do so, clone the repo, and then run: .. code-block:: python From 28004b1ff94aabef42a64174b112d237d2f27c7e Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 11:24:08 -0700 Subject: [PATCH 334/541] Update README.rst --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index d35eea1b..b97dfe6d 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,8 @@ Python Taint ============ +.. class:: center + Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -------- From 1a7be1486dba15d029cf03338fecbd356be59095 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 11:24:29 -0700 Subject: [PATCH 335/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index b97dfe6d..c48c4d64 100644 --- a/README.rst +++ b/README.rst @@ -21,7 +21,7 @@ Python Taint .. class:: center -Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) + Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -------- Features From b94331006a4558bae6709f8fd603944d1cdb0161 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 28 Apr 2018 21:26:09 +0300 Subject: [PATCH 336/541] removed spaces --- pyt/vulnerabilities.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index d5bc2e1b..4dfe06ed 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -74,7 +74,7 @@ def identify_triggers( sources, sinks, lattice, - nosec_lines = set() + nosec_lines=set() ): """Identify sources, sinks and sanitisers in a CFG. @@ -172,7 +172,7 @@ def append_node_if_reassigned( def find_triggers( nodes, trigger_words, - nosec_lines = set() + nosec_lines=set() ): """Find triggers from the trigger_word_list in the nodes. @@ -470,7 +470,7 @@ def find_vulnerabilities_in_cfg( ui_mode, blackbox_mapping, vulnerabilities_list, - nosec_lines = set() + nosec_lines ): """Find vulnerabilities in a cfg. @@ -509,7 +509,7 @@ def find_vulnerabilities( analysis_type, ui_mode, vulnerability_files, - nosec_lines = set() + nosec_lines=set() ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. From 11ce535b6225435cf86944ae184d5ac0708c6fbb Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 11:26:47 -0700 Subject: [PATCH 337/541] Update README.rst --- README.rst | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.rst b/README.rst index c48c4d64..f2cd2a01 100644 --- a/README.rst +++ b/README.rst @@ -19,9 +19,7 @@ Python Taint ============ -.. class:: center - - Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) +

    Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis)

    -------- Features From cd011d7e2f9edb7803326121808e87fe2bf3a28f Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 11:27:01 -0700 Subject: [PATCH 338/541] Update README.rst --- README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.rst b/README.rst index f2cd2a01..6a5a4a2b 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,9 @@ Python Taint ============ -

    Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis)

    +

    +Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) +

    -------- Features From fd3d74a6810672d869ccd5639c80e66682156ddc Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 11:27:17 -0700 Subject: [PATCH 339/541] Update README.rst --- README.rst | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.rst b/README.rst index 6a5a4a2b..d35eea1b 100644 --- a/README.rst +++ b/README.rst @@ -19,9 +19,7 @@ Python Taint ============ -

    Static analysis of Python web applications based on theoretical foundations (Control flow graphs, fixed point, dataflow analysis) -

    -------- Features From 175c23597706efab4826154222e15ed73a002a96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 28 Apr 2018 21:27:31 +0300 Subject: [PATCH 340/541] new line between imports and codes --- tests/vulnerabilities_across_files_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/vulnerabilities_across_files_test.py b/tests/vulnerabilities_across_files_test.py index 25dd1267..7492aee2 100644 --- a/tests/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities_across_files_test.py @@ -15,6 +15,7 @@ from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis from pyt.vulnerabilities import find_vulnerabilities + class EngineTest(BaseTestCase): def run_analysis(self, path): path = os.path.normpath(path) From c79161cb5416e32bf130ec4ea56f532a9eb8078e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 28 Apr 2018 21:32:33 +0300 Subject: [PATCH 341/541] Update __main__.py --- pyt/__main__.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 8ce6cc67..b81e6f03 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -143,8 +143,7 @@ def parse_args(args): type=str, default=False) parser.add_argument('--ignore-nosec', dest='ignore_nosec', action='store_true', - help='do not skip lines with # nosec comments' - ) + help='do not skip lines with # nosec comments') save_parser = subparsers.add_parser('save', help='Save menu.') save_parser.set_defaults(which='save') @@ -239,7 +238,7 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM - path = os.path.normpath(args.filepath) + path = os.path.normpath(args.filepath) cfg_list = list() if args.ignore_nosec: nosec_lines = set() @@ -249,8 +248,8 @@ def main(command_line_args=sys.argv[1:]): nosec_lines = set( lineno for (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - + if '#nosec' in line or '# nosec' in line) + if args.git_repos: repos = get_repos(args.git_repos) for repo in repos: From ed135144641ec398131866a35333626364857d05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 28 Apr 2018 21:35:07 +0300 Subject: [PATCH 342/541] new line between imports and codes --- tests/vulnerabilities_test.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/vulnerabilities_test.py b/tests/vulnerabilities_test.py index b4698e91..f3d77279 100644 --- a/tests/vulnerabilities_test.py +++ b/tests/vulnerabilities_test.py @@ -23,6 +23,7 @@ from pyt.node_types import Node from pyt.reaching_definitions_taint import ReachingDefinitionsTaintAnalysis + class EngineTest(BaseTestCase): def run_empty(self): return From 092870010dfbf5368b9f974920f677ebb67b41a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 28 Apr 2018 21:36:16 +0300 Subject: [PATCH 343/541] removed set() from nosec_lines --- pyt/vulnerabilities.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/vulnerabilities.py b/pyt/vulnerabilities.py index 4dfe06ed..1bc57753 100644 --- a/pyt/vulnerabilities.py +++ b/pyt/vulnerabilities.py @@ -74,7 +74,7 @@ def identify_triggers( sources, sinks, lattice, - nosec_lines=set() + nosec_lines ): """Identify sources, sinks and sanitisers in a CFG. From 5b372d267efa8cccc75c998b5d3fe56f2904f116 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Apr 2018 14:41:23 -0700 Subject: [PATCH 344/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index cfe767b0..3883e331 100644 --- a/README.rst +++ b/README.rst @@ -56,7 +56,7 @@ Install pip install python-taint -PyT can also be installed from source. To do so, clone the repo, and then install it: +PyT can also be installed from source. To do so, clone the repo, and then run: .. code-block:: python From 272b76e6e520cfa8a733502c364f7258171e6b2d Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 28 Apr 2018 15:19:56 -0700 Subject: [PATCH 345/541] First attempt at analysis/README.rst --- pyt/analysis/README.rst | 67 +++++++++++++++++++++++- pyt/helper_visitors/README.rst | 2 +- pyt/vulnerability_definitions/README.rst | 2 +- 3 files changed, 67 insertions(+), 4 deletions(-) diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index 8f9883b0..321401bd 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -1,3 +1,66 @@ -Coming soon. +This code is responsible for answering two questions: -This folder probably won't change at all for the lifetime of the project, unless we were to implement more advanced analyses like solving string constraints or doing alias analysis, right now and in the foreseeable future there are more pressing concerns, like handling web frameworks and handling all ast node types in the CFG construction. + +Where do definitions reach? +=========================== + +Traditionally `reaching definitions`_, a classic dataflow-analysis, +has been used to answer this question. To understand reaching definitions, +watch this `wonderful YouTube video`_ and come back here. +We use `reaching definitions`_, +with one small modification, a `reassignment check`_. + + +.. code-block:: python + + # Reassignment check + if cfg_node.left_hand_side not in cfg_node.right_hand_side_variables: + # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN + arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) + +As an example, + +.. code-block:: python + + image_name = request.args.get('image_name') + image_name = os.path.join(base_dir, image_name) + send_file(image_name) + +we still want to know that something from a request reached `send_file`. + + +.. _reaching definitions: https://en.wikipedia.org/wiki/Reaching_definition +.. _reassignment check: https://github.com/python-security/pyt/blob/re_organize_code/pyt/analysis/reaching_definitions_taint.py#L23-L26 +.. _wonderful YouTube video: https://www.youtube.com/watch?v=NVBQSR_HdL0 + + +How does a definition reach? +============================ + +After we know that a definition reaches a use that we are interested in +We make what are called `definition-use chains`_ figure out how that definition +reaches the use. This is necessary because there may be more than one path from +the definition to the use. + + +.. _definition-use chains: https://en.wikipedia.org/wiki/Use-define_chain + + +Additional details +================== + +This folder probably will not change at all for the lifetime of the project, +unless we were to implement more advanced analyses like `solving string +constraints`_ or doing `alias analysis`_. Right now and in the foreseeable +future there are more pressing concerns, like handling web frameworks +and handling all ast node types in the CFG construction. + +Stefan and Bruno like the `Schwartzbach notes`_, as you will see in some comments. +But looking these two algorithms up will yield countless results, my favorite is +this `amazing guy from YouTube`_. + + +.. _solving string constraints: https://zyh1121.github.io/z3str3Docs/inputLanguage.html +.. _alias analysis: https://www3.cs.stonybrook.edu/~liu/papers/Alias-DLS10.pdf +.. _Schwartzbach notes: http://lara.epfl.ch/w/_media/sav08:schwartzbach.pdf +.. _amazing guy from YouTube: https://www.youtube.com/watch?v=NVBQSR_HdL0 diff --git a/pyt/helper_visitors/README.rst b/pyt/helper_visitors/README.rst index 3ba5b13c..cce52a09 100644 --- a/pyt/helper_visitors/README.rst +++ b/pyt/helper_visitors/README.rst @@ -1 +1 @@ -Coming soon. +Documentation coming soon. diff --git a/pyt/vulnerability_definitions/README.rst b/pyt/vulnerability_definitions/README.rst index 3ba5b13c..cce52a09 100644 --- a/pyt/vulnerability_definitions/README.rst +++ b/pyt/vulnerability_definitions/README.rst @@ -1 +1 @@ -Coming soon. +Documentation coming soon. From ddb239f98f526f635bd4b12509fde4ed995cb1c0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 28 Apr 2018 15:26:51 -0700 Subject: [PATCH 346/541] Update pyt/analysis/README.rst --- pyt/analysis/README.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index 321401bd..d785ffdb 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -7,8 +7,8 @@ Where do definitions reach? Traditionally `reaching definitions`_, a classic dataflow-analysis, has been used to answer this question. To understand reaching definitions, watch this `wonderful YouTube video`_ and come back here. -We use `reaching definitions`_, -with one small modification, a `reassignment check`_. +We use reaching definitions, with one small modification, +a `reassignment check`_. .. code-block:: python @@ -37,8 +37,8 @@ we still want to know that something from a request reached `send_file`. How does a definition reach? ============================ -After we know that a definition reaches a use that we are interested in -We make what are called `definition-use chains`_ figure out how that definition +After we know that a definition reaches a use that we are interested in, +we make what are called `definition-use chains`_ figure out how the definition reaches the use. This is necessary because there may be more than one path from the definition to the use. @@ -53,7 +53,7 @@ This folder probably will not change at all for the lifetime of the project, unless we were to implement more advanced analyses like `solving string constraints`_ or doing `alias analysis`_. Right now and in the foreseeable future there are more pressing concerns, like handling web frameworks -and handling all ast node types in the CFG construction. +and handling all AST node types in the `CFG construction`_. Stefan and Bruno like the `Schwartzbach notes`_, as you will see in some comments. But looking these two algorithms up will yield countless results, my favorite is @@ -62,5 +62,6 @@ this `amazing guy from YouTube`_. .. _solving string constraints: https://zyh1121.github.io/z3str3Docs/inputLanguage.html .. _alias analysis: https://www3.cs.stonybrook.edu/~liu/papers/Alias-DLS10.pdf +.. _CFG construction: https://github.com/python-security/pyt/tree/re_organize_code/pyt/cfg .. _Schwartzbach notes: http://lara.epfl.ch/w/_media/sav08:schwartzbach.pdf .. _amazing guy from YouTube: https://www.youtube.com/watch?v=NVBQSR_HdL0 From e84d99e7689e977be163e28ea114479bd4e7ac40 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 09:52:57 -0700 Subject: [PATCH 347/541] Update README.rst --- pyt/cfg/README.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index a649a944..41b9bb99 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,5 +1,25 @@ +make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and return a Control Flow Graph. + +Statements can contain expressions, but not +ExprVisitor inherits from StmtVisitor, which inherits from `ast.NodeVisitor`_ from the standard library. + +https://github.com/python/cpython/blob/f2c1aa1661edb3e14ff8b7b9995f93e303c8acbb/Lib/ast.py#L249-L253 + +There is a `visit\_` function for almost every AST node type. + +We keep track of all the nodes while we visit by adding them to self.nodes, + +The two most illustrative functions are stmt_star_handler + +Upon visiting an If statement we will enter visit_If, which will call stmt_star_handler, that returns a namedtuple ControlFlowNode with the first statement, last_statements and break_statements. + +In visit_call we will call expr_star_handler on the arguments, that returns a named_tuple with the + +We create the control flow graph of the program we are analyzing. + These modules mirror the `abstract grammar`_ of Python. +.. _ast.NodeVisitor: https://docs.python.org/3/library/ast.html#ast.NodeVisitor .. _abstract grammar: https://docs.python.org/3/library/ast.html#abstract-grammar From 554d08f45f7fdacb13483f9deb0ffbab9f27fb61 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 10:00:08 -0700 Subject: [PATCH 348/541] Update README.rst --- pyt/cfg/README.rst | 49 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 5 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 41b9bb99..47fb56c1 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,18 +1,57 @@ make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and return a Control Flow Graph. -Statements can contain expressions, but not -ExprVisitor inherits from StmtVisitor, which inherits from `ast.NodeVisitor`_ from the standard library. +Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) -https://github.com/python/cpython/blob/f2c1aa1661edb3e14ff8b7b9995f93e303c8acbb/Lib/ast.py#L249-L253 +.. code-block:: python + :caption: From ast.Nodevisitor + + def visit(self, node): + """Visit a node.""" + method = 'visit_' + node.__class__.__name__ + visitor = getattr(self, method, self.generic_visit) + return visitor(node) There is a `visit\_` function for almost every AST node type. -We keep track of all the nodes while we visit by adding them to self.nodes, +We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing` and `outgoing` node attributes. -The two most illustrative functions are stmt_star_handler +The two most illustrative functions are stmt_star_handler and expr_star_handler. Upon visiting an If statement we will enter visit_If, which will call stmt_star_handler, that returns a namedtuple ControlFlowNode with the first statement, last_statements and break_statements. +.. code-block:: python + + def visit_If(self, node): + test = self.append_node(IfNode( + node.test, + node, + path=self.filenames[-1] + )) + + body_connect_stmts = self.stmt_star_handler(node.body) + if isinstance(body_connect_stmts, IgnoredNode): + body_connect_stmts = ConnectStatements( + first_statement=test, + last_statements=[], + break_statements=[] + ) + test.connect(body_connect_stmts.first_statement) + + if node.orelse: + orelse_last_nodes = self.handle_or_else(node.orelse, test) + body_connect_stmts.last_statements.extend(orelse_last_nodes) + else: + body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node + + last_statements = remove_breaks(body_connect_stmts.last_statements) + + return ControlFlowNode( + test, + last_statements, + break_statements=body_connect_stmts.break_statements + ) + + In visit_call we will call expr_star_handler on the arguments, that returns a named_tuple with the We create the control flow graph of the program we are analyzing. From 9d8459945767c171ec069ee8e8c1b577f608ec36 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 10:00:30 -0700 Subject: [PATCH 349/541] Update README.rst --- pyt/cfg/README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 47fb56c1..cf8ce430 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -2,6 +2,7 @@ make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an E Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) + .. code-block:: python :caption: From ast.Nodevisitor @@ -11,6 +12,7 @@ Statements can contain expressions, but not the other way around. This is why Ex visitor = getattr(self, method, self.generic_visit) return visitor(node) + There is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing` and `outgoing` node attributes. From ad0767cd589309a49617a1f64e2985eb70d6d0c7 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 10:00:47 -0700 Subject: [PATCH 350/541] Update README.rst --- pyt/cfg/README.rst | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index cf8ce430..d35aaa46 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -4,7 +4,6 @@ Statements can contain expressions, but not the other way around. This is why Ex .. code-block:: python - :caption: From ast.Nodevisitor def visit(self, node): """Visit a node.""" From f86410d8aa7d47691a02fa5484ce37f148b3424d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 2 May 2018 00:56:32 +0300 Subject: [PATCH 351/541] Test for "try_orelse_with_no_variables_to_save" --- tests/cfg_test.py | 92 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 70 insertions(+), 22 deletions(-) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index f3a3a28a..ce73ccb9 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -1,5 +1,8 @@ from .base_test_case import BaseTestCase -from pyt.node_types import EntryOrExitNode, Node +from pyt.node_types import ( + EntryOrExitNode, + Node +) class CFGGeneralTest(BaseTestCase): @@ -215,35 +218,80 @@ def test_orelse(self): print_good = 18 _exit = 19 - self.assertInCfg([self.connected(entry, try_), + self.assertInCfg([ + self.connected(entry, try_), - self.connected(try_, try_body), + self.connected(try_, try_body), - self.connected(try_body, print_a5), + self.connected(try_body, print_a5), - self.connected(print_a5, except_im), - self.connected(print_a5, save_node), - self.connected(print_a5, print_good), + self.connected(print_a5, except_im), + self.connected(print_a5, save_node), + self.connected(print_a5, print_good), - self.connected(except_im, except_im_body_1), + self.connected(except_im, except_im_body_1), - self.connected(except_im_body_1, value_equal_call_2), - self.connected(value_equal_call_2, print_wagyu), + self.connected(except_im_body_1, value_equal_call_2), + self.connected(value_equal_call_2, print_wagyu), + + self.connected(print_wagyu, print_good), + + self.connected(save_node, assign_to_temp), + self.connected(assign_to_temp, assign_from_temp), + self.connected(assign_from_temp, function_entry), + self.connected(function_entry, ret_of_subprocess_call), + self.connected(ret_of_subprocess_call, ret_does_this_kill_us_equal_call_5), + self.connected(ret_does_this_kill_us_equal_call_5, function_exit), + self.connected(function_exit, restore_node), + self.connected(restore_node, return_handler), + self.connected(return_handler, print_so), + + self.connected(print_so, print_good), + self.connected(print_good, _exit) + ]) - self.connected(print_wagyu, print_good), + def test_orelse_with_no_variables_to_save(self): + self.cfg_create_from_file('examples/example_inputs/try_orelse_with_no_variables_to_save.py') - self.connected(save_node, assign_to_temp), - self.connected(assign_to_temp, assign_from_temp), - self.connected(assign_from_temp, function_entry), - self.connected(function_entry, ret_of_subprocess_call), - self.connected(ret_of_subprocess_call, ret_does_this_kill_us_equal_call_5), - self.connected(ret_does_this_kill_us_equal_call_5, function_exit), - self.connected(function_exit, restore_node), - self.connected(restore_node, return_handler), - self.connected(return_handler, print_so), + self.nodes = self.cfg_list_to_dict(self.cfg.nodes) + self.assert_length(self.cfg.nodes, expected_length=15) + + entry = 0 + try_ = 1 + print_a5 = 2 + except_im = 3 + print_wagyu = 4 + temp_3_diff = 5 + diff = 6 + function_entry = 7 + ret_subprocess_call = 8 + ret_does_this_kill_us_4 = 9 + exit_does_this_kill_us = 10 + ret_does_this_kill_us_3 = 11 + print_so = 12 + print_good = 13 + _exit = 14 + + self.assertInCfg([ + self.connected(entry, try_), + self.connected(try_, print_a5), + self.connected(print_a5, except_im), + self.connected(print_a5, temp_3_diff), + self.connected(print_a5, print_good), + self.connected(except_im, print_wagyu), + self.connected(print_wagyu, print_good), + self.connected(temp_3_diff, diff), + self.connected(diff, function_entry), + self.connected(function_entry, ret_subprocess_call), + self.connected(ret_subprocess_call, ret_does_this_kill_us_4), + self.connected(ret_does_this_kill_us_4, exit_does_this_kill_us), + self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), + self.connected(ret_does_this_kill_us_3, print_so), + self.connected(print_so, print_good), + self.connected(print_good, _exit), + + ]) - self.connected(print_so, print_good), - self.connected(print_good, _exit)]) def test_final(self): self.cfg_create_from_file('examples/example_inputs/try_final.py') From 54e9563a57c4273f58ae00dfb1306ce814ecbcf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 2 May 2018 01:23:56 +0300 Subject: [PATCH 352/541] created new test created "test_try_orelse_with_no_variables_to_save_and_no_args" --- tests/cfg_test.py | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index ce73ccb9..2f7ef192 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -292,6 +292,43 @@ def test_orelse_with_no_variables_to_save(self): ]) + def test_try_orelse_with_no_variables_to_save_and_no_args(self): + self.cfg_create_from_file('examples/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py') + + self.nodes = self.cfg_list_to_dict(self.cfg.nodes) + self.assert_length(self.cfg.nodes, expected_length=13) + + entry = 0 + try_ = 1 + print_a5 = 2 + except_im = 3 + print_wagyu = 4 + function_entry = 5 + ret_subprocess_call = 6 + ret_does_this_kill_us_4 = 7 + exit_does_this_kill_us = 8 + ret_does_this_kill_us_3 = 9 + print_so = 10 + print_good = 11 + _exit = 12 + + self.assertInCfg([ + self.connected(entry, try_), + self.connected(try_, print_a5), + self.connected(print_a5, except_im), + self.connected(print_a5, function_entry), + self.connected(print_a5, print_good), + self.connected(except_im, print_wagyu), + self.connected(print_wagyu, print_good), + self.connected(function_entry, ret_subprocess_call), + self.connected(ret_subprocess_call, ret_does_this_kill_us_4), + self.connected(ret_does_this_kill_us_4, exit_does_this_kill_us), + self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), + self.connected(ret_does_this_kill_us_3, print_so), + self.connected(print_so, print_good), + self.connected(print_good, _exit), + + ]) def test_final(self): self.cfg_create_from_file('examples/example_inputs/try_final.py') From 890f6bf67d976af18e4241c2c5b3b4bdfcd5b32a Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 19:23:20 -0700 Subject: [PATCH 353/541] Added some stmt_star_handler stuff --- pyt/cfg/README.rst | 126 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 98 insertions(+), 28 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index d35aaa46..a4607841 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,7 +1,8 @@ -make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and return a Control Flow Graph. +make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. -Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) +stmt_visitor.py and expr_visitor.py mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) +This is how ast.NodeVisitor works: .. code-block:: python @@ -12,13 +13,32 @@ Statements can contain expressions, but not the other way around. This is why Ex return visitor(node) -There is a `visit\_` function for almost every AST node type. +So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing` and `outgoing` node attributes. -We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing` and `outgoing` node attributes. +The two most illustrative functions are stmt_star_handler and expr_star_handler. expr_star_handler has not been merged to master so let's talk about stmt_star_handler. -The two most illustrative functions are stmt_star_handler and expr_star_handler. -Upon visiting an If statement we will enter visit_If, which will call stmt_star_handler, that returns a namedtuple ControlFlowNode with the first statement, last_statements and break_statements. +Handling an if: statement +========================= + +Example code + +.. code-block:: python + + if some_condition: + x = 5 + +This is the relevant part of the `abstract grammar`_ + +.. code-block:: python + + If(expr test, stmt* body, stmt* orelse) + # Note: stmt* means any number of statements. + +Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. We create one node for the test, and connect it with the first node of the body, which in this case is x = 5. + +which will call stmt_star_handler, that returns a namedtuple ConnectStatements with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. + .. code-block:: python @@ -30,19 +50,14 @@ Upon visiting an If statement we will enter visit_If, which will call stmt_star_ )) body_connect_stmts = self.stmt_star_handler(node.body) - if isinstance(body_connect_stmts, IgnoredNode): - body_connect_stmts = ConnectStatements( - first_statement=test, - last_statements=[], - break_statements=[] - ) + # ... test.connect(body_connect_stmts.first_statement) if node.orelse: - orelse_last_nodes = self.handle_or_else(node.orelse, test) - body_connect_stmts.last_statements.extend(orelse_last_nodes) + # ... else: - body_connect_stmts.last_statements.append(test) # if there is no orelse, test needs an edge to the next_node + # if there is no orelse, test needs an edge to the next_node + body_connect_stmts.last_statements.append(test) last_statements = remove_breaks(body_connect_stmts.last_statements) @@ -52,26 +67,81 @@ Upon visiting an If statement we will enter visit_If, which will call stmt_star_ break_statements=body_connect_stmts.break_statements ) +Here is the code of stmt_star_handler -In visit_call we will call expr_star_handler on the arguments, that returns a named_tuple with the - -We create the control flow graph of the program we are analyzing. - -These modules mirror the `abstract grammar`_ of Python. - -.. _ast.NodeVisitor: https://docs.python.org/3/library/ast.html#ast.NodeVisitor -.. _abstract grammar: https://docs.python.org/3/library/ast.html#abstract-grammar - +.. code-block:: python -Dive into the raw ast NodeVisitor code. + def stmt_star_handler( + self, + stmts, + prev_node_to_avoid=None + ): + """Handle stmt* expressions in an AST node. + Links all statements together in a list of statements, accounting for statements with multiple last nodes. + """ + break_nodes = list() + cfg_statements = list() + + self.prev_nodes_to_avoid.append(prev_node_to_avoid) + self.last_control_flow_nodes.append(None) + + first_node = None + node_not_to_step_past = self.nodes[-1] + + for stmt in stmts: + node = self.visit(stmt) + + if isinstance(node, ControlFlowNode) and not isinstance(node.test, TryNode): + self.last_control_flow_nodes.append(node.test) + else: + self.last_control_flow_nodes.append(None) + + if isinstance(node, ControlFlowNode): + break_nodes.extend(node.break_statements) + elif isinstance(node, BreakNode): + break_nodes.append(node) + + if not isinstance(node, IgnoredNode): + cfg_statements.append(node) + if not first_node: + if isinstance(node, ControlFlowNode): + first_node = node.test + else: + first_node = get_first_node( + node, + node_not_to_step_past + ) + + self.prev_nodes_to_avoid.pop() + self.last_control_flow_nodes.pop() + + connect_nodes(cfg_statements) + + if cfg_statements: + if first_node: + first_statement = first_node + else: + first_statement = get_first_statement(cfg_statements[0]) + + last_statements = get_last_statements(cfg_statements) + + return ConnectStatements( + first_statement=first_statement, + last_statements=last_statements, + break_statements=break_nodes + ) + else: # When body of module only contains ignored nodes + return IgnoredNode() -Statements can contain expressions, but not the other way around, -so it was natural to have ExprVisitor inherit from StmtVisitor. +Notice how this code can handle an infinite amount of nested if: statements? This is why stmt_star_handler is so instrumental to making the StmtVisitor work. -TODO: stmt_star_handler and expr_star_handler explanations and walk throughs. +.. _ast.NodeVisitor: https://docs.python.org/3/library/ast.html#ast.NodeVisitor +.. _abstract grammar: https://docs.python.org/3/library/ast.html#abstract-grammar +References +========== For more information on AST nodes, see the `Green Tree Snakes`_ documentation. From b9a1bae922a833dc7d0807f92bd290ddc57d5841 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 19:28:28 -0700 Subject: [PATCH 354/541] Trim stmt_star_handler code --- pyt/cfg/README.rst | 63 ++++++++++++++++++---------------------------- 1 file changed, 24 insertions(+), 39 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index a4607841..be19c7e3 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,4 +1,4 @@ -make_cfg is what __main__ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. +make_cfg is what __main__.py calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. stmt_visitor.py and expr_visitor.py mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) @@ -73,8 +73,7 @@ Here is the code of stmt_star_handler def stmt_star_handler( self, - stmts, - prev_node_to_avoid=None + stmts ): """Handle stmt* expressions in an AST node. Links all statements together in a list of statements, accounting for statements with multiple last nodes. @@ -82,56 +81,42 @@ Here is the code of stmt_star_handler break_nodes = list() cfg_statements = list() - self.prev_nodes_to_avoid.append(prev_node_to_avoid) - self.last_control_flow_nodes.append(None) - first_node = None node_not_to_step_past = self.nodes[-1] for stmt in stmts: node = self.visit(stmt) - if isinstance(node, ControlFlowNode) and not isinstance(node.test, TryNode): - self.last_control_flow_nodes.append(node.test) - else: - self.last_control_flow_nodes.append(None) - if isinstance(node, ControlFlowNode): break_nodes.extend(node.break_statements) elif isinstance(node, BreakNode): break_nodes.append(node) - if not isinstance(node, IgnoredNode): - cfg_statements.append(node) - if not first_node: - if isinstance(node, ControlFlowNode): - first_node = node.test - else: - first_node = get_first_node( - node, - node_not_to_step_past - ) - - self.prev_nodes_to_avoid.pop() - self.last_control_flow_nodes.pop() + cfg_statements.append(node) + if not first_node: + if isinstance(node, ControlFlowNode): + first_node = node.test + else: + first_node = get_first_node( + node, + node_not_to_step_past + ) connect_nodes(cfg_statements) - if cfg_statements: - if first_node: - first_statement = first_node - else: - first_statement = get_first_statement(cfg_statements[0]) - - last_statements = get_last_statements(cfg_statements) - - return ConnectStatements( - first_statement=first_statement, - last_statements=last_statements, - break_statements=break_nodes - ) - else: # When body of module only contains ignored nodes - return IgnoredNode() + if first_node: + first_statement = first_node + else: + first_statement = get_first_statement(cfg_statements[0]) + + last_statements = get_last_statements(cfg_statements) + + return ConnectStatements( + first_statement=first_statement, + last_statements=last_statements, + break_statements=break_nodes + ) + Notice how this code can handle an infinite amount of nested if: statements? This is why stmt_star_handler is so instrumental to making the StmtVisitor work. From 13c66ba97bb98d72158c305efc7e1f34372eaed5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 1 May 2018 19:29:15 -0700 Subject: [PATCH 355/541] Update README.rst --- pyt/cfg/README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index be19c7e3..304243bb 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -76,7 +76,8 @@ Here is the code of stmt_star_handler stmts ): """Handle stmt* expressions in an AST node. - Links all statements together in a list of statements, accounting for statements with multiple last nodes. + Links all statements together in a list of statements. + Accounts for statements with multiple last nodes. """ break_nodes = list() cfg_statements = list() From 5f33fcb7f41898612ad45afabbd1bedaebd304e5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 1 May 2018 19:44:31 -0700 Subject: [PATCH 356/541] [reorg] make tests pass --- pyt/__main__.py | 242 +----------------- pyt/usage.py | 8 +- pyt/vulnerabilities/vulnerabilities.py | 4 +- tests/usage_test.py | 25 +- tests/vulnerabilities/vulnerabilities_test.py | 6 +- 5 files changed, 34 insertions(+), 251 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 25409d85..b2302113 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -28,197 +28,6 @@ is_function, is_function_without_leading_ ) -<<<<<<< HEAD -======= -from .github_search import scan_github, set_github_api_token -from .lattice import print_lattice -from .liveness import LivenessAnalysis -from .project_handler import get_directory_modules, get_modules -from .reaching_definitions import ReachingDefinitionsAnalysis -from .reaching_definitions_taint import ReachingDefinitionsTaintAnalysis -from .repo_runner import get_repos -from .save import ( - cfg_to_file, - create_database, - def_use_chain_to_file, - lattice_to_file, - Output, - use_def_chain_to_file, - verbose_cfg_to_file, - vulnerabilities_to_file -) -from .vulnerabilities import find_vulnerabilities - - -def parse_args(args): - parser = argparse.ArgumentParser(prog='python -m pyt') - parser.set_defaults(which='') - - subparsers = parser.add_subparsers() - - entry_group = parser.add_mutually_exclusive_group(required=True) - entry_group.add_argument('-f', '--filepath', - help='Path to the file that should be analysed.', - type=str) - entry_group.add_argument('-gr', '--git-repos', - help='Takes a CSV file of git_url, path per entry.', - type=str) - - parser.add_argument('-pr', '--project-root', - help='Add project root, this is important when the entry' + - ' file is not at the root of the project.', type=str) - parser.add_argument('-d', '--draw-cfg', - help='Draw CFG and output as .pdf file.', - action='store_true') - parser.add_argument('-o', '--output-filename', - help='Output filename.', type=str) - parser.add_argument('-csv', '--csv-path', type=str, - help='Give the path of the csv file' - ' repos should be added to.') - - print_group = parser.add_mutually_exclusive_group() - print_group.add_argument('-p', '--print', - help='Prints the nodes of the CFG.', - action='store_true') - print_group.add_argument('-vp', '--verbose-print', - help='Verbose printing of -p.', action='store_true') - print_group.add_argument('-trim', '--trim-reassigned-in', - help='Trims the reassigned list to the vulnerability chain.', - action='store_true', - default=False) - print_group.add_argument('-i', '--interactive', - help='Will ask you about each vulnerability chain and blackbox nodes.', - action='store_true', - default=False) - - parser.add_argument('-t', '--trigger-word-file', - help='Input trigger word file.', - type=str, - default=default_trigger_word_file) - parser.add_argument('-m', '--blackbox-mapping-file', - help='Input blackbox mapping file.', - type=str, - default=default_blackbox_mapping_file) - parser.add_argument('-py2', '--python-2', - help='[WARNING, EXPERIMENTAL] Turns on Python 2 mode,' + - ' needed when target file(s) are written in Python 2.', action='store_true') - parser.add_argument('-l', '--log-level', - help='Choose logging level: CRITICAL, ERROR,' + - ' WARNING(Default), INFO, DEBUG, NOTSET.', type=str) - parser.add_argument('-a', '--adaptor', - help='Choose an adaptor: Flask(Default), Django, Every or Pylons', - type=str) - parser.add_argument('-db', '--create-database', - help='Creates a sql file that can be used to' + - ' create a database.', action='store_true') - parser.add_argument('-dl', '--draw-lattice', - nargs='+', help='Draws a lattice.') - parser.add_argument('-j', '--json', - help='Prints JSON instead of report.', - action='store_true', - default=False) - - analysis_group = parser.add_mutually_exclusive_group() - analysis_group.add_argument('-li', '--liveness', - help='Run liveness analysis. Default is' + - ' reaching definitions tainted version.', - action='store_true') - analysis_group.add_argument('-re', '--reaching', - help='Run reaching definitions analysis.' + - ' Default is reaching definitions' + - ' tainted version.', action='store_true') - analysis_group.add_argument('-rt', '--reaching-taint', - help='This is the default analysis:' + - ' reaching definitions tainted version.', - action='store_true') - - parser.add_argument('-ppm', '--print-project-modules', - help='Print project modules.', action='store_true') - parser.add_argument('-b', '--baseline', - help='path of a baseline report to compare against ' - '(only JSON-formatted files are accepted)', - type=str, - default=False) - parser.add_argument('--ignore-nosec', dest='ignore_nosec', action='store_true', - help='do not skip lines with # nosec comments') - - save_parser = subparsers.add_parser('save', help='Save menu.') - save_parser.set_defaults(which='save') - save_parser.add_argument('-fp', '--filename-prefix', - help='Filename prefix fx file_lattice.pyt', - type=str) - save_parser.add_argument('-du', '--def-use-chain', - help='Output the def-use chain(s) to file.', - action='store_true') - save_parser.add_argument('-ud', '--use-def-chain', - help='Output the use-def chain(s) to file', - action='store_true') - save_parser.add_argument('-cfg', '--control-flow-graph', - help='Output the CFGs to file.', - action='store_true') - save_parser.add_argument('-vcfg', '--verbose-control-flow-graph', - help='Output the verbose CFGs to file.', - action='store_true') - save_parser.add_argument('-an', '--analysis', - help='Output analysis results to file' + - ' in form of a constraint table.', - action='store_true') - save_parser.add_argument('-la', '--lattice', help='Output lattice(s) to file.', - action='store_true') - save_parser.add_argument('-vu', '--vulnerabilities', - help='Output vulnerabilities to file.', - action='store_true') - save_parser.add_argument('-all', '--save-all', - help='Output everything to file.', - action='store_true') - - - search_parser = subparsers.add_parser( - 'github_search', - help='Searches through github and runs PyT' - ' on found repositories. This can take some time.') - search_parser.set_defaults(which='search') - - search_parser.add_argument( - '-ss', '--search-string', required=True, - help='String for searching for repos on github.', type=str) - - search_parser.add_argument('-sd', '--start-date', - help='Start date for repo search. ' - 'Criteria used is Created Date.', - type=valid_date, - default=date(2010, 1, 1)) - return parser.parse_args(args) - - -def analyse_repo(args, github_repo, analysis_type, ui_mode, nosec_lines): - cfg_list = list() - directory = os.path.dirname(github_repo.path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - tree = generate_ast(github_repo.path) - cfg = make_cfg( - tree, - project_modules, - local_modules, - github_repo.path - ) - cfg_list.append(cfg) - - initialize_constraint_table(cfg_list) - analyse(cfg_list, analysis_type=analysis_type) - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis_type, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), - nosec_lines - ) - return vulnerabilities ->>>>>>> 5b372d267efa8cccc75c998b5d3fe56f2904f116 def main(command_line_args=sys.argv[1:]): @@ -231,48 +40,18 @@ def main(command_line_args=sys.argv[1:]): ui_mode = UImode.TRIM path = os.path.normpath(args.filepath) -<<<<<<< HEAD -======= - cfg_list = list() + if args.ignore_nosec: nosec_lines = set() else: - file = open(path, "r") + file = open(path, 'r') lines = file.readlines() nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - - if args.git_repos: - repos = get_repos(args.git_repos) - for repo in repos: - repo.clone() - vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) - if args.json: - json.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) - if not vulnerabilities: - repo.clean_up() - exit() - - - if args.which == 'search': - set_github_api_token() - scan_github( - args.search_string, - args.start_date, - analysis, - analyse_repo, - args.csv_path, - ui_mode, - args + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line ) - exit() - directory = None ->>>>>>> 5b372d267efa8cccc75c998b5d3fe56f2904f116 if args.project_root: directory = os.path.normpath(args.project_root) else: @@ -310,18 +89,11 @@ def main(command_line_args=sys.argv[1:]): vulnerabilities = find_vulnerabilities( cfg_list, ui_mode, -<<<<<<< HEAD args.blackbox_mapping_file, - args.trigger_word_file -======= - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), + args.trigger_word_file, nosec_lines ->>>>>>> 5b372d267efa8cccc75c998b5d3fe56f2904f116 ) - + if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline( vulnerabilities, diff --git a/pyt/usage.py b/pyt/usage.py index d633cf79..4930eb02 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -85,6 +85,12 @@ def _add_optional_group(parser): type=argparse.FileType('w'), default=sys.stdout, ) + optional_group.add_argument( + '--ignore-nosec', + dest='ignore_nosec', + action='store_true', + help='do not skip lines with # nosec comments' + ) def _add_print_group(parser): @@ -106,8 +112,6 @@ def _add_print_group(parser): def _check_required_and_mutually_exclusive_args(parser, args): if args.filepath is None: parser.error('The -f/--filepath argument is required') - if args.trim_reassigned_in and args.interactive: - parser.error('argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in') def parse_args(args): diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index ef4da52e..b41ae374 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -129,7 +129,7 @@ def append_node_if_reassigned( def find_triggers( nodes, trigger_words, - nosec_lines=set() + nosec_lines ): """Find triggers from the trigger_word_list in the nodes. @@ -468,7 +468,7 @@ def find_vulnerabilities( cfg_list, ui_mode, blackbox_mapping_file, - source_sink_file + source_sink_file, nosec_lines=set() ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. diff --git a/tests/usage_test.py b/tests/usage_test.py index 2b8673c9..cae390e5 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -27,7 +27,8 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] + [-trim] [-i] required arguments: -f FILEPATH, --filepath FILEPATH @@ -50,6 +51,7 @@ def test_no_args(self): Input file with a list of sources and sinks -o OUTPUT_FILE, --output OUTPUT_FILE write report to filename + --ignore-nosec do not skip lines with # nosec comments print arguments: -trim, --trim-reassigned-in @@ -67,22 +69,23 @@ def test_valid_args_but_no_filepath(self): EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] + [-trim] [-i] python -m pyt: error: The -f/--filepath argument is required\n""" self.assertEqual(stderr.getvalue(), EXPECTED) - def test_using_both_mutually_exclusive_args(self): - with self.assertRaises(SystemExit): - with capture_sys_output() as (_, stderr): - parse_args(['-f', 'foo.py', '-trim', '--interactive']) +# def test_using_both_mutually_exclusive_args(self): +# with self.assertRaises(SystemExit): +# with capture_sys_output() as (_, stderr): +# parse_args(['-f', 'foo.py', '-trim', '--interactive']) - EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] -python -m pyt: error: argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in\n""" +# EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] +# [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] +# [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] +# python -m pyt: error: argument -i/--interactive: not allowed with argument -trim/--trim-reassigned-in\n""" - self.assertEqual(stderr.getvalue(), EXPECTED) +# self.assertEqual(stderr.getvalue(), EXPECTED) def test_normal_usage(self): with capture_sys_output() as (stdout, stderr): diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 440f492e..5e40a60f 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -85,7 +85,11 @@ def test_find_triggers(self): XSS1 = cfg_list[1] trigger_words = [('get', [])] - l = vulnerabilities.find_triggers(XSS1.nodes, trigger_words) + l = vulnerabilities.find_triggers( + XSS1.nodes, + trigger_words, + nosec_lines=set() + ) self.assert_length(l, expected_length=1) def test_find_sanitiser_nodes(self): From f7d9ff3c5413fcea771048e0115bd26adc20421c Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 1 May 2018 19:49:54 -0700 Subject: [PATCH 357/541] add ignore-nosec to readme --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index 221d6e0c..ee39de0a 100644 --- a/README.rst +++ b/README.rst @@ -80,6 +80,7 @@ Usage Input file with a list of sources and sinks -o OUTPUT_FILE, --output OUTPUT_FILE write report to filename + --ignore-nosec do not skip lines with # nosec comments print arguments: -trim, --trim-reassigned-in From a7be197e26604754ba64930a34b18d7bb1113931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 2 May 2018 11:46:35 +0300 Subject: [PATCH 358/541] unnecessary lines removed in self.assertInCfg --- tests/cfg_test.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/cfg_test.py b/tests/cfg_test.py index 2f7ef192..9bd49255 100644 --- a/tests/cfg_test.py +++ b/tests/cfg_test.py @@ -288,9 +288,8 @@ def test_orelse_with_no_variables_to_save(self): self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), self.connected(ret_does_this_kill_us_3, print_so), self.connected(print_so, print_good), - self.connected(print_good, _exit), - - ]) + self.connected(print_good, _exit) + ]) def test_try_orelse_with_no_variables_to_save_and_no_args(self): self.cfg_create_from_file('examples/example_inputs/try_orelse_with_no_variables_to_save_and_no_args.py') @@ -326,8 +325,7 @@ def test_try_orelse_with_no_variables_to_save_and_no_args(self): self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), self.connected(ret_does_this_kill_us_3, print_so), self.connected(print_so, print_good), - self.connected(print_good, _exit), - + self.connected(print_good, _exit) ]) def test_final(self): From 9b8e3d7c9d13f00b7f83323cf52ded73a473f0f5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:14:51 -0700 Subject: [PATCH 359/541] Add image to pyt/ readme, add link to pyt/ readme from root readme, finish cfg readme for now --- README.rst | 7 +++++++ pyt/README.rst | 3 +++ pyt/cfg/README.rst | 11 +++++------ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/README.rst b/README.rst index ee39de0a..db4ba9e5 100644 --- a/README.rst +++ b/README.rst @@ -88,3 +88,10 @@ Usage chain. -i, --interactive Will ask you about each blackbox function call in vulnerability chains. + +How It Works +============ + +You will find a README.rst in every directory in the pyt folder, `start here`_. + +.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt diff --git a/pyt/README.rst b/pyt/README.rst index 611002a5..8cc1e5ea 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -59,3 +59,6 @@ Step 8 .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 + + +.. image:: https://github.com/KevinHock/rtdpyt/blob/master/docs/img/overview.png diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 304243bb..9f007bbc 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -35,9 +35,12 @@ This is the relevant part of the `abstract grammar`_ If(expr test, stmt* body, stmt* orelse) # Note: stmt* means any number of statements. -Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. We create one node for the test, and connect it with the first node of the body, which in this case is x = 5. -which will call stmt_star_handler, that returns a namedtuple ConnectStatements with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. +Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the stmt_star_handler function. + +stmt_star_handler returns a namedtuple (ConnectStatements) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. stmt_star_handler takes care of connecting each statement in the body to the next one. + +We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (ControlFlowNode) with the test, last_statements and break_statements. .. code-block:: python @@ -119,10 +122,6 @@ Here is the code of stmt_star_handler ) - -Notice how this code can handle an infinite amount of nested if: statements? This is why stmt_star_handler is so instrumental to making the StmtVisitor work. - - .. _ast.NodeVisitor: https://docs.python.org/3/library/ast.html#ast.NodeVisitor .. _abstract grammar: https://docs.python.org/3/library/ast.html#abstract-grammar From 5781228767f2742b4a4fc738b5e8dbd4513f0fc9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:25:57 -0700 Subject: [PATCH 360/541] update readme's --- pyt/README.rst | 6 ++++++ pyt/cfg/README.rst | 1 - 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pyt/README.rst b/pyt/README.rst index 8cc1e5ea..64e4439a 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -1,3 +1,6 @@ +How It Works +============ + `__main__.py`_ is where all the high-level steps happen. .. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py @@ -60,5 +63,8 @@ Step 8 .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 +Here is an image from the `orginal thesis`_: .. image:: https://github.com/KevinHock/rtdpyt/blob/master/docs/img/overview.png + +.. _original thesis: http://projekter.aau.dk/projekter/files/239563289/final.pdf#page=57 diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 9f007bbc..d5199bfb 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -70,7 +70,6 @@ We then connect the test node to the first node in the body (if some_condition - break_statements=body_connect_stmts.break_statements ) -Here is the code of stmt_star_handler .. code-block:: python From c7199abe76f6e4190a41d12563f5785f400c23cd Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:27:33 -0700 Subject: [PATCH 361/541] type --- pyt/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/README.rst b/pyt/README.rst index 64e4439a..d1474108 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -63,7 +63,7 @@ Step 8 .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 -Here is an image from the `orginal thesis`_: +Here is an image from the `original thesis`_: .. image:: https://github.com/KevinHock/rtdpyt/blob/master/docs/img/overview.png From 935a04d522c37b4344e61b169d7fc8d1bf34aff9 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:28:47 -0700 Subject: [PATCH 362/541] change page of thesis in link --- pyt/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/README.rst b/pyt/README.rst index d1474108..5dc8255e 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -67,4 +67,4 @@ Here is an image from the `original thesis`_: .. image:: https://github.com/KevinHock/rtdpyt/blob/master/docs/img/overview.png -.. _original thesis: http://projekter.aau.dk/projekter/files/239563289/final.pdf#page=57 +.. _original thesis: http://projekter.aau.dk/projekter/files/239563289/final.pdf#page=62 From 1cb06883a41317f654d9d670711be7c218ccc642 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:42:02 -0700 Subject: [PATCH 363/541] update readme's, more links mostly --- pyt/analysis/README.rst | 25 +++++++++++++++++++++++-- pyt/cfg/README.rst | 17 ++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index d785ffdb..e1ba9ef1 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -38,12 +38,33 @@ How does a definition reach? ============================ After we know that a definition reaches a use that we are interested in, -we make what are called `definition-use chains`_ figure out how the definition +we make what use called `definition-use chains`_ to figure out how the definition reaches the use. This is necessary because there may be more than one path from -the definition to the use. +the definition to the use. Here is the code from `definition_chains.py`_: +.. code-block:: python + + def build_def_use_chain( + cfg_nodes, + lattice + ): + def_use = defaultdict(list) + # For every node + for node in cfg_nodes: + # That's a definition + if isinstance(node, AssignmentNode): + # Get the uses + for variable in node.right_hand_side_variables: + # Loop through most of the nodes before it + for earlier_node in get_constraint_nodes(node, lattice): + # and add them to the 'uses list' of each earlier node, when applicable + # 'earlier node' here being a simplification + if variable in earlier_node.left_hand_side: + def_use[earlier_node].append(node) + return def_use .. _definition-use chains: https://en.wikipedia.org/wiki/Use-define_chain +.. _definition_chains.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/analysis/definition_chains.py#L16-L33 Additional details diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index d5199bfb..595014ae 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,4 +1,7 @@ -make_cfg is what __main__.py calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. +`make_cfg`_ is what `__main__.py`_ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. + +.. _make_cfg: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/make_cfg.py#L22-L38 +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py#L33-L106 stmt_visitor.py and expr_visitor.py mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) @@ -13,9 +16,11 @@ This is how ast.NodeVisitor works: return visitor(node) -So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing` and `outgoing` node attributes. +So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `\`ingoing\` and \`outgoing\` node attributes`_. + +.. _\`ingoing\` and \`outgoing\` node attributes_: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L27-L48 -The two most illustrative functions are stmt_star_handler and expr_star_handler. expr_star_handler has not been merged to master so let's talk about stmt_star_handler. +The two most illustrative functions are `stmt_star_handler`_ and expr_star_handler. expr_star_handler has not been merged to master so let's talk about `stmt_star_handler`_. Handling an if: statement @@ -36,12 +41,14 @@ This is the relevant part of the `abstract grammar`_ # Note: stmt* means any number of statements. -Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the stmt_star_handler function. +Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. -stmt_star_handler returns a namedtuple (ConnectStatements) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. stmt_star_handler takes care of connecting each statement in the body to the next one. +`stmt_star_handler`_ returns a namedtuple (ConnectStatements) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. `stmt_star_handler`_ takes care of connecting each statement in the body to the next one. We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (ControlFlowNode) with the test, last_statements and break_statements. +.. _stmt_star_handler: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L60-L121 + .. code-block:: python From 96440607f02539365e7c785a150fbbf043ec0908 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:43:47 -0700 Subject: [PATCH 364/541] update broken link due to rst links being hard --- pyt/cfg/README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 595014ae..7e5b1077 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -16,9 +16,9 @@ This is how ast.NodeVisitor works: return visitor(node) -So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `\`ingoing\` and \`outgoing\` node attributes`_. +So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing and outgoing node attributes`_. -.. _\`ingoing\` and \`outgoing\` node attributes_: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L27-L48 +.. _ingoing and outgoing node attributes_: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L27-L48 The two most illustrative functions are `stmt_star_handler`_ and expr_star_handler. expr_star_handler has not been merged to master so let's talk about `stmt_star_handler`_. From b2ebd64a0a4d1ced24676046d0b0624b4f7cc79a Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:44:26 -0700 Subject: [PATCH 365/541] update broken link due to rst links being hard --- pyt/cfg/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 7e5b1077..a6c82297 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -18,7 +18,7 @@ This is how ast.NodeVisitor works: So as you'll see, there is a `visit\_` function for almost every AST node type. We keep track of all the nodes while we visit by adding them to self.nodes, connecting them via `ingoing and outgoing node attributes`_. -.. _ingoing and outgoing node attributes_: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L27-L48 +.. _ingoing and outgoing node attributes: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L27-L48 The two most illustrative functions are `stmt_star_handler`_ and expr_star_handler. expr_star_handler has not been merged to master so let's talk about `stmt_star_handler`_. From 364a276bd669a6778abebb4a500957c8b821a085 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:49:20 -0700 Subject: [PATCH 366/541] Glitch Boy (Dyto Remix) https://soundcloud.com/qmando/likes --- pyt/cfg/README.rst | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index a6c82297..b2517bdf 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,9 +1,12 @@ -`make_cfg`_ is what `__main__.py`_ calls, it takes the Abstract Syntax Tree, creates an ExprVisitor and returns a Control Flow Graph. +`make_cfg`_ is what `__main__.py`_ calls, it takes the Abstract Syntax Tree, creates an `ExprVisitor`_ and returns a Control Flow Graph. .. _make_cfg: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/make_cfg.py#L22-L38 .. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py#L33-L106 -stmt_visitor.py and expr_visitor.py mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why ExprVisitor inherits from StmtVisitor, (which inherits from `ast.NodeVisitor`_ from the standard library.) +`stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, (which inherits from `ast.NodeVisitor`_ from the standard library.) + +.. _StmtVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L55 +.. _ExprVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/expr_visitor.py#L33 This is how ast.NodeVisitor works: @@ -41,12 +44,16 @@ This is the relevant part of the `abstract grammar`_ # Note: stmt* means any number of statements. -Upon visiting an if: statement we will enter visit_If in stmt_visitor.py. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. +Upon visiting an if: statement we will enter visit_If in `stmt_visitor.py`_. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. `stmt_star_handler`_ returns a namedtuple (ConnectStatements) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. `stmt_star_handler`_ takes care of connecting each statement in the body to the next one. We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (ControlFlowNode) with the test, last_statements and break_statements. +.. _stmt\_visitor.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py + +.. _expr\_visitor.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/expr_visitor.py + .. _stmt_star_handler: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L60-L121 From fbd151cb6088ee376b614755ffb3276afe59361e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:54:00 -0700 Subject: [PATCH 367/541] More links, b/c backticks in markdown are better than rst --- pyt/cfg/README.rst | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index b2517bdf..9cabb67b 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -8,7 +8,7 @@ .. _StmtVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L55 .. _ExprVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/expr_visitor.py#L33 -This is how ast.NodeVisitor works: +This is how `ast.NodeVisitor`_ works: .. code-block:: python @@ -46,9 +46,14 @@ This is the relevant part of the `abstract grammar`_ Upon visiting an if: statement we will enter visit_If in `stmt_visitor.py`_. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. -`stmt_star_handler`_ returns a namedtuple (ConnectStatements) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. `stmt_star_handler`_ takes care of connecting each statement in the body to the next one. +`stmt_star_handler`_ returns a namedtuple (`ConnectStatements`_) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. `stmt_star_handler`_ takes care of connecting each statement in the body to the next one. -We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (ControlFlowNode) with the test, last_statements and break_statements. +We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (`ControlFlowNode`_) with the test, last_statements and break_statements. + + +.. _ConnectStatements: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor_helper.py#L15 + +.. _ControlFlowNode: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L7 .. _stmt\_visitor.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py From 56b9c88bf33b6596c505527ad8f845bd4accfadc Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:56:21 -0700 Subject: [PATCH 368/541] More links, b/c backticks in markdown are better than rst --- pyt/cfg/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 9cabb67b..5d6ab0c4 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -1,7 +1,9 @@ -`make_cfg`_ is what `__main__.py`_ calls, it takes the Abstract Syntax Tree, creates an `ExprVisitor`_ and returns a Control Flow Graph. +`make_cfg`_ is what `__main__.py`_ calls, it takes the `Abstract Syntax Tree`_, creates an `ExprVisitor`_ and returns a `Control Flow Graph`_. .. _make_cfg: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/make_cfg.py#L22-L38 .. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py#L33-L106 +.. _Abstract Syntax Tree: https://en.wikipedia.org/wiki/Abstract_syntax_tree +.. _Control Flow Graph: https://en.wikipedia.org/wiki/Control_flow_graph `stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, (which inherits from `ast.NodeVisitor`_ from the standard library.) From 95ecff439115a575b83ac0b0171605f3ab6e5d16 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:57:51 -0700 Subject: [PATCH 369/541] semicolon instead of parenthesis --- pyt/cfg/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 5d6ab0c4..586a8875 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -5,7 +5,7 @@ .. _Abstract Syntax Tree: https://en.wikipedia.org/wiki/Abstract_syntax_tree .. _Control Flow Graph: https://en.wikipedia.org/wiki/Control_flow_graph -`stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, (which inherits from `ast.NodeVisitor`_ from the standard library.) +`stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, which inherits from `ast.NodeVisitor`_; from the standard library.) .. _StmtVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L55 .. _ExprVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/expr_visitor.py#L33 From 8e197ade8988548e244556a4c64f03bb031d36c3 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 10:58:26 -0700 Subject: [PATCH 370/541] del closing parenthesis --- pyt/cfg/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 586a8875..0e620b85 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -5,7 +5,7 @@ .. _Abstract Syntax Tree: https://en.wikipedia.org/wiki/Abstract_syntax_tree .. _Control Flow Graph: https://en.wikipedia.org/wiki/Control_flow_graph -`stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, which inherits from `ast.NodeVisitor`_; from the standard library.) +`stmt_visitor.py`_ and `expr_visitor.py`_ mirror the `abstract grammar`_ of Python. Statements can contain expressions, but not the other way around. This is why `ExprVisitor`_ inherits from `StmtVisitor`_, which inherits from `ast.NodeVisitor`_; from the standard library. .. _StmtVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L55 .. _ExprVisitor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/expr_visitor.py#L33 From 1d0f4445b8653ee82d4f0f821c6dcfb710e77978 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 11:01:04 -0700 Subject: [PATCH 371/541] del closing parenthesis --- pyt/cfg/README.rst | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyt/cfg/README.rst b/pyt/cfg/README.rst index 0e620b85..4f561c77 100644 --- a/pyt/cfg/README.rst +++ b/pyt/cfg/README.rst @@ -46,13 +46,15 @@ This is the relevant part of the `abstract grammar`_ # Note: stmt* means any number of statements. -Upon visiting an if: statement we will enter visit_If in `stmt_visitor.py`_. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. +Upon visiting an if: statement we will enter `visit_If`_ in `stmt_visitor.py`_. Since we know that the test is just one expression, we can just call self.visit() on it. The body could be an infinite number of statements, so we use the `stmt_star_handler`_ function. `stmt_star_handler`_ returns a namedtuple (`ConnectStatements`_) with the first statement, last_statements and break_statements of all of the statements that were in the body of the node. `stmt_star_handler`_ takes care of connecting each statement in the body to the next one. We then connect the test node to the first node in the body (if some_condition -> x = 5) and return a namedtuple (`ControlFlowNode`_) with the test, last_statements and break_statements. +.. _visit\_If: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor.py#L208-L232 + .. _ConnectStatements: https://github.com/python-security/pyt/blob/re_organize_code/pyt/cfg/stmt_visitor_helper.py#L15 .. _ControlFlowNode: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L7 From af3de1fbd51b198a203fb4d6afac3806bac437b5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 5 May 2018 11:04:54 -0700 Subject: [PATCH 372/541] Add ast link to pyt/ readme --- pyt/README.rst | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pyt/README.rst b/pyt/README.rst index 5dc8255e..7d69b9ce 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -15,7 +15,7 @@ Step 1 Step 2 - Generate the Abstract Syntax Tree (AST). + Generate the `Abstract Syntax Tree (AST)`_. Essentially done in these lines of code with the `ast`_ module: @@ -26,6 +26,7 @@ Step 2 `generate_ast`_ in `ast_helper.py`_ + .. _Abstract Syntax Tree (AST): https://en.wikipedia.org/wiki/Abstract_syntax_tree .. _ast: https://docs.python.org/3/library/ast.html .. _generate_ast: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py#L24 .. _ast_helper.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/ast_helper.py From e93ad98463aa5ee7ed1e3fe1b3c13f81a5ef5835 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Mon, 7 May 2018 20:58:08 -0700 Subject: [PATCH 373/541] Update README.rst --- README.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.rst b/README.rst index 3883e331..2488f42d 100644 --- a/README.rst +++ b/README.rst @@ -126,3 +126,10 @@ Install dependencies smmap (0.9.0) In the future, just type ``source ~/a_folder/bin/activate`` to start developing. + +How It Works +============ + +Soon you will find a README.rst in every directory in the pyt folder, `start here`_. + +.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt From 2ebe5951a7ed940cb38b16035ce55ba2c0ab7bee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 10 May 2018 16:43:15 +0300 Subject: [PATCH 374/541] new args --- pyt/__main__.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index b81e6f03..90b8ad7d 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -93,7 +93,9 @@ def parse_args(args): help='Will ask you about each vulnerability chain and blackbox nodes.', action='store_true', default=False) - + parser.add_argument('-r', '--recursive', dest='recursive', + action='store_true', help='find and process files in subdirectories') + parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str, @@ -238,6 +240,9 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM + recursivePath = os.path.normpath(args.recursive) + print(recursivePath) + path = os.path.normpath(args.filepath) cfg_list = list() if args.ignore_nosec: From ef3a21d4b9b8b67bfa48869f09bb09b72f3b12c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 11 May 2018 22:22:34 +0300 Subject: [PATCH 375/541] added recursive args --- pyt/__main__.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 90b8ad7d..903fd158 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -59,6 +59,9 @@ def parse_args(args): subparsers = parser.add_subparsers() + entry_group.add_argument('-r', '--recursive', + help='find and process files in subdirectories', + type=str) entry_group = parser.add_mutually_exclusive_group(required=True) entry_group.add_argument('-f', '--filepath', help='Path to the file that should be analysed.', @@ -240,10 +243,17 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM - recursivePath = os.path.normpath(args.recursive) - print(recursivePath) - - path = os.path.normpath(args.filepath) + if args.recursive: + file_list = [] + for root, dirs, files in os.walk(args.recursive): + for f in files: + fullpath = os.path.join(root, f) + if os.path.splitext(fullpath)[1] == '.py': + file_list.append(fullpath) + print(file_list) + + if args.filepath: + path = os.path.normpath(args.filepath) cfg_list = list() if args.ignore_nosec: nosec_lines = set() From 38be6e2855861e7e6f5d7934af0dc52ff24f1059 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 11 May 2018 22:33:18 +0300 Subject: [PATCH 376/541] Update __main__.py --- pyt/__main__.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 903fd158..8655080a 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -250,11 +250,8 @@ def main(command_line_args=sys.argv[1:]): fullpath = os.path.join(root, f) if os.path.splitext(fullpath)[1] == '.py': file_list.append(fullpath) - print(file_list) - - if args.filepath: - path = os.path.normpath(args.filepath) - cfg_list = list() + path = fullpath + cfg_list = list() if args.ignore_nosec: nosec_lines = set() else: @@ -336,6 +333,10 @@ def main(command_line_args=sys.argv[1:]): nosec_lines ) + if args.filepath: + path = os.path.normpath(args.filepath) + + if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) From 759f632f823005b9ea6c21ff629b1197e73c8745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 11 May 2018 22:35:25 +0300 Subject: [PATCH 377/541] Update __main__.py --- pyt/__main__.py | 160 ++++++++++++++++++++++++------------------------ 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 8655080a..1cd4f204 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -251,87 +251,87 @@ def main(command_line_args=sys.argv[1:]): if os.path.splitext(fullpath)[1] == '.py': file_list.append(fullpath) path = fullpath - cfg_list = list() - if args.ignore_nosec: - nosec_lines = set() - else: - file = open(path, "r") - lines = file.readlines() - nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - - if args.git_repos: - repos = get_repos(args.git_repos) - for repo in repos: - repo.clone() - vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) - if args.json: - json.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) - if not vulnerabilities: - repo.clean_up() - exit() - - - if args.which == 'search': - set_github_api_token() - scan_github( - args.search_string, - args.start_date, - analysis, - analyse_repo, - args.csv_path, - ui_mode, - args - ) - exit() - - directory = None - if args.project_root: - directory = os.path.normpath(args.project_root) - else: - directory = os.path.dirname(path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - - tree = generate_ast(path, python_2=args.python_2) - - cfg_list = list() - cfg = make_cfg( - tree, - project_modules, - local_modules, - path - ) - cfg_list.append(cfg) - framework_route_criteria = is_flask_route_function - if args.adaptor: - if args.adaptor.lower().startswith('e'): - framework_route_criteria = is_function - elif args.adaptor.lower().startswith('p'): - framework_route_criteria = is_function_without_leading_ - elif args.adaptor.lower().startswith('d'): - framework_route_criteria = is_django_view_function - # Add all the route functions to the cfg_list - FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + + if args.ignore_nosec: + nosec_lines = set() + else: + file = open(path, "r") + lines = file.readlines() + nosec_lines = set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line) + + if args.git_repos: + repos = get_repos(args.git_repos) + for repo in repos: + repo.clone() + vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) + if args.json: + json.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) + if not vulnerabilities: + repo.clean_up() + exit() + + + if args.which == 'search': + set_github_api_token() + scan_github( + args.search_string, + args.start_date, + analysis, + analyse_repo, + args.csv_path, + ui_mode, + args + ) + exit() + + directory = None + if args.project_root: + directory = os.path.normpath(args.project_root) + else: + directory = os.path.dirname(path) + project_modules = get_modules(directory) + local_modules = get_directory_modules(directory) + + tree = generate_ast(path, python_2=args.python_2) - initialize_constraint_table(cfg_list) - - analyse(cfg_list, analysis_type=analysis) - - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), - nosec_lines - ) + cfg_list = list() + cfg = make_cfg( + tree, + project_modules, + local_modules, + path + ) + cfg_list.append(cfg) + framework_route_criteria = is_flask_route_function + if args.adaptor: + if args.adaptor.lower().startswith('e'): + framework_route_criteria = is_function + elif args.adaptor.lower().startswith('p'): + framework_route_criteria = is_function_without_leading_ + elif args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function + # Add all the route functions to the cfg_list + FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=analysis) + + vulnerabilities = find_vulnerabilities( + cfg_list, + analysis, + ui_mode, + VulnerabilityFiles( + args.blackbox_mapping_file, + args.trigger_word_file + ), + nosec_lines + ) if args.filepath: path = os.path.normpath(args.filepath) From ed38dbb136a8842b83bfa57cb92545d33804f659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 13 May 2018 00:21:23 +0300 Subject: [PATCH 378/541] Created discover_files() function --- pyt/__main__.py | 204 +++++++++++++++++++++++++----------------------- 1 file changed, 106 insertions(+), 98 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 1cd4f204..aa17a887 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -59,10 +59,10 @@ def parse_args(args): subparsers = parser.add_subparsers() - entry_group.add_argument('-r', '--recursive', - help='find and process files in subdirectories', - type=str) entry_group = parser.add_mutually_exclusive_group(required=True) + entry_group.add_argument('-r', '--recursive', + help='Output filename.', + type=str) entry_group.add_argument('-f', '--filepath', help='Path to the file that should be analysed.', type=str) @@ -96,9 +96,7 @@ def parse_args(args): help='Will ask you about each vulnerability chain and blackbox nodes.', action='store_true', default=False) - parser.add_argument('-r', '--recursive', dest='recursive', - action='store_true', help='find and process files in subdirectories') - + parser.add_argument('-t', '--trigger-word-file', help='Input trigger word file.', type=str, @@ -125,6 +123,9 @@ def parse_args(args): help='Prints JSON instead of report.', action='store_true', default=False) + parser.add_argument('-x', '--exclude', dest='excluded_paths', + action='store', + default='', help='Separate files with commas') analysis_group = parser.add_mutually_exclusive_group() analysis_group.add_argument('-li', '--liveness', @@ -227,6 +228,18 @@ def analyse_repo(args, github_repo, analysis_type, ui_mode, nosec_lines): ) return vulnerabilities +def discover_files(directory_path, excluded_files): + file_list = [] + excluded_list = excluded_files.split(",") + + for root, dirs, files in os.walk(directory_path): + for f in files: + fullpath = os.path.join(root, f) + if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: + file_list.append(fullpath) + + return(file_list) + def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) @@ -243,99 +256,94 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM - if args.recursive: - file_list = [] - for root, dirs, files in os.walk(args.recursive): - for f in files: - fullpath = os.path.join(root, f) - if os.path.splitext(fullpath)[1] == '.py': - file_list.append(fullpath) - path = fullpath - - if args.ignore_nosec: - nosec_lines = set() - else: - file = open(path, "r") - lines = file.readlines() - nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line) - - if args.git_repos: - repos = get_repos(args.git_repos) - for repo in repos: - repo.clone() - vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) - if args.json: - json.report(vulnerabilities, sys.stdout) - else: - text.report(vulnerabilities, sys.stdout) - if not vulnerabilities: - repo.clean_up() - exit() - - - if args.which == 'search': - set_github_api_token() - scan_github( - args.search_string, - args.start_date, - analysis, - analyse_repo, - args.csv_path, - ui_mode, - args - ) - exit() - - directory = None - if args.project_root: - directory = os.path.normpath(args.project_root) - else: - directory = os.path.dirname(path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - - tree = generate_ast(path, python_2=args.python_2) - - cfg_list = list() - cfg = make_cfg( - tree, - project_modules, - local_modules, - path - ) - cfg_list.append(cfg) - framework_route_criteria = is_flask_route_function - if args.adaptor: - if args.adaptor.lower().startswith('e'): - framework_route_criteria = is_function - elif args.adaptor.lower().startswith('p'): - framework_route_criteria = is_function_without_leading_ - elif args.adaptor.lower().startswith('d'): - framework_route_criteria = is_django_view_function - # Add all the route functions to the cfg_list - FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) - - initialize_constraint_table(cfg_list) - - analyse(cfg_list, analysis_type=analysis) - - vulnerabilities = find_vulnerabilities( - cfg_list, - analysis, - ui_mode, - VulnerabilityFiles( - args.blackbox_mapping_file, - args.trigger_word_file - ), - nosec_lines - ) - - if args.filepath: - path = os.path.normpath(args.filepath) + directory_path = os.path.normpath(args.recursive) + excluded_files = args.excluded_paths + test = discover_files(directory_path, excluded_files) + + print(test) + + path = os.path.normpath(args.filepath) + cfg_list = list() + if args.ignore_nosec: + nosec_lines = set() + else: + file = open(path, "r") + lines = file.readlines() + nosec_lines = set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line) + + if args.git_repos: + repos = get_repos(args.git_repos) + for repo in repos: + repo.clone() + vulnerabilities = analyse_repo(args, repo, analysis, ui_mode, nosec_lines) + if args.json: + json.report(vulnerabilities, sys.stdout) + else: + text.report(vulnerabilities, sys.stdout) + if not vulnerabilities: + repo.clean_up() + exit() + + + if args.which == 'search': + set_github_api_token() + scan_github( + args.search_string, + args.start_date, + analysis, + analyse_repo, + args.csv_path, + ui_mode, + args + ) + exit() + + directory = None + if args.project_root: + directory = os.path.normpath(args.project_root) + else: + directory = os.path.dirname(path) + project_modules = get_modules(directory) + local_modules = get_directory_modules(directory) + tree = generate_ast(path, python_2=args.python_2) + + cfg_list = list() + cfg = make_cfg( + tree, + project_modules, + local_modules, + path + ) + cfg_list.append(cfg) + framework_route_criteria = is_flask_route_function + if args.adaptor: + if args.adaptor.lower().startswith('e'): + framework_route_criteria = is_function + elif args.adaptor.lower().startswith('p'): + framework_route_criteria = is_function_without_leading_ + elif args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function + # Add all the route functions to the cfg_list + FrameworkAdaptor(cfg_list, project_modules, local_modules, framework_route_criteria) + + initialize_constraint_table(cfg_list) + + analyse(cfg_list, analysis_type=analysis) + + vulnerabilities = find_vulnerabilities( + cfg_list, + analysis, + ui_mode, + VulnerabilityFiles( + args.blackbox_mapping_file, + args.trigger_word_file + ), + nosec_lines + ) if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline(vulnerabilities, args.baseline) From e2c25636eab4fe330c2be7b22df1f10006ebc598 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 19 May 2018 16:34:42 -0700 Subject: [PATCH 379/541] Update README.rst --- README.rst | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index 2488f42d..073d38fc 100644 --- a/README.rst +++ b/README.rst @@ -73,6 +73,12 @@ Running an individual test file ``python3 -m unittest tests.import_test`` Running an individual test ``python3 -m unittest tests.import_test.ImportTest.test_import`` +How It Works +============ + +Soon you will find a README.rst in every directory in the pyt folder, `start here`_. + +.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt Contributions ============= @@ -126,10 +132,3 @@ Install dependencies smmap (0.9.0) In the future, just type ``source ~/a_folder/bin/activate`` to start developing. - -How It Works -============ - -Soon you will find a README.rst in every directory in the pyt folder, `start here`_. - -.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt From b5f7e50410900c12c1e8334f183259015df16cf5 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 5 Jun 2018 09:46:58 -0700 Subject: [PATCH 380/541] Edit vulns/README.rst --- pyt/vulnerabilities/README.rst | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index 3ba5b13c..180020d6 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -1 +1,14 @@ Coming soon. + +There are a few different kinds of vulnerabilities + +Regular +Sanitised +Unknown + + +How we find secondary nodes + +How we find sources/sinks + +How def-use chains are used From 3ac883c71eb46387804a31726c643843604bdc72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 6 Jun 2018 14:55:01 +0300 Subject: [PATCH 381/541] added recursive option --- pyt/usage.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pyt/usage.py b/pyt/usage.py index 4930eb02..e768d38a 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -91,7 +91,18 @@ def _add_optional_group(parser): action='store_true', help='do not skip lines with # nosec comments' ) - + optional_group.add_argument( + '-r', '--recursive', + help='Output filename.', + type=str + ) + optional_group.add_argument( + '-x', '--exclude', + dest='excluded_paths', + action='store', + default='', + help='Separate files with commas' + ) def _add_print_group(parser): print_group = parser.add_argument_group('print arguments') From e246104334f9a824557b989859554126d1de041f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 6 Jun 2018 14:56:11 +0300 Subject: [PATCH 382/541] discover_files --- pyt/__main__.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/pyt/__main__.py b/pyt/__main__.py index b2302113..ce9e0355 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -30,6 +30,19 @@ ) +def discover_files(directory_path, excluded_files): + file_list = [] + excluded_list = excluded_files.split(",") + + for root, dirs, files in os.walk(directory_path): + for f in files: + fullpath = os.path.join(root, f) + if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: + file_list.append(fullpath) + + return(file_list) + + def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) @@ -40,6 +53,10 @@ def main(command_line_args=sys.argv[1:]): ui_mode = UImode.TRIM path = os.path.normpath(args.filepath) + directory_path = os.path.normpath(args.recursive) + excluded_files = args.excluded_paths + test = discover_files(directory_path, excluded_files) #just for see files in directory + print(test) if args.ignore_nosec: nosec_lines = set() From 8d43c95f75b18eb7dbcc4ce96ed9ce6e56535c96 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Wed, 6 Jun 2018 18:23:21 -0700 Subject: [PATCH 383/541] Update README.rst --- README.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.rst b/README.rst index bfb55e49..3593d1e2 100644 --- a/README.rst +++ b/README.rst @@ -50,6 +50,13 @@ PyT can also be installed from source. To do so, clone the repo, and then run: python3 setup.py install +How It Works +============ + +Soon you will find a README.rst in every directory in the pyt folder, `start here`_. + +.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt + Usage ===== @@ -89,13 +96,6 @@ Usage -i, --interactive Will ask you about each blackbox function call in vulnerability chains. -How It Works -============ - -Soon you will find a README.rst in every directory in the pyt folder, `start here`_. - -.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt - Usage from Source ================= From 2cbac72055bb6c18c7ee5160fabd4d54d40db3a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 7 Jun 2018 14:50:58 +0300 Subject: [PATCH 384/541] added recursive, targets --- pyt/usage.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/pyt/usage.py b/pyt/usage.py index e768d38a..a92f42a4 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -29,11 +29,11 @@ def valid_date(s): def _add_required_group(parser): required_group = parser.add_argument_group('required arguments') - required_group.add_argument( + '''required_group.add_argument( '-f', '--filepath', help='Path to the file that should be analysed.', type=str - ) + )''' def _add_optional_group(parser): @@ -92,9 +92,8 @@ def _add_optional_group(parser): help='do not skip lines with # nosec comments' ) optional_group.add_argument( - '-r', '--recursive', - help='Output filename.', - type=str + '-r', '--recursive', dest='recursive', + action='store_true', help='find and process files in subdirectories' ) optional_group.add_argument( '-x', '--exclude', @@ -102,7 +101,11 @@ def _add_optional_group(parser): action='store', default='', help='Separate files with commas' - ) + ) + optional_group.add_argument( + 'targets', metavar='targets', type=str, nargs='*', + help='source file(s) or directory(s) to be tested' + ) def _add_print_group(parser): print_group = parser.add_argument_group('print arguments') @@ -121,8 +124,8 @@ def _add_print_group(parser): def _check_required_and_mutually_exclusive_args(parser, args): - if args.filepath is None: - parser.error('The -f/--filepath argument is required') + if args.targets is None: + parser.error('The target argument is required') def parse_args(args): From 7875c8256a7f729dc52f13c9ed819a512d863c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 7 Jun 2018 14:51:33 +0300 Subject: [PATCH 385/541] update discover_files() --- pyt/__main__.py | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index ce9e0355..839d7758 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -30,17 +30,23 @@ ) -def discover_files(directory_path, excluded_files): - file_list = [] +def discover_files(targets, excluded_files, recursive=False): + file_list = list() + included_files = list() excluded_list = excluded_files.split(",") - for root, dirs, files in os.walk(directory_path): - for f in files: - fullpath = os.path.join(root, f) - if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: - file_list.append(fullpath) - - return(file_list) + for target in targets: + if os.path.isdir(target): + if recursive: + for root, dirs, files in os.walk(target): + for f in files: + fullpath = os.path.join(root, f) + if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: + included_files.append(fullpath) + else: + if targets not in excluded_list: + included_files.append(targets[0]) + return(included_files) def main(command_line_args=sys.argv[1:]): @@ -52,12 +58,16 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM - path = os.path.normpath(args.filepath) - directory_path = os.path.normpath(args.recursive) + + + targets = args.targets excluded_files = args.excluded_paths - test = discover_files(directory_path, excluded_files) #just for see files in directory + recursive = args.recursive + test = discover_files(targets, excluded_files, recursive) #just for see files in directory print(test) + path = os.path.normpath(args.filepath) + if args.ignore_nosec: nosec_lines = set() else: From ca0b2d764cdaab13ec2e1f98253b122bc0cf5819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 7 Jun 2018 14:53:04 +0300 Subject: [PATCH 386/541] removed file_list --- pyt/__main__.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 839d7758..61319bb1 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -31,7 +31,6 @@ def discover_files(targets, excluded_files, recursive=False): - file_list = list() included_files = list() excluded_list = excluded_files.split(",") From 892073a30fc5fc03c9ffcf5fde0de97adc2c526d Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 17:37:25 -0700 Subject: [PATCH 387/541] Update README.rst --- pyt/vulnerabilities/README.rst | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index 180020d6..b8ff5d24 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -1,6 +1,24 @@ Coming soon. -There are a few different kinds of vulnerabilities +The first thing we do is `find all sources and sinks in the file`_, and then `loop through each pair of source and sink to see if a source reaches a sink`_. + +Once we obtain def-use chains, we `find all of the paths from source to sink`_. + + + +After we get each vulnerability chain, we see `how_vulnerable`_ it is + +There are a few different `vulnerability types`_ used in `how_vulnerable`_. + +.. _loop through each pair of source and sink to see if a source reaches a sink: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L452-L464 +.. _find all sources and sinks in the file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L29-L59 + +.. _find all of the paths from source to sink: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L397-L405 + +.. _vulnerability types: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L8-L12 + +.. _how_vulnerable: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L266-L323 + Regular Sanitised From b5d3641d6a1b139168cdb140883f5da23a9ddcc4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 17:38:36 -0700 Subject: [PATCH 388/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 3593d1e2..e9597cd1 100644 --- a/README.rst +++ b/README.rst @@ -55,7 +55,7 @@ How It Works Soon you will find a README.rst in every directory in the pyt folder, `start here`_. -.. _start here: https://github.com/python-security/pyt/tree/re_organize_code/pyt +.. _start here: https://github.com/python-security/pyt/tree/master/pyt Usage ===== From 6f76d6df97ebd9f2d96879613130e41cf90549aa Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 17:59:04 -0700 Subject: [PATCH 389/541] Update README.rst --- pyt/vulnerabilities/README.rst | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index b8ff5d24..998b59ad 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -1,4 +1,5 @@ -Coming soon. +`find_vulnerabilities`_ is what `__main__.py`_ calls, it takes a list of `CFGs`_ and returns a list of vulnerabilities. + The first thing we do is `find all sources and sinks in the file`_, and then `loop through each pair of source and sink to see if a source reaches a sink`_. @@ -10,6 +11,10 @@ After we get each vulnerability chain, we see `how_vulnerable`_ it is There are a few different `vulnerability types`_ used in `how_vulnerable`_. +.. _find_vulnerabilities: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L467-L502 +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py#L33-L106 +.. _CFGs: https://github.com/python-security/pyt/tree/re_organize_code/pyt/cfg + .. _loop through each pair of source and sink to see if a source reaches a sink: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L452-L464 .. _find all sources and sinks in the file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L29-L59 @@ -20,9 +25,34 @@ There are a few different `vulnerability types`_ used in `how_vulnerable`_. .. _how_vulnerable: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L266-L323 +Types of Vulnerabilities +======================== + Regular +and example code and output + Sanitised + +.. code-block:: python + File: examples/vulnerable_code/XSS_sanitised.py + > User input at line 7, source "request.args.get(": + ~call_1 = ret_request.args.get('param', 'not set') + Reassigned in: + File: examples/vulnerable_code/XSS_sanitised.py + > Line 7: param = ~call_1 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 9: ~call_2 = ret_Markup.escape(param) + File: examples/vulnerable_code/XSS_sanitised.py + > Line 9: param = ~call_2 + File: examples/vulnerable_code/XSS_sanitised.py + > reaches line 12, sink "replace(": + ~call_5 = ret_html.replace('{{ param }}', param) + This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) + +and example code and output + Unknown +and example code and output How we find secondary nodes From feaf94b9fb79f2298fa29a46357ba2bb164851a6 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 17:59:34 -0700 Subject: [PATCH 390/541] Update README.rst --- pyt/vulnerabilities/README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index 998b59ad..48ca316e 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -60,3 +60,4 @@ How we find secondary nodes How we find sources/sinks How def-use chains are used +h From ae8c599f536bdf5cd8a14262a00eb5e8f3fba6b4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 18:02:39 -0700 Subject: [PATCH 391/541] Update README.rst --- pyt/vulnerabilities/README.rst | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index 48ca316e..1dde3857 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -34,6 +34,27 @@ and example code and output Sanitised .. code-block:: python + :linenos: + + from flask import Flask, request, make_response, Markup + + app = Flask(__name__) + + @app.route('/XSS_param', methods =['GET']) + def XSS1(): + param = request.args.get('param', 'not set') + + param = Markup.escape(param) + + html = open('templates/XSS_param.html').read() + resp = make_response(html.replace('{{ param }}', param)) + return resp + + if __name__ == '__main__': + app.run(debug= True) + +.. code-block:: python + File: examples/vulnerable_code/XSS_sanitised.py > User input at line 7, source "request.args.get(": ~call_1 = ret_request.args.get('param', 'not set') From 36ed86a6992187bc0175fbbe9fca3204d66b38ce Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 8 Jun 2018 18:27:23 -0700 Subject: [PATCH 392/541] Update README.rst --- pyt/vulnerabilities/README.rst | 59 +++++++++++++++++----------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/pyt/vulnerabilities/README.rst b/pyt/vulnerabilities/README.rst index 1dde3857..bf8c4f0b 100644 --- a/pyt/vulnerabilities/README.rst +++ b/pyt/vulnerabilities/README.rst @@ -24,50 +24,46 @@ There are a few different `vulnerability types`_ used in `how_vulnerable`_. .. _how_vulnerable: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L266-L323 +Configuration +============= +The hard-coded list of sources and sinks can be found in the `vulnerability_definitions`_ folder, currently `all_trigger_words.pyt`_ is used by default. + +.. _vulnerability_definitions: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerability_definitions +.. _all_trigger_words.pyt: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerability_definitions/all_trigger_words.pyt Types of Vulnerabilities ======================== -Regular -and example code and output +There are 3 kinds of vulnerabilities reported by PyT whose classes are defined in `vulnerability_helper.py`_: `regular`_, `sanitised`_ and `unknown`_. We report a `sanitised`_ vulnerability when there is a known sanitiser between the source and sink, with `confidence when the sanitiser is an assignment`_ and with `uncertainty if it is potentially sanitised by an if statement`_. Here is an example: -Sanitised +.. _confidence when the sanitiser is an assignment: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L293 +.. _uncertainty if it is potentially sanitised by an if statement: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L394 .. code-block:: python - :linenos: - - from flask import Flask, request, make_response, Markup - - app = Flask(__name__) - @app.route('/XSS_param', methods =['GET']) - def XSS1(): - param = request.args.get('param', 'not set') - - param = Markup.escape(param) - - html = open('templates/XSS_param.html').read() - resp = make_response(html.replace('{{ param }}', param)) - return resp - - if __name__ == '__main__': - app.run(debug= True) + 5 @app.route('/XSS_param', methods =['GET']) + 6 def XSS1(): + 7 param = request.args.get('param', 'not set') + 8 safe_param = Markup.escape(param) + 9 html = open('templates/XSS_param.html').read() + 10 resp = make_response(html.replace('{{ param }}', safe_param)) + 11 return resp .. code-block:: python File: examples/vulnerable_code/XSS_sanitised.py > User input at line 7, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_request.args.get('param', 'not set') Reassigned in: - File: examples/vulnerable_code/XSS_sanitised.py - > Line 7: param = ~call_1 - File: examples/vulnerable_code/XSS_sanitised.py - > Line 9: ~call_2 = ret_Markup.escape(param) - File: examples/vulnerable_code/XSS_sanitised.py - > Line 9: param = ~call_2 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 7: param = ~call_1 + File: examples/vulnerable_code/XSS_sanitised.py + > Line 8: ~call_2 = ret_Markup.escape(param) + File: examples/vulnerable_code/XSS_sanitised.py + > Line 8: safe_param = ~call_2 File: examples/vulnerable_code/XSS_sanitised.py - > reaches line 12, sink "replace(": - ~call_5 = ret_html.replace('{{ param }}', param) + > reaches line 10, sink "replace(": + ~call_5 = ret_html.replace('{{ param }}', safe_param) This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) and example code and output @@ -82,3 +78,8 @@ How we find sources/sinks How def-use chains are used h + +.. _vulnerability_helper.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py +.. _regular: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L42-L91 +.. _sanitised: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L94-L119 +.. _unknown: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerability_helper.py#L122-L142 From c1d60e24aadab70f591831f79d9d92c110ff1fd4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 9 Jun 2018 13:36:09 -0700 Subject: [PATCH 393/541] Update README.rst --- README.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/README.rst b/README.rst index e9597cd1..af180b63 100644 --- a/README.rst +++ b/README.rst @@ -43,6 +43,7 @@ Install .. code-block:: python pip install python-taint + ✨🍰✨ PyT can also be installed from source. To do so, clone the repo, and then run: From b896da14b19b6ce1654df76bb7008a5c614d9e94 Mon Sep 17 00:00:00 2001 From: cclauss Date: Sat, 9 Jun 2018 23:47:38 +0200 Subject: [PATCH 394/541] --exclude=examples --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 100ed8c2..079eef72 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,9 +6,9 @@ install: - pip install codeclimate-test-reporter flake8 before_script: # stop the build if there are Python syntax errors or undefined names - - flake8 . --count --select=E901,E999,F821,F822,F823 --show-source --statistics + - flake8 . --count --exclude=examples --select=E901,E999,F821,F822,F823 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics + - flake8 . --count --exclude=examples --exit-zero --max-complexity=10 --max-line-length=127 --statistics script: - python -m tests - coverage run -m tests From d9db9dda1046438c91154e0bd3a88231e73334f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 10 Jun 2018 15:06:05 +0300 Subject: [PATCH 395/541] "targets" must be required --- pyt/usage.py | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/pyt/usage.py b/pyt/usage.py index a92f42a4..0892536e 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -29,11 +29,10 @@ def valid_date(s): def _add_required_group(parser): required_group = parser.add_argument_group('required arguments') - '''required_group.add_argument( - '-f', '--filepath', - help='Path to the file that should be analysed.', - type=str - )''' + required_group.add_argument( + 'targets', metavar='targets', type=str, nargs='*', + help='source file(s) or directory(s) to be tested' + ) def _add_optional_group(parser): @@ -102,10 +101,7 @@ def _add_optional_group(parser): default='', help='Separate files with commas' ) - optional_group.add_argument( - 'targets', metavar='targets', type=str, nargs='*', - help='source file(s) or directory(s) to be tested' - ) + def _add_print_group(parser): print_group = parser.add_argument_group('print arguments') @@ -125,7 +121,7 @@ def _add_print_group(parser): def _check_required_and_mutually_exclusive_args(parser, args): if args.targets is None: - parser.error('The target argument is required') + parser.error('The targets argument is required') def parse_args(args): From c35ae8179f7e1d22e9b96b0040895b6c85a4bad3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 10 Jun 2018 15:30:27 +0300 Subject: [PATCH 396/541] created loop for discover_files() --- pyt/__main__.py | 124 ++++++++++++++++++++++++------------------------ 1 file changed, 61 insertions(+), 63 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 61319bb1..8c6b4cb4 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -43,7 +43,7 @@ def discover_files(targets, excluded_files, recursive=False): if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: included_files.append(fullpath) else: - if targets not in excluded_list: + if target not in excluded_list: included_files.append(targets[0]) return(included_files) @@ -57,75 +57,73 @@ def main(command_line_args=sys.argv[1:]): elif args.trim_reassigned_in: ui_mode = UImode.TRIM + files = discover_files( + args.targets, + args.excluded_paths, + args.recursive + ) + for path in files: + print(path) + if args.ignore_nosec: + nosec_lines = set() + else: + file = open(path, 'r') + lines = file.readlines() + nosec_lines = set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line + ) + + if args.project_root: + directory = os.path.normpath(args.project_root) + else: + directory = os.path.dirname(path) + project_modules = get_modules(directory) + local_modules = get_directory_modules(directory) - targets = args.targets - excluded_files = args.excluded_paths - recursive = args.recursive - test = discover_files(targets, excluded_files, recursive) #just for see files in directory - print(test) - - path = os.path.normpath(args.filepath) + tree = generate_ast(path) - if args.ignore_nosec: - nosec_lines = set() - else: - file = open(path, 'r') - lines = file.readlines() - nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line + cfg = make_cfg( + tree, + project_modules, + local_modules, + path + ) + cfg_list = [cfg] + framework_route_criteria = is_flask_route_function + if args.adaptor: + if args.adaptor.lower().startswith('e'): + framework_route_criteria = is_function + elif args.adaptor.lower().startswith('p'): + framework_route_criteria = is_function_without_leading_ + elif args.adaptor.lower().startswith('d'): + framework_route_criteria = is_django_view_function + # Add all the route functions to the cfg_list + FrameworkAdaptor( + cfg_list, + project_modules, + local_modules, + framework_route_criteria ) - if args.project_root: - directory = os.path.normpath(args.project_root) - else: - directory = os.path.dirname(path) - project_modules = get_modules(directory) - local_modules = get_directory_modules(directory) - - tree = generate_ast(path) - - cfg = make_cfg( - tree, - project_modules, - local_modules, - path - ) - cfg_list = [cfg] - framework_route_criteria = is_flask_route_function - if args.adaptor: - if args.adaptor.lower().startswith('e'): - framework_route_criteria = is_function - elif args.adaptor.lower().startswith('p'): - framework_route_criteria = is_function_without_leading_ - elif args.adaptor.lower().startswith('d'): - framework_route_criteria = is_django_view_function - # Add all the route functions to the cfg_list - FrameworkAdaptor( - cfg_list, - project_modules, - local_modules, - framework_route_criteria - ) - - initialize_constraint_table(cfg_list) - analyse(cfg_list) - vulnerabilities = find_vulnerabilities( - cfg_list, - ui_mode, - args.blackbox_mapping_file, - args.trigger_word_file, - nosec_lines - ) - - if args.baseline: - vulnerabilities = get_vulnerabilities_not_in_baseline( - vulnerabilities, - args.baseline + initialize_constraint_table(cfg_list) + analyse(cfg_list) + vulnerabilities = find_vulnerabilities( + cfg_list, + ui_mode, + args.blackbox_mapping_file, + args.trigger_word_file, + nosec_lines ) + if args.baseline: + vulnerabilities = get_vulnerabilities_not_in_baseline( + vulnerabilities, + args.baseline + ) + if args.json: json.report(vulnerabilities, args.output_file) else: From 9c54d8ccbd1f5f1332836a91482faf31ee2b2a7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 10 Jun 2018 15:33:38 +0300 Subject: [PATCH 397/541] new params --- tests/usage_test.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index cae390e5..4883c31d 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -25,14 +25,14 @@ def test_no_args(self): self.maxDiff = None - EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-trim] [-i] + [-r] [-x EXCLUDED_PATHS] [-trim] [-i] + [targets [targets ...]] required arguments: - -f FILEPATH, --filepath FILEPATH - Path to the file that should be analysed. + targets source file(s) or directory(s) to be tested optional arguments: -a ADAPTOR, --adaptor ADAPTOR @@ -52,6 +52,9 @@ def test_no_args(self): -o OUTPUT_FILE, --output OUTPUT_FILE write report to filename --ignore-nosec do not skip lines with # nosec comments + -r, --recursive find and process files in subdirectories + -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS + Separate files with commas print arguments: -trim, --trim-reassigned-in @@ -62,7 +65,7 @@ def test_no_args(self): self.assertEqual(stdout.getvalue(), EXPECTED) - def test_valid_args_but_no_filepath(self): + '''def test_valid_args_but_no_filepath(self): with self.assertRaises(SystemExit): with capture_sys_output() as (_, stderr): parse_args(['-j']) @@ -73,7 +76,7 @@ def test_valid_args_but_no_filepath(self): [-trim] [-i] python -m pyt: error: The -f/--filepath argument is required\n""" - self.assertEqual(stderr.getvalue(), EXPECTED) + self.assertEqual(stderr.getvalue(), EXPECTED)''' # def test_using_both_mutually_exclusive_args(self): # with self.assertRaises(SystemExit): @@ -89,7 +92,7 @@ def test_valid_args_but_no_filepath(self): def test_normal_usage(self): with capture_sys_output() as (stdout, stderr): - parse_args(['-f', 'foo.py']) + parse_args(['foo.py']) self.assertEqual(stdout.getvalue(), '') self.assertEqual(stderr.getvalue(), '') From 7e3fa0e81448868090ad1c753325ddeb423ae528 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 10 Jun 2018 14:11:43 -0700 Subject: [PATCH 398/541] Update README.rst --- pyt/analysis/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index e1ba9ef1..9a12388f 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -38,7 +38,7 @@ How does a definition reach? ============================ After we know that a definition reaches a use that we are interested in, -we make what use called `definition-use chains`_ to figure out how the definition +we use what are called `definition-use chains`_ to figure out how the definition reaches the use. This is necessary because there may be more than one path from the definition to the use. Here is the code from `definition_chains.py`_: From 052c850ebc41154ea79377bf2b1dd7591c9238c9 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 10 Jun 2018 14:16:32 -0700 Subject: [PATCH 399/541] Update README.rst --- pyt/analysis/README.rst | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pyt/analysis/README.rst b/pyt/analysis/README.rst index 9a12388f..58f96d4f 100644 --- a/pyt/analysis/README.rst +++ b/pyt/analysis/README.rst @@ -18,7 +18,7 @@ a `reassignment check`_. # Get previous assignments of cfg_node.left_hand_side and remove them from JOIN arrow_result = self.arrow(JOIN, cfg_node.left_hand_side) -As an example, +We do this because, e.g. .. code-block:: python @@ -38,9 +38,9 @@ How does a definition reach? ============================ After we know that a definition reaches a use that we are interested in, -we use what are called `definition-use chains`_ to figure out how the definition -reaches the use. This is necessary because there may be more than one path from -the definition to the use. Here is the code from `definition_chains.py`_: +we use what are called `definition-use chains`_ to figure out how definitions +reach their uses. This is necessary because there may be multiple paths from +definition to use. Here is how we create `definition_chains`_: .. code-block:: python @@ -64,20 +64,20 @@ the definition to the use. Here is the code from `definition_chains.py`_: return def_use .. _definition-use chains: https://en.wikipedia.org/wiki/Use-define_chain -.. _definition_chains.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/analysis/definition_chains.py#L16-L33 +.. _definition_chains: https://github.com/python-security/pyt/blob/re_organize_code/pyt/analysis/definition_chains.py#L16-L33 Additional details ================== -This folder probably will not change at all for the lifetime of the project, +This folder will probably not change for the lifetime of the project, unless we were to implement more advanced analyses like `solving string -constraints`_ or doing `alias analysis`_. Right now and in the foreseeable -future there are more pressing concerns, like handling web frameworks +constraints`_ or doing `alias analysis`_. Right now there are more +pressing concerns, like handling web frameworks and handling all AST node types in the `CFG construction`_. Stefan and Bruno like the `Schwartzbach notes`_, as you will see in some comments. -But looking these two algorithms up will yield countless results, my favorite is +But looking up these two algorithms will yield countless results, my favorite is this `amazing guy from YouTube`_. From 7854cb45f35481278e11cb7726422fcb51da3c0b Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Wed, 13 Jun 2018 19:16:22 -0700 Subject: [PATCH 400/541] [flake8] Just fix flake8 errors for PR #114 --- pyt/__main__.py | 2 +- pyt/cfg/stmt_visitor.py | 2 +- pyt/core/ast_helper.py | 2 +- pyt/core/project_handler.py | 20 ++- .../reaching_definitions_taint_test.py | 62 +++++--- tests/cfg/cfg_test.py | 147 +++++++++++------- .../vulnerabilities_across_files_test.py | 7 +- tests/vulnerabilities/vulnerabilities_test.py | 42 ++--- 8 files changed, 175 insertions(+), 109 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index b2302113..52275da6 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -30,7 +30,7 @@ ) -def main(command_line_args=sys.argv[1:]): +def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) ui_mode = UImode.NORMAL diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 06a985e5..c10548c0 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -717,7 +717,7 @@ def append_node(self, node): self.nodes.append(node) return node - def add_module( + def add_module( # noqa: C901 self, module, module_or_package_name, diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index e741ac50..17013128 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -15,7 +15,7 @@ def convert_to_3(path): # pragma: no cover try: print('##### Trying to convert file to Python 3. #####') subprocess.call(['2to3', '-w', path]) - except: + except subprocess.SubprocessError: print('Check if 2to3 is installed. ' 'https://docs.python.org/2/library/2to3.html') exit(1) diff --git a/pyt/core/project_handler.py b/pyt/core/project_handler.py index 7d50b1e8..4a16ff96 100644 --- a/pyt/core/project_handler.py +++ b/pyt/core/project_handler.py @@ -40,12 +40,26 @@ def get_modules(path): for root, directories, filenames in os.walk(path): for filename in filenames: if is_python_file(filename): - directory = os.path.dirname(os.path.realpath(os.path.join(root, filename))).split(module_root)[-1].replace(os.sep, '.') + directory = os.path.dirname( + os.path.realpath( + os.path.join( + root, + filename + ) + ) + ).split(module_root)[-1].replace( + os.sep, # e.g. '/' + '.' + ) directory = directory.replace('.', '', 1) if directory: - modules.append(('.'.join((module_root, directory, filename.replace('.py', ''))), os.path.join(root, filename))) + modules.append( + ('.'.join((module_root, directory, filename.replace('.py', ''))), os.path.join(root, filename)) + ) else: - modules.append(('.'.join((module_root, filename.replace('.py', ''))), os.path.join(root, filename))) + modules.append( + ('.'.join((module_root, filename.replace('.py', ''))), os.path.join(root, filename)) + ) return modules diff --git a/tests/analysis/reaching_definitions_taint_test.py b/tests/analysis/reaching_definitions_taint_test.py index 20f50b5a..3c34508c 100644 --- a/tests/analysis/reaching_definitions_taint_test.py +++ b/tests/analysis/reaching_definitions_taint_test.py @@ -13,8 +13,10 @@ def test_linear_program(self): "Label: ~call_1 = ret_input(): Label: ~call_1 = ret_input()", "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", "Label: y = x - 1: Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" + """Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x - 1, + Label: x = ~call_1, Label: ~call_1 = ret_input()""", + """Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x - 1, Label: x = ~call_1, + Label: ~call_1 = ret_input()""" ] i = 0 for k, v in constraint_table.items(): @@ -31,8 +33,10 @@ def test_if_program(self): "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", "Label: if x > 0:: Label: x = ~call_1, Label: ~call_1 = ret_input()", "Label: y = x + 1: Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_input()" + """Label: ~call_2 = ret_print(x): Label: ~call_2 = ret_print(x), Label: y = x + 1, + Label: x = ~call_1, Label: ~call_1 = ret_input()""", + """Label: Exit module: Label: ~call_2 = ret_print(x), Label: y = x + 1, Label: x = ~call_1, + Label: ~call_1 = ret_input()""" ] i = 0 for k, v in constraint_table.items(): @@ -49,16 +53,28 @@ def test_example(self): "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_input()", "Label: ~call_2 = ret_int(x): Label: ~call_2 = ret_int(x), Label: x = ~call_1, Label: ~call_1 = ret_input()", "Label: x = ~call_2: Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()", - "Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()" + """Label: while x > 1:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, + Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: y = x / 2: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, + Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: if y > 3:: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, + Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: x = x - y: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, + Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: z = x - 4: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, + Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: if z > 0:: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, + Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: x = x / 2: Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, + Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: z = z - 1: Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, Label: x = x - y, Label: y = x / 2, + Label: x = ~call_2, Label: ~call_2 = ret_int(x), Label: ~call_1 = ret_input()""", + """Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, + Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), + Label: ~call_1 = ret_input()""", + """Label: Exit module: Label: ~call_3 = ret_print(x), Label: z = z - 1, Label: x = x / 2, Label: z = x - 4, + Label: x = x - y, Label: y = x / 2, Label: x = ~call_2, Label: ~call_2 = ret_int(x), + Label: ~call_1 = ret_input()""" ] i = 0 for k, v in constraint_table.items(): @@ -88,13 +104,19 @@ def test_while(self): "Label: ~call_2 = ret_input(): Label: ~call_2 = ret_input()", "Label: ~call_1 = ret_int(~call_2): Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", "Label: x = ~call_1: Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: while x < 10:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input(", - "Label: x = x + 1: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: if x == 5:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: BreakNode: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", + """Label: while x < 10:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), + Label: ~call_2 = ret_input(""", + """Label: x = x + 1: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), + Label: ~call_2 = ret_input()""", + """Label: if x == 5:: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), + Label: ~call_2 = ret_input()""", + """Label: BreakNode: Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), + Label: ~call_2 = ret_input()""", "Label: x = 6: Label: x = 6, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()", - "Label: Exit module: Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()" + """Label: ~call_3 = ret_print(x): Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, + Label: x = ~call_1, Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()""", + """Label: Exit module: Label: ~call_3 = ret_print(x), Label: x = 6, Label: x = x + 1, Label: x = ~call_1, + Label: ~call_1 = ret_int(~call_2), Label: ~call_2 = ret_input()""" ] i = 0 for k, v in constraint_table.items(): diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index f4862487..a42ac4e0 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -82,14 +82,16 @@ def test_for_complete(self): self.assertEqual(self.cfg.nodes[else_body_2].label, '~call_3 = ret_print(y)') self.assertEqual(self.cfg.nodes[next_node].label, 'x = 3') - self.assertInCfg([(for_node, entry), - (body_1, for_node), - (else_body_1, for_node), - (body_2, body_1), - (for_node, body_2), - (else_body_2, else_body_1), - (next_node, else_body_2), - (exit_node, next_node)]) + self.assertInCfg([ + (for_node, entry), + (body_1, for_node), + (else_body_1, for_node), + (body_2, body_1), + (for_node, body_2), + (else_body_2, else_body_1), + (next_node, else_body_2), + (exit_node, next_node) + ]) def test_for_no_orelse(self): self.cfg_create_from_file('examples/example_inputs/for_no_orelse.py') @@ -105,7 +107,14 @@ def test_for_no_orelse(self): next_node = 4 exit_node = 5 - self.assertInCfg([(for_node, entry), (body_1, for_node), (body_2, body_1), (for_node, body_2), (next_node, for_node), (exit_node, next_node)]) + self.assertInCfg([ + (for_node, entry), + (body_1, for_node), + (body_2, body_1), + (for_node, body_2), + (next_node, for_node), + (exit_node, next_node) + ]) def test_for_tuple_target(self): self.cfg_create_from_file('examples/example_inputs/for_tuple_target.py') @@ -307,7 +316,7 @@ def test_try_orelse_with_no_variables_to_save_and_no_args(self): self.nodes = self.cfg_list_to_dict(self.cfg.nodes) self.assert_length(self.cfg.nodes, expected_length=13) - + entry = 0 try_ = 1 print_a5 = 2 @@ -323,21 +332,21 @@ def test_try_orelse_with_no_variables_to_save_and_no_args(self): _exit = 12 self.assertInCfg([ - self.connected(entry, try_), - self.connected(try_, print_a5), - self.connected(print_a5, except_im), - self.connected(print_a5, function_entry), - self.connected(print_a5, print_good), - self.connected(except_im, print_wagyu), - self.connected(print_wagyu, print_good), - self.connected(function_entry, ret_subprocess_call), - self.connected(ret_subprocess_call, ret_does_this_kill_us_4), - self.connected(ret_does_this_kill_us_4, exit_does_this_kill_us), - self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), - self.connected(ret_does_this_kill_us_3, print_so), - self.connected(print_so, print_good), - self.connected(print_good, _exit) - ]) + self.connected(entry, try_), + self.connected(try_, print_a5), + self.connected(print_a5, except_im), + self.connected(print_a5, function_entry), + self.connected(print_a5, print_good), + self.connected(except_im, print_wagyu), + self.connected(print_wagyu, print_good), + self.connected(function_entry, ret_subprocess_call), + self.connected(ret_subprocess_call, ret_does_this_kill_us_4), + self.connected(ret_does_this_kill_us_4, exit_does_this_kill_us), + self.connected(exit_does_this_kill_us, ret_does_this_kill_us_3), + self.connected(ret_does_this_kill_us_3, print_so), + self.connected(print_so, print_good), + self.connected(print_good, _exit) + ]) def test_final(self): self.cfg_create_from_file('examples/example_inputs/try_final.py') @@ -354,15 +363,17 @@ def test_final(self): print_final = 5 _exit = 6 - self.assertInCfg([self.connected(entry, try_), - self.connected(try_, try_body), - self.connected(try_body, except_im), - self.connected(try_body, print_final), - self.connected(try_body, _exit), - self.connected(except_im, except_im_body_1), - self.connected(except_im_body_1, _exit), - self.connected(except_im_body_1, print_final), - self.connected(print_final, _exit)]) + self.assertInCfg([ + self.connected(entry, try_), + self.connected(try_, try_body), + self.connected(try_body, except_im), + self.connected(try_body, print_final), + self.connected(try_body, _exit), + self.connected(except_im, except_im_body_1), + self.connected(except_im_body_1, _exit), + self.connected(except_im_body_1, print_final), + self.connected(print_final, _exit) + ]) class CFGIfTest(CFGBaseTestCase): @@ -714,10 +725,8 @@ def test_multiple_assignment(self): self.assert_length(self.cfg.nodes, expected_length=4) - # start_node = self.cfg.nodes[0] assign_y = self.cfg.nodes[1] assign_x = self.cfg.nodes[2] - # exit_node = self.cfg.nodes[-1] self.assertEqual(assign_x.label, 'x = 5') self.assertEqual(assign_y.label, 'y = 5') @@ -731,9 +740,13 @@ def test_assign_list_comprehension(self): call = self.cfg.nodes[1] self.assertEqual(call.label, "~call_1 = ret_''.join((x.n for x in range(16)))") - l = zip(range(1, length), range(length)) - - self.assertInCfg(list(l)) + self.assertInCfg( + list( + zip( + range(1, length), range(length) + ) + ) + ) def test_assignment_tuple_value(self): self.cfg_create_from_file('examples/example_inputs/assignment_tuple_value.py') @@ -742,7 +755,6 @@ def test_assignment_tuple_value(self): start_node = 0 node = 1 exit_node = 2 - # print(self.cfg) self.assertInCfg([(node, start_node), (exit_node, node)]) @@ -867,19 +879,21 @@ def test_function_parameters(self): restore_actual_y = 12 _exit = 13 - self.assertInCfg([self.connected(entry, input_call), - self.connected(input_call, y_assignment), - self.connected(y_assignment, save_y), - self.connected(save_y, save_actual_y), - self.connected(save_actual_y, bar_local_y), - self.connected(bar_local_y, entry_bar), - self.connected(entry_bar, another_input_call), - self.connected(another_input_call, bar_y_assignment), - self.connected(bar_y_assignment, bar_print_y), - self.connected(bar_print_y, bar_print_x), - self.connected(bar_print_x, exit_bar), - self.connected(exit_bar, restore_actual_y), - self.connected(restore_actual_y, _exit)]) + self.assertInCfg([ + self.connected(entry, input_call), + self.connected(input_call, y_assignment), + self.connected(y_assignment, save_y), + self.connected(save_y, save_actual_y), + self.connected(save_actual_y, bar_local_y), + self.connected(bar_local_y, entry_bar), + self.connected(entry_bar, another_input_call), + self.connected(another_input_call, bar_y_assignment), + self.connected(bar_y_assignment, bar_print_y), + self.connected(bar_print_y, bar_print_x), + self.connected(bar_print_x, exit_bar), + self.connected(exit_bar, restore_actual_y), + self.connected(restore_actual_y, _exit) + ]) def test_function_with_return(self): path = 'examples/example_inputs/simple_function_with_return.py' @@ -887,8 +901,13 @@ def test_function_with_return(self): self.assert_length(self.cfg.nodes, expected_length=19) - l = zip(range(1, len(self.cfg.nodes)), range(len(self.cfg.nodes))) - self.assertInCfg(list(l)) + self.assertInCfg( + list( + zip( + range(1, len(self.cfg.nodes)), range(len(self.cfg.nodes)) + ) + ) + ) def test_function_multiple_return(self): path = 'examples/example_inputs/function_with_multiple_return.py' @@ -1238,9 +1257,14 @@ def test_multiple_parameters(self): length = len(self.cfg.nodes) self.assertEqual(length, 21) - l = zip(range(1, length), range(length)) - self.assertInCfg(list(l)) + self.assertInCfg( + list( + zip( + range(1, length), range(length) + ) + ) + ) def test_call_on_call(self): path = 'examples/example_inputs/call_on_call.py' @@ -1258,8 +1282,13 @@ def test_call_with_attribute(self): call = self.cfg.nodes[2] self.assertEqual(call.label, "~call_1 = ret_request.args.get('param', 'not set')") - l = zip(range(1, length), range(length)) - self.assertInCfg(list(l)) + self.assertInCfg( + list( + zip( + range(1, length), range(length) + ) + ) + ) def test_call_with_attribute_line_numbers(self): call = self.cfg.nodes[2] diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index d8bd3840..c0985723 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -56,7 +56,7 @@ def test_find_vulnerabilities_absolute_from_file_command_injection_2(self): self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_absolute_from_file_command_injection_3(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_absolute_from_file_command_injection_3.py') # noqa: E501 self.assert_length(vulnerabilities, expected_length=0) def test_blackbox_library_call(self): @@ -79,7 +79,8 @@ def test_blackbox_library_call(self): File: examples/vulnerable_code_across_files/blackbox_library_call.py > reaches line 17, sink "subprocess.call(": ~call_3 = ret_subprocess.call(hey, shell=True) - This vulnerability is unknown due to: Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') + This vulnerability is unknown due to: + Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) @@ -295,5 +296,5 @@ def test_find_vulnerabilities_import_file_command_injection_2(self): self.assert_length(vulnerabilities, expected_length=1) def test_no_false_positive_import_file_command_injection_3(self): - vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') + vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/no_false_positive_import_file_command_injection_3.py') # noqa: E501 self.assert_length(vulnerabilities, expected_length=0) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 5e40a60f..4c0dd2eb 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -40,31 +40,31 @@ def test_parse(self): self.assert_length(definitions.sinks[1][1], expected_length=3) def test_parse_section(self): - l = list(trigger_definitions_parser.parse_section(iter(['get']))) - self.assert_length(l, expected_length=1) - self.assertEqual(l[0][0], 'get') - self.assertEqual(l[0][1], list()) - - l = list(trigger_definitions_parser.parse_section(iter(['get', 'get -> a, b, c d s aq a']))) - self.assert_length(l, expected_length=2) - self.assertEqual(l[0][0], 'get') - self.assertEqual(l[1][0], 'get') - self.assertEqual(l[1][1], ['a', 'b', 'c d s aq a']) - self.assert_length(l[1][1], expected_length=3) + list_ = list(trigger_definitions_parser.parse_section(iter(['get']))) + self.assert_length(list_, expected_length=1) + self.assertEqual(list_[0][0], 'get') + self.assertEqual(list_[0][1], list()) + + list_ = list(trigger_definitions_parser.parse_section(iter(['get', 'get -> a, b, c d s aq a']))) + self.assert_length(list_, expected_length=2) + self.assertEqual(list_[0][0], 'get') + self.assertEqual(list_[1][0], 'get') + self.assertEqual(list_[1][1], ['a', 'b', 'c d s aq a']) + self.assert_length(list_[1][1], expected_length=3) def test_label_contains(self): cfg_node = Node('label', None, line_number=None, path=None) trigger_words = [('get', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=0) + list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(list_, expected_length=0) cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) trigger_words = [('get', []), ('request', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=2) + list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(list_, expected_length=2) - trigger_node_1 = l[0] - trigger_node_2 = l[1] + trigger_node_1 = list_[0] + trigger_node_2 = list_[1] self.assertEqual(trigger_node_1.trigger_word, 'get') self.assertEqual(trigger_node_1.cfg_node, cfg_node) self.assertEqual(trigger_node_2.trigger_word, 'request') @@ -72,8 +72,8 @@ def test_label_contains(self): cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) trigger_words = [('get', []), ('get', [])] - l = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(l, expected_length=2) + list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) + self.assert_length(list_, expected_length=2) def test_find_triggers(self): self.cfg_create_from_file('examples/vulnerable_code/XSS.py') @@ -85,12 +85,12 @@ def test_find_triggers(self): XSS1 = cfg_list[1] trigger_words = [('get', [])] - l = vulnerabilities.find_triggers( + list_ = vulnerabilities.find_triggers( XSS1.nodes, trigger_words, nosec_lines=set() ) - self.assert_length(l, expected_length=1) + self.assert_length(list_, expected_length=1) def test_find_sanitiser_nodes(self): cfg_node = Node(None, None, line_number=None, path=None) From 40c0f8f2864b72e88444d9a5aab35b84ce98ac07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 16 Jun 2018 18:05:42 +0300 Subject: [PATCH 401/541] Update __main__.py --- pyt/__main__.py | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 8c6b4cb4..4b629b28 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -45,7 +45,7 @@ def discover_files(targets, excluded_files, recursive=False): else: if target not in excluded_list: included_files.append(targets[0]) - return(included_files) + return included_files def main(command_line_args=sys.argv[1:]): @@ -62,7 +62,7 @@ def main(command_line_args=sys.argv[1:]): args.excluded_paths, args.recursive ) - + vulnerabilities = list() for path in files: print(path) if args.ignore_nosec: @@ -82,7 +82,6 @@ def main(command_line_args=sys.argv[1:]): directory = os.path.dirname(path) project_modules = get_modules(directory) local_modules = get_directory_modules(directory) - tree = generate_ast(path) cfg = make_cfg( @@ -110,19 +109,14 @@ def main(command_line_args=sys.argv[1:]): initialize_constraint_table(cfg_list) analyse(cfg_list) - vulnerabilities = find_vulnerabilities( + vulnerabilities.append(find_vulnerabilities( cfg_list, ui_mode, args.blackbox_mapping_file, args.trigger_word_file, nosec_lines - ) + )) - if args.baseline: - vulnerabilities = get_vulnerabilities_not_in_baseline( - vulnerabilities, - args.baseline - ) if args.json: json.report(vulnerabilities, args.output_file) From 42759f0dfebe0d12c490d8bad17743578fe66608 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 16 Jun 2018 18:07:58 +0300 Subject: [PATCH 402/541] Update __main__.py --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 4b629b28..ad0cce7b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -48,7 +48,7 @@ def discover_files(targets, excluded_files, recursive=False): return included_files -def main(command_line_args=sys.argv[1:]): +def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) ui_mode = UImode.NORMAL From ba80c3a70cb3c8c5e949c36a8c90b8eba9735c90 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 17 Jun 2018 15:38:15 -0700 Subject: [PATCH 403/541] Filled in the web_frameworks/README.rst --- pyt/web_frameworks/README.rst | 54 +++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 3 deletions(-) diff --git a/pyt/web_frameworks/README.rst b/pyt/web_frameworks/README.rst index aa1b121b..7574aced 100644 --- a/pyt/web_frameworks/README.rst +++ b/pyt/web_frameworks/README.rst @@ -1,5 +1,53 @@ -Coming soon. +This code determines which functions have their arguments marked at tainted, for example by default the framework adaptor is Flask, so +.. code-block:: python -Web frameworks -Sorry state of affairs + @app.route('/') + def ito_en(image): + +will have arguments marked as tainted, whereas + +.. code-block:: python + + def tea(request, param): + +will not. (The ``--adaptor D`` option, for Django, would mark the 2nd functions' arguments as tainted and not the first.) + +There are currently 4 options for framework route criteria, in the `framework_helper.py`_ file: + +- `is_flask_route_function`_, the default, looks for a ``route`` decorator +- `is_django_view_function`_, ``-a D``, looks if the first argument is named ``request`` +- `is_function_without_leading_`_, ``-a P``, looks if the function does not start with an underscore +- `is_function`_, ``-a E``, always returns True + + +.. _framework_helper.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py + +.. _is\_django\_view\_function: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py#L7 +.. _is\_flask\_route\_function: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py#L14 +.. _is\_function\_without\_leading\_: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py#L28 +.. _is\_function: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py#L23 + + +How The Code Works +================== + +`FrameworkAdaptor`_ is what `__main__.py`_ creates, it takes a framework_route_criteria that is chosen by the --adaptor cli argument. The framework_route_criteria is a function that takes an `ast.FunctionDef`_ and returns whether or not it is a route in the selected web framework. + +We mark the arguments as tainted by `looping through them`_ and making them node type `TaintedNode`_, where we then `add them to the list of sources`_. + + +.. _FrameworkAdaptor: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_adaptor.py#L14 +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py#L71-L85 +.. _ast.FunctionDef: http://greentreesnakes.readthedocs.io/en/latest/nodes.html#FunctionDef + +.. _looping through them: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_adaptor.py#L54 +.. _TaintedNode: https://github.com/python-security/pyt/blob/re_organize_code/pyt/core/node_types.py#L178 +.. _add them to the list of sources: https://github.com/python-security/pyt/blob/re_organize_code/pyt/vulnerabilities/vulnerabilities.py#L51 + +Caveats +======= + +This currently is not smart enough to understand `class-based views`_, so you will have to use ``-a P`` to mark most functions arguments as tainted, and trim false-positives yourself, this is easier with the ``--baseline`` and ``--json`` options. + +.. _class-based views: http://flask.pocoo.org/docs/1.0/views/ From ad77e9e81f4527d9c86008e7dc4a63eb1a693f6b Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 17 Jun 2018 15:40:15 -0700 Subject: [PATCH 404/541] Update README.rst --- pyt/web_frameworks/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/web_frameworks/README.rst b/pyt/web_frameworks/README.rst index 7574aced..f7292756 100644 --- a/pyt/web_frameworks/README.rst +++ b/pyt/web_frameworks/README.rst @@ -29,7 +29,7 @@ There are currently 4 options for framework route criteria, in the `framework_he .. _is\_function: https://github.com/python-security/pyt/blob/re_organize_code/pyt/web_frameworks/framework_helper.py#L23 -How The Code Works +How the Code Works ================== `FrameworkAdaptor`_ is what `__main__.py`_ creates, it takes a framework_route_criteria that is chosen by the --adaptor cli argument. The framework_route_criteria is a function that takes an `ast.FunctionDef`_ and returns whether or not it is a route in the selected web framework. From db087464c08fd089c99b66587269a1ea59356aaa Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 17 Jun 2018 15:48:17 -0700 Subject: [PATCH 405/541] Changed a lot of links to point to master branch --- pyt/README.rst | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyt/README.rst b/pyt/README.rst index 7d69b9ce..c6ab4c32 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -3,7 +3,7 @@ How It Works `__main__.py`_ is where all the high-level steps happen. -.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/__main__.py +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/master/pyt/__main__.py Step 1 Parse command line arguments. @@ -11,7 +11,7 @@ Step 1 `parse_args`_ in `usage.py`_ .. _parse_args: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L113 - .. _usage.py: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py + .. _usage.py: https://github.com/python-security/pyt/blob/master/pyt/usage.py Step 2 @@ -35,22 +35,22 @@ Step 2 Step 3 Pass the AST to create a `Control Flow Graph (CFG)`_ - .. _Control Flow Graph (CFG): https://github.com/python-security/pyt/tree/re_organize_code/pyt/cfg + .. _Control Flow Graph (CFG): https://github.com/python-security/pyt/tree/master/pyt/cfg Step 4 Pass the CFG to a `Framework Adaptor`_, which will mark the arguments of certain functions as tainted sources. - .. _Framework Adaptor: https://github.com/python-security/pyt/tree/re_organize_code/pyt/web_frameworks + .. _Framework Adaptor: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks Step 5 Perform `(modified-)reaching definitions analysis`_, to know where definitions reach. - .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/re_organize_code/pyt/analysis + .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/master/pyt/analysis Step 6 `Find vulnerabilities`_, by seeing where sources reach, and how. - .. _Find vulnerabilities: https://github.com/python-security/pyt/tree/re_organize_code/pyt/vulnerabilities + .. _Find vulnerabilities: https://github.com/python-security/pyt/tree/master/pyt/vulnerabilities Step 7 `Remove already known vulnerabilities`_ if a `baseline`_ (JSON file of a previous run of PyT) is provided. @@ -61,7 +61,7 @@ Step 7 Step 8 Output the results in either `text or JSON form`_, to stdout or the `output file`_. - .. _text or JSON form: https://github.com/python-security/pyt/tree/re_organize_code/pyt/formatters + .. _text or JSON form: https://github.com/python-security/pyt/tree/master/pyt/formatters .. _output file: https://github.com/python-security/pyt/blob/re_organize_code/pyt/usage.py#L80 Here is an image from the `original thesis`_: From 01397dd8c76907731c6f23e5d7baa5493a721973 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 17 Jun 2018 15:49:56 -0700 Subject: [PATCH 406/541] Update README.rst --- pyt/README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/README.rst b/pyt/README.rst index c6ab4c32..118a5080 100644 --- a/pyt/README.rst +++ b/pyt/README.rst @@ -45,7 +45,7 @@ Step 4 Step 5 Perform `(modified-)reaching definitions analysis`_, to know where definitions reach. - .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/master/pyt/analysis + .. _\(modified\-\)reaching definitions analysis: https://github.com/python-security/pyt/tree/master/pyt/analysis#where-do-definitions-reach Step 6 `Find vulnerabilities`_, by seeing where sources reach, and how. From 5546c3dc74a24ada1e9f5ea8a63779e2fd538ea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Tue, 19 Jun 2018 13:43:15 +0300 Subject: [PATCH 407/541] changed func. and added baseline --- pyt/__main__.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index ad0cce7b..643eeb19 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -48,7 +48,7 @@ def discover_files(targets, excluded_files, recursive=False): return included_files -def main(command_line_args=sys.argv[1:]): # noqa: C901 +def main(command_line_args=sys.argv[1:]): args = parse_args(command_line_args) ui_mode = UImode.NORMAL @@ -91,6 +91,8 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 path ) cfg_list = [cfg] + + framework_route_criteria = is_flask_route_function if args.adaptor: if args.adaptor.lower().startswith('e'): @@ -109,7 +111,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 initialize_constraint_table(cfg_list) analyse(cfg_list) - vulnerabilities.append(find_vulnerabilities( + vulnerabilities.extend(find_vulnerabilities( cfg_list, ui_mode, args.blackbox_mapping_file, @@ -117,6 +119,12 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 nosec_lines )) + if args.baseline: + vulnerabilities = get_vulnerabilities_not_in_baseline( + vulnerabilities, + args.baseline + ) + if args.json: json.report(vulnerabilities, args.output_file) From 8d1d80569d0c5f2af8eeae1b88cc8a9ef4b26043 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Tue, 19 Jun 2018 13:47:51 +0300 Subject: [PATCH 408/541] new parameters for discover_files --- tests/main_test.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/main_test.py b/tests/main_test.py index eea6ff47..aee80c68 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -5,17 +5,18 @@ class MainTest(BaseTestCase): + @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @mock.patch('pyt.__main__.find_vulnerabilities') @mock.patch('pyt.__main__.text') - def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args): + def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): mock_find_vulnerabilities.return_value = 'stuff' example_file = 'examples/vulnerable_code/inter_command_injection.py' output_file = 'mocked_outfile' + mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( autospec=True, - filepath=example_file, project_root=None, baseline=None, json=None, @@ -32,17 +33,18 @@ def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args mock_parse_args.return_value.output_file ) + @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @mock.patch('pyt.__main__.find_vulnerabilities') @mock.patch('pyt.__main__.json') - def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args): + def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): mock_find_vulnerabilities.return_value = 'stuff' example_file = 'examples/vulnerable_code/inter_command_injection.py' output_file = 'mocked_outfile' + mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( autospec=True, - filepath=example_file, project_root=None, baseline=None, json=True, From 35b800195882f503e4030c2267b1422059bfd82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 20 Jun 2018 03:18:36 +0300 Subject: [PATCH 409/541] test_valid_args_but_no_targets() --- tests/usage_test.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index 4883c31d..d923e5ac 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -65,18 +65,19 @@ def test_no_args(self): self.assertEqual(stdout.getvalue(), EXPECTED) - '''def test_valid_args_but_no_filepath(self): + def test_valid_args_but_no_targets(self): with self.assertRaises(SystemExit): with capture_sys_output() as (_, stderr): parse_args(['-j']) - EXPECTED = """usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] + EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-trim] [-i] -python -m pyt: error: The -f/--filepath argument is required\n""" + [-r] [-x EXCLUDED_PATHS] [-trim] [-i] + [targets [targets ...]] +python -m pyt: error: The targets argument is required\n""" - self.assertEqual(stderr.getvalue(), EXPECTED)''' + self.assertEqual(stderr.getvalue(), EXPECTED) # def test_using_both_mutually_exclusive_args(self): # with self.assertRaises(SystemExit): From 2e4d07a0c3110be77c6caf6bf40e7667d85355d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 20 Jun 2018 03:37:00 +0300 Subject: [PATCH 410/541] edited expected values --- tests/usage_test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index d923e5ac..d9ed7cec 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -29,7 +29,7 @@ def test_no_args(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - [targets [targets ...]] + targets [targets ...] required arguments: targets source file(s) or directory(s) to be tested @@ -74,8 +74,8 @@ def test_valid_args_but_no_targets(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - [targets [targets ...]] -python -m pyt: error: The targets argument is required\n""" + targets [targets ...] +python -m pyt: error: the following arguments are required: targets\n""" self.assertEqual(stderr.getvalue(), EXPECTED) From 0c6b08296e16a33ccc429966faedca2fdaf829dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 20 Jun 2018 15:17:59 +0300 Subject: [PATCH 411/541] changed vulnerabilities list location --- pyt/__main__.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 643eeb19..aee51be6 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -33,18 +33,20 @@ def discover_files(targets, excluded_files, recursive=False): included_files = list() excluded_list = excluded_files.split(",") - + + for target in targets: if os.path.isdir(target): - if recursive: for root, dirs, files in os.walk(target): for f in files: + if not recursive: + break fullpath = os.path.join(root, f) if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: included_files.append(fullpath) else: if target not in excluded_list: - included_files.append(targets[0]) + included_files.append(target) return included_files @@ -62,9 +64,8 @@ def main(command_line_args=sys.argv[1:]): args.excluded_paths, args.recursive ) - vulnerabilities = list() for path in files: - print(path) + vulnerabilities = list() if args.ignore_nosec: nosec_lines = set() else: From ae84a442925f976ffca6416ac9619e799e7fb86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 20 Jun 2018 15:26:12 +0300 Subject: [PATCH 412/541] Update usage_test.py --- tests/usage_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index d9ed7cec..44c60166 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -74,7 +74,7 @@ def test_valid_args_but_no_targets(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - targets [targets ...] + [targets [targets ...]] python -m pyt: error: the following arguments are required: targets\n""" self.assertEqual(stderr.getvalue(), EXPECTED) From 1944b4ade9a08d34f83fb42037f9af63327f0ec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 20 Jun 2018 15:29:30 +0300 Subject: [PATCH 413/541] Update usage_test.py --- tests/usage_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index 44c60166..d9ed7cec 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -74,7 +74,7 @@ def test_valid_args_but_no_targets(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - [targets [targets ...]] + targets [targets ...] python -m pyt: error: the following arguments are required: targets\n""" self.assertEqual(stderr.getvalue(), EXPECTED) From ba3d4383ecafce755fdb3ec785430f1ebd4c5577 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Thu, 21 Jun 2018 15:42:53 +0300 Subject: [PATCH 414/541] changed location of "recursive control" --- pyt/__main__.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index aee51be6..1e8c2640 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -33,17 +33,15 @@ def discover_files(targets, excluded_files, recursive=False): included_files = list() excluded_list = excluded_files.split(",") - - for target in targets: if os.path.isdir(target): for root, dirs, files in os.walk(target): for f in files: - if not recursive: - break fullpath = os.path.join(root, f) if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: included_files.append(fullpath) + if not recursive: + break else: if target not in excluded_list: included_files.append(target) @@ -64,6 +62,7 @@ def main(command_line_args=sys.argv[1:]): args.excluded_paths, args.recursive ) + for path in files: vulnerabilities = list() if args.ignore_nosec: @@ -121,10 +120,10 @@ def main(command_line_args=sys.argv[1:]): )) if args.baseline: - vulnerabilities = get_vulnerabilities_not_in_baseline( - vulnerabilities, - args.baseline - ) + vulnerabilities = get_vulnerabilities_not_in_baseline( + vulnerabilities, + args.baseline + ) if args.json: From 6a25e25ce0e01dd434b320d48106f0127b2adb8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 22 Jun 2018 22:54:53 +0300 Subject: [PATCH 415/541] Update usage.py --- pyt/usage.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/usage.py b/pyt/usage.py index 0892536e..30286215 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -30,7 +30,7 @@ def valid_date(s): def _add_required_group(parser): required_group = parser.add_argument_group('required arguments') required_group.add_argument( - 'targets', metavar='targets', type=str, nargs='*', + 'targets', metavar='targets', type=str, nargs='+', help='source file(s) or directory(s) to be tested' ) From f42d283bb7195165d82e1994e5965d2ee547e666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 22 Jun 2018 22:56:05 +0300 Subject: [PATCH 416/541] de-dent some lines --- pyt/__main__.py | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 1e8c2640..062fea8b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -35,13 +35,13 @@ def discover_files(targets, excluded_files, recursive=False): excluded_list = excluded_files.split(",") for target in targets: if os.path.isdir(target): - for root, dirs, files in os.walk(target): - for f in files: - fullpath = os.path.join(root, f) - if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: - included_files.append(fullpath) - if not recursive: - break + for root, dirs, files in os.walk(target): + for f in files: + fullpath = os.path.join(root, f) + if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: + included_files.append(fullpath) + if not recursive: + break else: if target not in excluded_list: included_files.append(target) @@ -62,7 +62,7 @@ def main(command_line_args=sys.argv[1:]): args.excluded_paths, args.recursive ) - + for path in files: vulnerabilities = list() if args.ignore_nosec: @@ -125,7 +125,6 @@ def main(command_line_args=sys.argv[1:]): args.baseline ) - if args.json: json.report(vulnerabilities, args.output_file) else: From c7b2f73d9817a6363e8ac4fe0862cefebd8a7ffa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 22 Jun 2018 22:57:38 +0300 Subject: [PATCH 417/541] test_no_args --- tests/usage_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index d9ed7cec..ff8459e6 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -29,7 +29,7 @@ def test_no_args(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - targets [targets ...] + [targets [targets ...]] required arguments: targets source file(s) or directory(s) to be tested From 2afc177d0eea61767f11f8daa4f3f2faf13d7e55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Fri, 22 Jun 2018 22:59:52 +0300 Subject: [PATCH 418/541] test_no_args passed --- tests/usage_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/usage_test.py b/tests/usage_test.py index ff8459e6..d9ed7cec 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -29,7 +29,7 @@ def test_no_args(self): [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - [targets [targets ...]] + targets [targets ...] required arguments: targets source file(s) or directory(s) to be tested From dfb5c0d64157ff502854abe40a4e191d01306673 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Fri, 22 Jun 2018 17:35:43 -0700 Subject: [PATCH 419/541] Add noqa: C901 back to def main --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 062fea8b..90ee0e91 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -48,7 +48,7 @@ def discover_files(targets, excluded_files, recursive=False): return included_files -def main(command_line_args=sys.argv[1:]): +def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) ui_mode = UImode.NORMAL From cf393c9f4f32714d58fbca403a4a28bccab60b5e Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Fri, 22 Jun 2018 20:39:08 -0700 Subject: [PATCH 420/541] Fix Travis after #129 merge, add mock to requirements-dev and unpin all versions, add travis commands to tox so this does not happen again --- pyt/__main__.py | 3 +-- requirements-dev.txt | 15 ++++++++------- tox.ini | 2 ++ 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 90ee0e91..726cdf05 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -62,7 +62,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 args.excluded_paths, args.recursive ) - + for path in files: vulnerabilities = list() if args.ignore_nosec: @@ -92,7 +92,6 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 ) cfg_list = [cfg] - framework_route_criteria = is_flask_route_function if args.adaptor: if args.adaptor.lower().startswith('e'): diff --git a/requirements-dev.txt b/requirements-dev.txt index 339d4dcc..54e84f37 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -1,7 +1,8 @@ -flake8==3.5.0 -pre-commit==0.16.3 -py==1.5.2 -pycodestyle==2.3.1 -pyflakes==1.5.0 -tox==2.9.1 -virtualenv==15.1.0 +flake8 +mock +pre-commit +py +pycodestyle +pyflakes +tox +virtualenv diff --git a/tox.ini b/tox.ini index f85b156c..1199b32f 100644 --- a/tox.ini +++ b/tox.ini @@ -10,3 +10,5 @@ commands = coverage report --include=tests/* --fail-under 100 coverage report --include=pyt/* --fail-under 88 pre-commit run + flake8 . --count --exclude=examples,venv,.tox --select=E901,E999,F821,F822,F823 --show-source --statistics + flake8 . --count --exclude=examples,venv,.tox,dist --exit-zero --max-complexity=10 --max-line-length=127 --statistics From 61ce4751531b01e968698aa537d58b68eb606f01 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Jun 2018 14:37:41 -0700 Subject: [PATCH 421/541] Cleaned up pyt/core/ directory, mostly added _ to private functions --- pyt/core/ast_helper.py | 24 ++++++++-------- pyt/core/module_definitions.py | 8 +++++- pyt/core/project_handler.py | 46 ++++++------------------------ tests/cfg/import_test.py | 6 ++-- tests/cfg/nested_functions_test.py | 6 ++-- tests/core/project_handler_test.py | 9 +++--- tests/test_utils.py | 31 ++++++++++++++++++++ 7 files changed, 68 insertions(+), 62 deletions(-) create mode 100644 tests/test_utils.py diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 17013128..33ef5844 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -10,7 +10,7 @@ recursive = False -def convert_to_3(path): # pragma: no cover +def _convert_to_3(path): # pragma: no cover """Convert python 2 file to python 3.""" try: print('##### Trying to convert file to Python 3. #####') @@ -34,7 +34,7 @@ def generate_ast(path): except SyntaxError: # pragma: no cover global recursive if not recursive: - convert_to_3(path) + _convert_to_3(path) recursive = True return generate_ast(path) else: @@ -44,12 +44,7 @@ def generate_ast(path): raise IOError('Input needs to be a file. Path: ' + path) -def list_to_dotted_string(list_of_components): - """Convert a list to a string seperated by a dot.""" - return '.'.join(list_of_components) - - -def get_call_names_helper(node, result): +def _get_call_names_helper(node, result): """Recursively finds all function names.""" if isinstance(node, ast.Name): if node.id not in BLACK_LISTED_CALL_NAMES: @@ -58,24 +53,29 @@ def get_call_names_helper(node, result): elif isinstance(node, ast.Call): return result elif isinstance(node, ast.Subscript): - return get_call_names_helper(node.value, result) + return _get_call_names_helper(node.value, result) elif isinstance(node, ast.Str): result.append(node.s) return result else: result.append(node.attr) - return get_call_names_helper(node.value, result) + return _get_call_names_helper(node.value, result) + + +def _list_to_dotted_string(list_of_components): + """Convert a list to a string seperated by a dot.""" + return '.'.join(list_of_components) def get_call_names_as_string(node): """Get a list of call names as a string.""" - return list_to_dotted_string(get_call_names(node)) + return _list_to_dotted_string(get_call_names(node)) def get_call_names(node): """Get a list of call names.""" result = list() - return reversed(get_call_names_helper(node, result)) + return reversed(_get_call_names_helper(node, result)) class Arguments(): diff --git a/pyt/core/module_definitions.py b/pyt/core/module_definitions.py index 6ec197de..767917c8 100644 --- a/pyt/core/module_definitions.py +++ b/pyt/core/module_definitions.py @@ -56,7 +56,13 @@ class ModuleDefinitions(): Adds to the project definitions list. """ - def __init__(self, import_names=None, module_name=None, is_init=False, filename=None): + def __init__( + self, + import_names=None, + module_name=None, + is_init=False, + filename=None + ): """Optionally set import names and module name. Module name should only be set when it is a normal import statement. diff --git a/pyt/core/project_handler.py b/pyt/core/project_handler.py index 4a16ff96..48eccfd1 100644 --- a/pyt/core/project_handler.py +++ b/pyt/core/project_handler.py @@ -5,30 +5,30 @@ import os -local_modules = list() +_local_modules = list() def get_directory_modules(directory): """Return a list containing tuples of e.g. ('__init__', 'example/import_test_project/__init__.py') """ - if local_modules and os.path.dirname(local_modules[0][1]) == directory: - return local_modules + if _local_modules and os.path.dirname(_local_modules[0][1]) == directory: + return _local_modules if not os.path.isdir(directory): # example/import_test_project/A.py -> example/import_test_project directory = os.path.dirname(directory) if directory == '': - return local_modules + return _local_modules for path in os.listdir(directory): - if is_python_file(path): + if _is_python_file(path): # A.py -> A module_name = os.path.splitext(path)[0] - local_modules.append((module_name, os.path.join(directory, path))) + _local_modules.append((module_name, os.path.join(directory, path))) - return local_modules + return _local_modules def get_modules(path): @@ -39,7 +39,7 @@ def get_modules(path): modules = list() for root, directories, filenames in os.walk(path): for filename in filenames: - if is_python_file(filename): + if _is_python_file(filename): directory = os.path.dirname( os.path.realpath( os.path.join( @@ -64,35 +64,7 @@ def get_modules(path): return modules -def get_modules_and_packages(path): - """Return a list containing tuples of - e.g. ('folder', 'example/test_project/folder', '.folder') - ('test_project.utils', 'example/test_project/utils.py') - """ - module_root = os.path.split(path)[1] - modules = list() - for root, directories, filenames in os.walk(path): - for directory in directories: - if directory != '__pycache__': - full_path = os.path.join(root, directory) - relative_path = os.path.realpath(full_path).split(module_root)[-1].replace(os.sep, '.') - # Remove the dot in front to be consistent - modules.append((relative_path[1:], full_path, relative_path)) - - for filename in filenames: - if is_python_file(filename): - full_path = os.path.join(root, filename) - directory = os.path.dirname(os.path.realpath(full_path)).split(module_root)[-1].replace(os.sep, '.') - directory = directory.replace('.', '', 1) - if directory: - modules.append(('.'.join((module_root, directory, filename.replace('.py', ''))), full_path)) - else: - modules.append(('.'.join((module_root, filename.replace('.py', ''))), full_path)) - - return modules - - -def is_python_file(path): +def _is_python_file(path): if os.path.splitext(path)[1] == '.py': return True return False diff --git a/tests/cfg/import_test.py b/tests/cfg/import_test.py index 842fafa5..baa4d6e1 100644 --- a/tests/cfg/import_test.py +++ b/tests/cfg/import_test.py @@ -2,12 +2,10 @@ import os from ..base_test_case import BaseTestCase +from ..test_utils import get_modules_and_packages from pyt.core.ast_helper import get_call_names_as_string -from pyt.core.project_handler import ( - get_directory_modules, - get_modules_and_packages -) +from pyt.core.project_handler import get_directory_modules class ImportTest(BaseTestCase): diff --git a/tests/cfg/nested_functions_test.py b/tests/cfg/nested_functions_test.py index 7a5f5772..5c9599d9 100644 --- a/tests/cfg/nested_functions_test.py +++ b/tests/cfg/nested_functions_test.py @@ -1,11 +1,9 @@ import os.path from ..base_test_case import BaseTestCase +from ..test_utils import get_modules_and_packages -from pyt.core.project_handler import ( - get_directory_modules, - get_modules_and_packages -) +from pyt.core.project_handler import get_directory_modules class NestedTest(BaseTestCase): diff --git a/tests/core/project_handler_test.py b/tests/core/project_handler_test.py index b6657cd5..4de34b21 100644 --- a/tests/core/project_handler_test.py +++ b/tests/core/project_handler_test.py @@ -1,10 +1,11 @@ import os import unittest +from ..test_utils import get_modules_and_packages + from pyt.core.project_handler import ( get_modules, - get_modules_and_packages, - is_python_file + _is_python_file ) @@ -15,8 +16,8 @@ def test_is_python_file(self): python_module = './project_handler_test.py' not_python_module = '../.travis.yml' - self.assertEqual(is_python_file(python_module), True) - self.assertEqual(is_python_file(not_python_module), False) + self.assertEqual(_is_python_file(python_module), True) + self.assertEqual(_is_python_file(not_python_module), False) def test_get_modules(self): project_folder = os.path.normpath(os.path.join('examples', 'test_project')) diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 00000000..1d882e33 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,31 @@ +import os + +from pyt.core.project_handler import _is_python_file + + +def get_modules_and_packages(path): + """Return a list containing tuples of + e.g. ('folder', 'example/test_project/folder', '.folder') + ('test_project.utils', 'example/test_project/utils.py') + """ + module_root = os.path.split(path)[1] + modules = list() + for root, directories, filenames in os.walk(path): + for directory in directories: + if directory != '__pycache__': + full_path = os.path.join(root, directory) + relative_path = os.path.realpath(full_path).split(module_root)[-1].replace(os.sep, '.') + # Remove the dot in front to be consistent + modules.append((relative_path[1:], full_path, relative_path)) + + for filename in filenames: + if _is_python_file(filename): + full_path = os.path.join(root, filename) + directory = os.path.dirname(os.path.realpath(full_path)).split(module_root)[-1].replace(os.sep, '.') + directory = directory.replace('.', '', 1) + if directory: + modules.append(('.'.join((module_root, directory, filename.replace('.py', ''))), full_path)) + else: + modules.append(('.'.join((module_root, filename.replace('.py', ''))), full_path)) + + return modules From 2df9873f2a078bac5cfc5835873b75ea27f345fc Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Jun 2018 14:40:28 -0700 Subject: [PATCH 422/541] Change test coverage from 88% to 87% (moved a function to tests/) in last commit --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 1199b32f..4d5f66e8 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ commands = coverage erase coverage run tests coverage report --include=tests/* --fail-under 100 - coverage report --include=pyt/* --fail-under 88 + coverage report --include=pyt/* --fail-under 87 pre-commit run flake8 . --count --exclude=examples,venv,.tox --select=E901,E999,F821,F822,F823 --show-source --statistics flake8 . --count --exclude=examples,venv,.tox,dist --exit-zero --max-complexity=10 --max-line-length=127 --statistics From b07035f2812817ed8340303cc8df9aeee3168489 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sun, 24 Jun 2018 15:19:42 -0700 Subject: [PATCH 423/541] Move a function around, edit docstring of Arguments --- pyt/core/ast_helper.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 33ef5844..dc4f8195 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -62,6 +62,12 @@ def _get_call_names_helper(node, result): return _get_call_names_helper(node.value, result) +def get_call_names(node): + """Get a list of call names.""" + result = list() + return reversed(_get_call_names_helper(node, result)) + + def _list_to_dotted_string(list_of_components): """Convert a list to a string seperated by a dot.""" return '.'.join(list_of_components) @@ -72,17 +78,11 @@ def get_call_names_as_string(node): return _list_to_dotted_string(get_call_names(node)) -def get_call_names(node): - """Get a list of call names.""" - result = list() - return reversed(_get_call_names_helper(node, result)) - - class Arguments(): """Represents arguments of a function.""" def __init__(self, args): - """Create an Argument container class. + """Argument container class. Args: args(list(ast.args): The arguments in a function AST node. From 4de0bc53d2fa6b77dea3900642126ff3bd05846f Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 24 Jun 2018 15:26:03 -0700 Subject: [PATCH 424/541] Update README.rst --- pyt/core/README.rst | 46 ++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/pyt/core/README.rst b/pyt/core/README.rst index 3ba5b13c..11b8090f 100644 --- a/pyt/core/README.rst +++ b/pyt/core/README.rst @@ -1 +1,45 @@ -Coming soon. +This directory contains miscellaneous code that is imported from different parts of the codebase. + + +`ast_helper.py`_ contains + + + +- `generate_ast`_ to read any file and generate an AST from it, this is called from `__main__.py`_ and `stmt_visitor.py`_ when importing a module. + +- `get_call_names`_ used in `vars_visitor.py`_ when visiting a Subscript, and `framework_helper.py`_ on function decorators in `is_flask_route_function`_ + +- `get_call_names_as_string`_ used in `expr_visitor.py`_ to create ret_function_name as RHS and yield_function_name as LHS, and in stmt_visitor.py when connecting a function to a loop. + +- `Arguments`_ used in `expr_visitor.py`_ when processing the arguments of a user defined function and `framework_adaptor.py`_ to taint function definition arguments. + + +.. _ast\_helper.py: https://github.com/python-security/pyt/blob/master/pyt/core/ast_helper.py +.. _generate\_ast: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L24-L44 + +.. _get\_call\_names\_as\_string: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L70-L72 +.. _get\_call\_names: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L75-L75 + + + + +`module_definitions.py`_ contains TODO + +`node_types.py`_ contains all the different node types created in `expr_visitor.py`_ and `stmt_visitor.py`_ + +`project_handler.py`_ contains TODO + +.. _module_definitions.py: https://github.com/python-security/pyt/blob/master/pyt/core/module_definitions.py + +.. _node_types.py: https://github.com/python-security/pyt/blob/master/pyt/core/node_types.py + +.. _project_handler.py: https://github.com/python-security/pyt/blob/master/pyt/core/project_handler.py + + +.. _\_\_main\_\_.py: https://github.com/python-security/pyt/blob/master/pyt/__main__.py +.. _stmt\_visitor.py: https://github.com/python-security/pyt/blob/master/pyt/cfg/stmt_visitor.py +.. _expr\_visitor.py: https://github.com/python-security/pyt/blob/master/pyt/cfg/expr_visitor.py +.. _framework\_adaptor.py: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks +.. _framework\_helper.py: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks +.. _is\_flask\_route_function: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks +.. _vars\_visitor.py: https://github.com/python-security/pyt/tree/master/pyt/helper_visitors From 5305417e01f342cd670519acad354161f692e5c4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 24 Jun 2018 15:30:09 -0700 Subject: [PATCH 425/541] Update README.rst --- pyt/core/README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/core/README.rst b/pyt/core/README.rst index 11b8090f..6c616ba2 100644 --- a/pyt/core/README.rst +++ b/pyt/core/README.rst @@ -17,9 +17,9 @@ This directory contains miscellaneous code that is imported from different parts .. _ast\_helper.py: https://github.com/python-security/pyt/blob/master/pyt/core/ast_helper.py .. _generate\_ast: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L24-L44 -.. _get\_call\_names\_as\_string: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L70-L72 -.. _get\_call\_names: https://github.com/python-security/pyt/blob/61ce4751531b01e968698aa537d58b68eb606f01/pyt/core/ast_helper.py#L75-L75 - +.. _get\_call\_names: https://github.com/python-security/pyt/blob/b07035f2812817ed8340303cc8df9aeee3168489/pyt/core/ast_helper.py#L65-L68 +.. _get\_call\_names\_as\_string: https://github.com/python-security/pyt/blob/b07035f2812817ed8340303cc8df9aeee3168489/pyt/core/ast_helper.py#L76-L79 +.. _Arguments: https://github.com/python-security/pyt/blob/b07035f2812817ed8340303cc8df9aeee3168489/pyt/core/ast_helper.py#L81-L111 From c884bbfc8521741331e75fec0737001733c473e5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 24 Jun 2018 15:55:07 -0700 Subject: [PATCH 426/541] Update README.rst --- pyt/core/README.rst | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pyt/core/README.rst b/pyt/core/README.rst index 6c616ba2..becfa660 100644 --- a/pyt/core/README.rst +++ b/pyt/core/README.rst @@ -23,7 +23,18 @@ This directory contains miscellaneous code that is imported from different parts -`module_definitions.py`_ contains TODO +`module_definitions.py`_ contains classes created mostly in `stmt_visitor.py`_ + +- `project_definitions`_ is a global dictionary modifed in the `append_if_local_or_in_imports`_ method of `ModuleDefinitions`_, read in `framework_adaptor.py`_ to `obtain all function nodes`_. + +- `ModuleDefinition`_ is created to keep track of parent definitions when visiting functions, classes and __init__.py files in `stmt_visitor.py`_ + +- `LocalModuleDefinition`_ is created when visiting functions and classes in `stmt_visitor.py`_ + +- `ModuleDefinitions`_ contains `append_if_local_or_in_imports`_ which is used in when adding a function or class to the module definitions in + + +.. _obtain all function nodes: https://github.com/python-security/pyt/blob/02461063688fe02226e627c00adfb2c707d89aa0/pyt/web_frameworks/framework_adaptor.py#L93 `node_types.py`_ contains all the different node types created in `expr_visitor.py`_ and `stmt_visitor.py`_ From f60a51fcc8dc797e94205e2738550a5833bda0b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 27 Jun 2018 23:32:28 +0300 Subject: [PATCH 427/541] added tests for discover_files() --- tests/main_test.py | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/main_test.py b/tests/main_test.py index aee80c68..2f7fe5ae 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -1,7 +1,7 @@ import mock from .base_test_case import BaseTestCase -from pyt.__main__ import main +from pyt.__main__ import main,discover_files class MainTest(BaseTestCase): @@ -60,3 +60,33 @@ def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args mock_find_vulnerabilities.return_value, mock_parse_args.return_value.output_file ) + + def test_targets_with_no_excluded(self): + targets = ["examples/vulnerable_code/inter_command_injection.py"] + excluded_files = "" + + included_files = discover_files(targets,excluded_files) + expected = ["examples/vulnerable_code/inter_command_injection.py"] + self.assertListEqual(included_files,expected) + + def test_targets_with_exluded(self): + targets = ["examples/vulnerable_code/inter_command_injection.py"] + excluded_files = "examples/vulnerable_code/inter_command_injection.py" + + included_files = discover_files(targets,excluded_files) + expected = [] + self.assertListEqual(included_files,expected) + + def test_targets_with_recursive(self): + targets = ["examples/vulnerable_code/"] + excluded_files = "" + + included_files = discover_files(targets,excluded_files,True) + self.assertEqual(len(included_files),30) + + def test_targets_with_recursive_and_excluded(self): + targets = ["examples/vulnerable_code/"] + excluded_files = "inter_command_injection.py" + + included_files = discover_files(targets,excluded_files,True) + self.assertEqual(len(included_files),29) From 7ff6165f5a6e09c36491de002970d45aafe84beb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Wed, 27 Jun 2018 23:43:28 +0300 Subject: [PATCH 428/541] added new usage output --- README.rst | 40 ++++++++++++++++++++++------------------ 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/README.rst b/README.rst index af180b63..0870edc0 100644 --- a/README.rst +++ b/README.rst @@ -63,44 +63,48 @@ Usage .. code-block:: - usage: python -m pyt [-h] [-f FILEPATH] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [-trim] [-i] + usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] + [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] + [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] + [-r] [-x EXCLUDED_PATHS] [-trim] [-i] + targets [targets ...] required arguments: - -f FILEPATH, --filepath FILEPATH - Path to the file that should be analysed. + targets source file(s) or directory(s) to be tested optional arguments: -a ADAPTOR, --adaptor ADAPTOR - Choose a web framework adaptor: Flask(Default), - Django, Every or Pylons + Choose a web framework adaptor: Flask(Default), + Django, Every or Pylons -pr PROJECT_ROOT, --project-root PROJECT_ROOT - Add project root, only important when the entry file - is not at the root of the project. + Add project root, only important when the entry file + is not at the root of the project. -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE - Path of a baseline report to compare against (only - JSON-formatted files are accepted) + Path of a baseline report to compare against (only + JSON-formatted files are accepted) -j, --json Prints JSON instead of report. -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE - Input blackbox mapping file. + Input blackbox mapping file. -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE - Input file with a list of sources and sinks + Input file with a list of sources and sinks -o OUTPUT_FILE, --output OUTPUT_FILE - write report to filename + write report to filename --ignore-nosec do not skip lines with # nosec comments + -r, --recursive find and process files in subdirectories + -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS + Separate files with commas print arguments: -trim, --trim-reassigned-in - Trims the reassigned list to just the vulnerability - chain. + Trims the reassigned list to just the vulnerability + chain. -i, --interactive Will ask you about each blackbox function call in - vulnerability chains. + vulnerability chains. Usage from Source ================= -Using it like a user ``python3 -m pyt -f example/vulnerable_code/XSS_call.py save -du`` +Using it like a user ``python3 -m pyt examples/vulnerable_code/XSS_call.py`` Running the tests ``python3 -m tests`` From 3dab96a8cd27a40a474de13d75e331d7bd604f01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sat, 30 Jun 2018 16:25:17 +0300 Subject: [PATCH 429/541] added new things --- CHANGELOG.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 564342ec..3d8c48bd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,10 +28,13 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :tada: New Features * Baseline support ([#106], thanks [@omergunal]) +* Whitelist lines ending in # nosec ([#121], [@omergunal]) +* Recursive option ([#129], [@omergunal]) -[#106]: https://github.com/python-security/pyt/pull/106 [@omergunal]: https://github.com/omergunal - +[#106]: https://github.com/python-security/pyt/pull/106 +[#129]: https://github.com/python-security/pyt/pull/129 +[#121]: https://github.com/python-security/pyt/pull/121 #### :sparkles: Usability * Combined all source/sink information files and made it the default ([#116]) @@ -43,11 +46,15 @@ If you love PyT, please star our project on GitHub to show your support! :star: * Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) * Fixed an infinite loop bug that was caused while handling certain loops ([#118]) * Fixed a bug where we were not including `pyt/vulnerability_definitions` files ([#122], thanks [@Ekultek]) +* Fixed flake8 errors ([#130]) #### :snake: Miscellaneous * Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) +* Re organize code ([#126]) +* Cleaned up pyt/core/ ([#132]) +[#126]: https://github.com/python-security/pyt/pull/126 [#116]: https://github.com/python-security/pyt/pull/116 [#115]: https://github.com/python-security/pyt/pull/115 [#119]: https://github.com/python-security/pyt/pull/119 @@ -58,3 +65,5 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@lfatty]: https://github.com/lfatty [#122]: https://github.com/python-security/pyt/issues/122 [@Ekultek]: https://github.com/Ekultek +[#130]: https://github.com/python-security/pyt/pull/130 +[#132]: https://github.com/python-security/pyt/pull/132 From b5fce8c984a491afb7623293f07728e64cac08ff Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 30 Jun 2018 14:16:06 -0700 Subject: [PATCH 430/541] Fix nosec lines after recursive function, make all tests pass --- pyt/__main__.py | 54 ++++++++++--------- pyt/cfg/make_cfg.py | 14 +++-- pyt/helper_visitors/vars_visitor.py | 1 + pyt/vulnerabilities/vulnerabilities.py | 23 +++++--- pyt/vulnerabilities/vulnerability_helper.py | 8 ++- .../vulnerabilities_across_files_test.py | 6 ++- tests/vulnerabilities/vulnerabilities_test.py | 18 +++++-- 7 files changed, 85 insertions(+), 39 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 726cdf05..d3f94251 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -35,10 +35,10 @@ def discover_files(targets, excluded_files, recursive=False): excluded_list = excluded_files.split(",") for target in targets: if os.path.isdir(target): - for root, dirs, files in os.walk(target): - for f in files: - fullpath = os.path.join(root, f) - if os.path.splitext(fullpath)[1] == '.py' and fullpath.split("/")[-1] not in excluded_list: + for root, _, files in os.walk(target): + for file in files: + if file.endswith('.py') and file not in excluded_list: + fullpath = os.path.join(root, file) included_files.append(fullpath) if not recursive: break @@ -48,6 +48,18 @@ def discover_files(targets, excluded_files, recursive=False): return included_files +def retrieve_nosec_lines( + path +): + file = open(path, 'r') + lines = file.readlines() + return set( + lineno for + (lineno, line) in enumerate(lines, start=1) + if '#nosec' in line or '# nosec' in line + ) + + def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) @@ -63,18 +75,11 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 args.recursive ) + nosec_lines = dict() + for path in files: - vulnerabilities = list() - if args.ignore_nosec: - nosec_lines = set() - else: - file = open(path, 'r') - lines = file.readlines() - nosec_lines = set( - lineno for - (lineno, line) in enumerate(lines, start=1) - if '#nosec' in line or '# nosec' in line - ) + if not args.ignore_nosec: + nosec_lines[path] = retrieve_nosec_lines(path) if args.project_root: directory = os.path.normpath(args.project_root) @@ -100,6 +105,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 framework_route_criteria = is_function_without_leading_ elif args.adaptor.lower().startswith('d'): framework_route_criteria = is_django_view_function + # Add all the route functions to the cfg_list FrameworkAdaptor( cfg_list, @@ -108,15 +114,15 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 framework_route_criteria ) - initialize_constraint_table(cfg_list) - analyse(cfg_list) - vulnerabilities.extend(find_vulnerabilities( - cfg_list, - ui_mode, - args.blackbox_mapping_file, - args.trigger_word_file, - nosec_lines - )) + initialize_constraint_table(cfg_list) + analyse(cfg_list) + vulnerabilities = find_vulnerabilities( + cfg_list, + ui_mode, + args.blackbox_mapping_file, + args.trigger_word_file, + nosec_lines + ) if args.baseline: vulnerabilities = get_vulnerabilities_not_in_baseline( diff --git a/pyt/cfg/make_cfg.py b/pyt/cfg/make_cfg.py index eaa78c9b..a60b734e 100644 --- a/pyt/cfg/make_cfg.py +++ b/pyt/cfg/make_cfg.py @@ -2,9 +2,15 @@ class CFG(): - def __init__(self, nodes, blackbox_assignments): + def __init__( + self, + nodes, + blackbox_assignments, + filename + ): self.nodes = nodes self.blackbox_assignments = blackbox_assignments + self.filename = filename def __repr__(self): output = '' @@ -29,10 +35,12 @@ def make_cfg( visitor = ExprVisitor( tree, project_modules, - local_modules, filename, + local_modules, + filename, module_definitions ) return CFG( visitor.nodes, - visitor.blackbox_assignments + visitor.blackbox_assignments, + filename ) diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index bda24c9b..22348528 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -126,6 +126,7 @@ def slicev(self, node): def visit_Subscript(self, node): if isinstance(node.value, ast.Attribute): + # foo.bar[1] self.result.append(list(get_call_names(node.value))[0]) self.visit(node.value) self.slicev(node.slice) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index b41ae374..ef0a094a 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -39,14 +39,20 @@ def identify_triggers( cfg(CFG): CFG to find sources, sinks and sanitisers in. sources(tuple): list of sources, a source is a (source, sanitiser) tuple. sinks(tuple): list of sources, a sink is a (sink, sanitiser) tuple. + nosec_lines(set): lines with # nosec whitelisting Returns: Triggers tuple with sink and source nodes and a sanitiser node dict. """ assignment_nodes = filter_cfg_nodes(cfg, AssignmentNode) tainted_nodes = filter_cfg_nodes(cfg, TaintedNode) - tainted_trigger_nodes = [TriggerNode('Framework function URL parameter', None, - node) for node in tainted_nodes] + tainted_trigger_nodes = [ + TriggerNode( + 'Framework function URL parameter', + sanitisers=None, + cfg_node=node + ) for node in tainted_nodes + ] sources_in_file = find_triggers(assignment_nodes, sources, nosec_lines) sources_in_file.extend(tainted_trigger_nodes) @@ -136,6 +142,7 @@ def find_triggers( Args: nodes(list[Node]): the nodes to find triggers in. trigger_word_list(list[string]): list of trigger words to look for. + nosec_lines(set): lines with # nosec whitelisting Returns: List of found TriggerNodes @@ -441,13 +448,14 @@ def find_vulnerabilities_in_cfg( ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. vulnerabilities_list(list): That we append to when we find vulnerabilities. + nosec_lines(dict): filenames mapped to their nosec lines """ triggers = identify_triggers( cfg, definitions.sources, definitions.sinks, lattice, - nosec_lines + nosec_lines[cfg.filename] ) for sink in triggers.sinks: for source in triggers.sources: @@ -468,8 +476,8 @@ def find_vulnerabilities( cfg_list, ui_mode, blackbox_mapping_file, - source_sink_file, - nosec_lines=set() + sources_and_sinks_file, + nosec_lines ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. @@ -477,13 +485,14 @@ def find_vulnerabilities( cfg_list(list[CFG]): the list of CFGs to scan. ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. blackbox_mapping_file(str) - source_sink_file(str) + sources_and_sinks_file(str) + nosec_lines(dict): filenames mapped to their nosec lines Returns: A list of vulnerabilities. """ vulnerabilities = list() - definitions = parse(source_sink_file) + definitions = parse(sources_and_sinks_file) with open(blackbox_mapping_file) as infile: blackbox_mapping = json.load(infile) diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index 1104de13..acef7bb0 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -162,7 +162,13 @@ def __str__(self): class TriggerNode(): - def __init__(self, trigger_word, sanitisers, cfg_node, secondary_nodes=[]): + def __init__( + self, + trigger_word, + sanitisers, + cfg_node, + secondary_nodes=[] + ): self.trigger_word = trigger_word self.sanitisers = sanitisers self.cfg_node = cfg_node diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index c0985723..86a6fa72 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -39,11 +39,15 @@ def run_analysis(self, path): analyse(cfg_list) + nosec_lines = { + path: [] + } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - default_trigger_word_file + default_trigger_word_file, + nosec_lines ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 4c0dd2eb..2bc1c9a2 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -127,11 +127,15 @@ def run_analysis(self, path): analyse(cfg_list) + nosec_lines = { + path: [] + } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - default_trigger_word_file + default_trigger_word_file, + nosec_lines ) def test_find_vulnerabilities_assign_other_var(self): @@ -516,11 +520,15 @@ def run_analysis(self, path): 'django_trigger_words.pyt' ) + nosec_lines = { + path: [] + } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - trigger_word_file + trigger_word_file, + nosec_lines ) def test_django_view_param(self): @@ -558,11 +566,15 @@ def run_analysis(self, path): 'all_trigger_words.pyt' ) + nosec_lines = { + path: [] + } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - trigger_word_file + trigger_word_file, + nosec_lines ) def test_self_is_not_tainted(self): From e1fd47d6af0c46c430354a913090154be02bec12 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 30 Jun 2018 15:00:52 -0700 Subject: [PATCH 431/541] So nobody sees no docs/ folder and says we don't have any docs :] --- docs/README.rst | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 docs/README.rst diff --git a/docs/README.rst b/docs/README.rst new file mode 100644 index 00000000..173a79d5 --- /dev/null +++ b/docs/README.rst @@ -0,0 +1,3 @@ +`Start here`_. + +.. _Start here: https://github.com/python-security/pyt/tree/master/pyt From 4fb9d3e895fccf0f6ddb7ba6c29326ba8bea5ab7 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 30 Jun 2018 15:05:49 -0700 Subject: [PATCH 432/541] So nobody sees no docs/ folder and says we don't have any docs :] --- docs/README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/README.rst b/docs/README.rst index 173a79d5..31e35bb7 100644 --- a/docs/README.rst +++ b/docs/README.rst @@ -1,3 +1,6 @@ `Start here`_. +There is also `some documentation here`_, but it might be less helpful. + .. _Start here: https://github.com/python-security/pyt/tree/master/pyt +.. _some documentation here: http://pyt.readthedocs.io/en/latest/?badge=latest From 3dff5cf165bd8419b62d77bdec3d2152433b2ed4 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 30 Jun 2018 20:03:55 -0700 Subject: [PATCH 433/541] Use defaultdict for nosec_lines where applicable --- pyt/__main__.py | 3 ++- pyt/vulnerabilities/vulnerabilities.py | 3 ++- .../vulnerabilities_across_files_test.py | 6 +----- tests/vulnerabilities/vulnerabilities_test.py | 18 +++--------------- 4 files changed, 8 insertions(+), 22 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index d3f94251..a979eb6e 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -2,6 +2,7 @@ import os import sys +from collections import defaultdict from .analysis.constraint_table import initialize_constraint_table from .analysis.fixed_point import analyse @@ -75,7 +76,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 args.recursive ) - nosec_lines = dict() + nosec_lines = defaultdict(set) for path in files: if not args.ignore_nosec: diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index ef0a094a..772a5a38 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -2,6 +2,7 @@ import ast import json +from collections import defaultdict from ..analysis.definition_chains import build_def_use_chain from ..analysis.lattice import Lattice @@ -477,7 +478,7 @@ def find_vulnerabilities( ui_mode, blackbox_mapping_file, sources_and_sinks_file, - nosec_lines + nosec_lines=defaultdict(set) ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index 86a6fa72..c0985723 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -39,15 +39,11 @@ def run_analysis(self, path): analyse(cfg_list) - nosec_lines = { - path: [] - } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - default_trigger_word_file, - nosec_lines + default_trigger_word_file ) def test_find_vulnerabilities_absolute_from_file_command_injection(self): diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 2bc1c9a2..4c0dd2eb 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -127,15 +127,11 @@ def run_analysis(self, path): analyse(cfg_list) - nosec_lines = { - path: [] - } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - default_trigger_word_file, - nosec_lines + default_trigger_word_file ) def test_find_vulnerabilities_assign_other_var(self): @@ -520,15 +516,11 @@ def run_analysis(self, path): 'django_trigger_words.pyt' ) - nosec_lines = { - path: [] - } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - trigger_word_file, - nosec_lines + trigger_word_file ) def test_django_view_param(self): @@ -566,15 +558,11 @@ def run_analysis(self, path): 'all_trigger_words.pyt' ) - nosec_lines = { - path: [] - } return find_vulnerabilities( cfg_list, UImode.NORMAL, default_blackbox_mapping_file, - trigger_word_file, - nosec_lines + trigger_word_file ) def test_self_is_not_tainted(self): From 920f7e642085a92081932570c091c7c192db5fe1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 1 Jul 2018 18:22:02 +0300 Subject: [PATCH 434/541] new class for discover_files tests --- tests/main_test.py | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/tests/main_test.py b/tests/main_test.py index 2f7fe5ae..b55713b5 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -1,7 +1,7 @@ import mock from .base_test_case import BaseTestCase -from pyt.__main__ import main,discover_files +from pyt.__main__ import discover_files, main class MainTest(BaseTestCase): @@ -61,32 +61,34 @@ def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args mock_parse_args.return_value.output_file ) + +class MainTest(BaseTestCase): def test_targets_with_no_excluded(self): targets = ["examples/vulnerable_code/inter_command_injection.py"] excluded_files = "" - included_files = discover_files(targets,excluded_files) + included_files = discover_files(targets, excluded_files) expected = ["examples/vulnerable_code/inter_command_injection.py"] - self.assertListEqual(included_files,expected) + self.assertListEqual(included_files, expected) def test_targets_with_exluded(self): targets = ["examples/vulnerable_code/inter_command_injection.py"] excluded_files = "examples/vulnerable_code/inter_command_injection.py" - included_files = discover_files(targets,excluded_files) + included_files = discover_files(targets, excluded_files) expected = [] - self.assertListEqual(included_files,expected) + self.assertListEqual(included_files, expected) def test_targets_with_recursive(self): targets = ["examples/vulnerable_code/"] excluded_files = "" - included_files = discover_files(targets,excluded_files,True) - self.assertEqual(len(included_files),30) + included_files = discover_files(targets, excluded_files, True) + self.assertEqual(len(included_files), 30) def test_targets_with_recursive_and_excluded(self): targets = ["examples/vulnerable_code/"] excluded_files = "inter_command_injection.py" - included_files = discover_files(targets,excluded_files,True) - self.assertEqual(len(included_files),29) + included_files = discover_files(targets, excluded_files, True) + self.assertEqual(len(included_files), 29) From 3c4d7734a44ec37b15a5f8e8e872f0af6c1af959 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96mer=20G=C3=BCnal?= Date: Sun, 1 Jul 2018 18:27:49 +0300 Subject: [PATCH 435/541] Update CHANGELOG.md --- CHANGELOG.md | 29 +++-------------------------- 1 file changed, 3 insertions(+), 26 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d8c48bd..ba37a814 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,48 +22,25 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@xxxx]: https://github.com/xxxx --> -# 0.34 -##### April 24, 2018 +# 0.35 +##### July 1, 2018 #### :tada: New Features -* Baseline support ([#106], thanks [@omergunal]) -* Whitelist lines ending in # nosec ([#121], [@omergunal]) * Recursive option ([#129], [@omergunal]) [@omergunal]: https://github.com/omergunal -[#106]: https://github.com/python-security/pyt/pull/106 [#129]: https://github.com/python-security/pyt/pull/129 -[#121]: https://github.com/python-security/pyt/pull/121 -#### :sparkles: Usability -* Combined all source/sink information files and made it the default ([#116]) - -#### :telescope: Precision -* Fixed a bug where `Post.query.paginate` propagated taint ([#115]) -* Fixed a false-positive where `self` was marked as taint ([#119], thanks [@lFatty]) #### :bug: Bugfixes -* Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) -* Fixed an infinite loop bug that was caused while handling certain loops ([#118]) -* Fixed a bug where we were not including `pyt/vulnerability_definitions` files ([#122], thanks [@Ekultek]) * Fixed flake8 errors ([#130]) #### :snake: Miscellaneous -* Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) * Re organize code ([#126]) * Cleaned up pyt/core/ ([#132]) -[#126]: https://github.com/python-security/pyt/pull/126 -[#116]: https://github.com/python-security/pyt/pull/116 +[#126]: https://github.com/python-security/pyt/pull/129 [#115]: https://github.com/python-security/pyt/pull/115 -[#119]: https://github.com/python-security/pyt/pull/119 -[#117]: https://github.com/python-security/pyt/pull/117 -[#118]: https://github.com/python-security/pyt/pull/118 -[#111]: https://github.com/python-security/pyt/pull/111 -[#110]: https://github.com/python-security/pyt/pull/110 -[@lfatty]: https://github.com/lfatty -[#122]: https://github.com/python-security/pyt/issues/122 -[@Ekultek]: https://github.com/Ekultek [#130]: https://github.com/python-security/pyt/pull/130 [#132]: https://github.com/python-security/pyt/pull/132 From 7c8f02b7e759e81a532c4e978e13db80fa68ed0e Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 1 Jul 2018 12:22:42 -0700 Subject: [PATCH 436/541] Added Unreleased since 0.34 changes --- CHANGELOG.md | 61 +++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba37a814..011e12d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,25 +22,66 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@xxxx]: https://github.com/xxxx --> -# 0.35 -##### July 1, 2018 +# Unreleased #### :tada: New Features -* Recursive option ([#129], [@omergunal]) +* Whitelist lines of sources and sinks ending in `# nosec` ([#121], thanks [@omergunal]) +* Ability to analyze directories, -r Recursive option ([#129], thanks [@omergunal]) -[@omergunal]: https://github.com/omergunal +[#121]: https://github.com/python-security/pyt/pull/121 [#129]: https://github.com/python-security/pyt/pull/129 -#### :bug: Bugfixes -* Fixed flake8 errors ([#130]) +#### :mortar_board: Walkthrough / Help + +* Added README.rst files to almost every directory. (Partially [#126]) #### :snake: Miscellaneous -* Re organize code ([#126]) -* Cleaned up pyt/core/ ([#132]) +* Fixed all flake8 errors ([#114] & [#130], thanks [@cclauss]) +* Re-organized the entire codebase into different directories ([#126]) +* Cleaned up the new pyt/core/ folder ([#132]) -[#126]: https://github.com/python-security/pyt/pull/129 -[#115]: https://github.com/python-security/pyt/pull/115 +[#126]: https://github.com/python-security/pyt/pull/126 +[#114]: https://github.com/python-security/pyt/pull/114 [#130]: https://github.com/python-security/pyt/pull/130 +[@cclauss]: https://github.com/cclauss [#132]: https://github.com/python-security/pyt/pull/132 + + +# 0.34 +##### April 24, 2018 + +#### :tada: New Features + +* Baseline support ([#106], thanks [@omergunal]) + +[#106]: https://github.com/python-security/pyt/pull/106 +[@omergunal]: https://github.com/omergunal + +#### :sparkles: Usability +* Combined all source/sink information files and made it the default ([#116]) + +#### :telescope: Precision +* Fixed a bug where `Post.query.paginate` propagated taint ([#115]) +* Fixed a false-positive where `self` was marked as taint ([#119], thanks [@lFatty]) + +#### :bug: Bugfixes +* Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) +* Fixed an infinite loop bug that was caused while handling certain loops ([#118]) +* Fixed a bug where we were not including `pyt/vulnerability_definitions` files ([#122], thanks [@Ekultek]) + +#### :snake: Miscellaneous + +* Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) + +[#116]: https://github.com/python-security/pyt/pull/116 +[#115]: https://github.com/python-security/pyt/pull/115 +[#119]: https://github.com/python-security/pyt/pull/119 +[#117]: https://github.com/python-security/pyt/pull/117 +[#118]: https://github.com/python-security/pyt/pull/118 +[#111]: https://github.com/python-security/pyt/pull/111 +[#110]: https://github.com/python-security/pyt/pull/110 +[@lfatty]: https://github.com/lfatty +[#122]: https://github.com/python-security/pyt/issues/122 +[@Ekultek]: https://github.com/Ekultek From 73db6281a0c360f1c2a027f0e9c1e9fa1d77dce0 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 1 Jul 2018 12:23:38 -0700 Subject: [PATCH 437/541] Fix DiscoverFilesTest class name --- tests/main_test.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/main_test.py b/tests/main_test.py index b55713b5..4839da51 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -62,7 +62,7 @@ def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args ) -class MainTest(BaseTestCase): +class DiscoverFilesTest(BaseTestCase): def test_targets_with_no_excluded(self): targets = ["examples/vulnerable_code/inter_command_injection.py"] excluded_files = "" From d8a90530fc61938d26b9ebbd091a2096571e01eb Mon Sep 17 00:00:00 2001 From: Tin Lam Date: Fri, 6 Jul 2018 03:33:50 -0500 Subject: [PATCH 438/541] Add unit test cases This patch set adds unit tests and increases coverage for `vars_visitor.py`. This also patch set also fix a slight typo in `vars_visitor.py`. Signed-off-by: Tin Lam --- pyt/helper_visitors/vars_visitor.py | 2 +- tests/helper_visitors/vars_visitor_test.py | 76 ++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index 22348528..44366d84 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -25,7 +25,7 @@ def visit_UnaryOp(self, node): def visit_Lambda(self, node): self.visit(node.body) - def visit_IfExpr(self, node): + def visit_IfExp(self, node): self.visit(node.test) self.visit(node.body) self.visit(node.orelse) diff --git a/tests/helper_visitors/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py index 849206b8..a354c892 100644 --- a/tests/helper_visitors/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -59,3 +59,79 @@ def test_keyword_numarg(self): def test_subscript(self): vars = self.perform_vars_on_expression('l[a] = x + y') self.assertEqual(vars.result, ['l', 'a', 'x', 'y']) + + def test_visit_boolop(self): + # AND operator + var1 = self.perform_vars_on_expression('b = x and y') + self.assertEqual(var1.result, ['b', 'x', 'y']) + + # OR operator + var2 = self.perform_vars_on_expression('b = x or y') + self.assertEqual(var2.result, ['b', 'x', 'y']) + + def test_visit_unaryop(self): + vars = self.perform_vars_on_expression('a = not b') + self.assertEqual(vars.result, ['a', 'b']) + + def test_visit_lambda(self): + vars = self.perform_vars_on_expression('f = lambda x: x + 2') + self.assertEqual(vars.result, ['f', 'x']) + + def test_visit_set(self): + vars = self.perform_vars_on_expression('{a, b, c}') + self.assertEqual(vars.result, ['a', 'b', 'c']) + + def test_visit_tuple(self): + vars = self.perform_vars_on_expression('(a, b, c)') + self.assertEqual(vars.result, ['a', 'b', 'c']) + + def test_visit_list(self): + vars = self.perform_vars_on_expression('[a, b, c]') + self.assertEqual(vars.result, ['a', 'b', 'c']) + + def test_visit_yield(self): + var1 = self.perform_vars_on_expression('yield exp') + self.assertEqual(var1.result, ['exp']) + + var2 = self.perform_vars_on_expression('yield from exp') + self.assertEqual(var2.result, ['exp']) + + def test_visit_listcomp(self): + vars = self.perform_vars_on_expression( + '[item for item in coll if cond]') + self.assertEqual(vars.result, ['item', 'item', 'coll', 'cond']) + + def test_visit_setcomp(self): + vars = self.perform_vars_on_expression('{a for b in d}') + self.assertEqual(vars.result, ['a', 'b', 'd']) + + def test_visit_dictcomp(self): + vars = self.perform_vars_on_expression('{k1: v1 for (k2, v2) in d}') + self.assertEqual(vars.result, ['k1', 'v1', 'k2', 'v2', 'd']) + + def test_visit_compare(self): + vars = self.perform_vars_on_expression('a == b') + self.assertEqual(vars.result, ['a', 'b']) + + def test_visit_starred(self): + vars = self.perform_vars_on_expression('*m = t') + self.assertEqual(vars.result, ['m', 't']) + + def test_visit_ifexp(self): + vars = self.perform_vars_on_expression('res if test else orelse') + self.assertEqual(vars.result, ['test', 'res', 'orelse']) + + def test_visit_subscript(self): + # simple slice + vars = self.perform_vars_on_expression('foo.bar[lower:upper:step]') + self.assertEqual(vars.result, ['foo', 'foo', 'lower', 'upper', 'step']) + + # extended slice + vars = self.perform_vars_on_expression('foo[item1:item2, item3]') + self.assertEqual(vars.result, ['foo', 'item1', 'item2', 'item3']) + + def test_visit_await(self): + vars = self.perform_vars_on_expression(""" +async def bar(): + await foo()""") + self.assertEqual(vars.result, []) From 10eea2291d7c2644422f63834fa641725184bdf6 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 7 Jul 2018 11:48:14 -0700 Subject: [PATCH 439/541] Raise minimum pyt/ coverage to 91%, indent and lstrip multiline visit_await test string --- tests/helper_visitors/vars_visitor_test.py | 5 +++-- tox.ini | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/helper_visitors/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py index a354c892..34597afd 100644 --- a/tests/helper_visitors/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -132,6 +132,7 @@ def test_visit_subscript(self): def test_visit_await(self): vars = self.perform_vars_on_expression(""" -async def bar(): - await foo()""") + async def bar(): + await foo() + """.lstrip()) self.assertEqual(vars.result, []) diff --git a/tox.ini b/tox.ini index 4d5f66e8..aa701c72 100644 --- a/tox.ini +++ b/tox.ini @@ -8,7 +8,7 @@ commands = coverage erase coverage run tests coverage report --include=tests/* --fail-under 100 - coverage report --include=pyt/* --fail-under 87 + coverage report --include=pyt/* --fail-under 91 pre-commit run flake8 . --count --exclude=examples,venv,.tox --select=E901,E999,F821,F822,F823 --show-source --statistics flake8 . --count --exclude=examples,venv,.tox,dist --exit-zero --max-complexity=10 --max-line-length=127 --statistics From 6b3f155504cb7e087871c0eb622deef3c3e61c08 Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 14:19:26 +0100 Subject: [PATCH 440/541] Vars visitor handles python 3.5 dict syntax of the type {'a': 1, **x}. The **x will have key None. Before it would crash. --- pyt/helper_visitors/vars_visitor.py | 3 ++- tests/helper_visitors/vars_visitor_test.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index 44366d84..272744d8 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -32,7 +32,8 @@ def visit_IfExp(self, node): def visit_Dict(self, node): for k in node.keys: - self.visit(k) + if k is not None: + self.visit(k) for v in node.values: self.visit(v) diff --git a/tests/helper_visitors/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py index 34597afd..f248b6c4 100644 --- a/tests/helper_visitors/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -136,3 +136,7 @@ async def bar(): await foo() """.lstrip()) self.assertEqual(vars.result, []) + + def test_visit_dict(self): + vars = self.perform_vars_on_expression('a = {k1: v1, k2: v2, **d1, **d2}') + self.assertEqual(vars.result, ['a', 'k1', 'k2', 'v1', 'v2', 'd1', 'd2']) From c292f1724279a54b52ae42e8f80dd70200f79c0c Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 14:37:57 +0100 Subject: [PATCH 441/541] Support AnnAssign in StmtVisitor Assignments with type annotations were added in python 3.6. --- .../assignment_with_annotation.py | 2 ++ pyt/cfg/stmt_visitor.py | 8 ++++++++ tests/cfg/cfg_test.py | 19 +++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 examples/example_inputs/assignment_with_annotation.py diff --git a/examples/example_inputs/assignment_with_annotation.py b/examples/example_inputs/assignment_with_annotation.py new file mode 100644 index 00000000..811876f8 --- /dev/null +++ b/examples/example_inputs/assignment_with_annotation.py @@ -0,0 +1,2 @@ +x: int +y: int=5 diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index c10548c0..68cb5587 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -422,6 +422,14 @@ def visit_Assign(self, node): path=self.filenames[-1] )) + def visit_AnnAssign(self, node): + if node.value is None: + return IgnoredNode() + else: + assign = ast.Assign(targets=[node.target], value=node.value) + ast.copy_location(assign, node) + return self.visit(assign) + def assignment_call_node(self, left_hand_label, ast_node): """Handle assignments that contain a function call on its right side.""" self.undecided = True # Used for handling functions in assignments diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index a42ac4e0..ece76213 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -720,6 +720,25 @@ def test_assignment_and_builtin_line_numbers(self): self.assertLineNumber(assign, 1) self.assertLineNumber(builtin, 2) + def test_assignment_with_annotation(self): + self.cfg_create_from_file('examples/example_inputs/assignment_with_annotation.py') + + self.assert_length(self.cfg.nodes, expected_length=3) + + entry = 0 + assign = 1 + exit_node = 2 + + self.assertInCfg([(assign, entry), (exit_node, assign)]) + self.assertEqual(self.cfg.nodes[assign].label, 'y = 5') + + def test_assignment_with_annotation_line_numbers(self): + self.cfg_create_from_file('examples/example_inputs/assignment_with_annotation.py') + + assign = self.cfg.nodes[1] + + self.assertLineNumber(assign, 2) + def test_multiple_assignment(self): self.cfg_create_from_file('examples/example_inputs/assignment_multiple_assign.py') From 5fec81b79cb7b8ba96abe7fb4df02d8d6b5a0bef Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 15:04:54 +0100 Subject: [PATCH 442/541] Fix typo in codeclimate yaml config --- .codeclimate.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index 4113b0e7..069b0ba4 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -23,7 +23,7 @@ exclude_paths: - "pyt/intraprocedural_cfg.py" - "pyt/repo_runner.py" - "pyt/save.py" -- "example/**" +- "examples/**" - "profiling/**" - "tests/**" - "LICENSE" From 67004afa7161349d38092a1564b4e07dabbe98fa Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 13:57:30 +0100 Subject: [PATCH 443/541] Add f-strings to label visitor Node types FormattedValue and JoinedStr were added in python 3.6. --- pyt/helper_visitors/label_visitor.py | 32 +++++++++++++++++++++ tests/helper_visitors/label_visitor_test.py | 8 ++++++ 2 files changed, 40 insertions(+) diff --git a/pyt/helper_visitors/label_visitor.py b/pyt/helper_visitors/label_visitor.py index ab2301b9..f594bff8 100644 --- a/pyt/helper_visitors/label_visitor.py +++ b/pyt/helper_visitors/label_visitor.py @@ -288,3 +288,35 @@ def visit_Name(self, node): def visit_Str(self, node): self.result += "'" + node.s + "'" + + def visit_joined_str(self, node, surround=True): + for val in node.values: + if isinstance(val, ast.Str): + self.result += val.s + else: + self.visit(val) + + def visit_JoinedStr(self, node): + """ + JoinedStr(expr* values) + """ + self.result += "f\'" + self.visit_joined_str(node) + self.result += "'" + + def visit_FormattedValue(self, node): + """ + FormattedValue(expr value, int? conversion, expr? format_spec) + """ + self.result += '{' + self.visit(node.value) + self.result += { + -1: '', # no formatting + 97: '!a', # ascii formatting + 114: '!r', # repr formatting + 115: '!s', # string formatting + }[node.conversion] + if node.format_spec: + self.result += ':' + self.visit_joined_str(node.format_spec) + self.result += '}' diff --git a/tests/helper_visitors/label_visitor_test.py b/tests/helper_visitors/label_visitor_test.py index 0f2d2f7d..e39f5151 100644 --- a/tests/helper_visitors/label_visitor_test.py +++ b/tests/helper_visitors/label_visitor_test.py @@ -71,3 +71,11 @@ def test_list_one_element(self): def test_list_two_elements(self): label = self.perform_labeling_on_expression('[1, 2]') self.assertEqual(label.result, '[1, 2]') + + def test_joined_str(self): + label = self.perform_labeling_on_expression('f"a{f(b)}{c}d"') + self.assertEqual(label.result, 'f\'a{f(b)}{c}d\'') + + def test_joined_str_with_format_spec(self): + label = self.perform_labeling_on_expression('f"a{b!s:.{length}}"') + self.assertEqual(label.result, 'f\'a{b!s:.{length}}\'') From 83e496f78a3d9ec295539ffcefc5614cab4bb919 Mon Sep 17 00:00:00 2001 From: Ben Caller Date: Thu, 19 Jul 2018 15:39:42 +0100 Subject: [PATCH 444/541] Make get_call_names more resilient Code where we call a method of something which isn't a variable name e.g. ``` yesterday = (date.today() - timedelta(days=1)).strftime("%Y-%m-%d") ``` was causing pyt to crash. Previously the else branch would only handle ast.Attribute, and crash on everything else. ``` Traceback (most recent call last): File "/usr/lib/python3.6/runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "/usr/lib/python3.6/runpy.py", line 85, in _run_code exec(code, run_globals) File "/pyt/pyt/__main__.py", line 141, in main() File "/pyt/pyt/__main__.py", line 97, in main path File "/pyt/pyt/cfg/make_cfg.py", line 40, in make_cfg module_definitions File "/pyt/pyt/cfg/expr_visitor.py", line 60, in __init__ self.init_cfg(node) File "/pyt/pyt/cfg/expr_visitor.py", line 67, in init_cfg module_statements = self.visit(node) File "/usr/lib/python3.6/ast.py", line 253, in visit return visitor(node) File "/pyt/pyt/cfg/stmt_visitor.py", line 58, in visit_Module return self.stmt_star_handler(node.body) File "/pyt/pyt/cfg/stmt_visitor.py", line 79, in stmt_star_handler node = self.visit(stmt) File "/usr/lib/python3.6/ast.py", line 253, in visit return visitor(node) File "/pyt/pyt/cfg/stmt_visitor.py", line 413, in visit_Assign return self.assignment_call_node(label.result, node) File "/pyt/pyt/cfg/stmt_visitor.py", line 437, in assignment_call_node call = self.visit(ast_node.value) File "/usr/lib/python3.6/ast.py", line 253, in visit return visitor(node) File "/pyt/pyt/cfg/expr_visitor.py", line 540, in visit_Call _id = get_call_names_as_string(node.func) File "/pyt/pyt/core/ast_helper.py", line 78, in get_call_names_as_string return _list_to_dotted_string(get_call_names(node)) File "/pyt/pyt/core/ast_helper.py", line 68, in get_call_names return reversed(_get_call_names_helper(node, result)) File "/pyt/pyt/core/ast_helper.py", line 62, in _get_call_names_helper return _get_call_names_helper(node.value, result) File "/pyt/pyt/core/ast_helper.py", line 61, in _get_call_names_helper result.append(node.attr) AttributeError: 'BinOp' object has no attribute 'attr' ``` --- pyt/core/ast_helper.py | 21 ++++++++------------- tests/cfg/import_test.py | 16 ++++++++++++++++ 2 files changed, 24 insertions(+), 13 deletions(-) diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index dc4f8195..2b8776a5 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -44,28 +44,23 @@ def generate_ast(path): raise IOError('Input needs to be a file. Path: ' + path) -def _get_call_names_helper(node, result): +def _get_call_names_helper(node): """Recursively finds all function names.""" if isinstance(node, ast.Name): if node.id not in BLACK_LISTED_CALL_NAMES: - result.append(node.id) - return result - elif isinstance(node, ast.Call): - return result + yield node.id elif isinstance(node, ast.Subscript): - return _get_call_names_helper(node.value, result) + yield from _get_call_names_helper(node.value) elif isinstance(node, ast.Str): - result.append(node.s) - return result - else: - result.append(node.attr) - return _get_call_names_helper(node.value, result) + yield node.s + elif isinstance(node, ast.Attribute): + yield node.attr + yield from _get_call_names_helper(node.value) def get_call_names(node): """Get a list of call names.""" - result = list() - return reversed(_get_call_names_helper(node, result)) + return reversed(list(_get_call_names_helper(node))) def _list_to_dotted_string(list_of_components): diff --git a/tests/cfg/import_test.py b/tests/cfg/import_test.py index baa4d6e1..b4f00e73 100644 --- a/tests/cfg/import_test.py +++ b/tests/cfg/import_test.py @@ -733,3 +733,19 @@ def test_get_call_names_multi(self): result = get_call_names_as_string(call.func) self.assertEqual(result, 'abc.defg.hi') + + def test_get_call_names_with_binop(self): + m = ast.parse('(date.today() - timedelta(days=1)).strftime("%Y-%m-%d")') + call = m.body[0].value + + result = get_call_names_as_string(call.func) + + self.assertEqual(result, 'strftime') + + def test_get_call_names_with_comprehension(self): + m = ast.parse('{a for a in b()}.union(c)') + call = m.body[0].value + + result = get_call_names_as_string(call.func) + + self.assertEqual(result, 'union') From 93995b6851424b890db3fe7595673bc6112bf15f Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 18 Jul 2018 15:32:08 +0100 Subject: [PATCH 445/541] Improve string comparison failure message in unit tests self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) just said False should be True without giving more context. --- .../vulnerabilities_across_files_test.py | 8 +++--- .../vulnerabilities_base_test_case.py | 7 +++++ tests/vulnerabilities/vulnerabilities_test.py | 28 +++++++++---------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index c0985723..70529f0d 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -83,7 +83,7 @@ def test_blackbox_library_call(self): Label: ~call_2 = ret_scrypt.encrypt('echo ' + param + ' >> ' + 'menu.txt', 'password') """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_builtin_with_user_defined_inner(self): vulnerabilities = self.run_analysis('examples/nested_functions_code/builtin_with_user_defined_inner.py') @@ -117,7 +117,7 @@ def test_builtin_with_user_defined_inner(self): ~call_3 = ret_subprocess.call(foo, shell=True) This vulnerability is unknown due to: Label: ~call_1 = ret_scrypt.encrypt(~call_2) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_sink_with_result_of_blackbox_nested(self): vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_result_of_blackbox_nested.py') @@ -203,7 +203,7 @@ def test_sink_with_result_of_user_defined_nested(self): > reaches line 18, sink "subprocess.call(": ~call_3 = ret_subprocess.call(result, shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_sink_with_blackbox_inner(self): vulnerabilities = self.run_analysis('examples/nested_functions_code/sink_with_blackbox_inner.py') @@ -284,7 +284,7 @@ def test_sink_with_user_defined_inner(self): > reaches line 18, sink "subprocess.call(": ~call_1 = ret_subprocess.call(~call_2, shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_find_vulnerabilities_import_file_command_injection(self): vulnerabilities = self.run_analysis('examples/vulnerable_code_across_files/import_file_command_injection.py') diff --git a/tests/vulnerabilities/vulnerabilities_base_test_case.py b/tests/vulnerabilities/vulnerabilities_base_test_case.py index dcf088a4..c21f81ed 100644 --- a/tests/vulnerabilities/vulnerabilities_base_test_case.py +++ b/tests/vulnerabilities/vulnerabilities_base_test_case.py @@ -8,3 +8,10 @@ def string_compare_alpha(self, output, expected_string): [char for char in output if char.isalpha()] == [char for char in expected_string if char.isalpha()] ) + + def assertAlphaEqual(self, output, expected_string): + self.assertEqual( + [char for char in output if char.isalpha()], + [char for char in expected_string if char.isalpha()] + ) + return True diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 4c0dd2eb..c99e137f 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -168,7 +168,7 @@ def test_XSS_result(self): ~call_4 = ret_html.replace('{{ param }}', param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_command_injection_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/command_injection.py') @@ -186,7 +186,7 @@ def test_command_injection_result(self): ~call_1 = ret_subprocess.call(command, shell=True) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_path_traversal_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal.py') @@ -224,7 +224,7 @@ def test_path_traversal_result(self): ~call_4 = ret_send_file(foo) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_ensure_saved_scope(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/ensure_saved_scope.py') @@ -262,7 +262,7 @@ def test_ensure_saved_scope(self): ~call_4 = ret_send_file(image_name) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_path_traversal_sanitised_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised.py') @@ -289,7 +289,7 @@ def test_path_traversal_sanitised_result(self): This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_path_traversal_sanitised_2_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised_2.py') @@ -312,7 +312,7 @@ def test_path_traversal_sanitised_2_result(self): This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_sql_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') @@ -332,7 +332,7 @@ def test_sql_result(self): ~call_2 = ret_db.engine.execute(param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_form_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_form.py') @@ -354,7 +354,7 @@ def test_XSS_form_result(self): ~call_2 = ret_html1.replace('{{ data }}', data) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_url_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_url.py') @@ -378,7 +378,7 @@ def test_XSS_url_result(self): ~call_3 = ret_html.replace('{{ param }}', param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_no_vuln_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_no_vuln.py') @@ -408,7 +408,7 @@ def test_XSS_reassign_result(self): ~call_4 = ret_html.replace('{{ param }}', param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_sanitised_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_sanitised.py') @@ -437,7 +437,7 @@ def test_XSS_sanitised_result(self): This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_variable_assign_no_vuln_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_assign_no_vuln.py') @@ -467,7 +467,7 @@ def test_XSS_variable_assign_result(self): ~call_4 = ret_html.replace('{{ param }}', other_var) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) def test_XSS_variable_multiple_assign_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/XSS_variable_multiple_assign.py') @@ -497,7 +497,7 @@ def test_XSS_variable_multiple_assign_result(self): ~call_4 = ret_html.replace('{{ param }}', another_one) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) class EngineDjangoTest(VulnerabilitiesBaseTestCase): @@ -539,7 +539,7 @@ def test_django_view_param(self): > reaches line 5, sink "render(": ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) """ - self.assertTrue(self.string_compare_alpha(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION)) + self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) class EngineEveryTest(VulnerabilitiesBaseTestCase): From 9186f9fde131c29f07c4ec6bc65bcb49cbaa127f Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 18 Jul 2018 15:32:15 +0100 Subject: [PATCH 446/541] JSON trigger file Allows specifying extra sink options. --- .../trigger_definitions_parser.py | 63 +++++++-------- pyt/vulnerabilities/vulnerabilities.py | 19 ++--- pyt/vulnerabilities/vulnerability_helper.py | 14 +++- .../all_trigger_words.pyt | 80 +++++++++++-------- .../django_trigger_words.pyt | 76 ++++++++++-------- .../flask_trigger_words.pyt | 58 ++++++++------ .../test_triggers.pyt | 27 +++++-- tests/vulnerabilities/vulnerabilities_test.py | 42 ++++------ 8 files changed, 209 insertions(+), 170 deletions(-) diff --git a/pyt/vulnerabilities/trigger_definitions_parser.py b/pyt/vulnerabilities/trigger_definitions_parser.py index 62cdbce0..b188e280 100644 --- a/pyt/vulnerabilities/trigger_definitions_parser.py +++ b/pyt/vulnerabilities/trigger_definitions_parser.py @@ -1,10 +1,7 @@ +import json from collections import namedtuple -SANITISER_SEPARATOR = '->' -SOURCES_KEYWORD = 'sources:' -SINKS_KEYWORD = 'sinks:' - Definitions = namedtuple( 'Definitions', ( @@ -13,30 +10,30 @@ ) ) +Source = namedtuple('Source', ('trigger_word')) -def parse_section(iterator): - """Parse a section of a file. Stops at empty line. - Args: - iterator(File): file descriptor pointing at a definition file. +class Sink: + def __init__( + self, trigger, *, + sanitisers=None + ): + self._trigger = trigger + self.sanitisers = sanitisers or [] - Returns: - Iterator of all definitions in the section. - """ - try: - line = next(iterator).rstrip() - while line: - if line.rstrip(): - if SANITISER_SEPARATOR in line: - line = line.split(SANITISER_SEPARATOR) - sink = line[0].rstrip() - sanitisers = list(map(str.strip, line[1].split(','))) - yield (sink, sanitisers) - else: - yield (line, list()) - line = next(iterator).rstrip() - except StopIteration: - return + @property + def call(self): + if self._trigger[-1] == '(': + return self._trigger[:-1] + return None + + @property + def trigger_word(self): + return self._trigger + + @classmethod + def from_json(cls, key, data): + return cls(trigger=key, **data) def parse(trigger_word_file): @@ -45,13 +42,11 @@ def parse(trigger_word_file): Returns: A definitions tuple with sources and sinks. """ - sources = list() - sinks = list() - with open(trigger_word_file, 'r') as fd: - for line in fd: - line = line.rstrip() - if line == SOURCES_KEYWORD: - sources = list(parse_section(fd)) - elif line == SINKS_KEYWORD: - sinks = list(parse_section(fd)) + with open(trigger_word_file) as fd: + triggers_dict = json.load(fd) + sources = [Source(s) for s in triggers_dict['sources']] + sinks = [ + Sink.from_json(trigger, data) + for trigger, data in triggers_dict['sinks'].items() + ] return Definitions(sources, sinks) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 772a5a38..64b11892 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -16,7 +16,7 @@ RHSVisitor, VarsVisitor ) -from .trigger_definitions_parser import parse +from .trigger_definitions_parser import parse, Source from .vulnerability_helper import ( Sanitiser, TriggerNode, @@ -49,8 +49,7 @@ def identify_triggers( tainted_nodes = filter_cfg_nodes(cfg, TaintedNode) tainted_trigger_nodes = [ TriggerNode( - 'Framework function URL parameter', - sanitisers=None, + Source('Framework function URL parameter'), cfg_node=node ) for node in tainted_nodes ] @@ -142,7 +141,7 @@ def find_triggers( Args: nodes(list[Node]): the nodes to find triggers in. - trigger_word_list(list[string]): list of trigger words to look for. + trigger_word_list(list[Union[Sink, Source]]): list of trigger words to look for. nosec_lines(set): lines with # nosec whitelisting Returns: @@ -157,23 +156,21 @@ def find_triggers( def label_contains( node, - trigger_words + triggers ): """Determine if node contains any of the trigger_words provided. Args: node(Node): CFG node to check. - trigger_words(list[string]): list of trigger words to look for. + trigger_words(list[Union[Sink, Source]]): list of trigger words to look for. Returns: Iterable of TriggerNodes found. Can be multiple because multiple trigger_words can be in one node. """ - for trigger_word_tuple in trigger_words: - if trigger_word_tuple[0] in node.label: - trigger_word = trigger_word_tuple[0] - sanitisers = trigger_word_tuple[1] - yield TriggerNode(trigger_word, sanitisers, node) + for trigger in triggers: + if trigger.trigger_word in node.label: + yield TriggerNode(trigger, node) def build_sanitiser_node_dict( diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index acef7bb0..80a37491 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -164,16 +164,22 @@ def __str__(self): class TriggerNode(): def __init__( self, - trigger_word, - sanitisers, + trigger, cfg_node, secondary_nodes=[] ): - self.trigger_word = trigger_word - self.sanitisers = sanitisers + self.trigger = trigger self.cfg_node = cfg_node self.secondary_nodes = secondary_nodes + @property + def trigger_word(self): + return self.trigger.trigger_word + + @property + def sanitisers(self): + return self.trigger.sanitisers if hasattr(self.trigger, 'sanitisers') else [] + def append(self, cfg_node): if not cfg_node == self.cfg_node: if self.secondary_nodes and cfg_node not in self.secondary_nodes: diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt index 656c8386..839ad6a4 100644 --- a/pyt/vulnerability_definitions/all_trigger_words.pyt +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -1,34 +1,46 @@ -sources: -request.args.get( -Markup( -POST.get( -GET.get( -META.get( -POST[ -GET[ -META[ -FILES[ -.data -form[ -form( -mark_safe( -cookies[ -files[ -SQLAlchemy - -sinks: -replace( -> escape -send_file( -> '..', '..' in -execute( -system( -filter( -subprocess.call( -render_template( -set_cookie( -redirect( -url_for( -flash( -jsonify( -render( -render_to_response( -Popen( \ No newline at end of file +{ + "sources": [ + "request.args.get(", + "Markup(", + "POST.get(", + "GET.get(", + "META.get(", + "POST[", + "GET[", + "META[", + "FILES[", + ".data", + "form[", + "form(", + "mark_safe(", + "cookies[", + "files[", + "SQLAlchemy" + ], + "sinks": { + "replace(": { + "sanitisers": [ + "escape" + ] + }, + "send_file(": { + "sanitisers": [ + "'..'", + "'..' in" + ] + }, + "execute(": {}, + "system(": {}, + "filter(": {}, + "subprocess.call(": {}, + "render_template(": {}, + "set_cookie(": {}, + "redirect(": {}, + "url_for(": {}, + "flash(": {}, + "jsonify(": {}, + "render(": {}, + "render_to_response(": {}, + "Popen(": {} + } +} diff --git a/pyt/vulnerability_definitions/django_trigger_words.pyt b/pyt/vulnerability_definitions/django_trigger_words.pyt index 53b54f66..00131fe1 100644 --- a/pyt/vulnerability_definitions/django_trigger_words.pyt +++ b/pyt/vulnerability_definitions/django_trigger_words.pyt @@ -1,32 +1,44 @@ -sources: -POST.get( -GET.get( -META.get( -POST[ -GET[ -META[ -FILES[ -.data -form[ -form( -mark_safe( -cookies[ -files[ -SQLAlchemy - -sinks: -replace( -> escape -send_file( -> '..', '..' in -execute( -system( -filter( -subprocess.call( -render_template( -set_cookie( -redirect( -url_for( -flash( -jsonify( -render( -render_to_response( -Popen( \ No newline at end of file +{ + "sources": [ + "POST.get(", + "GET.get(", + "META.get(", + "POST[", + "GET[", + "META[", + "FILES[", + ".data", + "form[", + "form(", + "mark_safe(", + "cookies[", + "files[", + "SQLAlchemy" + ], + "sinks": { + "replace(": { + "sanitisers": [ + "escape" + ] + }, + "send_file(": { + "sanitisers": [ + "'..'", + "'..' in" + ] + }, + "execute(": {}, + "system(": {}, + "filter(": {}, + "subprocess.call(": {}, + "render_template(": {}, + "set_cookie(": {}, + "redirect(": {}, + "url_for(": {}, + "flash(": {}, + "jsonify(": {}, + "render(": {}, + "render_to_response(": {}, + "Popen(": {} + } +} diff --git a/pyt/vulnerability_definitions/flask_trigger_words.pyt b/pyt/vulnerability_definitions/flask_trigger_words.pyt index d7555a87..0dd49ebf 100644 --- a/pyt/vulnerability_definitions/flask_trigger_words.pyt +++ b/pyt/vulnerability_definitions/flask_trigger_words.pyt @@ -1,23 +1,35 @@ -sources: -request.args.get( -.data -form[ -form( -Markup( -cookies[ -files[ -SQLAlchemy - -sinks: -replace( -> escape -send_file( -> '..', '..' in -execute( -system( -filter( -subprocess.call( -render_template( -set_cookie( -redirect( -url_for( -flash( -jsonify( \ No newline at end of file +{ + "sources": [ + "request.args.get(", + ".data", + "form[", + "form(", + "Markup(", + "cookies[", + "files[", + "SQLAlchemy" + ], + "sinks": { + "replace(": { + "sanitisers": [ + "escape" + ] + }, + "send_file(": { + "sanitisers": [ + "'..'", + "'..' in" + ] + }, + "execute(": {}, + "system(": {}, + "filter(": {}, + "subprocess.call(": {}, + "render_template(": {}, + "set_cookie(": {}, + "redirect(": {}, + "url_for(": {}, + "flash(": {}, + "jsonify(": {} + } +} diff --git a/pyt/vulnerability_definitions/test_triggers.pyt b/pyt/vulnerability_definitions/test_triggers.pyt index cfa83a37..9388d539 100644 --- a/pyt/vulnerability_definitions/test_triggers.pyt +++ b/pyt/vulnerability_definitions/test_triggers.pyt @@ -1,7 +1,20 @@ -sources: -input - -sinks: -eval -> sanitise -horse -> japan, host, kost -valmue +{ + "sources": [ + "input" + ], + "sinks": { + "eval(": { + "sanitisers": [ + "sanitise" + ] + }, + "horse(": { + "sanitisers": [ + "japan", + "host", + "kost" + ] + }, + "valmue": {} + } +} diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index c99e137f..390a9214 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -11,10 +11,14 @@ ) from pyt.vulnerabilities import ( find_vulnerabilities, - trigger_definitions_parser, UImode, vulnerabilities ) +from pyt.vulnerabilities.trigger_definitions_parser import ( + parse, + Sink, + Source, +) from pyt.web_frameworks import ( FrameworkAdaptor, is_django_view_function, @@ -25,7 +29,7 @@ class EngineTest(VulnerabilitiesBaseTestCase): def test_parse(self): - definitions = trigger_definitions_parser.parse( + definitions = parse( trigger_word_file=os.path.join( os.getcwd(), 'pyt', @@ -36,44 +40,31 @@ def test_parse(self): self.assert_length(definitions.sources, expected_length=1) self.assert_length(definitions.sinks, expected_length=3) - self.assert_length(definitions.sinks[0][1], expected_length=1) - self.assert_length(definitions.sinks[1][1], expected_length=3) - - def test_parse_section(self): - list_ = list(trigger_definitions_parser.parse_section(iter(['get']))) - self.assert_length(list_, expected_length=1) - self.assertEqual(list_[0][0], 'get') - self.assertEqual(list_[0][1], list()) - - list_ = list(trigger_definitions_parser.parse_section(iter(['get', 'get -> a, b, c d s aq a']))) - self.assert_length(list_, expected_length=2) - self.assertEqual(list_[0][0], 'get') - self.assertEqual(list_[1][0], 'get') - self.assertEqual(list_[1][1], ['a', 'b', 'c d s aq a']) - self.assert_length(list_[1][1], expected_length=3) + self.assert_length(definitions.sinks[0].sanitisers, expected_length=1) + self.assert_length(definitions.sinks[1].sanitisers, expected_length=3) def test_label_contains(self): cfg_node = Node('label', None, line_number=None, path=None) - trigger_words = [('get', [])] + trigger_words = [Source('get')] list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) self.assert_length(list_, expected_length=0) cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) - trigger_words = [('get', []), ('request', [])] + trigger_words = [Sink('request'), Source('get')] list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) self.assert_length(list_, expected_length=2) trigger_node_1 = list_[0] trigger_node_2 = list_[1] - self.assertEqual(trigger_node_1.trigger_word, 'get') + self.assertEqual(trigger_node_1.trigger_word, 'request') self.assertEqual(trigger_node_1.cfg_node, cfg_node) - self.assertEqual(trigger_node_2.trigger_word, 'request') + self.assertEqual(trigger_node_2.trigger_word, 'get') self.assertEqual(trigger_node_2.cfg_node, cfg_node) cfg_node = Node('request.get("stefan")', None, line_number=None, path=None) - trigger_words = [('get', []), ('get', [])] + trigger_words = [Source('get'), Source('get'), Sink('get(')] list_ = list(vulnerabilities.label_contains(cfg_node, trigger_words)) - self.assert_length(list_, expected_length=2) + self.assert_length(list_, expected_length=3) def test_find_triggers(self): self.cfg_create_from_file('examples/vulnerable_code/XSS.py') @@ -83,7 +74,7 @@ def test_find_triggers(self): FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) XSS1 = cfg_list[1] - trigger_words = [('get', [])] + trigger_words = [Source('get')] list_ = vulnerabilities.find_triggers( XSS1.nodes, @@ -110,7 +101,8 @@ def test_build_sanitiser_node_dict(self): cfg = cfg_list[1] cfg_node = Node(None, None, line_number=None, path=None) - sinks_in_file = [vulnerabilities.TriggerNode('replace', ['escape'], cfg_node)] + sink = Sink.from_json('replace', {'sanitisers': ['escape']}) + sinks_in_file = [vulnerabilities.TriggerNode(sink, cfg_node)] sanitiser_dict = vulnerabilities.build_sanitiser_node_dict(cfg, sinks_in_file) self.assert_length(sanitiser_dict, expected_length=1) From b6376dac6d1534e395e515f1ce385c3bb28a667d Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 18 Jul 2018 15:32:19 +0100 Subject: [PATCH 447/541] Add request.get_json() to flask sources of taint --- pyt/vulnerability_definitions/all_trigger_words.pyt | 1 + pyt/vulnerability_definitions/flask_trigger_words.pyt | 1 + 2 files changed, 2 insertions(+) diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt index 839ad6a4..5642db5c 100644 --- a/pyt/vulnerability_definitions/all_trigger_words.pyt +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -1,6 +1,7 @@ { "sources": [ "request.args.get(", + "request.get_json(", "Markup(", "POST.get(", "GET.get(", diff --git a/pyt/vulnerability_definitions/flask_trigger_words.pyt b/pyt/vulnerability_definitions/flask_trigger_words.pyt index 0dd49ebf..db995849 100644 --- a/pyt/vulnerability_definitions/flask_trigger_words.pyt +++ b/pyt/vulnerability_definitions/flask_trigger_words.pyt @@ -1,6 +1,7 @@ { "sources": [ "request.args.get(", + "request.get_json(", ".data", "form[", "form(", From d68554cc13a4de71e64e7b2c84a20d096214ac57 Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 19 Jul 2018 16:06:03 +0100 Subject: [PATCH 448/541] Certain args, kwargs of sink functions are affected by taint The aim of this is to reduce the number of false positives. In the json trigger file you can specify a list of arg positions or keywords which propagate or ignore taint. So e.g there may be an execute function where the first argument is raw SQL query text which is affected by taint, but any other arguments are variables passed in to the prepared SQL statement and (we assume) can be tainted user input without a problem. To do this we can no longer just use the RHSVisitor to see which variables are used by a sink. We need the results of each arg / kwarg separately. There is the added complication of *args and **kwargs where we need to determine if a RHS variable could pass into a propagating arg / kwarg or not. Probably the best way to understand it is to look at the added test cases. --- examples/vulnerable_code/sql/sqli.py | 8 +++ pyt/cfg/stmt_visitor.py | 1 + pyt/core/node_types.py | 4 +- pyt/helper_visitors/__init__.py | 2 + pyt/helper_visitors/call_visitor.py | 71 +++++++++++++++++++ .../right_hand_side_visitor.py | 6 ++ .../trigger_definitions_parser.py | 25 +++++++ pyt/vulnerabilities/vulnerabilities.py | 40 ++++++++++- .../test_positions.pyt | 28 ++++++++ tests/base_test_case.py | 18 ++++- tests/helper_visitors/call_visitor_test.py | 52 ++++++++++++++ tests/vulnerabilities/vulnerabilities_test.py | 61 +++++++++++++++- 12 files changed, 309 insertions(+), 7 deletions(-) create mode 100644 pyt/helper_visitors/call_visitor.py create mode 100644 pyt/vulnerability_definitions/test_positions.pyt create mode 100644 tests/helper_visitors/call_visitor_test.py diff --git a/examples/vulnerable_code/sql/sqli.py b/examples/vulnerable_code/sql/sqli.py index 7435ae67..a0c589d4 100644 --- a/examples/vulnerable_code/sql/sqli.py +++ b/examples/vulnerable_code/sql/sqli.py @@ -38,5 +38,13 @@ def filtering(): print(value.username, value.email) return 'Result is displayed in console.' +@app.route('/users/', methods=['DELETE']) +def delete_user_dangerously(name): + query = "DELETE FROM user WHERE username = :name" + db.engine.execute(query, name=name) + print('Deleted') + return 'Deleted' + + if __name__ == '__main__': app.run(debug=True) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 68cb5587..ba463c32 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -573,6 +573,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_node = BBorBInode( label='', left_hand_side=LHS, + ast_node=node, right_hand_side_variables=[], line_number=node.lineno, path=self.filenames[-1], diff --git a/pyt/core/node_types.py b/pyt/core/node_types.py index 6cc2f1eb..5981c5e8 100644 --- a/pyt/core/node_types.py +++ b/pyt/core/node_types.py @@ -202,7 +202,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num class BBorBInode(AssignmentNode): """Node used for handling restore nodes returning from blackbox or builtin function calls.""" - def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_number, path, func_name): + def __init__(self, label, left_hand_side, ast_node, right_hand_side_variables, *, line_number, path, func_name): """Create a Restore node. Args: @@ -213,7 +213,7 @@ def __init__(self, label, left_hand_side, right_hand_side_variables, *, line_num path(string): Current filename. func_name(string): The string we will compare with the blackbox_mapping in vulnerabilities.py """ - super().__init__(label, left_hand_side, None, right_hand_side_variables, line_number=line_number, path=path) + super().__init__(label, left_hand_side, ast_node, right_hand_side_variables, line_number=line_number, path=path) self.args = list() self.inner_most_call = self self.func_name = func_name diff --git a/pyt/helper_visitors/__init__.py b/pyt/helper_visitors/__init__.py index ffd5f878..47cbcea1 100644 --- a/pyt/helper_visitors/__init__.py +++ b/pyt/helper_visitors/__init__.py @@ -1,9 +1,11 @@ +from .call_visitor import CallVisitor from .label_visitor import LabelVisitor from .right_hand_side_visitor import RHSVisitor from .vars_visitor import VarsVisitor __all__ = [ + 'CallVisitor', 'LabelVisitor', 'RHSVisitor', 'VarsVisitor' diff --git a/pyt/helper_visitors/call_visitor.py b/pyt/helper_visitors/call_visitor.py new file mode 100644 index 00000000..9b0d7b67 --- /dev/null +++ b/pyt/helper_visitors/call_visitor.py @@ -0,0 +1,71 @@ +import ast +import re +from collections import defaultdict, namedtuple +from itertools import count + +from ..core.ast_helper import get_call_names_as_string +from .right_hand_side_visitor import RHSVisitor + + +class CallVisitorResults( + namedtuple( + "CallVisitorResults", + ("args", "kwargs", "unknown_args", "unknown_kwargs") + ) +): + __slots__ = () + + def all_results(self): + for x in self.args: + yield from x + for x in self.kwargs.values(): + yield from x + yield from self.unknown_args + yield from self.unknown_kwargs + + +class CallVisitor(ast.NodeVisitor): + def __init__(self, trigger_str): + self.unknown_arg_visitor = RHSVisitor() + self.unknown_kwarg_visitor = RHSVisitor() + self.argument_visitors = defaultdict(lambda: RHSVisitor()) + self._trigger_str = trigger_str + + def visit_Call(self, call_node): + func_name = get_call_names_as_string(call_node.func) + trigger_re = r"(^|\.){}$".format(re.escape(self._trigger_str)) + if re.search(trigger_re, func_name): + seen_starred = False + for index, arg in enumerate(call_node.args): + if isinstance(arg, ast.Starred): + seen_starred = True + if seen_starred: + self.unknown_arg_visitor.visit(arg) + else: + self.argument_visitors[index].visit(arg) + + for keyword in call_node.keywords: + if keyword.arg is None: + self.unknown_kwarg_visitor.visit(keyword.value) + else: + self.argument_visitors[keyword.arg].visit(keyword.value) + self.generic_visit(call_node) + + @classmethod + def get_call_visit_results(cls, trigger_str, node): + visitor = cls(trigger_str) + visitor.visit(node) + + arg_results = [] + for i in count(): + try: + arg_results.append(set(visitor.argument_visitors.pop(i).result)) + except KeyError: + break + + return CallVisitorResults( + arg_results, + {k: set(v.result) for k, v in visitor.argument_visitors.items()}, + set(visitor.unknown_arg_visitor.result), + set(visitor.unknown_kwarg_visitor.result), + ) diff --git a/pyt/helper_visitors/right_hand_side_visitor.py b/pyt/helper_visitors/right_hand_side_visitor.py index 8dcf9ea4..629a94bb 100644 --- a/pyt/helper_visitors/right_hand_side_visitor.py +++ b/pyt/helper_visitors/right_hand_side_visitor.py @@ -21,3 +21,9 @@ def visit_Call(self, node): if node.keywords: for keyword in node.keywords: self.visit(keyword) + + @classmethod + def result_for_node(cls, node): + visitor = cls() + visitor.visit(node) + return visitor.result diff --git a/pyt/vulnerabilities/trigger_definitions_parser.py b/pyt/vulnerabilities/trigger_definitions_parser.py index b188e280..ab737928 100644 --- a/pyt/vulnerabilities/trigger_definitions_parser.py +++ b/pyt/vulnerabilities/trigger_definitions_parser.py @@ -16,10 +16,35 @@ class Sink: def __init__( self, trigger, *, + unlisted_args_propagate=True, unlisted_kwargs_propagate=True, + arg_list=None, kwarg_list=None, sanitisers=None ): self._trigger = trigger self.sanitisers = sanitisers or [] + self.arg_list_propagates = not unlisted_args_propagate + self.kwarg_list_propagates = not unlisted_kwargs_propagate + + if trigger[-1] != '(': + if self.arg_list_propagates or self.kwarg_list_propagates or arg_list or kwarg_list: + raise ValueError("Propagation options specified, but trigger word isn't a function call") + + self.arg_list = set(arg_list or ()) + self.kwarg_list = set(kwarg_list or ()) + + def arg_propagates(self, index): + in_list = index in self.arg_list + return self.arg_list_propagates == in_list + + def kwarg_propagates(self, keyword): + in_list = keyword in self.kwarg_list + return self.kwarg_list_propagates == in_list + + @property + def all_arguments_propagate_taint(self): + if self.arg_list or self.kwarg_list: + return False + return True @property def call(self): diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 64b11892..7fd14cd7 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -13,6 +13,7 @@ TaintedNode ) from ..helper_visitors import ( + CallVisitor, RHSVisitor, VarsVisitor ) @@ -240,6 +241,37 @@ def get_sink_args(cfg_node): return vv.result +def get_sink_args_which_propagate(sink, ast_node): + sink_args_with_positions = CallVisitor.get_call_visit_results(sink.trigger.call, ast_node) + sink_args = [] + + for i, vars in enumerate(sink_args_with_positions.args): + if sink.trigger.arg_propagates(i): + sink_args.extend(vars) + + if ( + # Either any unspecified arg propagates + not sink.trigger.arg_list_propagates or + # or there are some propagating args which weren't passed positionally + any(1 for position in sink.trigger.arg_list if position >= len(sink_args_with_positions.args)) + ): + sink_args.extend(sink_args_with_positions.unknown_args) + + for keyword, vars in sink_args_with_positions.kwargs.items(): + if sink.trigger.kwarg_propagates(keyword): + sink_args.extend(vars) + + if ( + # Either any unspecified kwarg propagates + not sink.trigger.kwarg_list_propagates or + # or there are some propagating kwargs which have not been passed by keyword + sink.trigger.kwarg_list - set(sink_args_with_positions.kwargs.keys()) + ): + sink_args.extend(sink_args_with_positions.unknown_kwargs) + + return sink_args + + def get_vulnerability_chains( current_node, sink, @@ -374,10 +406,14 @@ def get_vulnerability( sink.cfg_node)] nodes_in_constaint.append(source.cfg_node) - sink_args = get_sink_args(sink.cfg_node) + if sink.trigger.all_arguments_propagate_taint: + sink_args = get_sink_args(sink.cfg_node) + else: + sink_args = get_sink_args_which_propagate(sink, sink.cfg_node.ast_node) + tainted_node_in_sink_arg = get_tainted_node_in_sink_args( sink_args, - nodes_in_constaint + nodes_in_constaint, ) if tainted_node_in_sink_arg: diff --git a/pyt/vulnerability_definitions/test_positions.pyt b/pyt/vulnerability_definitions/test_positions.pyt new file mode 100644 index 00000000..48e276fe --- /dev/null +++ b/pyt/vulnerability_definitions/test_positions.pyt @@ -0,0 +1,28 @@ +{ + "sources": [ + "request.args.get(", + "make_taint(" + ], + "sinks": { + "normal(": {}, + "execute(": { + "unlisted_args_propagate": false, + "arg_list": [ + 0 + ], + "unlisted_kwargs_propagate": false, + "kwarg_list": [ + "text" + ] + }, + "run(": { + "kwarg_list": [ + "non_propagating" + ], + "arg_list": [ + 2, + 3 + ] + } + } +} diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 21b7c695..1283bf47 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -9,9 +9,9 @@ class BaseTestCase(unittest.TestCase): """A base class that has helper methods for testing PyT.""" - def assert_length(self, _list, *, expected_length): + def assert_length(self, _list, *, expected_length, msg=None): actual_length = len(_list) - self.assertEqual(expected_length, actual_length) + self.assertEqual(expected_length, actual_length, msg=msg) def cfg_create_from_file( self, @@ -27,3 +27,17 @@ def cfg_create_from_file( local_modules, filename ) + + def cfg_create_from_ast( + self, + ast_tree, + project_modules=list(), + local_modules=list() + ): + project_definitions.clear() + self.cfg = make_cfg( + ast_tree, + project_modules, + local_modules, + filename='?' + ) diff --git a/tests/helper_visitors/call_visitor_test.py b/tests/helper_visitors/call_visitor_test.py new file mode 100644 index 00000000..304f5976 --- /dev/null +++ b/tests/helper_visitors/call_visitor_test.py @@ -0,0 +1,52 @@ +import ast +import unittest + +from pyt.helper_visitors import CallVisitor + + +class CallVisitorTest(unittest.TestCase): + def get_results(self, call_name, expr): + tree = ast.parse(expr) + return CallVisitor.get_call_visit_results(trigger_str=call_name, node=tree) + + def test_basic(self): + call_args = self.get_results('func', 'func(a, b, x=c)') + self.assertEqual(call_args.args, [{'a'}, {'b'}]) + self.assertEqual(call_args.kwargs, {'x': {'c'}}) + self.assertEqual(call_args.unknown_args, set()) + self.assertEqual(call_args.unknown_kwargs, set()) + + def test_visits_each_argument_recursively(self): + call_args = self.get_results('func', 'func(a + b, f(123), g(h(c=d)), e=i(123))') + self.assertEqual(call_args.args, [{'a', 'b'}, set(), {'d'}]) + self.assertEqual(call_args.kwargs, {'e': set()}) + self.assertEqual(call_args.unknown_args, set()) + self.assertEqual(call_args.unknown_kwargs, set()) + + def test_merge_when_function_called_inside_own_arguments(self): + call_args = self.get_results('func', 'func(a + func(b, c, x=d), e)') + self.assertEqual(call_args.args, [{'a', 'b', 'c', 'd'}, {'c', 'e'}]) + self.assertEqual(call_args.kwargs, {'x': {'d'}}) + self.assertEqual(call_args.unknown_args, set()) + self.assertEqual(call_args.unknown_kwargs, set()) + + def test_star_args_kwargs(self): + call_args = self.get_results('func', 'func(a, b, *c, *d, x=e, **f, **g)') + self.assertEqual(call_args.args, [{'a'}, {'b'}]) + self.assertEqual(call_args.kwargs, {'x': {'e'}}) + self.assertEqual(call_args.unknown_args, {'c', 'd'}) + self.assertEqual(call_args.unknown_kwargs, {'f', 'g'}) + + def test_call_inside_comprehension(self): + call_args = self.get_results('func', '[row for row in db.func(a, b)]') + self.assertEqual(call_args.args, [{'a'}, {'b'}]) + self.assertEqual(call_args.kwargs, {}) + self.assertEqual(call_args.unknown_args, set()) + self.assertEqual(call_args.unknown_kwargs, set()) + + def test_call_inside_comprehension_2(self): + call_args = self.get_results('func', '[func(a, b) for b in c]') + self.assertEqual(call_args.args, [{'a'}, {'b'}]) + self.assertEqual(call_args.kwargs, {}) + self.assertEqual(call_args.unknown_args, set()) + self.assertEqual(call_args.unknown_kwargs, set()) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 390a9214..20d142ba 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -1,3 +1,4 @@ +import ast import os from .vulnerabilities_base_test_case import VulnerabilitiesBaseTestCase @@ -308,7 +309,7 @@ def test_path_traversal_sanitised_2_result(self): def test_sql_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') - self.assert_length(vulnerabilities, expected_length=1) + self.assert_length(vulnerabilities, expected_length=2) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/sql/sqli.py @@ -560,3 +561,61 @@ def run_analysis(self, path): def test_self_is_not_tainted(self): vulnerabilities = self.run_analysis('examples/example_inputs/def_with_self_as_first_arg.py') self.assert_length(vulnerabilities, expected_length=0) + + +class EnginePositionTest(VulnerabilitiesBaseTestCase): + def run_analysis(self): + cfg_list = [self.cfg] + + FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) + initialize_constraint_table(cfg_list) + + analyse(cfg_list) + + trigger_word_file = os.path.join( + 'pyt', + 'vulnerability_definitions', + 'test_positions.pyt' + ) + + return find_vulnerabilities( + cfg_list, + UImode.NORMAL, + default_blackbox_mapping_file, + trigger_word_file + ) + + def test_sql_result_ignores_false_positive_prepared_statement(self): + self.cfg_create_from_file('examples/vulnerable_code/sql/sqli.py') + vulnerabilities = self.run_analysis() + self.assert_length(vulnerabilities, expected_length=1) + self.assertEqual(vulnerabilities[0].source.line_number, 26) + + def test_args_kwargs_that_do_dont_propagate(self): + def check(fixture, vulnerable): + tree = ast.parse('TAINT = make_taint()\n' + fixture) + self.cfg_create_from_ast(tree) + vulnerabilities = self.run_analysis() + self.assert_length(vulnerabilities, expected_length=1 if vulnerable else 0, msg=fixture) + + no_vuln_fixtures = ( + 'execute(0)', + 'run(0, x, TAINT, 0, x=x)', + 'run(x, 0, non_propagating=TAINT)', + 'execute(x, name=TAINT)', + 'execute(x, *TAINT)', + 'execute(text=x, **TAINT)', + 'dont_run(TAINT)', + ) + vuln_fixtures = ( + 'run(TAINT)', + 'subprocess.run(TAINT)', + 'run(0, TAINT, 0, x=0)', + 'run(0, x, non_propagating=x, tainted=TAINT)', + 'execute(*ok, *TAINT)', + 'execute(name=x, **TAINT)', + ) + for fixture_str in no_vuln_fixtures: + check(fixture_str, False) + for fixture_str in vuln_fixtures: + check(fixture_str, True) From 490128cfb041812d15464fbbe06983c4f31b624c Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 19:31:38 +0100 Subject: [PATCH 449/541] Handle list assignment like tuples [a, b] = (c, d) --- pyt/cfg/stmt_visitor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index ba463c32..d99c9ae8 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -380,8 +380,8 @@ def assign_multi_target(self, node, right_hand_side_variables): def visit_Assign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) - if isinstance(node.targets[0], ast.Tuple): # x,y = [1,2] - if isinstance(node.value, ast.Tuple): + if isinstance(node.targets[0], (ast.Tuple, ast.List)): # x,y = [1,2] + if isinstance(node.value, (ast.Tuple, ast.List)): return self.assign_tuple_target(node, rhs_visitor.result) elif isinstance(node.value, ast.Call): call = None From 2b43ae094dd07349795c12825598e5a10dfcaf9d Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 18:21:03 +0100 Subject: [PATCH 450/541] Print asterisk before a Starred in LabelVisitor --- pyt/helper_visitors/label_visitor.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyt/helper_visitors/label_visitor.py b/pyt/helper_visitors/label_visitor.py index f594bff8..3be85ba4 100644 --- a/pyt/helper_visitors/label_visitor.py +++ b/pyt/helper_visitors/label_visitor.py @@ -320,3 +320,7 @@ def visit_FormattedValue(self, node): self.result += ':' self.visit_joined_str(node.format_spec) self.result += '}' + + def visit_Starred(self, node): + self.result += '*' + self.visit(node.value) From d2566d2a4fe5fbd5822f6567bf6d3218e5c5125d Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 12 Jul 2018 19:31:56 +0100 Subject: [PATCH 451/541] Test Starred in label visitor --- tests/helper_visitors/label_visitor_test.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/helper_visitors/label_visitor_test.py b/tests/helper_visitors/label_visitor_test.py index e39f5151..2a7f0857 100644 --- a/tests/helper_visitors/label_visitor_test.py +++ b/tests/helper_visitors/label_visitor_test.py @@ -79,3 +79,7 @@ def test_joined_str(self): def test_joined_str_with_format_spec(self): label = self.perform_labeling_on_expression('f"a{b!s:.{length}}"') self.assertEqual(label.result, 'f\'a{b!s:.{length}}\'') + + def test_starred(self): + label = self.perform_labeling_on_expression('[a, *b] = *c, d') + self.assertEqual(label.result, '[a, *b] = (*c, d)') From 5de325ed23df308266748728a8b5c12ae5ef44ec Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 23 Jul 2018 17:13:47 +0100 Subject: [PATCH 452/541] Add __init__.py to modules as a package import from test_project.folder import ... should import module in test_project/folder/__init__.py and all the modules within the folder for working out if taint propagates. --- examples/test_project/folder/__init__.py | 0 pyt/core/project_handler.py | 19 +++++++++++-------- tests/core/project_handler_test.py | 8 ++++++-- 3 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 examples/test_project/folder/__init__.py diff --git a/examples/test_project/folder/__init__.py b/examples/test_project/folder/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pyt/core/project_handler.py b/pyt/core/project_handler.py index 48eccfd1..0136010d 100644 --- a/pyt/core/project_handler.py +++ b/pyt/core/project_handler.py @@ -52,14 +52,10 @@ def get_modules(path): '.' ) directory = directory.replace('.', '', 1) - if directory: - modules.append( - ('.'.join((module_root, directory, filename.replace('.py', ''))), os.path.join(root, filename)) - ) - else: - modules.append( - ('.'.join((module_root, filename.replace('.py', ''))), os.path.join(root, filename)) - ) + modules.append(( + '.'.join(p for p in (module_root, directory, _filename_to_module(filename)) if p), + os.path.join(root, filename) + )) return modules @@ -68,3 +64,10 @@ def _is_python_file(path): if os.path.splitext(path)[1] == '.py': return True return False + + +def _filename_to_module(filename): + if filename == '__init__.py': + return '' + else: + return os.path.splitext(filename)[0] diff --git a/tests/core/project_handler_test.py b/tests/core/project_handler_test.py index 4de34b21..ddc812c7 100644 --- a/tests/core/project_handler_test.py +++ b/tests/core/project_handler_test.py @@ -32,6 +32,7 @@ def test_get_modules(self): utils_path = os.path.join(project_folder, 'utils.py') exceptions_path = os.path.join(project_folder, 'exceptions.py') some_path = os.path.join(project_folder, folder, 'some.py') + __init__path = os.path.join(project_folder, folder, '__init__.py') indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') # relative_folder_name = '.' + folder @@ -39,21 +40,24 @@ def test_get_modules(self): utils_name = project_namespace + '.' + 'utils' exceptions_name = project_namespace + '.' + 'exceptions' some_name = project_namespace + '.' + folder + '.some' + __init__name = project_namespace + '.' + folder indhold_name = project_namespace + '.' + folder + '.' + directory + '.indhold' app_tuple = (app_name, app_path) utils_tuple = (utils_name, utils_path) exceptions_tuple = (exceptions_name, exceptions_path) some_tuple = (some_name, some_path) + __init__tuple = (__init__name, __init__path) indhold_tuple = (indhold_name, indhold_path) self.assertIn(app_tuple, modules) self.assertIn(utils_tuple, modules) self.assertIn(exceptions_tuple, modules) self.assertIn(some_tuple, modules) + self.assertIn(__init__tuple, modules) self.assertIn(indhold_tuple, modules) - self.assertEqual(len(modules), 5) + self.assertEqual(len(modules), 6) def test_get_modules_and_packages(self): project_folder = os.path.normpath(os.path.join('examples', 'test_project')) @@ -104,4 +108,4 @@ def test_get_modules_and_packages(self): self.assertIn(some_tuple, modules) self.assertIn(indhold_tuple, modules) - self.assertEqual(len(modules), 7) + self.assertEqual(len(modules), 8) From e2ad3b03da8132c49e4d3c75d0301a10c839c5dc Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 23 Jul 2018 17:09:27 +0100 Subject: [PATCH 453/541] Imports: --dont-prepend-root flag For a project with root in /app, currently pyt expects that all of the imports are of the form: from app.folder.module import thing But actually a project could not be expecting the module root to be prepended. My projects use: from folder.module import thing This adds an optional boolean flag to change the behaviour of get_modules. --- pyt/__main__.py | 2 +- pyt/core/project_handler.py | 27 +++++++++++++++------------ pyt/usage.py | 7 +++++++ tests/core/project_handler_test.py | 28 +++++++++++++++++++++++++++- tests/usage_test.py | 8 ++++++-- 5 files changed, 56 insertions(+), 16 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index a979eb6e..1d76828e 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -86,7 +86,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 directory = os.path.normpath(args.project_root) else: directory = os.path.dirname(path) - project_modules = get_modules(directory) + project_modules = get_modules(directory, prepend_module_root=args.prepend_module_root) local_modules = get_directory_modules(directory) tree = generate_ast(path) diff --git a/pyt/core/project_handler.py b/pyt/core/project_handler.py index 0136010d..f6a30f0e 100644 --- a/pyt/core/project_handler.py +++ b/pyt/core/project_handler.py @@ -31,7 +31,7 @@ def get_directory_modules(directory): return _local_modules -def get_modules(path): +def get_modules(path, prepend_module_root=True): """Return a list containing tuples of e.g. ('test_project.utils', 'example/test_project/utils.py') """ @@ -52,10 +52,20 @@ def get_modules(path): '.' ) directory = directory.replace('.', '', 1) - modules.append(( - '.'.join(p for p in (module_root, directory, _filename_to_module(filename)) if p), - os.path.join(root, filename) - )) + + module_name_parts = [] + if prepend_module_root: + module_name_parts.append(module_root) + if directory: + module_name_parts.append(directory) + + if filename == '__init__.py': + path = root + else: + module_name_parts.append(os.path.splitext(filename)[0]) + path = os.path.join(root, filename) + + modules.append(('.'.join(module_name_parts), path)) return modules @@ -64,10 +74,3 @@ def _is_python_file(path): if os.path.splitext(path)[1] == '.py': return True return False - - -def _filename_to_module(filename): - if filename == '__init__.py': - return '' - else: - return os.path.splitext(filename)[0] diff --git a/pyt/usage.py b/pyt/usage.py index 30286215..82d15027 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -101,6 +101,13 @@ def _add_optional_group(parser): default='', help='Separate files with commas' ) + optional_group.add_argument( + '--dont-prepend-root', + help="In project root e.g. /app, imports are not prepended with app.*", + action='store_false', + default=True, + dest='prepend_module_root' + ) def _add_print_group(parser): diff --git a/tests/core/project_handler_test.py b/tests/core/project_handler_test.py index ddc812c7..04e84be2 100644 --- a/tests/core/project_handler_test.py +++ b/tests/core/project_handler_test.py @@ -32,7 +32,7 @@ def test_get_modules(self): utils_path = os.path.join(project_folder, 'utils.py') exceptions_path = os.path.join(project_folder, 'exceptions.py') some_path = os.path.join(project_folder, folder, 'some.py') - __init__path = os.path.join(project_folder, folder, '__init__.py') + __init__path = os.path.join(project_folder, folder) indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') # relative_folder_name = '.' + folder @@ -59,6 +59,32 @@ def test_get_modules(self): self.assertEqual(len(modules), 6) + def test_get_modules_no_prepend_root(self): + project_folder = os.path.normpath(os.path.join('examples', 'test_project')) + + folder = 'folder' + directory = 'directory' + + modules = get_modules(project_folder, prepend_module_root=False) + + app_path = os.path.join(project_folder, 'app.py') + __init__path = os.path.join(project_folder, folder) + indhold_path = os.path.join(project_folder, folder, directory, 'indhold.py') + + app_name = 'app' + __init__name = folder + indhold_name = folder + '.' + directory + '.indhold' + + app_tuple = (app_name, app_path) + __init__tuple = (__init__name, __init__path) + indhold_tuple = (indhold_name, indhold_path) + + self.assertIn(app_tuple, modules) + self.assertIn(__init__tuple, modules) + self.assertIn(indhold_tuple, modules) + + self.assertEqual(len(modules), 6) + def test_get_modules_and_packages(self): project_folder = os.path.normpath(os.path.join('examples', 'test_project')) diff --git a/tests/usage_test.py b/tests/usage_test.py index d9ed7cec..a5e7db4b 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -28,7 +28,8 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [-trim] [-i] + [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] [-trim] + [-i] targets [targets ...] required arguments: @@ -55,6 +56,8 @@ def test_no_args(self): -r, --recursive find and process files in subdirectories -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS Separate files with commas + --dont-prepend-root In project root e.g. /app, imports are not prepended + with app.* print arguments: -trim, --trim-reassigned-in @@ -73,7 +76,8 @@ def test_valid_args_but_no_targets(self): EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [-trim] [-i] + [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] [-trim] + [-i] targets [targets ...] python -m pyt: error: the following arguments are required: targets\n""" From 11bcd2d93f45c28c89042f3ae82e212585d598f5 Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 23 Jul 2018 17:44:30 +0100 Subject: [PATCH 454/541] Remove unused function: valid_date --- .coveragerc | 1 - pyt/usage.py | 9 --------- 2 files changed, 10 deletions(-) diff --git a/.coveragerc b/.coveragerc index c7e7a385..df3137cf 100644 --- a/.coveragerc +++ b/.coveragerc @@ -2,7 +2,6 @@ show_missing = True exclude_lines = - def valid_date def __repr__ def __str__ if __name__ == .__main__.: diff --git a/pyt/usage.py b/pyt/usage.py index 82d15027..6a49bb3c 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -18,15 +18,6 @@ ) -def valid_date(s): - date_format = "%Y-%m-%d" - try: - return datetime.strptime(s, date_format).date() - except ValueError: - msg = "Not a valid date: '{0}'. Format: {1}".format(s, date_format) - raise argparse.ArgumentTypeError(msg) - - def _add_required_group(parser): required_group = parser.add_argument_group('required arguments') required_group.add_argument( From 11bb85b90fc1376048145055c78b1f3eb93a8c1b Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 24 Jul 2018 14:01:47 +0100 Subject: [PATCH 455/541] Imports: --no-local-imports flag I had a problem where one of my folders had a file called flask.py. Because of this, any imports of the package flask were causing pyt to import from the local file flask.py. In my project this caused a circular import and RecursionError which crashed pyt. Adds a flag so that imports relative to the project root still work: from some.directory.flask import ... but from flask import ... will now only import from project root or treat as an IgnoredNode(). Relative imports: from .flask import ... are not affected and will still work. --- pyt/__main__.py | 3 ++- pyt/cfg/expr_visitor.py | 6 ++++-- pyt/cfg/make_cfg.py | 6 ++++-- pyt/cfg/stmt_visitor.py | 5 ++++- pyt/usage.py | 8 ++++++++ tests/usage_test.py | 11 +++++++---- 6 files changed, 29 insertions(+), 10 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 1d76828e..5eed4747 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -94,7 +94,8 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 tree, project_modules, local_modules, - path + path, + allow_local_directory_imports=args.allow_local_imports ) cfg_list = [cfg] diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index b4a96168..f4d99d6a 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -37,11 +37,13 @@ def __init__( project_modules, local_modules, filename, - module_definitions=None + module_definitions=None, + allow_local_directory_imports=True ): """Create an empty CFG.""" + super().__init__(allow_local_directory_imports=allow_local_directory_imports) self.project_modules = project_modules - self.local_modules = local_modules + self.local_modules = local_modules if self._allow_local_modules else [] self.filenames = [filename] self.blackbox_assignments = set() self.nodes = list() diff --git a/pyt/cfg/make_cfg.py b/pyt/cfg/make_cfg.py index a60b734e..65aee3a8 100644 --- a/pyt/cfg/make_cfg.py +++ b/pyt/cfg/make_cfg.py @@ -30,14 +30,16 @@ def make_cfg( project_modules, local_modules, filename, - module_definitions=None + module_definitions=None, + allow_local_directory_imports=True ): visitor = ExprVisitor( tree, project_modules, local_modules, filename, - module_definitions + module_definitions, + allow_local_directory_imports ) return CFG( visitor.nodes, diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index ba463c32..7bbafb09 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -53,6 +53,9 @@ class StmtVisitor(ast.NodeVisitor): + def __init__(self, allow_local_directory_imports=True): + self._allow_local_modules = allow_local_directory_imports + super().__init__() def visit_Module(self, node): return self.stmt_star_handler(node.body) @@ -753,7 +756,7 @@ def add_module( # noqa: C901 # Analyse the file self.filenames.append(module_path) - self.local_modules = get_directory_modules(module_path) + self.local_modules = get_directory_modules(module_path) if self._allow_local_modules else [] tree = generate_ast(module_path) # module[0] is None during e.g. "from . import foo", so we must str() diff --git a/pyt/usage.py b/pyt/usage.py index 6a49bb3c..a4ec5d81 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -99,6 +99,14 @@ def _add_optional_group(parser): default=True, dest='prepend_module_root' ) + optional_group.add_argument( + '--no-local-imports', + help='If set, absolute imports must be relative to the project root. ' + 'If not set, modules in the same directory can be imported just by their names.', + action='store_false', + default=True, + dest='allow_local_imports' + ) def _add_print_group(parser): diff --git a/tests/usage_test.py b/tests/usage_test.py index a5e7db4b..027c6f00 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -28,8 +28,8 @@ def test_no_args(self): EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] [-trim] - [-i] + [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] + [--no-local-imports] [-trim] [-i] targets [targets ...] required arguments: @@ -58,6 +58,9 @@ def test_no_args(self): Separate files with commas --dont-prepend-root In project root e.g. /app, imports are not prepended with app.* + --no-local-imports If set, absolute imports must be relative to the + project root. If not set, modules in the same + directory can be imported just by their names. print arguments: -trim, --trim-reassigned-in @@ -76,8 +79,8 @@ def test_valid_args_but_no_targets(self): EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] [-trim] - [-i] + [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] + [--no-local-imports] [-trim] [-i] targets [targets ...] python -m pyt: error: the following arguments are required: targets\n""" From 80113af9dd3b1ea10bfd69d2f7433f4eb98c9b54 Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 24 Jul 2018 14:08:06 +0100 Subject: [PATCH 456/541] Handle Starred assignments where possible Try to match the targets with the values so we reduce the number of false positives. Before, all right hand side variables were tainting all of the left hand side variables. a, *b = _, _, TAINT a clean, b tainted a, *b, c = _, _, TAINT, TAINT, _ a clean, b tainted, c clean a, *b, c = _, *_, *TAINT, *_ a clean, b tainted, c tainted --- examples/example_inputs/assignment_starred.py | 1 + pyt/cfg/stmt_visitor.py | 49 +++++++++++++++---- pyt/cfg/stmt_visitor_helper.py | 2 + tests/cfg/cfg_test.py | 41 ++++++++++++++++ 4 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 examples/example_inputs/assignment_starred.py diff --git a/examples/example_inputs/assignment_starred.py b/examples/example_inputs/assignment_starred.py new file mode 100644 index 00000000..daeeaf3b --- /dev/null +++ b/examples/example_inputs/assignment_starred.py @@ -0,0 +1 @@ +a, *b, c, d, e = f, *g, *h, f + i, j diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index d99c9ae8..2f2a4cfd 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -327,28 +327,59 @@ def visit_Try(self, node): return ControlFlowNode(try_node, last_statements, break_statements=body.break_statements) def assign_tuple_target(self, node, right_hand_side_variables): - new_assignment_nodes = list() - for i, target in enumerate(node.targets[0].elts): - value = node.value.elts[i] + new_assignment_nodes = [] + remaining_variables = list(right_hand_side_variables) + remaining_targets = list(node.targets[0].elts) + remaining_values = list(node.value.elts) # May contain duplicates + def visit(target, value): label = LabelVisitor() label.visit(target) - + rhs_visitor = RHSVisitor() + rhs_visitor.visit(value) if isinstance(value, ast.Call): new_ast_node = ast.Assign(target, value) - new_ast_node.lineno = node.lineno - + ast.copy_location(new_ast_node, node) new_assignment_nodes.append(self.assignment_call_node(label.result, new_ast_node)) - else: label.result += ' = ' label.visit(value) - new_assignment_nodes.append(self.append_node(AssignmentNode( label.result, extract_left_hand_side(target), ast.Assign(target, value), - right_hand_side_variables, + rhs_visitor.result, + line_number=node.lineno, + path=self.filenames[-1] + ))) + remaining_targets.remove(target) + remaining_values.remove(value) + for var in rhs_visitor.result: + remaining_variables.remove(var) + + # Pair targets and values until a Starred node is reached + for target, value in zip(node.targets[0].elts, node.value.elts): + if isinstance(target, ast.Starred) or isinstance(value, ast.Starred): + break + visit(target, value) + + # If there was a Starred node, pair remaining targets and values from the end + for target, value in zip(reversed(list(remaining_targets)), reversed(list(remaining_values))): + if isinstance(target, ast.Starred) or isinstance(value, ast.Starred): + break + visit(target, value) + + if remaining_targets: + label = LabelVisitor() + label.handle_comma_separated(remaining_targets) + label.result += ' = ' + label.handle_comma_separated(remaining_values) + for target in remaining_targets: + new_assignment_nodes.append(self.append_node(AssignmentNode( + label.result, + extract_left_hand_side(target), + ast.Assign(target, remaining_values[0]), + remaining_variables, line_number=node.lineno, path=self.filenames[-1] ))) diff --git a/pyt/cfg/stmt_visitor_helper.py b/pyt/cfg/stmt_visitor_helper.py index 407df31f..6c49a407 100644 --- a/pyt/cfg/stmt_visitor_helper.py +++ b/pyt/cfg/stmt_visitor_helper.py @@ -79,6 +79,8 @@ def _get_names(node, result): return node.id + result elif isinstance(node, ast.Subscript): return result + elif isinstance(node, ast.Starred): + return _get_names(node.value, result) else: return _get_names(node.value, result + '.' + node.attr) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index ece76213..9bea8514 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -1,3 +1,5 @@ +import ast + from .cfg_base_test_case import CFGBaseTestCase from pyt.core.node_types import ( @@ -779,6 +781,45 @@ def test_assignment_tuple_value(self): self.assertEqual(self.cfg.nodes[node].label, 'a = (x, y)') + def test_assignment_starred(self): + self.cfg_create_from_file('examples/example_inputs/assignment_starred.py') + + middle_nodes = self.cfg.nodes[1:-1] + self.assert_length(middle_nodes, expected_length=5) + + visited = [self.cfg.nodes[0]] + while True: + current_node = visited[-1] + if len(current_node.outgoing) != 1: + break + visited.append(current_node.outgoing[0]) + self.assertCountEqual(self.cfg.nodes, visited, msg="Did not complete a path from Entry to Exit") + + self.assertEqual(middle_nodes[0].label, 'a = f') + self.assertCountEqual( # We don't assert a specific order for the assignment nodes + [n.label for n in middle_nodes], + ['a = f', 'd = f + i', 'e = j'] + ['*b, c = *g, *h'] * 2, + ) + self.assertCountEqual( + [(n.left_hand_side, n.right_hand_side_variables) for n in middle_nodes], + [('a', ['f']), ('b', ['g', 'h']), ('c', ['g', 'h']), ('d', ['f', 'i']), ('e', ['j'])], + ) + + def test_assignment_starred_list(self): + self.cfg_create_from_ast(ast.parse('[a, b, c] = *d, e')) + + middle_nodes = self.cfg.nodes[1:-1] + self.assert_length(middle_nodes, expected_length=3) + + self.assertCountEqual( + [n.label for n in middle_nodes], + ['a, b = *d', 'a, b = *d', 'c = e'], + ) + self.assertCountEqual( + [(n.left_hand_side, n.right_hand_side_variables) for n in middle_nodes], + [('a', ['d']), ('b', ['d']), ('c', ['e'])], + ) + class CFGComprehensionTest(CFGBaseTestCase): def test_nodes(self): From 5f1498e80018bcb1a884ad2b6d85690ac16a380c Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 24 Jul 2018 15:17:55 +0100 Subject: [PATCH 457/541] Cache of AST tree by module path The dependency graph of a large Python app can be quite a mess. Previously, we were regenerating the AST of files many times, as they were imported by different modules. Adding a simple LRU cache [path -> AST tree] sped up pyt on one of my code bases by 5x. We currently only mutate newly created artificial nodes, so we can store one copy of each module's AST and expect it to be static. We can make it even faster by setting maxsize=None, so there is no eviction logic, but for now I think it's already an improvement. An alternative could be to rewrite the code which deals with imports. --- pyt/core/ast_helper.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 2b8776a5..3d17b7f0 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -4,6 +4,7 @@ import ast import os import subprocess +from functools import lru_cache BLACK_LISTED_CALL_NAMES = ['self'] @@ -21,6 +22,7 @@ def _convert_to_3(path): # pragma: no cover exit(1) +@lru_cache() def generate_ast(path): """Generate an Abstract Syntax Tree using the ast module. From 97265549180bb9ba677c69032448243efdc34b0e Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 25 Jul 2018 10:07:25 +0100 Subject: [PATCH 458/541] Remove unused import In commit 11bcd2d Remove unused function: valid_date an unused import was left in. With the next commit, tox & travis should fail: F401 'datetime.datetime' imported but unused --- pyt/usage.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/usage.py b/pyt/usage.py index a4ec5d81..7325a7c8 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -1,7 +1,6 @@ import argparse import os import sys -from datetime import datetime default_blackbox_mapping_file = os.path.join( From d55cbc035a72e974de4de4c656b9b3b5ca5ee529 Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 24 Jul 2018 15:03:02 +0100 Subject: [PATCH 459/541] Tox, travis and requirements Requirements: Requirements files aren't used. Requirements.txt and setup.py had odd requirements that I can't see used anywhere. Requirements-dev.txt had conflicting packages (flake8 wants specific versions of pyflakes and pycodestyle). Tox & travis: Split tox into a test, coverage and lint phase. Run either: tox tox -e py36 tox -e cover tox -e lint Tox and travis will now fail the lint / build on flake8 errors to avoid non-compliant code being merged. (--exit-zero removed) Coverage will fail for now, so let's set it really low in travis for now. McCabe complexity is annoying and dealt with better by codeclimate so I bumped it up from 10 to 11 so it won't fail at the moment. --- .travis.yml | 9 ++++----- requirements-dev.txt | 8 -------- requirements.txt | 4 ---- setup.py | 6 +----- tox.ini | 20 ++++++++++++++++---- 5 files changed, 21 insertions(+), 26 deletions(-) delete mode 100644 requirements-dev.txt delete mode 100644 requirements.txt diff --git a/.travis.yml b/.travis.yml index 079eef72..0638ada6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,15 +2,14 @@ language: python python: - "3.6" install: - - pip install -r requirements.txt - - pip install codeclimate-test-reporter flake8 + - pip install codeclimate-test-reporter 'coverage>=4.0,<4.4' flake8 before_script: # stop the build if there are Python syntax errors or undefined names - flake8 . --count --exclude=examples --select=E901,E999,F821,F822,F823 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - - flake8 . --count --exclude=examples --exit-zero --max-complexity=10 --max-line-length=127 --statistics script: - - python -m tests - coverage run -m tests + - flake8 . --count --exclude=examples --max-complexity=11 --max-line-length=127 --show-source --statistics + - coverage report --include=tests/* --fail-under 100 + - coverage report --include=pyt/* --fail-under 91 after_script: - codeclimate-test-reporter diff --git a/requirements-dev.txt b/requirements-dev.txt deleted file mode 100644 index 54e84f37..00000000 --- a/requirements-dev.txt +++ /dev/null @@ -1,8 +0,0 @@ -flake8 -mock -pre-commit -py -pycodestyle -pyflakes -tox -virtualenv diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index f7b38d47..00000000 --- a/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -coverage>=4.0, <4.4 -GitPython==2.0.8 -graphviz==0.4.10 -requests~=2.12 diff --git a/setup.py b/setup.py index 39aa9440..17c81594 100644 --- a/setup.py +++ b/setup.py @@ -30,11 +30,7 @@ 'Programming Language :: Python :: 3.6' ], keywords=['security', 'vulnerability', 'web', 'flask', 'django', 'static-analysis', 'program-analysis'], - install_requires=[ - 'graphviz>=0.4.10', - 'requests>=2.12', - 'GitPython>=2.0.8' - ], + install_requires=[], entry_points={ 'console_scripts': [ 'pyt = pyt:main' diff --git a/tox.ini b/tox.ini index aa701c72..9ea660f5 100644 --- a/tox.ini +++ b/tox.ini @@ -1,14 +1,26 @@ [tox] -envlist = py36 +envlist = py36,cover,lint [testenv] +deps = mock +commands = + python -m tests + +[testenv:cover] whitelist_externals = coverage -deps = -rrequirements-dev.txt +deps = + coverage>=4.0,<4.4 + mock commands = coverage erase coverage run tests coverage report --include=tests/* --fail-under 100 coverage report --include=pyt/* --fail-under 91 + +[testenv:lint] +deps = + flake8 + pre-commit +commands = pre-commit run - flake8 . --count --exclude=examples,venv,.tox --select=E901,E999,F821,F822,F823 --show-source --statistics - flake8 . --count --exclude=examples,venv,.tox,dist --exit-zero --max-complexity=10 --max-line-length=127 --statistics + flake8 . --count --exclude=examples,.env,venv,.tox --show-source --statistics --max-complexity=11 --max-line-length=127 --statistics From e2841be764ff563b4ace44c88dc1ecd138862372 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 18:03:42 +0100 Subject: [PATCH 460/541] Make assertion in main test work assert_called_with does the assertion. The function has return value None. So don't assert assert_called_with. Fixes the "This with: makes no sense" comment. --- tests/main_test.py | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/tests/main_test.py b/tests/main_test.py index 4839da51..b87e4dbf 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -26,12 +26,10 @@ def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args 'parse_args is mocked' ]) assert mock_text.report.call_count == 1 - # This with: makes no sense - with self.assertRaises(AssertionError): - assert mock_text.report.assert_called_with( - mock_find_vulnerabilities.return_value, - mock_parse_args.return_value.output_file - ) + mock_text.report.assert_called_with( + mock_find_vulnerabilities.return_value, + mock_parse_args.return_value.output_file + ) @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @@ -54,12 +52,10 @@ def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args 'parse_args is mocked' ]) assert mock_json.report.call_count == 1 - # This with: makes no sense - with self.assertRaises(AssertionError): - assert mock_json.report.assert_called_with( - mock_find_vulnerabilities.return_value, - mock_parse_args.return_value.output_file - ) + mock_json.report.assert_called_with( + mock_find_vulnerabilities.return_value, + mock_parse_args.return_value.output_file + ) class DiscoverFilesTest(BaseTestCase): From 92fe367cd4921f9af3872a69807a210fb64f0e8c Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 18:20:57 +0100 Subject: [PATCH 461/541] Exit with error code if there are unsanitised vulns To be useful as a linter process such as in a Continuous Integration system, pyt should finish with pass or fail exit codes. Saves having to grep the output. If there are unsanitised vulnerabilities, sys.exit(1). In the future we'll probably want a flag to not print sanitised vulns. --- pyt/__main__.py | 5 +++++ tests/main_test.py | 35 +++++++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 8 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 5eed4747..192eaf99 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -22,6 +22,7 @@ get_vulnerabilities_not_in_baseline, UImode ) +from .vulnerabilities.vulnerability_helper import SanitisedVulnerability from .web_frameworks import ( FrameworkAdaptor, is_django_view_function, @@ -137,6 +138,10 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 else: text.report(vulnerabilities, args.output_file) + has_unsanitized_vulnerabilities = any(not isinstance(v, SanitisedVulnerability) for v in vulnerabilities) + if has_unsanitized_vulnerabilities: + sys.exit(1) + if __name__ == '__main__': main() diff --git a/tests/main_test.py b/tests/main_test.py index b87e4dbf..b01cc8ee 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -16,15 +16,36 @@ def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( - autospec=True, project_root=None, baseline=None, json=None, output_file=output_file ) - main([ - 'parse_args is mocked' - ]) + with self.assertRaises(SystemExit): + main(['parse_args is mocked']) + assert mock_text.report.call_count == 1 + mock_text.report.assert_called_with( + mock_find_vulnerabilities.return_value, + mock_parse_args.return_value.output_file + ) + + @mock.patch('pyt.__main__.discover_files') + @mock.patch('pyt.__main__.parse_args') + @mock.patch('pyt.__main__.find_vulnerabilities') + @mock.patch('pyt.__main__.text') + def test_no_vulns_found(self, mock_text, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): + mock_find_vulnerabilities.return_value = [] + example_file = 'examples/vulnerable_code/inter_command_injection.py' + output_file = 'mocked_outfile' + + mock_discover_files.return_value = [example_file] + mock_parse_args.return_value = mock.Mock( + project_root=None, + baseline=None, + json=None, + output_file=output_file + ) + main(['parse_args is mocked']) # No SystemExit assert mock_text.report.call_count == 1 mock_text.report.assert_called_with( mock_find_vulnerabilities.return_value, @@ -42,15 +63,13 @@ def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( - autospec=True, project_root=None, baseline=None, json=True, output_file=output_file ) - main([ - 'parse_args is mocked' - ]) + with self.assertRaises(SystemExit): + main(['parse_args is mocked']) assert mock_json.report.call_count == 1 mock_json.report.assert_called_with( mock_find_vulnerabilities.return_value, From d4cbde04fc9c30c875244f17e0fe25aba48ffe17 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 18:27:39 +0100 Subject: [PATCH 462/541] Fix pyt console script Can now use just `pyt` exactly like `python -m pyt`. Before there was an error: AttributeError: module 'pyt' has no attribute 'main' --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 17c81594..8d139dc0 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ install_requires=[], entry_points={ 'console_scripts': [ - 'pyt = pyt:main' + 'pyt = pyt.__main__:main' ] } ) From 66f486c5a60c2580c88b1a94c9fa4fec1a0c6c92 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 28 Jul 2018 14:46:44 -0700 Subject: [PATCH 463/541] Add all CHANGELOG additions since version 0.34 --- CHANGELOG.md | 62 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 011e12d5..1f15172c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :tada: New Features #### :sparkles: Usability #### :mortar_board: Walkthrough / Help +#### :performing_arts: Performance #### :telescope: Precision #### :bug: Bugfixes #### :snake: Miscellaneous @@ -26,11 +27,42 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :tada: New Features +* Ability to analyze directories, `-r` Recursive option ([#129], thanks [@omergunal]) +* Added `--dont-prepend-root` option, makes it so that we don't require imports start with `project_root.*` ([#151], thanks [@bcaller]) +* Added `--no-local-imports` option, to require absolute imports be relative to the project root ([#151], thanks [@bcaller]) +* [PEP 498] support, formatted string literals ([#142], thanks [@bcaller]) +* [PEP 526] support, syntax for variable annotations ([#143], thanks [@bcaller]) * Whitelist lines of sources and sinks ending in `# nosec` ([#121], thanks [@omergunal]) -* Ability to analyze directories, -r Recursive option ([#129], thanks [@omergunal]) +[@bcaller]: https://github.com/bcaller +[PEP 498]: https://www.python.org/dev/peps/pep-0498/ +[PEP 526]: https://www.python.org/dev/peps/pep-0526/ [#121]: https://github.com/python-security/pyt/pull/121 [#129]: https://github.com/python-security/pyt/pull/129 +[#142]: https://github.com/python-security/pyt/pull/142 +[#143]: https://github.com/python-security/pyt/pull/143 +[#151]: https://github.com/python-security/pyt/pull/151 + +#### :telescope: Precision + +* Added per-arg taint, for sink functions ([#147], thanks [@bcaller]) +* Improved tuple assingment to be more precise and support starargs ([#150], thanks [@bcaller]) + +[#147]: https://github.com/python-security/pyt/pull/147 +[#150]: https://github.com/python-security/pyt/pull/150 + +#### :bug: Bugfixes +* Fixed a bug where `get_call_names` only handled ast.Attribute nodes ([#148], thanks [@bcaller]) +* Fixed a bug where `vars_visitor.py` crashed on Python 3.5 dict syntax ([#144], thanks [@bcaller]) + +[#144]: https://github.com/python-security/pyt/pull/144 +[#148]: https://github.com/python-security/pyt/pull/148 + +#### :performing_arts: Performance + +* Added an `lru_cache` to the `generate_ast` function ([#153], thanks [@bcaller]) + +[#153]: https://github.com/python-security/pyt/pull/153 #### :mortar_board: Walkthrough / Help @@ -38,16 +70,22 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :snake: Miscellaneous +* Added tests for `vars_visitor.py`, making our overall coverage 91% ([#139], thanks [@stannum-l]) +* Cleaned and organized requirements, `setup.py`, `tox.ini` and `.travis.yml` ([#152], thanks [@bcaller]) +* Cleaned up the new pyt/core/ folder ([#132]) * Fixed all flake8 errors ([#114] & [#130], thanks [@cclauss]) * Re-organized the entire codebase into different directories ([#126]) -* Cleaned up the new pyt/core/ folder ([#132]) +* Return exit code 1 if any non-sanitised vulnerabilities are found ([#156], thanks [@bcaller]) -[#126]: https://github.com/python-security/pyt/pull/126 +[@cclauss]: https://github.com/cclauss +[@stannum-l]: https://github.com/stannum-l [#114]: https://github.com/python-security/pyt/pull/114 +[#126]: https://github.com/python-security/pyt/pull/126 [#130]: https://github.com/python-security/pyt/pull/130 -[@cclauss]: https://github.com/cclauss [#132]: https://github.com/python-security/pyt/pull/132 - +[#139]: https://github.com/python-security/pyt/pull/139 +[#152]: https://github.com/python-security/pyt/pull/152 +[#156]: https://github.com/python-security/pyt/pull/156 # 0.34 ##### April 24, 2018 @@ -56,8 +94,8 @@ If you love PyT, please star our project on GitHub to show your support! :star: * Baseline support ([#106], thanks [@omergunal]) -[#106]: https://github.com/python-security/pyt/pull/106 [@omergunal]: https://github.com/omergunal +[#106]: https://github.com/python-security/pyt/pull/106 #### :sparkles: Usability * Combined all source/sink information files and made it the default ([#116]) @@ -68,20 +106,20 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :bug: Bugfixes * Fixed a bug where `visit_Raise` raised a `TypeError` ([#117], thanks [@lFatty]) -* Fixed an infinite loop bug that was caused while handling certain loops ([#118]) * Fixed a bug where we were not including `pyt/vulnerability_definitions` files ([#122], thanks [@Ekultek]) +* Fixed an infinite loop bug that was caused while handling certain loops ([#118]) #### :snake: Miscellaneous * Moved out a bunch of historical files to the [ReadTheDocs repo](https://github.com/KevinHock/rtdpyt) ([#110], [#111]) -[#116]: https://github.com/python-security/pyt/pull/116 +[@Ekultek]: https://github.com/Ekultek +[@lfatty]: https://github.com/lfatty +[#110]: https://github.com/python-security/pyt/pull/110 +[#111]: https://github.com/python-security/pyt/pull/111 [#115]: https://github.com/python-security/pyt/pull/115 +[#116]: https://github.com/python-security/pyt/pull/116 [#119]: https://github.com/python-security/pyt/pull/119 [#117]: https://github.com/python-security/pyt/pull/117 [#118]: https://github.com/python-security/pyt/pull/118 -[#111]: https://github.com/python-security/pyt/pull/111 -[#110]: https://github.com/python-security/pyt/pull/110 -[@lfatty]: https://github.com/lfatty [#122]: https://github.com/python-security/pyt/issues/122 -[@Ekultek]: https://github.com/Ekultek From dec57bdb13e0a03216ac8effa7406a7caf495b95 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 28 Jul 2018 14:50:18 -0700 Subject: [PATCH 464/541] [version] Bump to 0.35 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 8d139dc0..59244cda 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.34' +VERSION = '0.35' setup( From 23b51da46c225ce72ff83a3966bc46322419d9df Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 11:06:53 +0100 Subject: [PATCH 465/541] Yield propagates taint of everything yielded not just the last thing yielded as before. It behaves like a cross between AugAssign (everything yielded is added to yld_* return variable) and Return (we make a yld_* return variable though don't immediately exit the function). --- .../generator_with_multiple_yields.py | 7 +++ examples/vulnerable_code/yield.py | 21 ++++++++ pyt/cfg/expr_visitor.py | 51 +++++++++++-------- pyt/core/README.rst | 2 +- pyt/core/node_types.py | 8 +++ pyt/vulnerabilities/vulnerability_helper.py | 9 ++++ tests/cfg/cfg_test.py | 36 +++++++++++++ tests/main_test.py | 4 +- tests/vulnerabilities/vulnerabilities_test.py | 25 +++++++++ 9 files changed, 139 insertions(+), 24 deletions(-) create mode 100644 examples/example_inputs/generator_with_multiple_yields.py create mode 100644 examples/vulnerable_code/yield.py diff --git a/examples/example_inputs/generator_with_multiple_yields.py b/examples/example_inputs/generator_with_multiple_yields.py new file mode 100644 index 00000000..46d78682 --- /dev/null +++ b/examples/example_inputs/generator_with_multiple_yields.py @@ -0,0 +1,7 @@ +def foo(): + a = 1 + if a == 1: + yield 0 + yield a + +foo() diff --git a/examples/vulnerable_code/yield.py b/examples/vulnerable_code/yield.py new file mode 100644 index 00000000..9c6a3e1b --- /dev/null +++ b/examples/vulnerable_code/yield.py @@ -0,0 +1,21 @@ +import subprocess +from flask import Flask, request + +app = Flask(__name__) + + +def things_to_run(): + yield "echo hello" + yield from request.get_json()["commands"] + yield "echo done" + + +@app.route('/', methods=['POST']) +def home(): + script = "; ".join(things_to_run()) + subprocess.call(script, shell=True) + return 'Executed' + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index f4d99d6a..a3c281f6 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -15,7 +15,8 @@ IgnoredNode, Node, RestoreNode, - ReturnNode + ReturnNode, + YieldNode ) from .expr_visitor_helper import ( BUILTINS, @@ -119,16 +120,20 @@ def visit_Yield(self, node): except AttributeError: rhs_visitor.result = 'EmptyYield' + # Yield is a bit like augmented assignment to a return value this_function_name = self.function_return_stack[-1] - LHS = 'yield_' + this_function_name - return self.append_node(ReturnNode( - LHS + ' = ' + label.result, + LHS = 'yld_' + this_function_name + return self.append_node(YieldNode( + LHS + ' += ' + label.result, LHS, node, - rhs_visitor.result, + rhs_visitor.result + [LHS], path=self.filenames[-1]) ) + def visit_YieldFrom(self, node): + return self.visit_Yield(node) + def visit_Attribute(self, node): return self.visit_miscelleaneous_node( node @@ -449,24 +454,28 @@ def return_handler( saved_function_call_index(int): Unique number for each call. first_node(EntryOrExitNode or RestoreNode): Used to connect previous statements to this function. """ - for node in function_nodes: + if any(isinstance(node, YieldNode) for node in function_nodes): + # Presence of a `YieldNode` means that the function is a generator + rhs_prefix = 'yld_' + elif any(isinstance(node, ConnectToExitNode) for node in function_nodes): # Only `Return`s and `Raise`s can be of type ConnectToExitNode - if isinstance(node, ConnectToExitNode): - # Create e.g. ~call_1 = ret_func_foo RestoreNode - LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) - RHS = 'ret_' + get_call_names_as_string(call_node.func) - return_node = RestoreNode( - LHS + ' = ' + RHS, - LHS, - [RHS], - line_number=call_node.lineno, - path=self.filenames[-1] - ) - return_node.first_node = first_node + rhs_prefix = 'ret_' + else: + return # No return value - self.nodes[-1].connect(return_node) - self.nodes.append(return_node) - return + # Create e.g. ~call_1 = ret_func_foo RestoreNode + LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) + RHS = rhs_prefix + get_call_names_as_string(call_node.func) + return_node = RestoreNode( + LHS + ' = ' + RHS, + LHS, + [RHS], + line_number=call_node.lineno, + path=self.filenames[-1] + ) + return_node.first_node = first_node + self.nodes[-1].connect(return_node) + self.nodes.append(return_node) def process_function(self, call_node, definition): """Processes a user defined function when it is called. diff --git a/pyt/core/README.rst b/pyt/core/README.rst index becfa660..75ae7239 100644 --- a/pyt/core/README.rst +++ b/pyt/core/README.rst @@ -9,7 +9,7 @@ This directory contains miscellaneous code that is imported from different parts - `get_call_names`_ used in `vars_visitor.py`_ when visiting a Subscript, and `framework_helper.py`_ on function decorators in `is_flask_route_function`_ -- `get_call_names_as_string`_ used in `expr_visitor.py`_ to create ret_function_name as RHS and yield_function_name as LHS, and in stmt_visitor.py when connecting a function to a loop. +- `get_call_names_as_string`_ used in `expr_visitor.py`_ to create ret_function_name as RHS and yld_function_name as LHS, and in stmt_visitor.py when connecting a function to a loop. - `Arguments`_ used in `expr_visitor.py`_ when processing the arguments of a user defined function and `framework_adaptor.py`_ to taint function definition arguments. diff --git a/pyt/core/node_types.py b/pyt/core/node_types.py index 5981c5e8..28df3d77 100644 --- a/pyt/core/node_types.py +++ b/pyt/core/node_types.py @@ -285,3 +285,11 @@ def __init__( line_number=ast_node.lineno, path=path ) + + +class YieldNode(AssignmentNode): + """CFG Node that represents a yield or yield from. + + The presence of a YieldNode means that a function is a generator. + """ + pass diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index 80a37491..8c3b84a4 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -4,6 +4,8 @@ from enum import Enum from collections import namedtuple +from ..core.node_types import YieldNode + class VulnerabilityType(Enum): FALSE = 0 @@ -56,6 +58,7 @@ def __init__( self.reassignment_nodes = reassignment_nodes self._remove_sink_from_secondary_nodes() + self._remove_non_propagating_yields() def _remove_sink_from_secondary_nodes(self): try: @@ -63,6 +66,12 @@ def _remove_sink_from_secondary_nodes(self): except ValueError: # pragma: no cover pass + def _remove_non_propagating_yields(self): + """Remove yield with no variables e.g. `yield 123` and plain `yield` from vulnerability.""" + for node in list(self.reassignment_nodes): + if isinstance(node, YieldNode) and len(node.right_hand_side_variables) == 1: + self.reassignment_nodes.remove(node) + def __str__(self): """Pretty printing of a vulnerability.""" reassigned_str = _get_reassignment_str(self.reassignment_nodes) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index 9bea8514..64ee5bf2 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -995,6 +995,42 @@ def test_function_multiple_return(self): (call_foo, exit_foo), (_exit, call_foo)]) + def test_generator_multiple_yield(self): + path = 'examples/example_inputs/generator_with_multiple_yields.py' + self.cfg_create_from_file(path) + + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + entry_foo = 1 + a = 2 + _if = 3 + yld_if = 4 + yld = 5 + exit_foo = 6 + call_foo = 7 + _exit = 8 + + self.assertInCfg([ + (entry_foo, entry), + (a, entry_foo), + (_if, a), + (yld_if, _if), + (yld, _if), + (yld, yld_if), # Different from return + (exit_foo, yld), + (call_foo, exit_foo), + (_exit, call_foo) + ]) + + yld_if_node = self.cfg.nodes[yld_if] + self.assertEqual(yld_if_node.left_hand_side, 'yld_foo') + self.assertEqual(yld_if_node.right_hand_side_variables, ['yld_foo']) + yld_node = self.cfg.nodes[yld] + self.assertEqual(yld_node.left_hand_side, 'yld_foo') + self.assertEqual(yld_node.right_hand_side_variables, ['a', 'yld_foo']) + self.assertEqual(self.cfg.nodes[call_foo].right_hand_side_variables, ['yld_foo']) + def test_blackbox_call_after_if(self): path = 'examples/vulnerable_code/blackbox_call_after_if.py' self.cfg_create_from_file(path) diff --git a/tests/main_test.py b/tests/main_test.py index b01cc8ee..b3b94b6d 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -99,11 +99,11 @@ def test_targets_with_recursive(self): excluded_files = "" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 30) + self.assertEqual(len(included_files), 31) def test_targets_with_recursive_and_excluded(self): targets = ["examples/vulnerable_code/"] excluded_files = "inter_command_injection.py" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 29) + self.assertEqual(len(included_files), 30) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 20d142ba..04267140 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -492,6 +492,31 @@ def test_XSS_variable_multiple_assign_result(self): self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + def test_yield(self): + vulnerabilities = self.run_analysis('examples/vulnerable_code/yield.py') + self.assert_length(vulnerabilities, expected_length=1) + vuln = vulnerabilities[0] + self.assertEqual(vuln.source.left_hand_side, "yld_things_to_run") + self.assertIn("yld_things_to_run", vuln.source.right_hand_side_variables) + EXPECTED_VULNERABILITY_DESCRIPTION = """ + File: examples/vulnerable_code/yield.py + > User input at line 9, source "request.get_json(": + yld_things_to_run += request.get_json()['commands'] + Reassigned in: + File: examples/vulnerable_code/yield.py + > Line 15: ~call_2 = yld_things_to_run + File: examples/vulnerable_code/yield.py + > Line 15: ~call_1 = ret_'; '.join(~call_2) + File: examples/vulnerable_code/yield.py + > Line 15: script = ~call_1 + File: examples/vulnerable_code/yield.py + > reaches line 16, sink "subprocess.call(": + ~call_3 = ret_subprocess.call(script, shell=True) + This vulnerability is unknown due to: Label: ~call_1 = ret_'; '.join(~call_2) + """ + + self.assertAlphaEqual(str(vuln), EXPECTED_VULNERABILITY_DESCRIPTION) + class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): From 25eb536b32417378f31206cc75915bae0b11cc05 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 11:39:20 +0100 Subject: [PATCH 466/541] Remove unnecessary and incorrect type EmptyYield It was a str when it should've been a List[str] --- pyt/cfg/expr_visitor.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index a3c281f6..6623d717 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -114,11 +114,10 @@ def visit_Yield(self, node): label = LabelVisitor() label.visit(node) - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyYield' + if node.value is None: + rhs_visitor_result = [] + else: + rhs_visitor_result = RHSVisitor.result_for_node(node.value) # Yield is a bit like augmented assignment to a return value this_function_name = self.function_return_stack[-1] @@ -127,7 +126,7 @@ def visit_Yield(self, node): LHS + ' += ' + label.result, LHS, node, - rhs_visitor.result + [LHS], + rhs_visitor_result + [LHS], path=self.filenames[-1]) ) From ff0e04273a263b9a497429fec6d3b72532cdf4f3 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 12:13:10 +0100 Subject: [PATCH 467/541] Remove unnecessary and incorrect type EmptyReturn It was a str instead of List[str] --- pyt/cfg/stmt_visitor.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index faccb94b..e64ee163 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -244,12 +244,6 @@ def visit_Return(self, node): label = LabelVisitor() label.visit(node) - try: - rhs_visitor = RHSVisitor() - rhs_visitor.visit(node.value) - except AttributeError: - rhs_visitor.result = 'EmptyReturn' - this_function_name = self.function_return_stack[-1] LHS = 'ret_' + this_function_name @@ -263,14 +257,17 @@ def visit_Return(self, node): path=self.filenames[-1] ) return_value_of_call.connect(return_node) - self.nodes.append(return_node) - return return_node + return self.append_node(return_node) + elif node.value is not None: + rhs_visitor_result = RHSVisitor.result_for_node(node.value) + else: + rhs_visitor_result = [] return self.append_node(ReturnNode( LHS + ' = ' + label.result, LHS, node, - rhs_visitor.result, + rhs_visitor_result, path=self.filenames[-1] )) From 04b29c65cfdd2592463b4ea641c6b584d7d1ee65 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 27 Jul 2018 12:54:37 +0100 Subject: [PATCH 468/541] AugAssign propagates taint Before, the variable would be tainted only if the last += was tainted. Now url = 'http://' url += TAINT url += '?x=y' url marked as tainted. --- pyt/cfg/stmt_visitor.py | 5 +++-- tests/cfg/cfg_test.py | 8 ++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index e64ee163..4acfea20 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -499,11 +499,12 @@ def visit_AugAssign(self, node): rhs_visitor = RHSVisitor() rhs_visitor.visit(node.value) + lhs = extract_left_hand_side(node.target) return self.append_node(AssignmentNode( label.result, - extract_left_hand_side(node.target), + lhs, node, - rhs_visitor.result, + rhs_visitor.result + [lhs], path=self.filenames[-1] )) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index 64ee5bf2..1d317fc5 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -820,6 +820,14 @@ def test_assignment_starred_list(self): [('a', ['d']), ('b', ['d']), ('c', ['e'])], ) + def test_augmented_assignment(self): + self.cfg_create_from_ast(ast.parse('a+=f(b,c)')) + + (node,) = self.cfg.nodes[1:-1] + self.assertEqual(node.label, 'a += f(b, c)') + self.assertEqual(node.left_hand_side, 'a') + self.assertEqual(node.right_hand_side_variables, ['b', 'c', 'a']) + class CFGComprehensionTest(CFGBaseTestCase): def test_nodes(self): From 97f99a061f2d65405dadc04f9ab4942d9d786d44 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 30 Jul 2018 18:25:48 -0700 Subject: [PATCH 469/541] [version] Bump to 0.36 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 59244cda..a03dd6e5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.35' +VERSION = '0.36' setup( From 76be3218525b7b24b567a709a5ebd492c0ab8585 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 30 Jul 2018 19:27:02 -0700 Subject: [PATCH 470/541] Add __init_ files to pyt/analysis and pyt/core --- pyt/analysis/__init__.py | 0 pyt/core/__init__.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 pyt/analysis/__init__.py create mode 100644 pyt/core/__init__.py diff --git a/pyt/analysis/__init__.py b/pyt/analysis/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/pyt/core/__init__.py b/pyt/core/__init__.py new file mode 100644 index 00000000..e69de29b From bc3200ccb45b5af4f79005c75677eb8ae23bf532 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 30 Jul 2018 19:27:41 -0700 Subject: [PATCH 471/541] [version] Bump to 0.37 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index a03dd6e5..edf41be0 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.36' +VERSION = '0.37' setup( From 5b7d06b0ec5840b69f41d3678930fc6a2675d311 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Mon, 30 Jul 2018 19:47:40 -0700 Subject: [PATCH 472/541] Changed Unreleased to 0.37 And added #155 notes --- CHANGELOG.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f15172c..6b487727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,7 +23,8 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@xxxx]: https://github.com/xxxx --> -# Unreleased +# 0.37 +##### July 30, 2018 #### :tada: New Features @@ -47,9 +48,11 @@ If you love PyT, please star our project on GitHub to show your support! :star: * Added per-arg taint, for sink functions ([#147], thanks [@bcaller]) * Improved tuple assingment to be more precise and support starargs ([#150], thanks [@bcaller]) +* AugAssign, Yield, and YieldFrom taint propagation improvements ([#155], thanks [@bcaller]) [#147]: https://github.com/python-security/pyt/pull/147 [#150]: https://github.com/python-security/pyt/pull/150 +[#155]: https://github.com/python-security/pyt/pull/155 #### :bug: Bugfixes * Fixed a bug where `get_call_names` only handled ast.Attribute nodes ([#148], thanks [@bcaller]) From de30591cf9ffcae71de3725fdd1b9ee529b53c64 Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 31 Jul 2018 10:20:28 +0100 Subject: [PATCH 473/541] Transform all async ast nodes into sync nodes so that they can be handled identically. Sync and async nodes propagate taint in exactly the same way. Awaits are more or less removed: `return await x()` is converted into `return x()`. Any AsyncFunctionDef is converted to a FunctionDef. Same for AsyncFor and AsyncWith. Using a transformer makes it easier to replace awaits everywhere. We have lots of places where we do `isinstance(node, ast.Call)` but for these we want it to function like `isinstance(node, ast.Call) or (isinstance(node, ast.Await) and isinstance(node.value, ast.Call))` --- examples/example_inputs/asynchronous.py | 10 +++++++ pyt/core/ast_helper.py | 5 +++- pyt/core/transformer.py | 18 +++++++++++++ pyt/helper_visitors/vars_visitor.py | 3 --- tests/cfg/cfg_test.py | 22 +++++++++++++++ tests/core/transformer_test.py | 36 +++++++++++++++++++++++++ 6 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 examples/example_inputs/asynchronous.py create mode 100644 pyt/core/transformer.py create mode 100644 tests/core/transformer_test.py diff --git a/examples/example_inputs/asynchronous.py b/examples/example_inputs/asynchronous.py new file mode 100644 index 00000000..dff4fdc9 --- /dev/null +++ b/examples/example_inputs/asynchronous.py @@ -0,0 +1,10 @@ +async def g(x, *args): + return await x() + + +async def f(y): + z = await g(y, await v) + return z + + +f(w) diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 3d17b7f0..9a16267c 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -6,6 +6,8 @@ import subprocess from functools import lru_cache +from .transformer import AsyncTransformer + BLACK_LISTED_CALL_NAMES = ['self'] recursive = False @@ -32,7 +34,8 @@ def generate_ast(path): if os.path.isfile(path): with open(path, 'r') as f: try: - return ast.parse(f.read()) + tree = ast.parse(f.read()) + return AsyncTransformer().visit(tree) except SyntaxError: # pragma: no cover global recursive if not recursive: diff --git a/pyt/core/transformer.py b/pyt/core/transformer.py new file mode 100644 index 00000000..12051c89 --- /dev/null +++ b/pyt/core/transformer.py @@ -0,0 +1,18 @@ +import ast + + +class AsyncTransformer(ast.NodeTransformer): + """Converts all async nodes into their synchronous counterparts.""" + + def visit_Await(self, node): + """Awaits are treated as if the keyword was absent.""" + return self.visit(node.value) + + def visit_AsyncFunctionDef(self, node): + return self.visit(ast.FunctionDef(**node.__dict__)) + + def visit_AsyncFor(self, node): + return self.visit(ast.For(**node.__dict__)) + + def visit_AsyncWith(self, node): + return self.visit(ast.With(**node.__dict__)) diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index 272744d8..9708f86f 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -68,9 +68,6 @@ def visit_GeneratorComp(self, node): for gen in node.generators: self.comprehension(gen) - def visit_Await(self, node): - self.visit(node.value) - def visit_Yield(self, node): if node.value: self.visit(node.value) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index 1d317fc5..cc2df076 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -1446,6 +1446,28 @@ def test_name_constant_if(self): self.assertEqual(expected_label, actual_label) +class CFGAsync(CFGBaseTestCase): + def test_await_keyword_treated_as_if_absent(self): + self.cfg_create_from_file('examples/example_inputs/asynchronous.py') + enter_g = 8 + call_x = 9 + ret_g = 10 + exit_g = 11 + call_ret_val = 12 + set_z_to_g_ret_val = 13 + + for i in range(enter_g, set_z_to_g_ret_val + 1): + self.assertIn(self.cfg.nodes[i], self.cfg.nodes[i + 1].ingoing) + self.assertIn(self.cfg.nodes[i + 1], self.cfg.nodes[i].outgoing) + + self.assertIsInstance(self.cfg.nodes[enter_g], EntryOrExitNode) + self.assertEqual(self.cfg.nodes[call_x].label, '~call_3 = ret_x()') + self.assertEqual(self.cfg.nodes[ret_g].label, 'ret_g = ~call_3') + self.assertIsInstance(self.cfg.nodes[exit_g], EntryOrExitNode) + self.assertEqual(self.cfg.nodes[call_ret_val].label, '~call_2 = ret_g') + self.assertEqual(self.cfg.nodes[set_z_to_g_ret_val].label, 'z = ~call_2') + + class CFGName(CFGBaseTestCase): """Test is Name nodes are properly handled in different contexts""" diff --git a/tests/core/transformer_test.py b/tests/core/transformer_test.py new file mode 100644 index 00000000..8233287b --- /dev/null +++ b/tests/core/transformer_test.py @@ -0,0 +1,36 @@ +import ast +import unittest + +from pyt.core.transformer import AsyncTransformer + + +class TransformerTest(unittest.TestCase): + """Tests for the AsyncTransformer.""" + + def test_async_removed_by_transformer(self): + async_tree = ast.parse("\n".join([ + "async def a():", + " async for b in c():", + " await b()", + " async with d() as e:", + " pass", + " return await y()" + ])) + self.assertIsInstance(async_tree.body[0], ast.AsyncFunctionDef) + self.assertIsInstance(async_tree.body[0].body[-1], ast.Return) + self.assertIsInstance(async_tree.body[0].body[-1].value, ast.Await) + + sync_tree = ast.parse("\n".join([ + "def a():", + " for b in c():", + " b()", + " with d() as e:", + " pass", + " return y()" + ])) + self.assertIsInstance(sync_tree.body[0], ast.FunctionDef) + + transformed = AsyncTransformer().visit(async_tree) + self.assertIsInstance(transformed.body[0], ast.FunctionDef) + + self.assertEqual(ast.dump(transformed), ast.dump(sync_tree)) From d626efc6c45dc9cfdee4737dd4957f1047f1cf6a Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 31 Jul 2018 12:59:33 -0700 Subject: [PATCH 474/541] Remove references to dependencies we no longer have --- README.rst | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/README.rst b/README.rst index 0870edc0..f536217e 100644 --- a/README.rst +++ b/README.rst @@ -149,18 +149,4 @@ Change to project directory ``cd pyt`` -Install dependencies - -``pip install -r requirements.txt`` - -``pip list`` sample output :: - - gitdb (0.6.4) - GitPython (2.0.8) - graphviz (0.4.10) - pip (9.0.1) - requests (2.10.0) - setuptools (28.8.0) - smmap (0.9.0) - In the future, just type ``source ~/a_folder/bin/activate`` to start developing. From b1556a1de8c0129126cd631b8f7b86fc99588a4b Mon Sep 17 00:00:00 2001 From: KevinHock Date: Tue, 31 Jul 2018 16:56:11 -0700 Subject: [PATCH 475/541] Added more backticks --- CHANGELOG.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b487727..15a60fae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -55,7 +55,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#155]: https://github.com/python-security/pyt/pull/155 #### :bug: Bugfixes -* Fixed a bug where `get_call_names` only handled ast.Attribute nodes ([#148], thanks [@bcaller]) +* Fixed a bug where `get_call_names` only handled `ast.Attribute` nodes ([#148], thanks [@bcaller]) * Fixed a bug where `vars_visitor.py` crashed on Python 3.5 dict syntax ([#144], thanks [@bcaller]) [#144]: https://github.com/python-security/pyt/pull/144 @@ -69,13 +69,13 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :mortar_board: Walkthrough / Help -* Added README.rst files to almost every directory. (Partially [#126]) +* Added `README.rst` files to almost every directory. (Partially [#126]) #### :snake: Miscellaneous * Added tests for `vars_visitor.py`, making our overall coverage 91% ([#139], thanks [@stannum-l]) * Cleaned and organized requirements, `setup.py`, `tox.ini` and `.travis.yml` ([#152], thanks [@bcaller]) -* Cleaned up the new pyt/core/ folder ([#132]) +* Cleaned up the new `pyt/core/` folder ([#132]) * Fixed all flake8 errors ([#114] & [#130], thanks [@cclauss]) * Re-organized the entire codebase into different directories ([#126]) * Return exit code 1 if any non-sanitised vulnerabilities are found ([#156], thanks [@bcaller]) From a3081c098f34b0748f742bb60af083da335da15d Mon Sep 17 00:00:00 2001 From: "Daniel M. Capella" Date: Wed, 1 Aug 2018 14:02:10 -0400 Subject: [PATCH 476/541] mock is included in unittest since Python 3.3 https://docs.python.org/3/library/unittest.mock.html "Pyt runs on python 3.6+": https://github.com/python-security/pyt/commit/609acd6ca7e3800f21e82d5e3736e8112a91b49c#r29924039 --- tests/main_test.py | 2 +- tox.ini | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/main_test.py b/tests/main_test.py index b3b94b6d..1037d843 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -1,4 +1,4 @@ -import mock +from unittest import mock from .base_test_case import BaseTestCase from pyt.__main__ import discover_files, main diff --git a/tox.ini b/tox.ini index 9ea660f5..c9b4b248 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,6 @@ envlist = py36,cover,lint [testenv] -deps = mock commands = python -m tests @@ -10,7 +9,6 @@ commands = whitelist_externals = coverage deps = coverage>=4.0,<4.4 - mock commands = coverage erase coverage run tests From 0038b1e2ea92b7e38bd7f94e52380d7514830aa8 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 2 Aug 2018 18:42:04 -0700 Subject: [PATCH 477/541] Only write to blackbox mapping if in interactive mode --- pyt/vulnerabilities/vulnerabilities.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 7fd14cd7..f169c4b2 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -540,6 +540,9 @@ def find_vulnerabilities( vulnerabilities, nosec_lines ) - with open(blackbox_mapping_file, 'w') as outfile: - json.dump(blackbox_mapping, outfile, indent=4) + + if ui_mode == UImode.INTERACTIVE: + with open(blackbox_mapping_file, 'w') as outfile: + json.dump(blackbox_mapping, outfile, indent=4) + return vulnerabilities From a58c7482c6f6818c79e5a911a03cc774bce54daa Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Thu, 2 Aug 2018 18:43:27 -0700 Subject: [PATCH 478/541] [version] Bump to 0.38 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index edf41be0..c6b082f4 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.37' +VERSION = '0.38' setup( From 3d722eb54e5283f3ad1ee7693c83d3ad22932de5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:01:57 -0700 Subject: [PATCH 479/541] Added 0.38 Notes --- CHANGELOG.md | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 15a60fae..19222a31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,8 +23,30 @@ If you love PyT, please star our project on GitHub to show your support! :star: [@xxxx]: https://github.com/xxxx --> +# 0.38 +##### August 2nd, 2018 + +#### :tada: New Features + +* Support for all async node types ([#158], thanks [@bcaller]) + +[#158]: https://github.com/python-security/pyt/pull/158 + +#### :bug: Bugfixes +* Fixed a bug where we [wrote to the default_blackbox_mapping file](https://github.com/python-security/pyt/commit/0038b1e2ea92b7e38bd7f94e52380d7514830aa8) even if the `-i` option was not being used. ([#161], thanks [@polyzen]) + +[@polyzen]: https://github.com/polyzen +[#161]: https://github.com/python-security/pyt/issues/161 + +#### :snake: Miscellaneous + +* Switched to using built-in mock ([#160], thanks [@polyzen]) + +[#160]: https://github.com/python-security/pyt/pull/160 + + # 0.37 -##### July 30, 2018 +##### July 30th, 2018 #### :tada: New Features @@ -91,7 +113,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#156]: https://github.com/python-security/pyt/pull/156 # 0.34 -##### April 24, 2018 +##### April 24th, 2018 #### :tada: New Features From 3126aae3f2d790918374356db568a4d25764fc93 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:19:38 -0700 Subject: [PATCH 480/541] Update README.rst --- pyt/web_frameworks/README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyt/web_frameworks/README.rst b/pyt/web_frameworks/README.rst index f7292756..e410e5ff 100644 --- a/pyt/web_frameworks/README.rst +++ b/pyt/web_frameworks/README.rst @@ -1,3 +1,6 @@ +Web Frameworks +============== + This code determines which functions have their arguments marked at tainted, for example by default the framework adaptor is Flask, so .. code-block:: python From b6129cf5e7676ded5802f4a93a15614675e24c21 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:33:54 -0700 Subject: [PATCH 481/541] Separated the important options from the rest This readme is shitty, I need to improve it --- README.rst | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/README.rst b/README.rst index f536217e..5c6f767f 100644 --- a/README.rst +++ b/README.rst @@ -72,10 +72,18 @@ Usage required arguments: targets source file(s) or directory(s) to be tested - optional arguments: + important optional arguments: -a ADAPTOR, --adaptor ADAPTOR Choose a web framework adaptor: Flask(Default), Django, Every or Pylons + + -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE + Input file with a list of sources and sinks + + -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE + Input blackbox mapping file + + optional arguments: -pr PROJECT_ROOT, --project-root PROJECT_ROOT Add project root, only important when the entry file is not at the root of the project. @@ -83,10 +91,6 @@ Usage Path of a baseline report to compare against (only JSON-formatted files are accepted) -j, --json Prints JSON instead of report. - -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE - Input blackbox mapping file. - -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE - Input file with a list of sources and sinks -o OUTPUT_FILE, --output OUTPUT_FILE write report to filename --ignore-nosec do not skip lines with # nosec comments @@ -94,6 +98,7 @@ Usage -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS Separate files with commas + print arguments: -trim, --trim-reassigned-in Trims the reassigned list to just the vulnerability @@ -101,6 +106,25 @@ Usage -i, --interactive Will ask you about each blackbox function call in vulnerability chains. +Choosing a Web Framework +======================== + +`The -a option chooses what functions will have their arguments tainted`_ + +.. _The -a option chooses what functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks + +Configuring Source and Sink Information +======================================= + +Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. + +.. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt + +For functions that are imported from libraries, use the ``-m`` option to specify whether or not they +return tainted values given tainted inputs, by `default this file is used`_. + +.. _default this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json) + Usage from Source ================= From 8e5e0a9f4b8565979dabcb44ee37d516cb70b0a9 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:43:29 -0700 Subject: [PATCH 482/541] Added `How To Use` section --- README.rst | 37 +++++++++++++++++-------------------- 1 file changed, 17 insertions(+), 20 deletions(-) diff --git a/README.rst b/README.rst index 5c6f767f..98534834 100644 --- a/README.rst +++ b/README.rst @@ -54,10 +54,26 @@ PyT can also be installed from source. To do so, clone the repo, and then run: How It Works ============ -Soon you will find a README.rst in every directory in the pyt folder, `start here`_. +Soon you will find a `README.rst`_ in every directory in the ``pyt/`` folder, `start here`_. +.. _README.rst: https://github.com/python-security/pyt/tree/master/pyt .. _start here: https://github.com/python-security/pyt/tree/master/pyt + +How To Use +============ + +1. Choose a web framework: `The -a option chooses what functions will have their arguments tainted`_, by default it is Flask. + +2. (optional) Customize source and sink information: Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. + +3. (optional) Customize which library functions propagate taint: For functions that are imported from libraries, e.g. ``url_for`` or ``os.path.join``, use the ``-m`` option to specify whether or not they return tainted values given tainted inputs, by `default this file is used`_. + +.. _The -a option chooses what functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks +.. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt +.. _default this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json + + Usage ===== @@ -106,25 +122,6 @@ Usage -i, --interactive Will ask you about each blackbox function call in vulnerability chains. -Choosing a Web Framework -======================== - -`The -a option chooses what functions will have their arguments tainted`_ - -.. _The -a option chooses what functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks - -Configuring Source and Sink Information -======================================= - -Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. - -.. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt - -For functions that are imported from libraries, use the ``-m`` option to specify whether or not they -return tainted values given tainted inputs, by `default this file is used`_. - -.. _default this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json) - Usage from Source ================= From 572257179e86931ecb8a4ce5d77474391ae5c449 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:43:49 -0700 Subject: [PATCH 483/541] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 98534834..2e17f70d 100644 --- a/README.rst +++ b/README.rst @@ -51,7 +51,7 @@ PyT can also be installed from source. To do so, clone the repo, and then run: python3 setup.py install -How It Works +How it Works ============ Soon you will find a `README.rst`_ in every directory in the ``pyt/`` folder, `start here`_. @@ -60,7 +60,7 @@ Soon you will find a `README.rst`_ in every directory in the ``pyt/`` folder, `s .. _start here: https://github.com/python-security/pyt/tree/master/pyt -How To Use +How to Use ============ 1. Choose a web framework: `The -a option chooses what functions will have their arguments tainted`_, by default it is Flask. From 4332e005399bbf606420d4a199f458cf8ad1e3b8 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:44:31 -0700 Subject: [PATCH 484/541] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 2e17f70d..74a0bad9 100644 --- a/README.rst +++ b/README.rst @@ -63,13 +63,13 @@ Soon you will find a `README.rst`_ in every directory in the ``pyt/`` folder, `s How to Use ============ -1. Choose a web framework: `The -a option chooses what functions will have their arguments tainted`_, by default it is Flask. +1. Choose a web framework: `The -a option determines which functions will have their arguments tainted`_, by default it is Flask. 2. (optional) Customize source and sink information: Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. 3. (optional) Customize which library functions propagate taint: For functions that are imported from libraries, e.g. ``url_for`` or ``os.path.join``, use the ``-m`` option to specify whether or not they return tainted values given tainted inputs, by `default this file is used`_. -.. _The -a option chooses what functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks +.. _The -a option determines which functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks .. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt .. _default this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/blackbox_mapping.json From 7d35be38c856e1b7b417afbd494eacbd9f0d8752 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:45:09 -0700 Subject: [PATCH 485/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 74a0bad9..c4c60b63 100644 --- a/README.rst +++ b/README.rst @@ -119,7 +119,7 @@ Usage -trim, --trim-reassigned-in Trims the reassigned list to just the vulnerability chain. - -i, --interactive Will ask you about each blackbox function call in + -i, --interactive Will ask you about each blackbox function call in vulnerability chains. Usage from Source From e4e0805efc15611077be8f8f0aad6e3c569fa730 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:46:18 -0700 Subject: [PATCH 486/541] Update README.rst --- README.rst | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index c4c60b63..7ed85f0b 100644 --- a/README.rst +++ b/README.rst @@ -108,9 +108,9 @@ Usage JSON-formatted files are accepted) -j, --json Prints JSON instead of report. -o OUTPUT_FILE, --output OUTPUT_FILE - write report to filename - --ignore-nosec do not skip lines with # nosec comments - -r, --recursive find and process files in subdirectories + Write report to filename + --ignore-nosec Do not skip lines with # nosec comments + -r, --recursive Find and process files in subdirectories -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS Separate files with commas From 92fa3b71ec39d0682be3d6f0e54c729c8906cee6 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:47:41 -0700 Subject: [PATCH 487/541] Update README.rst --- README.rst | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 7ed85f0b..4f413d00 100644 --- a/README.rst +++ b/README.rst @@ -102,15 +102,21 @@ Usage optional arguments: -pr PROJECT_ROOT, --project-root PROJECT_ROOT Add project root, only important when the entry file - is not at the root of the project. + is not at the root of the project + -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE Path of a baseline report to compare against (only JSON-formatted files are accepted) - -j, --json Prints JSON instead of report. + + -j, --json Prints JSON instead of report + -o OUTPUT_FILE, --output OUTPUT_FILE Write report to filename + --ignore-nosec Do not skip lines with # nosec comments + -r, --recursive Find and process files in subdirectories + -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS Separate files with commas From 70257a719c3e496c6f5e3305ddb106d76e3e34c5 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 2 Aug 2018 19:49:51 -0700 Subject: [PATCH 488/541] Update README.rst --- README.rst | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.rst b/README.rst index 4f413d00..5c44f15a 100644 --- a/README.rst +++ b/README.rst @@ -63,11 +63,17 @@ Soon you will find a `README.rst`_ in every directory in the ``pyt/`` folder, `s How to Use ============ -1. Choose a web framework: `The -a option determines which functions will have their arguments tainted`_, by default it is Flask. +1. Choose a web framework -2. (optional) Customize source and sink information: Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. +`The -a option determines which functions will have their arguments tainted`_, by default it is Flask. -3. (optional) Customize which library functions propagate taint: For functions that are imported from libraries, e.g. ``url_for`` or ``os.path.join``, use the ``-m`` option to specify whether or not they return tainted values given tainted inputs, by `default this file is used`_. +2. (optional) Customize source and sink information + +Use the ``-t`` option to specify sources and sinks, by default `this file is used`_. + +3. (optional) Customize which library functions propagate taint + +For functions from builtins or libraries, e.g. ``url_for`` or ``os.path.join``, use the ``-m`` option to specify whether or not they return tainted values given tainted inputs, by `default this file is used`_. .. _The -a option determines which functions will have their arguments tainted: https://github.com/python-security/pyt/tree/master/pyt/web_frameworks#web-frameworks .. _this file is used: https://github.com/python-security/pyt/blob/master/pyt/vulnerability_definitions/all_trigger_words.pyt From 5b50922e5bd5d95ec3e43b78aed3e5ae8001c6e6 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 3 Aug 2018 12:07:12 +0100 Subject: [PATCH 489/541] Iterate over args and kwargs with care ast.Call.args is [argument node] ast.Call.keywords however is [ast.keyword] You need to do isinstance(keyword_node.value, X) otherwise handling of args and kwargs will be different. --- pyt/cfg/stmt_visitor.py | 12 ++++++++---- pyt/helper_visitors/vars_visitor.py | 3 ++- tests/helper_visitors/vars_visitor_test.py | 4 ++++ 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 4acfea20..94c52ee0 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -615,7 +615,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox): rhs_vars = list() last_return_value_of_nested_call = None - for arg in itertools.chain(node.args, node.keywords): + for arg_node in itertools.chain(node.args, node.keywords): + arg = arg_node.value if isinstance(arg_node, ast.keyword) else arg_node if isinstance(arg, ast.Call): return_value_of_nested_call = self.visit(arg) @@ -634,15 +635,18 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_node.inner_most_call = return_value_of_nested_call last_return_value_of_nested_call = return_value_of_nested_call - visual_args.append(return_value_of_nested_call.left_hand_side) + if isinstance(arg_node, ast.keyword) and arg_node.arg is not None: + visual_args.append(arg_node.arg + '=' + return_value_of_nested_call.left_hand_side) + else: + visual_args.append(return_value_of_nested_call.left_hand_side) rhs_vars.append(return_value_of_nested_call.left_hand_side) else: label = LabelVisitor() - label.visit(arg) + label.visit(arg_node) visual_args.append(label.result) vv = VarsVisitor() - vv.visit(arg) + vv.visit(arg_node) rhs_vars.extend(vv.result) if last_return_value_of_nested_call: # connect other_inner to outer in e.g. diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index 9708f86f..97a09053 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -84,7 +84,8 @@ def visit_Call(self, node): # This will not visit Flask in Flask(__name__) but it will visit request in `request.args.get() if not isinstance(node.func, ast.Name): self.visit(node.func) - for arg in itertools.chain(node.args, node.keywords): + for arg_node in itertools.chain(node.args, node.keywords): + arg = arg_node.value if isinstance(arg_node, ast.keyword) else arg_node if isinstance(arg, ast.Call): if isinstance(arg.func, ast.Name): # We can't just visit because we need to add 'ret_' diff --git a/tests/helper_visitors/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py index f248b6c4..f45e81c5 100644 --- a/tests/helper_visitors/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -45,6 +45,10 @@ def test_call5(self): self.assertEqual(vars.result, ['resp', 'ret_replace']) def test_call6(self): + vars = self.perform_vars_on_expression("resp = f(kw=g(a, b))") + self.assertEqual(vars.result, ['resp', 'ret_g']) + + def test_call7(self): vars = self.perform_vars_on_expression("resp = make_response(html.replace.bar('{{ param }}', param))") self.assertEqual(vars.result, ['resp', 'ret_bar']) From f2586395329731819265e9cb5df5592138f0ebe9 Mon Sep 17 00:00:00 2001 From: bcaller Date: Tue, 31 Jul 2018 13:05:50 +0100 Subject: [PATCH 490/541] Don't crash on pathological case of f(g(a)(b)(c)) It's rare, but a curried function call can appear within a function call. It was raising a RuntimeError in VarsVisitor. We don't build a cfg properly for curried functions which is fine for now, but we don't need to crash. At least there is now defined behaviour. --- pyt/helper_visitors/vars_visitor.py | 24 ++++++++++++++++++++-- tests/helper_visitors/vars_visitor_test.py | 7 +++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/pyt/helper_visitors/vars_visitor.py b/pyt/helper_visitors/vars_visitor.py index 97a09053..8caa2571 100644 --- a/pyt/helper_visitors/vars_visitor.py +++ b/pyt/helper_visitors/vars_visitor.py @@ -96,12 +96,32 @@ def visit_Call(self, node): # func.value.id is html # We want replace self.result.append('ret_' + arg.func.attr) + elif isinstance(arg.func, ast.Call): + self.visit_curried_call_inside_call_args(arg) else: - # Deal with it when we have code that triggers it. - raise + raise Exception('Cannot visit vars of ' + ast.dump(arg)) else: self.visit(arg) + def visit_curried_call_inside_call_args(self, inner_call): + # Curried functions aren't supported really, but we now at least have a defined behaviour. + # In f(g(a)(b)(c)), inner_call is the Call node with argument c + # Try to get the name of curried function g + curried_func = inner_call.func.func + while isinstance(curried_func, ast.Call): + curried_func = curried_func.func + if isinstance(curried_func, ast.Name): + self.result.append('ret_' + curried_func.id) + elif isinstance(curried_func, ast.Attribute): + self.result.append('ret_' + curried_func.attr) + + # Visit all arguments except a (ignore the curried function g) + not_curried = inner_call + while not_curried.func is not curried_func: + for arg in itertools.chain(not_curried.args, not_curried.keywords): + self.visit(arg.value if isinstance(arg, ast.keyword) else arg) + not_curried = not_curried.func + def visit_Attribute(self, node): if not isinstance(node.value, ast.Name): self.visit(node.value) diff --git a/tests/helper_visitors/vars_visitor_test.py b/tests/helper_visitors/vars_visitor_test.py index f45e81c5..22dd6413 100644 --- a/tests/helper_visitors/vars_visitor_test.py +++ b/tests/helper_visitors/vars_visitor_test.py @@ -52,6 +52,13 @@ def test_call7(self): vars = self.perform_vars_on_expression("resp = make_response(html.replace.bar('{{ param }}', param))") self.assertEqual(vars.result, ['resp', 'ret_bar']) + def test_curried_function(self): + # Curried functions aren't supported really, but we now at least have a defined behaviour. + vars = self.perform_vars_on_expression('f(g.h(a)(b))') + self.assertCountEqual(vars.result, ['ret_h', 'b']) + vars = self.perform_vars_on_expression('f(g(a)(b)(c)(d, e=f))') + self.assertCountEqual(vars.result, ['ret_g', 'b', 'c', 'd', 'f']) + def test_keyword_vararg(self): vars = self.perform_vars_on_expression('print(arg = x)') self.assertEqual(vars.result, ['x']) From b0c32c0df3238979c4d8d182ffa6b26d396bba64 Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 6 Aug 2018 11:20:39 +0100 Subject: [PATCH 491/541] Handle assignment unpacking `a, b, c = d` We already handle a, b, c = d, *e, f a, b, c = d() But `a, b, c = d` prints 'Assignment not properly handled.' This can be handled exactly like `a, b, c = (*d,)`, where taint in value `d` is propagated to all targets. --- pyt/cfg/stmt_visitor.py | 20 ++++++++++++-------- tests/cfg/cfg_test.py | 15 +++++++++++++++ 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 4acfea20..f4f9d855 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -326,11 +326,11 @@ def visit_Try(self, node): return ControlFlowNode(try_node, last_statements, break_statements=body.break_statements) - def assign_tuple_target(self, node, right_hand_side_variables): + def assign_tuple_target(self, target_nodes, value_nodes, right_hand_side_variables): new_assignment_nodes = [] remaining_variables = list(right_hand_side_variables) - remaining_targets = list(node.targets[0].elts) - remaining_values = list(node.value.elts) # May contain duplicates + remaining_targets = list(target_nodes) + remaining_values = list(value_nodes) # May contain duplicates def visit(target, value): label = LabelVisitor() @@ -339,7 +339,7 @@ def visit(target, value): rhs_visitor.visit(value) if isinstance(value, ast.Call): new_ast_node = ast.Assign(target, value) - ast.copy_location(new_ast_node, node) + ast.copy_location(new_ast_node, target) new_assignment_nodes.append(self.assignment_call_node(label.result, new_ast_node)) else: label.result += ' = ' @@ -349,7 +349,7 @@ def visit(target, value): extract_left_hand_side(target), ast.Assign(target, value), rhs_visitor.result, - line_number=node.lineno, + line_number=target.lineno, path=self.filenames[-1] ))) remaining_targets.remove(target) @@ -358,7 +358,7 @@ def visit(target, value): remaining_variables.remove(var) # Pair targets and values until a Starred node is reached - for target, value in zip(node.targets[0].elts, node.value.elts): + for target, value in zip(target_nodes, value_nodes): if isinstance(target, ast.Starred) or isinstance(value, ast.Starred): break visit(target, value) @@ -380,7 +380,7 @@ def visit(target, value): extract_left_hand_side(target), ast.Assign(target, remaining_values[0]), remaining_variables, - line_number=node.lineno, + line_number=target.lineno, path=self.filenames[-1] ))) @@ -413,7 +413,7 @@ def visit_Assign(self, node): rhs_visitor.visit(node.value) if isinstance(node.targets[0], (ast.Tuple, ast.List)): # x,y = [1,2] if isinstance(node.value, (ast.Tuple, ast.List)): - return self.assign_tuple_target(node, rhs_visitor.result) + return self.assign_tuple_target(node.targets[0].elts, node.value.elts, rhs_visitor.result) elif isinstance(node.value, ast.Call): call = None for element in node.targets[0].elts: @@ -421,6 +421,10 @@ def visit_Assign(self, node): label.visit(element) call = self.assignment_call_node(label.result, node) return call + elif isinstance(node.value, ast.Name): # Treat `x, y = z` like `x, y = (*z,)` + value_node = ast.Starred(node.value, ast.Load()) + ast.copy_location(value_node, node) + return self.assign_tuple_target(node.targets[0].elts, [value_node], rhs_visitor.result) else: label = LabelVisitor() label.visit(node) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index cc2df076..2c98afc7 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -820,6 +820,21 @@ def test_assignment_starred_list(self): [('a', ['d']), ('b', ['d']), ('c', ['e'])], ) + def test_unpacking_to_tuple(self): + self.cfg_create_from_ast(ast.parse('a, b, c = d')) + + middle_nodes = self.cfg.nodes[1:-1] + self.assert_length(middle_nodes, expected_length=3) + + self.assertCountEqual( + [n.label for n in middle_nodes], + ['a, b, c = *d'] * 3, + ) + self.assertCountEqual( + [(n.left_hand_side, n.right_hand_side_variables) for n in middle_nodes], + [('a', ['d']), ('b', ['d']), ('c', ['d'])], + ) + def test_augmented_assignment(self): self.cfg_create_from_ast(ast.parse('a+=f(b,c)')) From 7e7b9f1401f265acafac530e3d34b8b49de45ab2 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 9 Aug 2018 18:16:08 -0700 Subject: [PATCH 492/541] Update CHANGELOG.md --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19222a31..2aefd0ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,8 +69,8 @@ If you love PyT, please star our project on GitHub to show your support! :star: #### :telescope: Precision * Added per-arg taint, for sink functions ([#147], thanks [@bcaller]) +* AugAssign, Yield, and YieldFrom taint propagation improvements ([#155], thanks [@bcaller]) * Improved tuple assingment to be more precise and support starargs ([#150], thanks [@bcaller]) -* AugAssign, Yield, and YieldFrom taint propagation improvements ([#155], thanks [@bcaller]) [#147]: https://github.com/python-security/pyt/pull/147 [#150]: https://github.com/python-security/pyt/pull/150 From fe058b0457745b7a364b4546aeaacfe6e3a65b70 Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 13 Aug 2018 17:26:44 +0100 Subject: [PATCH 493/541] Deterministic file loading and vulnerability order os.walk is not deterministic (though often on the same computer it will walk in the same order). This means that the vulnerabilities appear in different orders on different machines, making it hard to compare output. Process files in alphabetical order. --- pyt/__main__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 192eaf99..b11e995b 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -79,7 +79,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 nosec_lines = defaultdict(set) - for path in files: + for path in sorted(files): if not args.ignore_nosec: nosec_lines[path] = retrieve_nosec_lines(path) From d6ad59fedd6c6f8ef7fc343384a7490efa688a1d Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 13 Aug 2018 17:29:43 +0100 Subject: [PATCH 494/541] Don't repeat get_modules call if we use a project root The project_modules only need loading once if -pr is set, not once for every file. --- pyt/__main__.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index b11e995b..d578d4bc 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -79,15 +79,18 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 nosec_lines = defaultdict(set) + if args.project_root: + directory = os.path.normpath(args.project_root) + project_modules = get_modules(directory, prepend_module_root=args.prepend_module_root) + for path in sorted(files): if not args.ignore_nosec: nosec_lines[path] = retrieve_nosec_lines(path) - if args.project_root: - directory = os.path.normpath(args.project_root) - else: + if not args.project_root: directory = os.path.dirname(path) - project_modules = get_modules(directory, prepend_module_root=args.prepend_module_root) + project_modules = get_modules(directory, prepend_module_root=args.prepend_module_root) + local_modules = get_directory_modules(directory) tree = generate_ast(path) From c4893e733f09b52c209f2516773e5eb8b82d4ca5 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 15 Aug 2018 15:45:42 +0100 Subject: [PATCH 495/541] Remove extraneous reassignments in output The output should consist of the path from the source to the sink. Anything which happens after the source reaches the sink is irrelevant and just makes the output longer and confusing to interpret. None of the lines removed from the tests actually affected the vulnerability chain. Perhaps this should be dealt with somewhere in the definition_chain or vulnerability functions: here we just trim the chain upon reaching the sink in the vulnerability_helper. --- pyt/vulnerabilities/vulnerability_helper.py | 14 +++-- tests/vulnerabilities/vulnerabilities_test.py | 52 ------------------- 2 files changed, 6 insertions(+), 60 deletions(-) diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index 8c3b84a4..a89ce1bb 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -3,6 +3,7 @@ import json from enum import Enum from collections import namedtuple +from itertools import takewhile from ..core.node_types import YieldNode @@ -56,16 +57,13 @@ def __init__( self.sink = sink self.sink_trigger_word = sink_trigger_word - self.reassignment_nodes = reassignment_nodes - self._remove_sink_from_secondary_nodes() + # Remove the sink node and all nodes after the sink from the list of reassignments. + self.reassignment_nodes = list(takewhile( + lambda node: node is not sink, + reassignment_nodes + )) self._remove_non_propagating_yields() - def _remove_sink_from_secondary_nodes(self): - try: - self.reassignment_nodes.remove(self.sink) - except ValueError: # pragma: no cover - pass - def _remove_non_propagating_yields(self): """Remove yield with no variables e.g. `yield 123` and plain `yield` from vulnerability.""" for node in list(self.reassignment_nodes): diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 04267140..ff48c38c 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -150,12 +150,6 @@ def test_XSS_result(self): Reassigned in: File: examples/vulnerable_code/XSS.py > Line 6: param = ~call_1 - File: examples/vulnerable_code/XSS.py - > Line 9: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS.py - > Line 9: resp = ~call_3 - File: examples/vulnerable_code/XSS.py - > Line 10: ret_XSS1 = resp File: examples/vulnerable_code/XSS.py > reaches line 9, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', param) @@ -274,8 +268,6 @@ def test_path_traversal_sanitised_result(self): > Line 10: image_name = ~call_2 File: examples/vulnerable_code/path_traversal_sanitised.py > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) - File: examples/vulnerable_code/path_traversal_sanitised.py - > Line 12: ret_cat_picture = ~call_3 File: examples/vulnerable_code/path_traversal_sanitised.py > reaches line 12, sink "send_file(": ~call_3 = ret_send_file(~call_4) @@ -297,8 +289,6 @@ def test_path_traversal_sanitised_2_result(self): > Line 8: image_name = ~call_1 File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) - File: examples/vulnerable_code/path_traversal_sanitised_2.py - > Line 12: ret_cat_picture = ~call_2 File: examples/vulnerable_code/path_traversal_sanitised_2.py > reaches line 12, sink "send_file(": ~call_2 = ret_send_file(~call_3) @@ -318,8 +308,6 @@ def test_sql_result(self): Reassigned in: File: examples/vulnerable_code/sql/sqli.py > Line 26: param = ~call_1 - File: examples/vulnerable_code/sql/sqli.py - > Line 27: result = ~call_2 File: examples/vulnerable_code/sql/sqli.py > reaches line 27, sink "execute(": ~call_2 = ret_db.engine.execute(param) @@ -335,13 +323,6 @@ def test_XSS_form_result(self): File: examples/vulnerable_code/XSS_form.py > User input at line 14, source "form[": data = request.form['my_text'] - Reassigned in: - File: examples/vulnerable_code/XSS_form.py - > Line 15: ~call_1 = ret_make_response(~call_2) - File: examples/vulnerable_code/XSS_form.py - > Line 15: resp = ~call_1 - File: examples/vulnerable_code/XSS_form.py - > Line 17: ret_example2_action = resp File: examples/vulnerable_code/XSS_form.py > reaches line 15, sink "replace(": ~call_2 = ret_html1.replace('{{ data }}', data) @@ -360,12 +341,6 @@ def test_XSS_url_result(self): Reassigned in: File: examples/vulnerable_code/XSS_url.py > Line 6: param = url - File: examples/vulnerable_code/XSS_url.py - > Line 9: ~call_2 = ret_make_response(~call_3) - File: examples/vulnerable_code/XSS_url.py - > Line 9: resp = ~call_2 - File: examples/vulnerable_code/XSS_url.py - > Line 10: ret_XSS1 = resp File: examples/vulnerable_code/XSS_url.py > reaches line 9, sink "replace(": ~call_3 = ret_html.replace('{{ param }}', param) @@ -390,12 +365,6 @@ def test_XSS_reassign_result(self): > Line 6: param = ~call_1 File: examples/vulnerable_code/XSS_reassign.py > Line 8: param = param + '' - File: examples/vulnerable_code/XSS_reassign.py - > Line 11: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_reassign.py - > Line 11: resp = ~call_3 - File: examples/vulnerable_code/XSS_reassign.py - > Line 12: ret_XSS1 = resp File: examples/vulnerable_code/XSS_reassign.py > reaches line 11, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', param) @@ -418,12 +387,6 @@ def test_XSS_sanitised_result(self): > Line 9: ~call_2 = ret_Markup.escape(param) File: examples/vulnerable_code/XSS_sanitised.py > Line 9: param = ~call_2 - File: examples/vulnerable_code/XSS_sanitised.py - > Line 12: ~call_4 = ret_make_response(~call_5) - File: examples/vulnerable_code/XSS_sanitised.py - > Line 12: resp = ~call_4 - File: examples/vulnerable_code/XSS_sanitised.py - > Line 13: ret_XSS1 = resp File: examples/vulnerable_code/XSS_sanitised.py > reaches line 12, sink "replace(": ~call_5 = ret_html.replace('{{ param }}', param) @@ -449,12 +412,6 @@ def test_XSS_variable_assign_result(self): > Line 6: param = ~call_1 File: examples/vulnerable_code/XSS_variable_assign.py > Line 8: other_var = param + '' - File: examples/vulnerable_code/XSS_variable_assign.py - > Line 11: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_variable_assign.py - > Line 11: resp = ~call_3 - File: examples/vulnerable_code/XSS_variable_assign.py - > Line 12: ret_XSS1 = resp File: examples/vulnerable_code/XSS_variable_assign.py > reaches line 11, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', other_var) @@ -479,12 +436,6 @@ def test_XSS_variable_multiple_assign_result(self): > Line 10: not_the_same_var = '' + other_var File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 12: another_one = not_the_same_var + '' - File: examples/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: ~call_3 = ret_make_response(~call_4) - File: examples/vulnerable_code/XSS_variable_multiple_assign.py - > Line 15: resp = ~call_3 - File: examples/vulnerable_code/XSS_variable_multiple_assign.py - > Line 17: ret_XSS1 = resp File: examples/vulnerable_code/XSS_variable_multiple_assign.py > reaches line 15, sink "replace(": ~call_4 = ret_html.replace('{{ param }}', another_one) @@ -550,9 +501,6 @@ def test_django_view_param(self): File: examples/vulnerable_code/django_XSS.py > User input at line 4, source "Framework function URL parameter": param - Reassigned in: - File: examples/vulnerable_code/django_XSS.py - > Line 5: ret_xss1 = ~call_1 File: examples/vulnerable_code/django_XSS.py > reaches line 5, sink "render(": ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) From d2a8189738f067987504befb08304bd043e62323 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 16 Aug 2018 11:55:30 -0700 Subject: [PATCH 496/541] Removed reference to UImode.NORMAL --- pyt/__main__.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index d578d4bc..0cab673f 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -65,11 +65,9 @@ def retrieve_nosec_lines( def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) - ui_mode = UImode.NORMAL + ui_mode = UImode.TRIM if args.interactive: ui_mode = UImode.INTERACTIVE - elif args.trim_reassigned_in: - ui_mode = UImode.TRIM files = discover_files( args.targets, From 88113437e8fbd6e883bf30b9ae795cbd3a755d86 Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 16 Aug 2018 12:30:46 +0100 Subject: [PATCH 497/541] Taint propagates from methods of tainted objects Previously `x = TAINT.lower()` would be tainted (due to special handling for assignment_call_nodes) but `x = str(TAINT.lower())` wouldn't be tainted. To fix this, `TAINT` is added to the RHS variables of `TAINT.lower()`. This will mean that e.g. `request` will be a RHS variable of `request.get()`, but I think that will be OK. In the test which changed, the additional line is because resp has become tainted. However, this still leaves the following false negatives to fix another day: `assert_vulnerable('result = str("%s" % str(TAINT.lower()))') # FAILS` `assert_vulnerable('result = str("%s" % TAINT.lower().upper())') # FAILS` --- pyt/cfg/stmt_visitor.py | 27 +++++++++---------- tests/vulnerabilities/vulnerabilities_test.py | 19 +++++++++++-- 2 files changed, 29 insertions(+), 17 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index de8e396e..00a0fb2f 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -11,6 +11,7 @@ ) from ..core.ast_helper import ( generate_ast, + get_call_names, get_call_names_as_string ) from ..core.module_definitions import ( @@ -472,14 +473,6 @@ def assignment_call_node(self, left_hand_label, ast_node): call = self.visit(ast_node.value) call_label = call.left_hand_side - if isinstance(call, BBorBInode): - # Necessary to know e.g. - # `image_name = image_name.replace('..', '')` - # is a reassignment. - vars_visitor = VarsVisitor() - vars_visitor.visit(ast_node.value) - call.right_hand_side_variables.extend(vars_visitor.result) - call_assignment = AssignmentCallNode( left_hand_label + ' = ' + call_label, left_hand_label, @@ -572,7 +565,7 @@ def visit_While(self, node): return self.loop_node_skeleton(test, node) - def add_blackbox_or_builtin_call(self, node, blackbox): + def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 """Processes a blackbox or builtin function when it is called. Nothing gets assigned to ret_func_foo in the builtin/blackbox case. @@ -597,14 +590,14 @@ def add_blackbox_or_builtin_call(self, node, blackbox): saved_function_call_index = self.function_call_index self.undecided = False - call_label = LabelVisitor() - call_label.visit(node) + call_label_visitor = LabelVisitor() + call_label_visitor.visit(node) - index = call_label.result.find('(') + call_function_label = call_label_visitor.result[:call_label_visitor.result.find('(')] # Create e.g. ~call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) - RHS = 'ret_' + call_label.result[:index] + '(' + RHS = 'ret_' + call_function_label + '(' call_node = BBorBInode( label='', @@ -613,7 +606,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): right_hand_side_variables=[], line_number=node.lineno, path=self.filenames[-1], - func_name=call_label.result[:index] + func_name=call_function_label ) visual_args = list() rhs_vars = list() @@ -657,6 +650,11 @@ def add_blackbox_or_builtin_call(self, node, blackbox): # `scrypt.outer(scrypt.inner(image_name), scrypt.other_inner(image_name))` last_return_value_of_nested_call.connect(call_node) + call_names = list(get_call_names(node.func)) + if len(call_names) > 1: + # taint is a RHS variable (self) of taint.lower() + rhs_vars.append(call_names[0]) + if len(visual_args) > 0: for arg in visual_args: RHS = RHS + arg + ", " @@ -667,7 +665,6 @@ def add_blackbox_or_builtin_call(self, node, blackbox): call_node.label = LHS + " = " + RHS call_node.right_hand_side_variables = rhs_vars - # Used in get_sink_args, not using right_hand_side_variables because it is extended in assignment_call_node rhs_visitor = RHSVisitor() rhs_visitor.visit(node) call_node.args = rhs_visitor.result diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index ff48c38c..599ea4aa 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -111,8 +111,9 @@ def test_build_sanitiser_node_dict(self): self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) - def run_analysis(self, path): - self.cfg_create_from_file(path) + def run_analysis(self, path=None): + if path: + self.cfg_create_from_file(path) cfg_list = [self.cfg] FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) @@ -468,6 +469,20 @@ def test_yield(self): self.assertAlphaEqual(str(vuln), EXPECTED_VULNERABILITY_DESCRIPTION) + def test_method_of_taint(self): + def assert_vulnerable(fixture): + tree = ast.parse('TAINT = request.args.get("")\n' + fixture + '\nexecute(result)') + self.cfg_create_from_ast(tree) + vulnerabilities = self.run_analysis() + self.assert_length(vulnerabilities, expected_length=1, msg=fixture) + + assert_vulnerable('result = TAINT') + assert_vulnerable('result = TAINT.lower()') + assert_vulnerable('result = str(TAINT)') + assert_vulnerable('result = str(TAINT.lower())') + assert_vulnerable('result = repr(str("%s" % TAINT.lower().upper()))') + assert_vulnerable('result = repr(str("{}".format(TAINT.lower())))') + class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): From b14a26799ff02902a6c517aba9a874484d3fada0 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 21 Aug 2018 19:02:07 -0700 Subject: [PATCH 498/541] Always define cfg_list --- pyt/__main__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyt/__main__.py b/pyt/__main__.py index 0cab673f..80188311 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -81,6 +81,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 directory = os.path.normpath(args.project_root) project_modules = get_modules(directory, prepend_module_root=args.prepend_module_root) + cfg_list = list() for path in sorted(files): if not args.ignore_nosec: nosec_lines[path] = retrieve_nosec_lines(path) From 3fc8046ffffe802f8498080f6a59a2087b8abed1 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 21 Aug 2018 19:03:55 -0700 Subject: [PATCH 499/541] [version] Bump to 0.39 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index c6b082f4..9809fcdd 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.38' +VERSION = '0.39' setup( From 12619b787f32dc5f7c6f5dd840d072cee2aaba18 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Mon, 20 Aug 2018 09:34:02 -0700 Subject: [PATCH 500/541] Remove --trim option and UImode Enum Explicitly always make reassignment_nodes the vulnerability chain Fix tests after removing UImode Add comment to argparse hack Update root README.rst --- README.rst | 55 +++++++++-------- pyt/__main__.py | 14 ++--- pyt/cfg/stmt_visitor.py | 1 + pyt/usage.py | 60 ++++++++----------- pyt/vulnerabilities/__init__.py | 8 +-- pyt/vulnerabilities/vulnerabilities.py | 38 +++++------- pyt/vulnerabilities/vulnerability_helper.py | 13 +--- tests/usage_test.py | 39 ++++++------ .../vulnerabilities_across_files_test.py | 22 ++----- tests/vulnerabilities/vulnerabilities_test.py | 29 ++------- 10 files changed, 104 insertions(+), 175 deletions(-) diff --git a/README.rst b/README.rst index 5c44f15a..ad79c794 100644 --- a/README.rst +++ b/README.rst @@ -86,53 +86,56 @@ Usage .. code-block:: usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [-trim] [-i] - targets [targets ...] + [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] + [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] + [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] + [--dont-prepend-root] [--no-local-imports] + targets [targets ...] required arguments: - targets source file(s) or directory(s) to be tested + targets source file(s) or directory(s) to be scanned important optional arguments: -a ADAPTOR, --adaptor ADAPTOR - Choose a web framework adaptor: Flask(Default), - Django, Every or Pylons - + Choose a web framework adaptor: Flask(Default), + Django, Every or Pylons + -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE - Input file with a list of sources and sinks - + Input file with a list of sources and sinks + -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE - Input blackbox mapping file + Input blackbox mapping file optional arguments: -pr PROJECT_ROOT, --project-root PROJECT_ROOT - Add project root, only important when the entry file - is not at the root of the project + Add project root, only important when the entry file + is not at the root of the project. -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE - Path of a baseline report to compare against (only - JSON-formatted files are accepted) + Path of a baseline report to compare against (only + JSON-formatted files are accepted) + + -j, --json Prints JSON instead of report. - -j, --json Prints JSON instead of report + -i, --interactive Will ask you about each blackbox function call in + vulnerability chains. -o OUTPUT_FILE, --output OUTPUT_FILE - Write report to filename + Write report to filename - --ignore-nosec Do not skip lines with # nosec comments + --ignore-nosec Do not skip lines with # nosec comments - -r, --recursive Find and process files in subdirectories + -r, --recursive Find and process files in subdirectories -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS - Separate files with commas + Separate files with commas + --dont-prepend-root In project root e.g. /app, imports are not prepended + with app.* - print arguments: - -trim, --trim-reassigned-in - Trims the reassigned list to just the vulnerability - chain. - -i, --interactive Will ask you about each blackbox function call in - vulnerability chains. + --no-local-imports If set, absolute imports must be relative to the + project root. If not set, modules in the same + directory can be imported just by their names. Usage from Source ================= diff --git a/pyt/__main__.py b/pyt/__main__.py index 0cab673f..da24f7af 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -19,8 +19,7 @@ from .usage import parse_args from .vulnerabilities import ( find_vulnerabilities, - get_vulnerabilities_not_in_baseline, - UImode + get_vulnerabilities_not_in_baseline ) from .vulnerabilities.vulnerability_helper import SanitisedVulnerability from .web_frameworks import ( @@ -65,10 +64,6 @@ def retrieve_nosec_lines( def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) - ui_mode = UImode.TRIM - if args.interactive: - ui_mode = UImode.INTERACTIVE - files = discover_files( args.targets, args.excluded_paths, @@ -122,9 +117,9 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 analyse(cfg_list) vulnerabilities = find_vulnerabilities( cfg_list, - ui_mode, args.blackbox_mapping_file, args.trigger_word_file, + args.interactive, nosec_lines ) @@ -139,7 +134,10 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 else: text.report(vulnerabilities, args.output_file) - has_unsanitized_vulnerabilities = any(not isinstance(v, SanitisedVulnerability) for v in vulnerabilities) + has_unsanitized_vulnerabilities = any( + not isinstance(v, SanitisedVulnerability) + for v in vulnerabilities + ) if has_unsanitized_vulnerabilities: sys.exit(1) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 00a0fb2f..ce4d198b 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -665,6 +665,7 @@ def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 call_node.label = LHS + " = " + RHS call_node.right_hand_side_variables = rhs_vars + # Used in get_sink_args rhs_visitor = RHSVisitor() rhs_visitor.visit(node) call_node.args = rhs_visitor.result diff --git a/pyt/usage.py b/pyt/usage.py index 7325a7c8..d5b6efbe 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -20,8 +20,9 @@ def _add_required_group(parser): required_group = parser.add_argument_group('required arguments') required_group.add_argument( - 'targets', metavar='targets', type=str, nargs='+', - help='source file(s) or directory(s) to be tested' + 'targets', metavar='targets', nargs='+', + help='source file(s) or directory(s) to be scanned', + type=str ) @@ -54,6 +55,12 @@ def _add_optional_group(parser): action='store_true', default=False ) + optional_group.add_argument( + '-t', '--trigger-word-file', + help='Input file with a list of sources and sinks', + type=str, + default=default_trigger_word_file + ) optional_group.add_argument( '-m', '--blackbox-mapping-file', help='Input blackbox mapping file.', @@ -61,14 +68,14 @@ def _add_optional_group(parser): default=default_blackbox_mapping_file ) optional_group.add_argument( - '-t', '--trigger-word-file', - help='Input file with a list of sources and sinks', - type=str, - default=default_trigger_word_file + '-i', '--interactive', + help='Will ask you about each blackbox function call in vulnerability chains.', + action='store_true', + default=False ) optional_group.add_argument( '-o', '--output', - help='write report to filename', + help='Write report to filename', dest='output_file', action='store', type=argparse.FileType('w'), @@ -78,11 +85,13 @@ def _add_optional_group(parser): '--ignore-nosec', dest='ignore_nosec', action='store_true', - help='do not skip lines with # nosec comments' + help='Do not skip lines with # nosec comments' ) optional_group.add_argument( - '-r', '--recursive', dest='recursive', - action='store_true', help='find and process files in subdirectories' + '-r', '--recursive', + dest='recursive', + action='store_true', + help='Find and process files in subdirectories' ) optional_group.add_argument( '-x', '--exclude', @@ -108,39 +117,18 @@ def _add_optional_group(parser): ) -def _add_print_group(parser): - print_group = parser.add_argument_group('print arguments') - print_group.add_argument( - '-trim', '--trim-reassigned-in', - help='Trims the reassigned list to just the vulnerability chain.', - action='store_true', - default=True - ) - print_group.add_argument( - '-i', '--interactive', - help='Will ask you about each blackbox function call in vulnerability chains.', - action='store_true', - default=False - ) - - -def _check_required_and_mutually_exclusive_args(parser, args): - if args.targets is None: - parser.error('The targets argument is required') - - def parse_args(args): if len(args) == 0: args.append('-h') parser = argparse.ArgumentParser(prog='python -m pyt') + + # Hack to in order to list required args above optional parser._action_groups.pop() + _add_required_group(parser) _add_optional_group(parser) - _add_print_group(parser) args = parser.parse_args(args) - _check_required_and_mutually_exclusive_args( - parser, - args - ) + if args.targets is None: + parser.error('The targets argument is required') return args diff --git a/pyt/vulnerabilities/__init__.py b/pyt/vulnerabilities/__init__.py index 992af18a..1dd115de 100644 --- a/pyt/vulnerabilities/__init__.py +++ b/pyt/vulnerabilities/__init__.py @@ -1,12 +1,8 @@ from .vulnerabilities import find_vulnerabilities -from .vulnerability_helper import ( - get_vulnerabilities_not_in_baseline, - UImode -) +from .vulnerability_helper import get_vulnerabilities_not_in_baseline __all__ = [ 'find_vulnerabilities', - 'get_vulnerabilities_not_in_baseline', - 'UImode' + 'get_vulnerabilities_not_in_baseline' ] diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index f169c4b2..47986ed8 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -23,8 +23,7 @@ TriggerNode, Triggers, vuln_factory, - VulnerabilityType, - UImode + VulnerabilityType ) @@ -306,7 +305,7 @@ def how_vulnerable( sanitiser_nodes, potential_sanitiser, blackbox_assignments, - ui_mode, + interactive, vuln_deets ): """Iterates through the chain of nodes and checks the blackbox nodes against the blackbox mapping and sanitiser dictionary. @@ -320,7 +319,7 @@ def how_vulnerable( sanitiser_nodes(set): A set of nodes that are sanitisers for the sink. potential_sanitiser(Node): An if or elif node that can potentially cause sanitisation. blackbox_assignments(set[AssignmentNode]): set of blackbox assignments, includes the ReturnNode's of BBorBInode's. - ui_mode(UImode): determines if we interact with the user when we don't already have a blackbox mapping available. + interactive(bool): determines if we ask the user about blackbox functions not in the mapping file. vuln_deets(dict): vulnerability details. Returns: @@ -337,7 +336,7 @@ def how_vulnerable( continue elif current_node.func_name in blackbox_mapping['does_not_propagate']: return VulnerabilityType.FALSE - elif ui_mode == UImode.INTERACTIVE: + elif interactive: user_says = input( 'Is the return value of {} with tainted argument "{}" vulnerable? (Y/n)'.format( current_node.label, @@ -378,7 +377,7 @@ def get_vulnerability( triggers, lattice, cfg, - ui_mode, + interactive, blackbox_mapping ): """Get vulnerability between source and sink if it exists. @@ -395,7 +394,7 @@ def get_vulnerability( triggers(Triggers): Triggers of the CFG. lattice(Lattice): the lattice we're analysing. cfg(CFG): .blackbox_assignments used in is_unknown, .nodes used in build_def_use_chain - ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. + interactive(bool): determines if we ask the user about blackbox functions not in the mapping file. blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. Returns: @@ -421,8 +420,7 @@ def get_vulnerability( 'source': source.cfg_node, 'source_trigger_word': source.trigger_word, 'sink': sink.cfg_node, - 'sink_trigger_word': sink.trigger_word, - 'reassignment_nodes': source.secondary_nodes + 'sink_trigger_word': sink.trigger_word } sanitiser_nodes = set() @@ -450,14 +448,13 @@ def get_vulnerability( sanitiser_nodes, potential_sanitiser, cfg.blackbox_assignments, - ui_mode, + interactive, vuln_deets ) if vulnerability_type == VulnerabilityType.FALSE: continue - if ui_mode != UImode.NORMAL: - vuln_deets['reassignment_nodes'] = chain + vuln_deets['reassignment_nodes'] = chain return vuln_factory(vulnerability_type)(**vuln_deets) @@ -468,9 +465,9 @@ def find_vulnerabilities_in_cfg( cfg, definitions, lattice, - ui_mode, blackbox_mapping, vulnerabilities_list, + interactive, nosec_lines ): """Find vulnerabilities in a cfg. @@ -479,10 +476,9 @@ def find_vulnerabilities_in_cfg( cfg(CFG): The CFG to find vulnerabilities in. definitions(trigger_definitions_parser.Definitions): Source and sink definitions. lattice(Lattice): the lattice we're analysing. - ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. blackbox_mapping(dict): A map of blackbox functions containing whether or not they propagate taint. vulnerabilities_list(list): That we append to when we find vulnerabilities. - nosec_lines(dict): filenames mapped to their nosec lines + interactive(bool): determines if we ask the user about blackbox functions not in the mapping file. """ triggers = identify_triggers( cfg, @@ -499,7 +495,7 @@ def find_vulnerabilities_in_cfg( triggers, lattice, cfg, - ui_mode, + interactive, blackbox_mapping ) if vulnerability: @@ -508,20 +504,18 @@ def find_vulnerabilities_in_cfg( def find_vulnerabilities( cfg_list, - ui_mode, blackbox_mapping_file, sources_and_sinks_file, + interactive=False, nosec_lines=defaultdict(set) ): """Find vulnerabilities in a list of CFGs from a trigger_word_file. Args: cfg_list(list[CFG]): the list of CFGs to scan. - ui_mode(UImode): determines if we interact with the user or trim the nodes in the output, if at all. blackbox_mapping_file(str) sources_and_sinks_file(str) - nosec_lines(dict): filenames mapped to their nosec lines - + interactive(bool): determines if we ask the user about blackbox functions not in the mapping file. Returns: A list of vulnerabilities. """ @@ -535,13 +529,13 @@ def find_vulnerabilities( cfg, definitions, Lattice(cfg.nodes), - ui_mode, blackbox_mapping, vulnerabilities, + interactive, nosec_lines ) - if ui_mode == UImode.INTERACTIVE: + if interactive: with open(blackbox_mapping_file, 'w') as outfile: json.dump(blackbox_mapping, outfile, indent=4) diff --git a/pyt/vulnerabilities/vulnerability_helper.py b/pyt/vulnerabilities/vulnerability_helper.py index a89ce1bb..ee22622f 100644 --- a/pyt/vulnerabilities/vulnerability_helper.py +++ b/pyt/vulnerabilities/vulnerability_helper.py @@ -3,7 +3,6 @@ import json from enum import Enum from collections import namedtuple -from itertools import takewhile from ..core.node_types import YieldNode @@ -15,12 +14,6 @@ class VulnerabilityType(Enum): UNKNOWN = 3 -class UImode(Enum): - INTERACTIVE = 0 - NORMAL = 1 - TRIM = 2 - - def vuln_factory(vulnerability_type): if vulnerability_type == VulnerabilityType.UNKNOWN: return UnknownVulnerability @@ -57,11 +50,7 @@ def __init__( self.sink = sink self.sink_trigger_word = sink_trigger_word - # Remove the sink node and all nodes after the sink from the list of reassignments. - self.reassignment_nodes = list(takewhile( - lambda node: node is not sink, - reassignment_nodes - )) + self.reassignment_nodes = reassignment_nodes self._remove_non_propagating_yields() def _remove_non_propagating_yields(self): diff --git a/tests/usage_test.py b/tests/usage_test.py index 027c6f00..363786bd 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -26,14 +26,14 @@ def test_no_args(self): self.maxDiff = None EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] - [--no-local-imports] [-trim] [-i] + [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] + [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] + [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] + [--dont-prepend-root] [--no-local-imports] targets [targets ...] required arguments: - targets source file(s) or directory(s) to be tested + targets source file(s) or directory(s) to be scanned optional arguments: -a ADAPTOR, --adaptor ADAPTOR @@ -46,28 +46,23 @@ def test_no_args(self): Path of a baseline report to compare against (only JSON-formatted files are accepted) -j, --json Prints JSON instead of report. - -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE - Input blackbox mapping file. -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE Input file with a list of sources and sinks + -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE + Input blackbox mapping file. + -i, --interactive Will ask you about each blackbox function call in + vulnerability chains. -o OUTPUT_FILE, --output OUTPUT_FILE - write report to filename - --ignore-nosec do not skip lines with # nosec comments - -r, --recursive find and process files in subdirectories + Write report to filename + --ignore-nosec Do not skip lines with # nosec comments + -r, --recursive Find and process files in subdirectories -x EXCLUDED_PATHS, --exclude EXCLUDED_PATHS Separate files with commas --dont-prepend-root In project root e.g. /app, imports are not prepended with app.* --no-local-imports If set, absolute imports must be relative to the project root. If not set, modules in the same - directory can be imported just by their names. - -print arguments: - -trim, --trim-reassigned-in - Trims the reassigned list to just the vulnerability - chain. - -i, --interactive Will ask you about each blackbox function call in - vulnerability chains.\n""" + directory can be imported just by their names.\n""" self.assertEqual(stdout.getvalue(), EXPECTED) @@ -77,10 +72,10 @@ def test_valid_args_but_no_targets(self): parse_args(['-j']) EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-m BLACKBOX_MAPPING_FILE] - [-t TRIGGER_WORD_FILE] [-o OUTPUT_FILE] [--ignore-nosec] - [-r] [-x EXCLUDED_PATHS] [--dont-prepend-root] - [--no-local-imports] [-trim] [-i] + [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] + [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] + [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] + [--dont-prepend-root] [--no-local-imports] targets [targets ...] python -m pyt: error: the following arguments are required: targets\n""" diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index 70529f0d..bd63b190 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -12,10 +12,7 @@ default_blackbox_mapping_file, default_trigger_word_file ) -from pyt.vulnerabilities import ( - find_vulnerabilities, - UImode -) +from pyt.vulnerabilities import find_vulnerabilities from pyt.web_frameworks import ( FrameworkAdaptor, is_flask_route_function @@ -41,7 +38,6 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, - UImode.NORMAL, default_blackbox_mapping_file, default_trigger_word_file ) @@ -92,7 +88,7 @@ def test_builtin_with_user_defined_inner(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/builtin_with_user_defined_inner.py > User input at line 16, source "form[": - req_param = request.form['suggestion'] + req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 10: save_2_req_param = req_param @@ -104,8 +100,6 @@ def test_builtin_with_user_defined_inner(self): > Line 11: yes_vuln = inner_arg + 'hey' File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 12: ret_inner = yes_vuln - File: examples/nested_functions_code/builtin_with_user_defined_inner.py - > Line 10: req_param = save_2_req_param File: examples/nested_functions_code/builtin_with_user_defined_inner.py > Line 19: ~call_2 = ret_inner File: examples/nested_functions_code/builtin_with_user_defined_inner.py @@ -167,7 +161,7 @@ def test_sink_with_result_of_user_defined_nested(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > User input at line 16, source "form[": - req_param = request.form['suggestion'] + req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 6: save_1_req_param = req_param @@ -181,8 +175,6 @@ def test_sink_with_result_of_user_defined_nested(self): > Line 11: inner_ret_val = inner_arg + 'hey' File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 12: ret_inner = inner_ret_val - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 10: req_param = save_2_req_param File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: ~call_2 = ret_inner File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -193,8 +185,6 @@ def test_sink_with_result_of_user_defined_nested(self): > Line 7: outer_ret_val = outer_arg + 'hey' File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 8: ret_outer = outer_ret_val - File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py - > Line 6: req_param = save_1_req_param File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py > Line 17: ~call_1 = ret_outer File: examples/nested_functions_code/sink_with_result_of_user_defined_nested.py @@ -250,7 +240,7 @@ def test_sink_with_user_defined_inner(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/nested_functions_code/sink_with_user_defined_inner.py > User input at line 16, source "form[": - req_param = request.form['suggestion'] + req_param = request.form['suggestion'] Reassigned in: File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 6: save_2_req_param = req_param @@ -264,8 +254,6 @@ def test_sink_with_user_defined_inner(self): > Line 11: inner_ret_val = inner_arg + 'hey' File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 12: ret_inner = inner_ret_val - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 10: req_param = save_3_req_param File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ~call_3 = ret_inner File: examples/nested_functions_code/sink_with_user_defined_inner.py @@ -276,8 +264,6 @@ def test_sink_with_user_defined_inner(self): > Line 7: outer_ret_val = outer_arg + 'hey' File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 8: ret_outer = outer_ret_val - File: examples/nested_functions_code/sink_with_user_defined_inner.py - > Line 6: req_param = save_2_req_param File: examples/nested_functions_code/sink_with_user_defined_inner.py > Line 18: ~call_2 = ret_outer File: examples/nested_functions_code/sink_with_user_defined_inner.py diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 599ea4aa..607fbb0c 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -12,7 +12,6 @@ ) from pyt.vulnerabilities import ( find_vulnerabilities, - UImode, vulnerabilities ) from pyt.vulnerabilities.trigger_definitions_parser import ( @@ -123,7 +122,6 @@ def run_analysis(self, path=None): return find_vulnerabilities( cfg_list, - UImode.NORMAL, default_blackbox_mapping_file, default_trigger_word_file ) @@ -201,8 +199,6 @@ def test_path_traversal_result(self): > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg File: examples/vulnerable_code/path_traversal.py > Line 8: ret_outer = outer_ret_val - File: examples/vulnerable_code/path_traversal.py - > Line 6: image_name = save_2_image_name File: examples/vulnerable_code/path_traversal.py > Line 19: ~call_2 = ret_outer File: examples/vulnerable_code/path_traversal.py @@ -229,28 +225,14 @@ def test_ensure_saved_scope(self): > Line 6: save_2_image_name = image_name File: examples/vulnerable_code/ensure_saved_scope.py > Line 10: save_3_image_name = image_name - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 10: image_name = save_3_image_name - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 19: temp_2_other_arg = image_name - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 6: other_arg = temp_2_other_arg - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 7: outer_ret_val = outer_arg + 'hey' + other_arg - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 8: ret_outer = outer_ret_val - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 6: image_name = save_2_image_name - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 19: ~call_2 = ret_outer - File: examples/vulnerable_code/ensure_saved_scope.py - > Line 19: foo = ~call_2 File: examples/vulnerable_code/ensure_saved_scope.py > reaches line 20, sink "send_file(": ~call_4 = ret_send_file(image_name) """ - - self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) + self.assertAlphaEqual( + vulnerability_description, + EXPECTED_VULNERABILITY_DESCRIPTION + ) def test_path_traversal_sanitised_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/path_traversal_sanitised.py') @@ -502,7 +484,6 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, - UImode.NORMAL, default_blackbox_mapping_file, trigger_word_file ) @@ -541,7 +522,6 @@ def run_analysis(self, path): return find_vulnerabilities( cfg_list, - UImode.NORMAL, default_blackbox_mapping_file, trigger_word_file ) @@ -568,7 +548,6 @@ def run_analysis(self): return find_vulnerabilities( cfg_list, - UImode.NORMAL, default_blackbox_mapping_file, trigger_word_file ) From 2e91ce7606f93011f9257f0a59e3e01e6919a30b Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 30 Aug 2018 15:48:12 +0100 Subject: [PATCH 501/541] Chained function calls separated into multiple assignments Take the example from examples/vulnerable_code/sql/sqli.py: `result = session.query(User).filter("username={}".format(TAINT))` The `filter` function is marked as a sink. However, previously this did not get marked as a vulnerability. The call label used to be `session.query`, ignoring the filter function. Now, when the file is read, it is transformed into 2 lines: ``` __chain_tmp_1 = session.query(User) result = __chain_tmp_1.filter("username={}".format(TAINT)) ``` And the vulnerability is found. We don't find everything here: just ordinary assignments and return statements. We can't just transform all Call nodes here since Call nodes can appear in many different scenarios e.g. comprehensions, bare function calls. --- pyt/core/ast_helper.py | 4 +- pyt/core/transformer.py | 52 ++++++++++++++++++- tests/base_test_case.py | 3 +- tests/cfg/cfg_test.py | 32 ++++++++++++ tests/core/transformer_test.py | 22 +++++++- tests/vulnerabilities/vulnerabilities_test.py | 2 +- 6 files changed, 108 insertions(+), 7 deletions(-) diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 9a16267c..4ca1ca69 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -6,7 +6,7 @@ import subprocess from functools import lru_cache -from .transformer import AsyncTransformer +from .transformer import PytTransformer BLACK_LISTED_CALL_NAMES = ['self'] @@ -35,7 +35,7 @@ def generate_ast(path): with open(path, 'r') as f: try: tree = ast.parse(f.read()) - return AsyncTransformer().visit(tree) + return PytTransformer().visit(tree) except SyntaxError: # pragma: no cover global recursive if not recursive: diff --git a/pyt/core/transformer.py b/pyt/core/transformer.py index 12051c89..ccdd82c4 100644 --- a/pyt/core/transformer.py +++ b/pyt/core/transformer.py @@ -1,7 +1,7 @@ import ast -class AsyncTransformer(ast.NodeTransformer): +class AsyncTransformer(): """Converts all async nodes into their synchronous counterparts.""" def visit_Await(self, node): @@ -16,3 +16,53 @@ def visit_AsyncFor(self, node): def visit_AsyncWith(self, node): return self.visit(ast.With(**node.__dict__)) + + +class ChainedFunctionTransformer(): + def visit_chain(self, node, depth=1): + if ( + isinstance(node.value, ast.Call) and + isinstance(node.value.func, ast.Attribute) and + isinstance(node.value.func.value, ast.Call) + ): + # Node is assignment or return with value like `b.c().d()` + call_node = node.value + # If we want to handle nested functions in future, depth needs fixing + temp_var_id = '__chain_tmp_{}'.format(depth) + # AST tree is from right to left, so d() is the outer Call and b.c() is the inner Call + unvisited_inner_call = ast.Assign( + targets=[ast.Name(id=temp_var_id, ctx=ast.Store())], + value=call_node.func.value, + ) + ast.copy_location(unvisited_inner_call, node) + inner_calls = self.visit_chain(unvisited_inner_call, depth + 1) + for inner_call_node in inner_calls: + ast.copy_location(inner_call_node, node) + outer_call = self.generic_visit(type(node)( + value=ast.Call( + func=ast.Attribute( + value=ast.Name(id=temp_var_id, ctx=ast.Load()), + attr=call_node.func.attr, + ctx=ast.Load(), + ), + args=call_node.args, + keywords=call_node.keywords, + ), + **{field: value for field, value in ast.iter_fields(node) if field != 'value'} # e.g. targets + )) + ast.copy_location(outer_call, node) + ast.copy_location(outer_call.value, node) + ast.copy_location(outer_call.value.func, node) + return [*inner_calls, outer_call] + else: + return [self.generic_visit(node)] + + def visit_Assign(self, node): + return self.visit_chain(node) + + def visit_Return(self, node): + return self.visit_chain(node) + + +class PytTransformer(AsyncTransformer, ChainedFunctionTransformer, ast.NodeTransformer): + pass diff --git a/tests/base_test_case.py b/tests/base_test_case.py index 1283bf47..bd471073 100644 --- a/tests/base_test_case.py +++ b/tests/base_test_case.py @@ -4,6 +4,7 @@ from pyt.cfg import make_cfg from pyt.core.ast_helper import generate_ast from pyt.core.module_definitions import project_definitions +from pyt.core.transformer import PytTransformer class BaseTestCase(unittest.TestCase): @@ -36,7 +37,7 @@ def cfg_create_from_ast( ): project_definitions.clear() self.cfg = make_cfg( - ast_tree, + PytTransformer().visit(ast_tree), project_modules, local_modules, filename='?' diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index 2c98afc7..3c215983 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -1497,3 +1497,35 @@ def test_name_for(self): self.assert_length(self.cfg.nodes, expected_length=4) self.assertEqual(self.cfg.nodes[1].label, 'for x in l:') + + +class CFGFunctionChain(CFGBaseTestCase): + def test_simple(self): + self.cfg_create_from_ast( + ast.parse('a = b.c(z)') + ) + middle_nodes = self.cfg.nodes[1:-1] + self.assert_length(middle_nodes, expected_length=2) + self.assertEqual(middle_nodes[0].label, '~call_1 = ret_b.c(z)') + self.assertEqual(middle_nodes[0].func_name, 'b.c') + self.assertCountEqual(middle_nodes[0].right_hand_side_variables, ['z', 'b']) + + def test_chain(self): + self.cfg_create_from_ast( + ast.parse('a = b.xxx.c(z).d(y)') + ) + middle_nodes = self.cfg.nodes[1:-1] + self.assert_length(middle_nodes, expected_length=4) + + self.assertEqual(middle_nodes[0].left_hand_side, '~call_1') + self.assertCountEqual(middle_nodes[0].right_hand_side_variables, ['b', 'z']) + self.assertEqual(middle_nodes[0].label, '~call_1 = ret_b.xxx.c(z)') + + self.assertEqual(middle_nodes[1].left_hand_side, '__chain_tmp_1') + self.assertCountEqual(middle_nodes[1].right_hand_side_variables, ['~call_1']) + + self.assertEqual(middle_nodes[2].left_hand_side, '~call_2') + self.assertCountEqual(middle_nodes[2].right_hand_side_variables, ['__chain_tmp_1', 'y']) + + self.assertEqual(middle_nodes[3].left_hand_side, 'a') + self.assertCountEqual(middle_nodes[3].right_hand_side_variables, ['~call_2']) diff --git a/tests/core/transformer_test.py b/tests/core/transformer_test.py index 8233287b..2676c70d 100644 --- a/tests/core/transformer_test.py +++ b/tests/core/transformer_test.py @@ -1,13 +1,14 @@ import ast import unittest -from pyt.core.transformer import AsyncTransformer +from pyt.core.transformer import PytTransformer class TransformerTest(unittest.TestCase): """Tests for the AsyncTransformer.""" def test_async_removed_by_transformer(self): + self.maxDiff = 99999 async_tree = ast.parse("\n".join([ "async def a():", " async for b in c():", @@ -30,7 +31,24 @@ def test_async_removed_by_transformer(self): ])) self.assertIsInstance(sync_tree.body[0], ast.FunctionDef) - transformed = AsyncTransformer().visit(async_tree) + transformed = PytTransformer().visit(async_tree) self.assertIsInstance(transformed.body[0], ast.FunctionDef) self.assertEqual(ast.dump(transformed), ast.dump(sync_tree)) + + def test_chained_function(self): + chained_tree = ast.parse("\n".join([ + "def a():", + " b = c.d(e).f(g).h(i).j(k)", + ])) + + separated_tree = ast.parse("\n".join([ + "def a():", + " __chain_tmp_3 = c.d(e)", + " __chain_tmp_2 = __chain_tmp_3.f(g)", + " __chain_tmp_1 = __chain_tmp_2.h(i)", + " b = __chain_tmp_1.j(k)", + ])) + + transformed = PytTransformer().visit(chained_tree) + self.assertEqual(ast.dump(transformed), ast.dump(separated_tree)) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 607fbb0c..52fbfb2c 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -282,7 +282,7 @@ def test_path_traversal_sanitised_2_result(self): def test_sql_result(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/sql/sqli.py') - self.assert_length(vulnerabilities, expected_length=2) + self.assert_length(vulnerabilities, expected_length=3) vulnerability_description = str(vulnerabilities[0]) EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/sql/sqli.py From 2bc84138c8e1bfec82f8cf33aeb99f472f5cdfa2 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 5 Sep 2018 14:47:46 +0100 Subject: [PATCH 502/541] Add colourful formatter "screen" Prints vulnerabilities with ANSI colour codes for the terminal. Not crazily colourful: just tries to highlight the important stuff. Repeated filenames aren't printed. Colour scheme might not be to everyone's taste. --- .coveragerc | 1 + pyt/formatters/screen.py | 104 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 pyt/formatters/screen.py diff --git a/.coveragerc b/.coveragerc index df3137cf..26a84f47 100644 --- a/.coveragerc +++ b/.coveragerc @@ -15,4 +15,5 @@ source = ./tests omit = pyt/formatters/json.py + pyt/formatters/screen.py pyt/formatters/text.py diff --git a/pyt/formatters/screen.py b/pyt/formatters/screen.py new file mode 100644 index 00000000..3a8ddb80 --- /dev/null +++ b/pyt/formatters/screen.py @@ -0,0 +1,104 @@ +"""This formatter outputs the issues as color-coded text.""" +from ..vulnerabilities.vulnerability_helper import SanitisedVulnerability, UnknownVulnerability + +RESET = '\033[0m' +BOLD = '\033[1m' +UNDERLINE = '\033[4m' +DANGER = '\033[31m' +GOOD = '\033[32m' +HIGHLIGHT = '\033[45;1m' +RED_ON_WHITE = '\033[31m\033[107m' + + +def color(string, color_string): + return color_string + str(string) + RESET + + +def report( + vulnerabilities, + fileobj, + print_sanitised, +): + """ + Prints issues in color-coded text format. + + Args: + vulnerabilities: list of vulnerabilities to report + fileobj: The output file object, which may be sys.stdout + """ + n_vulnerabilities = len(vulnerabilities) + unsanitised_vulnerabilities = [v for v in vulnerabilities if not isinstance(v, SanitisedVulnerability)] + n_unsanitised = len(unsanitised_vulnerabilities) + n_sanitised = n_vulnerabilities - n_unsanitised + heading = "{} vulnerabilit{} found{}.\n".format( + 'No' if n_unsanitised == 0 else n_unsanitised, + 'y' if n_unsanitised == 1 else 'ies', + " (plus {} sanitised)".format(n_sanitised) if n_sanitised else "", + ) + vulnerabilities_to_print = vulnerabilities if print_sanitised else unsanitised_vulnerabilities + with fileobj: + for i, vulnerability in enumerate(vulnerabilities_to_print, start=1): + fileobj.write(vulnerability_to_str(i, vulnerability)) + + if n_unsanitised == 0: + fileobj.write(color(heading, GOOD)) + else: + fileobj.write(color(heading, DANGER)) + + +def vulnerability_to_str(i, vulnerability): + lines = [] + lines.append(color('Vulnerability {}'.format(i), UNDERLINE)) + lines.append('File: {}'.format(color(vulnerability.source.path, BOLD))) + lines.append( + 'User input at line {}, source "{}":'.format( + vulnerability.source.line_number, + color(vulnerability.source_trigger_word, HIGHLIGHT), + ) + ) + lines.append('\t{}'.format(color(vulnerability.source.label, RED_ON_WHITE))) + if vulnerability.reassignment_nodes: + previous_path = None + lines.append('Reassigned in:') + for node in vulnerability.reassignment_nodes: + if node.path != previous_path: + lines.append('\tFile: {}'.format(node.path)) + previous_path = node.path + label = node.label + if ( + isinstance(vulnerability, SanitisedVulnerability) and + node.label == vulnerability.sanitiser.label + ): + label = color(label, GOOD) + lines.append( + '\t Line {}:\t{}'.format( + node.line_number, + label, + ) + ) + if vulnerability.source.path != vulnerability.sink.path: + lines.append('File: {}'.format(color(vulnerability.sink.path, BOLD))) + lines.append( + 'Reaches line {}, sink "{}"'.format( + vulnerability.sink.line_number, + color(vulnerability.sink_trigger_word, HIGHLIGHT), + ) + ) + lines.append('\t{}'.format( + color(vulnerability.sink.label, RED_ON_WHITE) + )) + if isinstance(vulnerability, SanitisedVulnerability): + lines.append( + 'This vulnerability is {}{} by {}'.format( + color('potentially ', BOLD) if not vulnerability.confident else '', + color('sanitised', GOOD), + color(vulnerability.sanitiser.label, BOLD), + ) + ) + elif isinstance(vulnerability, UnknownVulnerability): + lines.append( + 'This vulnerability is unknown due to "{}"'.format( + color(vulnerability.unknown_assignment.label, BOLD), + ) + ) + return '\n'.join(lines) + '\n\n' From 4f80f97286cdfc5b32488a04eec7ecb49019297a Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 5 Sep 2018 14:50:41 +0100 Subject: [PATCH 503/541] Consistent spelling of sanitise --- pyt/__main__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 558f1d3c..4bea43d2 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -135,11 +135,11 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 else: text.report(vulnerabilities, args.output_file) - has_unsanitized_vulnerabilities = any( + has_unsanitised_vulnerabilities = any( not isinstance(v, SanitisedVulnerability) for v in vulnerabilities ) - if has_unsanitized_vulnerabilities: + if has_unsanitised_vulnerabilities: sys.exit(1) From c07551dbcfcd369570ff9e1dfadafa18e8acc060 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 5 Sep 2018 14:48:56 +0100 Subject: [PATCH 504/541] Add --only-unsanitised flag to not print sanitised vulnerabilities It is sometimes what you want, but often you just want the failures without sanitised vulns in the output. --- pyt/__main__.py | 9 +-------- pyt/formatters/json.py | 11 ++++++++--- pyt/formatters/text.py | 26 +++++++++++++++++--------- pyt/usage.py | 30 ++++++++++++++++++++++++------ tests/main_test.py | 33 +++++++++++++++++++++------------ tests/usage_test.py | 15 +++++++++------ 6 files changed, 80 insertions(+), 44 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 4bea43d2..3e6a9911 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -12,10 +12,6 @@ get_directory_modules, get_modules ) -from .formatters import ( - json, - text -) from .usage import parse_args from .vulnerabilities import ( find_vulnerabilities, @@ -130,10 +126,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 args.baseline ) - if args.json: - json.report(vulnerabilities, args.output_file) - else: - text.report(vulnerabilities, args.output_file) + args.formatter.report(vulnerabilities, args.output_file, not args.only_unsanitised) has_unsanitised_vulnerabilities = any( not isinstance(v, SanitisedVulnerability) diff --git a/pyt/formatters/json.py b/pyt/formatters/json.py index efc95b95..8e0eab11 100644 --- a/pyt/formatters/json.py +++ b/pyt/formatters/json.py @@ -1,12 +1,14 @@ """This formatter outputs the issues in JSON.""" - import json from datetime import datetime +from ..vulnerabilities.vulnerability_helper import SanitisedVulnerability + def report( vulnerabilities, - fileobj + fileobj, + print_sanitised, ): """ Prints issues in JSON format. @@ -19,7 +21,10 @@ def report( machine_output = { 'generated_at': time_string, - 'vulnerabilities': [vuln.as_dict() for vuln in vulnerabilities] + 'vulnerabilities': [ + vuln.as_dict() for vuln in vulnerabilities + if print_sanitised or not isinstance(vuln, SanitisedVulnerability) + ] } result = json.dumps( diff --git a/pyt/formatters/text.py b/pyt/formatters/text.py index 7961b05e..2041e006 100644 --- a/pyt/formatters/text.py +++ b/pyt/formatters/text.py @@ -1,9 +1,11 @@ """This formatter outputs the issues as plain text.""" +from ..vulnerabilities.vulnerability_helper import SanitisedVulnerability def report( vulnerabilities, - fileobj + fileobj, + print_sanitised, ): """ Prints issues in text format. @@ -11,15 +13,21 @@ def report( Args: vulnerabilities: list of vulnerabilities to report fileobj: The output file object, which may be sys.stdout + print_sanitised: Print just unsanitised vulnerabilities or sanitised vulnerabilities as well """ - number_of_vulnerabilities = len(vulnerabilities) + n_vulnerabilities = len(vulnerabilities) + unsanitised_vulnerabilities = [v for v in vulnerabilities if not isinstance(v, SanitisedVulnerability)] + n_unsanitised = len(unsanitised_vulnerabilities) + n_sanitised = n_vulnerabilities - n_unsanitised + heading = "{} vulnerabilit{} found{}{}\n".format( + 'No' if n_unsanitised == 0 else n_unsanitised, + 'y' if n_unsanitised == 1 else 'ies', + " (plus {} sanitised)".format(n_sanitised) if n_sanitised else "", + ':' if n_vulnerabilities else '.', + ) + vulnerabilities_to_print = vulnerabilities if print_sanitised else unsanitised_vulnerabilities with fileobj: - if number_of_vulnerabilities == 0: - fileobj.write('No vulnerabilities found.\n') - elif number_of_vulnerabilities == 1: - fileobj.write('%s vulnerability found:\n' % number_of_vulnerabilities) - else: - fileobj.write('%s vulnerabilities found:\n' % number_of_vulnerabilities) + fileobj.write(heading) - for i, vulnerability in enumerate(vulnerabilities, start=1): + for i, vulnerability in enumerate(vulnerabilities_to_print, start=1): fileobj.write('Vulnerability {}:\n{}\n\n'.format(i, vulnerability)) diff --git a/pyt/usage.py b/pyt/usage.py index d5b6efbe..7acc5be7 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -2,6 +2,8 @@ import os import sys +from .formatters import json, screen, text + default_blackbox_mapping_file = os.path.join( os.path.dirname(__file__), @@ -49,12 +51,6 @@ def _add_optional_group(parser): default=False, metavar='BASELINE_JSON_FILE', ) - optional_group.add_argument( - '-j', '--json', - help='Prints JSON instead of report.', - action='store_true', - default=False - ) optional_group.add_argument( '-t', '--trigger-word-file', help='Input file with a list of sources and sinks', @@ -115,6 +111,28 @@ def _add_optional_group(parser): default=True, dest='allow_local_imports' ) + optional_group.add_argument( + '-u', '--only-unsanitised', + help="Don't print sanitised vulnerabilities.", + action='store_true', + default=False, + ) + parser.set_defaults(formatter=text) + formatter_group = optional_group.add_mutually_exclusive_group() + formatter_group.add_argument( + '-j', '--json', + help='Prints JSON instead of report.', + action='store_const', + const=json, + dest='formatter', + ) + formatter_group.add_argument( + '-s', '--screen', + help='Prints colorful report.', + action='store_const', + const=screen, + dest='formatter', + ) def parse_args(args): diff --git a/tests/main_test.py b/tests/main_test.py index 1037d843..1e33ee24 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -8,72 +8,81 @@ class MainTest(BaseTestCase): @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @mock.patch('pyt.__main__.find_vulnerabilities') - @mock.patch('pyt.__main__.text') + @mock.patch('pyt.formatters.text') def test_text_output(self, mock_text, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): mock_find_vulnerabilities.return_value = 'stuff' example_file = 'examples/vulnerable_code/inter_command_injection.py' output_file = 'mocked_outfile' + import pyt.formatters.text mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( project_root=None, baseline=None, - json=None, - output_file=output_file + formatter=pyt.formatters.text, + output_file=output_file, + only_unsanitised=False, ) with self.assertRaises(SystemExit): main(['parse_args is mocked']) assert mock_text.report.call_count == 1 mock_text.report.assert_called_with( mock_find_vulnerabilities.return_value, - mock_parse_args.return_value.output_file + mock_parse_args.return_value.output_file, + True, ) @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @mock.patch('pyt.__main__.find_vulnerabilities') - @mock.patch('pyt.__main__.text') + @mock.patch('pyt.formatters.text') def test_no_vulns_found(self, mock_text, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): mock_find_vulnerabilities.return_value = [] example_file = 'examples/vulnerable_code/inter_command_injection.py' output_file = 'mocked_outfile' + import pyt.formatters.text mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( project_root=None, baseline=None, - json=None, - output_file=output_file + formatter=pyt.formatters.text, + output_file=output_file, + only_unsanitised=True, ) main(['parse_args is mocked']) # No SystemExit assert mock_text.report.call_count == 1 mock_text.report.assert_called_with( mock_find_vulnerabilities.return_value, - mock_parse_args.return_value.output_file + mock_parse_args.return_value.output_file, + False, ) @mock.patch('pyt.__main__.discover_files') @mock.patch('pyt.__main__.parse_args') @mock.patch('pyt.__main__.find_vulnerabilities') - @mock.patch('pyt.__main__.json') + @mock.patch('pyt.formatters.json') def test_json_output(self, mock_json, mock_find_vulnerabilities, mock_parse_args, mock_discover_files): mock_find_vulnerabilities.return_value = 'stuff' example_file = 'examples/vulnerable_code/inter_command_injection.py' output_file = 'mocked_outfile' + import pyt.formatters.json mock_discover_files.return_value = [example_file] mock_parse_args.return_value = mock.Mock( project_root=None, baseline=None, - json=True, - output_file=output_file + formatter=pyt.formatters.json, + output_file=output_file, + only_unsanitised=False, ) with self.assertRaises(SystemExit): main(['parse_args is mocked']) assert mock_json.report.call_count == 1 mock_json.report.assert_called_with( mock_find_vulnerabilities.return_value, - mock_parse_args.return_value.output_file + mock_parse_args.return_value.output_file, + True, ) diff --git a/tests/usage_test.py b/tests/usage_test.py index 363786bd..294004a4 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -26,10 +26,10 @@ def test_no_args(self): self.maxDiff = None EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] + [-b BASELINE_JSON_FILE] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] - [--dont-prepend-root] [--no-local-imports] + [--dont-prepend-root] [--no-local-imports] [-u] [-j | -s] targets [targets ...] required arguments: @@ -45,7 +45,6 @@ def test_no_args(self): -b BASELINE_JSON_FILE, --baseline BASELINE_JSON_FILE Path of a baseline report to compare against (only JSON-formatted files are accepted) - -j, --json Prints JSON instead of report. -t TRIGGER_WORD_FILE, --trigger-word-file TRIGGER_WORD_FILE Input file with a list of sources and sinks -m BLACKBOX_MAPPING_FILE, --blackbox-mapping-file BLACKBOX_MAPPING_FILE @@ -62,7 +61,11 @@ def test_no_args(self): with app.* --no-local-imports If set, absolute imports must be relative to the project root. If not set, modules in the same - directory can be imported just by their names.\n""" + directory can be imported just by their names. + -u, --only-unsanitised + Don't print sanitised vulnerabilities. + -j, --json Prints JSON instead of report. + -s, --screen Prints colorful report.\n""" self.assertEqual(stdout.getvalue(), EXPECTED) @@ -72,10 +75,10 @@ def test_valid_args_but_no_targets(self): parse_args(['-j']) EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] - [-b BASELINE_JSON_FILE] [-j] [-t TRIGGER_WORD_FILE] + [-b BASELINE_JSON_FILE] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] - [--dont-prepend-root] [--no-local-imports] + [--dont-prepend-root] [--no-local-imports] [-u] [-j | -s] targets [targets ...] python -m pyt: error: the following arguments are required: targets\n""" From bf4925901e1c7fafb9b5e329d69481baf6008c99 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 5 Sep 2018 16:29:30 +0100 Subject: [PATCH 505/541] Add basic python logging to pyt with -v -vv -vvv Very basic python logging added to pyt. Very useful when you want to see: - which files are being processed - if your imports are not being inspected - which file crashed pyt --- pyt/__main__.py | 14 ++++++++++++++ pyt/cfg/stmt_visitor.py | 21 ++++++++++++++++++--- pyt/core/ast_helper.py | 8 ++++---- pyt/usage.py | 6 +++++- tests/usage_test.py | 5 +++-- 5 files changed, 44 insertions(+), 10 deletions(-) diff --git a/pyt/__main__.py b/pyt/__main__.py index 3e6a9911..d952cbe3 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -1,5 +1,6 @@ """The comand line module of PyT.""" +import logging import os import sys from collections import defaultdict @@ -26,6 +27,8 @@ is_function_without_leading_ ) +log = logging.getLogger(__name__) + def discover_files(targets, excluded_files, recursive=False): included_files = list() @@ -37,11 +40,13 @@ def discover_files(targets, excluded_files, recursive=False): if file.endswith('.py') and file not in excluded_list: fullpath = os.path.join(root, file) included_files.append(fullpath) + log.debug('Discovered file: %s', fullpath) if not recursive: break else: if target not in excluded_list: included_files.append(target) + log.debug('Discovered file: %s', target) return included_files @@ -60,6 +65,14 @@ def retrieve_nosec_lines( def main(command_line_args=sys.argv[1:]): # noqa: C901 args = parse_args(command_line_args) + logging_level = ( + logging.ERROR if not args.verbose else + logging.WARN if args.verbose == 1 else + logging.INFO if args.verbose == 2 else + logging.DEBUG + ) + logging.basicConfig(level=logging_level, format='[%(levelname)s] %(name)s: %(message)s') + files = discover_files( args.targets, args.excluded_paths, @@ -74,6 +87,7 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 cfg_list = list() for path in sorted(files): + log.info("Processing %s", path) if not args.ignore_nosec: nosec_lines[path] = retrieve_nosec_lines(path) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index ce4d198b..95913211 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -1,6 +1,8 @@ import ast import itertools +import logging import os.path +from pkgutil import iter_modules from .alias_helper import ( as_alias_handler, @@ -52,6 +54,9 @@ remove_breaks ) +log = logging.getLogger(__name__) +uninspectable_modules = {module.name for module in iter_modules()} # Don't warn about failing to import these + class StmtVisitor(ast.NodeVisitor): def __init__(self, allow_local_directory_imports=True): @@ -429,9 +434,12 @@ def visit_Assign(self, node): else: label = LabelVisitor() label.visit(node) - print('Assignment not properly handled.', - 'Could result in not finding a vulnerability.', - 'Assignment:', label.result) + log.warn( + 'Assignment not properly handled in %s. Could result in not finding a vulnerability.' + 'Assignment: %s', + getattr(self, 'filenames', ['?'])[0], + self.label.result, + ) return self.append_node(AssignmentNode( label.result, label.result, @@ -1022,6 +1030,10 @@ def visit_Import(self, node): name.asname, retrieve_import_alias_mapping(node.names) ) + for alias in node.names: + if alias.name not in uninspectable_modules: + log.warn("Cannot inspect module %s", alias.name) + uninspectable_modules.add(alias.name) # Don't repeatedly warn about this return IgnoredNode() def visit_ImportFrom(self, node): @@ -1061,4 +1073,7 @@ def visit_ImportFrom(self, node): retrieve_import_alias_mapping(node.names), from_from=True ) + if node.module not in uninspectable_modules: + log.warn("Cannot inspect module %s", node.module) + uninspectable_modules.add(node.module) return IgnoredNode() diff --git a/pyt/core/ast_helper.py b/pyt/core/ast_helper.py index 4ca1ca69..e4ccbca2 100644 --- a/pyt/core/ast_helper.py +++ b/pyt/core/ast_helper.py @@ -2,13 +2,14 @@ Useful when working with the ast module.""" import ast +import logging import os import subprocess from functools import lru_cache from .transformer import PytTransformer - +log = logging.getLogger(__name__) BLACK_LISTED_CALL_NAMES = ['self'] recursive = False @@ -16,11 +17,10 @@ def _convert_to_3(path): # pragma: no cover """Convert python 2 file to python 3.""" try: - print('##### Trying to convert file to Python 3. #####') + log.warn('##### Trying to convert %s to Python 3. #####', path) subprocess.call(['2to3', '-w', path]) except subprocess.SubprocessError: - print('Check if 2to3 is installed. ' - 'https://docs.python.org/2/library/2to3.html') + log.exception('Check if 2to3 is installed. https://docs.python.org/2/library/2to3.html') exit(1) diff --git a/pyt/usage.py b/pyt/usage.py index 7acc5be7..9de776cf 100644 --- a/pyt/usage.py +++ b/pyt/usage.py @@ -30,7 +30,11 @@ def _add_required_group(parser): def _add_optional_group(parser): optional_group = parser.add_argument_group('optional arguments') - + optional_group.add_argument( + '-v', '--verbose', + action='count', + help='Increase logging verbosity. Can repeated e.g. -vvv', + ) optional_group.add_argument( '-a', '--adaptor', help='Choose a web framework adaptor: ' diff --git a/tests/usage_test.py b/tests/usage_test.py index 294004a4..cf79f6c5 100644 --- a/tests/usage_test.py +++ b/tests/usage_test.py @@ -25,7 +25,7 @@ def test_no_args(self): self.maxDiff = None - EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] + EXPECTED = """usage: python -m pyt [-h] [-v] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] @@ -36,6 +36,7 @@ def test_no_args(self): targets source file(s) or directory(s) to be scanned optional arguments: + -v, --verbose Increase logging verbosity. Can repeated e.g. -vvv -a ADAPTOR, --adaptor ADAPTOR Choose a web framework adaptor: Flask(Default), Django, Every or Pylons @@ -74,7 +75,7 @@ def test_valid_args_but_no_targets(self): with capture_sys_output() as (_, stderr): parse_args(['-j']) - EXPECTED = """usage: python -m pyt [-h] [-a ADAPTOR] [-pr PROJECT_ROOT] + EXPECTED = """usage: python -m pyt [-h] [-v] [-a ADAPTOR] [-pr PROJECT_ROOT] [-b BASELINE_JSON_FILE] [-t TRIGGER_WORD_FILE] [-m BLACKBOX_MAPPING_FILE] [-i] [-o OUTPUT_FILE] [--ignore-nosec] [-r] [-x EXCLUDED_PATHS] From c223e13a45032906ed96503353abeb2051e89d46 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 7 Sep 2018 11:13:26 +0100 Subject: [PATCH 506/541] More logging --- pyt/__main__.py | 2 ++ pyt/web_frameworks/framework_adaptor.py | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/pyt/__main__.py b/pyt/__main__.py index d952cbe3..8646bceb 100644 --- a/pyt/__main__.py +++ b/pyt/__main__.py @@ -125,7 +125,9 @@ def main(command_line_args=sys.argv[1:]): # noqa: C901 ) initialize_constraint_table(cfg_list) + log.info("Analysing") analyse(cfg_list) + log.info("Finding vulnerabilities") vulnerabilities = find_vulnerabilities( cfg_list, args.blackbox_mapping_file, diff --git a/pyt/web_frameworks/framework_adaptor.py b/pyt/web_frameworks/framework_adaptor.py index 2bc4d7ee..96d2a32f 100644 --- a/pyt/web_frameworks/framework_adaptor.py +++ b/pyt/web_frameworks/framework_adaptor.py @@ -1,6 +1,7 @@ """A generic framework adaptor that leaves route criteria to the caller.""" import ast +import logging from ..cfg import make_cfg from ..core.ast_helper import Arguments @@ -10,6 +11,8 @@ TaintedNode ) +log = logging.getLogger(__name__) + class FrameworkAdaptor(): """An engine that uses the template pattern to find all @@ -31,6 +34,7 @@ def __init__( def get_func_cfg_with_tainted_args(self, definition): """Build a function cfg and return it, with all arguments tainted.""" + log.debug("Getting CFG for %s", definition.name) func_cfg = make_cfg( definition.node, self.project_modules, From b2daf8b08cd72d355b266022e199dc0111325428 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 7 Sep 2018 11:08:34 +0100 Subject: [PATCH 507/541] Recursive function calls shouldn't raise RecursionError Store a stack of definitions. If you revisit a function, treat it as a blackbox. The non-recursive return values should still propagate. --- pyt/cfg/expr_visitor.py | 9 +++++++++ tests/cfg/cfg_test.py | 8 ++++++++ 2 files changed, 17 insertions(+) diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index 6623d717..57537875 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -1,4 +1,5 @@ import ast +import logging from .alias_helper import handle_aliases_in_calls from ..core.ast_helper import ( @@ -30,6 +31,8 @@ from .stmt_visitor import StmtVisitor from .stmt_visitor_helper import CALL_IDENTIFIER +log = logging.getLogger(__name__) + class ExprVisitor(StmtVisitor): def __init__( @@ -52,6 +55,7 @@ def __init__( self.undecided = False self.function_names = list() self.function_return_stack = list() + self.function_definition_stack = list() # used to avoid recursion self.module_definitions_stack = list() self.prev_nodes_to_avoid = list() self.last_control_flow_nodes = list() @@ -543,6 +547,7 @@ def process_function(self, call_node, definition): first_node ) self.function_return_stack.pop() + self.function_definition_stack.pop() return self.nodes[-1] @@ -560,11 +565,15 @@ def visit_Call(self, node): last_attribute = _id.rpartition('.')[-1] if definition: + if definition in self.function_definition_stack: + log.debug("Recursion encountered in function %s", _id) + return self.add_blackbox_or_builtin_call(node, blackbox=True) if isinstance(definition.node, ast.ClassDef): self.add_blackbox_or_builtin_call(node, blackbox=False) elif isinstance(definition.node, ast.FunctionDef): self.undecided = False self.function_return_stack.append(_id) + self.function_definition_stack.append(definition) return self.process_function(node, definition) else: raise Exception('Definition was neither FunctionDef or ' + diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index 3c215983..ef478396 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -3,6 +3,7 @@ from .cfg_base_test_case import CFGBaseTestCase from pyt.core.node_types import ( + BBorBInode, EntryOrExitNode, Node ) @@ -1389,6 +1390,13 @@ def test_call_on_call(self): path = 'examples/example_inputs/call_on_call.py' self.cfg_create_from_file(path) + def test_recursive_function(self): + path = 'examples/example_inputs/recursive.py' + self.cfg_create_from_file(path) + recursive_call = self.cfg.nodes[7] + assert recursive_call.label == '~call_3 = ret_rec(wat)' + assert isinstance(recursive_call, BBorBInode) # Not RestoreNode + class CFGCallWithAttributeTest(CFGBaseTestCase): def setUp(self): From 093f506dde3d7c8ef0f87ed1de6b86d837865de1 Mon Sep 17 00:00:00 2001 From: bcaller Date: Fri, 7 Sep 2018 11:29:49 +0100 Subject: [PATCH 508/541] Add test for vulnerabilities in recursive functions recur_but_no_propagation is actually safe, but it would be difficult to reliably determine this, so we'll have to do with the false positive at least for now (as recursive functions can call other recursive functions). --- examples/vulnerable_code/recursive.py | 32 +++++++++++++++++++ tests/main_test.py | 4 +-- tests/vulnerabilities/vulnerabilities_test.py | 5 +++ 3 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 examples/vulnerable_code/recursive.py diff --git a/examples/vulnerable_code/recursive.py b/examples/vulnerable_code/recursive.py new file mode 100644 index 00000000..d2cd6163 --- /dev/null +++ b/examples/vulnerable_code/recursive.py @@ -0,0 +1,32 @@ +from flask import Flask, request + +app = Flask(__name__) + + +def recur_without_any_propagation(x): + if len(x) < 20: + return recur_without_any_propagation("a" * 24) + return "Done" + + +def recur_no_propagation_false_positive(x): + if len(x) < 20: + return recur_no_propagation_false_positive(x + "!") + return "Done" + + +def recur_with_propagation(x): + if len(x) < 20: + return recur_with_propagation(x + "!") + return x + + +@app.route('/recursive') +def route(): + param = request.args.get('param', 'not set') + repeated_completely_untainted = recur_without_any_propagation(param) + app.db.execute(repeated_completely_untainted) + repeated_untainted = recur_no_propagation_false_positive(param) + app.db.execute(repeated_untainted) + repeated_tainted = recur_with_propagation(param) + app.db.execute(repeated_tainted) diff --git a/tests/main_test.py b/tests/main_test.py index 1e33ee24..bc985629 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -108,11 +108,11 @@ def test_targets_with_recursive(self): excluded_files = "" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 31) + self.assertEqual(len(included_files), 32) def test_targets_with_recursive_and_excluded(self): targets = ["examples/vulnerable_code/"] excluded_files = "inter_command_injection.py" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 30) + self.assertEqual(len(included_files), 31) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 52fbfb2c..8f5e70f1 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -465,6 +465,11 @@ def assert_vulnerable(fixture): assert_vulnerable('result = repr(str("%s" % TAINT.lower().upper()))') assert_vulnerable('result = repr(str("{}".format(TAINT.lower())))') + def test_recursion(self): + # Really this file only has one vulnerability, but for now it's safer to keep the false positive. + vulnerabilities = self.run_analysis('examples/vulnerable_code/recursive.py') + self.assert_length(vulnerabilities, expected_length=2) + class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): From 5d7a94b417b97b7fd56b9b15cc5e12d685dd4d84 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Tue, 11 Sep 2018 18:23:33 -0700 Subject: [PATCH 509/541] [version] Bump to 0.40 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 9809fcdd..17f2c8f5 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.39' +VERSION = '0.40' setup( From 2e4f8c9c884f8b072f7ae4319047c3aa5bd3eed6 Mon Sep 17 00:00:00 2001 From: bcaller Date: Mon, 29 Oct 2018 15:39:11 +0000 Subject: [PATCH 510/541] Better handling of IfExp (ternary) Reduces false positives. As an example: result = "a" if TAINT else "c" In AST, the assignment value is `IfExp(test=TAINT, body="a", orelse="c")`. Even though `TAINT` is inside the assignment of `result`, it can't actually taint `result` as it is part of the boolean test expression. Previously, `result` would have been tainted, which was a false positive. We don't want to completely ignore the test though in case it contains a sink function. Therefore, if the test contains expressions we transform it as so: result = "a" if b(c) + 2 else "d" to the multi line: __if_exp_0 = b(c) + 2 result = "a" if __if_exp_0 else "d" This way if `b` is a sink and `c` is tainted we see a vulnerability, but even if `c` is tainted we don't taint `result`. --- examples/example_inputs/ternary.py | 9 +++ pyt/core/transformer.py | 77 ++++++++++++++++++- pyt/helper_visitors/label_visitor.py | 9 +++ .../right_hand_side_visitor.py | 5 ++ tests/cfg/cfg_test.py | 33 ++++++++ tests/core/transformer_test.py | 16 ++++ tests/helper_visitors/label_visitor_test.py | 4 + 7 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 examples/example_inputs/ternary.py diff --git a/examples/example_inputs/ternary.py b/examples/example_inputs/ternary.py new file mode 100644 index 00000000..fe0914e4 --- /dev/null +++ b/examples/example_inputs/ternary.py @@ -0,0 +1,9 @@ +result = ( + "abc" + if t.u == v.w else + "def" + if x else + y # This is the only RHS variable which taints result + if func(z if 1 + 1 == 2 else z) else + "ghi" +) diff --git a/pyt/core/transformer.py b/pyt/core/transformer.py index ccdd82c4..5084bae6 100644 --- a/pyt/core/transformer.py +++ b/pyt/core/transformer.py @@ -64,5 +64,80 @@ def visit_Return(self, node): return self.visit_chain(node) -class PytTransformer(AsyncTransformer, ChainedFunctionTransformer, ast.NodeTransformer): +class IfExpRewriter(ast.NodeTransformer): + """Splits IfExp ternary expressions containing complex tests into multiple statements + + Will change + + a if b(c) else d + + into + + a if __if_exp_0 else d + + with Assign nodes in assignments [__if_exp_0 = b(c)] + """ + + def __init__(self, starting_index=0): + self._temporary_variable_index = starting_index + self.assignments = [] + super().__init__() + + def visit_IfExp(self, node): + if isinstance(node.test, (ast.Name, ast.Attribute)): + return self.generic_visit(node) + else: + temp_var_id = '__if_exp_{}'.format(self._temporary_variable_index) + self._temporary_variable_index += 1 + assignment_of_test = ast.Assign( + targets=[ast.Name(id=temp_var_id, ctx=ast.Store())], + value=self.visit(node.test), + ) + ast.copy_location(assignment_of_test, node) + self.assignments.append(assignment_of_test) + transformed_if_exp = ast.IfExp( + test=ast.Name(id=temp_var_id, ctx=ast.Load()), + body=self.visit(node.body), + orelse=self.visit(node.orelse), + ) + ast.copy_location(transformed_if_exp, node) + return transformed_if_exp + + def visit_FunctionDef(self, node): + return node + + +class IfExpTransformer: + """Goes through module and function bodies, adding extra Assign nodes due to IfExp expressions.""" + + def visit_body(self, nodes): + new_nodes = [] + count = 0 + for node in nodes: + rewriter = IfExpRewriter(count) + possibly_transformed_node = rewriter.visit(node) + if rewriter.assignments: + new_nodes.extend(rewriter.assignments) + count += len(rewriter.assignments) + new_nodes.append(possibly_transformed_node) + return new_nodes + + def visit_FunctionDef(self, node): + transformed = ast.FunctionDef( + name=node.name, + args=node.args, + body=self.visit_body(node.body), + decorator_list=node.decorator_list, + returns=node.returns + ) + ast.copy_location(transformed, node) + return self.generic_visit(transformed) + + def visit_Module(self, node): + transformed = ast.Module(self.visit_body(node.body)) + ast.copy_location(transformed, node) + return self.generic_visit(transformed) + + +class PytTransformer(AsyncTransformer, IfExpTransformer, ChainedFunctionTransformer, ast.NodeTransformer): pass diff --git a/pyt/helper_visitors/label_visitor.py b/pyt/helper_visitors/label_visitor.py index 3be85ba4..e8e2d74a 100644 --- a/pyt/helper_visitors/label_visitor.py +++ b/pyt/helper_visitors/label_visitor.py @@ -324,3 +324,12 @@ def visit_FormattedValue(self, node): def visit_Starred(self, node): self.result += '*' self.visit(node.value) + + def visit_IfExp(self, node): + self.result += '(' + self.visit(node.test) + self.result += ') ? (' + self.visit(node.body) + self.result += ') : (' + self.visit(node.orelse) + self.result += ')' diff --git a/pyt/helper_visitors/right_hand_side_visitor.py b/pyt/helper_visitors/right_hand_side_visitor.py index 629a94bb..02c96618 100644 --- a/pyt/helper_visitors/right_hand_side_visitor.py +++ b/pyt/helper_visitors/right_hand_side_visitor.py @@ -22,6 +22,11 @@ def visit_Call(self, node): for keyword in node.keywords: self.visit(keyword) + def visit_IfExp(self, node): + # The test doesn't taint the assignment + self.visit(node.body) + self.visit(node.orelse) + @classmethod def result_for_node(cls, node): visitor = cls() diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index ef478396..a4c24ba5 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -580,6 +580,39 @@ def test_if_not(self): (_exit, _if) ]) + def test_ternary_ifexp(self): + self.cfg_create_from_file('examples/example_inputs/ternary.py') + + # entry = 0 + tmp_if_1 = 1 + # tmp_if_inner = 2 + call = 3 + # tmp_if_call = 4 + actual_if_exp = 5 + exit = 6 + + self.assert_length(self.cfg.nodes, expected_length=exit + 1) + self.assertInCfg([ + (i + 1, i) for i in range(exit) + ]) + + self.assertCountEqual( + self.cfg.nodes[actual_if_exp].right_hand_side_variables, + ['y'], + "The variables in the test expressions shouldn't appear as RHS variables" + ) + + self.assertCountEqual( + self.cfg.nodes[tmp_if_1].right_hand_side_variables, + ['t', 'v'], + ) + + self.assertIn( + 'ret_func(', + self.cfg.nodes[call].label, + "Function calls inside the test expressions should still appear in the CFG", + ) + class CFGWhileTest(CFGBaseTestCase): diff --git a/tests/core/transformer_test.py b/tests/core/transformer_test.py index 2676c70d..95213706 100644 --- a/tests/core/transformer_test.py +++ b/tests/core/transformer_test.py @@ -52,3 +52,19 @@ def test_chained_function(self): transformed = PytTransformer().visit(chained_tree) self.assertEqual(ast.dump(transformed), ast.dump(separated_tree)) + + def test_if_exp(self): + complex_if_exp_tree = ast.parse("\n".join([ + "def a():", + " b = c if d.e(f) else g if h else i if j.k(l) else m", + ])) + + separated_tree = ast.parse("\n".join([ + "def a():", + " __if_exp_0 = d.e(f)", + " __if_exp_1 = j.k(l)", + " b = c if __if_exp_0 else g if h else i if __if_exp_1 else m", + ])) + + transformed = PytTransformer().visit(complex_if_exp_tree) + self.assertEqual(ast.dump(transformed), ast.dump(separated_tree)) diff --git a/tests/helper_visitors/label_visitor_test.py b/tests/helper_visitors/label_visitor_test.py index 2a7f0857..d4b77794 100644 --- a/tests/helper_visitors/label_visitor_test.py +++ b/tests/helper_visitors/label_visitor_test.py @@ -83,3 +83,7 @@ def test_joined_str_with_format_spec(self): def test_starred(self): label = self.perform_labeling_on_expression('[a, *b] = *c, d') self.assertEqual(label.result, '[a, *b] = (*c, d)') + + def test_if_exp(self): + label = self.perform_labeling_on_expression('a = b if c else d') + self.assertEqual(label.result, 'a = (c) ? (b) : (d)') From 23c186fb27ec2db7aba627c08727cea71ec9f3f8 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 31 Oct 2018 17:57:24 +0000 Subject: [PATCH 511/541] Simplify trigger file for sink argument propagation This changes the schema of the trigger file. Previously there were too many options and it was confusing. My fault, sorry. This meant that `db.execute(query, **TAINT)` was marked as a vulnerability whereas `db.execute(text=query, **TAINT)` wasn't. Neither are vulnerabilities, so this gave a FALSE POSITIVE. Now we have `arg_dict` which is a dictionary of keyword to argument position. E.g. for `def f(a, b, *, c)` we can specify the arg_dict as: ``` {"a": 0, "b": 1, "c": null} ``` if we want them all to propagate or not propagate depending on the `unlisted_args_propagate` value. This way, we can more easily define db.execute as: ``` "execute(": { "unlisted_args_propagate": false, "arg_dict": { "text": 0 } }, ``` --- .../trigger_definitions_parser.py | 27 +++++++++++-------- pyt/vulnerabilities/vulnerabilities.py | 20 +++++++------- .../test_positions.pyt | 21 +++++---------- tests/vulnerabilities/vulnerabilities_test.py | 1 + 4 files changed, 33 insertions(+), 36 deletions(-) diff --git a/pyt/vulnerabilities/trigger_definitions_parser.py b/pyt/vulnerabilities/trigger_definitions_parser.py index ab737928..4bfd3a15 100644 --- a/pyt/vulnerabilities/trigger_definitions_parser.py +++ b/pyt/vulnerabilities/trigger_definitions_parser.py @@ -16,33 +16,38 @@ class Sink: def __init__( self, trigger, *, - unlisted_args_propagate=True, unlisted_kwargs_propagate=True, - arg_list=None, kwarg_list=None, - sanitisers=None + unlisted_args_propagate=True, + arg_dict=None, + sanitisers=None, ): self._trigger = trigger self.sanitisers = sanitisers or [] self.arg_list_propagates = not unlisted_args_propagate - self.kwarg_list_propagates = not unlisted_kwargs_propagate if trigger[-1] != '(': - if self.arg_list_propagates or self.kwarg_list_propagates or arg_list or kwarg_list: + if self.arg_list_propagates or arg_dict: raise ValueError("Propagation options specified, but trigger word isn't a function call") - self.arg_list = set(arg_list or ()) - self.kwarg_list = set(kwarg_list or ()) + arg_dict = {} if arg_dict is None else arg_dict + self.arg_position_to_kwarg = { + position: name for name, position in arg_dict.items() if position is not None + } + self.kwarg_list = set(arg_dict.keys()) def arg_propagates(self, index): - in_list = index in self.arg_list - return self.arg_list_propagates == in_list + kwarg = self.get_kwarg_from_position(index) + return self.kwarg_propagates(kwarg) def kwarg_propagates(self, keyword): in_list = keyword in self.kwarg_list - return self.kwarg_list_propagates == in_list + return self.arg_list_propagates == in_list + + def get_kwarg_from_position(self, index): + return self.arg_position_to_kwarg.get(index) @property def all_arguments_propagate_taint(self): - if self.arg_list or self.kwarg_list: + if self.kwarg_list: return False return True diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 47986ed8..0daca2cd 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -243,29 +243,27 @@ def get_sink_args(cfg_node): def get_sink_args_which_propagate(sink, ast_node): sink_args_with_positions = CallVisitor.get_call_visit_results(sink.trigger.call, ast_node) sink_args = [] + kwargs_present = set() for i, vars in enumerate(sink_args_with_positions.args): - if sink.trigger.arg_propagates(i): + kwarg = sink.trigger.get_kwarg_from_position(i) + if kwarg: + kwargs_present.add(kwarg) + if sink.trigger.kwarg_propagates(kwarg): sink_args.extend(vars) - if ( - # Either any unspecified arg propagates - not sink.trigger.arg_list_propagates or - # or there are some propagating args which weren't passed positionally - any(1 for position in sink.trigger.arg_list if position >= len(sink_args_with_positions.args)) - ): - sink_args.extend(sink_args_with_positions.unknown_args) - for keyword, vars in sink_args_with_positions.kwargs.items(): + kwargs_present.add(keyword) if sink.trigger.kwarg_propagates(keyword): sink_args.extend(vars) if ( # Either any unspecified kwarg propagates - not sink.trigger.kwarg_list_propagates or + not sink.trigger.arg_list_propagates or # or there are some propagating kwargs which have not been passed by keyword - sink.trigger.kwarg_list - set(sink_args_with_positions.kwargs.keys()) + sink.trigger.kwarg_list - kwargs_present ): + sink_args.extend(sink_args_with_positions.unknown_args) sink_args.extend(sink_args_with_positions.unknown_kwargs) return sink_args diff --git a/pyt/vulnerability_definitions/test_positions.pyt b/pyt/vulnerability_definitions/test_positions.pyt index 48e276fe..ddbc20a8 100644 --- a/pyt/vulnerability_definitions/test_positions.pyt +++ b/pyt/vulnerability_definitions/test_positions.pyt @@ -7,22 +7,15 @@ "normal(": {}, "execute(": { "unlisted_args_propagate": false, - "arg_list": [ - 0 - ], - "unlisted_kwargs_propagate": false, - "kwarg_list": [ - "text" - ] + "arg_dict": { + "text": 0 + } }, "run(": { - "kwarg_list": [ - "non_propagating" - ], - "arg_list": [ - 2, - 3 - ] + "arg_dict": { + "non_propagating": 2, + "something_else": 3 + } } } } diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 8f5e70f1..2846ab55 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -577,6 +577,7 @@ def check(fixture, vulnerable): 'execute(x, name=TAINT)', 'execute(x, *TAINT)', 'execute(text=x, **TAINT)', + 'execute(x, **TAINT)', 'dont_run(TAINT)', ) vuln_fixtures = ( From 7847d01a3ef28322fcb1de18d67c30586d290473 Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 31 Oct 2018 16:03:07 +0000 Subject: [PATCH 512/541] list is tainted by calling list.append(TAINT) Taint is propagated by: ``` list += [TAINT] list = list + TAINT ``` but with lists we often use a function to mutate the list: ``` list = [] list.append(TAINT) list.insert(0, TAINT) list.extend(TAINT) ``` Previously this didn't taint `list` so we had FALSE NEGATIVES. Now `list.append(TAINT)` is treated like augmented assignment, so list will be tainted. `list += list.append(TAINT)` Of course this wouldn't work as real code since `append` returns `None` but it is how you can think about this function which mutates `list`. The same goes for `set.add()`, `list.extend()`, `list.insert()`, `dict.update()`, although we aren't actually doing type checking, just looking at the name of the method. --- examples/vulnerable_code/list_append.py | 13 +++++++++++++ pyt/cfg/expr_visitor.py | 19 +++++++++++++++++++ pyt/cfg/expr_visitor_helper.py | 7 +++++++ tests/main_test.py | 4 ++-- tests/vulnerabilities/vulnerabilities_test.py | 18 +++++++++++++++--- 5 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 examples/vulnerable_code/list_append.py diff --git a/examples/vulnerable_code/list_append.py b/examples/vulnerable_code/list_append.py new file mode 100644 index 00000000..9c4bbd63 --- /dev/null +++ b/examples/vulnerable_code/list_append.py @@ -0,0 +1,13 @@ +import os + +from flask import request + + +def func(): + TAINT = request.args.get("TAINT") + + cmd = [] + cmd.append("echo") + cmd.append(TAINT) + + os.system(" ".join(cmd)) diff --git a/pyt/cfg/expr_visitor.py b/pyt/cfg/expr_visitor.py index 57537875..d49be28e 100644 --- a/pyt/cfg/expr_visitor.py +++ b/pyt/cfg/expr_visitor.py @@ -21,6 +21,7 @@ ) from .expr_visitor_helper import ( BUILTINS, + MUTATORS, return_connection_handler, SavedVariable ) @@ -59,6 +60,7 @@ def __init__( self.module_definitions_stack = list() self.prev_nodes_to_avoid = list() self.last_control_flow_nodes = list() + self._within_mutating_call = False # Are we already in a module? if module_definitions: @@ -578,6 +580,23 @@ def visit_Call(self, node): else: raise Exception('Definition was neither FunctionDef or ' + 'ClassDef, cannot add the function ') + elif ( + not self._within_mutating_call and + last_attribute in MUTATORS + and isinstance(node.func, ast.Attribute) + ): + # Change list.append(x) ---> list += list.append(x) + # This does in fact propagate as we don't know that append returns None + fake_aug_assign = ast.AugAssign( + target=node.func.value, + op=ast.Add, + value=node, + ) + ast.copy_location(fake_aug_assign, node) + self._within_mutating_call = True # Don't do this recursively + result = self.visit(fake_aug_assign) + self._within_mutating_call = False + return result elif last_attribute not in BUILTINS: # Mark the call as a blackbox because we don't have the definition return self.add_blackbox_or_builtin_call(node, blackbox=True) diff --git a/pyt/cfg/expr_visitor_helper.py b/pyt/cfg/expr_visitor_helper.py index 9667f7c1..a0df3c90 100644 --- a/pyt/cfg/expr_visitor_helper.py +++ b/pyt/cfg/expr_visitor_helper.py @@ -31,6 +31,13 @@ 'flash', 'jsonify' ) +MUTATORS = ( # list.append(x) taints list if x is tainted + 'add', + 'append', + 'extend', + 'insert', + 'update', +) def return_connection_handler(nodes, exit_node): diff --git a/tests/main_test.py b/tests/main_test.py index bc985629..561d8bd1 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -108,11 +108,11 @@ def test_targets_with_recursive(self): excluded_files = "" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 32) + self.assertEqual(len(included_files), 33) def test_targets_with_recursive_and_excluded(self): targets = ["examples/vulnerable_code/"] excluded_files = "inter_command_injection.py" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 31) + self.assertEqual(len(included_files), 32) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 8f5e70f1..a621f4d4 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -110,12 +110,17 @@ def test_build_sanitiser_node_dict(self): self.assertEqual(sanitiser_dict['escape'][0], cfg.nodes[3]) - def run_analysis(self, path=None): + def run_analysis( + self, + path=None, + adaptor_function=is_flask_route_function, + trigger_file=default_trigger_word_file, + ): if path: self.cfg_create_from_file(path) cfg_list = [self.cfg] - FrameworkAdaptor(cfg_list, [], [], is_flask_route_function) + FrameworkAdaptor(cfg_list, [], [], adaptor_function) initialize_constraint_table(cfg_list) analyse(cfg_list) @@ -123,7 +128,7 @@ def run_analysis(self, path=None): return find_vulnerabilities( cfg_list, default_blackbox_mapping_file, - default_trigger_word_file + trigger_file, ) def test_find_vulnerabilities_assign_other_var(self): @@ -470,6 +475,13 @@ def test_recursion(self): vulnerabilities = self.run_analysis('examples/vulnerable_code/recursive.py') self.assert_length(vulnerabilities, expected_length=2) + def test_list_append_taints_list(self): + vulnerabilities = self.run_analysis( + 'examples/vulnerable_code/list_append.py', + adaptor_function=is_function, + ) + self.assert_length(vulnerabilities, expected_length=1) + class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): From 3b885ec73bdfefd80b5ca2860033d2f8a9298e81 Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 1 Nov 2018 15:33:18 +0000 Subject: [PATCH 513/541] [version] Bump to 0.41 --- CHANGELOG.md | 32 ++++++++++++++++++++++++++++++++ setup.py | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2aefd0ec..6609a582 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,38 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#xxxx]: https://github.com/python-security/pyt/pull/xxxx [@xxxx]: https://github.com/xxxx --> +# 0.41 +##### November 1st, 2018 + +#### :boom: Breaking Changes +* Changed trigger file format when specifying specific tainted args ([#182]) + +#### :tada: New Features +* Function calls such as `list.append` and `dict.update` now propagate taint to the list or dict ([#181]) + +#### :bug: Bugfixes +* IfExp (or ternary) expression handling improved ([#179]) + +# 0.40 +##### September 11th, 2018 + +#### :mega: Release Highlights +* Logging changes. Logging verbosity can be changed with `-v` to `-vvv` ([#172]) + +#### :boom: Breaking Changes +* Removed `--trim` option ([#169]) + +#### :tada: New Features +* Added `--only-unsanitised` flag to not print sanitised vulnerabilities ([#172]) + +#### :bug: Bugfixes +* Recursive functions don't cause `RecursionError` ([#173]) +* Handling of chained functions improved ([#171]) + +# 0.39 +##### August 21st, 2018 + +... # 0.38 ##### August 2nd, 2018 diff --git a/setup.py b/setup.py index 17f2c8f5..a597a9a7 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.40' +VERSION = '0.41' setup( From 974e84266d7a282383b06da8cc73233fdeb287b0 Mon Sep 17 00:00:00 2001 From: bcaller Date: Thu, 1 Nov 2018 15:57:50 +0000 Subject: [PATCH 514/541] [version] Bump 0.42 No actual code changes here. I accidentally uploaded some vim undo files inside the package added to pypi for 0.41. --- CHANGELOG.md | 2 +- MANIFEST.in | 3 ++- setup.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6609a582..928f88cf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#xxxx]: https://github.com/python-security/pyt/pull/xxxx [@xxxx]: https://github.com/xxxx --> -# 0.41 +# 0.42 ##### November 1st, 2018 #### :boom: Breaking Changes diff --git a/MANIFEST.in b/MANIFEST.in index d1c8d23a..d859a883 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1 +1,2 @@ -graft pyt/vulnerability_definitions +include pyt/vulnerability_definitions/*.pyt +include pyt/vulnerability_definitions/*.json diff --git a/setup.py b/setup.py index a597a9a7..102837cf 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from setuptools import setup -VERSION = '0.41' +VERSION = '0.42' setup( From e10f850bd879b8f5c1627919410e369164423583 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 8 Nov 2018 17:08:24 -0800 Subject: [PATCH 515/541] Add link to AMF Ranked #1 on [Givewell](https://www.givewell.org/charities/top-charities) --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index ad79c794..80ac92a5 100644 --- a/README.rst +++ b/README.rst @@ -16,6 +16,9 @@ .. image:: https://img.shields.io/badge/python-v3.6-blue.svg :target: https://pypi.org/project/python-taint/ +.. image:: https://img.shields.io/badge/Donate-Charity-orange.svg + :target: https://www.againstmalaria.com/donation.aspx + Python Taint ============ From ce56a20731de1b6245fd76555bdab00fc9fa07fb Mon Sep 17 00:00:00 2001 From: KevinHock Date: Thu, 8 Nov 2018 17:52:11 -0800 Subject: [PATCH 516/541] Fix link for PRs Welcome Badge --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 80ac92a5..025a3705 100644 --- a/README.rst +++ b/README.rst @@ -11,7 +11,7 @@ :target: https://badge.fury.io/py/python-taint .. image:: https://img.shields.io/badge/PRs-welcome-ff69b4.svg - :target: https://github.com/python-security/pyt/issues?q=is%3Aopen+is%3Aissue+label%3Agood-first-issue + :target: https://github.com/python-security/pyt/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22+ .. image:: https://img.shields.io/badge/python-v3.6-blue.svg :target: https://pypi.org/project/python-taint/ From e704c21116bd9248312a54a5aeed77634fb22345 Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Mon, 19 Nov 2018 16:05:47 -0800 Subject: [PATCH 517/541] 133: Visit functions in while test --- .../example_inputs/while_func_comparator.py | 6 ++++ pyt/cfg/stmt_visitor.py | 9 ++++-- tests/cfg/cfg_test.py | 32 +++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 examples/example_inputs/while_func_comparator.py diff --git a/examples/example_inputs/while_func_comparator.py b/examples/example_inputs/while_func_comparator.py new file mode 100644 index 00000000..6aafc2b6 --- /dev/null +++ b/examples/example_inputs/while_func_comparator.py @@ -0,0 +1,6 @@ +def foo(): + return 6 + +while x < foo(): + print(x) + x += 1 diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 95913211..ab45707a 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -565,13 +565,18 @@ def visit_While(self, node): label_visitor = LabelVisitor() label_visitor.visit(node.test) - test = self.append_node(Node( + while_node = self.append_node(Node( 'while ' + label_visitor.result + ':', node, path=self.filenames[-1] )) - return self.loop_node_skeleton(test, node) + for comp in node.test.comparators: + if isinstance(comp, ast.Call) and get_call_names_as_string(comp.func) in self.function_names: + last_node = self.visit(comp) + last_node.connect(while_node) + + return self.loop_node_skeleton(while_node, node) def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 """Processes a blackbox or builtin function when it is called. diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index a4c24ba5..cfdc056a 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -684,6 +684,38 @@ def test_while_line_numbers(self): self.assertLineNumber(else_body_2, 6) self.assertLineNumber(next_stmt, 7) + def test_while_func_iterator(self): + self.cfg_create_from_file('examples/example_inputs/while_func_comparator.py') + + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + test = 1 + entry_foo = 2 + ret_foo = 3 + exit_foo = 4 + call_foo = 5 + _print = 6 + body_1 = 7 + _exit = 8 + + self.assertEqual(self.cfg.nodes[test].label, 'while x < foo():') + + self.assertInCfg([ + (test, entry), + (entry_foo, test), + (_print, test), + (_exit, test), + (body_1, _print), + + (test, body_1), + (test, call_foo), + (ret_foo, entry_foo), + (exit_foo, ret_foo), + (call_foo, exit_foo), + + ]) + class CFGAssignmentMultiTest(CFGBaseTestCase): def test_assignment_multi_target(self): From effd87248cfba31318d61c72b3a0862e5313345a Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Tue, 20 Nov 2018 10:03:54 -0800 Subject: [PATCH 518/541] 133: Support for LHS functions and no comparison while tests --- .../example_inputs/while_func_comparator.py | 4 +- .../while_func_comparator_lhs.py | 6 +++ .../while_func_comparator_rhs.py | 6 +++ pyt/cfg/stmt_visitor.py | 18 +++++-- tests/cfg/cfg_test.py | 51 +++++++++++++++++-- 5 files changed, 76 insertions(+), 9 deletions(-) create mode 100644 examples/example_inputs/while_func_comparator_lhs.py create mode 100644 examples/example_inputs/while_func_comparator_rhs.py diff --git a/examples/example_inputs/while_func_comparator.py b/examples/example_inputs/while_func_comparator.py index 6aafc2b6..8c775f72 100644 --- a/examples/example_inputs/while_func_comparator.py +++ b/examples/example_inputs/while_func_comparator.py @@ -1,6 +1,6 @@ def foo(): - return 6 + return True -while x < foo(): +while foo(): print(x) x += 1 diff --git a/examples/example_inputs/while_func_comparator_lhs.py b/examples/example_inputs/while_func_comparator_lhs.py new file mode 100644 index 00000000..1904e8e7 --- /dev/null +++ b/examples/example_inputs/while_func_comparator_lhs.py @@ -0,0 +1,6 @@ +def foo(): + return 6 + +while foo() > x: + print(x) + x += 1 diff --git a/examples/example_inputs/while_func_comparator_rhs.py b/examples/example_inputs/while_func_comparator_rhs.py new file mode 100644 index 00000000..6aafc2b6 --- /dev/null +++ b/examples/example_inputs/while_func_comparator_rhs.py @@ -0,0 +1,6 @@ +def foo(): + return 6 + +while x < foo(): + print(x) + x += 1 diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index ab45707a..965b24eb 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -563,7 +563,8 @@ def visit_For(self, node): def visit_While(self, node): label_visitor = LabelVisitor() - label_visitor.visit(node.test) + test = node.test # the test condition of the while loop + label_visitor.visit(test) while_node = self.append_node(Node( 'while ' + label_visitor.result + ':', @@ -571,11 +572,20 @@ def visit_While(self, node): path=self.filenames[-1] )) - for comp in node.test.comparators: - if isinstance(comp, ast.Call) and get_call_names_as_string(comp.func) in self.function_names: - last_node = self.visit(comp) + def process_comparator(comp_n): + if isinstance(comp_n, ast.Call) and get_call_names_as_string(comp_n.func) in self.function_names: + last_node = self.visit(comp_n) last_node.connect(while_node) + if isinstance(test, ast.Compare): + comparators = test.comparators + comparators.append(test.left) # quirk. See https://greentreesnakes.readthedocs.io/en/latest/nodes.html#Compare + + for comp in comparators: + process_comparator(comp) + else: # while foo(): + process_comparator(test) + return self.loop_node_skeleton(while_node, node) def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index cfdc056a..bf47275e 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -684,7 +684,7 @@ def test_while_line_numbers(self): self.assertLineNumber(else_body_2, 6) self.assertLineNumber(next_stmt, 7) - def test_while_func_iterator(self): + def test_while_func_comparator(self): self.cfg_create_from_file('examples/example_inputs/while_func_comparator.py') self.assert_length(self.cfg.nodes, expected_length=9) @@ -699,6 +699,23 @@ def test_while_func_iterator(self): body_1 = 7 _exit = 8 + self.assertEqual(self.cfg.nodes[test].label, 'while foo():') + + def test_while_func_comparator_rhs(self): + self.cfg_create_from_file('examples/example_inputs/while_func_comparator_rhs.py') + + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + test = 1 + entry_foo = 2 + ret_foo = 3 + exit_foo = 4 + call_foo = 5 + _print = 6 + body_1 = 7 + _exit = 8 + self.assertEqual(self.cfg.nodes[test].label, 'while x < foo():') self.assertInCfg([ @@ -707,13 +724,41 @@ def test_while_func_iterator(self): (_print, test), (_exit, test), (body_1, _print), - (test, body_1), (test, call_foo), (ret_foo, entry_foo), (exit_foo, ret_foo), - (call_foo, exit_foo), + (call_foo, exit_foo) + ]) + + def test_while_func_comparator_lhs(self): + self.cfg_create_from_file('examples/example_inputs/while_func_comparator_lhs.py') + self.assert_length(self.cfg.nodes, expected_length=9) + + entry = 0 + test = 1 + entry_foo = 2 + ret_foo = 3 + exit_foo = 4 + call_foo = 5 + _print = 6 + body_1 = 7 + _exit = 8 + + self.assertEqual(self.cfg.nodes[test].label, 'while foo() > x:') + + self.assertInCfg([ + (test, entry), + (entry_foo, test), + (_print, test), + (_exit, test), + (body_1, _print), + (test, body_1), + (test, call_foo), + (ret_foo, entry_foo), + (exit_foo, ret_foo), + (call_foo, exit_foo) ]) From b52a8707b7fc598d1c7f59c785be0269d1b4a1d5 Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Tue, 20 Nov 2018 10:17:20 -0800 Subject: [PATCH 519/541] 133: Fix style and complexity issues for Travis.ci --- pyt/cfg/stmt_visitor.py | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 965b24eb..d3f8e2c8 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -555,15 +555,26 @@ def visit_For(self, node): path=self.filenames[-1] )) - if isinstance(node.iter, ast.Call) and get_call_names_as_string(node.iter.func) in self.function_names: - last_node = self.visit(node.iter) - last_node.connect(for_node) + self.process_loop_funcs(node.iter, for_node) return self.loop_node_skeleton(for_node, node) + def process_loop_funcs(self, comp_n, loop_node): + """ + If the loop test node contains function calls, it connects the loop node to the nodes of + those function calls. + + :param comp_n: The test node of a loop that may contain functions. + :param loop_node: The loop node itself to connect to the new function nodes if any + :return: None + """ + if isinstance(comp_n, ast.Call) and get_call_names_as_string(comp_n.func) in self.function_names: + last_node = self.visit(comp_n) + last_node.connect(loop_node) + def visit_While(self, node): label_visitor = LabelVisitor() - test = node.test # the test condition of the while loop + test = node.test # the test condition of the while loop label_visitor.visit(test) while_node = self.append_node(Node( @@ -572,19 +583,14 @@ def visit_While(self, node): path=self.filenames[-1] )) - def process_comparator(comp_n): - if isinstance(comp_n, ast.Call) and get_call_names_as_string(comp_n.func) in self.function_names: - last_node = self.visit(comp_n) - last_node.connect(while_node) - if isinstance(test, ast.Compare): comparators = test.comparators - comparators.append(test.left) # quirk. See https://greentreesnakes.readthedocs.io/en/latest/nodes.html#Compare + comparators.append(test.left) # quirk. See https://greentreesnakes.readthedocs.io/en/latest/nodes.html#Compare for comp in comparators: - process_comparator(comp) - else: # while foo(): - process_comparator(test) + self.process_loop_funcs(comp, while_node) + else: # while foo(): + self.process_loop_funcs(test, while_node) return self.loop_node_skeleton(while_node, node) From 6d25eae6ce969e1930846e6714445ee5ca870a47 Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Tue, 20 Nov 2018 10:21:56 -0800 Subject: [PATCH 520/541] 133: Finished tests --- tests/cfg/cfg_test.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/tests/cfg/cfg_test.py b/tests/cfg/cfg_test.py index bf47275e..3af37942 100644 --- a/tests/cfg/cfg_test.py +++ b/tests/cfg/cfg_test.py @@ -701,6 +701,19 @@ def test_while_func_comparator(self): self.assertEqual(self.cfg.nodes[test].label, 'while foo():') + self.assertInCfg([ + (test, entry), + (entry_foo, test), + (_print, test), + (_exit, test), + (body_1, _print), + (test, body_1), + (test, call_foo), + (ret_foo, entry_foo), + (exit_foo, ret_foo), + (call_foo, exit_foo) + ]) + def test_while_func_comparator_rhs(self): self.cfg_create_from_file('examples/example_inputs/while_func_comparator_rhs.py') From 9cb0b567c8cd0c66bcf9ac87ad1425d47a75b908 Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Wed, 21 Nov 2018 10:12:19 -0800 Subject: [PATCH 521/541] 133: Avoid mutating node.test.comparators --- pyt/cfg/stmt_visitor.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index d3f8e2c8..3b9d5f48 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -584,10 +584,10 @@ def visit_While(self, node): )) if isinstance(test, ast.Compare): - comparators = test.comparators - comparators.append(test.left) # quirk. See https://greentreesnakes.readthedocs.io/en/latest/nodes.html#Compare + # quirk. See https://greentreesnakes.readthedocs.io/en/latest/nodes.html#Compare + self.process_loop_funcs(test.left, while_node) - for comp in comparators: + for comp in test.comparators: self.process_loop_funcs(comp, while_node) else: # while foo(): self.process_loop_funcs(test, while_node) From aff6b6c166e73c7c4ad4f9a1d863a6fad28cc785 Mon Sep 17 00:00:00 2001 From: Kevin Hock Date: Sat, 24 Nov 2018 14:15:48 -0800 Subject: [PATCH 522/541] [spelling] constaint -> constraint --- pyt/vulnerabilities/vulnerabilities.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 0daca2cd..3087c1bd 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -359,12 +359,12 @@ def how_vulnerable( def get_tainted_node_in_sink_args( sink_args, - nodes_in_constaint + nodes_in_constraint ): if not sink_args: return None # Starts with the node closest to the sink - for node in nodes_in_constaint: + for node in nodes_in_constraint: if node.left_hand_side in sink_args: return node @@ -398,11 +398,10 @@ def get_vulnerability( Returns: A Vulnerability if it exists, else None """ - nodes_in_constaint = [secondary for secondary in reversed(source.secondary_nodes) + nodes_in_constraint = [secondary for secondary in reversed(source.secondary_nodes) if lattice.in_constraint(secondary, sink.cfg_node)] - nodes_in_constaint.append(source.cfg_node) - + nodes_in_constraint.append(source.cfg_node) if sink.trigger.all_arguments_propagate_taint: sink_args = get_sink_args(sink.cfg_node) else: @@ -410,7 +409,7 @@ def get_vulnerability( tainted_node_in_sink_arg = get_tainted_node_in_sink_args( sink_args, - nodes_in_constaint, + nodes_in_constraint, ) if tainted_node_in_sink_arg: From 6641078459411ff7b4c525c5aa3908d39ed539c7 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 24 Nov 2018 14:40:53 -0800 Subject: [PATCH 523/541] Added links --- CHANGELOG.md | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 928f88cf..9c68d4c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,35 +26,47 @@ If you love PyT, please star our project on GitHub to show your support! :star: ##### November 1st, 2018 #### :boom: Breaking Changes -* Changed trigger file format when specifying specific tainted args ([#182]) +* Changed trigger file format when specifying specific tainted args ([#182], thanks [@bcaller]) #### :tada: New Features -* Function calls such as `list.append` and `dict.update` now propagate taint to the list or dict ([#181]) +* Function calls such as `list.append` and `dict.update` now propagate taint to the list or dict ([#181], thanks [@bcaller]) #### :bug: Bugfixes -* IfExp (or ternary) expression handling improved ([#179]) +* IfExp (or ternary) expression handling improved ([#179], thanks [@bcaller]) + +[#179]: https://github.com/python-security/pyt/pull/179 +[#181]: https://github.com/python-security/pyt/pull/181 +[#182]: https://github.com/python-security/pyt/pull/182 + # 0.40 ##### September 11th, 2018 #### :mega: Release Highlights -* Logging changes. Logging verbosity can be changed with `-v` to `-vvv` ([#172]) +* Logging changes. Logging verbosity can be changed with `-v` to `-vvv` ([#172], thanks [@bcaller]) #### :boom: Breaking Changes * Removed `--trim` option ([#169]) #### :tada: New Features -* Added `--only-unsanitised` flag to not print sanitised vulnerabilities ([#172]) +* Added `--only-unsanitised` flag to not print sanitised vulnerabilities ([#172], thanks [@bcaller]) #### :bug: Bugfixes -* Recursive functions don't cause `RecursionError` ([#173]) -* Handling of chained functions improved ([#171]) +* Recursive functions don't cause `RecursionError` ([#173], thanks [@bcaller]) +* Handling of chained functions improved ([#171], thanks [@bcaller]) + +[#169]: https://github.com/python-security/pyt/pull/169 +[#171]: https://github.com/python-security/pyt/pull/171 +[#172]: https://github.com/python-security/pyt/pull/172 +[#173]: https://github.com/python-security/pyt/pull/173 + # 0.39 ##### August 21st, 2018 ... + # 0.38 ##### August 2nd, 2018 From 52cac9d376448003737e8ffdc7560cf99b4d1758 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 24 Nov 2018 14:47:10 -0800 Subject: [PATCH 524/541] Added most recent PR details --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c68d4c1..36909cfc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,17 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#xxxx]: https://github.com/python-security/pyt/pull/xxxx [@xxxx]: https://github.com/xxxx --> + +# Unreleased + +#### :tada: New Features + +* Added visting functions in the tests of `while` nodes ([#186], thanks [@adrianbn]) + +[@adrianbn]: https://github.com/adrianbn +[#186]: https://github.com/python-security/pyt/pull/186 + + # 0.42 ##### November 1st, 2018 @@ -156,6 +167,7 @@ If you love PyT, please star our project on GitHub to show your support! :star: [#152]: https://github.com/python-security/pyt/pull/152 [#156]: https://github.com/python-security/pyt/pull/156 + # 0.34 ##### April 24th, 2018 From 95e2ac3bdb02647f068f8fdc8a2aaad1fe67e0da Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 24 Nov 2018 15:02:09 -0800 Subject: [PATCH 525/541] Added older `0.39` version details --- CHANGELOG.md | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 36909cfc..3d626450 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -75,7 +75,27 @@ If you love PyT, please star our project on GitHub to show your support! :star: # 0.39 ##### August 21st, 2018 -... +#### :tada: New Features + +* Added handling of assignment unpacking e.g. `a, b, c = d` ([#164], thanks [@bcaller]) +* Made file loading and vulnerability order deterministic ([#165], thanks [@bcaller]) + +#### :bug: Bugfixes +* Fixed VarsVisitor RuntimeError on code like `f(g(a)(b)(c))` ([#163], thanks [@bcaller]) + +#### :telescope: Precision + +* Taint propagates from methods of tainted objects ([#167], thanks [@bcaller]) + +#### :snake: Miscellaneous + +* Cleaned test cases of extraneous reassignments ([#166], thanks [@bcaller]) + +[#163]: https://github.com/python-security/pyt/pull/163 +[#164]: https://github.com/python-security/pyt/pull/164 +[#165]: https://github.com/python-security/pyt/pull/165 +[#166]: https://github.com/python-security/pyt/pull/166 +[#167]: https://github.com/python-security/pyt/pull/167 # 0.38 From 1b61080cbf83979194e32434396d72f122a87650 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 25 Nov 2018 14:49:17 -0800 Subject: [PATCH 526/541] :bug: Fix E128 Flake8 Tavis Failure: `continuation line under-indented for visual indent` --- pyt/vulnerabilities/vulnerabilities.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 3087c1bd..86b3a402 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -398,9 +398,14 @@ def get_vulnerability( Returns: A Vulnerability if it exists, else None """ - nodes_in_constraint = [secondary for secondary in reversed(source.secondary_nodes) - if lattice.in_constraint(secondary, - sink.cfg_node)] + nodes_in_constraint = [ + secondary + for secondary in reversed(source.secondary_nodes) + if lattice.in_constraint( + secondary, + sink.cfg_node + ) + ] nodes_in_constraint.append(source.cfg_node) if sink.trigger.all_arguments_propagate_taint: sink_args = get_sink_args(sink.cfg_node) From c0ef67500dff19f07a0251863d7b83dc6a23bf78 Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Sat, 8 Dec 2018 15:16:44 +0100 Subject: [PATCH 527/541] 128: Allow the user to cancel interactive mode --- pyt/vulnerabilities/vulnerabilities.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index 86b3a402..a12d662c 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -336,11 +336,15 @@ def how_vulnerable( return VulnerabilityType.FALSE elif interactive: user_says = input( - 'Is the return value of {} with tainted argument "{}" vulnerable? (Y/n)'.format( + 'Is the return value of {} with tainted argument "{}" vulnerable? ([Y]es/[N]o/[S]top)'.format( current_node.label, chain[i - 1].left_hand_side ) ).lower() + if user_says.startswith('s'): + interactive = False + vuln_deets['unknown_assignment'] = current_node + return VulnerabilityType.UNKNOWN if user_says.startswith('n'): blackbox_mapping['does_not_propagate'].append(current_node.func_name) return VulnerabilityType.FALSE From 986532afdf4431610d9307c4d00a469cb3faac6d Mon Sep 17 00:00:00 2001 From: Adrian Bravo Date: Sun, 9 Dec 2018 01:04:52 +0100 Subject: [PATCH 528/541] 128: Stop asking for all chains --- pyt/vulnerabilities/vulnerabilities.py | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/pyt/vulnerabilities/vulnerabilities.py b/pyt/vulnerabilities/vulnerabilities.py index a12d662c..2dba0078 100644 --- a/pyt/vulnerabilities/vulnerabilities.py +++ b/pyt/vulnerabilities/vulnerabilities.py @@ -327,16 +327,16 @@ def how_vulnerable( if current_node in sanitiser_nodes: vuln_deets['sanitiser'] = current_node vuln_deets['confident'] = True - return VulnerabilityType.SANITISED + return VulnerabilityType.SANITISED, interactive if isinstance(current_node, BBorBInode): if current_node.func_name in blackbox_mapping['propagates']: continue elif current_node.func_name in blackbox_mapping['does_not_propagate']: - return VulnerabilityType.FALSE + return VulnerabilityType.FALSE, interactive elif interactive: user_says = input( - 'Is the return value of {} with tainted argument "{}" vulnerable? ([Y]es/[N]o/[S]top)'.format( + 'Is the return value of {} with tainted argument "{}" vulnerable? ([Y]es/[N]o/[S]top asking)'.format( current_node.label, chain[i - 1].left_hand_side ) @@ -344,21 +344,21 @@ def how_vulnerable( if user_says.startswith('s'): interactive = False vuln_deets['unknown_assignment'] = current_node - return VulnerabilityType.UNKNOWN + return VulnerabilityType.UNKNOWN, interactive if user_says.startswith('n'): blackbox_mapping['does_not_propagate'].append(current_node.func_name) - return VulnerabilityType.FALSE + return VulnerabilityType.FALSE, interactive blackbox_mapping['propagates'].append(current_node.func_name) else: vuln_deets['unknown_assignment'] = current_node - return VulnerabilityType.UNKNOWN + return VulnerabilityType.UNKNOWN, interactive if potential_sanitiser: vuln_deets['sanitiser'] = potential_sanitiser vuln_deets['confident'] = False - return VulnerabilityType.SANITISED + return VulnerabilityType.SANITISED, interactive - return VulnerabilityType.TRUE + return VulnerabilityType.TRUE, interactive def get_tainted_node_in_sink_args( @@ -443,12 +443,13 @@ def get_vulnerability( cfg.nodes, lattice ) + for chain in get_vulnerability_chains( source.cfg_node, sink.cfg_node, def_use ): - vulnerability_type = how_vulnerable( + vulnerability_type, interactive = how_vulnerable( chain, blackbox_mapping, sanitiser_nodes, @@ -462,9 +463,9 @@ def get_vulnerability( vuln_deets['reassignment_nodes'] = chain - return vuln_factory(vulnerability_type)(**vuln_deets) + return vuln_factory(vulnerability_type)(**vuln_deets), interactive - return None + return None, interactive def find_vulnerabilities_in_cfg( @@ -495,7 +496,7 @@ def find_vulnerabilities_in_cfg( ) for sink in triggers.sinks: for source in triggers.sources: - vulnerability = get_vulnerability( + vulnerability, interactive = get_vulnerability( source, sink, triggers, From 1332b7aa5942d63e8a82a4037682daa9dc206e9f Mon Sep 17 00:00:00 2001 From: bcaller Date: Wed, 16 Jan 2019 16:52:38 +0000 Subject: [PATCH 529/541] Test running pyt in a python 3.7 env It should just work. There were no AST changes. Also removes the unnecesary whitelist_external from tox.ini. Note: pyt can be run in a py36 environment on code targeting 2.7-3.8. There is no requirement for pyt to be run under the same environment as your code is intended to run in. Running pyt under 3.8 will require some further work due to the change from ast.Str to ast.Constant: https://github.com/python/cpython/pull/9445/files https://docs.python.org/dev/whatsnew/3.8.html#deprecated https://bugs.python.org/issue32892 --- .travis.yml | 2 ++ tox.ini | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 0638ada6..fe655eef 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,8 @@ language: python +dist: xenial python: - "3.6" + - "3.7" install: - pip install codeclimate-test-reporter 'coverage>=4.0,<4.4' flake8 before_script: diff --git a/tox.ini b/tox.ini index c9b4b248..424c51ef 100644 --- a/tox.ini +++ b/tox.ini @@ -1,12 +1,11 @@ [tox] -envlist = py36,cover,lint +envlist = py36,py37,cover,lint [testenv] commands = python -m tests [testenv:cover] -whitelist_externals = coverage deps = coverage>=4.0,<4.4 commands = From 40c1f2482dbc54b8846f22aae4082ebec6af5683 Mon Sep 17 00:00:00 2001 From: wchresta <34962284+wchresta@users.noreply.github.com> Date: Fri, 22 Mar 2019 17:01:05 -0400 Subject: [PATCH 530/541] Resolve aliases for black box and built-in function calls. * Allow trigger words to be fully qualified to reduce false positives --- .../command_injection_with_aliases.py | 12 +++++++++ pyt/cfg/alias_helper.py | 19 ++++++++++++++ pyt/cfg/stmt_visitor.py | 26 ++++++++++++++++--- .../all_trigger_words.pyt | 6 ++--- tests/main_test.py | 4 +-- tests/vulnerabilities/vulnerabilities_test.py | 15 +++++++++++ 6 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 examples/vulnerable_code/command_injection_with_aliases.py diff --git a/examples/vulnerable_code/command_injection_with_aliases.py b/examples/vulnerable_code/command_injection_with_aliases.py new file mode 100644 index 00000000..309e5268 --- /dev/null +++ b/examples/vulnerable_code/command_injection_with_aliases.py @@ -0,0 +1,12 @@ +import os +import os as myos +from os import system +from os import system as mysystem +from subprocess import call as mycall, Popen as mypopen + +os.system("ls") +myos.system("ls") +system("ls") +mysystem("ls") +mycall("ls") +mypopen("ls") diff --git a/pyt/cfg/alias_helper.py b/pyt/cfg/alias_helper.py index a1c83ab0..9de6d058 100644 --- a/pyt/cfg/alias_helper.py +++ b/pyt/cfg/alias_helper.py @@ -74,3 +74,22 @@ def retrieve_import_alias_mapping(names_list): if alias.asname: import_alias_names[alias.asname] = alias.name return import_alias_names + + +def fully_qualify_alias_labels(label, aliases): + """Replace any aliases in label with the fully qualified name. + + Args: + label -- A label : str representing a name (e.g. myos.system) + aliases -- A dict of {alias: real_name} (e.g. {'myos': 'os'}) + + >>> fully_qualify_alias_labels('myos.mycall', {'myos':'os'}) + 'os.mycall' + """ + for alias, full_name in aliases.items(): + if label == alias: + return full_name + if label.startswith(alias+'.'): + return full_name + label[len(alias):] + return label + diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 3b9d5f48..e008b096 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -9,7 +9,8 @@ handle_aliases_in_init_files, handle_fdid_aliases, not_as_alias_handler, - retrieve_import_alias_mapping + retrieve_import_alias_mapping, + fully_qualify_alias_labels ) from ..core.ast_helper import ( generate_ast, @@ -61,6 +62,7 @@ class StmtVisitor(ast.NodeVisitor): def __init__(self, allow_local_directory_imports=True): self._allow_local_modules = allow_local_directory_imports + self.bb_or_bi_aliases = {} super().__init__() def visit_Module(self, node): @@ -624,6 +626,10 @@ def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 call_function_label = call_label_visitor.result[:call_label_visitor.result.find('(')] + # Check if function call matches a blackbox/built-in alias and if so, resolve it + # This resolves aliases like "from os import system as mysys" as: mysys -> os.system + call_function_label = fully_qualify_alias_labels(call_function_label, self.bb_or_bi_aliases) + # Create e.g. ~call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) RHS = 'ret_' + call_function_label + '(' @@ -810,7 +816,6 @@ def add_module( # noqa: C901 module_path = module[1] parent_definitions = self.module_definitions_stack[-1] - # The only place the import_alias_mapping is updated parent_definitions.import_alias_mapping.update(import_alias_mapping) parent_definitions.import_names = local_names @@ -1052,7 +1057,13 @@ def visit_Import(self, node): retrieve_import_alias_mapping(node.names) ) for alias in node.names: - if alias.name not in uninspectable_modules: + if alias.name in uninspectable_modules: + # The module is uninspectable (so blackbox or built-in). If it has an alias, we remember + # the alias so we can do fully qualified name resolution for blackbox- and built-in trigger words + # e.g. we want a call to "os.system" be recognised, even if we do "import os as myos" + if alias.asname is not None and alias.asname != alias.name: + self.bb_or_bi_aliases[alias.asname] = alias.name + else: log.warn("Cannot inspect module %s", alias.name) uninspectable_modules.add(alias.name) # Don't repeatedly warn about this return IgnoredNode() @@ -1094,7 +1105,14 @@ def visit_ImportFrom(self, node): retrieve_import_alias_mapping(node.names), from_from=True ) - if node.module not in uninspectable_modules: + + if node.module in uninspectable_modules: + # Remember aliases for blackboxed and built-in imports such that we can label them fully qualified + # e.g. we want a call to "os.system" be recognised, even if we do "from os import system" + # from os import system as mysystem -> module=os, name=system, asname=mysystem + for name in node.names: + self.bb_or_bi_aliases[name.asname or name.name] = "{}.{}".format(node.module, name.name) + else: log.warn("Cannot inspect module %s", node.module) uninspectable_modules.add(node.module) return IgnoredNode() diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt index 5642db5c..615e86b6 100644 --- a/pyt/vulnerability_definitions/all_trigger_words.pyt +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -31,9 +31,10 @@ ] }, "execute(": {}, - "system(": {}, + "os.system(": {}, "filter(": {}, "subprocess.call(": {}, + "subprocess.Popen(": {}, "render_template(": {}, "set_cookie(": {}, "redirect(": {}, @@ -41,7 +42,6 @@ "flash(": {}, "jsonify(": {}, "render(": {}, - "render_to_response(": {}, - "Popen(": {} + "render_to_response(": {} } } diff --git a/tests/main_test.py b/tests/main_test.py index 561d8bd1..fef1e124 100644 --- a/tests/main_test.py +++ b/tests/main_test.py @@ -108,11 +108,11 @@ def test_targets_with_recursive(self): excluded_files = "" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 33) + self.assertEqual(len(included_files), 34) def test_targets_with_recursive_and_excluded(self): targets = ["examples/vulnerable_code/"] excluded_files = "inter_command_injection.py" included_files = discover_files(targets, excluded_files, True) - self.assertEqual(len(included_files), 32) + self.assertEqual(len(included_files), 33) diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index 5a28aa03..fe2fa64c 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -482,6 +482,21 @@ def test_list_append_taints_list(self): ) self.assert_length(vulnerabilities, expected_length=1) + def test_import_bb_or_bi_with_alias(self): + self.cfg_create_from_file('examples/vulnerable_code/command_injection_with_aliases.py') + + EXPECTED = ['Entry module', + "~call_1 = ret_os.system('ls')", + "~call_2 = ret_os.system('ls')", + "~call_3 = ret_os.system('ls')", + "~call_4 = ret_os.system('ls')", + "~call_5 = ret_subprocess.call('ls')", + "~call_6 = ret_subprocess.Popen('ls')", + 'Exit module' + ] + for node, expected_label in zip(self.cfg.nodes, EXPECTED): + self.assertEqual(node.label, expected_label) + class EngineDjangoTest(VulnerabilitiesBaseTestCase): def run_analysis(self, path): From 57448a0c7761ee7cc054b1630ec1e66e5581f850 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 23 Mar 2019 12:33:59 -0700 Subject: [PATCH 531/541] :wave: Add `no longer maintained` section --- README.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/README.rst b/README.rst index 025a3705..a84df88d 100644 --- a/README.rst +++ b/README.rst @@ -19,6 +19,26 @@ .. image:: https://img.shields.io/badge/Donate-Charity-orange.svg :target: https://www.againstmalaria.com/donation.aspx +This project is no longer maintained +==================================== + +`Pyre`_ from Facebook is an amazing project that has a bright future and many smart people working on it. +I would suggest, if you don't know that much about program analysis, that you understand how PyT works before diving into Pyre. Along with the `README's in most directories`_, there is the original `Master's Thesis`_ and `some slides`_. +With that said, I am happy to review pull requests and give you write permissions if you make more than a few. + +There were a lot of great contributors to this project, I plan on working on other projects like `detect-secrets`_ and others (e.g. Pyre eventually) in the future if you'd like to work together more :) + +If you are a security engineer with e.g. a Python codebase without type annotations, that Pyre won't handle, I would suggest you replace your sinks with a secure wrapper (something like `defusedxml`_), and alert off any uses of the standard sink. You can use `Bandit`_ to do this but you will have to trim it a lot, due to the high false-positive rate. + +.. _Pyre: https://github.com/facebook/pyre-check +.. _README's in most directories: https://github.com/python-security/pyt/tree/master/pyt#how-it-works +.. _Master's Thesis: https://projekter.aau.dk/projekter/files/239563289/final.pdf +.. _some slides: https://docs.google.com/presentation/d/1JfAykAxR0DcJwwGfHmhrz1RhhKqYsnt5x_GY8CbTp7s +.. _detect-secrets: https://github.com/Yelp/detect-secrets/blob/master/CHANGELOG.md#whats-new +.. _defusedxml: https://pypi.org/project/defusedxml/ +.. _Bandit: https://github.com/PyCQA/bandit + + Python Taint ============ From 21e6027efb94669c6374615350373de850e623a4 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 23 Mar 2019 12:37:53 -0700 Subject: [PATCH 532/541] Bold important text --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index a84df88d..831a392d 100644 --- a/README.rst +++ b/README.rst @@ -24,7 +24,7 @@ This project is no longer maintained `Pyre`_ from Facebook is an amazing project that has a bright future and many smart people working on it. I would suggest, if you don't know that much about program analysis, that you understand how PyT works before diving into Pyre. Along with the `README's in most directories`_, there is the original `Master's Thesis`_ and `some slides`_. -With that said, I am happy to review pull requests and give you write permissions if you make more than a few. +With that said, **I am happy to review pull requests and give you write permissions if you make more than a few.** There were a lot of great contributors to this project, I plan on working on other projects like `detect-secrets`_ and others (e.g. Pyre eventually) in the future if you'd like to work together more :) From 1ff3901b89c0db437a6b3b613f3c262be10cd61c Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 23 Mar 2019 12:38:55 -0700 Subject: [PATCH 533/541] [grammar] is -> are --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 831a392d..852a8b2d 100644 --- a/README.rst +++ b/README.rst @@ -23,7 +23,7 @@ This project is no longer maintained ==================================== `Pyre`_ from Facebook is an amazing project that has a bright future and many smart people working on it. -I would suggest, if you don't know that much about program analysis, that you understand how PyT works before diving into Pyre. Along with the `README's in most directories`_, there is the original `Master's Thesis`_ and `some slides`_. +I would suggest, if you don't know that much about program analysis, that you understand how PyT works before diving into Pyre. Along with the `README's in most directories`_, there are the original `Master's Thesis`_ and `some slides`_. With that said, **I am happy to review pull requests and give you write permissions if you make more than a few.** There were a lot of great contributors to this project, I plan on working on other projects like `detect-secrets`_ and others (e.g. Pyre eventually) in the future if you'd like to work together more :) From 022476a014ed3a10ff04dd7d2450192e676c9100 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sat, 23 Mar 2019 12:39:53 -0700 Subject: [PATCH 534/541] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index 852a8b2d..32dba718 100644 --- a/README.rst +++ b/README.rst @@ -28,7 +28,7 @@ With that said, **I am happy to review pull requests and give you write permissi There were a lot of great contributors to this project, I plan on working on other projects like `detect-secrets`_ and others (e.g. Pyre eventually) in the future if you'd like to work together more :) -If you are a security engineer with e.g. a Python codebase without type annotations, that Pyre won't handle, I would suggest you replace your sinks with a secure wrapper (something like `defusedxml`_), and alert off any uses of the standard sink. You can use `Bandit`_ to do this but you will have to trim it a lot, due to the high false-positive rate. +If you are a security engineer with e.g. a Python codebase without type annotations, that Pyre won't handle, I would suggest you replace your sinks with a secure wrapper (something like `defusedxml`_), and alert off any uses of the standard sink. You can use `Bandit`_ to do this since dataflow analysis is not required, but you will have to trim it a lot, due to the high false-positive rate. .. _Pyre: https://github.com/facebook/pyre-check .. _README's in most directories: https://github.com/python-security/pyt/tree/master/pyt#how-it-works From 36bd520cf3e52e218aa79d23cb3113a934551bc6 Mon Sep 17 00:00:00 2001 From: wchresta <34962284+wchresta@users.noreply.github.com> Date: Sat, 23 Mar 2019 16:30:01 -0400 Subject: [PATCH 535/541] Use import_alias_mapping for blackbox and built-in aliases, as well * This will give fully qualified names for blackboxes like flask * Improve readability by using keyword arguments --- .../command_injection_with_aliases.py | 31 +++- pyt/cfg/stmt_visitor.py | 149 +++++++++--------- .../vulnerabilities_across_files_test.py | 2 +- .../vulnerabilities_base_test_case.py | 4 +- tests/vulnerabilities/vulnerabilities_test.py | 58 +++---- 5 files changed, 132 insertions(+), 112 deletions(-) diff --git a/examples/vulnerable_code/command_injection_with_aliases.py b/examples/vulnerable_code/command_injection_with_aliases.py index 309e5268..4e409c52 100644 --- a/examples/vulnerable_code/command_injection_with_aliases.py +++ b/examples/vulnerable_code/command_injection_with_aliases.py @@ -4,9 +4,28 @@ from os import system as mysystem from subprocess import call as mycall, Popen as mypopen -os.system("ls") -myos.system("ls") -system("ls") -mysystem("ls") -mycall("ls") -mypopen("ls") +from flask import Flask, render_template, request + +app = Flask(__name__) + + +@app.route('/menu', methods=['POST']) +def menu(): + param = request.form['suggestion'] + command = 'echo ' + param + ' >> ' + 'menu.txt' + + os.system(command) + myos.system(command) + system(command) + mysystem(command) + mycall(command) + mypopen(command) + + with open('menu.txt', 'r') as f: + menu_ctx = f.read() + + return render_template('command_injection.html', menu=menu_ctx) + + +if __name__ == '__main__': + app.run(debug=True) diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index e008b096..0a35c566 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -62,7 +62,6 @@ class StmtVisitor(ast.NodeVisitor): def __init__(self, allow_local_directory_imports=True): self._allow_local_modules = allow_local_directory_imports - self.bb_or_bi_aliases = {} super().__init__() def visit_Module(self, node): @@ -628,7 +627,8 @@ def add_blackbox_or_builtin_call(self, node, blackbox): # noqa: C901 # Check if function call matches a blackbox/built-in alias and if so, resolve it # This resolves aliases like "from os import system as mysys" as: mysys -> os.system - call_function_label = fully_qualify_alias_labels(call_function_label, self.bb_or_bi_aliases) + local_definitions = self.module_definitions_stack[-1] + call_function_label = fully_qualify_alias_labels(call_function_label, local_definitions.import_alias_mapping) # Create e.g. ~call_1 = ret_func_foo LHS = CALL_IDENTIFIER + 'call_' + str(saved_function_call_index) @@ -924,10 +924,10 @@ def from_directory_import( if init_exists and not skip_init: package_name = os.path.split(module_path)[1] return self.add_module( - (module[0], init_file_location), - package_name, - local_names, - import_alias_mapping, + module=(module[0], init_file_location), + module_or_package_name=package_name, + local_names=local_names, + import_alias_mapping=import_alias_mapping, is_init=True, from_from=True ) @@ -937,10 +937,10 @@ def from_directory_import( new_init_file_location = os.path.join(full_name, '__init__.py') if os.path.isfile(new_init_file_location): self.add_module( - (real_name, new_init_file_location), - real_name, - local_names, - import_alias_mapping, + module=(real_name, new_init_file_location), + module_or_package_name=real_name, + local_names=local_names, + import_alias_mapping=import_alias_mapping, is_init=True, from_from=True, from_fdid=True @@ -950,10 +950,10 @@ def from_directory_import( else: file_module = (real_name, full_name + '.py') self.add_module( - file_module, - real_name, - local_names, - import_alias_mapping, + module=file_module, + module_or_package_name=real_name, + local_names=local_names, + import_alias_mapping=import_alias_mapping, from_from=True ) return IgnoredNode() @@ -964,10 +964,10 @@ def import_package(self, module, module_name, local_name, import_alias_mapping): init_exists = os.path.isfile(init_file_location) if init_exists: return self.add_module( - (module[0], init_file_location), - module_name, - local_name, - import_alias_mapping, + module=(module[0], init_file_location), + module_or_package_name=module_name, + local_names=local_name, + import_alias_mapping=import_alias_mapping, is_init=True ) else: @@ -1010,10 +1010,10 @@ def handle_relative_import(self, node): # Is it a file? if name_with_dir.endswith('.py'): return self.add_module( - (node.module, name_with_dir), - None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), + module=(node.module, name_with_dir), + module_or_package_name=None, + local_names=as_alias_handler(node.names), + import_alias_mapping=retrieve_import_alias_mapping(node.names), from_from=True ) return self.from_directory_import( @@ -1036,10 +1036,10 @@ def visit_Import(self, node): retrieve_import_alias_mapping(node.names) ) return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) + module=module, + module_or_package_name=name.name, + local_names=name.asname, + import_alias_mapping=retrieve_import_alias_mapping(node.names) ) for module in self.project_modules: if name.name == module[0]: @@ -1051,20 +1051,20 @@ def visit_Import(self, node): retrieve_import_alias_mapping(node.names) ) return self.add_module( - module, - name.name, - name.asname, - retrieve_import_alias_mapping(node.names) + module=module, + module_or_package_name=name.name, + local_names=name.asname, + import_alias_mapping=retrieve_import_alias_mapping(node.names) ) for alias in node.names: - if alias.name in uninspectable_modules: - # The module is uninspectable (so blackbox or built-in). If it has an alias, we remember - # the alias so we can do fully qualified name resolution for blackbox- and built-in trigger words - # e.g. we want a call to "os.system" be recognised, even if we do "import os as myos" - if alias.asname is not None and alias.asname != alias.name: - self.bb_or_bi_aliases[alias.asname] = alias.name - else: - log.warn("Cannot inspect module %s", alias.name) + # The module is uninspectable (so blackbox or built-in). If it has an alias, we remember + # the alias so we can do fully qualified name resolution for blackbox- and built-in trigger words + # e.g. we want a call to "os.system" be recognised, even if we do "import os as myos" + if alias.asname is not None and alias.asname != alias.name: + local_definitions = self.module_definitions_stack[-1] + local_definitions.import_alias_mapping[name.asname] = alias.name + if alias.name not in uninspectable_modules: + log.warning("Cannot inspect module %s", alias.name) uninspectable_modules.add(alias.name) # Don't repeatedly warn about this return IgnoredNode() @@ -1072,47 +1072,48 @@ def visit_ImportFrom(self, node): # Is it relative? if node.level > 0: return self.handle_relative_import(node) - else: - for module in self.local_modules: - if node.module == module[0]: - if os.path.isdir(module[1]): - return self.from_directory_import( - module, - not_as_alias_handler(node.names), - as_alias_handler(node.names) - ) - return self.add_module( + # not relative + for module in self.local_modules: + if node.module == module[0]: + if os.path.isdir(module[1]): + return self.from_directory_import( module, - None, - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True + not_as_alias_handler(node.names), + as_alias_handler(node.names) ) - for module in self.project_modules: - name = module[0] - if node.module == name: - if os.path.isdir(module[1]): - return self.from_directory_import( - module, - not_as_alias_handler(node.names), - as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names) - ) - return self.add_module( + return self.add_module( + module=module, + module_or_package_name=None, + local_names=as_alias_handler(node.names), + import_alias_mapping=retrieve_import_alias_mapping(node.names), + from_from=True + ) + for module in self.project_modules: + name = module[0] + if node.module == name: + if os.path.isdir(module[1]): + return self.from_directory_import( module, - None, + not_as_alias_handler(node.names), as_alias_handler(node.names), - retrieve_import_alias_mapping(node.names), - from_from=True + retrieve_import_alias_mapping(node.names) ) + return self.add_module( + module=module, + module_or_package_name=None, + local_names=as_alias_handler(node.names), + import_alias_mapping=retrieve_import_alias_mapping(node.names), + from_from=True + ) - if node.module in uninspectable_modules: - # Remember aliases for blackboxed and built-in imports such that we can label them fully qualified - # e.g. we want a call to "os.system" be recognised, even if we do "from os import system" - # from os import system as mysystem -> module=os, name=system, asname=mysystem - for name in node.names: - self.bb_or_bi_aliases[name.asname or name.name] = "{}.{}".format(node.module, name.name) - else: - log.warn("Cannot inspect module %s", node.module) + # Remember aliases for uninspecatble modules such that we can label them fully qualified + # e.g. we want a call to "os.system" be recognised, even if we do "from os import system" + # from os import system as mysystem -> module=os, name=system, asname=mysystem + for name in node.names: + local_definitions = self.module_definitions_stack[-1] + local_definitions.import_alias_mapping[name.asname or name.name] = "{}.{}".format(node.module, name.name) + + if node.module not in uninspectable_modules: + log.warning("Cannot inspect module %s", node.module) uninspectable_modules.add(node.module) return IgnoredNode() diff --git a/tests/vulnerabilities/vulnerabilities_across_files_test.py b/tests/vulnerabilities/vulnerabilities_across_files_test.py index bd63b190..d7b8f0d1 100644 --- a/tests/vulnerabilities/vulnerabilities_across_files_test.py +++ b/tests/vulnerabilities/vulnerabilities_across_files_test.py @@ -62,7 +62,7 @@ def test_blackbox_library_call(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code_across_files/blackbox_library_call.py > User input at line 12, source "request.args.get(": - ~call_1 = ret_request.args.get('suggestion') + ~call_1 = ret_flask.request.args.get('suggestion') Reassigned in: File: examples/vulnerable_code_across_files/blackbox_library_call.py > Line 12: param = ~call_1 diff --git a/tests/vulnerabilities/vulnerabilities_base_test_case.py b/tests/vulnerabilities/vulnerabilities_base_test_case.py index c21f81ed..a7e86121 100644 --- a/tests/vulnerabilities/vulnerabilities_base_test_case.py +++ b/tests/vulnerabilities/vulnerabilities_base_test_case.py @@ -11,7 +11,7 @@ def string_compare_alpha(self, output, expected_string): def assertAlphaEqual(self, output, expected_string): self.assertEqual( - [char for char in output if char.isalpha()], - [char for char in expected_string if char.isalpha()] + ''.join(char for char in output if char.isalpha()), + ''.join(char for char in expected_string if char.isalpha()) ) return True diff --git a/tests/vulnerabilities/vulnerabilities_test.py b/tests/vulnerabilities/vulnerabilities_test.py index fe2fa64c..893ec70a 100644 --- a/tests/vulnerabilities/vulnerabilities_test.py +++ b/tests/vulnerabilities/vulnerabilities_test.py @@ -150,7 +150,7 @@ def test_XSS_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS.py > User input at line 6, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS.py > Line 6: param = ~call_1 @@ -186,7 +186,7 @@ def test_path_traversal_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal.py > User input at line 15, source "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + ~call_1 = ret_flask.request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal.py > Line 15: image_name = ~call_1 @@ -210,7 +210,7 @@ def test_path_traversal_result(self): > Line 19: foo = ~call_2 File: examples/vulnerable_code/path_traversal.py > reaches line 20, sink "send_file(": - ~call_4 = ret_send_file(foo) + ~call_4 = ret_flask.send_file(foo) """ self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) @@ -222,7 +222,7 @@ def test_ensure_saved_scope(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/ensure_saved_scope.py > User input at line 15, source "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + ~call_1 = ret_flask.request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/ensure_saved_scope.py > Line 15: image_name = ~call_1 @@ -232,7 +232,7 @@ def test_ensure_saved_scope(self): > Line 10: save_3_image_name = image_name File: examples/vulnerable_code/ensure_saved_scope.py > reaches line 20, sink "send_file(": - ~call_4 = ret_send_file(image_name) + ~call_4 = ret_flask.send_file(image_name) """ self.assertAlphaEqual( vulnerability_description, @@ -246,7 +246,7 @@ def test_path_traversal_sanitised_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal_sanitised.py > User input at line 8, source "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + ~call_1 = ret_flask.request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal_sanitised.py > Line 8: image_name = ~call_1 @@ -258,7 +258,7 @@ def test_path_traversal_sanitised_result(self): > Line 12: ~call_4 = ret_os.path.join(~call_5, image_name) File: examples/vulnerable_code/path_traversal_sanitised.py > reaches line 12, sink "send_file(": - ~call_3 = ret_send_file(~call_4) + ~call_3 = ret_flask.send_file(~call_4) This vulnerability is sanitised by: Label: ~call_2 = ret_image_name.replace('..', '') """ @@ -271,7 +271,7 @@ def test_path_traversal_sanitised_2_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/path_traversal_sanitised_2.py > User input at line 8, source "request.args.get(": - ~call_1 = ret_request.args.get('image_name') + ~call_1 = ret_flask.request.args.get('image_name') Reassigned in: File: examples/vulnerable_code/path_traversal_sanitised_2.py > Line 8: image_name = ~call_1 @@ -279,7 +279,7 @@ def test_path_traversal_sanitised_2_result(self): > Line 12: ~call_3 = ret_os.path.join(~call_4, image_name) File: examples/vulnerable_code/path_traversal_sanitised_2.py > reaches line 12, sink "send_file(": - ~call_2 = ret_send_file(~call_3) + ~call_2 = ret_flask.send_file(~call_3) This vulnerability is potentially sanitised by: Label: if '..' in image_name: """ @@ -292,7 +292,7 @@ def test_sql_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/sql/sqli.py > User input at line 26, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/sql/sqli.py > Line 26: param = ~call_1 @@ -347,7 +347,7 @@ def test_XSS_reassign_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_reassign.py > User input at line 6, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_reassign.py > Line 6: param = ~call_1 @@ -367,18 +367,18 @@ def test_XSS_sanitised_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_sanitised.py > User input at line 7, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_sanitised.py > Line 7: param = ~call_1 File: examples/vulnerable_code/XSS_sanitised.py - > Line 9: ~call_2 = ret_Markup.escape(param) + > Line 9: ~call_2 = ret_flask.Markup.escape(param) File: examples/vulnerable_code/XSS_sanitised.py > Line 9: param = ~call_2 File: examples/vulnerable_code/XSS_sanitised.py > reaches line 12, sink "replace(": ~call_5 = ret_html.replace('{{ param }}', param) - This vulnerability is sanitised by: Label: ~call_2 = ret_Markup.escape(param) + This vulnerability is sanitised by: Label: ~call_2 = ret_flask.Markup.escape(param) """ self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) @@ -394,7 +394,7 @@ def test_XSS_variable_assign_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_variable_assign.py > User input at line 6, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_variable_assign.py > Line 6: param = ~call_1 @@ -414,7 +414,7 @@ def test_XSS_variable_multiple_assign_result(self): EXPECTED_VULNERABILITY_DESCRIPTION = """ File: examples/vulnerable_code/XSS_variable_multiple_assign.py > User input at line 6, source "request.args.get(": - ~call_1 = ret_request.args.get('param', 'not set') + ~call_1 = ret_flask.request.args.get('param', 'not set') Reassigned in: File: examples/vulnerable_code/XSS_variable_multiple_assign.py > Line 6: param = ~call_1 @@ -483,19 +483,19 @@ def test_list_append_taints_list(self): self.assert_length(vulnerabilities, expected_length=1) def test_import_bb_or_bi_with_alias(self): - self.cfg_create_from_file('examples/vulnerable_code/command_injection_with_aliases.py') - - EXPECTED = ['Entry module', - "~call_1 = ret_os.system('ls')", - "~call_2 = ret_os.system('ls')", - "~call_3 = ret_os.system('ls')", - "~call_4 = ret_os.system('ls')", - "~call_5 = ret_subprocess.call('ls')", - "~call_6 = ret_subprocess.Popen('ls')", - 'Exit module' + vulnerabilities = self.run_analysis('examples/vulnerable_code/command_injection_with_aliases.py') + + EXPECTED_SINK_TRIGGER_WORDS = [ + 'os.system(', + 'os.system(', + 'os.system(', + 'os.system(', + 'subprocess.call(', + 'subprocess.Popen(' ] - for node, expected_label in zip(self.cfg.nodes, EXPECTED): - self.assertEqual(node.label, expected_label) + + for vuln, expected_sink_trigger_word in zip(vulnerabilities, EXPECTED_SINK_TRIGGER_WORDS): + self.assertEqual(vuln.sink_trigger_word, expected_sink_trigger_word) class EngineDjangoTest(VulnerabilitiesBaseTestCase): @@ -531,7 +531,7 @@ def test_django_view_param(self): param File: examples/vulnerable_code/django_XSS.py > reaches line 5, sink "render(": - ~call_1 = ret_render(request, 'templates/xss.html', 'param'param) + ~call_1 = ret_django.shortcuts.render(request, 'templates/xss.html', 'param'param) """ self.assertAlphaEqual(vulnerability_description, EXPECTED_VULNERABILITY_DESCRIPTION) From 61f0408574685f6fb2a1ffd4c39a49964056aa54 Mon Sep 17 00:00:00 2001 From: wchresta <34962284+wchresta@users.noreply.github.com> Date: Sat, 23 Mar 2019 16:45:29 -0400 Subject: [PATCH 536/541] Remove blank line at end of file. --- pyt/cfg/alias_helper.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyt/cfg/alias_helper.py b/pyt/cfg/alias_helper.py index 9de6d058..9d780992 100644 --- a/pyt/cfg/alias_helper.py +++ b/pyt/cfg/alias_helper.py @@ -92,4 +92,3 @@ def fully_qualify_alias_labels(label, aliases): if label.startswith(alias+'.'): return full_name + label[len(alias):] return label - From a7bb0b275ffc78c4cc168ae529e5adb7467979cd Mon Sep 17 00:00:00 2001 From: wchresta <34962284+wchresta@users.noreply.github.com> Date: Sat, 23 Mar 2019 18:13:50 -0400 Subject: [PATCH 537/541] Implement suggestions from code-review. --- pyt/cfg/alias_helper.py | 2 +- pyt/cfg/stmt_visitor.py | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/pyt/cfg/alias_helper.py b/pyt/cfg/alias_helper.py index 9d780992..920af3f5 100644 --- a/pyt/cfg/alias_helper.py +++ b/pyt/cfg/alias_helper.py @@ -89,6 +89,6 @@ def fully_qualify_alias_labels(label, aliases): for alias, full_name in aliases.items(): if label == alias: return full_name - if label.startswith(alias+'.'): + elif label.startswith(alias+'.'): return full_name + label[len(alias):] return label diff --git a/pyt/cfg/stmt_visitor.py b/pyt/cfg/stmt_visitor.py index 0a35c566..16da1bb0 100644 --- a/pyt/cfg/stmt_visitor.py +++ b/pyt/cfg/stmt_visitor.py @@ -6,11 +6,11 @@ from .alias_helper import ( as_alias_handler, + fully_qualify_alias_labels, handle_aliases_in_init_files, handle_fdid_aliases, not_as_alias_handler, - retrieve_import_alias_mapping, - fully_qualify_alias_labels + retrieve_import_alias_mapping ) from ..core.ast_helper import ( generate_ast, @@ -816,6 +816,7 @@ def add_module( # noqa: C901 module_path = module[1] parent_definitions = self.module_definitions_stack[-1] + # Here, in `visit_Import` and in `visit_ImportFrom` are the only places the `import_alias_mapping` is updated parent_definitions.import_alias_mapping.update(import_alias_mapping) parent_definitions.import_names = local_names @@ -1106,7 +1107,7 @@ def visit_ImportFrom(self, node): from_from=True ) - # Remember aliases for uninspecatble modules such that we can label them fully qualified + # Remember aliases for uninspectable modules such that we can label them fully qualified # e.g. we want a call to "os.system" be recognised, even if we do "from os import system" # from os import system as mysystem -> module=os, name=system, asname=mysystem for name in node.names: From 9d2a607001e038bda86bf2aa4f0d7fde5751d274 Mon Sep 17 00:00:00 2001 From: wchresta <34962284+wchresta@users.noreply.github.com> Date: Sat, 23 Mar 2019 18:37:20 -0400 Subject: [PATCH 538/541] Add fully qualified shell injection sinks. --- .../all_trigger_words.pyt | 47 +++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt index 615e86b6..edd4649c 100644 --- a/pyt/vulnerability_definitions/all_trigger_words.pyt +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -30,18 +30,49 @@ "'..' in" ] }, + "commands.getoutput(": {}, + "commands.getstatusoutput(": {}, "execute(": {}, - "os.system(": {}, "filter(": {}, - "subprocess.call(": {}, - "subprocess.Popen(": {}, - "render_template(": {}, - "set_cookie(": {}, - "redirect(": {}, - "url_for(": {}, "flash(": {}, "jsonify(": {}, + "os.execl(": {}, + "os.execle(": {}, + "os.execlp(": {}, + "os.execlpe(": {}, + "os.execv(": {}, + "os.execve(": {}, + "os.execvp(": {}, + "os.execvpe(": {}, + "os.popen(": {}, + "os.popen2(": {}, + "os.popen3(": {}, + "os.popen4(": {}, + "os.spawnl(": {}, + "os.spawnle(": {}, + "os.spawnlp(": {}, + "os.spawnlpe(": {}, + "os.spawnv(": {}, + "os.spawnve(": {}, + "os.spawnvp(": {}, + "os.spawnvpe(": {}, + "os.startfile(": {}, + "os.system(": {}, + "popen2.Popen3(": {}, + "popen2.Popen4(": {}, + "popen2.popen2(": {}, + "popen2.popen3(": {}, + "popen2.popen4(": {}, + "redirect(": {}, "render(": {}, - "render_to_response(": {} + "render_template(": {}, + "render_to_response(": {}, + "set_cookie(": {}, + "subprocess.Popen(": {}, + "subprocess.call(": {}, + "subprocess.check_call(": {}, + "subprocess.check_output(": {}, + "subprocess.run(": {}, + "url_for(": {} } } From e9dc6839d2dd8a126543936cfe6cbca8fdca6beb Mon Sep 17 00:00:00 2001 From: Berkeley Churchill Date: Mon, 12 Aug 2019 21:56:39 -0700 Subject: [PATCH 539/541] Update README.rst Warn users to use python3.6 or 3.7 --- README.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.rst b/README.rst index 32dba718..b0240895 100644 --- a/README.rst +++ b/README.rst @@ -63,6 +63,8 @@ Example usage and output: Install ======= +Before continuing, make sure you have python3.6 or 3.7 installed. + .. code-block:: python pip install python-taint From b51dd7f35e71b1c561afa8d0735390ef1693cf6d Mon Sep 17 00:00:00 2001 From: Berkeley Churchill Date: Tue, 13 Aug 2019 07:04:56 +0000 Subject: [PATCH 540/541] adding eval, exec sinks --- pyt/vulnerability_definitions/all_trigger_words.pyt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pyt/vulnerability_definitions/all_trigger_words.pyt b/pyt/vulnerability_definitions/all_trigger_words.pyt index edd4649c..7d7d2999 100644 --- a/pyt/vulnerability_definitions/all_trigger_words.pyt +++ b/pyt/vulnerability_definitions/all_trigger_words.pyt @@ -32,6 +32,8 @@ }, "commands.getoutput(": {}, "commands.getstatusoutput(": {}, + "eval(": {}, + "exec(": {}, "execute(": {}, "filter(": {}, "flash(": {}, From f4ec9e127497a7ba7d08d68e8fca8b2f06756679 Mon Sep 17 00:00:00 2001 From: KevinHock Date: Sun, 8 Mar 2020 14:43:06 -0700 Subject: [PATCH 541/541] :mortar_board: Add mention of Pysa tutorial https://github.com/facebook/pyre-check/tree/master/pysa_tutorial#pysa-tutorial --- README.rst | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.rst b/README.rst index b0240895..815b430b 100644 --- a/README.rst +++ b/README.rst @@ -22,6 +22,8 @@ This project is no longer maintained ==================================== +**March 2020 Update**: Please go see the amazing `Pysa tutorial`_ that should get you up to speed finding security vulnerabilities in your Python codebase. + `Pyre`_ from Facebook is an amazing project that has a bright future and many smart people working on it. I would suggest, if you don't know that much about program analysis, that you understand how PyT works before diving into Pyre. Along with the `README's in most directories`_, there are the original `Master's Thesis`_ and `some slides`_. With that said, **I am happy to review pull requests and give you write permissions if you make more than a few.** @@ -30,6 +32,7 @@ There were a lot of great contributors to this project, I plan on working on oth If you are a security engineer with e.g. a Python codebase without type annotations, that Pyre won't handle, I would suggest you replace your sinks with a secure wrapper (something like `defusedxml`_), and alert off any uses of the standard sink. You can use `Bandit`_ to do this since dataflow analysis is not required, but you will have to trim it a lot, due to the high false-positive rate. +.. _Pysa tutorial: https://github.com/facebook/pyre-check/tree/master/pysa_tutorial#pysa-tutorial .. _Pyre: https://github.com/facebook/pyre-check .. _README's in most directories: https://github.com/python-security/pyt/tree/master/pyt#how-it-works .. _Master's Thesis: https://projekter.aau.dk/projekter/files/239563289/final.pdf